Просмотр исходного кода

添加医院病种成本明细表相关代码

JammeyJiang 2 месяцев назад
Родитель
Сommit
6f1605fa49

+ 13 - 1
src/main/java/com/kcim/dao/mapper/ComputePatientCostAccountMapper.java

@@ -2,7 +2,11 @@ package com.kcim.dao.mapper;
 
 import com.kcim.dao.model.ComputePatientCostAccount;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.kcim.vo.HospitalServiceProjectCostVO;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 /**
  * 患者成本的会计科目金额表
@@ -12,5 +16,13 @@ import org.apache.ibatis.annotations.Mapper;
  */
 @Mapper
 public interface ComputePatientCostAccountMapper extends BaseMapper<ComputePatientCostAccount> {
-	
+
+
+    /**
+     * 获取疾病成本明细
+     * @param computeDate
+     * @param hospId
+     * @return
+     */
+    List<HospitalServiceProjectCostVO> getDiseaseCostDetailList(@Param("computeDate") String computeDate, @Param("hospId") Long hospId);
 }

+ 7 - 1
src/main/java/com/kcim/dao/mapper/ComputeProjectCostAccountMapper.java

@@ -16,5 +16,11 @@ import java.util.List;
  */
 @Mapper
 public interface ComputeProjectCostAccountMapper extends BaseMapper<ComputeProjectCostAccount> {
-    List<HospitalServiceProjectCostVO> getMedicalServiceCostDetailList(@Param("computeDate") String computeDate, @Param("hospId")Long hospId);
+
+    /**
+     * @param computeDate
+     * @param hospId
+     * @return
+     */
+    List<HospitalServiceProjectCostVO> getMedicalServiceCostDetailList(@Param("computeDate") String computeDate, @Param("hospId") Long hospId);
 }

+ 5 - 0
src/main/java/com/kcim/dao/repository/ComputePatientCostAccountRepository.java

@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.kcim.common.util.UserContext;
 import com.kcim.dao.mapper.ComputePatientCostAccountMapper;
 import com.kcim.dao.model.ComputePatientCostAccount;
+import com.kcim.vo.HospitalServiceProjectCostVO;
 import org.springframework.stereotype.Repository;
 
 import java.util.List;
@@ -23,4 +24,8 @@ public class ComputePatientCostAccountRepository extends ServiceImpl<ComputePati
         queryWrapper.eq(ComputePatientCostAccount::getComputeDate, computeDate);
         return this.list(queryWrapper);
     }
+
+    public List<HospitalServiceProjectCostVO> getDiseaseCostDetailList(String computeDate) {
+        return this.baseMapper.getDiseaseCostDetailList(computeDate, UserContext.getHospId());
+    }
 }

+ 6 - 0
src/main/java/com/kcim/service/StandardReportService.java

@@ -86,4 +86,10 @@ public interface StandardReportService {
      * @return
      */
     List<HospitalServiceProjectCostVO> getMedicalServiceCostDetail(String computeDate);
+
+    /**
+     * 获取疾病成本明细表数据
+     * @return
+     */
+    List<HospitalServiceProjectCostVO> getDiseaseCostDetail(String computeDate);
 }

+ 52 - 8
src/main/java/com/kcim/service/impl/StandardReportServiceImpl.java

@@ -59,6 +59,8 @@ public class StandardReportServiceImpl implements StandardReportService {
     ItemRepository itemRepository;
 
     ComputeProjectCostAccountRepository computeProjectCostAccountRepository;
+
+    ComputePatientCostAccountRepository computePatientCostAccountRepository;
     
     /**
      * 科室直接成本表(医疗成本)
@@ -878,11 +880,53 @@ public class StandardReportServiceImpl implements StandardReportService {
             DictDataVo costType = standCostDictMaps.getCostTypeMap().get(projectCostAccount.getCostTypeCode());
             HospitalServiceProjectCostVO vo = new HospitalServiceProjectCostVO();
             //已有的项目类别
-            if (projectCostMap.containsKey(projectCostAccount.getCostItemCode())) {
-                vo = projectCostMap.get(projectCostAccount.getCostItemCode());
+            if (projectCostMap.containsKey(projectCostAccount.getItemCode())) {
+                vo = projectCostMap.get(projectCostAccount.getItemCode());
+            } else {
+                //新建一个项目类别对象
+                projectCostMap.put(projectCostAccount.getItemCode(), projectCostAccount);
+            }
+            // 医疗成本
+            if ("1".equals(costType.getExpandOne())) {
+                vo.setMedicalCost(vo.getMedicalCost().add(projectCostAccount.getHospitalFullCost()));
+            }
+            // 医疗全成本
+            if (!"3".equals(costType.getExpandOne())) {
+                vo.setMedicalFullCost(vo.getMedicalFullCost().add(projectCostAccount.getHospitalFullCost()));
+            }
+            // 医院全成本
+            vo.setHospitalFullCost(vo.getHospitalFullCost().add(projectCostAccount.getHospitalFullCost()));
+        }
+        List<HospitalServiceProjectCostVO> medServiceCostDetailList =new ArrayList<>(projectCostMap.values());
+        return medServiceCostDetailList;
+    }
+
+
+    /**
+     * 获取医院病种成本明细表数据
+     *
+     * @return 病种成本明细列表
+     */
+    @Override
+    public List<HospitalServiceProjectCostVO> getDiseaseCostDetail(String computeDate) {
+        List<HospitalServiceProjectCostVO> projectCostAccountList = computePatientCostAccountRepository.getDiseaseCostDetailList(computeDate);
+        if(CollectionUtils.isEmpty(projectCostAccountList)){
+            throw new CostException("请先计算患者成本");
+        }
+        // 获取所有的标准字典数据
+        StandCostDictMapVO standCostDictMaps = getStandCostDictMaps();
+        // 记录项目类别对象
+        Map<String, HospitalServiceProjectCostVO> projectCostMap = new HashMap<>();
+        for (HospitalServiceProjectCostVO projectCostAccount : projectCostAccountList) {
+            //按项目类型累加数据
+            DictDataVo costType = standCostDictMaps.getCostTypeMap().get(projectCostAccount.getCostTypeCode());
+            HospitalServiceProjectCostVO vo = new HospitalServiceProjectCostVO();
+            //已有的项目类别
+            if (projectCostMap.containsKey(projectCostAccount.getItemCode())) {
+                vo = projectCostMap.get(projectCostAccount.getItemCode());
             } else {
                 //新建一个项目类别对象
-                projectCostMap.put(projectCostAccount.getCostItemCode(), projectCostAccount);
+                projectCostMap.put(projectCostAccount.getItemCode(), projectCostAccount);
             }
             // 医疗成本
             if ("1".equals(costType.getExpandOne())) {
@@ -988,14 +1032,14 @@ public class StandardReportServiceImpl implements StandardReportService {
         List<HospitalServiceProjectCostVO> hospitalServiceProjectCostVOS =firstLevel.stream().map( item->convertToHospitalServiceProjectCostVO(item)).collect(Collectors.toList());
         for (HospitalServiceProjectCostVO item : hospitalServiceProjectCostVOS) {
             //先加自己的
-            if(projectCostMap.containsKey(item.getCostItemCode())){
-                addBigDecimalFields(projectCostMap.get(item.getCostItemCode()), item);
+            if(projectCostMap.containsKey(item.getItemCode())){
+                addBigDecimalFields(projectCostMap.get(item.getItemCode()), item);
             }
             if(CollectionUtils.isEmpty(sencodLevel)){
                 continue;
             }
             //第一层对应的第二层数据
-            List<StandItem> children = sencodLevel.stream().filter(child -> item.getCostItemCode().equals(child.getParentCode())).collect(Collectors.toList());
+            List<StandItem> children = sencodLevel.stream().filter(child -> item.getItemCode().equals(child.getParentCode())).collect(Collectors.toList());
             if(CollectionUtils.isEmpty( children)){
                 continue;
             }
@@ -1020,8 +1064,8 @@ public class StandardReportServiceImpl implements StandardReportService {
 
     public HospitalServiceProjectCostVO convertToHospitalServiceProjectCostVO(StandItem standItem){
         HospitalServiceProjectCostVO vo = new HospitalServiceProjectCostVO();
-        vo.setCostItemCode(standItem.getCode());
-        vo.setCostItemName(standItem.getName());
+        vo.setItemCode(standItem.getCode());
+        vo.setItemName(standItem.getName());
         // 初始化所有费用字段为0
         BeanUtil.initBigDecimalFieldsToZero(vo);
         return vo;

+ 42 - 0
src/main/java/com/kcim/vo/DiseaseCostDetailVO.java

@@ -0,0 +1,42 @@
+package com.kcim.vo;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * 医院病种成本明细表 VO 类
+ * 用于封装病种成本明细数据
+ */
+@Data
+public class DiseaseCostDetailVO {
+    /**
+     * 病种编码
+     */
+    private String diseaseCode;
+
+    /**
+     * 病种名称
+     */
+    private String diseaseName;
+
+    /**
+     * 服务量
+     */
+    private BigDecimal serviceVolume;
+
+    /**
+     * 医疗成本
+     */
+    private BigDecimal medicalCost;
+
+    /**
+     * 医疗全成本
+     */
+    private BigDecimal totalMedicalCost;
+
+    /**
+     * 医院全成本
+     */
+    private BigDecimal hospitalTotalCost;
+}

+ 4 - 4
src/main/java/com/kcim/vo/HospitalServiceProjectCostVO.java

@@ -14,14 +14,14 @@ import java.util.List;
 @Data
 public class HospitalServiceProjectCostVO {
     /**
-     * 成本项目代码
+     * 项目代码
      */
-    private String costItemCode;
+    private String itemCode;
 
     /**
-     * 成本项目名称
+     * 项目名称
      */
-    private String costItemName;
+    private String itemName;
 
     /**
      * 成本项目类型代码

+ 6 - 0
src/main/java/com/kcim/web/StandardReportController.java

@@ -94,4 +94,10 @@ public class StandardReportController extends AbstractController {
     public Result getMedicalServiceCostDetail(@RequestParam String computeDate) {
         return Result.ok(standardReportService.getMedicalServiceCostDetail(computeDate));
     }
+
+    @ApiOperation("医院病种成本明细表")
+    @GetMapping("/getDiseaseCostDetail")
+    public Result getDiseaseCostDetail(@RequestParam String computeDate) {
+        return Result.ok(standardReportService.getDiseaseCostDetail(computeDate));
+    }
 }

+ 49 - 0
src/main/resources/mapper/ComputePatientCostAccountMapper.xml

@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+
+<mapper namespace="com.kcim.dao.mapper.ComputePatientCostAccountMapper">
+
+	<!-- 可根据自己的需求,是否要使用 -->
+    <resultMap type="com.kcim.dao.model.ComputePatientCostAccount" id="computePatientCostAccountMap">
+        <result property="id" column="id"/>
+        <result property="hospId" column="hosp_id"/>
+        <result property="computeDate" column="compute_date"/>
+        <result property="patientCostId" column="patient_cost_id"/>
+        <result property="costType" column="cost_type"/>
+        <result property="accountType" column="account_type"/>
+        <result property="computeResult" column="compute_result"/>
+        <result property="standComputeResult" column="stand_compute_result"/>
+        <result property="createUser" column="create_user"/>
+        <result property="createTime" column="create_time"/>
+        <result property="updateUser" column="update_user"/>
+        <result property="updateTime" column="update_time"/>
+        <result property="deleteUser" column="delete_user"/>
+        <result property="deleteTime" column="delete_time"/>
+        <result property="delFlag" column="del_flag"/>
+    </resultMap>
+
+    <select id="getDiseaseCostDetailList" resultType="com.kcim.vo.HospitalServiceProjectCostVO">
+        SELECT
+            a.`primary_diag_code` as itemCode,
+            a.`primary_diag_name` as itemName ,
+            b.cost_type as costTypeCode,
+            SUM( b.quantity ) AS serviceVolume,
+            SUM( b.compute_result ) AS hospitalFullCost
+        FROM
+            compute_patient_cost a
+                INNER JOIN compute_patient_cost_account b ON a.id = b.patient_cost_id
+                AND b.del_flag = 0
+                AND b.hosp_id = #{hospId,jdbcType=BIGINT}
+                INNER JOIN import_patient_info c on a.visit_no=c.visit_no
+                AND c.hosp_id = #{hospId,jdbcType=BIGINT}
+                AND c.del_flag = 0
+                AND c.compute_date = #{computeDate,jdbcType=VARCHAR}
+        WHERE
+            a.del_flag = 0
+          AND a.hosp_id = #{hospId,jdbcType=BIGINT}
+          AND a.compute_date = #{computeDate,jdbcType=VARCHAR}
+        GROUP BY
+            c.`primary_diag_code`,
+            b.cost_type
+    </select>
+</mapper>

+ 3 - 5
src/main/resources/mapper/ComputeProjectCostAccountMapper.xml

@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 
-<mapper namespace="com.kcim.dao.mapper.SqlMapper">
+<mapper namespace="com.kcim.dao.mapper.ComputeProjectCostAccountMapper">
 
 	<!-- 可根据自己的需求,是否要使用 -->
     <resultMap type="com.kcim.dao.model.Sql" id="sqlMap">
@@ -25,8 +25,8 @@
 
     <select id="getMedicalServiceCostDetailList" resultType="com.kcim.vo.HospitalServiceProjectCostVO">
         SELECT
-            a.`code` as costItemCode,
-            a.`name` as costItem ,
+            a.`code` as itemCode,
+            a.`name` as itemName ,
             b.cost_type as costTypeCode,
             SUM( b.quantity ) AS serviceVolume,
             SUM( b.compute_result ) AS hospitalFullCost
@@ -42,7 +42,5 @@
         GROUP BY
             a.`code`,
             b.cost_type
-        GROUP BY a.responsibility_code, a.`code`,b.share_param_code
-
     </select>
 </mapper>