|
@@ -7,7 +7,7 @@ import org.springframework.stereotype.Service;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
import thyyxxk.webserver.config.exception.ExceptionEnum;
|
|
|
import thyyxxk.webserver.dao.his.yibao.TransferInOfExpensesDao;
|
|
|
-import thyyxxk.webserver.dao.his.yibao.xiangMuLuRuDao;
|
|
|
+import thyyxxk.webserver.dao.his.yibao.XiangMuLuRuDao;
|
|
|
import thyyxxk.webserver.entity.ResultVo;
|
|
|
import thyyxxk.webserver.entity.datamodify.FeiYongLeiXin;
|
|
|
import thyyxxk.webserver.entity.datamodify.GetDropdownBox;
|
|
@@ -30,14 +30,14 @@ import java.util.Map;
|
|
|
*/
|
|
|
@Service
|
|
|
@Slf4j
|
|
|
-public class xiangMuLuRuService {
|
|
|
+public class XiangMuLuRuService {
|
|
|
|
|
|
- private final xiangMuLuRuDao dao;
|
|
|
+ private final XiangMuLuRuDao dao;
|
|
|
|
|
|
private final TransferInOfExpensesDao transferInOfExpensesDao;
|
|
|
|
|
|
@Autowired
|
|
|
- public xiangMuLuRuService(xiangMuLuRuDao dao, TransferInOfExpensesDao transferInOfExpensesDao) {
|
|
|
+ public XiangMuLuRuService(XiangMuLuRuDao dao, TransferInOfExpensesDao transferInOfExpensesDao) {
|
|
|
this.dao = dao;
|
|
|
this.transferInOfExpensesDao = transferInOfExpensesDao;
|
|
|
}
|
|
@@ -162,7 +162,7 @@ public class xiangMuLuRuService {
|
|
|
@Transactional
|
|
|
public ResultVo<String> xiangMuFeiYongShangChuan(ZyDetailCharge param) {
|
|
|
if (StringUtil.isBlank(param.getInpatientNo()) || param.getAdmissTimes() == null || param.getLedgerSn() == null || param.getList().size() == 0
|
|
|
- || StringUtil.isBlank(param.getSmallDept()) || StringUtil.isBlank(param.getZySerialNo())) {
|
|
|
+ || StringUtil.isBlank(param.getWard()) || StringUtil.isBlank(param.getDept()) || StringUtil.isBlank(param.getZySerialNo())) {
|
|
|
return ResultVoUtil.fail(ExceptionEnum.NULL_POINTER, "患者信息不全。");
|
|
|
}
|
|
|
// 获取最大流水号
|
|
@@ -175,7 +175,6 @@ public class xiangMuLuRuService {
|
|
|
for (ZyDetailCharge zyDetailCharge : param.getList()) {
|
|
|
zyDetailCharge.setDetailSn(maxDetailSn += 1);
|
|
|
// 判断患者的费用是否存在负数
|
|
|
- System.out.println(zyDetailCharge.getChargeAmount() + "1" + zyDetailCharge.getAmount().signum());
|
|
|
if (zyDetailCharge.getChargeAmount().signum() == -1 || zyDetailCharge.getAmount().signum() == -1) {
|
|
|
return ResultVoUtil.fail(ExceptionEnum.EXIST_NEGATIVE_FEES);
|
|
|
}
|
|
@@ -223,45 +222,32 @@ public class xiangMuLuRuService {
|
|
|
return ResultVoUtil.success(ExceptionEnum.SUCCESS_AND_NOTIFICATION, "保存模板成功。");
|
|
|
}
|
|
|
|
|
|
- /**
|
|
|
- * 匹配原来的退费流水号
|
|
|
- *
|
|
|
- * @param param 住院号 住院次数 项目编码 数量 金额
|
|
|
- * @return 返回 数据
|
|
|
- */
|
|
|
- public ResultVo<List<ZyDetailCharge>> getXiangTongFeiYong(ZyDetailCharge param) {
|
|
|
- log.info("退费匹配查询数据:{}", JSON.toJSONString(param));
|
|
|
- return ResultVoUtil.success(dao.getXiangTongFeiYong(param.getInpatientNo(), param.getAdmissTimes(), param.getChargeCode()));
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 匹配退费
|
|
|
- *
|
|
|
- * @param param 住院号 住院次数 流水号 匹配的流水号
|
|
|
- * @return 返回提示成功
|
|
|
- */
|
|
|
- public ResultVo<String> kaiShiPiPei(ZyDetailCharge param) {
|
|
|
- if (param.getDetailSn().equals(param.getOriDetailSn())) {
|
|
|
- return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, "无法与自身匹配");
|
|
|
- }
|
|
|
- List<ZyDetailCharge> list = dao.panDuanShuJuSFPiPei(param.getInpatientNo(), param.getAdmissTimes(), param.getDetailSn(), param.getOriDetailSn());
|
|
|
- if (list.size() > 2) {
|
|
|
- return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, "该费用存在相同流水号");
|
|
|
- }
|
|
|
- // 取出来自己肯定是负的为负数的费用 转成正的 在和下面的比较 来判断 数量和单价是否一直
|
|
|
- for (ZyDetailCharge zyDetailCharge : list) {
|
|
|
- if (zyDetailCharge.getDetailSn().equals(param.getDetailSn())) {
|
|
|
- if (zyDetailCharge.getChargeAmount().signum() == -1 && zyDetailCharge.getChargeFee().signum() == -1) {
|
|
|
- zyDetailCharge.setChargeAmount(zyDetailCharge.getChargeAmount().negate());
|
|
|
- zyDetailCharge.setChargeFee(zyDetailCharge.getChargeFee().negate());
|
|
|
+ public ResultVo<String> yiZhuTuiFeiPiPei(String inpatientNo, Integer admissTimes) {
|
|
|
+ log.info("医嘱退费匹配:住院号:{},住院次数:{}", inpatientNo, admissTimes);
|
|
|
+ List<ZyDetailCharge> getYiZhuFeiYongZhenShu = dao.getYiZhuFeiYong(inpatientNo, admissTimes, ">");
|
|
|
+ List<ZyDetailCharge> getYiZhuFeiYongFuShu = dao.getYiZhuFeiYong(inpatientNo, admissTimes, "<");
|
|
|
+
|
|
|
+ List<ZyDetailCharge> piPei = new ArrayList<>();
|
|
|
+ for (ZyDetailCharge fuShu : getYiZhuFeiYongFuShu) {
|
|
|
+ for (ZyDetailCharge zhenShu : getYiZhuFeiYongZhenShu) {
|
|
|
+ // 判断退费的数据匹配一条正数 通过医嘱号,收费日期,项目编码,数量
|
|
|
+ if (fuShu.getOrderNo().equals(zhenShu.getOrderNo())
|
|
|
+ && DateUtil.formatDatetime(fuShu.getChargeDate()).equals(DateUtil.formatDatetime(zhenShu.getChargeDate()))
|
|
|
+ && fuShu.getChargeCodeMx().equals(zhenShu.getChargeCodeMx())
|
|
|
+ && fuShu.getChargeAmount().negate().equals(zhenShu.getChargeAmount())) {
|
|
|
+ fuShu.setOriDetailSn(zhenShu.getDetailSn());
|
|
|
+ piPei.add(fuShu);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
- if (list.get(0).getChargeFee().equals(list.get(1).getChargeFee()) && list.get(0).getChargeAmount().equals(list.get(1).getChargeAmount())) {
|
|
|
- dao.kaiShiTuiFeiPiPei(param.getInpatientNo(), param.getAdmissTimes(), param.getDetailSn(), param.getOriDetailSn());
|
|
|
- log.info("退费匹配===> 操作人 :{},数据:{}", TokenUtil.getTokenUserId(), JSON.toJSONString(param));
|
|
|
- return ResultVoUtil.success(ExceptionEnum.SUCCESS_AND_NOTIFICATION, "匹配成功");
|
|
|
+ if (piPei.size() > 0) {
|
|
|
+ dao.yiZhuTuiFeiPiPei(inpatientNo, admissTimes, piPei);
|
|
|
+ return ResultVoUtil.success(ExceptionEnum.SUCCESS_AND_NOTIFICATION, String.format("医嘱退费匹配成功共匹配%d条", piPei.size()));
|
|
|
+ } else {
|
|
|
+ return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, "该患者没有可以匹配的医嘱退费");
|
|
|
}
|
|
|
- return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, "匹配费用金额不一致或匹配费用为负数。╮(╯▽╰)╭");
|
|
|
+
|
|
|
}
|
|
|
+
|
|
|
+
|
|
|
}
|