|
@@ -110,7 +110,8 @@ public class XiangMuLuRuService {
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
public ResultVo<String> xiangMuTuiFei(ZyDetailCharge param) {
|
|
|
List<Integer> yongHuJueSe = dao.huoQuJueSe(TokenUtil.getTokenUserId());
|
|
|
- if (!yongHuJueSe.contains(36)) {
|
|
|
+ log.info("角色:{}", JSON.toJSONString(yongHuJueSe));
|
|
|
+ if (!yongHuJueSe.contains(36) && !yongHuJueSe.contains(1)) {
|
|
|
return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, "您没有权限退费。");
|
|
|
}
|
|
|
if (param.getList() == null || param.getList().isEmpty()) {
|
|
@@ -454,6 +455,9 @@ public class XiangMuLuRuService {
|
|
|
*/
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
public ResultVo<String> yiZhuTuiFeiPiPei(String inpatientNo, Integer admissTimes, String deptCode) {
|
|
|
+ if (StringUtil.isBlank(inpatientNo) || admissTimes == null || StringUtil.isBlank(deptCode)) {
|
|
|
+ return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, "患者信息不全。");
|
|
|
+ }
|
|
|
int infantFlag = publicServer.getInfantFlag(inpatientNo);
|
|
|
inpatientNo = publicServer.getInpatientNo(inpatientNo);
|
|
|
Integer ledgerSn = publicServer.getLedgerSn(inpatientNo, admissTimes);
|
|
@@ -638,7 +642,31 @@ public class XiangMuLuRuService {
|
|
|
|
|
|
public ResultVo<List<ZyDetailCharge>> huoQuZhenShuKePiPei(String inpatientNo, Integer admissTimes, Integer ledgerSn, String chargeCodeMx, String execUnit, String startTime, String endTime, String riQiPaiXu) {
|
|
|
log.info("获取可以匹配的费用==》 住院号:{},次数:{},账页号:{},项目编码:{},执行科室:{}", inpatientNo, admissTimes, ledgerSn, chargeCodeMx, execUnit);
|
|
|
- return ResultVoUtil.success(dao.weiGuiZhenShuPiPei(publicServer.getInpatientNo(inpatientNo), admissTimes, ledgerSn, chargeCodeMx, execUnit, startTime, endTime, riQiPaiXu));
|
|
|
+ List<ZyDetailCharge> zhenShuFeiYong = dao.weiGuiZhenShuPiPei(publicServer.getInpatientNo(inpatientNo), admissTimes, ledgerSn, publicServer.getInfantFlag(inpatientNo),
|
|
|
+ chargeCodeMx, execUnit, startTime, endTime, riQiPaiXu);
|
|
|
+ List<ZyDetailCharge> yuEr = dao.tuiFeiYuEr1(publicServer.getInpatientNo(inpatientNo), admissTimes, ledgerSn, publicServer.getInfantFlag(inpatientNo),
|
|
|
+ chargeCodeMx, execUnit);
|
|
|
+ Map<String, ZyDetailCharge> yuErPiPei = new HashMap<>();
|
|
|
+ for (ZyDetailCharge item : yuEr) {
|
|
|
+ String key = item.getInpatientNo() + item.getAdmissTimes() + item.getDetailSn() + item.getChargeCodeMx();
|
|
|
+ yuErPiPei.put(key, item);
|
|
|
+ }
|
|
|
+ for (int i = 0, len = zhenShuFeiYong.size(); i < len; i++) {
|
|
|
+ ZyDetailCharge zy = zhenShuFeiYong.get(i);
|
|
|
+ String key = zy.getInpatientNo() + zy.getAdmissTimes() + zy.getDetailSn() + zy.getChargeCodeMx();
|
|
|
+ if (yuErPiPei.containsKey(key)) {
|
|
|
+ if (BigUtils.dengYu(yuErPiPei.get(key).getYiTuiFei(), 0)) {
|
|
|
+ zhenShuFeiYong.remove(i);
|
|
|
+ len--;
|
|
|
+ i--;
|
|
|
+ } else {
|
|
|
+ zy.setYiTuiFei(zy.getChargeFee().subtract(yuErPiPei.get(key).getYiTuiFei()));
|
|
|
+ log.info("原来:{},已退:{},余额:{}", zy.getChargeFee(), yuErPiPei.get(key).getYiTuiFei(), zy.getYiTuiFei());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ log.info("可匹配的费用:{}", JSON.toJSONString(zhenShuFeiYong));
|
|
|
+ return ResultVoUtil.success(zhenShuFeiYong);
|
|
|
}
|
|
|
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
@@ -658,24 +686,34 @@ public class XiangMuLuRuService {
|
|
|
} else if (zy.getTransFlagYb().equals("2") || zy.getOriDetailSn() != null) {
|
|
|
return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, "该负数费用已被正负相抵。");
|
|
|
}
|
|
|
- List<ZyDetailCharge> shuJuXinXi = dao.piPeiXinXi(inpatientNo, zyDetailCharge.getAdmissTimes(), zyDetailCharge.getLedgerSn(), infantFlag, detailSnList);
|
|
|
+ List<ZyDetailCharge> zhenShuShuJu = dao.piPeiXinXi(inpatientNo, zyDetailCharge.getAdmissTimes(), zyDetailCharge.getLedgerSn(), infantFlag, detailSnList);
|
|
|
+
|
|
|
+ Map<Integer, ZyDetailCharge> tuiFeiYuErPiPei = dao.tuiFeiYuEr2(inpatientNo, zyDetailCharge.getAdmissTimes(), zyDetailCharge.getLedgerSn(), infantFlag, detailSnList).stream().collect(
|
|
|
+ Collectors.toMap(ZyDetailCharge::getOriDetailSn, a -> a, (k1, k2) -> k1));
|
|
|
+
|
|
|
+
|
|
|
BigDecimal chargeFeeSum = new BigDecimal(0);
|
|
|
BigDecimal chargeAmountSum = new BigDecimal(0);
|
|
|
+
|
|
|
List<Integer> yongHuJueSe = dao.huoQuJueSe(TokenUtil.getTokenUserId());
|
|
|
List<String> zhiXinKeShi = dao.chaXunZhiZXinKeShi(zyDetailCharge.getDeptCode());
|
|
|
- for (ZyDetailCharge detailCharge : shuJuXinXi) {
|
|
|
+
|
|
|
+ for (ZyDetailCharge detailCharge : zhenShuShuJu) {
|
|
|
zyDetailCharge.setYaoPing(false);
|
|
|
ResultVo<String> LOGICAL_ERROR = getStringResultVo(yongHuJueSe, zhiXinKeShi, zyDetailCharge, detailCharge);
|
|
|
if (LOGICAL_ERROR != null) return LOGICAL_ERROR;
|
|
|
- if (detailCharge.getOriDetailSn() != null || detailCharge.getTransFlagYb().equals("2")) {
|
|
|
- return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, String.format("流水号为:{%d},已被退费请重新选择。", detailCharge.getDetailSn()));
|
|
|
+ if (detailCharge.getTransFlagYb().equals("2")) {
|
|
|
+ return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, String.format("流水号为:{%d},已被正负抵消。", detailCharge.getDetailSn()));
|
|
|
+ }
|
|
|
+ if (tuiFeiYuErPiPei.containsKey(detailCharge.getDetailSn())) {
|
|
|
+ detailCharge.setChargeFee(detailCharge.getChargeFee().add(tuiFeiYuErPiPei.get(detailCharge.getDetailSn()).getChargeFee()));
|
|
|
}
|
|
|
chargeFeeSum = chargeFeeSum.add(detailCharge.getChargeFee());
|
|
|
chargeAmountSum = chargeAmountSum.add(detailCharge.getChargeAmount());
|
|
|
}
|
|
|
- if (BigUtils.dengYu(chargeFeeSum, zy.getChargeFee().negate()) && BigUtils.dengYu(chargeAmountSum, zy.getChargeAmount().negate())) {
|
|
|
- if (shuJuXinXi.size() == 1) {
|
|
|
- dao.zhiYouYiGeJiuGenXingFuShuLiuShui(zyDetailCharge.getInpatientNo(), zyDetailCharge.getAdmissTimes(), zyDetailCharge.getLedgerSn(), zyDetailCharge.getDetailSn(), shuJuXinXi.get(0).getDetailSn());
|
|
|
+ if (BigUtils.bigDaYu(chargeFeeSum, zy.getChargeFee().negate()) || BigUtils.dengYu(chargeFeeSum, zy.getChargeFee().negate())) {
|
|
|
+ if (zhenShuShuJu.size() == 1) {
|
|
|
+ dao.zhiYouYiGeJiuGenXingFuShuLiuShui(zyDetailCharge.getInpatientNo(), zyDetailCharge.getAdmissTimes(), zyDetailCharge.getLedgerSn(), zyDetailCharge.getDetailSn(), zhenShuShuJu.get(0).getDetailSn());
|
|
|
publicServer.genXingYuanLiuShuiBiaoZhi(inpatientNo, zyDetailCharge.getAdmissTimes(), zyDetailCharge.getLedgerSn());
|
|
|
return ResultVoUtil.success(ExceptionEnum.SUCCESS_AND_NOTIFICATION, "费用匹配成功。");
|
|
|
} else {
|