Procházet zdrojové kódy

医嘱匹配退费 以及优化查看详情

xiaochan před 4 roky
rodič
revize
e98bada8d7

+ 9 - 12
src/main/java/thyyxxk/webserver/controller/yibao/xiangMuLuRuController.java → src/main/java/thyyxxk/webserver/controller/yibao/XiangMuLuRuController.java

@@ -5,7 +5,7 @@ import org.springframework.web.bind.annotation.*;
 import thyyxxk.webserver.entity.ResultVo;
 import thyyxxk.webserver.entity.datamodify.GetDropdownBox;
 import thyyxxk.webserver.entity.datamodify.ZyDetailCharge;
-import thyyxxk.webserver.service.yibao.xiangMuLuRuService;
+import thyyxxk.webserver.service.yibao.XiangMuLuRuService;
 
 import java.util.List;
 
@@ -19,11 +19,11 @@ import java.util.List;
  */
 @RestController
 @RequestMapping("/xmlr")
-public class xiangMuLuRuController {
-    private final xiangMuLuRuService service;
+public class XiangMuLuRuController {
+    private final XiangMuLuRuService service;
 
     @Autowired
-    public xiangMuLuRuController(xiangMuLuRuService service) {
+    public XiangMuLuRuController(XiangMuLuRuService service) {
         this.service = service;
     }
 
@@ -58,6 +58,7 @@ public class xiangMuLuRuController {
         return service.queryXiangMu(pyCode);
     }
 
+
     @PostMapping("/xiangMuFeiYongShangChuan")
     public ResultVo<String> xiangMuFeiYongShangChuan(@RequestBody ZyDetailCharge param) {
         return service.xiangMuFeiYongShangChuan(param);
@@ -68,13 +69,9 @@ public class xiangMuLuRuController {
         return service.shangChuanMuBan(zyDetailCharge);
     }
 
-    @PostMapping("/getXiangTongFeiYong")
-    public ResultVo<List<ZyDetailCharge>> getXiangTongFeiYong(@RequestBody ZyDetailCharge param) {
-        return service.getXiangTongFeiYong(param);
-    }
-
-    @PostMapping("/kaiShiPiPei")
-    public ResultVo<String> kaiShiPiPei(@RequestBody ZyDetailCharge param) {
-        return service.kaiShiPiPei(param);
+    @GetMapping("/yiZhuTuiFeiPiPei")
+    public ResultVo<String> yiZhuTuiFeiPiPei(@RequestParam("inpatientNo") String inpatientNo,
+                                             @RequestParam("admissTimes") Integer admissTimes) {
+        return service.yiZhuTuiFeiPiPei(inpatientNo, admissTimes);
     }
 }

+ 2 - 4
src/main/java/thyyxxk/webserver/dao/his/querydata/QueryDrugsAndProjectsDao.java

@@ -5,7 +5,6 @@ import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Select;
 import thyyxxk.webserver.entity.datamodify.GetDropdownBox;
-import thyyxxk.webserver.entity.datamodify.ZyDetailCharge;
 import thyyxxk.webserver.entity.querydata.QueryDrugsAndProjects;
 import thyyxxk.webserver.entity.reports.illegalchargesanalysis.IllegalChargeData;
 
@@ -255,13 +254,12 @@ public interface QueryDrugsAndProjectsDao {
             "select rtrim(inpatient_no) patient,admiss_times times,dis_diag_comment,dis_diag_no from ba_first_page1 where " +
             "inpatient_no in  " +
             "<foreach collection='list' item='item' index='index' open='(' close=')' separator=','>" +
-            "#{item.patient}" +
+            "#{item}" +
             "</foreach>" +
             "</script>")
-    List<QueryDrugsAndProjects> queryZhenDuan(@Param("list") List<QueryDrugsAndProjects> list);
+    List<QueryDrugsAndProjects> queryZhenDuan(@Param("list") List<String> list);
 
 
-    List<ZyDetailCharge> getHuanZheXinXi();
 }
 
 

+ 17 - 19
src/main/java/thyyxxk/webserver/dao/his/yibao/xiangMuLuRuDao.java → src/main/java/thyyxxk/webserver/dao/his/yibao/XiangMuLuRuDao.java

@@ -16,7 +16,7 @@ import java.util.List;
  * @date 2021-08-02 10:37
  */
 @Mapper
-public interface xiangMuLuRuDao {
+public interface XiangMuLuRuDao {
 
     /**
      * 获取患者的费用
@@ -418,7 +418,7 @@ public interface xiangMuLuRuDao {
             "<foreach collection='list' item='item' separator=','>" +
             "(#{zyDetailCharge.inpatientNo}, #{zyDetailCharge.admissTimes}, #{zyDetailCharge.ledgerSn}, #{item.detailSn}, getdate()  " +
             "  , #{zyDetailCharge.opIdCode}, #{item.chargeCode}, '0', '2', cast(#{item.chargeAmount,jdbcType=DECIMAL} as decimal(14,5))  " +
-            "  , '0', '0', NULL, #{zyDetailCharge.smallDept}, #{zyDetailCharge.reqDept}  " +
+            "  , '0', '0', NULL, #{zyDetailCharge.ward}, #{zyDetailCharge.dept}  " +
             "  , 0, '0', #{item.deptCode}, cast(#{item.amount,jdbcType=DECIMAL} as decimal(14,5)), getdate()  " +
             "  , #{zyDetailCharge.zySerialNo}, #{item.chargeCode}, '00')" +
             "</foreach>" +
@@ -581,24 +581,22 @@ public interface xiangMuLuRuDao {
     void baoCunMuBan(@Param("param") ZyDetailCharge param);
 
 
-    @Select("select charge_date,op_id_code,charge_fee,charge_amount,charge_code,charge_code_mx,detail_sn,ori_detail_sn,op_name = (select name from a_employee_mi where code = op_id_code)  " +
-            "from zy_detail_charge where  inpatient_no = #{inpatientNo} and admiss_times = #{admissTimes} and (charge_code = #{chargeCode} or charge_code_mx = #{chargeCode})")
-    List<ZyDetailCharge> getXiangTongFeiYong(@Param("inpatientNo") String inpatientNo,
-                                             @Param("admissTimes") Integer admissTimes,
-                                             @Param("chargeCode") String chargeCode);
+    @Select("select charge_date,charge_fee,charge_amount,charge_code_mx,detail_sn,ori_detail_sn,ABS(order_no) order_no " +
+            "from zy_detail_charge where  inpatient_no = #{inpatientNo} and admiss_times = #{admissTimes} and  LEN(order_no)  > 2  and " +
+            "ori_detail_sn is null and charge_amount ${ZF} 0 and charge_fee ${ZF} 0")
+    List<ZyDetailCharge> getYiZhuFeiYong(@Param("inpatientNo") String inpatientNo,
+                                         @Param("admissTimes") Integer admissTimes,
+                                         @Param("ZF") String ZF);
 
 
-    @Update("update zy_detail_charge set ori_detail_sn = #{oriDetailSn} where inpatient_no = #{inpatientNo} and admiss_times = #{admissTimes} and detail_sn = #{detailSn}")
-    void kaiShiTuiFeiPiPei(@Param("inpatientNo") String inpatientNo,
-                           @Param("admissTimes") Integer admissTimes,
-                           @Param("detailSn") Integer detailSn,
-                           @Param("oriDetailSn") Integer oriDetailSn);
-
-    @Select("select charge_date,op_id_code,charge_fee,charge_amount,charge_code,charge_code_mx,detail_sn,ori_detail_sn,op_name = (select name from a_employee_mi where code = op_id_code)\n" +
-            "from zy_detail_charge where  inpatient_no = #{inpatientNo} and admiss_times = #{admissTimes} and (detail_sn = #{ziShenDetailSn} or detail_sn = #{piPeiDetailSn})")
-    List<ZyDetailCharge> panDuanShuJuSFPiPei(@Param("inpatientNo") String inpatientNo,
-                                             @Param("admissTimes") Integer admissTimes,
-                                             @Param("ziShenDetailSn") Integer ziShenDetailSn,
-                                             @Param("piPeiDetailSn") Integer piPeiDetailSn);
+    @Update("<script>" +
+            "<foreach collection='list' item='item' index='index' open='' close='' separator=';'>" +
+            "update zy_detail_charge set ori_detail_sn = #{item.oriDetailSn} where inpatient_no= #{inpatientNo} and admiss_times = #{admissTimes} " +
+            "and detail_sn = #{item.detailSn} " +
+            "</foreach>" +
+            "</script>")
+    Integer yiZhuTuiFeiPiPei(@Param("inpatientNo") String inpatientNo,
+                             @Param("admissTimes") Integer admissTimes,
+                             @Param("list") List<ZyDetailCharge> yiZhuPiPei);
 
 }

+ 6 - 7
src/main/java/thyyxxk/webserver/entity/datamodify/ZyDetailCharge.java

@@ -66,7 +66,7 @@ public class ZyDetailCharge implements Serializable {
 
     private String deptCode;
 
-    private float orderNo;
+    private BigDecimal orderNo;
 
     private String opeFlag;
 
@@ -86,6 +86,9 @@ public class ZyDetailCharge implements Serializable {
 
     private String serial;
 
+    /**
+     * 住院流水号
+     */
     private String zySerialNo;
 
     private String doctorCode;
@@ -141,11 +144,6 @@ public class ZyDetailCharge implements Serializable {
      */
     private List<ZyDetailCharge> list;
 
-    /**
-     * 患者的科室
-     */
-    private String smallDept;
-
 
     // 下面这些是获取 项目录入模板的
 
@@ -202,7 +200,8 @@ public class ZyDetailCharge implements Serializable {
     /**
      * 申请科室
      */
-    private String reqDept;
+    private String dept;
+    private String ward;
 
     /**
      * 费用类型 名称

+ 26 - 1
src/main/java/thyyxxk/webserver/service/querydata/QueryDrugsAndProjectsService.java

@@ -21,6 +21,7 @@ import thyyxxk.webserver.utils.ExcelUtil;
 import thyyxxk.webserver.utils.ResultVoUtil;
 
 import javax.servlet.http.HttpServletResponse;
+import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -81,7 +82,31 @@ public class QueryDrugsAndProjectsService {
     public ResultVo<List<QueryDrugsAndProjects>> chaKanXiangQing(QueryDrugsAndProjects param) {
         log.info("查看项目或药品详情:{}", JSON.toJSONStringWithDateFormat(param, GetDateFormat.DATE_TIME));
         List<QueryDrugsAndProjects> xiangMuList = dao.chaXunXiangMuHuoYaoPinJuTiXinXi(param.getStartTime(), param.getEndTime(), param.getChargeCode());
-        List<QueryDrugsAndProjects> zhenDuanList = dao.queryZhenDuan(xiangMuList);
+
+        // 获取患者 id 的 list
+        List<String> patientList = new ArrayList<>();
+        // 获取诊断的详细情况
+        List<QueryDrugsAndProjects> zhenDuanList = new ArrayList<>();
+
+        for (QueryDrugsAndProjects projects : xiangMuList) {
+            if (xiangMuList.size() > 2100) {
+                if (patientList.size() < 2000) {
+                    if (!patientList.contains(projects.getPatient())) {
+                        patientList.add(projects.getPatient());
+                    }
+                } else {
+                    zhenDuanList.addAll(dao.queryZhenDuan(patientList));
+                    patientList = new ArrayList<>();
+                }
+            } else {
+                patientList.add(projects.getPatient());
+            }
+        }
+
+        if (patientList.size() < 2100) {
+            zhenDuanList.addAll(dao.queryZhenDuan(patientList));
+        }
+
         for (QueryDrugsAndProjects xiangMu : xiangMuList) {
             StringBuilder pjZhenDuan = new StringBuilder();
             for (QueryDrugsAndProjects zhenDuan : zhenDuanList) {

+ 4 - 4
src/main/java/thyyxxk/webserver/service/yibao/TransferInOfExpensesService.java

@@ -10,7 +10,7 @@ import thyyxxk.webserver.config.exception.ExceptionEnum;
 import thyyxxk.webserver.constants.Capacity;
 import thyyxxk.webserver.constants.GetDateFormat;
 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;
@@ -41,11 +41,11 @@ public class TransferInOfExpensesService {
 
     private final TransferInOfExpensesDao dao;
 
-    private final xiangMuLuRuDao xiangMuLuRuDao;
+    private final XiangMuLuRuDao xiangMuLuRuDao;
 
 
     @Autowired
-    public TransferInOfExpensesService(TransferInOfExpensesDao dao, thyyxxk.webserver.dao.his.yibao.xiangMuLuRuDao xiangMuLuRuDao) {
+    public TransferInOfExpensesService(TransferInOfExpensesDao dao, XiangMuLuRuDao xiangMuLuRuDao) {
         this.dao = dao;
         this.xiangMuLuRuDao = xiangMuLuRuDao;
     }
@@ -103,7 +103,7 @@ public class TransferInOfExpensesService {
             BigDecimal sum = new BigDecimal(0);
             for (ZyDetailCharge zyDetailCharge : sumList) {
                 sum = sum.add(zyDetailCharge.getChargeFee().multiply(zyDetailCharge.getChargeAmount()));
-                
+
             }
             map.put("data", list);
             map.put("total", page.getTotal());

+ 28 - 42
src/main/java/thyyxxk/webserver/service/yibao/xiangMuLuRuService.java → src/main/java/thyyxxk/webserver/service/yibao/XiangMuLuRuService.java

@@ -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, "匹配费用金额不一致或匹配费用为负数。╮(╯▽╰)╭");
+
     }
+
+
 }