ソースを参照

Merge remote-tracking branch 'origin/master'

liuyc 2 年 前
コミット
75264d6414

+ 4 - 0
blade-service/blade-control/src/main/java/org/springblade/control/mapper/EmployeeTaskInfoMapper.java

@@ -49,4 +49,8 @@ public interface EmployeeTaskInfoMapper extends BaseMapper<EmployeeTaskInfo> {
     List<EmployeeTaskInfo> getAllMaintainSalaryByYear2(@Param("year") int y);
 
     List<EmployeeTaskInfo> getAllMaintainSalaryByProject(@Param("projectId") Long projectId);
+
+    List<EmployeeTaskInfo> getAllMaintainSalaryByProjectAndCostType(@Param("projectId") Long projectId,@Param("costType") Integer costType);
+
+    List<EmployeeTaskInfo> getAllEmployeeSalaryByProjectAndCostType(@Param("projectId") Long projectId,@Param("costType") Integer costType);
 }

+ 13 - 1
blade-service/blade-control/src/main/java/org/springblade/control/mapper/EmployeeTaskInfoMapper.xml

@@ -36,7 +36,11 @@
         </if>
     </select>
     <select id="getAllEmployeeSalaryByYear2" resultType="org.springblade.control.entity.EmployeeTaskInfo">
-        select * from c_employee_task_info WHERE work_type = 1 and DATE_FORMAT(one_day, '%Y') = #{year}
+        select * from c_employee_task_info
+        WHERE work_type = 1
+        <if test="year != 0">
+            and DATE_FORMAT(one_day ,'%Y') = #{year}
+        </if>
     </select>
     <select id="getAllEmployeeSalaryByProject" resultType="org.springblade.control.entity.EmployeeTaskInfo">
         select * from c_employee_task_info WHERE work_type = 1 and project_id = #{projectId}
@@ -64,4 +68,12 @@
     <select id="getAllMaintainSalaryByProject" resultType="org.springblade.control.entity.EmployeeTaskInfo">
         select * from c_employee_task_info WHERE work_type = 2 and project_id = #{projectId}
     </select>
+    <select id="getAllMaintainSalaryByProjectAndCostType"
+            resultType="org.springblade.control.entity.EmployeeTaskInfo">
+        SELECT * FROM c_employee_task_info WHERE project_id = #{projectId} and cost_type  = #{costType} and work_type = 2
+    </select>
+    <select id="getAllEmployeeSalaryByProjectAndCostType"
+            resultType="org.springblade.control.entity.EmployeeTaskInfo">
+        SELECT * FROM c_employee_task_info WHERE project_id = #{projectId} and cost_type  = #{costType} and work_type = 1
+    </select>
 </mapper>

+ 1 - 3
blade-service/blade-control/src/main/java/org/springblade/control/mapper/ProjectInfoMapper.xml

@@ -61,7 +61,6 @@
         select
             IFNULL((select sum(cci.contract_money)  from c_control_contract_info cci WHERE cci.is_deleted = 0),0) as allContractMoney,
             IFNULL((select SUM(cbs.project_cost_total)  from c_project_cost_budget_stats cbs WHERE cbs.is_deleted = 0),0) as allProjectCost,
-            IFNULL((select SUM(pcb.actual_total_money)  from c_project_cost_budget pcb WHERE  pcb.is_deleted =0 and pcb.task_approve = 1),0) as "allPracticalDisburse",
             IFNULL((select SUM(cri.practical_returned_money)  from c_contract_returned_info cri WHERE cri.is_deleted = 0),0) as allReturned
     </select>
     <select id="ProjectListStats" resultType="org.springblade.control.vo.AllProjectStatsVO">
@@ -70,8 +69,7 @@
             cpi.name as 'projectName',
             cci.contract_money  as 'contractMoney',
                 (select cbs.project_cost_total from c_project_cost_budget_stats cbs WHERE cpi.id = cbs.project_id  and cbs.is_deleted = 0) as 'budgetCost',
-                (select SUM(pcb.actual_total_money)  from c_project_cost_budget pcb WHERE  pcb.is_deleted =0 and pcb.project_id = cpi.id and pcb.task_approve = 1)as 'practicalPayCost',
-                (select SUM(cri.practical_returned_money)  from c_contract_returned_info cri WHERE cpi.id = cri.project_id and cri.is_deleted = 0) as 'ReturnedMoney',
+                IFNULL((select SUM(cri.practical_returned_money)  from c_contract_returned_info cri WHERE cpi.id = cri.project_id and cri.is_deleted = 0), 0)  as 'ReturnedMoney',
                 (cci.contract_money - IFNULL((select SUM(cri.practical_returned_money) from c_contract_returned_info cri WHERE cri.contract_id = cci.id and cri.is_deleted = 0),0)) as 'unreturnedMoney'
         from c_control_project_info cpi left join c_control_contract_info cci on cpi.id = cci.project_id and cci.is_deleted = 0
         WHERE cpi.is_deleted = 0

+ 13 - 2
blade-service/blade-control/src/main/java/org/springblade/control/service/IEmployeeTaskInfoService.java

@@ -55,9 +55,15 @@ public interface IEmployeeTaskInfoService extends BaseService<EmployeeTaskInfo>
     //根据年查询当年所有的维护支出,并按照项目分组,组里的数据是项目年支出,如果该项目没有支出将不会插入
     Map<Long,BigDecimal> getAllMaintainSalaryByYear3(int y);
 
-    //获取项目的所有支出,按环节分组,如果该环节没有支出,将不会插入
+    //获取项目的所有维护支出,按环节分组,如果该环节没有支出,将不会插入
     Map<Long,BigDecimal> getAllMaintainSalaryByProject(Long projectId);
 
+    //获取项目的所有维护支出,按费用分类分组,如果该费用分类没有支出,将不会插入
+    Map<Integer,BigDecimal> getAllMaintainSalaryByProject2(Long projectId);
+
+    //获取项目id和 费用分类,获取维护支出,直接返回
+    Map<Long, List<EmployeeTaskInfo>> getAllMaintainSalaryByProjectAndCostType(Long projectId,Integer costType);
+
 
     /**
      *  实际支出相关接口
@@ -71,15 +77,20 @@ public interface IEmployeeTaskInfoService extends BaseService<EmployeeTaskInfo>
     //根据年查询当年所有的人工支出,并按照项目分组,组里的数据是项目年支出,如果该项目没有支出将不会插入
     Map<Long,BigDecimal> getAllEmployeeSalaryByYear3(int y);
 
-    //获取项目的所有支出,按环节分组,如果该环节没有支出,将不会插入
+    //获取项目的所有人工支出,按环节分组,如果该环节没有支出,将不会插入
     Map<Long,BigDecimal> getAllEmployeeSalaryByProject(Long projectId);
 
+    //获取项目的所有人工支出,按费用分类分组,如果该费用分类没有支出,将不会插入
+    Map<Integer,BigDecimal> getAllEmployeeSalaryByProject2(Long projectId);
+
     //根据年查询所有人工支出,按月分组,当月没有支出将不会插入
     Map<Integer, BigDecimal> getAllEmployeeSalaryByYear4(int y);
 
     //根据年查询除所有人工支出,按部门分组,再按月统计
     Map<Long,Map<Integer, BigDecimal>> getAllEmployeeSalaryByYear5(int y);
 
+    //获取项目id和 费用分类,获取人工支出,直接返回
+    Map<Long,List<EmployeeTaskInfo>> getAllEmployeeSalaryByProjectAndCostType(Long projectId,Integer costType);
 
     /**
      *  预算支出相关接口

+ 78 - 20
blade-service/blade-control/src/main/java/org/springblade/control/service/impl/EmployeeTaskInfoServiceImpl.java

@@ -1,33 +1,13 @@
 package org.springblade.control.service.impl;
 
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import lombok.AllArgsConstructor;
-import org.apache.commons.lang.StringUtils;
-import org.springblade.control.dto.ControlProjectInfoDTO;
-import org.springblade.control.dto.ProjectCostBudgetStatsDTO;
 import org.springblade.control.entity.*;
 import org.springblade.control.mapper.*;
-import org.springblade.control.service.IContractInfoService;
 import org.springblade.control.service.IEmployeeTaskInfoService;
-import org.springblade.control.service.IProjectCostBudgetService;
-import org.springblade.control.vo.*;
-import org.springblade.core.log.exception.ServiceException;
 import org.springblade.core.mp.base.BaseServiceImpl;
-import org.springblade.core.mp.support.Query;
-import org.springblade.core.secure.utils.SecureUtil;
-import org.springblade.system.user.entity.User;
-import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
 
 import java.math.BigDecimal;
-import java.math.RoundingMode;
-import java.time.LocalDate;
-import java.time.LocalDateTime;
-import java.time.temporal.ChronoUnit;
-import java.time.temporal.TemporalAdjusters;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -170,6 +150,44 @@ public class EmployeeTaskInfoServiceImpl extends BaseServiceImpl<EmployeeTaskInf
         return null;
     }
 
+    /**
+     * 获取项目的所有维护支出,按费用分类分组,如果该费用分类没有支出,将不会插入
+     * @param projectId
+     * @return
+     */
+    @Override
+    public Map<Integer, BigDecimal> getAllMaintainSalaryByProject2(Long projectId) {
+        List<EmployeeTaskInfo> list = baseMapper.getAllMaintainSalaryByProject(projectId);
+        if (list != null && list.size() > 0){
+            //按项目分组
+            Map<Integer, BigDecimal> monthMap = list.stream().collect(
+                    Collectors.groupingBy(
+                            o -> o.getCostType(),
+                            Collectors.mapping(EmployeeTaskInfo::getEmployeeSalary, Collectors.reducing(BigDecimal.ZERO, BigDecimal::add))
+                    ));
+            return monthMap;
+        }
+        return null;
+    }
+
+    /**
+     * 获取项目id和 费用分类,获取维护支出,直接返回
+     * @param projectId
+     * @param costType
+     * @return
+     */
+    @Override
+    public Map<Long, List<EmployeeTaskInfo>> getAllMaintainSalaryByProjectAndCostType(Long projectId, Integer costType) {
+        List<EmployeeTaskInfo> list = baseMapper.getAllMaintainSalaryByProjectAndCostType(projectId, costType);
+        if (list != null && list.size() > 0){
+            //按项目分组
+            Map<Long, List<EmployeeTaskInfo>> monthMap = list.parallelStream()
+                    .collect(Collectors.groupingBy(EmployeeTaskInfo::getProjectProcess));
+            return monthMap;
+        }
+        return null;
+    }
+
     /**
      * 根据年查询当年所有的人工支出
      * @param y
@@ -252,6 +270,27 @@ public class EmployeeTaskInfoServiceImpl extends BaseServiceImpl<EmployeeTaskInf
         return null;
     }
 
+
+    /**
+     * 获取项目的所有人工支出,按费用分类分组,如果该费用分类没有支出,将不会插入
+     * @param projectId
+     * @return
+     */
+    @Override
+    public Map<Integer, BigDecimal> getAllEmployeeSalaryByProject2(Long projectId) {
+        List<EmployeeTaskInfo> list = baseMapper.getAllEmployeeSalaryByProject(projectId);
+        if (list != null && list.size() > 0){
+            //按项目分组
+            Map<Integer, BigDecimal> monthMap = list.stream().collect(
+                    Collectors.groupingBy(
+                            o -> o.getCostType(),
+                            Collectors.mapping(EmployeeTaskInfo::getEmployeeSalary, Collectors.reducing(BigDecimal.ZERO, BigDecimal::add))
+                    ));
+            return monthMap;
+        }
+        return null;
+    }
+
     /**
      * 根据年查询所有人工支出,按月分组,当月没有支出将不会插入
      * @param y
@@ -300,6 +339,25 @@ public class EmployeeTaskInfoServiceImpl extends BaseServiceImpl<EmployeeTaskInf
         return null;
     }
 
+    /**
+     * 获取项目id和 费用分类,获取人工支出,直接返回
+     * @param projectId
+     * @param costType
+     * @return
+     */
+    @Override
+    public Map<Long, List<EmployeeTaskInfo>> getAllEmployeeSalaryByProjectAndCostType(Long projectId, Integer costType) {
+        List<EmployeeTaskInfo> list = baseMapper.getAllEmployeeSalaryByProjectAndCostType(projectId, costType);
+        if (list != null && list.size() > 0){
+            //按项目分组
+            Map<Long, List<EmployeeTaskInfo>> monthMap = list.parallelStream()
+                    .collect(Collectors.groupingBy(EmployeeTaskInfo::getProjectProcess));
+            return monthMap;
+        }
+        return null;
+    }
+
+
     @Override
     public Map<Long, BigDecimal> getAllBudgetSalaryByProject(Long projectId) {
         List<EmployeeTaskInfo> list = baseMapper.getAllBudgetSalaryByProject(projectId);

+ 38 - 83
blade-service/blade-control/src/main/java/org/springblade/control/service/impl/ProjectInfoServiceImpl.java

@@ -4,6 +4,7 @@ import cn.hutool.core.date.DateUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.mysql.cj.protocol.x.ReusableInputStream;
 import lombok.AllArgsConstructor;
 import org.springblade.common.utils.SnowFlakeUtil;
 import org.springblade.control.dto.ControlProjectInfoDTO;
@@ -52,6 +53,8 @@ public class ProjectInfoServiceImpl extends BaseServiceImpl<ProjectInfoMapper, C
 
     private final JdbcTemplate jdbcTemplate;
 
+    private final IEmployeeTaskInfoService employeeTaskInfoService;
+
 
     public String getProjectNameByBudgetId(Long id){
         return baseMapper.getProjectNameByBudgetId(id);
@@ -170,11 +173,13 @@ public class ProjectInfoServiceImpl extends BaseServiceImpl<ProjectInfoMapper, C
     @Override
     public AllProjectStatsVO allProjectStats() {
         AllProjectStatsVO vo = baseMapper.allProjectStats();
+        //获取截至目前的人工支出
+        BigDecimal salary = employeeTaskInfoService.getAllEmployeeSalaryByYear(0);
         //获取截至目前所有维护支出
-        BigDecimal cost2 = budgetService.getAllMaintainCost2();
+        BigDecimal cost2 = employeeTaskInfoService.getAllMaintainSalaryByYear(0);
         //所有的报销支出
         BigDecimal decimal = this.getThisYearReimburse(0);
-        vo.setAllPracticalDisburse(vo.getAllPracticalDisburse().add(cost2).add(decimal));
+        vo.setAllPracticalDisburse(salary.add(cost2).add(decimal));
         return vo;
     }
 
@@ -184,12 +189,10 @@ public class ProjectInfoServiceImpl extends BaseServiceImpl<ProjectInfoMapper, C
     @Override
     public List<AllProjectStatsVO> ProjectListStats() {
         List<AllProjectStatsVO> vos = baseMapper.ProjectListStats();
+        //获取人工支出
+        Map<Long, BigDecimal> costMap = employeeTaskInfoService.getAllEmployeeSalaryByYear3(0);
         //获取维护支出
-        Map<Long, BigDecimal> map = budgetService.getAllMaintainCost5();
-        Boolean isMaintain = true;
-        if (map == null || map.size() <= 0){
-            isMaintain = false;
-        }
+        Map<Long, BigDecimal> maintainMap = employeeTaskInfoService.getAllMaintainSalaryByYear3(0);
         //报销支出
         Map<Long, BigDecimal> reimburseMap = this.getYearReimburseByYear(0);
         Boolean isReimburse = true;
@@ -197,23 +200,23 @@ public class ProjectInfoServiceImpl extends BaseServiceImpl<ProjectInfoMapper, C
             isReimburse = false;
         }
         for (AllProjectStatsVO vo : vos) {
-            if (isMaintain) {
-                BigDecimal decimal = map.get(vo.getProjectId());
-                //维护支出
-                if (decimal != null) {
-                    if (vo.getPracticalPayCost() == null){
-                        vo.setPracticalPayCost(new BigDecimal(0));
-                    }
-                    vo.setPracticalPayCost(vo.getPracticalPayCost().add(decimal));
-                }
-                //计算报销
-                if (isReimburse){
-                    BigDecimal decimals = reimburseMap.get(vo.getProjectId());
-                    if (decimals != null){
-                        vo.setPracticalPayCost(vo.getPracticalPayCost().add(decimals));
-                    }
+            BigDecimal big = new BigDecimal(0);
+            //人工支出
+            if (costMap != null && costMap.get(vo.getProjectId()) != null){
+                big = big.add(costMap.get(vo.getProjectId()));
+            }
+            //维护支出
+            if (maintainMap != null && maintainMap.get(vo.getProjectId()) != null){
+                big = big.add(maintainMap.get(vo.getProjectId()));
+            }
+            //计算报销
+            if (isReimburse){
+                BigDecimal decimals = reimburseMap.get(vo.getProjectId());
+                if (decimals != null){
+                    big = big.add(decimals);
                 }
             }
+            vo.setPracticalPayCost(big);
         }
         return vos;
     }
@@ -228,25 +231,16 @@ public class ProjectInfoServiceImpl extends BaseServiceImpl<ProjectInfoMapper, C
         List<DictInfo> costTypeDict = baseMapper.getCostTypeDict();
         //获取项目所有预算
         List<ProjectCostBudget> budgets = budgetService.getAllBudgetByProjectId(id);
-        //获取项目所有的维护预算
-        Set<Long> set = budgetService.getAllMaintainBudgetId(id);
-        //从预算中排除维护预算
-//        budgets = budgets.stream().filter(l->!set.contains(l.getId())).collect(Collectors.toList());
-        //获取项目所有维护预算
-        Map<Integer, BigDecimal> map = budgetService.getAllMaintainCost6(id);
-        Boolean isMaintain = true;
-        if (map == null || map.size() <= 0){
-            isMaintain = false;
-        }
-
+        //人工支出
+        Map<Integer, BigDecimal> costMap = employeeTaskInfoService.getAllEmployeeSalaryByProject2(id);
+        //维护支出
+        Map<Integer, BigDecimal> maintainMap = employeeTaskInfoService.getAllMaintainSalaryByProject2(id);
         //报销支出
         Map<Integer, BigDecimal> reimburseMap = this.getProjectReimburseByCostType(id);
         Boolean isReimburse = true;
         if (reimburseMap == null || reimburseMap.size() <= 0){
             isReimburse = false;
         }
-        //获取项目所有实际费用
-        List<ProjectCostBudget> practicalList = budgetService.getAllPracticalBudgetByProjectId(id);
         if (budgets != null && budgets.size() > 0){
             Map<Integer, List<ProjectCostBudget>> budgetMap = budgets.parallelStream()
                     .collect(Collectors.groupingBy(ProjectCostBudget::getCostType));
@@ -262,31 +256,19 @@ public class ProjectInfoServiceImpl extends BaseServiceImpl<ProjectInfoMapper, C
                         bigDecimal = bigDecimal.add(budget.getBudgetCountMoney());
                     }
                 }
-                //加上每个部门的维护预算
-//                if (isMaintain){
-//                    BigDecimal decimal = map.get(i);
-//                    if (decimal != null){
-//                        bigDecimal = bigDecimal.add(decimal);
-//                    }
-//                }
+                //测算成本
                 vo.setBudgetCost(bigDecimal);
                 //设置费用分类实际费用,目前设置人工,维护支出,报销支出
                 BigDecimal practicalCost = new BigDecimal(0);
-                if (practicalList != null && practicalList.size() > 0){
-                    for (ProjectCostBudget budget : practicalList) {
-                        if (budget.getCostType() == i){
-                            practicalCost = practicalCost.add(budget.getActualTotalMoney());
-                        }
-                    }
+                //人工成本
+                if (costMap != null && costMap.get(i) != null ){
+                    practicalCost = practicalCost.add(costMap.get(i));
                 }
-                //加上每个部门的维护支出
-                if (isMaintain){
-                    BigDecimal decimal = map.get(i);
-                    if (decimal != null){
-                        practicalCost = practicalCost.add(decimal);
-                    }
+                //维护支出
+                if (maintainMap != null && maintainMap.get(i) != null ){
+                    practicalCost = practicalCost.add(maintainMap.get(i));
                 }
-                //加上每个部门的报销支出
+                //报销支出
                 if (isReimburse){
                     BigDecimal decimals = reimburseMap.get(i);
                     if (decimals != null){
@@ -304,35 +286,8 @@ public class ProjectInfoServiceImpl extends BaseServiceImpl<ProjectInfoMapper, C
                 list.get(0).setTotal(big);
             }
             return list;
-        }else {
-            if (isMaintain){
-                for (int i = 1; i <= 6; i++) {
-                    AllProjectStatsVO vo = new AllProjectStatsVO();
-                    vo.setProjectId(id);
-                    vo.setCostType(i);
-                    vo.setCostTypeValue(costTypeDict.get(i-1).getDictName());
-                    BigDecimal bigDecimal = new BigDecimal(0);
-                    BigDecimal practicalCost = new BigDecimal(0);
-                    if (practicalList != null && practicalList.size() > 0){
-                        for (ProjectCostBudget budget : practicalList) {
-                            if (budget.getCostType() == i){
-                                practicalCost = practicalCost.add(budget.getActualTotalMoney());
-                            }
-                        }
-                    }
-                    BigDecimal decimal = map.get(i);
-                    if (decimal != null){
-                        bigDecimal = bigDecimal.add(decimal);
-                        practicalCost = practicalCost.add(decimal);
-                    }
-                    vo.setBudgetCost(bigDecimal);
-                    vo.setPracticalCost(practicalCost);
-                    list.add(vo);
-                }
-                return list;
-            }
-            return null;
         }
+        return null;
     }
 
     /**

+ 34 - 21
blade-service/blade-control/src/main/java/org/springblade/control/service/impl/ProjectProcessServiceImpl.java

@@ -5,9 +5,11 @@ import lombok.AllArgsConstructor;
 import org.springblade.common.utils.SnowFlakeUtil;
 import org.springblade.control.controller.ProjectInfoController;
 import org.springblade.control.dto.ControlProjectInfoDTO;
+import org.springblade.control.entity.EmployeeTaskInfo;
 import org.springblade.control.entity.ProjectCostBudget;
 import org.springblade.control.entity.ProjectProcess;
 import org.springblade.control.mapper.ProjectProcessMapper;
+import org.springblade.control.service.IEmployeeTaskInfoService;
 import org.springblade.control.service.IProjectCostBudgetService;
 import org.springblade.control.service.IProjectInfoService;
 import org.springblade.control.service.IProjectProcessService;
@@ -33,6 +35,7 @@ import java.util.stream.Collectors;
 public class ProjectProcessServiceImpl extends BaseServiceImpl<ProjectProcessMapper, ProjectProcess> implements IProjectProcessService {
     private final ProjectProcessMapper processMapper;
     private final IProjectCostBudgetService budgetService;
+    private final IEmployeeTaskInfoService employeeTaskInfoService;
 
 
     /**
@@ -122,12 +125,10 @@ public class ProjectProcessServiceImpl extends BaseServiceImpl<ProjectProcessMap
     public List<ProjectProcessVO> processService(Long projectId, Integer costType) {
         //获取当前项目所有项目环节
         List<ProjectProcessVO> list = processMapper.getProjectProcess(projectId);
-        //获取项目所有维护预算
-        Map<Long, BigDecimal> maintainMap = budgetService.getAllMaintainCost7(projectId, costType);
-        Boolean isMaintain = true;
-        if (maintainMap == null || maintainMap.size() <= 0){
-            isMaintain = false;
-        }
+        //根据项目,费用分类,获取人工支出
+        Map<Long, List<EmployeeTaskInfo>> costMap = employeeTaskInfoService.getAllEmployeeSalaryByProjectAndCostType(projectId, costType);
+        //根据项目,费用分类,获取维护支出
+        Map<Long, List<EmployeeTaskInfo>> maintainList = employeeTaskInfoService.getAllMaintainSalaryByProjectAndCostType(projectId, costType);
         //报销支出
         Map<Long, BigDecimal> reimburseMap = this.getProjectReimburseByCostType(projectId,costType);
         Boolean isReimburse = true;
@@ -151,35 +152,47 @@ public class ProjectProcessServiceImpl extends BaseServiceImpl<ProjectProcessMap
         }
         //包含此环节就统计,不包含就跳出
         for (ProjectProcessVO vo : list) {
-            if ((isBudgets && map.get(vo.getId()) != null) || (isMaintain && maintainMap.get(vo.getId()) != null) || (isReimburse && reimburseMap.get(vo.getId()) != null)){
+            if ((costMap != null && costMap.get(vo.getId()) != null) || (maintainList != null && maintainList.get(vo.getId()) != null) || (isReimburse && reimburseMap.get(vo.getId()) != null)){
                 //设置参与
                 vo.setIsParticipate(1);
                 //时间成本统计总天数,人员投入统计总人数,成本支出统计当前环节总支出
                 BigDecimal costDisburse = new BigDecimal(0);
+                //时间成本
                 BigDecimal timeCost = new BigDecimal(0);
+                //人员投入
                 int staffTotal = 0;
                 //设置费用明细
                 List<ProjectProcessVO.costDetail> details = new ArrayList<>();
-                if (isBudgets && map.get(vo.getId()) != null) {
-                    List<ProjectCostBudget> budgetList = map.get(vo.getId());
-                    staffTotal = budgetList.size();
-                    for (ProjectCostBudget budget : budgetList) {
-                        costDisburse = costDisburse.add(budget.getActualTotalMoney());
-                        timeCost = timeCost.add(budget.getPracticalTaskDays());
-                    }
+                //人工成本
+                if (costMap != null && costMap.get(vo.getId()) != null){
+                    List<EmployeeTaskInfo> infoList = costMap.get(vo.getId());
+                    BigDecimal cost = infoList.stream().map(EmployeeTaskInfo::getEmployeeSalary).reduce(BigDecimal.ZERO, BigDecimal::add);
+                    costDisburse = costDisburse.add(cost);
+                    timeCost = timeCost.add(new BigDecimal(infoList.size()));
+                    Map<Long, List<EmployeeTaskInfo>> listMap = infoList.parallelStream()
+                            .collect(Collectors.groupingBy(EmployeeTaskInfo::getEmployeeId));
+                    staffTotal += listMap.size();
+                    //费用详情
                     ProjectProcessVO.costDetail costDetail = new ProjectProcessVO.costDetail();
                     costDetail.setCostTypeValue("人工成本");
-                    costDetail.setPrice(costDisburse);
-                    costDetail.setTotal(costDisburse);
+                    costDetail.setPrice(cost);
+                    costDetail.setTotal(cost);
                     details.add(costDetail);
                 }
-                //维护支出
-                if (isMaintain && maintainMap.get(vo.getId()) != null){
-                    costDisburse = costDisburse.add(maintainMap.get(vo.getId()));
+                if (maintainList != null && maintainList.get(vo.getId()) != null){
+                    List<EmployeeTaskInfo> infoList = maintainList.get(vo.getId());
+                    BigDecimal cost = infoList.stream().map(EmployeeTaskInfo::getEmployeeSalary).reduce(BigDecimal.ZERO, BigDecimal::add);
+                    costDisburse = costDisburse.add(cost);
+                    timeCost = timeCost.add(new BigDecimal(infoList.size()));
+                    //维护支出目前统计不了人
+//                    Map<Long, List<EmployeeTaskInfo>> listMap = infoList.parallelStream()
+//                            .collect(Collectors.groupingBy(EmployeeTaskInfo::getEmployeeId));
+//                    staffTotal += listMap.size();
+                    //费用详情
                     ProjectProcessVO.costDetail costDetail = new ProjectProcessVO.costDetail();
                     costDetail.setCostTypeValue("维护支出");
-                    costDetail.setPrice(maintainMap.get(vo.getId()));
-                    costDetail.setTotal(maintainMap.get(vo.getId()));
+                    costDetail.setPrice(cost);
+                    costDetail.setTotal(cost);
                     details.add(costDetail);
                 }
                 //报销支出