浏览代码

添加医院服务项目成本明细表相关代码

JammeyJiang 2 月之前
父节点
当前提交
601638aa91

+ 6 - 2
src/main/java/com/kcim/dao/mapper/ComputeProjectCostAccountMapper.java

@@ -1,8 +1,12 @@
 package com.kcim.dao.mapper;
 
-import com.kcim.dao.model.ComputeProjectCostAccount;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.kcim.dao.model.ComputeProjectCostAccount;
+import com.kcim.vo.HospitalServiceProjectCostVO;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 /**
  * 项目成本的会计科目金额表
@@ -12,5 +16,5 @@ import org.apache.ibatis.annotations.Mapper;
  */
 @Mapper
 public interface ComputeProjectCostAccountMapper extends BaseMapper<ComputeProjectCostAccount> {
-	
+    List<HospitalServiceProjectCostVO> getMedicalServiceCostDetailList(@Param("computeDate") String computeDate, @Param("hospId")Long hospId);
 }

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

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

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

@@ -72,4 +72,18 @@ public interface StandardReportService {
      * @return 报表数据
      */
     List<HospitalVisitCostCompositionVO> getHospitalDeptBedDayCost(String computeDate);
+
+    /**
+     * 获取医院服务项目成本表数据
+     * @param computeDate
+     * @return
+     */
+    List<HospitalServiceProjectCostVO> getHospitalServiceProjectCost(String computeDate);
+
+    /**
+     * 获取医院服务项目成本明细表数据
+     * @param computeDate
+     * @return
+     */
+    List<HospitalServiceProjectCostVO> getMedicalServiceCostDetail(String computeDate);
 }

+ 51 - 11
src/main/java/com/kcim/service/impl/StandardReportServiceImpl.java

@@ -55,6 +55,7 @@ public class StandardReportServiceImpl implements StandardReportService {
     ShareParamValueRepository shareParamValueRepository;
 
     StandItemRepository standItemRepository;
+
     ItemRepository itemRepository;
 
     ComputeProjectCostAccountRepository computeProjectCostAccountRepository;
@@ -802,11 +803,8 @@ public class StandardReportServiceImpl implements StandardReportService {
      * @param computeDate 核算年月
      * @return 报表数据
      */
-//    @Override
+    @Override
     public List<HospitalServiceProjectCostVO> getHospitalServiceProjectCost(String computeDate) {
-        Integer year = ComputeDateUtils.getComputeYear(computeDate);
-        Integer month = ComputeDateUtils.getComputeMonth(computeDate);
-
         List<StandItem> standItemList = standItemRepository.getList();
         if(CollectionUtils.isEmpty(standItemList)){
             throw new CostException("标准医疗服务项目未维护,请先添加标准医疗服务项目");
@@ -818,7 +816,7 @@ public class StandardReportServiceImpl implements StandardReportService {
 
         List<ComputeProjectCostAccount> projectCostAccountList = computeProjectCostAccountRepository.getList(computeDate);
         if(CollectionUtils.isEmpty(projectCostAccountList)){
-            throw new CostException("医疗服务项目未维护,请先添加医疗服务项目");
+            throw new CostException("请先计算项目成本");
         }
         // 获取所有的标准字典数据
         StandCostDictMapVO standCostDictMaps = getStandCostDictMaps();
@@ -840,7 +838,8 @@ public class StandardReportServiceImpl implements StandardReportService {
                 vo = projectCostMap.get(projectItemType.getCode());
             } else {
                 //新建一个项目类别对象
-                convertToHospitalServiceProjectCostVO(projectItemType);
+                vo = convertToHospitalServiceProjectCostVO(projectItemType);
+                projectCostMap.put(projectItemType.getCode(), vo);
             }
             // 医疗成本
             if ("1".equals(costType.getExpandOne())) {
@@ -858,6 +857,47 @@ public class StandardReportServiceImpl implements StandardReportService {
         return reportList;
     }
 
+    /**
+     * 获取医院医疗服务项目成本明细表数据
+     *
+     * @return 医疗服务项目成本明细列表
+     */
+    @Override
+    public List<HospitalServiceProjectCostVO> getMedicalServiceCostDetail(String computeDate) {
+
+        List<HospitalServiceProjectCostVO> projectCostAccountList = computeProjectCostAccountRepository.getMedicalServiceCostDetailList(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.getCostItemCode())) {
+                vo = projectCostMap.get(projectCostAccount.getCostItemCode());
+            } else {
+                //新建一个项目类别对象
+                projectCostMap.put(projectCostAccount.getCostItemCode(), 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;
+    }
 
     /**
      * 获取项目归属的项目类型
@@ -948,14 +988,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.getCostCode())){
-                addBigDecimalFields(projectCostMap.get(item.getCostCode()), item);
+            if(projectCostMap.containsKey(item.getCostItemCode())){
+                addBigDecimalFields(projectCostMap.get(item.getCostItemCode()), item);
             }
             if(CollectionUtils.isEmpty(sencodLevel)){
                 continue;
             }
             //第一层对应的第二层数据
-            List<StandItem> children = sencodLevel.stream().filter(child -> item.getCostCode().equals(child.getParentCode())).collect(Collectors.toList());
+            List<StandItem> children = sencodLevel.stream().filter(child -> item.getCostItemCode().equals(child.getParentCode())).collect(Collectors.toList());
             if(CollectionUtils.isEmpty( children)){
                 continue;
             }
@@ -980,8 +1020,8 @@ public class StandardReportServiceImpl implements StandardReportService {
 
     public HospitalServiceProjectCostVO convertToHospitalServiceProjectCostVO(StandItem standItem){
         HospitalServiceProjectCostVO vo = new HospitalServiceProjectCostVO();
-        vo.setCostCode(standItem.getCode());
-        vo.setCostItem(standItem.getName());
+        vo.setCostItemCode(standItem.getCode());
+        vo.setCostItemName(standItem.getName());
         // 初始化所有费用字段为0
         BeanUtil.initBigDecimalFieldsToZero(vo);
         return vo;

+ 8 - 2
src/main/java/com/kcim/vo/HospitalServiceProjectCostVO.java

@@ -16,12 +16,12 @@ public class HospitalServiceProjectCostVO {
     /**
      * 成本项目代码
      */
-    private String costCode;
+    private String costItemCode;
 
     /**
      * 成本项目名称
      */
-    private String costItem;
+    private String costItemName;
 
     /**
      * 成本项目类型代码
@@ -33,11 +33,17 @@ public class HospitalServiceProjectCostVO {
      */
     private String costTypeName;
 
+    /**
+     * 服务量
+     */
+    private BigDecimal serviceVolume;
+
     /**
      * 每诊次医疗成本金额
      */
     private BigDecimal medicalCost;
 
+
     /**
      * 每诊次医疗全成本金额
      */

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

@@ -82,4 +82,16 @@ public class StandardReportController extends AbstractController {
     public Result getHospitalDeptBedDayCost(@RequestParam String computeDate) {
         return Result.ok(standardReportService.getHospitalDeptBedDayCost(computeDate));
     }
+
+    @ApiOperation("医院医疗服务项目成本汇总表")
+    @GetMapping("/getHospitalServiceProjectCost")
+    public Result getHospitalServiceProjectCost(@RequestParam String computeDate) {
+        return Result.ok(standardReportService.getHospitalServiceProjectCost(computeDate));
+    }
+
+    @ApiOperation("医院医疗服务项目成本明细表")
+    @GetMapping("/getMedicalServiceCostDetail")
+    public Result getMedicalServiceCostDetail(@RequestParam String computeDate) {
+        return Result.ok(standardReportService.getMedicalServiceCostDetail(computeDate));
+    }
 }

+ 21 - 0
src/main/resources/mapper/ComputeProjectCostAccountMapper.xml

@@ -23,5 +23,26 @@
         <result property="delFlag" column="del_flag"/>
     </resultMap>
 
+    <select id="getMedicalServiceCostDetailList" resultType="com.kcim.vo.HospitalServiceProjectCostVO">
+        SELECT
+            a.`code` as costItemCode,
+            a.`name` as costItem ,
+            b.cost_type as costTypeCode,
+            SUM( b.quantity ) AS serviceVolume,
+            SUM( b.compute_result ) AS hospitalFullCost
+        FROM
+            compute_project_cost a
+                INNER JOIN compute_project_cost_account b ON a.id = b.project_cost_id
+                AND b.del_flag = 0
+                AND b.hosp_id = #{hospId,jdbcType=BIGINT}
+        WHERE
+            a.del_flag = 0
+          AND a.hosp_id = #{hospId,jdbcType=BIGINT}
+          AND a.compute_date = #{computeDate,jdbcType=VARCHAR}
+        GROUP BY
+            a.`code`,
+            b.cost_type
+        GROUP BY a.responsibility_code, a.`code`,b.share_param_code
 
+    </select>
 </mapper>