浏览代码

Merge remote-tracking branch 'origin/master'

liuyc 2 年之前
父节点
当前提交
bcfa98cd5f

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

@@ -205,7 +205,7 @@
         and pcb.task_user is not null and pcb.plan_days is not null
     </select>
     <select id="getRiskPlan" resultType="org.springblade.control.entity.ProjectCostBudget">
-        SELECT * from c_project_cost_budget WHERE plan_end_time &lt; NOW() and status in (2,3)
+        SELECT * from c_project_cost_budget WHERE plan_end_time &lt; NOW() and status in (1,2,3)
         <if test="projectId != null">
             and project_id = #{projectId}
         </if>
@@ -330,7 +330,7 @@
                (select cpp.name from c_project_process cpp WHERE cpp.id = pcb.project_process) as projectProcessValue,
                (select di.dict_name from c_dict_info di where di.type = 2 and di.id = pcb.plan_task_type) as planTaskTypeValue
         from c_project_cost_budget pcb
-        WHERE pcb.cost_type = #{costType} and pcb.is_deleted = 0 and pcb.project_id = #{projectId} and pcb.plan_end_time &lt; NOW() and pcb.status in (2,3)
+        WHERE pcb.cost_type = #{costType} and pcb.is_deleted = 0 and pcb.project_id = #{projectId} and pcb.plan_end_time &lt; NOW() and pcb.status in (1,2,3)
         UNION ALL
         select pcb.*,
                case pcb.status

+ 59 - 5
blade-service/blade-control/src/main/java/org/springblade/control/service/impl/AnnualBudgetServiceImpl.java

@@ -1119,7 +1119,11 @@ public class AnnualBudgetServiceImpl extends BaseServiceImpl<AnnualBudgetMapper,
                 isFinished = false;
             }
             //维护支出,返回null证明没有
-            budgetService.getAllMaintainCost9(y);
+            Map<Integer, List<BigDecimal>> maintainMap = budgetService.getAllMaintainCost9(y);
+            Boolean isMaintain = true;
+            if (maintainMap == null || maintainMap.size() <= 0){
+                isMaintain = false;
+            }
             //报销支出
 
             BigDecimal c1 = new BigDecimal(0);
@@ -1191,8 +1195,17 @@ public class AnnualBudgetServiceImpl extends BaseServiceImpl<AnnualBudgetMapper,
                         vo.setPractical1(big);
                         c2 = c2.add(big);
                     }else {
-                        vo.setBudget1(new BigDecimal(0));
+                        vo.setPractical1(new BigDecimal(0));
                     }
+                }else {
+                    vo.setPractical1(new BigDecimal(0));
+                }
+                //设置维护支出
+                if (isMaintain && maintainMap.get(1) != null && maintainMap.get(1).size() > 0){
+                    vo.setBudget1(vo.getBudget1().add(maintainMap.get(1).get(i)));
+                    vo.setPractical1(vo.getPractical1().add(maintainMap.get(1).get(i)));
+                    c1 = c1.add(maintainMap.get(1).get(i));
+                    c2 = c2.add(maintainMap.get(1).get(i));
                 }
 
                 //设置研发部
@@ -1251,6 +1264,15 @@ public class AnnualBudgetServiceImpl extends BaseServiceImpl<AnnualBudgetMapper,
                     }else {
                         vo.setPractical2(new BigDecimal(0));
                     }
+                }else {
+                    vo.setPractical2(new BigDecimal(0));
+                }
+                //设置维护支出
+                if (isMaintain && maintainMap.get(2) != null && maintainMap.get(2).size() > 0){
+                    vo.setBudget2(vo.getBudget2().add(maintainMap.get(2).get(i)));
+                    vo.setPractical2(vo.getPractical2().add(maintainMap.get(2).get(i)));
+                    c3 = c3.add(maintainMap.get(2).get(i));
+                    c4 = c4.add(maintainMap.get(2).get(i));
                 }
 
                 //设置实施部
@@ -1285,7 +1307,7 @@ public class AnnualBudgetServiceImpl extends BaseServiceImpl<AnnualBudgetMapper,
                     List<ProjectCostBudget> d3 = finishedMap.get(3);
                     if (d3 != null && d3.size() > 0){
                         BigDecimal big = new BigDecimal(0);
-                        //循环市场部每一个支出
+                        //循环每一个支出
                         for (ProjectCostBudget budget : d3) {
                             //如果实际开始时间或实际结束时间是当月,则添加支出
                             if ((budget.getRealPlanStartTime().getMonthValue() == (i+1) && budget.getRealPlanStartTime().getYear() == y)
@@ -1309,13 +1331,22 @@ public class AnnualBudgetServiceImpl extends BaseServiceImpl<AnnualBudgetMapper,
                     }else {
                         vo.setPractical3(new BigDecimal(0));
                     }
+                }else {
+                    vo.setPractical3(new BigDecimal(0));
+                }
+                //设置维护支出
+                if (isMaintain && maintainMap.get(3) != null && maintainMap.get(3).size() > 0){
+                    vo.setBudget3(vo.getBudget3().add(maintainMap.get(3).get(i)));
+                    vo.setPractical3(vo.getPractical3().add(maintainMap.get(3).get(i)));
+                    c5 = c5.add(maintainMap.get(3).get(i));
+                    c6 = c6.add(maintainMap.get(3).get(i));
                 }
 
                 //设置维护部
                 List<ProjectCostBudget> b4 = allPlanMap.get(4);
                 if (b4 != null && b4.size() > 0){
                     BigDecimal big = new BigDecimal(0);
-                    //循环研发部每一个预算
+                    //循环每一个预算
                     for (ProjectCostBudget budget : b4) {
                         //如果开始时间或结束时间是当月,则添加预算
                         if ((budget.getPlanStartTime().getMonthValue() == (i+1) && budget.getPlanStartTime().getYear() == y)
@@ -1343,7 +1374,7 @@ public class AnnualBudgetServiceImpl extends BaseServiceImpl<AnnualBudgetMapper,
                     List<ProjectCostBudget> d4 = finishedMap.get(4);
                     if (d4 != null && d4.size() > 0){
                         BigDecimal big = new BigDecimal(0);
-                        //循环市场部每一个支出
+                        //循环每一个支出
                         for (ProjectCostBudget budget : d4) {
                             //如果实际开始时间或实际结束时间是当月,则添加支出
                             if ((budget.getRealPlanStartTime().getMonthValue() == (i+1) && budget.getRealPlanStartTime().getYear() == y)
@@ -1367,6 +1398,15 @@ public class AnnualBudgetServiceImpl extends BaseServiceImpl<AnnualBudgetMapper,
                     }else {
                         vo.setPractical4(new BigDecimal(0));
                     }
+                }else {
+                    vo.setPractical4(new BigDecimal(0));
+                }
+                //设置维护支出
+                if (isMaintain && maintainMap.get(4) != null && maintainMap.get(4).size() > 0){
+                    vo.setBudget4(vo.getBudget4().add(maintainMap.get(4).get(i)));
+                    vo.setPractical4(vo.getPractical4().add(maintainMap.get(4).get(i)));
+                    c7 = c7.add(maintainMap.get(4).get(i));
+                    c8 = c8.add(maintainMap.get(4).get(i));
                 }
 
                 //设置管理中心 = 管理支出+外包劳务
@@ -1464,6 +1504,20 @@ public class AnnualBudgetServiceImpl extends BaseServiceImpl<AnnualBudgetMapper,
                         }
                     }
                 }
+                //设置维护支出
+                if (isMaintain && maintainMap.get(5) != null && maintainMap.get(5).size() > 0){
+                    big1 = big1.add(maintainMap.get(5).get(i));
+                    big2 = big2.add(maintainMap.get(5).get(i));
+                    c9 = c9.add(maintainMap.get(5).get(i));
+                    c10 = c10.add(maintainMap.get(5).get(i));
+                }
+                //设置维护支出
+                if (isMaintain && maintainMap.get(6) != null && maintainMap.get(6).size() > 0){
+                    big1 = big1.add(maintainMap.get(6).get(i));
+                    big2 = big2.add(maintainMap.get(6).get(i));
+                    c9 = c9.add(maintainMap.get(6).get(i));
+                    c10 = c10.add(maintainMap.get(6).get(i));
+                }
                 vo.setBudget5(big1);
                 c9 = c9.add(big1);
                 vo.setPractical5(big2);

+ 102 - 20
blade-service/blade-control/src/main/java/org/springblade/control/service/impl/ProjectCostBudgetServiceImpl.java

@@ -1316,6 +1316,8 @@ public class ProjectCostBudgetServiceImpl extends BaseServiceImpl<ProjectCostBud
         int taskType = dictInfo.getDictValue().intValue();
         //计划为临时计划,则不计算金额直接闭环
         if (taskType == 2){
+            //为临时任务设置任务实际实际,方便统计
+            budget.setPracticalTaskDays(new BigDecimal(1 + budget.getPracticalFinishTime().until(budget.getRealPlanStartTime(), ChronoUnit.DAYS)));
             this.updateById(budget);
         }else {
             //获取任务人工资
@@ -1740,7 +1742,14 @@ public class ProjectCostBudgetServiceImpl extends BaseServiceImpl<ProjectCostBud
             Map<Long, List<ControlContractInfo>> contractMap = contractList.parallelStream()
                     .collect(Collectors.groupingBy(ControlContractInfo::getProjectId));
             //返回结果
-            Map<Long,List<BigDecimal>> map = new HashMap<>();
+            Map<Integer,List<BigDecimal>> map = new HashMap<>();
+            for (int i = 1; i <= 6; i++) {
+                List<BigDecimal> list = new ArrayList<>();
+                for (int j = 0; j < 12; j++) {
+                    list.add(new BigDecimal(0));
+                }
+                map.put(i,list);
+            }
             //循环项目,
             for (ControlProjectInfo info : projectInfos) {
                 List<ControlContractInfo> infos = contractMap.get(info.getId());
@@ -1751,23 +1760,43 @@ public class ProjectCostBudgetServiceImpl extends BaseServiceImpl<ProjectCostBud
                 ControlContractInfo contract = contractMap.get(info.getId()).get(0);
                 LocalDate startTime = contract.getStartTime();
                 LocalDate endTime = contract.getEndTime();
+                //合同开始日期比今天大,直接跳过
+                if (LocalDate.now().compareTo(startTime) < 0){
+                    continue;
+                }
                 int years = endTime.getYear() - startTime.getYear();
                 int months = years * 12 + (endTime.getMonthValue() - startTime.getMonthValue()) + 1;
                 //每个项目的维护总和 / 多少个月 = 该项目每个月的维护费
+                //该项目所有的维护计划,不会为空,
                 List<ProjectCostBudget> list = budgetMap.get(info.getId());
-                BigDecimal big = new BigDecimal(0);
+                //查询出每个部门的维护支出
+                BigDecimal b1 = new BigDecimal(0);
+                BigDecimal b2 = new BigDecimal(0);
+                BigDecimal b3 = new BigDecimal(0);
+                BigDecimal b4 = new BigDecimal(0);
+                BigDecimal b5 = new BigDecimal(0);
+                BigDecimal b6 = new BigDecimal(0);
                 for (ProjectCostBudget l : list) {
-                    big = big.add(l.getBudgetStaffCost());
-                }
-                if (big.compareTo(new BigDecimal(0)) == 0){
-                    continue;
+                    if (l.getCostType() == 1){
+                        b1 = b1.add(l.getBudgetStaffCost());
+                    }
+                    if (l.getCostType() == 2){
+                        b2 = b2.add(l.getBudgetStaffCost());
+                    }
+                    if (l.getCostType() == 3){
+                        b3 = b3.add(l.getBudgetStaffCost());
+                    }
+                    if (l.getCostType() == 4){
+                        b4 = b4.add(l.getBudgetStaffCost());
+                    }
+                    if (l.getCostType() == 5){
+                        b5 = b5.add(l.getBudgetStaffCost());
+                    }
+                    if (l.getCostType() == 6){
+                        b6 = b6.add(l.getBudgetStaffCost());
+                    }
                 }
-                //获得每个月的维护费
-                BigDecimal scale = big.divide(new BigDecimal(months),2,RoundingMode.HALF_UP).setScale(2, RoundingMode.HALF_UP);
                 // 当前日期和合同开始时间比较,相差多少月  月 * 每个月维护费 = 当前项目截至当前的所有维护费
-                if (LocalDate.now().compareTo(startTime) < 0){
-                    continue;
-                }
                 int startMonth = 0;
                 int endMonth = 0;
                 //判断是否查询今年
@@ -1816,18 +1845,71 @@ public class ProjectCostBudgetServiceImpl extends BaseServiceImpl<ProjectCostBud
                         }
                     }
                 }
-                //为项目设置值
-                List<BigDecimal> decimalList = new ArrayList<>();
-                for (int i = 1; i <= 12; i++) {
-                    if (i >= startMonth && i <= endMonth){
-                        decimalList.add(scale);
-                    }else {
-                        decimalList.add(new BigDecimal(0));
+                //为部门设置值
+                if (b1.intValue() != 0){
+                    //获得部门每个月的维护费
+                    BigDecimal scale = b1.divide(new BigDecimal(months),2,RoundingMode.HALF_UP).setScale(2, RoundingMode.HALF_UP);
+                    List<BigDecimal> l1 = map.get(1);
+                    for (int i = 1; i <= 12; i++) {
+                        if (i >= startMonth && i <= endMonth){
+                            l1.set(i-1,l1.get(i-1).add(scale));
+                        }
                     }
                 }
-                map.put(info.getId(),decimalList);
+                if (b2.intValue() != 0){
+                    //获得部门每个月的维护费
+                    BigDecimal scale = b2.divide(new BigDecimal(months),2,RoundingMode.HALF_UP).setScale(2, RoundingMode.HALF_UP);
+                    List<BigDecimal> l1 = map.get(2);
+                    for (int i = 1; i <= 12; i++) {
+                        if (i >= startMonth && i <= endMonth){
+                            l1.set(i-1,l1.get(i-1).add(scale));
+                        }
+                    }
+                }
+                if (b3.intValue() != 0){
+                    //获得部门每个月的维护费
+                    BigDecimal scale = b3.divide(new BigDecimal(months),2,RoundingMode.HALF_UP).setScale(2, RoundingMode.HALF_UP);
+                    List<BigDecimal> l1 = map.get(3);
+                    for (int i = 1; i <= 12; i++) {
+                        if (i >= startMonth && i <= endMonth){
+                            l1.set(i-1,l1.get(i-1).add(scale));
+                        }
+                    }
+                }
+                if (b4.intValue() != 0){
+                    //获得部门每个月的维护费
+                    BigDecimal scale = b4.divide(new BigDecimal(months),2,RoundingMode.HALF_UP).setScale(2, RoundingMode.HALF_UP);
+                    List<BigDecimal> l1 = map.get(4);
+                    for (int i = 1; i <= 12; i++) {
+                        if (i >= startMonth && i <= endMonth){
+                            l1.set(i-1,l1.get(i-1).add(scale));
+                        }
+                    }
+                }
+                if (b5.intValue() != 0){
+                    //获得部门每个月的维护费
+                    BigDecimal scale = b5.divide(new BigDecimal(months),2,RoundingMode.HALF_UP).setScale(2, RoundingMode.HALF_UP);
+                    List<BigDecimal> l1 = map.get(5);
+                    for (int i = 1; i <= 12; i++) {
+                        if (i >= startMonth && i <= endMonth){
+                            l1.set(i-1,l1.get(i-1).add(scale));
+                        }
+                    }
+                }
+
+                if (b6.intValue() != 0){
+                    //获得部门每个月的维护费
+                    BigDecimal scale = b6.divide(new BigDecimal(months),2,RoundingMode.HALF_UP).setScale(2, RoundingMode.HALF_UP);
+                    List<BigDecimal> l1 = map.get(6);
+                    for (int i = 1; i <= 12; i++) {
+                        if (i >= startMonth && i <= endMonth){
+                            l1.set(i-1,l1.get(i-1).add(scale));
+                        }
+                    }
+                }
+
             }
-            return null;
+            return map;
         }
         return null;
     }