Browse Source

急诊抢救可以合并处方

lighter 10 months ago
parent
commit
60b525dd26

+ 8 - 0
src/main/java/thyyxxk/webserver/controller/medicalinsurance/SiMzController.java

@@ -75,6 +75,14 @@ public class SiMzController {
         return ResultVoUtil.success(service.getHistoryReceiptDetail(depositFile));
     }
 
+    @PostMapping("/mergeReceipts")
+    public ResultVo<MzDepositFile> mergeReceipts(@RequestBody List<MzDepositFile> list) {
+        if (list.isEmpty()) {
+            return ResultVoUtil.fail(ExceptionEnum.NULL_POINTER, "请选择需要合并的处方。");
+        }
+        return ResultVoUtil.success(service.mergeReceipts(list));
+    }
+
     @PassToken
     @PostMapping("/insertSiMzFees")
     public ResultVo<String> insertSiMzFees(@RequestBody List<MzReceipt> receipts) {

+ 12 - 7
src/main/java/thyyxxk/webserver/dao/his/medicalinsurance/SiMzDao.java

@@ -79,15 +79,20 @@ public interface SiMzDao {
     @Delete("delete from t_mt_receipt where patient_id=#{patNo} and times=#{times} and receipt_no=#{receiptNo}")
     void deleteCertainReceipt(String patNo, int times, int receiptNo);
 
-    @Insert("insert into t_mt_receipt (patient_id,times,receipt_no,order_no,item_no, " +
+    @Insert("<script>" +
+            "insert into t_mt_receipt (patient_id,times,receipt_no,order_no,item_no, " +
             "his_item_name,his_item_code,fee_date,input_date,medi_item_type,charge_fee, " +
             "price,quantity,drug_win,input_staff,input_man,serial_no,yb_trans_flag,charge_type, " +
-            "bill_item_code,drug_unit,hosp_appr_flag) values (" +
-            "#{patientId},#{times},#{receiptNo},#{orderNo},#{itemNo},#{drugName}, " +
-            "#{chargeItemCode},#{priceTime},#{chargeDate},#{mediItemType},#{chargeFee}, " +
-            "#{price},#{quantity},#{drugWin},#{doctorCode},#{doctorName},#{serialNo},0, " +
-            "#{groupNo},#{billItemCode},#{drugUnit},#{hospApprFlag})")
-    void insertBatchedMtFeeInfo(MzReceipt param);
+            "bill_item_code,drug_unit,hosp_appr_flag) values " +
+            "<foreach collection='list' item='item' separator=','>" +
+            "(#{item.patientId},#{item.times},#{item.receiptNo},#{item.orderNo},#{item.itemNo}," +
+            "#{item.drugName},#{item.chargeItemCode},#{item.priceTime},#{item.chargeDate},#{item.mediItemType}," +
+            "#{item.chargeFee},#{item.price},#{item.quantity},#{item.drugWin},#{item.doctorCode}," +
+            "#{item.doctorName},#{item.serialNo},0,#{item.groupNo},#{item.billItemCode},#{item.drugUnit}," +
+            "#{item.hospApprFlag})" +
+            "</foreach>" +
+            "</script>")
+    void insertMtReceipts(List<MzReceipt> list);
 
     @Delete("delete from t_mt_receipt where patient_id=#{patientId} and times=#{times} and " +
             "receipt_no=#{receiptNo} and order_no=#{orderNo}")

+ 1 - 0
src/main/java/thyyxxk/webserver/entity/markmtfees/MzDepositFile.java

@@ -15,6 +15,7 @@ public class MzDepositFile {
     private BigDecimal chargeFee;
     private Integer status;
     private Integer zgmztczf;
+    private String message;
 
     public BigDecimal getChargeFee() {
         if (null == chargeFee) {

+ 46 - 2
src/main/java/thyyxxk/webserver/service/medicalinsurance/SiMzService.java

@@ -188,6 +188,50 @@ public class SiMzService {
         return map;
     }
 
+    public MzDepositFile mergeReceipts(List<MzDepositFile> list) {
+        MzDepositFile minTimesVisit = list.get(0);
+        List<MzReceipt> mergedReceipts = new ArrayList<>();
+        for (MzDepositFile mzDepositFile : list) {
+            if (mzDepositFile.getTimes() < minTimesVisit.getTimes()) {
+                minTimesVisit = mzDepositFile;
+            }
+            List<MzReceipt> mzReceipts = dao.selectMzCharge(mzDepositFile.getPatNo(),
+                    mzDepositFile.getTimes(), mzDepositFile.getReceiptNo());
+            mzReceipts.removeIf(item -> StringUtil.isBlank(item.getNationalCode()));
+            mergedReceipts.addAll(mzReceipts);
+        }
+
+        String hasCovidExamFees = covidExamFeesDetect(mergedReceipts);
+        if (StringUtil.notBlank(hasCovidExamFees)) {
+            throw new BizException(ExceptionEnum.LOGICAL_ERROR, hasCovidExamFees);
+        }
+
+        for (int i = 0; i < mergedReceipts.size(); i++) {
+            MzReceipt receipt = mergedReceipts.get(i);
+            receipt.setTimes(minTimesVisit.getTimes());
+            receipt.setItemNo(i + 1);
+        }
+        dao.deleteAllReceipts(list.get(0).getPatNo(), minTimesVisit.getTimes());
+        insertBatchedMtReceipts(mergedReceipts);
+        String message = "合并处方成功,请使用【第 " + minTimesVisit.getTimes() + " 次就诊】办理医保业务。";
+        minTimesVisit.setMessage(message);
+        return minTimesVisit;
+    }
+
+    private void insertBatchedMtReceipts(List<MzReceipt> receipts) {
+        List<MzReceipt> tempList = new ArrayList<>();
+        for (MzReceipt item : receipts) {
+            tempList.add(item);
+            if (tempList.size() == 50) {
+                dao.insertMtReceipts(tempList);
+                tempList.clear();
+            }
+        }
+        if (!tempList.isEmpty()) {
+            dao.insertMtReceipts(tempList);
+        }
+    }
+
     private int calSettleFlag(MzVisit f) {
         int siCount = dao.selectSiCount(f.getPatientId(), f.getTimes());
         if (siCount > 0) {
@@ -286,7 +330,7 @@ public class SiMzService {
         if (StringUtil.notBlank(hasCovidExamFees)) {
             return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, hasCovidExamFees);
         }
-        receipts.forEach(dao::insertBatchedMtFeeInfo);
+        dao.insertMtReceipts(receipts);
         return ResultVoUtil.success();
     }
 
@@ -320,7 +364,7 @@ public class SiMzService {
                 dao.deleteCertainReceipt(receipt.getPatientId(), receipt.getTimes(), receiptNo);
             }
         }
-        receipts.forEach(dao::insertBatchedMtFeeInfo);
+        dao.insertMtReceipts(receipts);
         return ResultVoUtil.success();
     }