浏览代码

结算单上传审核流程修改

lihong 2 年之前
父节点
当前提交
99fc46ebc0

+ 56 - 5
src/main/java/thyyxxk/webserver/controller/medicalinsurance/SetlListUpldController.java

@@ -15,6 +15,7 @@ import thyyxxk.webserver.entity.datamodify.TYbSetModifyTime;
 import thyyxxk.webserver.entity.datamodify.TYbSetlModifyReq;
 import thyyxxk.webserver.entity.medicalinsurance.inpatient.ZyInactpatient;
 import thyyxxk.webserver.entity.medicalinsurance.setllistupld.PatientBldInfo;
+import thyyxxk.webserver.entity.medicalinsurance.setllistupld.SetlAuditLog;
 import thyyxxk.webserver.entity.medicalinsurance.setllistupld.UpldCollection;
 import thyyxxk.webserver.entity.medicalinsurance.setllistupldTemp.UpldCollectionTemp;
 import thyyxxk.webserver.entity.querydata.ConsumablesStatistics;
@@ -43,13 +44,25 @@ public class SetlListUpldController {
     public SetlListUpldController(SetlListUpldService service) {
         this.service = service;
     }
-
+    /**
+     * @description:选中上传
+     * @author: lihong
+     * @date: 2022/12/14 10:23
+     * @param: siPatInfos
+     * @return: thyyxxk.webserver.entity.ResultVo<java.lang.String>
+     **/
     @PostMapping("/upldSetlList")
     @PassToken
     public ResultVo<String> upldSetlList(@RequestBody List<SiSetlinfoTemp> siPatInfos) {
         return service.upldSetlListBatch(siPatInfos);
     }
-
+    /**
+     * @description: 全部上传
+     * @author: lihong
+     * @date: 2022/12/14 10:11
+     * @param: param
+     * @return: thyyxxk.webserver.entity.ResultVo<java.lang.String>
+     **/
     @PostMapping("/upldSetlListTimes")
     public ResultVo<String> upldSetlListTimes(@RequestBody JieSuanDanChaXun param) {
         return service.upldSetlListTimes(param);
@@ -69,7 +82,7 @@ public class SetlListUpldController {
     public ResultVo<List<Object>> getFundPayType() {
         return service.getFundPayType();
     }
-
+    //查询结算上传列表
     @PostMapping("/huoQuJieSuanRenYuan")
     public ResultVo<IPage<SiSetlinfoTemp>> huoQuJieSuanRenYuan(@RequestBody JieSuanDanChaXun param) {
         return service.huoQuJieSuanRenYuan(param);
@@ -111,11 +124,20 @@ public class SetlListUpldController {
                                                          @RequestParam("currentPage") long currentPage) {
         return service.shouShuBianMa(content, currentPage);
     }
-
+    /**
+     * @description:保存修改 并申请审核
+     * @author: lihong
+     * @date: 2022/12/13 8:59
+     * @param: param
+     * @return: thyyxxk.webserver.entity.ResultVo<java.lang.String>
+     **/
     @PostMapping("/setlModifyReq")
     public ResultVo<String> setlModifyReq(@RequestBody ZyInactpatient param) {
         return service.setlModifyReq(param);
     }
+
+
+
     /**
      * @description:drg分组测算
      * @author: lihong 
@@ -127,12 +149,41 @@ public class SetlListUpldController {
     public ResultVo<String> drgGroupTest(@RequestBody ZyInactpatient param) {
         return service.drgGroupTest(param);
     }
-
+    /**
+     * @description:审核通过 或 审核驳回
+     * @author: lihong
+     * @date: 2022/12/13 8:58
+     * @param: param
+     * @return: thyyxxk.webserver.entity.ResultVo<java.lang.String>
+     **/
     @PostMapping("/setlUploadAudit")
     public ResultVo<String> setlUploadAudit(@RequestBody TYbSetlModifyReq param) {
         return service.setlUploadAudit(param.getId(), param.getAuditFlag(), param.getAuditRemark(), param.getAuditStaff(), param.getAuditName());
     }
 
+    /**
+     * @description: 申请审核
+     * @author: lihong
+     * @date: 2022/12/13 8:59
+     * @param: setlAuditLog
+     * @return: thyyxxk.webserver.entity.ResultVo<java.lang.String>
+     **/
+    @PostMapping("/sendAudit")
+    public ResultVo<String> sendAudit(@RequestBody SetlAuditLog setlAuditLog) {
+        return service.sendAudit(setlAuditLog);
+    }
+    /**
+     * @description: 获取审核日志
+     * @author: lihong
+     * @date: 2022/12/13 9:01
+     * @param: setlAuditLog
+     * @return: thyyxxk.webserver.entity.ResultVo<java.lang.String>
+     **/
+    @GetMapping("/listSetlAuditLog")
+    public ResultVo<List<SetlAuditLog>> listSetlAuditLog(String patNo,Integer times) {
+        return service.listSetlAuditLog(patNo,times);
+    }
+
     @GetMapping("/xianZhiShiJian")
     public ResultVo<TYbSetModifyTime> xianZhiShiJian() {
         return service.xianZhiShiJian();

+ 54 - 3
src/main/java/thyyxxk/webserver/dao/his/medicalinsurance/UpIdCollectionDao.java

@@ -3,7 +3,12 @@ package thyyxxk.webserver.dao.his.medicalinsurance;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.toolkit.Constants;
-import org.apache.ibatis.annotations.*;
+import org.apache.ibatis.annotations.Delete;
+import org.apache.ibatis.annotations.Insert;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
+import org.apache.ibatis.annotations.Update;
 import thyyxxk.webserver.entity.datamodify.GetDropdownBox;
 import thyyxxk.webserver.entity.datamodify.TYbSetModifyTime;
 import thyyxxk.webserver.entity.datamodify.TYbSetlModifyReq;
@@ -838,6 +843,52 @@ public interface UpIdCollectionDao extends BaseMapper<SetlinfoUpld> {
             "</foreach>" +
             "</script>")
     void insertTransfusionInfo(String setlId, List<Bldinfo> list);
-
-
+    /**
+     * @description:插入结算单审核日志表
+     * @author: lihong
+     * @date: 2022/12/12 16:50
+     * @param: setlAuditLog
+     **/
+    @Insert("insert into  t_setl_audit_log(create_name, create_code, remark, audit_flag, audit_type, pat_no, times) " +
+            "    values (#{createName},#{createCode},#{remark},#{auditFlag},#{auditType},#{patNo},#{times})")
+    void insertSetlAuditLog(SetlAuditLog setlAuditLog);
+    /**
+     * @description:查询审核日志
+     * @author: lihong
+     * @date: 2022/12/13 9:25
+     * @param: patNo
+     * @param: times
+     **/
+    @Select("select create_name," +
+            "       create_code," +
+            "       create_time," +
+            "       remark," +
+            "       audit_flag," +
+            "       audit_type," +
+            "        id"+
+            "        from  t_setl_audit_log where pat_no=#{patNo} and times=#{times}  order by create_time")
+    List<SetlAuditLog> listSetlAuditLog(String patNo, Integer times);
+    /**
+     * @description:删除审核申请记录
+     * @author: lihong
+     * @date: 2022/12/13 10:17
+     * @param: patNo
+     * @param: times
+     **/
+    @Delete("delete  from  t_yb_setl_modify_req where pat_no=#{patNo} and times=#{times} ")
+    void deleteModifReq(String patNo, Integer times);
+    @Select("select audit_flag  from  t_yb_setl_modify_req where pat_no=#{patNo} and times=#{times}")
+    Integer getAuditFlag(String patNo, Integer times);
+    @Select(" <script> " +
+            " select audit_flag  from  t_yb_setl_modify_req where "+
+            " pat_no in"+
+                    "<foreach collection='patNos' item='patNo' open='(' close=')' separator=','>"+
+            " #{patNo}"+
+            " </foreach>"+
+            "  and times in"+
+            " <foreach collection='times' item='time' open='(' close=')' separator=','>"+
+            " #{time}"+
+            " </foreach>"+
+                        " </script>")
+    List<Integer> listSetlModifyReq(List<String> patNos, List<Integer> times);
 }

+ 35 - 0
src/main/java/thyyxxk/webserver/entity/medicalinsurance/setllistupld/SetlAuditLog.java

@@ -0,0 +1,35 @@
+package thyyxxk.webserver.entity.medicalinsurance.setllistupld;
+
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * @Description: 结算单上传审核日志表
+ * @Author:lihong
+ * @Date: 2022/12/12
+ */
+@Data
+public class SetlAuditLog {
+    /** 主键 */
+    private String id ;
+    /** 申请人或审核人 */
+    private String createName ;
+    /** 申请人或审核人编码 */
+    private String createCode ;
+    /** 提交时间 */
+    private Date createTime ;
+    /** 申请或审核备注 */
+    private String remark ;
+    /** (审核状态 0-待审核 1-审核通过 2-驳回 3-正在审核中) */
+    private Integer auditFlag ;
+    /** 类型 0.提交审核类型 1.审核类型 */
+    private Integer auditType ;
+    /** 病案号 */
+    private String patNo ;
+    /** 住院次数 */
+    private Integer times ;
+
+
+
+}

+ 108 - 5
src/main/java/thyyxxk/webserver/service/medicalinsurance/SetlListUpldService.java

@@ -622,6 +622,15 @@ public class SetlListUpldService {
         if (ListUtil.isBlank(param)) {
             return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, "请选择需要上传的患者。");
         }
+        List<String> patNos = param.stream().map(SiSetlinfoTemp::getPatNo).collect(Collectors.toList());
+        List<Integer> times = param.stream().map(SiSetlinfoTemp::getTimes).collect(Collectors.toList());
+        List<Integer> auditFlags = dao.listSetlModifyReq(patNos, times);
+        if(ListUtil.notBlank(auditFlags)){
+            boolean flag = auditFlags.stream().allMatch(obj -> "1".equals(auditFlags));
+            if(!flag){
+                return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, "选中上传的患者审核状态必须要全部为审核通过。");
+            }
+        }
         for (int i = 0; i < param.size(); i++) {
             SiSetlinfoTemp siPatInfo = param.get(i);
             try {
@@ -649,6 +658,11 @@ public class SetlListUpldService {
             if (ListUtil.isBlank(list)) {
                 return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, "没有要上传的信息。");
             }
+            // 只有全部为审核通过的数据才能上传
+            boolean isAllAuditPass = list.stream().allMatch(obj -> "1".equals(obj.getAuditFlag()));
+            if(!isAllAuditPass){
+                return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, "要所有数据为审核通过状态才能全部上传。");
+            }
             upldSetlListBatch(list);
         } catch (Exception e) {
             e.printStackTrace();
@@ -1029,7 +1043,7 @@ public class SetlListUpldService {
         }
         ZyInactpatient zy = dao.huanZheXinXi(patNo, times);
         List<Integer> code = publicServer.getRoleCode().getData();
-        if (!code.contains(1) && !code.contains(8)) {
+        if (!code.contains(1) && !code.contains(8) && !code.contains(49) && !code.contains(50)) {
             if (zy.getReferPhysician() == null || !zy.getReferPhysician().equals(TokenUtil.getTokenUserId())) {
                 return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, "您不是该患者的管床医生。");
             }
@@ -1157,7 +1171,11 @@ public class SetlListUpldService {
             return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, "不可以有相同的诊断。");
         }
         dao.delReq(param.getInpatientNo(), param.getAdmissTimes());
+        //发起审核
         dao.setlModifyReq(param.getInpatientNo(), param.getAdmissTimes(), TokenUtil.getTokenUserId(), param.getOpIdName(), param.getReqRemark());
+        //记录审核日志
+        SetlAuditLog setlAuditLog =  cretaSetlAuditLog(param,TokenUtil.getTokenUserId(),0,0);
+        saveAuditLog(setlAuditLog);
         if (ListUtil.notBlank(param.getYbZyDisDiag())) {
             dao.setlModDis(param.getYbZyDisDiag(), "zy_dis_diag_yb_modify");
         }
@@ -1165,7 +1183,19 @@ public class SetlListUpldService {
             dao.setlModBat(param.getBatjBa4(), "batj_ba4_modify");
         }
         dao.shenBao(param.getOperation(), param.getDecType(), param.getInpatientNo(), param.getAdmissTimes());
-        return ResultVoUtil.success(ExceptionEnum.SUCCESS_AND_NOTIFICATION, "申请成功,请等待医保科审核。");
+        return ResultVoUtil.success(ExceptionEnum.SUCCESS_AND_NOTIFICATION, "申请成功,请等待编码员进行审核。");
+    }
+
+    private SetlAuditLog cretaSetlAuditLog(ZyInactpatient param, String tokenUserId,Integer auditFlag,Integer auditType) {
+        SetlAuditLog setlAuditLog = new SetlAuditLog();
+        setlAuditLog.setPatNo(param.getInpatientNo());
+        setlAuditLog.setTimes(param.getAdmissTimes());
+        setlAuditLog.setRemark(param.getReqRemark());
+        setlAuditLog.setCreateCode(tokenUserId);
+        setlAuditLog.setCreateName(param.getOpIdName());
+        setlAuditLog.setAuditFlag(auditFlag);
+        setlAuditLog.setAuditType(auditType);
+        return setlAuditLog;
     }
 
     @Transactional(rollbackFor = Exception.class)
@@ -1182,18 +1212,33 @@ public class SetlListUpldService {
             // 审核通过需要 删除 并更新 现在占时用不到
 //            dao.delYuanShuJu(req.getPatNo(), req.getTimes());
 //            dao.auditTongGuo(req.getPatNo(), req.getTimes());
-            dao.updateReq(id, remark, auditStaff, auditName);
-            dao.upAuditFlag(id, auditFlag);
+            saveAuditLog(id,auditFlag,remark, auditStaff, auditName, req);
             return ResultVoUtil.success(ExceptionEnum.SUCCESS_AND_NOTIFICATION, "审核已通过 (*^▽^*)");
         }
         if (StringUtil.isBlank(remark)) {
             return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, "驳回信息不能为空。");
         }
-        dao.upAuditFlag(id, auditFlag);
+        //驳回
+        //审核 并 保存审核日志
+        saveAuditLog(id,auditFlag,remark, auditStaff, auditName, req);
         sendWxInfoService.sendCorpWxMsg(dao.yuanGongGongHao(req.getReqOpId()), String.format("医保结算单上传\n申请已驳回\n患者姓名:【%s】\n住院号:【%s】\n原因:【%s】\n审核人:【%s】", req.getPatName(), req.getPatNo(), remark, auditName));
         return ResultVoUtil.success(ExceptionEnum.SUCCESS_AND_NOTIFICATION, "审核已驳回 (╯﹏╰)b");
     }
 
+    private void saveAuditLog(Integer id,Integer auditFlag,String remark, String auditStaff, String auditName, TYbSetlModifyReq req) {
+        dao.updateReq(id, remark, auditStaff, auditName);
+        dao.upAuditFlag(id, auditFlag);
+        SetlAuditLog setlAuditLog = new SetlAuditLog();
+        setlAuditLog.setPatNo(req.getPatNo());
+        setlAuditLog.setTimes(req.getTimes());
+        setlAuditLog.setAuditType(1);
+        setlAuditLog.setAuditFlag(auditFlag);
+        setlAuditLog.setRemark(remark);
+        setlAuditLog.setCreateCode(auditStaff);
+        setlAuditLog.setCreateName(auditName);
+        saveAuditLog(setlAuditLog);
+    }
+
     public ResultVo<TYbSetModifyTime> xianZhiShiJian() {
         return ResultVoUtil.success(dao.xianZhiShiJian());
     }
@@ -1506,4 +1551,62 @@ public class SetlListUpldService {
             ++initSize;
         }
     }
+    /**
+     * @description: 发起审核
+     * @author: lihong
+     * @date: 2022/12/12 16:28
+     * @param: setlAuditLog
+     * @return: thyyxxk.webserver.entity.ResultVo<java.lang.String>
+     **/
+    public ResultVo<String> sendAudit(SetlAuditLog setlAuditLog) {
+        try {
+            //只有 驳回 或没有审核记录 才能 发起申请
+            Integer auditFlag = dao.getAuditFlag(setlAuditLog.getPatNo(), setlAuditLog.getTimes());
+             if(auditFlag == null  || auditFlag == 2){
+                 dao.deleteModifReq(setlAuditLog.getPatNo(),setlAuditLog.getTimes());
+                 dao.setlModifyReq(setlAuditLog.getPatNo(), setlAuditLog.getTimes(), TokenUtil.getTokenUserId(), setlAuditLog.getCreateName(), setlAuditLog.getRemark());
+                 saveAuditLog(setlAuditLog);
+             }else {
+                 throw new BizException(ExceptionEnum.LOGICAL_ERROR,"只有驳回状态或未申请状态才能发起审核流程");
+             }
+        }catch (Exception e){
+            log.error("发起审核失败", e);
+            throw new BizException(ExceptionEnum.LOGICAL_ERROR,"发起审核失败");
+        }
+        return ResultVoUtil.success(ExceptionEnum.SUCCESS_AND_NOTIFICATION,"成功");
+    }
+
+   private void saveAuditLog(SetlAuditLog setlAuditLog){
+       if(setlAuditLog.getAuditType()==null){
+           setlAuditLog.setAuditType(0);
+       }
+       if (StringUtil.isBlank(setlAuditLog.getRemark())) {
+           setlAuditLog.setRemark("申请审核");
+       }
+       if (setlAuditLog.getAuditFlag() == null) {
+           //设置为待审核
+           setlAuditLog.setAuditFlag(0);
+       }
+       if (StringUtil.isBlank(setlAuditLog.getCreateCode())) {
+           String code = TokenUtil.getTokenUserId();
+           setlAuditLog.setCreateCode(code);
+           setlAuditLog.setCreateName(publicServer.huoQuYuanGongXinXi(code).getName());
+       }
+       log.info("审核参数setlAuditLog:{}",JSON.toJSONString(setlAuditLog));
+           dao.insertSetlAuditLog(setlAuditLog);
+   }
+    /**
+     * @description:获取审核日志
+     * @author: lihong
+     * @date: 2022/12/13 9:04
+     * @param: patNo
+     * @param: times
+     * @return: thyyxxk.webserver.entity.ResultVo<java.lang.String>
+     **/
+    public ResultVo<List<SetlAuditLog>> listSetlAuditLog(String patNo, Integer times) {
+        AssertUtil.isnotBlank(patNo,"病案号不能为空");
+        AssertUtil.isnotBlank(times,"住院次数不能为空");
+        List<SetlAuditLog> setlAuditLogs = dao.listSetlAuditLog(patNo, times);
+        return ResultVoUtil.success(setlAuditLogs);
+    }
 }

+ 44 - 0
src/main/java/thyyxxk/webserver/utils/AssertUtil.java

@@ -0,0 +1,44 @@
+package thyyxxk.webserver.utils;
+
+import cn.hutool.core.collection.CollUtil;
+import org.apache.commons.lang3.StringUtils;
+import thyyxxk.webserver.config.exception.BizException;
+import thyyxxk.webserver.config.exception.ExceptionEnum;
+
+import java.util.Collection;
+import java.util.Map;
+
+/**
+ * @Description:断言工具类
+ * @Author:lihong
+ * @Date: 2022/12/13
+ */
+public class AssertUtil {
+
+    /**
+     * @description: 不能为空  支持集合 ,字符串 ,Map
+     * @author: lihong
+     * @date: 2022/12/13 9:23
+     * @param: object
+     * @param: message
+     **/
+    public static void isnotBlank(Object object,String message){
+        if (object == null) {
+            throw new BizException(ExceptionEnum.LOGICAL_ERROR, message);
+        }
+       else if (object instanceof Collection) {
+            if(CollUtil.isEmpty((Collection)object)){
+                throw new BizException(ExceptionEnum.LOGICAL_ERROR, message);
+            }
+        }
+        else if (object instanceof Map) {
+            if(CollUtil.isEmpty((Map)object)){
+                throw new BizException(ExceptionEnum.LOGICAL_ERROR, message);
+            }
+        }else {
+            if (StringUtils.isBlank(object.toString())) {
+                throw new BizException(ExceptionEnum.LOGICAL_ERROR, message);
+            }
+        }
+    }
+}