Jelajahi Sumber

门诊退费数据需要进行合并

0027005599 2 tahun lalu
induk
melakukan
ff7a863746

+ 37 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/job/OutpatientAuditLogJob.java

@@ -26,8 +26,12 @@ import org.quartz.JobExecutionException;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.scheduling.annotation.Async;
 
+import java.math.BigDecimal;
 import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
 import java.util.List;
+import java.util.Map;
 
 /**
  * 门诊事后监管任务生成
@@ -77,6 +81,7 @@ public class OutpatientAuditLogJob implements Job {
         outpatientSettleBill.setDoctorLevel(outpatientSettleBill.getDoctorLevel());
         AfterIncidentLog afterIncidentLog = afterIncidentLogService.addAfterIncidentLogByOutpatient(outpatientSettleBill);
         List<OutpatientSettlementDetails> outpatientSettlementDetailsList = outpatientSettlementDetailsService.lambdaQuery().eq(OutpatientSettlementDetails::getHisid, outpatientSettleBill.getHisid()).list();
+        sumDetail(outpatientSettlementDetailsList);
         List<AfterIncidentDetailLog> afterIncidentDetailLogList = new ArrayList<>();
         AfterIncidentDetailLog afterIncidentDetailLog = null;
 
@@ -152,5 +157,37 @@ public class OutpatientAuditLogJob implements Job {
         outpatientSettleBillService.lambdaUpdate().set(OutpatientSettleBill::getState, Constant.SUCCESS).eq(OutpatientSettleBill::getId, outpatientSettleBill.getId()).update();
     }
 
+    /**
+     * 抵扣负条数记录
+     * @param detailList
+     */
+    public void sumDetail(List<OutpatientSettlementDetails> detailList) {
+        Map<String, OutpatientSettlementDetails> projectCodeHospMap = new HashMap<>();
+        Iterator<OutpatientSettlementDetails> hospIterator = detailList.iterator();
+        boolean haveSubFlag = false;
+        while (hospIterator.hasNext()) {
+            OutpatientSettlementDetails hospitalizatioSettleDetail = hospIterator.next();
+            if (hospitalizatioSettleDetail.getNum() < 0) {
+                projectCodeHospMap.put(hospitalizatioSettleDetail.getItemId(), hospitalizatioSettleDetail);
+                hospIterator.remove();
+                haveSubFlag = true;
+            }
+        }
+        if (haveSubFlag) {
+            Iterator<OutpatientSettlementDetails> newHospIterator = detailList.iterator();
+            while (newHospIterator.hasNext()) {
+                OutpatientSettlementDetails hospitalizatioSettleDetail = newHospIterator.next();
+                String itemId = hospitalizatioSettleDetail.getItemId();
+                if (projectCodeHospMap.containsKey(itemId)) {
+                    OutpatientSettlementDetails subHospitalizatioSettleDetail = projectCodeHospMap.get(itemId);
+                    hospitalizatioSettleDetail.setNum(hospitalizatioSettleDetail.getNum() + subHospitalizatioSettleDetail.getNum());
+                    hospitalizatioSettleDetail.setCost(hospitalizatioSettleDetail.getCost().add(subHospitalizatioSettleDetail.getCost()).setScale(2, BigDecimal.ROUND_HALF_UP));
+                    if(hospitalizatioSettleDetail.getNum() == 0){
+                        newHospIterator.remove();
+                    }
+                }
+            }
+        }
+    }
 
 }