Преглед на файлове

优化结算统计功能

lighter преди 3 години
родител
ревизия
50d41c8ecc

+ 1 - 1
pom.xml

@@ -10,7 +10,7 @@
     </parent>
     <groupId>thyyxxk</groupId>
     <artifactId>web-server</artifactId>
-    <version>10.9.6</version>
+    <version>10.9.7</version>
     <name>web-server</name>
     <description>server for yibao-web</description>
     <properties>

+ 12 - 0
src/main/java/thyyxxk/webserver/constants/sidicts/Insutype.java

@@ -64,4 +64,16 @@ public enum Insutype {
         }
         return null;
     }
+
+    public static String getName(String code) {
+        if (StringUtil.isBlank(code)) {
+            return null;
+        }
+        for (Insutype insutype : Insutype.values()) {
+            if (code.trim().equals(insutype.getCode())) {
+                return insutype.getName();
+            }
+        }
+        return null;
+    }
 }

+ 10 - 10
src/main/java/thyyxxk/webserver/dao/his/medicalinsurance/SiQueryDao.java

@@ -277,10 +277,10 @@ public interface SiQueryDao {
 
     @Select("select pat_no,times,ledger_sn,insuplc_admdvs,medfee_sumamt,insutype,hifmi_pay,hifp_pay,cvlserv_pay, " +
             "fundPaySumamt=(select sum(b.fund_payamt) from t_si_setldetail b where b.pat_no=a.pat_no " +
-            "and b.times=a.times and b.ledger_sn=a.ledger_sn), " +
+            "and b.times=a.times and b.ledger_sn=a.ledger_sn),a.insutype, " +
             "hospPay=(select sum(b.fund_payamt) from t_si_setldetail b where b.pat_no=a.pat_no " +
             "and b.times=a.times and b.ledger_sn=a.ledger_sn and (b.fund_pay_type='999996' or b.setl_proc_info='999996')) " +
-            "from t_si_setlinfo a where revoked=0 and setl_type=21 and insutype=#{insutype} and setl_time>=#{begntime} " +
+            "from t_si_setlinfo a where revoked=0 and setl_type=21 and insutype like #{insutype} and setl_time>=#{begntime} " +
             "and setl_time<=#{endtime} and insuplc_admdvs='439900' ")
     List<BaseSetlStatistics> selectBaseSetlStatisticsInProvinceLevel(@Param("begntime") String begntime,
                                                                            @Param("endtime") String endtime,
@@ -288,10 +288,10 @@ public interface SiQueryDao {
 
     @Select("select pat_no,times,ledger_sn,insuplc_admdvs,medfee_sumamt,insutype,hifmi_pay,hifp_pay,cvlserv_pay, " +
             "fundPaySumamt=(select sum(b.fund_payamt) from t_si_setldetail b where b.pat_no=a.pat_no " +
-            "and b.times=a.times and b.ledger_sn=a.ledger_sn), " +
+            "and b.times=a.times and b.ledger_sn=a.ledger_sn),a.insutype, " +
             "hospPay=(select sum(b.fund_payamt) from t_si_setldetail b where b.pat_no=a.pat_no " +
             "and b.times=a.times and b.ledger_sn=a.ledger_sn and (b.fund_pay_type='999996' or b.setl_proc_info='999996')) " +
-            "from t_si_setlinfo a where revoked=0 and setl_type=21 and insutype=#{insutype} and setl_time>=#{begntime} " +
+            "from t_si_setlinfo a where revoked=0 and setl_type=21 and insutype like #{insutype} and setl_time>=#{begntime} " +
             "and setl_time<=#{endtime} and insuplc_admdvs!='439900' and insuplc_admdvs like '4301%' ")
     List<BaseSetlStatistics> selectBaseSetlStatisticsInChangshaCity(@Param("begntime") String begntime,
                                                                            @Param("endtime") String endtime,
@@ -299,10 +299,10 @@ public interface SiQueryDao {
 
     @Select("select pat_no,times,ledger_sn,insuplc_admdvs,medfee_sumamt,insutype,hifmi_pay,hifp_pay,cvlserv_pay, " +
             "fundPaySumamt=(select sum(b.fund_payamt) from t_si_setldetail b where b.pat_no=a.pat_no " +
-            "and b.times=a.times and b.ledger_sn=a.ledger_sn), " +
+            "and b.times=a.times and b.ledger_sn=a.ledger_sn),a.insutype, " +
             "hospPay=(select sum(b.fund_payamt) from t_si_setldetail b where b.pat_no=a.pat_no " +
             "and b.times=a.times and b.ledger_sn=a.ledger_sn and (b.fund_pay_type='999996' or b.setl_proc_info='999996')) " +
-            "from t_si_setlinfo a where revoked=0 and setl_type=21 and insutype=#{insutype} and setl_time>=#{begntime} " +
+            "from t_si_setlinfo a where revoked=0 and setl_type=21 and insutype like #{insutype} and setl_time>=#{begntime} " +
             "and setl_time<=#{endtime} and insuplc_admdvs!='439900' and insuplc_admdvs like '43%' and insuplc_admdvs not like '4301%' ")
     List<BaseSetlStatistics> selectBaseSetlStatisticsInProvinceOtherCities(@Param("begntime") String begntime,
                                                                            @Param("endtime") String endtime,
@@ -310,10 +310,10 @@ public interface SiQueryDao {
 
     @Select("select pat_no,times,ledger_sn,insuplc_admdvs,medfee_sumamt,insutype,hifmi_pay,hifp_pay,cvlserv_pay, " +
             "fundPaySumamt=(select sum(b.fund_payamt) from t_si_setldetail b where b.pat_no=a.pat_no " +
-            "and b.times=a.times and b.ledger_sn=a.ledger_sn), " +
+            "and b.times=a.times and b.ledger_sn=a.ledger_sn),a.insutype, " +
             "hospPay=(select sum(b.fund_payamt) from t_si_setldetail b where b.pat_no=a.pat_no " +
             "and b.times=a.times and b.ledger_sn=a.ledger_sn and (b.fund_pay_type='999996' or b.setl_proc_info='999996')) " +
-            "from t_si_setlinfo a where revoked=0 and setl_type=21 and insutype=#{insutype} and setl_time>=#{begntime} " +
+            "from t_si_setlinfo a where revoked=0 and setl_type=21 and insutype like #{insutype} and setl_time>=#{begntime} " +
             "and setl_time<=#{endtime} and insuplc_admdvs!='439900' and insuplc_admdvs not like '43%' ")
     List<BaseSetlStatistics> selectBaseSetlStatisticsOutProvince(@Param("begntime") String begntime,
                                                                 @Param("endtime") String endtime,
@@ -321,10 +321,10 @@ public interface SiQueryDao {
 
     @Select("select pat_no,times,ledger_sn,insuplc_admdvs,medfee_sumamt,insutype,hifmi_pay,hifp_pay,cvlserv_pay, " +
             "fundPaySumamt=(select sum(b.fund_payamt) from t_si_setldetail b where b.pat_no=a.pat_no " +
-            "and b.times=a.times and b.ledger_sn=a.ledger_sn), " +
+            "and b.times=a.times and b.ledger_sn=a.ledger_sn),a.insutype, " +
             "hospPay=(select sum(b.fund_payamt) from t_si_setldetail b where b.pat_no=a.pat_no " +
             "and b.times=a.times and b.ledger_sn=a.ledger_sn and (b.fund_pay_type='999996' or b.setl_proc_info='999996')) " +
-            "from t_si_setlinfo a where revoked=0 and setl_type=21 and insutype=#{insutype} and setl_time>=#{begntime} " +
+            "from t_si_setlinfo a where revoked=0 and setl_type=21 and insutype like #{insutype} and setl_time>=#{begntime} " +
             "and setl_time<=#{endtime} ")
     List<BaseSetlStatistics> selectBaseSetlStatisticsInAllPlaces(@Param("begntime") String begntime,
                                                                  @Param("endtime") String endtime,

+ 1 - 0
src/main/java/thyyxxk/webserver/entity/medicalinsurance/query/BaseSetlStatistics.java

@@ -10,6 +10,7 @@ public class BaseSetlStatistics {
     private String insuplcAdmdvs;
     private String medfeeSumamt;
     private String insutype;
+    private String insutypeName;
     /**
      * 基本医疗保险统筹基金支出
      */

+ 1 - 2
src/main/java/thyyxxk/webserver/entity/medicalinsurance/query/SetlCondition.java

@@ -9,9 +9,8 @@ import javax.validation.constraints.NotNull;
 public class SetlCondition {
     @NotBlank(message = "请选择年月!")
     private String month;
-    @NotBlank(message = "请选择险种类型!")
-    private String insutype;
     @NotNull(message = "请选择参保地归属!")
     private Integer admdvsType;
+    private String insutype;
     private String insuplcAdmdvs;
 }

+ 23 - 1
src/main/java/thyyxxk/webserver/entity/medicalinsurance/query/SetlStatisticResult.java

@@ -1,2 +1,24 @@
-package thyyxxk.webserver.entity.medicalinsurance.query;public class SetlStatisticResult {
+package thyyxxk.webserver.entity.medicalinsurance.query;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class SetlStatisticResult {
+    private String admdvsName;
+    private String insuplcAdmdvs;
+    private Integer psnSumamt;
+    private String medfeeSumamt;
+    private String insutype;
+    private String insutypeName;
+    private String childKey;
+    private String baseMedFundpaySumamt;
+    private String bigDssFundpaySumamt;
+    private String clvFundpaySumamt;
+    private String othFundpaySumamt;
+    private String acctpaySumamt;
+    private String fundpaySumamt;
+    private Boolean isChildren;
+    private List<SetlStatisticResult> children;
 }

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

@@ -1192,23 +1192,26 @@ public class SiQueryService {
     public ResultVo<List<SetlStatisticResult>> selectSetlinfoStatistics(SetlCondition condition) {
         String begntime = condition.getMonth() + "-01 00:00:00.000";
         String endtime = DateUtil.getMonthEndtime(condition.getMonth());
+        String insutype = condition.getInsutype();
+        if (StringUtil.isBlank(insutype)) {
+            insutype = "%%";
+        }
         List<BaseSetlStatistics> baseStatistics;
-
         switch (condition.getAdmdvsType()) {
             case 1:
-                baseStatistics = dao.selectBaseSetlStatisticsInProvinceLevel(begntime, endtime, condition.getInsutype());
+                baseStatistics = dao.selectBaseSetlStatisticsInProvinceLevel(begntime, endtime, insutype);
                 break;
             case 2:
-                baseStatistics = dao.selectBaseSetlStatisticsInChangshaCity(begntime, endtime, condition.getInsutype());
+                baseStatistics = dao.selectBaseSetlStatisticsInChangshaCity(begntime, endtime, insutype);
                 break;
             case 3:
-                baseStatistics = dao.selectBaseSetlStatisticsInProvinceOtherCities(begntime, endtime, condition.getInsutype());
+                baseStatistics = dao.selectBaseSetlStatisticsInProvinceOtherCities(begntime, endtime, insutype);
                 break;
             case 4:
-                baseStatistics = dao.selectBaseSetlStatisticsOutProvince(begntime, endtime, condition.getInsutype());
+                baseStatistics = dao.selectBaseSetlStatisticsOutProvince(begntime, endtime, insutype);
                 break;
             default:
-                baseStatistics = dao.selectBaseSetlStatisticsInAllPlaces(begntime, endtime, condition.getInsutype());
+                baseStatistics = dao.selectBaseSetlStatisticsInAllPlaces(begntime, endtime, insutype);
         }
 
         if (null == baseStatistics || baseStatistics.isEmpty()) {
@@ -1216,9 +1219,10 @@ public class SiQueryService {
         }
 
         Map<String, String> regionMap = new HashMap<>();
-        Map<String, List<BaseSetlStatistics>> tempMap = new HashMap<>();
+        Map<String, List<BaseSetlStatistics>> admdvsSetldataMap = new HashMap<>();
 
         baseStatistics.forEach(itm -> {
+            itm.setInsutypeName(Insutype.getName(itm.getInsutype()));
             if (null != itm.getHospPay()) {
                 itm.setFundPaySumamt(DecimalUtil.minus(itm.getFundPaySumamt(), itm.getHospPay()));
             }
@@ -1232,29 +1236,37 @@ public class SiQueryService {
                 admdvsName = region.getCode() + region.getName();
                 regionMap.put(key, admdvsName);
             }
-            if (tempMap.containsKey(admdvsName)) {
-                tempMap.get(admdvsName).add(itm);
+            if (admdvsSetldataMap.containsKey(admdvsName)) {
+                admdvsSetldataMap.get(admdvsName).add(itm);
             } else {
                 List<BaseSetlStatistics> tempList = new ArrayList<>();
                 tempList.add(itm);
-                tempMap.put(admdvsName, tempList);
+                admdvsSetldataMap.put(admdvsName, tempList);
             }
         });
 
         List<SetlStatisticResult> resultList = new ArrayList<>();
-        for (Map.Entry<String, List<BaseSetlStatistics>> entry : tempMap.entrySet()) {
-            List<BaseSetlStatistics> mapStatistics = entry.getValue();
+        for (Map.Entry<String, List<BaseSetlStatistics>> entry : admdvsSetldataMap.entrySet()) {
+            List<BaseSetlStatistics> admdvsSetldataList = entry.getValue();
             SetlStatisticResult resultItem = new SetlStatisticResult();
             resultItem.setAdmdvsName(entry.getKey());
             resultItem.setInsuplcAdmdvs(entry.getValue().get(0).getInsuplcAdmdvs().substring(0, 4) + "00");
-            resultItem.setPsnSumamt(mapStatistics.size());
+            resultItem.setPsnSumamt(admdvsSetldataList.size());
+            if (StringUtil.notBlank(condition.getInsutype())) {
+                resultItem.setInsutype(condition.getInsutype());
+                resultItem.setInsutypeName(Insutype.getName(condition.getInsutype()));
+                resultItem.setChildKey(entry.getKey() + "-" + resultItem.getInsutypeName());
+            } else {
+                resultItem.setInsutypeName("-");
+                resultItem.setChildKey(entry.getKey());
+            }
             String medfeeSumamt = "0";
             String baseMedFundpaySumamt = "0";
             String bigDssFundpaySumamt = "0";
             String clvFundpaySumamt = "0";
             String othFundpaySumamt = "0";
             String fundpaySumamt = "0";
-            for (BaseSetlStatistics itm : mapStatistics) {
+            for (BaseSetlStatistics itm : admdvsSetldataList) {
                 medfeeSumamt = DecimalUtil.add(medfeeSumamt, itm.getMedfeeSumamt());
                 baseMedFundpaySumamt = DecimalUtil.add(baseMedFundpaySumamt, itm.getHifpPay());
                 bigDssFundpaySumamt = DecimalUtil.add(bigDssFundpaySumamt, itm.getHifmiPay());
@@ -1272,6 +1284,65 @@ public class SiQueryService {
             resultItem.setFundpaySumamt(fundpaySumamt);
             resultList.add(resultItem);
         }
+
+        if (StringUtil.isBlank(condition.getInsutype())) {
+            for (SetlStatisticResult resultItem : resultList) {
+                Map<String, List<BaseSetlStatistics>> insutypeSetldataMap = new HashMap<>();
+                String admdvsName = resultItem.getAdmdvsName();
+                List<BaseSetlStatistics> admdvsSetldataList = admdvsSetldataMap.get(admdvsName);
+                for (BaseSetlStatistics baseSetlStatistics : admdvsSetldataList) {
+                    if (insutypeSetldataMap.containsKey(baseSetlStatistics.getInsutypeName())) {
+                        insutypeSetldataMap.get(baseSetlStatistics.getInsutypeName()).add(baseSetlStatistics);
+                    } else {
+                        List<BaseSetlStatistics> tmpList = new ArrayList<>();
+                        tmpList.add(baseSetlStatistics);
+                        insutypeSetldataMap.put(baseSetlStatistics.getInsutypeName(), tmpList);
+                    }
+                }
+                if (insutypeSetldataMap.size() == 1) {
+                    resultItem.setInsutype(admdvsSetldataList.get(0).getInsutype());
+                    resultItem.setInsutypeName(admdvsSetldataList.get(0).getInsutypeName());
+                    continue;
+                }
+                List<SetlStatisticResult> children = new ArrayList<>();
+                for (Map.Entry<String, List<BaseSetlStatistics>> entry : insutypeSetldataMap.entrySet()) {
+                    List<BaseSetlStatistics> insutypeSetldataList = entry.getValue();
+                    SetlStatisticResult result = new SetlStatisticResult();
+                    result.setAdmdvsName(resultItem.getAdmdvsName());
+                    result.setInsuplcAdmdvs(resultItem.getInsuplcAdmdvs());
+                    result.setPsnSumamt(insutypeSetldataList.size());
+                    result.setInsutype(entry.getValue().get(0).getInsutype());
+                    result.setInsutypeName(entry.getValue().get(0).getInsutypeName());
+                    result.setChildKey(resultItem.getAdmdvsName() + "-" + result.getInsutypeName());
+                    result.setIsChildren(true);
+                    String medfeeSumamt = "0";
+                    String baseMedFundpaySumamt = "0";
+                    String bigDssFundpaySumamt = "0";
+                    String clvFundpaySumamt = "0";
+                    String othFundpaySumamt = "0";
+                    String fundpaySumamt = "0";
+                    for (BaseSetlStatistics itm : insutypeSetldataList) {
+                        medfeeSumamt = DecimalUtil.add(medfeeSumamt, itm.getMedfeeSumamt());
+                        baseMedFundpaySumamt = DecimalUtil.add(baseMedFundpaySumamt, itm.getHifpPay());
+                        bigDssFundpaySumamt = DecimalUtil.add(bigDssFundpaySumamt, itm.getHifmiPay());
+                        clvFundpaySumamt = DecimalUtil.add(clvFundpaySumamt, itm.getCvlservPay());
+                        fundpaySumamt = DecimalUtil.add(fundpaySumamt, itm.getFundPaySumamt());
+                        String othpay = DecimalUtil.minusLink(itm.getFundPaySumamt(), itm.getHifpPay(),
+                                itm.getHifmiPay(), itm.getCvlservPay());
+                        othFundpaySumamt = DecimalUtil.add(othFundpaySumamt, othpay);
+                    }
+                    result.setMedfeeSumamt(medfeeSumamt);
+                    result.setBaseMedFundpaySumamt(baseMedFundpaySumamt);
+                    result.setBigDssFundpaySumamt(bigDssFundpaySumamt);
+                    result.setClvFundpaySumamt(clvFundpaySumamt);
+                    result.setOthFundpaySumamt(othFundpaySumamt);
+                    result.setFundpaySumamt(fundpaySumamt);
+                    children.add(result);
+                }
+                resultItem.setChildren(children);
+            }
+        }
+
         return ResultVoUtil.success(resultList);
     }
 
@@ -1279,13 +1350,17 @@ public class SiQueryService {
         String begntime = condition.getMonth() + "-01 00:00:00.000";
         String endtime = DateUtil.getMonthEndtime(condition.getMonth());
         String insuplcAdmdvs = condition.getInsuplcAdmdvs().substring(0, 4) + "%";
+        String insutype = condition.getInsutype();
+        if (StringUtil.isBlank(insutype)) {
+            insutype = "%%";
+        }
         QueryWrapper<SiSetlinfo> wrapper = new QueryWrapper<>();
-        wrapper.eq("insutype", condition.getInsutype());
         wrapper.eq("setl_type", ClrType.INPATIENT.getCode());
         wrapper.eq("revoked", YesOrNo.NO.getCode());
+        wrapper.like("insutype", insutype);
+        wrapper.like("insuplc_admdvs", insuplcAdmdvs);
         wrapper.apply("setl_time>='" + begntime + "'");
         wrapper.apply("setl_time<='" + endtime + "'");
-        wrapper.apply("insuplc_admdvs like'" + insuplcAdmdvs + "'");
         List<SiSetlinfo> list = setlinfoDao.selectList(wrapper);
         Map<String, String> regionMap = new HashMap<>();
         list.forEach(item -> {