Эх сурвалжийг харах

Merge remote-tracking branch 'origin/master'

liuyc 2 жил өмнө
parent
commit
b018cfc8fa

+ 3 - 0
blade-service-api/blade-control-api/src/main/java/org/springblade/control/entity/ProjectCostBudget.java

@@ -165,4 +165,7 @@ public class ProjectCostBudget extends BaseEntity {
     @ApiModelProperty(value = "计划结束月工作天数")
     private BigDecimal planEndMonthDays;
 
+    @ApiModelProperty(value = "排序")
+    private Integer sort;
+
 }

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

@@ -14,14 +14,14 @@
     </select>
     <select id="getPage" resultType="org.springblade.control.vo.DepartmentMonthPlanVO">
         SELECT dmp.*,
-               (select COUNT(1)  from c_project_cost_budget pcb WHERE pcb.cost_type = dmp.department_type
+               (select COUNT(1)  from c_project_cost_budget pcb WHERE pcb.dept_id = dmp.dept_id
                     and (pcb.plan_start_time BETWEEN dmp.plan_start_date AND dmp.plan_end_date
                     or pcb.plan_end_time BETWEEN dmp.plan_start_date AND dmp.plan_end_date)) as 'planTotal',
-                (select COUNT(1)  from c_project_cost_budget pcb WHERE pcb.cost_type = dmp.department_type
+                (select COUNT(1)  from c_project_cost_budget pcb WHERE pcb.dept_id = dmp.dept_id
                                                                    and pcb.task_approve = 1
                     and (pcb.plan_start_time BETWEEN dmp.plan_start_date AND dmp.plan_end_date
                     or pcb.plan_end_time BETWEEN dmp.plan_start_date AND dmp.plan_end_date)) as 'finishPlanTotal',
-                (select COUNT(1)  from c_project_cost_budget pcb WHERE pcb.cost_type = dmp.department_type
+                (select COUNT(1)  from c_project_cost_budget pcb WHERE pcb.dept_id = dmp.dept_id
                                                                    and pcb.task_approve = 0
                     and (pcb.plan_start_time BETWEEN dmp.plan_start_date AND dmp.plan_end_date
                     or pcb.plan_end_time BETWEEN dmp.plan_start_date AND dmp.plan_end_date)) as 'beginPlanTotal',

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

@@ -40,7 +40,7 @@ public interface ProjectCostBudgetMapper extends BaseMapper<ProjectCostBudget> {
 
     void removeChildrenPlan(@Param("projectId") Long projectId);
 
-    List<ProjectCostBudgetVO> getDepartmentPlan(@Param("type") Integer type,@Param("startDate") LocalDate startDate,@Param("endDate") LocalDate endDate);
+    List<ProjectCostBudgetVO> getDepartmentPlan(@Param("deptId") Long deptId,@Param("startDate") LocalDate startDate,@Param("endDate") LocalDate endDate);
 
     void updateStatus(@Param("id") Long id,@Param("status") int status);
 

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

@@ -107,7 +107,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 = #{type}
+        WHERE pcb.dept_id = #{deptId}
           and (pcb.plan_start_time BETWEEN #{startDate} AND #{endDate}
             or pcb.plan_end_time BETWEEN #{startDate} AND #{endDate})
     </select>

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

@@ -41,7 +41,7 @@ public interface IProjectCostBudgetService extends BaseService<ProjectCostBudget
     //修改项目计划
     void updatePlan(ProjectCostBudgetVO vo);
     //根据部门类型和日期查询计划
-    List<ProjectCostBudgetVO> getDepartmentPlan(Integer type,String date);
+    List<ProjectCostBudgetVO> getDepartmentPlan(Long deptId,String date);
 
     //根据项目id,部门id查询延期计划
     List<ProjectCostBudgetVO> getDepartmentTimeOutPlan(Integer costType,Long projectId);

+ 176 - 1
blade-service/blade-control/src/main/java/org/springblade/control/service/impl/AnnualBudgetServiceImpl.java

@@ -18,6 +18,7 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.rmi.ServerException;
 import java.time.LocalDate;
 import java.util.*;
@@ -1164,6 +1165,7 @@ public class AnnualBudgetServiceImpl extends BaseServiceImpl<AnnualBudgetMapper,
         Boolean isBudget = true;
         Map<Integer, List<ProjectCostBudget>> allPlanMap = new HashMap<>();
         Boolean isOtherBudget = true;
+        Map<Integer, List<ProjectCostBudget>> otherBudgetMap = new HashMap<>();
         if (allPlan != null && allPlan.size() > 0){
             List<ProjectCostBudget> parentList = new ArrayList<>();
             //如果不为空,根据costType分组
@@ -1183,6 +1185,7 @@ public class AnnualBudgetServiceImpl extends BaseServiceImpl<AnnualBudgetMapper,
                 //循环父计划,统计子计划
                 for (ProjectCostBudget budget : parentList) {
                     BigDecimal noStaffCost = budget.getBudgetCountMoney().subtract(budget.getBudgetStaffCost());
+                    //有子计划直接设置
                     if (map.get(budget.getId()) != null && map.get(budget.getId()).size() > 0) {
                         List<ProjectCostBudget> budgetList = map.get(budget.getId());
                         //有子计划才设置,没子计划证明有值
@@ -1229,12 +1232,24 @@ public class AnnualBudgetServiceImpl extends BaseServiceImpl<AnnualBudgetMapper,
                         } else {
                             //跨月
                             budget.setPlanIsTwoMonth(1);
-                            BigDecimal decimal = startDays.divide(total, 2, BigDecimal.ROUND_HALF_UP).multiply(noStaffCost);
+                            BigDecimal decimal = startDays.divide(total, 2, BigDecimal.ROUND_HALF_UP).multiply(noStaffCost).setScale(2, RoundingMode.HALF_UP);
+                            budget.setPlanStartMoney(decimal);
+                            budget.setPlanEndMoney(noStaffCost.subtract(decimal));
+                        }
+                    }else {
+                        //没有子计划如果没有跨月则直接把其他支出放入startMoney
+                        if (budget.getPlanIsTwoMonth() == 0){
+                            budget.setPlanStartMoney(noStaffCost);
+                        }else {
+                            BigDecimal decimal = budget.getPlanStartMonthDays().divide(budget.getPlanDays(), 2, BigDecimal.ROUND_HALF_UP).multiply(noStaffCost).setScale(2, RoundingMode.HALF_UP);
                             budget.setPlanStartMoney(decimal);
                             budget.setPlanEndMoney(noStaffCost.subtract(decimal));
                         }
                     }
                 }
+                //根据部门分组
+                otherBudgetMap = parentList.parallelStream()
+                        .collect(Collectors.groupingBy(ProjectCostBudget::getCostType));
             }else {
                 isOtherBudget = false;
             }
@@ -1328,6 +1343,33 @@ public class AnnualBudgetServiceImpl extends BaseServiceImpl<AnnualBudgetMapper,
             }else {
                  vo.setBudget1(new BigDecimal(0));
             }
+            //其他预算金额
+            if (isBudget && isOtherBudget && otherBudgetMap.get(1) != null && otherBudgetMap.get(1).size() > 0){
+                List<ProjectCostBudget> b1 = otherBudgetMap.get(1);
+                BigDecimal big = new BigDecimal(0);
+                //循环市场部每一个预算
+                for (ProjectCostBudget budget : b1) {
+                    //如果开始时间或结束时间是当月,则添加预算
+                    if ((budget.getPlanStartTime().getMonthValue() == (i + 1) && budget.getPlanStartTime().getYear() == y)
+                            || (budget.getPlanEndTime().getMonthValue() == (i + 1) && budget.getPlanEndTime().getYear() == y)) {
+                        //如果开始时间和结束时间的月相同,则直接用总预算
+                        if (budget.getPlanIsTwoMonth() == 0) {
+                            big = big.add(budget.getPlanStartMoney());
+                        } else {
+                            //如果开始月是当前月,则直接使用开始金额
+                            if (budget.getPlanStartTime().getMonthValue() == (i + 1) && budget.getPlanStartTime().getYear() == y) {
+                                big = big.add(budget.getPlanStartMoney());
+                            } else {
+                                //结束月是当前月,使用结束金额
+                                big = big.add(budget.getPlanEndMoney());
+                            }
+                        }
+                    }
+                }
+                vo.setBudget1(vo.getBudget1().add(big));
+                c1 = c1.add(big);
+            }
+
             if (isFinished){
                 List<ProjectCostBudget> d1 = finishedMap.get(1);
                 if (d1 != null && d1.size() > 0){
@@ -1407,6 +1449,33 @@ public class AnnualBudgetServiceImpl extends BaseServiceImpl<AnnualBudgetMapper,
             }else {
                 vo.setBudget2(new BigDecimal(0));
             }
+            //其他预算金额
+            if (isBudget && isOtherBudget && otherBudgetMap.get(2) != null && otherBudgetMap.get(2).size() > 0){
+                List<ProjectCostBudget> b1 = otherBudgetMap.get(2);
+                BigDecimal big = new BigDecimal(0);
+                //循环市场部每一个预算
+                for (ProjectCostBudget budget : b1) {
+                    //如果开始时间或结束时间是当月,则添加预算
+                    if ((budget.getPlanStartTime().getMonthValue() == (i + 1) && budget.getPlanStartTime().getYear() == y)
+                            || (budget.getPlanEndTime().getMonthValue() == (i + 1) && budget.getPlanEndTime().getYear() == y)) {
+                        //如果开始时间和结束时间的月相同,则直接用总预算
+                        if (budget.getPlanIsTwoMonth() == 0) {
+                            big = big.add(budget.getPlanStartMoney());
+                        } else {
+                            //如果开始月是当前月,则直接使用开始金额
+                            if (budget.getPlanStartTime().getMonthValue() == (i + 1) && budget.getPlanStartTime().getYear() == y) {
+                                big = big.add(budget.getPlanStartMoney());
+                            } else {
+                                //结束月是当前月,使用结束金额
+                                big = big.add(budget.getPlanEndMoney());
+                            }
+                        }
+                    }
+                }
+                vo.setBudget2(vo.getBudget2().add(big));
+                c3 = c3.add(big);
+            }
+
             if (isFinished){
                 List<ProjectCostBudget> d2 = finishedMap.get(2);
                 if (d2 != null && d2.size() > 0){
@@ -1487,6 +1556,33 @@ public class AnnualBudgetServiceImpl extends BaseServiceImpl<AnnualBudgetMapper,
             }else {
                 vo.setBudget3(new BigDecimal(0));
             }
+            //其他预算金额
+            if (isBudget && isOtherBudget && otherBudgetMap.get(3) != null && otherBudgetMap.get(3).size() > 0){
+                List<ProjectCostBudget> b1 = otherBudgetMap.get(3);
+                BigDecimal big = new BigDecimal(0);
+                //循环市场部每一个预算
+                for (ProjectCostBudget budget : b1) {
+                    //如果开始时间或结束时间是当月,则添加预算
+                    if ((budget.getPlanStartTime().getMonthValue() == (i + 1) && budget.getPlanStartTime().getYear() == y)
+                            || (budget.getPlanEndTime().getMonthValue() == (i + 1) && budget.getPlanEndTime().getYear() == y)) {
+                        //如果开始时间和结束时间的月相同,则直接用总预算
+                        if (budget.getPlanIsTwoMonth() == 0) {
+                            big = big.add(budget.getPlanStartMoney());
+                        } else {
+                            //如果开始月是当前月,则直接使用开始金额
+                            if (budget.getPlanStartTime().getMonthValue() == (i + 1) && budget.getPlanStartTime().getYear() == y) {
+                                big = big.add(budget.getPlanStartMoney());
+                            } else {
+                                //结束月是当前月,使用结束金额
+                                big = big.add(budget.getPlanEndMoney());
+                            }
+                        }
+                    }
+                }
+                vo.setBudget3(vo.getBudget3().add(big));
+                c5 = c5.add(big);
+            }
+
             if (isFinished){
                 List<ProjectCostBudget> d3 = finishedMap.get(3);
                 if (d3 != null && d3.size() > 0){
@@ -1567,6 +1663,33 @@ public class AnnualBudgetServiceImpl extends BaseServiceImpl<AnnualBudgetMapper,
             }else {
                 vo.setBudget4(new BigDecimal(0));
             }
+            //其他预算金额
+            if (isBudget && isOtherBudget && otherBudgetMap.get(4) != null && otherBudgetMap.get(4).size() > 0){
+                List<ProjectCostBudget> b1 = otherBudgetMap.get(4);
+                BigDecimal big = new BigDecimal(0);
+                //循环市场部每一个预算
+                for (ProjectCostBudget budget : b1) {
+                    //如果开始时间或结束时间是当月,则添加预算
+                    if ((budget.getPlanStartTime().getMonthValue() == (i + 1) && budget.getPlanStartTime().getYear() == y)
+                            || (budget.getPlanEndTime().getMonthValue() == (i + 1) && budget.getPlanEndTime().getYear() == y)) {
+                        //如果开始时间和结束时间的月相同,则直接用总预算
+                        if (budget.getPlanIsTwoMonth() == 0) {
+                            big = big.add(budget.getPlanStartMoney());
+                        } else {
+                            //如果开始月是当前月,则直接使用开始金额
+                            if (budget.getPlanStartTime().getMonthValue() == (i + 1) && budget.getPlanStartTime().getYear() == y) {
+                                big = big.add(budget.getPlanStartMoney());
+                            } else {
+                                //结束月是当前月,使用结束金额
+                                big = big.add(budget.getPlanEndMoney());
+                            }
+                        }
+                    }
+                }
+                vo.setBudget4(vo.getBudget4().add(big));
+                c7 = c7.add(big);
+            }
+
             if (isFinished){
                 List<ProjectCostBudget> d4 = finishedMap.get(4);
                 if (d4 != null && d4.size() > 0){
@@ -1644,6 +1767,32 @@ public class AnnualBudgetServiceImpl extends BaseServiceImpl<AnnualBudgetMapper,
                     }
                 }
             }
+            //其他预算金额
+            if (isBudget && isOtherBudget && otherBudgetMap.get(5) != null && otherBudgetMap.get(5).size() > 0){
+                List<ProjectCostBudget> b1 = otherBudgetMap.get(5);
+                BigDecimal big = new BigDecimal(0);
+                //循环市场部每一个预算
+                for (ProjectCostBudget budget : b1) {
+                    //如果开始时间或结束时间是当月,则添加预算
+                    if ((budget.getPlanStartTime().getMonthValue() == (i + 1) && budget.getPlanStartTime().getYear() == y)
+                            || (budget.getPlanEndTime().getMonthValue() == (i + 1) && budget.getPlanEndTime().getYear() == y)) {
+                        //如果开始时间和结束时间的月相同,则直接用总预算
+                        if (budget.getPlanIsTwoMonth() == 0) {
+                            big = big.add(budget.getPlanStartMoney());
+                        } else {
+                            //如果开始月是当前月,则直接使用开始金额
+                            if (budget.getPlanStartTime().getMonthValue() == (i + 1) && budget.getPlanStartTime().getYear() == y) {
+                                big = big.add(budget.getPlanStartMoney());
+                            } else {
+                                //结束月是当前月,使用结束金额
+                                big = big.add(budget.getPlanEndMoney());
+                            }
+                        }
+                    }
+                }
+                big1 = big.add(big);
+            }
+
             if (isFinished){
                 List<ProjectCostBudget> d5 = finishedMap.get(5);
                 if (d5 != null && d5.size() > 0){
@@ -1690,6 +1839,32 @@ public class AnnualBudgetServiceImpl extends BaseServiceImpl<AnnualBudgetMapper,
                     }
                 }
             }
+            //其他预算金额
+            if (isBudget && isOtherBudget && otherBudgetMap.get(6) != null && otherBudgetMap.get(6).size() > 0){
+                List<ProjectCostBudget> b1 = otherBudgetMap.get(6);
+                BigDecimal big = new BigDecimal(0);
+                //循环市场部每一个预算
+                for (ProjectCostBudget budget : b1) {
+                    //如果开始时间或结束时间是当月,则添加预算
+                    if ((budget.getPlanStartTime().getMonthValue() == (i + 1) && budget.getPlanStartTime().getYear() == y)
+                            || (budget.getPlanEndTime().getMonthValue() == (i + 1) && budget.getPlanEndTime().getYear() == y)) {
+                        //如果开始时间和结束时间的月相同,则直接用总预算
+                        if (budget.getPlanIsTwoMonth() == 0) {
+                            big = big.add(budget.getPlanStartMoney());
+                        } else {
+                            //如果开始月是当前月,则直接使用开始金额
+                            if (budget.getPlanStartTime().getMonthValue() == (i + 1) && budget.getPlanStartTime().getYear() == y) {
+                                big = big.add(budget.getPlanStartMoney());
+                            } else {
+                                //结束月是当前月,使用结束金额
+                                big = big.add(budget.getPlanEndMoney());
+                            }
+                        }
+                    }
+                }
+                big1 = big.add(big);
+            }
+
             if (isFinished){
                 List<ProjectCostBudget> d6 = finishedMap.get(6);
                 if (d6 != null && d6.size() > 0){

+ 7 - 6
blade-service/blade-control/src/main/java/org/springblade/control/service/impl/DepartmentMonthPlanServiceImpl.java

@@ -117,12 +117,13 @@ public class DepartmentMonthPlanServiceImpl extends BaseServiceImpl<DepartmentMo
     public List<ProjectCostBudgetVO> getDepartmentPlan(DepartmentMonthPlan plan) {
         //查询出部门当月的项目计划,返回
         List<ProjectCostBudgetVO> voList = new ArrayList<>();
-        if (plan.getDepartmentType() != 5){
-            voList = budgetService.getDepartmentPlan(plan.getDepartmentType(),plan.getPlanDate());
-        }else {
-            voList.addAll(budgetService.getDepartmentPlan(5,plan.getPlanDate()));
-            voList.addAll(budgetService.getDepartmentPlan(6,plan.getPlanDate()));
-        }
+//        if (plan.getDepartmentType() != 5){
+//            voList = budgetService.getDepartmentPlan(plan.getDepartmentType(),plan.getPlanDate());
+//        }else {
+//            voList.addAll(budgetService.getDepartmentPlan(5,plan.getPlanDate()));
+//            voList.addAll(budgetService.getDepartmentPlan(6,plan.getPlanDate()));
+//        }
+        voList.addAll(budgetService.getDepartmentPlan(plan.getDeptId(),plan.getPlanDate()));
         return voList;
     }
 

+ 42 - 15
blade-service/blade-control/src/main/java/org/springblade/control/service/impl/ProjectCostBudgetServiceImpl.java

@@ -61,7 +61,8 @@ public class ProjectCostBudgetServiceImpl extends BaseServiceImpl<ProjectCostBud
         List<ProjectCostBudget> allBudget = new ArrayList<>();
         //施工单位
         if (dto.getBuildUnit() != null && dto.getBuildUnit().size() > 0){
-            dto.getBuildUnit().stream().forEach(l->{
+            int i = 1;
+            for (ProjectCostBudget l : dto.getBuildUnit()) {
                 if (l.getDeptId() == null){
                     throw new ServiceException("请选择费用分摊部门");
                 }
@@ -80,18 +81,21 @@ public class ProjectCostBudgetServiceImpl extends BaseServiceImpl<ProjectCostBud
                 if (l.getStaffCount() == null){
                     throw new ServiceException("请填写投入人员数量");
                 }
+                l.setSort(i);
+                i++;
                 if (l.getApprove() != null && (l.getApprove() == 1 || l.getApprove() == 2)){
-                    return;
+                    continue;
                 }
-              l.setProjectId(dto.getProjectId());
-              l.setUnitType(1);
-              countMoney(l);
-            });
+                l.setProjectId(dto.getProjectId());
+                l.setUnitType(1);
+                countMoney(l);
+            }
             allBudget.addAll(dto.getBuildUnit());
         }
         //监理单位
         if (dto.getSupervisorUnit() != null && dto.getSupervisorUnit().size() > 0){
-            dto.getSupervisorUnit().stream().forEach(l->{
+            int i = 1;
+            for (ProjectCostBudget l : dto.getSupervisorUnit()) {
                 if (l.getDeptId() == null){
                     throw new ServiceException("请选择费用分摊部门");
                 }
@@ -101,18 +105,30 @@ public class ProjectCostBudgetServiceImpl extends BaseServiceImpl<ProjectCostBud
                 if (l.getProjectProcess() == null){
                     throw new ServiceException("请选择项目环节");
                 }
+                if (l.getBudgetDays() == null){
+                    throw new ServiceException("请填写预计工作量");
+                }
+                if (l.getPostType() == null){
+                    throw new ServiceException("请选择岗位类型");
+                }
+                if (l.getStaffCount() == null){
+                    throw new ServiceException("请填写投入人员数量");
+                }
+                l.setSort(i);
+                i++;
                 if (l.getApprove() != null && (l.getApprove() == 1 || l.getApprove() == 2)){
-                    return;
+                    continue;
                 }
                 l.setProjectId(dto.getProjectId());
                 l.setUnitType(2);
                 countMoney(l);
-            });
+            }
             allBudget.addAll(dto.getSupervisorUnit());
         }
         //建设单位
         if (dto.getConstructUnit() != null && dto.getConstructUnit().size() > 0){
-            dto.getConstructUnit().stream().forEach(l->{
+            int i = 1;
+            for (ProjectCostBudget l : dto.getConstructUnit()) {
                 if (l.getDeptId() == null){
                     throw new ServiceException("请选择费用分摊部门");
                 }
@@ -122,13 +138,24 @@ public class ProjectCostBudgetServiceImpl extends BaseServiceImpl<ProjectCostBud
                 if (l.getProjectProcess() == null){
                     throw new ServiceException("请选择项目环节");
                 }
+                if (l.getBudgetDays() == null){
+                    throw new ServiceException("请填写预计工作量");
+                }
+                if (l.getPostType() == null){
+                    throw new ServiceException("请选择岗位类型");
+                }
+                if (l.getStaffCount() == null){
+                    throw new ServiceException("请填写投入人员数量");
+                }
+                l.setSort(i);
+                i++;
                 if (l.getApprove() != null && (l.getApprove() == 1 || l.getApprove() == 2)){
-                    return;
+                    continue;
                 }
                 l.setProjectId(dto.getProjectId());
                 l.setUnitType(3);
                 countMoney(l);
-            });
+            }
             allBudget.addAll(dto.getConstructUnit());
         }
         baseMapper.removeOldBudget(dto.getProjectId());
@@ -585,12 +612,12 @@ public class ProjectCostBudgetServiceImpl extends BaseServiceImpl<ProjectCostBud
 
     /**
      * 根据部门类型和日期查询计划
-     * @param type
+     * @param
      * @param date
      * @return
      */
     @Override
-    public List<ProjectCostBudgetVO> getDepartmentPlan(Integer type, String date) {
+    public List<ProjectCostBudgetVO> getDepartmentPlan(Long deptId, String date) {
         //初始化时间段
         String[] split = date.split("-");
         int year = Integer.parseInt(split[0]);
@@ -611,7 +638,7 @@ public class ProjectCostBudgetServiceImpl extends BaseServiceImpl<ProjectCostBud
                 }
             }
         }
-        List<ProjectCostBudgetVO> departmentPlan = baseMapper.getDepartmentPlan(type, startDate, endDate);
+        List<ProjectCostBudgetVO> departmentPlan = baseMapper.getDepartmentPlan(deptId, startDate, endDate);
         List<DictInfo> allTaskInfo = budgetMapper.getAllTaskInfo();
         Map<Long, List<DictInfo>> taskMap = new HashMap<>();
         if (allTaskInfo != null && allTaskInfo.size() > 0) {

+ 17 - 4
blade-service/blade-control/src/main/java/org/springblade/control/service/impl/ProjectCostBudgetStatsServiceImpl.java

@@ -25,6 +25,7 @@ import org.springframework.transaction.annotation.Transactional;
 
 import java.math.BigDecimal;
 import java.util.ArrayList;
+import java.util.Comparator;
 import java.util.List;
 import java.util.Map;
 import java.util.stream.Collectors;
@@ -78,11 +79,23 @@ public class ProjectCostBudgetStatsServiceImpl extends BaseServiceImpl<ProjectCo
             //查询具体明细并分组存入
             list = budgetService.budgetListByProjectId(vo.getProjectId());
         }
-        if (list != null && list.size() > 0) {
+        if (list != null && list.size() > 0 ) {
             Map<Integer, List<ProjectCostBudget>> map = list.parallelStream().collect(Collectors.groupingBy(ProjectCostBudget::getUnitType));
-            vo.setBuildUnit(map.get(1));
-            vo.setSupervisorUnit(map.get(2));
-            vo.setConstructUnit(map.get(3));
+            List<ProjectCostBudget> b1 = map.get(1);
+            if (b1 != null && b1.size() > 0 && b1.get(0).getSort() != null) {
+                b1 = b1.stream().sorted(Comparator.comparing(ProjectCostBudget::getSort)).collect(Collectors.toList());
+            }
+            vo.setBuildUnit(b1);
+            List<ProjectCostBudget> b2 = map.get(2);
+            if (b2 != null && b2.size() > 0 && b2.get(0).getSort() != null) {
+                b2 = b2.stream().sorted(Comparator.comparing(ProjectCostBudget::getSort)).collect(Collectors.toList());
+            }
+            vo.setSupervisorUnit(b2);
+            List<ProjectCostBudget> b3 = map.get(3);
+            if (b3 != null && b3.size() > 0 && b3.get(0).getSort() != null) {
+                b3 = b3.stream().sorted(Comparator.comparing(ProjectCostBudget::getSort)).collect(Collectors.toList());
+            }
+            vo.setConstructUnit(b3);
         }
         return vo;
     }

+ 10 - 6
blade-service/blade-manager/src/main/java/com/mixsmart/utils/FormulaUtils.java

@@ -25,6 +25,7 @@ import org.jfree.data.xy.DefaultXYDataset;
 import org.jfree.data.xy.XYSeries;
 import org.jfree.data.xy.XYSeriesCollection;
 import org.jsoup.Jsoup;
+import org.jsoup.nodes.Document;
 import org.springblade.core.tool.utils.CollectionUtil;
 import org.springblade.core.tool.utils.Func;
 import org.springblade.core.tool.utils.IoUtil;
@@ -559,12 +560,15 @@ public class FormulaUtils {
     public static Map<String, String> getElementCell(String uri) {
         try {
             InputStream inputStreamByUrl = FileUtils.getInputStreamByUrl(uri);
-            Map<String,String> result= Jsoup.parse(IoUtil.readToString(inputStreamByUrl))
+            Document document=Jsoup.parse(IoUtil.readToString(inputStreamByUrl));
+            Map<String,String> result= document
                     .select("table").first()
-                    .select("tr").stream()
-                    .flatMap(tr -> tr.select("td").stream())
-                    .filter(d -> !d.children().isEmpty())
-                    .map(d -> d.children().get(0)).map(d -> d.attr("keyname")).filter(StringUtils::isNotEmpty).map(e -> e.split("__"))
+                    .select("el-input[keyname]").stream()
+//                    .select("tr").stream()有缺漏的情况
+//                    .flatMap(tr -> tr.select("td").stream())
+//                    .filter(d -> !d.children().isEmpty())
+//                    .map(d -> d.children().get(0))
+                    .map(d -> d.attr("keyname")).filter(StringUtils::isNotEmpty).map(e -> e.split("__"))
                     .collect(
                             Collectors.toMap(
                                     b -> b[0],
@@ -585,7 +589,7 @@ public class FormulaUtils {
     }
 
 /*    public static void main(String[] args) {
-        Map<String,String> map=getElementCell("/www/wwwroot/Users/hongchuangyanfa/Desktop/privateUrl/1645328487982039040.html");
+        Map<String,String> map=getElementCell("/www/wwwroot/Users/hongchuangyanfa/Desktop/privateUrl/1645670856300429312.html");
         System.out.println();
     }*/
     /**