Переглянути джерело

解决医嘱重复匹配。

xiaochan 4 роки тому
батько
коміт
73ba3c7e21

+ 20 - 21
src/main/java/thyyxxk/webserver/service/yibao/XiangMuLuRuService.java

@@ -58,8 +58,8 @@ public class XiangMuLuRuService {
         if (StringUtil.isBlank(param.getInpatientNo()) || param.getAdmissTimes() == null) {
             return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, "住院号或住院次数为空 <br/>๑乛◡乛๑");
         }
-        log.info("查询患者费用==》住院号{},住院次数:{},项目名称:{},费用类型:{},科室:{}", param.getInpatientNo(), param.getAdmissTimes(),
-                param.getChargeCode(), param.getOrderNo(), param.getDept());
+        log.info("查询患者费用==》住院号{},住院次数:{},项目名称:{},费用类型:{},科室:{},当前页:{},页大小:{}", param.getInpatientNo(), param.getAdmissTimes(),
+                param.getChargeCode(), param.getOrderNo(), param.getDept(), param.getCurrentPage(), param.getPageSize());
         int infantFlag = 0;
         // 如果是婴儿的话那么就需要截取 字符串了 在通过婴儿标识来判断
         if (param.getInpatientNo().contains("$")) {
@@ -68,15 +68,15 @@ public class XiangMuLuRuService {
         }
         Page<ZyDetailCharge> page = new Page<>(param.getCurrentPage(), param.getPageSize(), false);
         if (param.getFeiYongLeiXingCode() == 0) {
-            dao.huanZheXiangMuFeiYong(page, param.getInpatientNo(), param.getAdmissTimes(), param.getChargeCode(), infantFlag,
-                    param.getStartTime(), param.getEndTime(), param.getOrderNo(), param.getDept(), param.getRiQiPaiXu());
             page.setTotal(dao.huanZheFeiYongCount(param.getInpatientNo(), param.getAdmissTimes(), param.getChargeCode(), infantFlag,
                     param.getStartTime(), param.getEndTime(), param.getOrderNo(), param.getDept(), "not like"));
-        } else {
-            dao.huanZheYaoPinFeiYong(page, param.getInpatientNo(), param.getAdmissTimes(), param.getChargeCode(), infantFlag,
+            dao.huanZheXiangMuFeiYong(page, param.getInpatientNo(), param.getAdmissTimes(), param.getChargeCode(), infantFlag,
                     param.getStartTime(), param.getEndTime(), param.getOrderNo(), param.getDept(), param.getRiQiPaiXu());
+        } else {
             page.setTotal(dao.huanZheFeiYongCount(param.getInpatientNo(), param.getAdmissTimes(), param.getChargeCode(), infantFlag,
                     param.getStartTime(), param.getEndTime(), param.getOrderNo(), param.getDept(), "like"));
+            dao.huanZheYaoPinFeiYong(page, param.getInpatientNo(), param.getAdmissTimes(), param.getChargeCode(), infantFlag,
+                    param.getStartTime(), param.getEndTime(), param.getOrderNo(), param.getDept(), param.getRiQiPaiXu());
         }
         if (page.getTotal() == 0) {
             return ResultVoUtil.fail(ExceptionEnum.NO_DATA_EXIST, "没有查询到符合费用。");
@@ -161,7 +161,7 @@ public class XiangMuLuRuService {
                         return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, String.format("流水号为【%s】,请对应的执行科室进行退费。<br/>( ´Д`)y━・~~", pojo.getDetailSn()));
                     }
                     // 护士是不可以退药品的
-                    if (pojo.getChargeCode().equals("BILL01") || pojo.getChargeCode().equals("BILL02") || pojo.getChargeCode().equals("BILL28")) {
+                    if (pojo.getChargeCode().startsWith("BILL")) {
                         return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, String.format("流水号为【%s】,包含药品费用,无法退费。<br/>( ´Д`)y━・~~", pojo.getDetailSn()));
                     }
                 } else if (!param.getDeptCode().equals(pojo.getExecUnit())) {
@@ -403,6 +403,7 @@ public class XiangMuLuRuService {
         Map<String, List<ZyDetailCharge>> zhenShuMap = getYiZhuFeiYongZhenShu.stream().collect(
                 Collectors.groupingBy(item -> item.getOrderNo() + DateUtil.formatDatetime(item.getChargeDate()) + item.getChargeCodeMx() + item.getChargeAmount() + item.getLedgerSn())
         );
+
         // 用负数拼接的 key 去查找
         for (ZyDetailCharge fuShu : getYiZhuFeiYongFuShu) {
             String key = fuShu.getOrderNo() + DateUtil.formatDatetime(fuShu.getChargeDate()) + fuShu.getChargeCodeMx() + fuShu.getChargeAmount().negate() + fuShu.getLedgerSn();
@@ -419,8 +420,17 @@ public class XiangMuLuRuService {
                 erCiPiPei.add(fuShu);
             }
         }
+        if (piPei.size() > 0) {
+            // 100 条的更新  ListUtils.partition 用来拆分 list size 是拆分的条数
+            List<List<ZyDetailCharge>> fenDuan = ListUtils.partition(piPei, 100);
+            for (List<ZyDetailCharge> list : fenDuan) {
+                dao.yiZhuTuiFeiPiPei(inpatientNo, admissTimes, list, infantFlag);
+            }
+        }
         // 下面是二次匹配
         if (erCiPiPei.size() > 0) {
+            // 这里清空一次 再次二次匹配
+            piPei.clear();
             List<String> chargeCodeMxList = new ArrayList<>();
             // 去掉重复的项目编码
             erCiPiPei.forEach(item -> {
@@ -428,7 +438,7 @@ public class XiangMuLuRuService {
                     chargeCodeMxList.add(item.getChargeCodeMx());
                 }
             });
-            // 获取负数的退费数据 主要是用来判断 这一条的是否退费了。
+            // 获取负数的退费数据 主要是用来判断 这一条的是否退费了。
             List<ZyDetailCharge> tuiFeiList = dao.tuiFeiList(inpatientNo, admissTimes, infantFlag);
             // 在这里获取 正数
             QueryWrapper<ZyDetailCharge> qw = new QueryWrapper<>();
@@ -478,20 +488,9 @@ public class XiangMuLuRuService {
                 dao.yiZhuTuiFeiPiPei(inpatientNo, admissTimes, list, infantFlag);
             }
             log.info("医嘱退费匹配 ==》 操作人:{},住院号:{},住院次数:{}", TokenUtil.getTokenUserId(), inpatientNo, admissTimes);
-            if (getYiZhuFeiYongFuShu.size() != piPei.size()) {
-                return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, String.format("共有<span style='color:teal'>【%d】</span>条,有<span style='color:red'>【%d】</span>条匹配失败,可能原因退多了" +
-                                "<br />如: 收了9条费用,但是一次性退了 9 条,这样现在是不允许,需要一条一条退。", getYiZhuFeiYongFuShu.size(),
-                        getYiZhuFeiYongFuShu.size() - piPei.size()));
-            }
-            return ResultVoUtil.success(ExceptionEnum.SUCCESS_AND_NOTIFICATION, String.format("医嘱退费匹配,共有<span style='color:teal'>【%d】</span>条,匹配成功【%d】条,*.。(๑・∀・๑)*.。",
-                    getYiZhuFeiYongFuShu.size(), piPei.size()));
-        } else {
-            if (getYiZhuFeiYongFuShu.size() > 0) {
-                return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, String.format("共有<span style='color:teal'>【%d】</span>条匹配失败,可能原因退多了" +
-                        "<br />如: 收了9条费用,但是一次性退了 9 条,这样现在是不允许,需要一条一条退。", getYiZhuFeiYongFuShu.size()));
-            }
-            return ResultVoUtil.fail(ExceptionEnum.NO_DATA_EXIST, "该患者没有可以匹配的医嘱退费 |д・)っ");
+            return ResultVoUtil.success(ExceptionEnum.SUCCESS_AND_NOTIFICATION, "匹配成功");
         }
+        return ResultVoUtil.fail(ExceptionEnum.NO_DATA_EXIST, "该患者没有可以匹配的医嘱退费 |д・)っ");
     }
 
     /**