Переглянути джерело

添加标准法全院项目的项目成本计算及项目分摊参数计算

JammeyJiang 6 місяців тому
батько
коміт
79fbc0348f

+ 3 - 0
src/main/java/com/kcim/dao/model/ComputeProjectCostDetail.java

@@ -96,6 +96,9 @@ public class ComputeProjectCostDetail implements Serializable {
 
 	private BigDecimal computeSingleResult;
 
+	private BigDecimal standComputeResult;
+
+	private BigDecimal standComputeSingleResult;
 	/**
 	 * 项目成本计算主表
 	 */

+ 4 - 0
src/main/java/com/kcim/dao/model/ComputeProjectGroupCostDetail.java

@@ -84,6 +84,10 @@ public class ComputeProjectGroupCostDetail implements Serializable {
 
 	private BigDecimal computeSingleResult;
 
+	private BigDecimal standComputeResult;
+
+	private BigDecimal standComputeSingleResult;
+
 	/**
 	 * 项目成本计算主表
 	 */

+ 4 - 0
src/main/java/com/kcim/dao/model/ComputeShareParamDetail.java

@@ -88,6 +88,10 @@ public class ComputeShareParamDetail implements Serializable {
 
 	private BigDecimal computeSingleResult;
 
+	private BigDecimal standComputeResult;
+
+	private BigDecimal standComputeSingleResult;
+
 	@TableField(exist = false)
 	private ComputeShareParam computeShareCost;
 

+ 73 - 9
src/main/java/com/kcim/service/impl/ProjectCostServiceImpl.java

@@ -509,18 +509,16 @@ public class ProjectCostServiceImpl implements ProjectCostService {
             });
             computeProjectCostDetails.addAll(computeProjectCostDetailChilds);
 
-            //按项目成本列类型汇总数据
-            Map<String, BigDecimal> columnTypeGroup = computeProjectCostDetailChilds.stream().collect(Collectors.groupingBy(ComputeProjectCostDetail::getCostColumnType,
-                    Collectors.mapping(ComputeProjectCostDetail::getComputeResult, Collectors.reducing(BigDecimal.ZERO, BigDecimal::add))));
+            //按项目成本列类型分组
+            Map<String, List<ComputeProjectCostDetail>> columnTypeGroup = computeProjectCostDetailChilds.stream()
+                    .collect(Collectors.groupingBy(ComputeProjectCostDetail::getCostColumnType));
             columnTypeGroup.forEach((columnType, computeResult) -> {
                 //创建项目成本汇总表对象
                 ComputeProjectGroupCostDetail computeProjectGroupCostDetail = createComputeProjectGroupCostDetail(computeDate, currentUser, responsibilityItem, projectCost, columnType, computeResult);
                 computeProjectGroupCostDetails.add(computeProjectGroupCostDetail);
             });
-            //所有成本列汇总的金额就是项目成本
-            BigDecimal itemCost = computeProjectCostDetailChilds.stream().map(ComputeProjectCostDetail::getComputeResult).reduce(BigDecimal.ZERO, BigDecimal::add);
             //创建项目成本列的汇总表对象
-            ComputeProjectGroupCostDetail itemCostGroupDetail = createComputeProjectGroupCostDetail(computeDate, currentUser, responsibilityItem, projectCost, ITEM_COST.getCode(), itemCost);
+            ComputeProjectGroupCostDetail itemCostGroupDetail = createComputeProjectGroupCostDetail(computeDate, currentUser, responsibilityItem, projectCost, ITEM_COST.getCode(), computeProjectCostDetailChilds);
             computeProjectGroupCostDetails.add(itemCostGroupDetail);
         });
 
@@ -622,18 +620,28 @@ public class ProjectCostServiceImpl implements ProjectCostService {
         if(!firstDepartmentProfit.isPresent()||firstDepartmentProfit.get().getAmount().equals(BigDecimal.ZERO)){
             costDetail.setComputeResult(BigDecimal.ZERO);
             costDetail.setComputeSingleResult(BigDecimal.ZERO);
+            costDetail.setStandComputeResult(BigDecimal.ZERO);
+            costDetail.setStandComputeSingleResult(BigDecimal.ZERO);
             return costDetail;
         }
         //按项目分摊配置计算项目的一个项目成本列的分摊金额
         BigDecimal itemAllocationAmount=calcItemAllocationAmount(incomeShareParam,computeProjectCost,firstDepartmentProfit.get(),
                 shareParamDetails,computeShareParamDetailGroup,computeShareParamDetails);
         costDetail.setComputeResult(itemAllocationAmount);
+
+        //按项目分摊配置计算项目的一个项目成本列的标准法分摊金额
+        BigDecimal itemStandAllocationAmount=calcItemStandAllocationAmount(incomeShareParam,computeProjectCost,firstDepartmentProfit.get(),
+                shareParamDetails,computeShareParamDetailGroup,computeShareParamDetails);
+        costDetail.setStandComputeResult(itemStandAllocationAmount);
+
         //项目没有数量时,单个项目的分摊金额为0
         if(responsibilityItem.getNum().compareTo(BigDecimal.ZERO)==NumberConstant.ZERO){
-            costDetail.setComputeSingleResult(BigDecimal.ZERO);
+            costDetail.setComputeSingleResult(BigDecimal.ZERO.setScale(NumberConstant.FOUR,RoundingMode.HALF_UP));
+            costDetail.setStandComputeSingleResult(BigDecimal.ZERO.setScale(NumberConstant.FOUR,RoundingMode.HALF_UP));
         }else{
             //有数量数,单个项目的分摊金额=总分摊金额/数量
             costDetail.setComputeSingleResult(itemAllocationAmount.divide(responsibilityItem.getNum(),NumberConstant.FOUR,RoundingMode.HALF_UP));
+            costDetail.setStandComputeSingleResult(itemStandAllocationAmount.divide(responsibilityItem.getNum(),NumberConstant.FOUR,RoundingMode.HALF_UP));
         }
         return costDetail;
     }
@@ -685,6 +693,55 @@ public class ProjectCostServiceImpl implements ProjectCostService {
         return  itemAllocationAmount;
     }
 
+    /**
+     * 计算项目标准法的分摊金额
+     * @param computeProjectCost 主表对象
+     * @param costDepartmentProfit 科室损益数据
+     * @param shareParamCostVos 分摊配置明细
+     * @param computeShareParamDetailGroup 分摊参数计算明细汇总(按责任中心汇总)
+     * @param computeShareParamDetails 分摊参数计算明细
+     * @return
+     */
+    public  BigDecimal calcItemStandAllocationAmount(ShareParamTypeMap incomeShareParam,ComputeProjectCost computeProjectCost,CostDepartmentProfit costDepartmentProfit,List<ShareParamCostVo> shareParamCostVos,
+                                                List<ComputeShareParamDetailVo> computeShareParamDetailGroup,List<ComputeShareParamDetailVo> computeShareParamDetails){
+        BigDecimal itemAllocationAmount=BigDecimal.ZERO;
+        //按配置计算每个参数分摊金额
+        for (ShareParamCostVo shareParamCostVo : shareParamCostVos) {
+            //获取参数对应的责任中心汇总数据
+            Optional<ComputeShareParamDetailVo> firstShareParamGroup = computeShareParamDetailGroup.stream().filter(shareParamGroup -> shareParamGroup.getItemType().equals(computeProjectCost.getItemType()) &&
+                    shareParamGroup.getResponsibilityCode().equals(computeProjectCost.getResponsibilityCode()) && shareParamGroup.getShareParamCode().equals(shareParamCostVo.getShareParamCode())).findFirst();
+            //责任中心的汇总数据为0时,按项目收入分摊
+            if (!firstShareParamGroup.isPresent() || firstShareParamGroup.get().getStandComputeResult().compareTo(BigDecimal.ZERO) == NumberConstant.ZERO) {
+                //获取项目对应的收入数据
+                Optional<ComputeShareParamDetailVo> firstComputeShareParamDetail = computeShareParamDetails.stream().filter(computeShareParamDetailVo ->
+                        computeShareParamDetailVo.getShareParamCode().equals(incomeShareParam.getShareParamCode())).findFirst();
+                if (!firstComputeShareParamDetail.isPresent()) {
+                    throw new CostException(String.format("[%s-%s]没有收入数据无法分摊,请检查对应的收费项目数据及分摊参数计算结果数据", computeProjectCost.getResponsibilityName(), computeProjectCost.getName()));
+                }
+                //找到项目收入的责任中心汇总数据
+                ComputeShareParamDetailVo incomeShareParamGroup = computeShareParamDetailGroup.stream().filter(shareParamGroup -> shareParamGroup.getItemType().equals(computeProjectCost.getItemType()) &&
+                        shareParamGroup.getResponsibilityCode().equals(computeProjectCost.getResponsibilityCode()) && shareParamGroup.getShareParamCode().equals(incomeShareParam.getShareParamCode())).findFirst().get();
+                //分摊金额=损益项目金额*分摊参数占比*收入/责任中心总收入
+                BigDecimal paramAllocationAmount = costDepartmentProfit.getAmount().multiply(shareParamCostVo.getPercent()).multiply(firstComputeShareParamDetail.get().getStandComputeResult())
+                        .divide(incomeShareParamGroup.getStandComputeResult(), NumberConstant.FOUR, RoundingMode.HALF_UP);
+                itemAllocationAmount = itemAllocationAmount.add(paramAllocationAmount);
+            } else {
+                //获取项目对应的分摊参数数据
+                Optional<ComputeShareParamDetailVo> firstComputeShareParamDetail = computeShareParamDetails.stream().filter(computeShareParamDetailVo ->
+                        computeShareParamDetailVo.getShareParamCode().equals(shareParamCostVo.getShareParamCode())).findFirst();
+                if (!firstComputeShareParamDetail.isPresent()) {
+                    throw new CostException(String.format("[%s-%s]没有收入数据无法分摊,请检查对应的收费项目数据", computeProjectCost.getResponsibilityName(), computeProjectCost.getName()));
+                }
+                //分摊金额=损益项目金额*分摊参数占比*分摊参数数值/责任中心总分摊参数数值
+                BigDecimal paramAllocationAmount = costDepartmentProfit.getAmount().multiply(shareParamCostVo.getPercent()).multiply(firstComputeShareParamDetail.get().getStandComputeResult())
+                        .divide(firstShareParamGroup.get().getStandComputeResult(), NumberConstant.FOUR, RoundingMode.HALF_UP);
+                itemAllocationAmount = itemAllocationAmount.add(paramAllocationAmount);
+            }
+        }
+        return  itemAllocationAmount;
+    }
+
+
     /**
      * 创建项目成本汇总表对象
      * @param computeDate
@@ -692,12 +749,12 @@ public class ProjectCostServiceImpl implements ProjectCostService {
      * @param responsibilityItem
      * @param computeProjectCost
      * @param columnType
-     * @param computeResultGroup
+     * @param computeProjectCostDetails
      * @return
      */
     public ComputeProjectGroupCostDetail createComputeProjectGroupCostDetail(String computeDate,SessionUserVO currentUser,
                                                                              ComputeShareParamDetailVo responsibilityItem,ComputeProjectCost computeProjectCost,
-                                                                             String columnType,BigDecimal computeResultGroup){
+                                                                             String columnType,List<ComputeProjectCostDetail> computeProjectCostDetails){
         //汇总明细表对象
         ComputeProjectGroupCostDetail groupCostDetail = new ComputeProjectGroupCostDetail();
         groupCostDetail.setComputeDate(computeDate);
@@ -706,13 +763,20 @@ public class ProjectCostServiceImpl implements ProjectCostService {
         groupCostDetail.setCreateTime(new Date());
         groupCostDetail.setComputeProjectCost(computeProjectCost);
         groupCostDetail.setType(columnType);
+        //计算按列类型汇总的分摊金额
+        BigDecimal computeResultGroup = computeProjectCostDetails.stream().collect(Collectors.mapping(ComputeProjectCostDetail::getComputeResult, Collectors.reducing(BigDecimal.ZERO, BigDecimal::add)));
+        //计算按列类型汇总的标准法分摊金额
+        BigDecimal standComputeResultGroup = computeProjectCostDetails.stream().collect(Collectors.mapping(ComputeProjectCostDetail::getStandComputeResult, Collectors.reducing(BigDecimal.ZERO, BigDecimal::add)));
         groupCostDetail.setComputeResult(computeResultGroup);
+        groupCostDetail.setStandComputeResult(standComputeResultGroup);
         //项目没有数量时,单个项目的分摊金额为0
         if(responsibilityItem.getNum().compareTo(BigDecimal.ZERO)==NumberConstant.ZERO){
             groupCostDetail.setComputeSingleResult(BigDecimal.ZERO);
+            groupCostDetail.setStandComputeSingleResult(BigDecimal.ZERO);
         }else{
             //有数量时,单个项目的金额=总金额/数量
             groupCostDetail.setComputeSingleResult(computeResultGroup.divide(responsibilityItem.getNum(),NumberConstant.FOUR,RoundingMode.HALF_UP));
+            groupCostDetail.setStandComputeSingleResult(standComputeResultGroup.divide(responsibilityItem.getNum(),NumberConstant.FOUR,RoundingMode.HALF_UP));
         }
         return groupCostDetail;
     }

+ 161 - 4
src/main/java/com/kcim/service/impl/ShareParamServiceImpl.java

@@ -20,6 +20,7 @@ import lombok.extern.slf4j.Slf4j;
 import org.jetbrains.annotations.NotNull;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
+import org.springframework.util.ObjectUtils;
 import org.springframework.util.StringUtils;
 
 import java.math.BigDecimal;
@@ -62,6 +63,13 @@ public class ShareParamServiceImpl implements ShareParamService {
     ItemEquipmentMapRepository itemEquipmentMapRepository;
 
     ItemSpaceMapRepository itemSpaceMapRepository;
+
+    StandItemEmpMapRepository standItemEmpMapRepository;
+
+    StandItemEquipmentMapRepository standItemEquipmentMapRepository;
+
+    StandItemSpaceMapRepository standItemSpaceMapRepository;
+
     ShareParamTypeMapRepository shareParamTypeMapRepository;
     ResponsibilityDepartmentRepository responsibilityDepartmentRepository;
 
@@ -75,11 +83,15 @@ public class ShareParamServiceImpl implements ShareParamService {
     SqlService sqlService;
     ResponsibilityDepartmentService  responsibilityDepartmentService;
 
-    public ShareParamServiceImpl(ComputeShareParamRepository repository, ComputeShareParamDetailRepository detailRepository, ImportPatientItemRepository importPatientItemRepository, ItemRepository itemRepository, ItemEmpMapRepository itemEmpMapRepository, ItemEquipmentMapRepository itemEquipmentMapRepository, ItemSpaceMapRepository itemSpaceMapRepository, ShareParamTypeMapRepository shareParamTypeMapRepository, ResponsibilityDepartmentRepository responsibilityDepartmentRepository, CenterService centerService, ComputeStandShareParamRepository computeStandShareParamRepository, ComputeStandShareParamDetailRepository computeStandShareParamDetailRepository, StandItemService standItemService,SqlService sqlService,ResponsibilityDepartmentService  responsibilityDepartmentService) {
+    public ShareParamServiceImpl(ComputeShareParamRepository repository, ComputeShareParamDetailRepository detailRepository, ImportPatientItemRepository importPatientItemRepository, ItemRepository itemRepository, ItemEmpMapRepository itemEmpMapRepository, ItemEquipmentMapRepository itemEquipmentMapRepository, ItemSpaceMapRepository itemSpaceMapRepository, ShareParamTypeMapRepository shareParamTypeMapRepository, ResponsibilityDepartmentRepository responsibilityDepartmentRepository, CenterService centerService, ComputeStandShareParamRepository computeStandShareParamRepository, ComputeStandShareParamDetailRepository computeStandShareParamDetailRepository, StandItemService standItemService,SqlService sqlService,ResponsibilityDepartmentService  responsibilityDepartmentService
+    ,StandItemEmpMapRepository standItemEmpMapRepository,StandItemEquipmentMapRepository standItemEquipmentMapRepository,StandItemSpaceMapRepository standItemSpaceMapRepository) {
         this.repository = repository;
         this.detailRepository = detailRepository;
         this.importPatientItemRepository = importPatientItemRepository;
         this.itemRepository = itemRepository;
+        this.standItemEmpMapRepository = standItemEmpMapRepository;
+        this.standItemEquipmentMapRepository = standItemEquipmentMapRepository;
+        this.standItemSpaceMapRepository = standItemSpaceMapRepository;
         this.itemEmpMapRepository = itemEmpMapRepository;
         this.itemEquipmentMapRepository = itemEquipmentMapRepository;
         this.itemSpaceMapRepository = itemSpaceMapRepository;
@@ -252,6 +264,13 @@ public class ShareParamServiceImpl implements ShareParamService {
         List<ItemEquipmentMap> itemEquipmentMaps = itemEquipmentMapRepository.getList();
         //医疗服务项目的使用空间信息
         List<ItemSpaceMap> itemSpaceMaps = itemSpaceMapRepository.getList();
+        //标准项目字典人员对照
+        List<StandItemEmpMap> standItemEmpMaps = standItemEmpMapRepository.getList();
+        //标准项目字典设备对照
+        List<StandItemEquipmentMap> standItemEquipmentMaps = standItemEquipmentMapRepository.getList();
+        //标准项目字典空间对照
+        List<StandItemSpaceMap> standItemSpaceMaps = standItemSpaceMapRepository.getList();
+
         //科室责任中心对照信息
         List<ResponsibilityDepartIdVO> responsibilityDeptMaps = responsibilityDepartmentService.getResponsibilityDepart();
         //分摊参数设置信息
@@ -293,7 +312,7 @@ public class ShareParamServiceImpl implements ShareParamService {
                 computeShareParamList.add(computeShareCost);
                 //创建分摊参数主表对象对应的明细对象
                 shareParamTypeMaps.stream().forEach(shareParamType -> {
-                    ComputeShareParamDetail computeShareParamDetail = createComputeShareParamDetail(currentUser, computeDate, ptItem, computeShareCost, shareParamType, itemEmpMaps, itemEquipmentMaps, itemSpaceMaps);
+                    ComputeShareParamDetail computeShareParamDetail = createComputeShareParamDetail(currentUser, computeDate, ptItem, computeShareCost, shareParamType, itemEmpMaps, itemEquipmentMaps, itemSpaceMaps,standItemEmpMaps, standItemEquipmentMaps, standItemSpaceMaps);
                     ComputeShareParamDetailList.add(computeShareParamDetail);
                 });
             }
@@ -378,7 +397,8 @@ public class ShareParamServiceImpl implements ShareParamService {
      * @return
      */
     public  ComputeShareParamDetail createComputeShareParamDetail( SessionUserVO currentUser,String computeDate,PatientItemDepartmentGroupVo ptItem,ComputeShareParam computeShareCost,ShareParamTypeMap shareParamType,
-                                                                   List<ItemEmpMap> itemEmpMaps,List<ItemEquipmentMap> itemEquipmentMaps ,List<ItemSpaceMap> itemSpaceMaps){
+                                                                   List<ItemEmpMap> itemEmpMaps,List<ItemEquipmentMap> itemEquipmentMaps ,List<ItemSpaceMap> itemSpaceMaps,
+                                                                   List<StandItemEmpMap> standItemEmpMaps,List<StandItemEquipmentMap> standItemEquipmentMaps ,List<StandItemSpaceMap> standItemSpaceMaps){
         //明细表公共对象
         ComputeShareParamDetail costDetail = new ComputeShareParamDetail();
         costDetail.setComputeDate(computeDate);
@@ -391,30 +411,48 @@ public class ShareParamServiceImpl implements ShareParamService {
             BigDecimal computeSingleResult = calcEmpParamValue(shareParamType, ptItem, itemEmpMaps);
             costDetail.setComputeSingleResult(computeSingleResult);
             costDetail.setComputeResult(computeSingleResult.multiply(ptItem.getNum()));
+            //计算标准法参与人员的参数值
+            BigDecimal standComputeSingleResult = calcStandEmpParamValue(shareParamType, ptItem, standItemEmpMaps);
+            costDetail.setStandComputeSingleResult(standComputeSingleResult);
+            costDetail.setStandComputeResult(standComputeSingleResult.multiply(ptItem.getNum()));
         }else if(shareParamType.getSourceType().equals(NumberConstant.TWO_S)){
             //计算使用设备的参数值
             BigDecimal computeSingleResult = calcEquipmentParamValue(shareParamType, ptItem, itemEquipmentMaps);
             costDetail.setComputeSingleResult(computeSingleResult);
             costDetail.setComputeResult(computeSingleResult.multiply(ptItem.getNum()));
+            //计算标准法使用设备的参数值
+            BigDecimal standComputeSingleResult =  calcStandEquipmentParamValue(shareParamType, ptItem, standItemEquipmentMaps);
+            costDetail.setStandComputeSingleResult(standComputeSingleResult);
+            costDetail.setStandComputeResult(standComputeSingleResult.multiply(ptItem.getNum()));
         }else if(shareParamType.getSourceType().equals(NumberConstant.THREE_S)){
             //计算使用空间的参数值
             BigDecimal computeSingleResult = calcSpaceParamValue(shareParamType, ptItem, itemSpaceMaps);
             costDetail.setComputeSingleResult(computeSingleResult);
             costDetail.setComputeResult(computeSingleResult.multiply(ptItem.getNum()));
+            //计算标准法使用空间的参数值
+            BigDecimal standComputeSingleResult = calcStandSpaceParamValue(shareParamType, ptItem,standItemSpaceMaps);
+            costDetail.setStandComputeSingleResult(standComputeSingleResult);
+            costDetail.setStandComputeResult(standComputeSingleResult.multiply(ptItem.getNum()));
         }else if(shareParamType.getSourceType().equals(NumberConstant.FOUR_S)){
             //计算项目收入的参数值
             BigDecimal computeResult = ptItem.getAmount();
             if (!ptItem.getNum().equals(BigDecimal.ZERO.setScale(NumberConstant.TWO, RoundingMode.HALF_UP))) {
                 costDetail.setComputeSingleResult(computeResult.divide(ptItem.getNum(), NumberConstant.FOUR, RoundingMode.HALF_UP));
+                costDetail.setStandComputeSingleResult(computeResult.divide(ptItem.getNum(), NumberConstant.FOUR, RoundingMode.HALF_UP));
             } else {
-                costDetail.setComputeSingleResult(BigDecimal.ZERO);
+                costDetail.setComputeSingleResult(BigDecimal.ZERO.setScale(NumberConstant.FOUR, RoundingMode.HALF_UP));
+                costDetail.setStandComputeSingleResult(BigDecimal.ZERO.setScale(NumberConstant.FOUR, RoundingMode.HALF_UP));
             }
             costDetail.setComputeResult(computeResult);
+            costDetail.setStandComputeResult(computeResult);
         }else if(shareParamType.getSourceType().equals(NumberConstant.FIVE_S)){
             //计算项目数量的参数值
             BigDecimal computeResult = ptItem.getNum();
             costDetail.setComputeSingleResult(BigDecimal.ONE.setScale(NumberConstant.FOUR, RoundingMode.HALF_UP));
             costDetail.setComputeResult(computeResult);
+            //计算标准法项目数量的参数值
+            costDetail.setStandComputeSingleResult(BigDecimal.ONE.setScale(NumberConstant.FOUR, RoundingMode.HALF_UP));
+            costDetail.setStandComputeResult(computeResult);
         }
         costDetail.setComputeShareCost(computeShareCost);
         return costDetail;
@@ -459,6 +497,45 @@ public class ShareParamServiceImpl implements ShareParamService {
         return  paramValue;
     }
 
+    /**
+     * 计算标准项目参与人员的参数值
+     * @param ptItem
+     * @param standItemEmpMaps
+     * @return
+     */
+    public BigDecimal calcStandEmpParamValue(ShareParamTypeMap shareParamType,PatientItemDepartmentGroupVo ptItem,List<StandItemEmpMap> standItemEmpMaps){
+        //没有人员配置
+        if(CollectionUtils.isEmpty(standItemEmpMaps)){
+            return  BigDecimal.ZERO;
+        }
+        String sourceCode = shareParamType.getSourceCode();
+        //没有维护对应的来源代码
+        if(Objects.isNull(sourceCode)||sourceCode.equals(Constant.EMPTY_STR)){
+            return  BigDecimal.ZERO;
+        }
+        //获取项目对应的标准项目的参与人员配置
+        List<StandItemEmpMap> itemEmpList = standItemEmpMaps.stream().filter(itemEmp ->!ObjectUtils.isEmpty(ptItem.getDicItem())&& ptItem.getDicItem().getStandItemCode().equals(itemEmp.getStandItemCode())).collect(Collectors.toList());
+        if(CollectionUtils.isEmpty(itemEmpList)){
+            return  BigDecimal.ZERO;
+        }
+        BigDecimal paramValue=BigDecimal.ZERO;
+        //全部项目
+        if(sourceCode.equals(NumberConstant.ZERO_S)){
+            paramValue = itemEmpList.stream().map(itemEmp -> itemEmp.getExecuteTime().multiply(itemEmp.getNum())).reduce(BigDecimal.ZERO, BigDecimal::add);
+            return paramValue;
+        }
+        //不是全部的项目时,有可能会是多个
+        List<String> sourceCodeList = StrUtil.split(sourceCode, "|");
+        //获取符合条件的项目
+        List<StandItemEmpMap> activeItemEmpList = itemEmpList.stream().filter(itemEmp -> sourceCodeList.contains(itemEmp.getEmpTypeCode())).collect(Collectors.toList());
+        if(CollectionUtils.isEmpty(activeItemEmpList)){
+            return paramValue;
+        }
+        //只统计符合条件的项目
+        paramValue = activeItemEmpList.stream().map(itemEmp -> itemEmp.getExecuteTime().multiply(itemEmp.getNum())).reduce(BigDecimal.ZERO, BigDecimal::add);
+        return  paramValue;
+    }
+
 
     /**
      * 计算使用设备参数值
@@ -500,6 +577,46 @@ public class ShareParamServiceImpl implements ShareParamService {
         return  paramValue;
     }
 
+    /**
+     * 计算标准项目使用设备参数值
+     * @param shareParamType
+     * @param ptItem
+     * @param standItemEquipmentMaps
+     * @return
+     */
+    public BigDecimal calcStandEquipmentParamValue(ShareParamTypeMap shareParamType,PatientItemDepartmentGroupVo ptItem,List<StandItemEquipmentMap> standItemEquipmentMaps){
+        //没有人员配置
+        if(CollectionUtils.isEmpty(standItemEquipmentMaps)){
+            return  BigDecimal.ZERO;
+        }
+        String sourceCode = shareParamType.getSourceCode();
+        //没有维护对应的来源代码
+        if(Objects.isNull(sourceCode)||sourceCode.equals(Constant.EMPTY_STR)){
+            return  BigDecimal.ZERO;
+        }
+        //获取项目对应的标准项目的使用设备配置
+        List<StandItemEquipmentMap> itemEquipmentList = standItemEquipmentMaps.stream().filter(itemEmp ->!ObjectUtils.isEmpty(ptItem.getDicItem())&& itemEmp.getStandItemCode().equals(ptItem.getDicItem().getStandItemCode())).collect(Collectors.toList());
+        if(CollectionUtils.isEmpty(itemEquipmentList)){
+            return  BigDecimal.ZERO;
+        }
+        BigDecimal paramValue=BigDecimal.ZERO;
+        //全部项目
+        if(sourceCode.equals(NumberConstant.ZERO_S)){
+            paramValue = itemEquipmentList.stream().map(itemEmp -> itemEmp.getExecuteTime().multiply(itemEmp.getNum())).reduce(BigDecimal.ZERO, BigDecimal::add);
+            return paramValue;
+        }
+        //不是全部的项目时,有可能会是多个
+        List<String> sourceCodeList = StrUtil.split(sourceCode, "|");
+        //获取符合条件的项目
+        List<StandItemEquipmentMap> activeItemEquipmentList = itemEquipmentList.stream().filter(itemEmp -> sourceCodeList.contains(itemEmp.getEquipmentCode())).collect(Collectors.toList());
+        if(CollectionUtils.isEmpty(activeItemEquipmentList)){
+            return paramValue;
+        }
+        //只统计符合条件的项目
+        paramValue = activeItemEquipmentList.stream().map(itemEmp -> itemEmp.getExecuteTime().multiply(itemEmp.getNum())).reduce(BigDecimal.ZERO, BigDecimal::add);
+        return  paramValue;
+    }
+
     /**
      * 计算使用空间参数值
      * @param shareParamType
@@ -540,6 +657,46 @@ public class ShareParamServiceImpl implements ShareParamService {
         return  paramValue;
     }
 
+    /**
+     * 计算标准项目使用空间参数值
+     * @param shareParamType
+     * @param ptItem
+     * @param standItemSpaceMaps
+     * @return
+     */
+    public BigDecimal calcStandSpaceParamValue(ShareParamTypeMap shareParamType,PatientItemDepartmentGroupVo ptItem,List<StandItemSpaceMap> standItemSpaceMaps){
+        //没有人员配置
+        if(CollectionUtils.isEmpty(standItemSpaceMaps)){
+            return  BigDecimal.ZERO;
+        }
+        String sourceCode = shareParamType.getSourceCode();
+        //没有维护对应的来源代码
+        if(Objects.isNull(sourceCode)||sourceCode.equals(Constant.EMPTY_STR)){
+            return  BigDecimal.ZERO;
+        }
+        //获取项目对应的使用空间配置
+        List<StandItemSpaceMap> itemSpaceList = standItemSpaceMaps.stream().filter(itemEmp ->!ObjectUtils.isEmpty(ptItem.getDicItem())&&itemEmp.getStandItemCode().equals(ptItem.getDicItem().getStandItemCode())).collect(Collectors.toList());
+        if(CollectionUtils.isEmpty(itemSpaceList)){
+            return  BigDecimal.ZERO;
+        }
+        BigDecimal paramValue=BigDecimal.ZERO;
+        //全部项目
+        if(sourceCode.equals(NumberConstant.ZERO_S)){
+            paramValue = itemSpaceList.stream().map(itemEmp -> itemEmp.getExecuteTime().multiply(itemEmp.getNum())).reduce(BigDecimal.ZERO, BigDecimal::add);
+            return paramValue;
+        }
+        //不是全部的项目时,有可能会是多个
+        List<String> sourceCodeList = StrUtil.split(sourceCode, "|");
+        //获取符合条件的项目
+        List<StandItemSpaceMap> activeItemSpaceList = itemSpaceList.stream().filter(itemEmp -> sourceCodeList.contains(itemEmp.getSpaceCode())).collect(Collectors.toList());
+        if(CollectionUtils.isEmpty(activeItemSpaceList)){
+            return paramValue;
+        }
+        //只统计符合条件的项目
+        paramValue = activeItemSpaceList.stream().map(itemEmp -> itemEmp.getExecuteTime().multiply(itemEmp.getNum())).reduce(BigDecimal.ZERO, BigDecimal::add);
+        return  paramValue;
+    }
+
     /**
      * 根据责任中心获取医疗服务项目分类
      * @param dict

+ 4 - 0
src/main/java/com/kcim/vo/ComputeShareParamDetailVo.java

@@ -30,6 +30,10 @@ public class ComputeShareParamDetailVo {
 
      private BigDecimal computeSingleResult;
 
+     private BigDecimal standComputeResult;
+
+     private BigDecimal standComputeSingleResult;
+
      private String orderCode;
 
      private String itemType;

+ 6 - 2
src/main/resources/mapper/ComputeShareParamMapper.xml

@@ -85,7 +85,9 @@
             a.`name`,
             b.share_param_code,
             sum(b.compute_result) as compute_result,
-            sum(b.compute_single_result) as compute_single_result
+            sum(b.compute_single_result) as compute_single_result,
+            sum(b.stand_compute_result) as stand_compute_result,
+            sum(b.stand_compute_single_result) as stand_compute_single_result
         FROM
             compute_share_param a
                 LEFT JOIN compute_share_param_detail b ON a.id = b.share_param_id
@@ -109,7 +111,9 @@
             sum(a.num) as num,
             b.share_param_code,
             sum(b.compute_result) as compute_result,
-            sum(b.compute_single_result) as compute_single_result
+            sum(b.compute_single_result) as compute_single_result,
+            sum(b.stand_compute_result) as stand_compute_result,
+            sum(b.stand_compute_single_result) as stand_compute_single_result
         FROM
             compute_share_param a
                 LEFT JOIN compute_share_param_detail b ON a.id = b.share_param_id