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

科室标准报表和诊次/床日标准报表接口添加

JammeyJiang преди 2 месеца
родител
ревизия
59dbe88805

+ 66 - 29
src/main/java/com/kcim/service/impl/StandardReportServiceImpl.java

@@ -486,7 +486,7 @@ public class StandardReportServiceImpl implements StandardReportService {
             if (account == null) {
                 continue;
             }
-            DictDataVo costType = standCostDictMaps.getCostTypeMap().get(account.getCostType());
+            DictDataVo costType = standCostDictMaps.getCostTypeMap().get(String.valueOf(account.getCostType()));
             HospitalVisitCostCompositionVO vo = costItemMap.get(account.getType());
             // 医疗成本
             if ("1".equals(costType.getExpandOne())) {
@@ -511,23 +511,26 @@ public class StandardReportServiceImpl implements StandardReportService {
         HospitalVisitCostCompositionVO totalVo = new HospitalVisitCostCompositionVO();
         totalVo.setCostItem("总计");
         HospitalVisitCostCompositionVO drugTotalVo = new HospitalVisitCostCompositionVO();
-        totalVo.setCostItem("药品费");
+        drugTotalVo.setCostItem("药品费");
+        drugTotalVo.setChildren(new ArrayList<>());
         // 转成List便于处理
         List<HospitalVisitCostCompositionVO> reportList = costItemMap.values().stream().collect(Collectors.toList());
         for (HospitalVisitCostCompositionVO item : reportList) {
-            //计算每诊次的医疗全成本
-            item.setHospitalFullCost(getPercent(visitParamValue,totalVo.getHospitalFullCost()));
             //计算每诊次的医疗成本
-            item.setMedicalCost(getPercent(visitParamValue,totalVo.getMedicalCost()));
+            item.setMedicalCost(getPercent(item.getMedicalCost(),visitParamValue));
+            //计算每诊次的医疗全成本
+            item.setMedicalFullCost(getPercent(item.getMedicalFullCost(),visitParamValue));
             //计算每诊次的医院全成本
-            item.setHospitalFullCost(getPercent(visitParamValue,totalVo.getMedicalFullCost()));
+            item.setHospitalFullCost(getPercent(item.getHospitalFullCost(),visitParamValue));
             // 将金额加到总计对象中
             addBigDecimalFields(item, totalVo);
             /// 将金额加到药品对象中
             if(NumberConstant.THREE_S.equals(item.getCostType())){
                 addBigDecimalFields(item, drugTotalVo);
+                drugTotalVo.getChildren().add(item);
             }
         }
+        drugTotalVo.getChildren().forEach(item -> reportList.remove(item));
         //添加到列表的指定位置
         reportList.add(NumberConstant.TWO,drugTotalVo);
         reportList.add(NumberConstant.ZERO,totalVo);
@@ -559,12 +562,13 @@ public class StandardReportServiceImpl implements StandardReportService {
         // 获取诊次床日分摊参数代码
         String[] visitsBedDaysParamCode = getVisitsBedDaysParamCode();
         BigDecimal visitParamValue = getParamValue(shareParamValueList, visitsBedDaysParamCode[NumberConstant.ZERO]);
-
+        Map<String, List<ShareParamValue>> respParamValueList = shareParamValueList.stream()
+                .collect(Collectors.groupingBy(item -> item.getResponsibilityCode()));
         // 处理 allocationQueryList 数据
         Map<String, HospitalVisitCostCompositionVO> deptVisitCostMap = new HashMap<>();
 
         for (AllocationQuery allocationQuery : allocationQueryList) {
-            String responsibilityCode = allocationQuery.getTargetResponsibilityCode();
+            String responsibilityCode = allocationQuery.getResponsibilityCode();
             Responsibility responsibility = standCostDictMaps.getResponsibilityMap().get(responsibilityCode);
             if (responsibility == null) {
                 continue;
@@ -589,8 +593,9 @@ public class StandardReportServiceImpl implements StandardReportService {
                 vo.setResponsibilitySort(responsibility.getSort());
                 // 初始化所有费用字段为0
                 BeanUtil.initBigDecimalFieldsToZero(vo);
+                deptVisitCostMap.put(responsibilityCode, vo);
             }
-            DictDataVo costType = standCostDictMaps.getCostTypeMap().get(account.getCostType());
+            DictDataVo costType = standCostDictMaps.getCostTypeMap().get(String.valueOf(account.getCostType()));
             // 医疗成本
             if ("1".equals(costType.getExpandOne())) {
                 vo.setMedicalCost(vo.getMedicalCost().add(allocationQuery.getAmount()));
@@ -609,12 +614,22 @@ public class StandardReportServiceImpl implements StandardReportService {
         HospitalVisitCostCompositionVO grandTotal = createSubtotalVo(reportList.get(NumberConstant.ZERO), "总计", HospitalVisitCostCompositionVO.class);
         // 计算每诊次成本
         for (HospitalVisitCostCompositionVO item : reportList) {
-            //计算每诊次的医疗全成本
-            item.setHospitalFullCost(getPercent(visitParamValue,item.getHospitalFullCost()));
+            List<ShareParamValue> respShareParamValues = respParamValueList.get(item.getResponsibilityCode());
+            if(CollectionUtils.isEmpty(respShareParamValues)){
+                item.setServiceCount(BigDecimal.ZERO);
+                item.setMedicalCost(BigDecimal.ZERO);
+                item.setMedicalFullCost(BigDecimal.ZERO);
+                item.setHospitalFullCost(BigDecimal.ZERO);
+                continue;
+            }
+            BigDecimal respParamValue = getParamValue(respShareParamValues, visitsBedDaysParamCode[NumberConstant.ZERO]);
+            item.setServiceCount(respParamValue);
             //计算每诊次的医疗成本
-            item.setMedicalCost(getPercent(visitParamValue,item.getMedicalCost()));
+            item.setMedicalCost(getPercent(item.getMedicalCost(),respParamValue));
+            //计算每诊次的医疗全成本
+            item.setMedicalFullCost(getPercent(item.getMedicalFullCost(),respParamValue));
             //计算每诊次的医院全成本
-            item.setHospitalFullCost(getPercent(visitParamValue,item.getMedicalFullCost()));
+            item.setHospitalFullCost(getPercent(item.getHospitalFullCost(),respParamValue));
             // 将各科室金额累加到总计对象
             addBigDecimalFields(item, grandTotal);
         }
@@ -622,7 +637,7 @@ public class StandardReportServiceImpl implements StandardReportService {
         reportList.sort(Comparator.comparing(HospitalVisitCostCompositionVO::getResponsibilitySort,
                 Comparator.nullsLast(Comparator.naturalOrder())));
         // 添加总计行
-        reportList.add(NumberConstant.ZERO,grandTotal);
+//        reportList.add(NumberConstant.ZERO,grandTotal);
         return reportList;
     }
 
@@ -660,7 +675,7 @@ public class StandardReportServiceImpl implements StandardReportService {
             if (account == null) {
                 continue;
             }
-            DictDataVo costType = standCostDictMaps.getCostTypeMap().get(account.getCostType());
+            DictDataVo costType = standCostDictMaps.getCostTypeMap().get(String.valueOf(account.getCostType()));
             HospitalVisitCostCompositionVO vo = costItemMap.get(account.getType());
             // 医疗成本
             if ("1".equals(costType.getExpandOne())) {
@@ -683,23 +698,27 @@ public class StandardReportServiceImpl implements StandardReportService {
         HospitalVisitCostCompositionVO totalVo = new HospitalVisitCostCompositionVO();
         totalVo.setCostItem("总计");
         HospitalVisitCostCompositionVO drugTotalVo = new HospitalVisitCostCompositionVO();
-        totalVo.setCostItem("药品费");
+        drugTotalVo.setCostItem("药品费");
+        drugTotalVo.setChildren(new ArrayList<>());
         // 转成List便于处理
         List<HospitalVisitCostCompositionVO> reportList = costItemMap.values().stream().collect(Collectors.toList());
         for (HospitalVisitCostCompositionVO item : reportList) {
-            //计算每诊次的医疗全成本
-            item.setHospitalFullCost(getPercent(bedDaysParamValue,totalVo.getHospitalFullCost()));
             //计算每诊次的医疗成本
-            item.setMedicalCost(getPercent(bedDaysParamValue,totalVo.getMedicalCost()));
+            item.setMedicalCost(getPercent(item.getMedicalCost(),bedDaysParamValue));
+            //计算每诊次的医疗全成本
+            item.setMedicalFullCost(getPercent(item.getMedicalFullCost(),bedDaysParamValue));
             //计算每诊次的医院全成本
-            item.setHospitalFullCost(getPercent(bedDaysParamValue,totalVo.getMedicalFullCost()));
+            item.setHospitalFullCost(getPercent(item.getHospitalFullCost(),bedDaysParamValue));
             // 将金额加到总计对象中
             addBigDecimalFields(item, totalVo);
             /// 将金额加到药品对象中
             if(NumberConstant.THREE_S.equals(item.getCostType())){
                 addBigDecimalFields(item, drugTotalVo);
+                drugTotalVo.getChildren().add(item);
             }
         }
+        //移除掉药品费(避免重复)
+        drugTotalVo.getChildren().forEach(item -> reportList.remove(item));
         //添加到列表的指定位置
         reportList.add(NumberConstant.TWO,drugTotalVo);
         reportList.add(NumberConstant.ZERO,totalVo);
@@ -734,7 +753,7 @@ public class StandardReportServiceImpl implements StandardReportService {
         Map<String, HospitalVisitCostCompositionVO> deptVisitCostMap = new HashMap<>();
 
         for (AllocationQuery allocationQuery : allocationQueryList) {
-            String responsibilityCode = allocationQuery.getTargetResponsibilityCode();
+            String responsibilityCode = allocationQuery.getResponsibilityCode();
             Responsibility responsibility = standCostDictMaps.getResponsibilityMap().get(responsibilityCode);
             if (responsibility == null) {
                 continue;
@@ -759,8 +778,9 @@ public class StandardReportServiceImpl implements StandardReportService {
                 vo.setResponsibilitySort(responsibility.getSort());
                 // 初始化所有费用字段为0
                 BeanUtil.initBigDecimalFieldsToZero(vo);
+                deptVisitCostMap.put(responsibilityCode, vo);
             }
-            DictDataVo costType = standCostDictMaps.getCostTypeMap().get(account.getCostType());
+            DictDataVo costType = standCostDictMaps.getCostTypeMap().get(String.valueOf(account.getCostType()));
             // 医疗成本
             if ("1".equals(costType.getExpandOne())) {
                 vo.setMedicalCost(vo.getMedicalCost().add(allocationQuery.getAmount()));
@@ -778,16 +798,28 @@ public class StandardReportServiceImpl implements StandardReportService {
         // 获取诊次床日分摊参数代码
         String[] visitsBedDaysParamCode = getVisitsBedDaysParamCode();
         BigDecimal bedDaysParamValue = getParamValue(shareParamValueList, visitsBedDaysParamCode[NumberConstant.ONE]);
+        Map<String, List<ShareParamValue>> respParamValueList = shareParamValueList.stream()
+                .collect(Collectors.groupingBy(item -> item.getResponsibilityCode()));
         // 创建总计对象
         HospitalVisitCostCompositionVO grandTotal = createSubtotalVo(reportList.get(NumberConstant.ZERO), "总计", HospitalVisitCostCompositionVO.class);
         // 计算每诊次成本
         for (HospitalVisitCostCompositionVO item : reportList) {
+            List<ShareParamValue> respShareParamValues = respParamValueList.get(item.getResponsibilityCode());
+            if(CollectionUtils.isEmpty(respShareParamValues)){
+                item.setServiceCount(BigDecimal.ZERO);
+                item.setMedicalCost(BigDecimal.ZERO);
+                item.setMedicalFullCost(BigDecimal.ZERO);
+                item.setHospitalFullCost(BigDecimal.ZERO);
+                continue;
+            }
+            BigDecimal respParamValue = getParamValue(respShareParamValues, visitsBedDaysParamCode[NumberConstant.ZERO]);
+            item.setServiceCount(respParamValue);
             //计算每诊次的医疗全成本
-            item.setHospitalFullCost(getPercent(bedDaysParamValue,item.getHospitalFullCost()));
+            item.setHospitalFullCost(getPercent(item.getHospitalFullCost(),bedDaysParamValue));
             //计算每诊次的医疗成本
-            item.setMedicalCost(getPercent(bedDaysParamValue,item.getMedicalCost()));
+            item.setMedicalCost(getPercent(item.getMedicalCost(),bedDaysParamValue));
             //计算每诊次的医院全成本
-            item.setHospitalFullCost(getPercent(bedDaysParamValue,item.getMedicalFullCost()));
+            item.setHospitalFullCost(getPercent(item.getMedicalFullCost(),bedDaysParamValue));
             // 将各科室金额累加到总计对象
             addBigDecimalFields(item, grandTotal);
         }
@@ -1563,7 +1595,7 @@ public class StandardReportServiceImpl implements StandardReportService {
         if (accountType == null) {
             return; // 添加 null 检查
         }
-        DictDataVo costType = standCostDictMaps.getCostTypeMap().get(account.getCostType());
+        DictDataVo costType = standCostDictMaps.getCostTypeMap().get(String.valueOf(account.getCostType()));
         DictDataVo standardShareLevel = standCostDictMaps.getStandardShareLevelMap().get(responsibility.getStandardShareLevel());
 
         ClinicalDeptFullCostVO reportVO = new ClinicalDeptFullCostVO();
@@ -1574,6 +1606,7 @@ public class StandardReportServiceImpl implements StandardReportService {
             initDeptCostReport(reportVO, responsibility, accountType, costType, standardShareLevel);
             // 初始化所有费用字段为0
             BeanUtil.initBigDecimalFieldsToZero(reportVO);
+            reportMap.put(allocationQuery.getResponsibilityCode(), reportVO);
         }
 
         // 根据费用类型累加到对应字段
@@ -1664,7 +1697,7 @@ public class StandardReportServiceImpl implements StandardReportService {
         if (accountType == null) {
             return; // 添加 null 检查
         }
-        DictDataVo costType = standCostDictMaps.getCostTypeMap().get(account.getCostType());
+        DictDataVo costType = standCostDictMaps.getCostTypeMap().get(String.valueOf(account.getCostType()));
         DictDataVo standardShareLevel = standCostDictMaps.getStandardShareLevelMap().get(responsibility.getStandardShareLevel());
 
         ClinicalDeptMedicalCostVO reportVO = new ClinicalDeptMedicalCostVO();
@@ -1675,6 +1708,7 @@ public class StandardReportServiceImpl implements StandardReportService {
             initDeptCostReport(reportVO, responsibility, accountType, costType, standardShareLevel);
             // 初始化所有费用字段为0
             BeanUtil.initBigDecimalFieldsToZero(reportVO);
+            reportMap.put(allocationQuery.getResponsibilityCode(), reportVO);
         }
 
         // 根据费用类型累加到对应字段
@@ -1873,7 +1907,7 @@ public class StandardReportServiceImpl implements StandardReportService {
         if(!NumberConstant.ONE_S.equals(accountType.getExpandOne()) ){
             return;
         }
-        DictDataVo costType = standCostDictMaps.getCostTypeMap().get(account.getCostType());
+        DictDataVo costType = standCostDictMaps.getCostTypeMap().get(String.valueOf(account.getCostType()));
         DictDataVo standardShareLevel = standCostDictMaps.getStandardShareLevelMap().get(responsibility.getStandardShareLevel());
         DeptDirectMedicalCostVO deptDirectMedicalCostVO= new DeptDirectMedicalCostVO();
         if(deptDirectMedicalCostMap.containsKey(allocationQuery.getResponsibilityCode())){
@@ -1882,6 +1916,7 @@ public class StandardReportServiceImpl implements StandardReportService {
             initDeptCostReport(deptDirectMedicalCostVO, responsibility,accountType, costType,standardShareLevel);
             // 初始化所有费用字段为0
             BeanUtil.initBigDecimalFieldsToZero(deptDirectMedicalCostVO);
+            deptDirectMedicalCostMap.put(allocationQuery.getResponsibilityCode(),deptDirectMedicalCostVO);
         }
         // 根据费用类型累加到对应字段
         switch (accountType.getExpandOne()) {
@@ -1938,7 +1973,7 @@ public class StandardReportServiceImpl implements StandardReportService {
         if (accountType == null) {
             return; // 添加 null 检查
         }
-        DictDataVo costType = standCostDictMaps.getCostTypeMap().get(account.getCostType());
+        DictDataVo costType = standCostDictMaps.getCostTypeMap().get(String.valueOf(account.getCostType()));
         DictDataVo standardShareLevel = standCostDictMaps.getStandardShareLevelMap().get(responsibility.getStandardShareLevel());
 
         DeptFullDirectCostVO reportVO = new DeptFullDirectCostVO();
@@ -1948,6 +1983,7 @@ public class StandardReportServiceImpl implements StandardReportService {
             initDeptCostReport(reportVO, responsibility,accountType, costType,standardShareLevel);
             // 初始化所有费用字段为0
             BeanUtil.initBigDecimalFieldsToZero(reportVO);
+            reportMap.put(allocationQuery.getResponsibilityCode(),reportVO);
         }
 
         // 根据费用类型累加到对应字段
@@ -2106,6 +2142,7 @@ public class StandardReportServiceImpl implements StandardReportService {
 
             // 初始化所有费用字段为0
             BeanUtil.initBigDecimalFieldsToZero(costAllocationVO);
+            deptCostAllocationMap.put(responsibilityCode, costAllocationVO);
         }
 
         // 直接成本

+ 11 - 0
src/main/java/com/kcim/vo/HospitalVisitCostCompositionVO.java

@@ -3,6 +3,7 @@ package com.kcim.vo;
 import lombok.Data;
 
 import java.math.BigDecimal;
+import java.util.List;
 
 /**
  * 医院科室成本分摊汇总表VO
@@ -40,4 +41,14 @@ public class HospitalVisitCostCompositionVO extends BaseDeptCostReportVO{
      * 每诊次医院全成本金额
      */
     private BigDecimal hospitalFullCost;
+
+    /**
+     * 服务量
+     */
+    private BigDecimal serviceCount;
+
+    /**
+     * 子级成本项目
+     */
+    private List<HospitalVisitCostCompositionVO> children;
 }

+ 1 - 1
src/main/resources/mapper/AllocationQueryMapper.xml

@@ -92,7 +92,7 @@
             IFNULL( sum( amount ), 0 ) AS amount
         FROM
             cost_allocation_query a
-            INNER JOIN cost_responsibility b on .a.target_responsibility_code=b.responsibility_code AND b.delete_time=0 AND b.hosp_id= #{hospId}
+            INNER JOIN cost_responsibility b on a.target_responsibility_code=b.responsibility_code AND b.delete_time=0 AND b.hosp_id= #{hospId}
         WHERE
             a.date_year = #{dateYear}
           AND a.date_month = #{month}

+ 2 - 4
src/main/resources/mapper/ComputeItemCostMapper.xml

@@ -43,20 +43,18 @@
         sum((IF(b.type = '9', b.compute_result, 0.00))) as spaceCost
         FROM
         compute_item_cost a
-        LEFT JOIN compute_item_cost_detail b ON a.id = b.item_cost_id
+        LEFT JOIN compute_item_cost_detail b ON a.id = b.item_cost_id AND b.del_flag = 0
         WHERE
         a.hosp_id = #{hospId}
-        AND b.hosp_id=#{hospId}
         AND a.del_flag = 0
         AND a.compute_date = #{computeDate}
-        AND b.del_flag = 0
         <if test="itemType != null and itemType != ''">
            and item_type_code = #{itemType,jdbcType=VARCHAR}
         </if>
         <if test="itemName != null and itemType != ''">
             and name like concat('%',#{itemName,jdbcType=VARCHAR},'%')
         </if>
-        GROUP BY visit_no,code,item_type_code
+        GROUP BY a.code
     </select>
     <select id="getListGroupByVisitNo" resultType="com.kcim.dao.model.dto.ComputeItemGroupByVisitNoDto">
         SELECT