Forráskód Böngészése

添加分析医保结算患者费用类别的定时任务。

lighter 3 éve
szülő
commit
43ee681bbb

+ 2 - 2
src/main/java/thyyxxk/webserver/constants/sidicts/MedChrgitmType.java

@@ -27,9 +27,9 @@ public enum MedChrgitmType {
 
     WEST_MED("09", "西药费"),
 
-    CHN_PTNT("10", "中药饮片费"),
+    HERBAL("10", "中药饮片费"),
 
-    HERBAL("11", "中成药费"),
+    CHN_PTNT("11", "中成药费"),
 
     HEAL("12", "一般诊疗费"),
 

+ 13 - 0
src/main/java/thyyxxk/webserver/dao/his/medicalinsurance/SiSetlinfoDao.java

@@ -65,4 +65,17 @@ public interface SiSetlinfoDao extends BaseMapper<SiSetlinfo> {
                                   @Param("begntime") String begntime,
                                   @Param("endtime") String endtime);
 
+    @Select("select psn_no,setl_id,mdtrt_id,insuplc_admdvs,charges_analyzed from t_si_setlinfo with(nolock) " +
+            "where revoked=0 and setl_type=21 and charges_analyzed=0")
+    List<SiSetlinfo> selectUnAnalyzedData();
+
+    @Update("update t_si_setlinfo set charge_western_medicine=#{chargeWesternMedicine}, " +
+            "charge_patent_medicine=#{chargePatentMedicine},charge_herbal=#{chargeHerbal}, " +
+            "charge_examination=#{chargeExamination},charge_treatment=#{chargeTreatment}," +
+            "charge_operation=#{chargeOperation},charge_nursing=#{chargeNursing}, " +
+            "charge_sanitary_material=#{chargeSanitaryMaterial},charge_assay=#{chargeAssay}, " +
+            "charge_general_diagnosis=#{chargeGeneralDiagnosis},charge_inspection=#{chargeInspection}, " +
+            "charge_registration=#{chargeRegistration},charge_bed=#{chargeBed},charge_others=#{chargeOthers}, " +
+            "charges_analyzed=#{chargesAnalyzed} where setl_id=#{setlId}")
+    void fillAnalyzedData(SiSetlinfo setlinfo);
 }

+ 76 - 0
src/main/java/thyyxxk/webserver/entity/medicalinsurance/setlinfo/SiSetlinfo.java

@@ -10,6 +10,7 @@ import com.fasterxml.jackson.annotation.JsonFormat;
 import lombok.Data;
 import org.springframework.format.annotation.DateTimeFormat;
 
+import java.math.BigDecimal;
 import java.util.Date;
 
 @Data
@@ -278,6 +279,81 @@ public class SiSetlinfo implements Serializable {
 	 * */
 	private Integer hiPaymtd;
 
+	/**
+	 * 西药费
+	 */
+	private BigDecimal chargeWesternMedicine;
+
+	/**
+	 * 中成药费
+	 */
+	private BigDecimal chargePatentMedicine;
+
+	/**
+	 * 中药饮片费
+	 */
+	private BigDecimal chargeHerbal;
+
+	/**
+	 * 诊查费
+	 */
+	private BigDecimal chargeExamination;
+
+	/**
+	 * 治疗费
+	 */
+	private BigDecimal chargeTreatment;
+
+	/**
+	 * 手术费
+	 */
+	private BigDecimal chargeOperation;
+
+	/**
+	 * 护理费
+	 */
+	private BigDecimal chargeNursing;
+
+	/**
+	 * 卫生材料费
+	 */
+	private BigDecimal chargeSanitaryMaterial;
+
+	/**
+	 * 化验费
+	 */
+	private BigDecimal chargeAssay;
+
+	/**
+	 * 一般诊疗费
+	 */
+	private BigDecimal chargeGeneralDiagnosis;
+
+	/**
+	 * 检查费
+	 */
+	private BigDecimal chargeInspection;
+
+	/**
+	 * 挂号费
+	 */
+	private BigDecimal chargeRegistration;
+
+	/**
+	 * 床位费
+	 */
+	private BigDecimal chargeBed;
+
+	/**
+	 * 其他费
+	 */
+	private BigDecimal chargeOthers;
+
+	/**
+	 * 是否已分析过收费类别:0-否,1-是
+	 * */
+	private Integer chargesAnalyzed;
+
 	@TableField(exist = false)
 	private String gendName;
 	@TableField(exist = false)

+ 84 - 0
src/main/java/thyyxxk/webserver/scheduled/AnalyzeSiInpatientCharges.java

@@ -0,0 +1,84 @@
+package thyyxxk.webserver.scheduled;
+
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+import thyyxxk.webserver.config.exception.ExceptionEnum;
+import thyyxxk.webserver.constants.YesOrNo;
+import thyyxxk.webserver.constants.sidicts.MedChrgitmType;
+import thyyxxk.webserver.dao.his.medicalinsurance.SiSetlinfoDao;
+import thyyxxk.webserver.entity.ResultVo;
+import thyyxxk.webserver.entity.medicalinsurance.query.SiSetlFeeDetl;
+import thyyxxk.webserver.entity.medicalinsurance.setlinfo.SiSetlinfo;
+import thyyxxk.webserver.service.medicalinsurance.SiQueryService;
+
+import java.math.BigDecimal;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+@Slf4j
+@Component
+public class AnalyzeSiInpatientCharges {
+    @Value("${execute-scheduled}")
+    private Boolean executeScheduled;
+    private final SiQueryService service;
+    private final SiSetlinfoDao dao;
+
+    @Autowired
+    public AnalyzeSiInpatientCharges(SiQueryService service, SiSetlinfoDao dao) {
+        this.service = service;
+        this.dao = dao;
+    }
+
+    @Scheduled(cron = "0 0 3 * * ?")
+    public void notifyDailyCount() {
+        if (executeScheduled) {
+            startAnalyze();
+        }
+    }
+
+    private void startAnalyze() {
+        List<SiSetlinfo> unAnalyzedData = dao.selectUnAnalyzedData();
+        for (int i = 0; i < unAnalyzedData.size(); i++) {
+            SiSetlinfo setlinfo = unAnalyzedData.get(i);
+            ResultVo<List<SiSetlFeeDetl>> chargeList = service.getChrgitems(setlinfo.getPsnNo(), setlinfo.getSetlId(),
+                    setlinfo.getMdtrtId(), setlinfo.getInsuplcAdmdvs());
+            if (chargeList.getCode() == ExceptionEnum.SUCCESS.getCode()) {
+                analyzeChargeItems(setlinfo, chargeList.getData());
+            }
+            setlinfo.setChargesAnalyzed(YesOrNo.YES.getCode());
+            dao.fillAnalyzedData(setlinfo);
+            log.info("【序号:{}】结算ID为【{}】的医保患者结算收费类别已分析完成。", i+1, setlinfo.getSetlId());
+        }
+    }
+
+    private void analyzeChargeItems(SiSetlinfo setlinfo, List<SiSetlFeeDetl> chargeItems) {
+        Map<String, BigDecimal> map = new HashMap<>();
+        chargeItems.forEach(itm -> {
+            BigDecimal itmfeeSum = new BigDecimal(itm.getDetItemFeeSumamt());
+            String typeKey = itm.getMedChrgitmType();
+            if (map.containsKey(typeKey)) {
+                map.replace(typeKey, map.get(typeKey).add(itmfeeSum));
+            } else {
+                map.put(typeKey, itmfeeSum);
+            }
+        });
+        setlinfo.setChargeWesternMedicine(map.get(MedChrgitmType.WEST_MED.getCode()));
+        setlinfo.setChargePatentMedicine(map.get(MedChrgitmType.CHN_PTNT.getCode()));
+        setlinfo.setChargeHerbal(map.get(MedChrgitmType.HERBAL.getCode()));
+        setlinfo.setChargeExamination(map.get(MedChrgitmType.CLINIC.getCode()));
+        setlinfo.setChargeTreatment(map.get(MedChrgitmType.TREAT.getCode()));
+        setlinfo.setChargeOperation(map.get(MedChrgitmType.SURGERY.getCode()));
+        setlinfo.setChargeNursing(map.get(MedChrgitmType.NURSING.getCode()));
+        setlinfo.setChargeSanitaryMaterial(map.get(MedChrgitmType.MATERIAL.getCode()));
+        setlinfo.setChargeAssay(map.get(MedChrgitmType.EXAM.getCode()));
+        setlinfo.setChargeGeneralDiagnosis(map.get(MedChrgitmType.HEAL.getCode()));
+        setlinfo.setChargeInspection(map.get(MedChrgitmType.INSPECTION.getCode()));
+        setlinfo.setChargeRegistration(map.get(MedChrgitmType.REG.getCode()));
+        setlinfo.setChargeBed(map.get(MedChrgitmType.BED.getCode()));
+        setlinfo.setChargeOthers(map.get(MedChrgitmType.OTH.getCode()));
+    }
+}

+ 1 - 1
src/main/java/thyyxxk/webserver/service/medicalinsurance/SiQueryService.java

@@ -1268,7 +1268,7 @@ public class SiQueryService {
         return cuminfo;
     }
 
-    private ResultVo<List<SiSetlFeeDetl>> getChrgitems(String psnNo, String setlId, String mdtrtId, String admdvs) {
+    public ResultVo<List<SiSetlFeeDetl>> getChrgitems(String psnNo, String setlId, String mdtrtId, String admdvs) {
         List<SiSetlFeeDetl> list = dao.selectAllSetlFeeDtle(mdtrtId);
         if (list.size() > 0) {
             return ResultVoUtil.success(list);