|
@@ -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, "该患者没有可以匹配的医嘱退费 |д・)っ");
|
|
|
}
|
|
|
|
|
|
/**
|