Browse Source

Merge remote-tracking branch 'origin/master' into master

yangyj 2 years ago
parent
commit
e97fce0f75
18 changed files with 373 additions and 154 deletions
  1. 3 0
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/entity/DepartmentPlanLog.java
  2. 3 0
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/entity/PlanRelationReturned.java
  3. 7 1
      blade-service-api/blade-control-api/src/main/java/org/springblade/control/vo/ProjectCostBudgetVO2.java
  4. 66 47
      blade-service/blade-business/src/main/java/org/springblade/business/controller/InformationWriteQueryController.java
  5. 7 7
      blade-service/blade-business/src/main/java/org/springblade/business/service/impl/TrialMaterialMobilizationServiceImpl.java
  6. 2 2
      blade-service/blade-control/src/main/java/org/springblade/control/controller/PlanRelationReturnedController.java
  7. 8 0
      blade-service/blade-control/src/main/java/org/springblade/control/mapper/ProjectCostBudgetMapper.java
  8. 18 2
      blade-service/blade-control/src/main/java/org/springblade/control/mapper/ProjectCostBudgetMapper.xml
  9. 1 1
      blade-service/blade-control/src/main/java/org/springblade/control/service/IPlanRelationReturnedService.java
  10. 3 2
      blade-service/blade-control/src/main/java/org/springblade/control/service/impl/AnnualBudgetServiceImpl.java
  11. 1 1
      blade-service/blade-control/src/main/java/org/springblade/control/service/impl/DepartmentPlanLogImpl.java
  12. 2 1
      blade-service/blade-control/src/main/java/org/springblade/control/service/impl/PlanRelationReturnedServiceImpl.java
  13. 138 21
      blade-service/blade-control/src/main/java/org/springblade/control/service/impl/ProjectCostBudgetServiceImpl.java
  14. 10 0
      blade-service/blade-control/src/main/java/org/springblade/control/service/impl/ProjectInfoServiceImpl.java
  15. 2 1
      blade-service/blade-manager/src/main/java/org/springblade/manager/controller/ContractInfoController.java
  16. 5 3
      blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/WbsTreeContractMapper.xml
  17. 1 1
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/IContractInfoService.java
  18. 96 64
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ContractInfoServiceImpl.java

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

@@ -113,4 +113,7 @@ public class DepartmentPlanLog extends BaseEntity {
 
     @ApiModelProperty(value = "上一次计划工时(天)")
     private BigDecimal lastOpenPlanStartEndDays;
+
+    @ApiModelProperty(value = "0不显示提示,1显示提示")
+    private Integer isShowTips;
 }

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

@@ -29,4 +29,7 @@ public class PlanRelationReturned extends BaseEntity {
     @ApiModelProperty(value = "回款id")
     private Long returnedId;
 
+    @ApiModelProperty(value = "项目id")
+    private Long projectId;
+
 }

+ 7 - 1
blade-service-api/blade-control-api/src/main/java/org/springblade/control/vo/ProjectCostBudgetVO2.java

@@ -35,7 +35,7 @@ public class ProjectCostBudgetVO2 extends ProjectCostBudget {
     @ApiModelProperty(value = "岗位类型值")
     private String postTypeValue;
 
-    @ApiModelProperty(value = "任务完成状态,1黄色,2绿色")
+    @ApiModelProperty(value = "任务状态,1黄色超预算,2绿色已完成")
     private Integer taskFinishedStatus;
 
     @ApiModelProperty(value = "计划总金额")
@@ -44,10 +44,16 @@ public class ProjectCostBudgetVO2 extends ProjectCostBudget {
     @ApiModelProperty(value = "项目名称")
     private String projectName;
 
+    @ApiModelProperty(value = "任务类型值")
+    private String planTaskTypeValue;
+
     @ApiModelProperty(value = "0不显示分解子计划,1显示分解子计划")
     private Integer isShowChildren;
 
     @ApiModelProperty(value = "0不显示编辑,1显示编辑")
     private Integer isShowEdit;
 
+    @ApiModelProperty(value = "超出预算提示信息")
+    private String outMoneyTips;
+
 }

+ 66 - 47
blade-service/blade-business/src/main/java/org/springblade/business/controller/InformationWriteQueryController.java

@@ -2650,6 +2650,9 @@ public class InformationWriteQueryController extends BladeController {
         selectList.addAll(halfSelectedNodeList);
         selectList.addAll(allSelectedNodeList);
 
+        //结果集,匹配节点名称使用
+        List<WbsTreePrivate> query = new ArrayList<>();
+        List<String> pKeyIds = selectList.stream().map(AddContractTreeNodeVO.Node::getPrimaryKeyId).collect(Collectors.toList());
         //所有相关节点集合
         List<WbsTreeContract> selectedNodeList = new ArrayList<>();
 
@@ -2659,8 +2662,10 @@ public class InformationWriteQueryController extends BladeController {
             //当前节点及其子节点时,半选说明其下的子节点并不是全部选中的,所以这时候只需要根据全选的查询其全部子节点即可
             if (allSelectedNodeList.size() > 0) {
                 //查询数据
-                selectedNodeList = this.unifiedCode(allSelectedNodeList, treeContract, "1");
-
+                selectedNodeList = this.unifiedCode(allSelectedNodeList, treeContract, "1", query);
+                if (ObjectUtil.isEmpty(selectedNodeList)) {
+                    return R.data(null);
+                }
                 //检查当前操作的节点是否是填报节点,如果是则需要查询相关联表格
                 List<WbsTreeContract> submitNodeList = selectedNodeList.stream().filter(treeContract1 -> Arrays.asList("1,2,3,4".split(",")).contains(treeContract1.getMajorDataType().toString())).distinct().collect(Collectors.toList());
 
@@ -2690,7 +2695,7 @@ public class InformationWriteQueryController extends BladeController {
                 selectedNodeList.addAll(childList);
             }
             //处理半选
-            this.disposeHalfSelectList(treeContract, halfSelectedNodeList, selectedNodeList);
+            this.disposeHalfSelectList(treeContract, halfSelectedNodeList, selectedNodeList, query);
 
         } else {
             //todo 仅当前节点操作
@@ -2699,8 +2704,10 @@ public class InformationWriteQueryController extends BladeController {
                     throw new ServiceException("只能选择单节点进行新增操作");
                 }
                 //查询数据
-                selectedNodeList = this.unifiedCode(allSelectedNodeList, treeContract, "0");
-
+                selectedNodeList = this.unifiedCode(allSelectedNodeList, treeContract, "0", query);
+                if (ObjectUtil.isEmpty(selectedNodeList)) {
+                    return R.data(null);
+                }
                 //检查当前操作的节点是否是填报节点,如果是则需要查询相关联表格
                 List<WbsTreeContract> submitNodeList = selectedNodeList.stream().filter(treePrivate -> Arrays.asList("1,2,3,4".split(",")).contains(treePrivate.getMajorDataType().toString())).distinct().collect(Collectors.toList());
 
@@ -2718,6 +2725,16 @@ public class InformationWriteQueryController extends BladeController {
         List<WbsTreeContract> saveList = new ArrayList<>();
         List<ConstructionLedger> saveLedger = new ArrayList<>();
 
+        //封裝节点名称nodeName与id的Map
+        Map<Long, String> idAndNodeNameMaps = query.stream()
+                .filter(wbsTreePrivate -> pKeyIds.contains(wbsTreePrivate.getPKeyId().toString()))
+                .collect(Collectors.toMap(WbsTreePrivate::getId,
+                        wbsTreePrivate -> selectList.stream()
+                                .filter(node -> node.getPrimaryKeyId().equals(wbsTreePrivate.getPKeyId().toString()))
+                                .findFirst()
+                                .map(AddContractTreeNodeVO.Node::getNodeName)
+                                .orElse("")));
+
         //原始表ids,电签位置信息使用
         List<Long> oldTabIds = selectedNodeList.stream().filter(f -> new Integer(2).equals(f.getType())).map(WbsTreeContract::getId).collect(Collectors.toList());
 
@@ -2799,14 +2816,7 @@ public class InformationWriteQueryController extends BladeController {
                 newData.setSort(ObjectUtils.isNotEmpty(half.getSort()) ? half.getSort() : 0);
 
                 //设置节点名称
-                for (AddContractTreeNodeVO.Node addVO : selectList) {
-                    if (half.getPKeyId().toString().equals(addVO.getPrimaryKeyId())) {
-                        if (StringUtils.isNotEmpty(addVO.getNodeName())) {
-                            newData.setFullName(addVO.getNodeName());
-                        }
-                        break;
-                    }
-                }
+                newData.setFullName(ObjectUtil.isNotEmpty(idAndNodeNameMaps.get(half.getId())) ? idAndNodeNameMaps.get(half.getId()) : half.getFullName());
 
                 //重塑父节点关联关系
                 String ancestors = newData.getAncestors();
@@ -2827,16 +2837,6 @@ public class InformationWriteQueryController extends BladeController {
                     newData.setAncestors(stringBuilder.substring(1));
                 }
 
-                //设置名称
-                Iterator<AddContractTreeNodeVO.Node> iterator = selectList.iterator();
-                while (iterator.hasNext()) {
-                    AddContractTreeNodeVO.Node next = iterator.next();
-                    if (next.getPrimaryKeyId().equals(half.getPKeyId().toString())) {
-                        newData.setFullName(next.getNodeName());
-                        iterator.remove();
-                        break;
-                    }
-                }
                 //设置到保存集合中
                 saveList.add(newData);
 
@@ -2883,22 +2883,31 @@ public class InformationWriteQueryController extends BladeController {
         }
     }
 
-    private List<WbsTreeContract> unifiedCode(List<AddContractTreeNodeVO.Node> allSelectedNodeList, WbsTreeContract treeContract, String saveType) {
-        //获取主键
+    private List<WbsTreeContract> unifiedCode(List<AddContractTreeNodeVO.Node> allSelectedNodeList, WbsTreeContract treeContract, String saveType, List<WbsTreePrivate> queryResultP) {
+        //获取项目节点树的主键
         List<Long> halfSelectedList = allSelectedNodeList.stream().map(AddContractTreeNodeVO.Node::getPrimaryKeyId).map(Long::parseLong).distinct().collect(Collectors.toList());
-        //查询数据
-        List<WbsTreeContract> selectedNodeList = jdbcTemplate.query("select * from m_wbs_tree_contract where status = 1 and is_deleted = 0 and p_key_id in(" + StringUtils.join(halfSelectedList, ",") + ")", new BeanPropertyRowMapper<>(WbsTreeContract.class));
-
-        //剔除与当前操作节点相同的ID,(如果saveType=1,表示当前及子级节点,那么就要剔除自己本身,否则视为仅当前节点操作,会存在自己本身)
-        if ("1".equals(saveType)) {
-            //selectedNodeList.removeIf(wbsTreePrivate -> treeContract.getId().equals(wbsTreePrivate.getId()) || treeContract.getOldId().equals(wbsTreePrivate.getId().toString()));
-            selectedNodeList.removeIf(wbsTreePrivate -> {
-                Long id = wbsTreePrivate.getId();
-                return treeContract.getId() != null && treeContract.getId().equals(id);
-            });
+
+        //获取项目对应的合同段的树原始节点的信息
+        List<WbsTreePrivate> query = jdbcTemplate.query("select * from m_wbs_tree_private where p_key_id in(" + StringUtils.join(halfSelectedList, ",") + ")", new BeanPropertyRowMapper<>(WbsTreePrivate.class));
+        List<Long> projectNodeIds = query.stream().map(WbsTreePrivate::getId).collect(Collectors.toList());
+        if (projectNodeIds.size() > 0) {
+            //返回结果集,匹配节点名称使用
+            queryResultP.addAll(query);
+
+            //查询数据
+            List<WbsTreeContract> selectedNodeList = jdbcTemplate.query("select * from m_wbs_tree_contract where contract_id = " + treeContract.getContractId() + " and status = 1 and is_deleted = 0 and id in(" + StringUtils.join(projectNodeIds, ",") + ")", new BeanPropertyRowMapper<>(WbsTreeContract.class));
+
+            //剔除与当前操作节点相同的ID,(如果saveType=1,表示当前及子级节点,那么就要剔除自己本身,否则视为仅当前节点操作,会存在自己本身)
+            if ("1".equals(saveType)) {
+                selectedNodeList.removeIf(wbsTreePrivate -> {
+                    Long id = wbsTreePrivate.getId();
+                    return treeContract.getId() != null && treeContract.getId().equals(id);
+                });
+            }
+            return selectedNodeList;
         }
 
-        return selectedNodeList;
+        return null;
     }
 
     @NotNull
@@ -3006,20 +3015,30 @@ public class InformationWriteQueryController extends BladeController {
     /**
      * 处理半选集合
      */
-    private void disposeHalfSelectList(@RequestBody WbsTreeContract treeContract, List<AddContractTreeNodeVO.Node> allSelectedNodeList, List<WbsTreeContract> selectedNodeList) {
+    private void disposeHalfSelectList(@RequestBody WbsTreeContract treeContract, List<AddContractTreeNodeVO.Node> allSelectedNodeList, List<WbsTreeContract> selectedNodeList, List<WbsTreePrivate> queryResultP) {
         if (allSelectedNodeList != null && allSelectedNodeList.size() > 0) {
             //获取主键
             List<Long> allSelectedList = allSelectedNodeList.stream().map(AddContractTreeNodeVO.Node::getPrimaryKeyId).map(Long::parseLong).distinct().collect(Collectors.toList());
-            //查询对应数据
-            List<WbsTreeContract> allSelectedNodeLists = this.wbsTreeContractClient.queryContractTreeNodeByPKIds(allSelectedList);
-            //剔除与当前操作节点相同的ID
-            allSelectedNodeLists.removeIf(wbsTreePrivate -> {
-                Long id = wbsTreePrivate.getId();
-                return treeContract.getId() != null && treeContract.getId().equals(id);
-            });
-            //allSelectedNodeLists.removeIf(wbsTreePrivate -> treeContract.getId().equals(wbsTreePrivate.getId()) || treeContract.getOldId().equals(wbsTreePrivate.getId().toString()));
-            //设置到集合中
-            selectedNodeList.addAll(allSelectedNodeLists);
+
+            //获取项目对应的合同段的树原始节点的信息
+            List<WbsTreePrivate> query = jdbcTemplate.query("select * from m_wbs_tree_private where p_key_id in(" + StringUtils.join(allSelectedList, ",") + ")", new BeanPropertyRowMapper<>(WbsTreePrivate.class));
+            List<Long> projectNodeIds = query.stream().map(WbsTreePrivate::getId).collect(Collectors.toList());
+            if (projectNodeIds.size() > 0) {
+                //返回结果集,匹配节点名称使用
+                queryResultP.addAll(query);
+
+                //查询数据
+                List<WbsTreeContract> allSelectedNodeLists = jdbcTemplate.query("select * from m_wbs_tree_contract where contract_id = " + treeContract.getContractId() + " and status = 1 and is_deleted = 0 and id in(" + StringUtils.join(projectNodeIds, ",") + ")", new BeanPropertyRowMapper<>(WbsTreeContract.class));
+
+                //剔除与当前操作节点相同的ID
+                allSelectedNodeLists.removeIf(wbsTreePrivate -> {
+                    Long id = wbsTreePrivate.getId();
+                    return treeContract.getId() != null && treeContract.getId().equals(id);
+                });
+
+                //设置到集合中
+                selectedNodeList.addAll(allSelectedNodeLists);
+            }
         }
     }
 

+ 7 - 7
blade-service/blade-business/src/main/java/org/springblade/business/service/impl/TrialMaterialMobilizationServiceImpl.java

@@ -136,7 +136,7 @@ public class TrialMaterialMobilizationServiceImpl extends BaseServiceImpl<TrialM
 
         IPage<TrialMaterialMobilizationVO> trialMaterialMobilizationVOIPage = TrialMaterialMobilizationWarpper.build().pageVO(pages);
         List<TrialMaterialMobilizationVO> records = trialMaterialMobilizationVOIPage.getRecords();
-        Map<String, Attach> fileMaps = jdbcTemplate.query("select link,original_name from blade_attach", new BeanPropertyRowMapper<>(Attach.class)).stream().collect(Collectors.toMap(Attach::getLink, Function.identity()));
+        Map<String, String> fileMaps = jdbcTemplate.query("select link,original_name from blade_attach", new BeanPropertyRowMapper<>(Attach.class)).stream().collect(Collectors.toMap(Attach::getLink, Attach::getOriginalName, (key1, key2) -> key2));
         for (TrialMaterialMobilizationVO record : records) {
             for (User user : userList) {
                 if (user.getId().equals(record.getUserId())) {
@@ -145,21 +145,21 @@ public class TrialMaterialMobilizationServiceImpl extends BaseServiceImpl<TrialM
                 }
             }
             if (StringUtils.isNotEmpty(record.getOtherAccessories())) {
-                Attach attach = fileMaps.get(record.getOtherAccessories());
+                String attach = fileMaps.get(record.getOtherAccessories());
                 if (attach != null) {
-                    record.setOtherAccessoriesName(StringUtils.isNotEmpty(attach.getOriginalName()) ? attach.getOriginalName() : "");
+                    record.setOtherAccessoriesName(attach);
                 }
             }
             if (StringUtils.isNotEmpty(record.getProductionCertificate())) {
-                Attach attach = fileMaps.get(record.getProductionCertificate());
+                String attach = fileMaps.get(record.getProductionCertificate());
                 if (attach != null) {
-                    record.setProductionCertificateName(StringUtils.isNotEmpty(attach.getOriginalName()) ? attach.getOriginalName() : "");
+                    record.setProductionCertificateName(attach);
                 }
             }
             if (StringUtils.isNotEmpty(record.getQualityInspectionReport())) {
-                Attach attach = fileMaps.get(record.getQualityInspectionReport());
+                String attach = fileMaps.get(record.getQualityInspectionReport());
                 if (attach != null) {
-                    record.setQualityInspectionReportName(StringUtils.isNotEmpty(attach.getOriginalName()) ? attach.getOriginalName() : "");
+                    record.setQualityInspectionReportName(attach);
                 }
             }
         }

+ 2 - 2
blade-service/blade-control/src/main/java/org/springblade/control/controller/PlanRelationReturnedController.java

@@ -45,8 +45,8 @@ public class PlanRelationReturnedController {
             @ApiImplicitParam(name = "returnedId", value = "回款id", required = true),
             @ApiImplicitParam(name = "type", value = "关联类型:0取消关联,1关联", required = true),
     })
-    public R relationPlanAndReturned(Long returnedId,Long planId,Integer type){
-        String msg = planRelationReturnedService.relationPlanAndReturned(returnedId, planId, type);
+    public R relationPlanAndReturned(Long projectId,Long returnedId,Long planId,Integer type){
+        String msg = planRelationReturnedService.relationPlanAndReturned(projectId,returnedId, planId, type);
         return R.success(msg);
     }
 

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

@@ -79,4 +79,12 @@ public interface ProjectCostBudgetMapper extends BaseMapper<ProjectCostBudget> {
     List<DictInfo> getCostType();
 
     List<DictInfo> getUnitType();
+
+    List<DictInfo> getAllPostType();
+
+    List<DictInfo> getAllTaskInfo();
+
+    List<PlanRelationReturned> getAllRelationInfo(@Param("projectId") Long projectId);
+
+    List<ContractReturnedInfo> getAllReturnedInfo(@Param("projectId") Long id);
 }

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

@@ -72,7 +72,8 @@
             (select di.dict_name from c_dict_info di where di.type = 1 and di.dict_value = pcb.task_detail and di.parent_id =
             (select di.id from c_dict_info di where di.type = 1 and di.dict_value = pcb.budget_type and di.parent_id = 0)) as taskDetailValue,
             (select cri.returned_condition from c_contract_returned_info cri where cri.id = pcb.contract_returned_id) as returnedValue,
-            (select di.dict_name from c_dict_info di where di.type = 3 and di.code = pcb.post_type) as postTypeValue
+            (select di.dict_name from c_dict_info di where di.type = 3 and di.id = pcb.post_type) as postTypeValue,
+            (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.project_id = #{id} AND pcb.approve = 1
     </select>
 
@@ -168,7 +169,8 @@
                (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 = 1 and di.dict_value = pcb.budget_type and di.parent_id = 0) as budgetTypeValue,
                (select di.dict_name from c_dict_info di where di.type = 1 and di.dict_value = pcb.task_detail and di.parent_id =
-                                                                                                                  (select di.id from c_dict_info di where di.type = 1 and di.dict_value = pcb.budget_type and di.parent_id = 0)) as taskDetailValue
+                       (select di.id from c_dict_info di where di.type = 1 and di.dict_value = pcb.budget_type and di.parent_id = 0)) as taskDetailValue,
+               (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.project_id = #{id} AND pcb.parent_id > 0
     </select>
     <select id="getBudgetByYear" resultType="org.springblade.control.entity.ProjectCostBudget">
@@ -250,6 +252,20 @@
         select dict_value
         from c_dict_info where `type` = 3 and id = #{type}
     </select>
+    <select id="getAllPostType" resultType="org.springblade.control.entity.DictInfo">
+        select * from c_dict_info
+        where `type` = 3 and  is_deleted = 0
+    </select>
+    <select id="getAllTaskInfo" resultType="org.springblade.control.entity.DictInfo">
+        select * from c_dict_info
+        where `type` = 2 and  is_deleted = 0
+    </select>
+    <select id="getAllRelationInfo" resultType="org.springblade.control.entity.PlanRelationReturned">
+        select * from c_plan_relation_returned WHERE project_id = #{projectId} and is_deleted = 0
+    </select>
+    <select id="getAllReturnedInfo" resultType="org.springblade.control.entity.ContractReturnedInfo">
+        select * from c_contract_returned_info WHERE project_id = #{projectId} and is_deleted = 0
+    </select>
 
 
 </mapper>

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

@@ -14,5 +14,5 @@ public interface IPlanRelationReturnedService extends BaseService<PlanRelationRe
     /**
      * 计划关联回款
      */
-    String relationPlanAndReturned(Long returnedId, Long planId, Integer type);
+    String relationPlanAndReturned(Long projectId,Long returnedId, Long planId, Integer type);
 }

+ 3 - 2
blade-service/blade-control/src/main/java/org/springblade/control/service/impl/AnnualBudgetServiceImpl.java

@@ -566,8 +566,9 @@ public class AnnualBudgetServiceImpl extends BaseServiceImpl<AnnualBudgetMapper,
         List<AllProjectStatsVO> vos = new ArrayList<>();
         //获取部门映射值
         List<DictInfo> costTypeDict = monthPlanService.getDepartmentDict();
-        Map<Double, List<DictInfo>> collect = costTypeDict.parallelStream()
-                .collect(Collectors.groupingBy(DictInfo::getDictValue));
+//        Map<Double, List<DictInfo>> collect = costTypeDict.parallelStream()
+//                .collect(Collectors.groupingBy(DictInfo::getDictValue));
+        Map<Integer, List<DictInfo>> collect = costTypeDict.stream().collect(Collectors.groupingBy(s -> s.getDictValue().intValue()));
         //风险计划按项目分组,再按照部门分组,再统计计划总数
         Map<Long, List<ProjectCostBudget>> map = riskPlan.parallelStream()
                 .collect(Collectors.groupingBy(ProjectCostBudget::getProjectId));

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

@@ -116,7 +116,7 @@ public class DepartmentPlanLogImpl extends BaseServiceImpl<DepartmentPlanLogMapp
 //            log.setOpenPlanEndTime(null);
 //            log.setOpenPlanStartEndDays(null);
 //        }
-        log.setOpenPlanStartTime(null);
+        log.setOpenPlanStartTime(LocalDate.now());
         log.setOpenPlanEndTime(null);
         log.setOpenPlanStartEndDays(null);
         return log;

+ 2 - 1
blade-service/blade-control/src/main/java/org/springblade/control/service/impl/PlanRelationReturnedServiceImpl.java

@@ -45,12 +45,13 @@ public class PlanRelationReturnedServiceImpl extends BaseServiceImpl<PlanRelatio
      * 计划关联回款
      */
     @Override
-    public String relationPlanAndReturned(Long returnedId, Long planId, Integer type) {
+    public String relationPlanAndReturned(Long projectId ,Long returnedId, Long planId, Integer type) {
         //关联类型:0取消关联,1关联
         if (type == 1){
             PlanRelationReturned relation = new PlanRelationReturned();
             relation.setPlanId(planId);
             relation.setReturnedId(returnedId);
+            relation.setProjectId(projectId);
             baseMapper.insert(relation);
             return "关联成功";
         }else {

+ 138 - 21
blade-service/blade-control/src/main/java/org/springblade/control/service/impl/ProjectCostBudgetServiceImpl.java

@@ -11,10 +11,7 @@ import org.springblade.common.utils.SnowFlakeUtil;
 import org.springblade.control.dto.ControlProjectInfoDTO;
 import org.springblade.control.dto.ProjectCostBudgetDTO;
 import org.springblade.control.dto.ProjectCostBudgetStatsDTO;
-import org.springblade.control.entity.ControlProjectInfo;
-import org.springblade.control.entity.DictInfo;
-import org.springblade.control.entity.ProjectCostBudget;
-import org.springblade.control.entity.ProjectCostBudgetStats;
+import org.springblade.control.entity.*;
 import org.springblade.control.mapper.ProjectCostBudgetMapper;
 import org.springblade.control.mapper.ProjectInfoMapper;
 import org.springblade.control.service.IProjectCostBudgetService;
@@ -177,17 +174,62 @@ public class ProjectCostBudgetServiceImpl extends BaseServiceImpl<ProjectCostBud
         ProjectCostBudgetVO vo = new ProjectCostBudgetVO();
         vo.setProjectName(projectInfo.getName());
         vo.setProjectId(id);
+        //获取所有岗位信息
+        List<DictInfo> allPostType = baseMapper.getAllPostType();
+        Map<Long, List<DictInfo>> postMap = new HashMap<>();
+        if (allPostType != null && allPostType.size() >0){
+            postMap = allPostType.parallelStream()
+                    .collect(Collectors.groupingBy(DictInfo::getId));
+        }else {
+            throw new ServiceException("参数配置暂无岗位信息");
+        }
+        //获取所有任务信息
+        List<DictInfo> allTaskInfo = baseMapper.getAllTaskInfo();
+        Map<Long, List<DictInfo>> taskMap = new HashMap<>();
+        if (allPostType != null && allPostType.size() >0){
+            taskMap = allTaskInfo.parallelStream()
+                    .collect(Collectors.groupingBy(DictInfo::getId));
+        }else {
+            throw new ServiceException("参数配置暂无任务信息");
+        }
+        //获取项目下所有计划关联回款信息
+        List<PlanRelationReturned> allRelationInfo = baseMapper.getAllRelationInfo(id);
+        Map<Long, List<PlanRelationReturned>> relationMap = null;
+        if (allRelationInfo != null && allRelationInfo.size() > 0){
+            relationMap = allRelationInfo.parallelStream()
+                    .collect(Collectors.groupingBy(PlanRelationReturned::getPlanId));
+        }
+        //获取项目下所有回款信息
+        List<ContractReturnedInfo> allReturnedInfo = baseMapper.getAllReturnedInfo(id);
+        Map<Long, List<ContractReturnedInfo>> returnedMap = null;
+        if (allReturnedInfo != null && allReturnedInfo.size() > 0){
+            returnedMap = allReturnedInfo.parallelStream()
+                    .collect(Collectors.groupingBy(ContractReturnedInfo::getId));
+        }
         //获取项目下所有已审批的计划
         List<ProjectCostBudgetVO2> list = baseMapper.getApprovePlan(id);
-        list.stream().forEach(l->{
-            if (l.getPlanTaskType() != null || l.getPlanTaskDesc() != null || l.getPlanDays() != null){
+        for (ProjectCostBudgetVO2 l : list) {
+            if (l.getPlanTaskType() != null || l.getPlanDays() != null || l.getPlanStartTime() != null || l.getPlanEndTime() != null){
                 l.setIsShowChildren(0);
             }else {
                 l.setIsShowChildren(1);
             }
-        });
+            if (relationMap != null){
+                List<PlanRelationReturned> returnedList = relationMap.get(l.getId());
+                if (returnedList != null && returnedList.size() > 0){
+                    StringBuilder str = new StringBuilder();
+                    int j = 1;
+                    for (PlanRelationReturned returned : returnedList) {
+                        ContractReturnedInfo info = returnedMap.get(returned.getReturnedId()).get(0);
+                        str.append(j+"."+info.getReturnedCondition()+"。");
+                    }
+                    l.setReturnedValue(str.toString());
+                }
+            }
+        }
         //获取项目下所有的子计划
         List<ProjectCostBudgetVO2> childrenList = baseMapper.getAllChildrenPlan(id);
+        //有子计划就插入父计划,没有子计划直接跳过
         if (childrenList != null && childrenList.size() >0) {
             //把子计划按parentId分组
             Map<Long, List<ProjectCostBudgetVO2>> listMap = childrenList.parallelStream()
@@ -200,38 +242,113 @@ public class ProjectCostBudgetServiceImpl extends BaseServiceImpl<ProjectCostBud
                 }
                 //如果子计划,把子计划插入计划里
                 if (key.contains(vo2.getId())) {
-                    //如果计划的status为1,2,3,或者计划有子计划,则不能编辑
+                    //如果计划的status为2,3,4,或者计划有子计划,则不能编辑
                     vo2.setIsShowEdit(0);
-                    //如果计划已经完成,则不计算超时
-                    if (vo2.getTaskFinishedStatus() == null) {
-                        //有子计划,判断子计划加起来是否超过预算天数
-                        BigDecimal workDays = new BigDecimal(0);
-                        List<ProjectCostBudgetVO2> vo2List = listMap.get(vo2.getId());
-                        for (ProjectCostBudgetVO2 budgetVO2 : vo2List) {
-                            if (budgetVO2.getPlanDays() != null) {
-                                workDays = workDays.add(budgetVO2.getPlanDays());
-                            }
+                    //有子计划,判断子计划加起来是否超过预算天数
+                    BigDecimal workDays = new BigDecimal(0);
+                    List<ProjectCostBudgetVO2> vo2List = listMap.get(vo2.getId());
+                    LocalDate startDate = LocalDate.MAX;
+                    LocalDate endDate = LocalDate.MIN;
+                    StringBuilder descStr = new StringBuilder();
+                    StringBuilder targetStr = new StringBuilder();
+                    int j = 1;
+                    for (ProjectCostBudgetVO2 budgetVO2 : vo2List) {
+                        //计算总天数
+                        if (budgetVO2.getPlanDays() != null) {
+                            workDays = workDays.add(budgetVO2.getPlanDays());
+                        }
+                        //计算最大日期和最小日期
+                        if (budgetVO2.getPlanStartTime().isBefore(startDate)){
+                            startDate = budgetVO2.getPlanStartTime();
                         }
-                        if (workDays.compareTo(vo2.getBudgetDays()) == 1) {
+                        if (budgetVO2.getPlanEndTime().isAfter(endDate)){
+                            endDate = budgetVO2.getPlanEndTime();
+                        }
+                        //拼接子计划的任务描述
+                        descStr.append(j + "."+budgetVO2.getPlanTaskDesc()+"。");
+                        //拼接子计划的完成指标
+                        targetStr.append(j+"."+budgetVO2.getPlanTarget()+"。");
+                        j++;
+                    }
+                    //如果计划已经完成,则不计算超预算
+                    if (vo2.getTaskFinishedStatus() == null) {
+                        if ((workDays.multiply(new BigDecimal((postMap.get(vo2.getPostType()).get(0).getDictValue())))).compareTo(vo2.getBudgetStaffCost()) == 1) {
                             vo2.setTaskFinishedStatus(1);
                         }
                     }
+                    //根据子计划设置父计划任务类型
+                    vo2.setPlanTaskType(vo2List.get(0).getPlanTaskType());
+                    //根据子计划设置父计划任务类型值
+                    vo2.setPlanTaskTypeValue(vo2List.get(0).getPlanTaskTypeValue());
+                    //根据子计划设置父计划任务描述
+                    vo2.setPlanTaskDesc(descStr.toString());
+                    //根据子计划设置父计划完成指标
+                    vo2.setPlanTarget(targetStr.toString());
+                    //根据子计划设置父计划起止日期
+                    vo2.setPlanStartTime(startDate);
+                    vo2.setPlanEndTime(endDate);
+                    //根据任务类型设置父计划的工作天数,固定任务1,临时任务2
+                    if (taskMap.get(vo2.getPlanTaskType()).get(0).getDictValue().intValue() == 1){
+                        vo2.setPlanDays(new BigDecimal(endDate.compareTo(startDate)));
+                    }else {
+                        if (endDate.compareTo(startDate) > 35){
+                            //工作天数,工具只能获取50天之内的
+                            int i = 0;
+                            while (endDate.compareTo(startDate) > 0){
+                                i += CommonUtil.getWorkDays(startDate, startDate.plusDays(35L));
+                                startDate = startDate.plusDays(36L);
+                            }
+                            vo2.setPlanDays(new BigDecimal(i));
+                        }else {
+                            vo2.setPlanDays(new BigDecimal(CommonUtil.getWorkDays(startDate, endDate)));
+                        }
+                    }
                     vo2.setChildrenList(listMap.get(vo2.getId()));
                 }else {
-                    //如果计划的status为1,2,3,或者计划有子计划,则不能编辑
+                    //如果计划的status为2,3,4,或者计划有子计划,则不能编辑
                     if (vo2.getStatus() == 1){
                         vo2.setIsShowEdit(1);
                     }else {
                         vo2.setIsShowEdit(0);
                     }
-                    //没有子计划,则计划父计划的时间是否超时
-                    if (vo2.getTaskFinishedStatus() == null && vo2.getPlanDays() != null){
+                    //没有子计划,则计算父计划成本是否超过测算,如果计划没有完成,有选择日期,有员工支出,则判断
+                    if (vo2.getTaskFinishedStatus() == null && vo2.getPlanDays() != null && vo2.getBudgetStaffCost() != null){
                         if (vo2.getPlanDays().compareTo(vo2.getBudgetDays()) == 1) {
                             vo2.setTaskFinishedStatus(1);
                         }
                     }
                 }
             }
+        }else {
+            //没有子计划也要为父计划设置颜色,是否显示编辑,是否显示分解子计划
+            for (ProjectCostBudgetVO2 vo2 : list) {
+                //设置颜色,已完成绿色,并且不能编辑,不能分解子计划
+                if (vo2.getTaskApprove() == 1){
+                    vo2.setTaskFinishedStatus(2);
+                    vo2.setIsShowChildren(0);
+                    vo2.setIsShowEdit(0);
+                }else {
+                    //如果计划正在进行就不能编辑
+                    if (vo2.getStatus() == 1){
+                        vo2.setIsShowEdit(1);
+                    }else {
+                        vo2.setIsShowEdit(0);
+                    }
+                    //如果已经填写了任务类型和选择了任务时间,就不显示子计划
+                    if (vo2.getPostType() != null && vo2.getPlanDays() != null){
+                        vo2.setIsShowChildren(0);
+                        //计算是否超过预算
+                        if ((vo2.getPlanDays().multiply(new BigDecimal(postMap.get(vo2.getPostType()).get(0).getDictValue()))).compareTo(vo2.getBudgetStaffCost()) == 1){
+                            vo2.setTaskFinishedStatus(1);
+//                            vo2.setOutMoneyTips("成本增加!该项计划完成时间超过当初测算时间工作时长("+vo2.getPlanDays().+"天)");
+                        }
+                    }else {
+                        vo2.setIsShowChildren(1);
+                    }
+
+                }
+
+            }
         }
         //根据单位分类
         Map<Integer, List<ProjectCostBudgetVO2>> map = list.parallelStream()

+ 10 - 0
blade-service/blade-control/src/main/java/org/springblade/control/service/impl/ProjectInfoServiceImpl.java

@@ -14,11 +14,14 @@ import org.springblade.control.vo.ControlProjectInfoVO;
 import org.springblade.core.log.exception.ServiceException;
 import org.springblade.core.mp.base.BaseServiceImpl;
 import org.springblade.core.mp.support.Query;
+import org.springblade.manager.entity.ContractInfo;
 import org.springblade.system.entity.DictBiz;
 import org.springblade.system.user.entity.User;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Lazy;
+import org.springframework.jdbc.core.BeanPropertyRowMapper;
+import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -44,6 +47,8 @@ public class ProjectInfoServiceImpl extends BaseServiceImpl<ProjectInfoMapper, C
 
     private final IProjectCostBudgetService budgetService;
 
+    private final JdbcTemplate jdbcTemplate;
+
     /**
      * 自定义分页
      *
@@ -107,6 +112,11 @@ public class ProjectInfoServiceImpl extends BaseServiceImpl<ProjectInfoMapper, C
         if (one1 != null){
             throw new ServiceException("项目存在合同,不能删除");
         }
+        String sql = "select id from c_project_cost_budget_stats where is_deleted = 0 and project_id = " + id;
+        List<ProjectCostBudgetStats> query = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(ProjectCostBudgetStats.class));
+        if (query != null && query.size() > 0){
+            throw new ServiceException("项目已经做了预算,不能删除");
+        }
         List<ProjectCostBudget> list = budgetService.list(new LambdaQueryWrapper<ProjectCostBudget>().eq(ProjectCostBudget::getProjectId, id));
         if (list != null && list.size() > 0){
             throw new ServiceException("项目已经做了预算,不能删除");

+ 2 - 1
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/ContractInfoController.java

@@ -546,8 +546,9 @@ public class ContractInfoController extends BladeController {
     @ApiImplicitParams(value = {
             @ApiImplicitParam(name = "pKeyId", value = "选择的节点pKeyId", required = true)
     })
+    @Deprecated
     public R addNodeTree(String pKeyId) {
-        List<WbsTreeContractVO> tree = contractInfoService.addNodeTree(pKeyId);
+        List<WbsTreePrivateVO> tree = contractInfoService.addNodeTree(pKeyId);
         if (tree != null && tree.size() > 0) {
             return R.data(tree);
         }

+ 5 - 3
blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/WbsTreeContractMapper.xml

@@ -437,7 +437,7 @@
                 #{tableOwnerList}
             </foreach>
         </if>
-        ORDER BY sort,full_name,p_key_id,update_time
+        ORDER BY sort,full_name,p_key_id,p_key_id,update_time
     </select>
 
     <select id="selectRoleInfo" resultType="org.springblade.manager.entity.SaveUserInfoByProject">
@@ -610,8 +610,10 @@
     </update>
     <update id="syncCurrentFormToAllContract">
         UPDATE m_wbs_tree_contract
-        SET html_url = #{wbsTreePrivate.htmlUrl} , init_table_name = #{wbsTreePrivate.initTableName}
-        WHERE project_id = #{wbsTreePrivate.projectId} and excel_id = #{wbsTreePrivate.excelId}
+        SET html_url        = #{wbsTreePrivate.htmlUrl},
+            init_table_name = #{wbsTreePrivate.initTableName}
+        WHERE project_id = #{wbsTreePrivate.projectId}
+          and excel_id = #{wbsTreePrivate.excelId}
     </update>
 
     <select id="selectQueryValueLikeNodeName" resultMap="ResultMap">

+ 1 - 1
blade-service/blade-manager/src/main/java/org/springblade/manager/service/IContractInfoService.java

@@ -75,7 +75,7 @@ public interface IContractInfoService extends BaseService<ContractInfo> {
 
     Map<Long, List<WbsTreeContractTreeAllVO>> treeAllJL(String contractId, Integer type);
 
-    List<WbsTreeContractVO> addNodeTree(String pKeyId);
+    List<WbsTreePrivateVO> addNodeTree(String pKeyId);
 
     List<ContractInfo> getContractListByProjectId(Long projectId);
 

+ 96 - 64
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ContractInfoServiceImpl.java

@@ -35,6 +35,7 @@ import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Service;
 
 import java.io.IOException;
+import java.lang.reflect.Field;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -47,6 +48,7 @@ public class ContractInfoServiceImpl extends BaseServiceImpl<ContractInfoMapper,
     private final SaveUserInfoByProjectMapper saveUserInfoByProjectMapper;
     private final SaveUserInfoByProjectServiceImpl saveUserInfoByProjectService;
     private final WbsTreeContractMapper wbsTreeContractMapper;
+    private final WbsTreePrivateMapper wbsTreePrivateMapper;
     private final JdbcTemplate jdbcTemplate;
     private final IUserClient iUserClient;
     private final InformationQueryClient informationQueryClient;
@@ -187,7 +189,7 @@ public class ContractInfoServiceImpl extends BaseServiceImpl<ContractInfoMapper,
     }
 
     @Override
-    public List<WbsTreeContractVO> addNodeTree(String pKeyId) {
+    public List<WbsTreePrivateVO> addNodeTree(String pKeyId) {
         WbsTreeContract parentNodeRoot = wbsTreeContractMapper.selectOne(Wrappers.<WbsTreeContract>lambdaQuery().eq(WbsTreeContract::getPKeyId, pKeyId).eq(WbsTreeContract::getStatus, 1));
         if (parentNodeRoot != null) {
             //oldId不等于空,说明是复制节点,通过oldId,去获取原始树节点
@@ -196,16 +198,105 @@ public class ContractInfoServiceImpl extends BaseServiceImpl<ContractInfoMapper,
             }
             List<WbsTreeContract> allNodes = this.getChildNodes(parentNodeRoot);
             if (allNodes == null) {
-                allNodes = new ArrayList<>();
+                //如果是最底层节点,那么直接返回null,最底层节点无法新增子节点
+                return null;
             }
             allNodes.add(parentNodeRoot);
 
-            List<WbsTreeContractVO> resultAllNodes = BeanUtil.copyProperties(allNodes, WbsTreeContractVO.class);
-            return buildWbsTreeByStreamChildNodeTree(resultAllNodes, parentNodeRoot);
+            //获取所有合同段树原始节点对应的项目树节点
+            List<Long> nodeIds = allNodes.stream().map(WbsTreeContract::getId).collect(Collectors.toList());
+
+            //重新赋值
+            List<WbsTreePrivate> projectTreeNodes = wbsTreePrivateMapper.selectList(Wrappers.<WbsTreePrivate>lambdaQuery().in(WbsTreePrivate::getId, nodeIds)
+                    .eq(WbsTreePrivate::getProjectId, parentNodeRoot.getProjectId()).eq(WbsTreePrivate::getWbsId, parentNodeRoot.getWbsId()).eq(WbsTreePrivate::getStatus, 1));
+            //构造树
+            List<WbsTreePrivateVO> resultAllNodes = BeanUtil.copyProperties(projectTreeNodes, WbsTreePrivateVO.class);
+            WbsTreePrivateVO parentNodeRootProject = BeanUtil.copyProperties(parentNodeRoot, WbsTreePrivateVO.class);
+            return buildWbsTreeByStreamChildNodeTreeProject(resultAllNodes, parentNodeRootProject);
         }
         return null;
     }
 
+    /**
+     * 获取树结构
+     *
+     * @param obj
+     * @return
+     */
+    private WbsTreeContract recursionFindResourceRootNode(WbsTreeContract obj) {
+        if (obj.getOldId() != null) {
+            WbsTreeContract obj1 = wbsTreeContractMapper.selectOne(Wrappers.<WbsTreeContract>lambdaQuery()
+                    .eq(WbsTreeContract::getId, obj.getOldId())
+                    .eq(WbsTreeContract::getContractId, obj.getContractId()));
+            if (obj1 != null && obj1.getOldId() != null) {
+                obj1 = this.recursionFindResourceRootNode(obj1);
+            } else {
+                // 已经到达原始节点,返回当前节点的id
+                return obj1 != null ? obj1 : obj;
+            }
+            obj = obj1;
+        }
+        return obj;
+    }
+
+    private List<WbsTreeContract> getChildNodes(WbsTreeContract obj) {
+        List<WbsTreeContract> wbsTreeContracts = Collections.singletonList(obj);
+        List<WbsTreeContract> result = new ArrayList<>();
+        this.recursionGetChildNodes(wbsTreeContracts, result, obj.getContractId());
+        if (result.size() > 0) {
+            return result;
+        }
+        return null;
+    }
+
+    private void recursionGetChildNodes(List<WbsTreeContract> list, List<WbsTreeContract> result, String contractId) {
+        List<Long> ids = list.stream().map(WbsTreeContract::getId).collect(Collectors.toList());
+        if (ids.size() > 0) {
+            //只查询原始节点
+            List<WbsTreeContract> query = jdbcTemplate.query("select * from m_wbs_tree_contract where type = 1 and old_id is null and parent_id in(" + org.apache.commons.lang.StringUtils.join(ids, ",") + ") and status = 1 and is_deleted = 0 and contract_id = " + contractId, new BeanPropertyRowMapper<>(WbsTreeContract.class));
+            if (query.size() > 0) {
+                result.addAll(query);
+                recursionGetChildNodes(query, result, contractId);
+            }
+        }
+    }
+
+    /**
+     * 构建项目树
+     *
+     * @param nodes
+     * @param parentNodeRoot
+     * @return
+     */
+    private List<WbsTreePrivateVO> buildWbsTreeByStreamChildNodeTreeProject(List<WbsTreePrivateVO> nodes, WbsTreePrivate parentNodeRoot) {
+        List<WbsTreePrivateVO> list = nodes.stream().filter(f -> f.getId().equals(parentNodeRoot.getId())).collect(Collectors.toList());
+        Map<Long, List<WbsTreePrivateVO>> map = nodes.stream().collect(Collectors.groupingBy(WbsTreePrivateVO::getParentId));
+        this.recursionFnTreeChildNodeProject(list, map);
+        return list;
+    }
+
+    private void recursionFnTreeChildNodeProject(List<WbsTreePrivateVO> list, Map<Long, List<WbsTreePrivateVO>> map) {
+        for (WbsTreePrivateVO wbsTreePrivateVO : list) {
+            List<WbsTreePrivateVO> childrenList = map.get(wbsTreePrivateVO.getId());
+            wbsTreePrivateVO.setChildren(childrenList);
+            if (childrenList != null && childrenList.size() > 0) {
+                wbsTreePrivateVO.setHasChildren(true);
+                recursionFnTreeProject(childrenList, map);
+            }
+        }
+    }
+
+    private void recursionFnTreeProject(List<WbsTreePrivateVO> list, Map<Long, List<WbsTreePrivateVO>> map) {
+        for (WbsTreePrivateVO wbsTreePrivateVO : list) {
+            List<WbsTreePrivateVO> childrenList = map.get(wbsTreePrivateVO.getId());
+            wbsTreePrivateVO.setChildren(childrenList);
+            if (childrenList != null && childrenList.size() > 0) {
+                wbsTreePrivateVO.setHasChildren(true);
+                recursionFnTreeProject(childrenList, map);
+            }
+        }
+    }
+
     @Override
     public List<ContractInfo> getContractListByProjectId(Long projectId) {
         return contractInfoMapper.getContractListByProjectId(projectId);
@@ -453,64 +544,6 @@ public class ContractInfoServiceImpl extends BaseServiceImpl<ContractInfoMapper,
         }
     }
 
-
-    public List<WbsTreeContractVO> buildWbsTreeByStreamChildNodeTree(List<WbsTreeContractVO> nodes, WbsTreeContract parentNodeRoot) {
-        List<WbsTreeContractVO> list = nodes.stream().filter(f -> f.getId().equals(parentNodeRoot.getId())).collect(Collectors.toList());
-        Map<Long, List<WbsTreeContractVO>> map = nodes.stream().collect(Collectors.groupingBy(WbsTreeContractVO::getParentId));
-        this.recursionFnTreeChildNode(list, map);
-        return list;
-    }
-
-    public void recursionFnTreeChildNode(List<WbsTreeContractVO> list, Map<Long, List<WbsTreeContractVO>> map) {
-        for (WbsTreeContractVO wbsTreeContractVO : list) {
-            List<WbsTreeContractVO> childrenList = map.get(wbsTreeContractVO.getId());
-            wbsTreeContractVO.setChildren(childrenList);
-            if (childrenList != null && childrenList.size() > 0) {
-                wbsTreeContractVO.setHasChildren(true);
-                recursionFnTree(childrenList, map);
-            }
-        }
-    }
-
-    private List<WbsTreeContract> getChildNodes(WbsTreeContract obj) {
-        List<WbsTreeContract> wbsTreeContracts = Collections.singletonList(obj);
-        List<WbsTreeContract> result = new ArrayList<>();
-        this.recursionGetChildNodes(wbsTreeContracts, result, obj.getContractId());
-        if (result.size() > 0) {
-            return result;
-        }
-        return null;
-    }
-
-    private WbsTreeContract recursionFindResourceRootNode(WbsTreeContract obj) {
-        if (obj.getOldId() != null) {
-            WbsTreeContract obj1 = wbsTreeContractMapper.selectOne(Wrappers.<WbsTreeContract>lambdaQuery()
-                    .eq(WbsTreeContract::getId, obj.getOldId())
-                    .eq(WbsTreeContract::getContractId, obj.getContractId()));
-            if (obj1 != null && obj1.getOldId() != null) {
-                obj1 = this.recursionFindResourceRootNode(obj1);
-            } else {
-                // 已经到达原始节点,返回当前节点的id
-                return obj1 != null ? obj1 : obj;
-            }
-            obj = obj1;
-        }
-        return obj;
-    }
-
-
-    private void recursionGetChildNodes(List<WbsTreeContract> list, List<WbsTreeContract> result, String contractId) {
-        List<Long> ids = list.stream().map(WbsTreeContract::getId).collect(Collectors.toList());
-        if (ids.size() > 0) {
-            //只查询原始节点
-            List<WbsTreeContract> query = jdbcTemplate.query("select * from m_wbs_tree_contract where type = 1 and old_id is null and parent_id in(" + org.apache.commons.lang.StringUtils.join(ids, ",") + ") and status = 1 and is_deleted = 0 and contract_id = " + contractId, new BeanPropertyRowMapper<>(WbsTreeContract.class));
-            if (query.size() > 0) {
-                result.addAll(query);
-                recursionGetChildNodes(query, result, contractId);
-            }
-        }
-    }
-
     @Override
     public List<WbsTreeContractVO6> tree6List(String wbsId, String projectId, String contractId) {
         return baseMapper.tree6(Long.parseLong(wbsId), Long.parseLong(projectId), Long.parseLong(contractId));
@@ -671,7 +704,7 @@ public class ContractInfoServiceImpl extends BaseServiceImpl<ContractInfoMapper,
             }
             ContractInfo contractInfo1 = baseMapper.selectById(contractInfo.getId());
             try {
-                int integer = archiveTreeContractMapper.updateByNodeName(contractInfo1.getContractName(),contractInfo.getContractName(),contractInfo.getId());
+                int integer = archiveTreeContractMapper.updateByNodeName(contractInfo1.getContractName(), contractInfo.getContractName(), contractInfo.getId());
             } catch (Exception e) {
                 e.printStackTrace();
             }
@@ -894,5 +927,4 @@ public class ContractInfoServiceImpl extends BaseServiceImpl<ContractInfoMapper,
         this.updateById(contractInfo);
     }
 
-
 }