Преглед изворни кода

项目统计列表-所有接口,添加维护支出

qianxb пре 2 година
родитељ
комит
78cdfeff34

+ 2 - 0
blade-service/blade-control/src/main/java/org/springblade/control/mapper/ProjectCostBudgetMapper.java

@@ -96,4 +96,6 @@ public interface ProjectCostBudgetMapper extends BaseMapper<ProjectCostBudget> {
     List<ProjectCostBudget> getAllMaintainPlan();
 
     List<ProjectCostBudget> getAllMaintainPlan2(@Param("projectId")Long projectId);
+
+    List<ProjectCostBudget> getAllMaintainPlan3(@Param("projectId")Long projectId,@Param("costType")Integer costType);
 }

+ 5 - 0
blade-service/blade-control/src/main/java/org/springblade/control/mapper/ProjectCostBudgetMapper.xml

@@ -284,6 +284,11 @@
         from c_project_cost_budget
         WHERE project_id = #{projectId} and plan_task_type > 0 and (SELECT dict_value from c_dict_info cdi WHERE id = plan_task_type) = 2
     </select>
+    <select id="getAllMaintainPlan3" resultType="org.springblade.control.entity.ProjectCostBudget">
+        SELECT *
+        from c_project_cost_budget
+        WHERE project_id = #{projectId} and cost_type = #{costType} and plan_task_type > 0 and (SELECT dict_value from c_dict_info cdi WHERE id = plan_task_type) = 2
+    </select>
 
 
 </mapper>

+ 4 - 1
blade-service/blade-control/src/main/java/org/springblade/control/service/IProjectCostBudgetService.java

@@ -103,9 +103,12 @@ public interface IProjectCostBudgetService extends BaseService<ProjectCostBudget
     //获取所有项目截至目前的的维护支出,按项目返回
     Map<Long,BigDecimal> getAllMaintainCost5();
 
-    //根据项目id获取项目截至目前的维护支出,按费用分类返回
+    //根据项目id获取项目截至目前的维护支出,按费用分类返回
     Map<Integer,BigDecimal> getAllMaintainCost6(Long projectId);
 
+    //根据项目id获取项目截至目前-某个费用分类的的维护支出,按项目环节返回
+    Map<Long,BigDecimal> getAllMaintainCost7(Long projectId,Integer costType);
+
     //获取项目的维护预算
     Set<Long> getAllMaintainBudgetId(Long projectId);
 }

+ 69 - 0
blade-service/blade-control/src/main/java/org/springblade/control/service/impl/ProjectCostBudgetServiceImpl.java

@@ -1801,6 +1801,75 @@ public class ProjectCostBudgetServiceImpl extends BaseServiceImpl<ProjectCostBud
         return null;
     }
 
+    /**
+     * //根据项目id获取项目截至目前-某个费用分类的的维护支出,按项目环节返回
+     * @return
+     */
+    @Override
+    public Map<Long,BigDecimal> getAllMaintainCost7(Long projectId,Integer costType) {
+        //获取当前项目-指定费用分类的-维护支出,如果没有返回null
+        List<ProjectCostBudget> plans = baseMapper.getAllMaintainPlan3(projectId,costType);
+        if (plans != null && plans.size() > 0) {
+            //分离出主计划和子计划,建立主计划的id,set集合
+            Set<Long> bab = new HashSet<>();
+            for (ProjectCostBudget plan : plans) {
+                if (plan.getParentId() == 0) {
+                    bab.add(plan.getId());
+                } else {
+                    bab.add(plan.getParentId());
+                }
+            }
+            //查询出所有维护计划
+            List<ProjectCostBudget> budgets = this.listByIds(bab);
+            //通过项目id查询出所有的合同,如果项目没有合同则提示,项目没有合同,无法计算维护支出
+            ControlContractInfo contract = contractService.getOne(
+                    new LambdaQueryWrapper<ControlContractInfo>().in(ControlContractInfo::getProjectId, projectId));
+            if (contract == null){
+                return null;
+            }
+            //把合同根据项目分组
+            //返回值
+            Map<Long,BigDecimal> map = new HashMap<>();
+            //获取合同时间,获取多少个月
+            LocalDate startTime = contract.getStartTime();
+            LocalDate endTime = contract.getEndTime();
+            // 当前日期和合同开始时间比较,相差多少月  月 * 每个月维护费 = 当前项目截至当前的所有维护费
+            if (LocalDate.now().compareTo(startTime) < 0){
+                return null;
+            }
+            int years = endTime.getYear() - startTime.getYear();
+            int months = years * 12 + (endTime.getMonthValue() - startTime.getMonthValue()) + 1;
+            //每个项目的维护总和 / 多少个月 = 该项目每个月的维护费
+            BigDecimal big = new BigDecimal(0);
+            for (ProjectCostBudget l : budgets) {
+                big = big.add(l.getBudgetStaffCost());
+                if (map.get(l.getProjectProcess()) == null){
+                    map.put(l.getProjectProcess(),l.getBudgetStaffCost());
+                }else {
+                    map.put(l.getProjectProcess(),map.get(l.getProjectProcess()).add(l.getBudgetStaffCost()));
+                }
+            }
+            if (big.compareTo(new BigDecimal(0)) == 0){
+                return null;
+            }
+            //如果合同结束时间比当前大,就用当前时间
+            if (endTime.compareTo(LocalDate.now()) > 0){
+                endTime = LocalDate.now();
+            }
+            int year = LocalDate.now().getYear() - startTime.getYear();
+            int month = year * 12 + (endTime.getMonthValue() - startTime.getMonthValue()) + 1;
+            //目前是每个部门总金额,先计算每个月的总费用,再乘以month个月
+            for (Long process: map.keySet()) {
+                BigDecimal count = map.get(process);
+                //获得每个月的维护费
+                BigDecimal scale = count.divide(new BigDecimal(months),2,RoundingMode.HALF_UP).setScale(2, RoundingMode.HALF_UP);
+                map.put(process,scale.multiply(new BigDecimal(month)));
+            }
+            return map;
+        }
+        return null;
+    }
+
     /**
      * //获取项目的维护预算
      * @return

+ 17 - 6
blade-service/blade-control/src/main/java/org/springblade/control/service/impl/ProjectProcessServiceImpl.java

@@ -121,6 +121,11 @@ 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;
+        }
         //获取项目具体部门所有已闭环的任务
         List<ProjectCostBudget> budgets = budgetService.getProjectAllFinishedTask(projectId,costType);
         if (budgets != null || budgets.size() > 0){
@@ -131,17 +136,23 @@ public class ProjectProcessServiceImpl extends BaseServiceImpl<ProjectProcessMap
                     .collect(Collectors.groupingBy(ProjectCostBudget::getProjectProcess));
             //包含此环节就统计,不包含就跳出
             for (ProjectProcessVO vo : list) {
-                if (set.contains(vo.getId())){
+                if (set.contains(vo.getId()) || (isMaintain && maintainMap.get(vo.getId()) != null)){
                     //设置参与
                     vo.setIsParticipate(1);
                     //时间成本统计总天数,人员投入统计总人数,成本支出统计当前环节总支出
-                    List<ProjectCostBudget> budgetList = map.get(vo.getId());
                     BigDecimal costDisburse = new BigDecimal(0);
                     BigDecimal timeCost = new BigDecimal(0);
-                    int staffTotal = budgetList.size();
-                    for (ProjectCostBudget budget : budgetList) {
-                        costDisburse = costDisburse.add(budget.getActualTotalMoney());
-                        timeCost = timeCost.add(budget.getPracticalTaskDays());
+                    int staffTotal = 0;
+                    if (set.contains(vo.getId())) {
+                        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 (isMaintain && maintainMap.get(vo.getId()) != null){
+                        costDisburse = costDisburse.add(maintainMap.get(vo.getId()));
                     }
                     //设置费用明细
                     List<ProjectProcessVO.costDetail> details = new ArrayList<>();