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

Merge branch 'dev' of http://219.151.181.73:3000/zhuwei/bladex into cr

chenr 2 сар өмнө
parent
commit
b97babea82
13 өөрчлөгдсөн 104 нэмэгдсэн , 43 устгасан
  1. 3 0
      blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/feign/WbsParamClient.java
  2. 11 5
      blade-service/blade-business/src/main/java/org/springblade/business/controller/InformationWriteQueryController.java
  3. 2 2
      blade-service/blade-business/src/main/java/org/springblade/business/controller/TaskController.java
  4. 9 8
      blade-service/blade-business/src/main/java/org/springblade/business/service/impl/EntrustInfoServiceImpl.java
  5. 3 2
      blade-service/blade-business/src/main/java/org/springblade/business/service/impl/TaskServiceImpl.java
  6. 2 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/controller/ArchiveTreeController.java
  7. 4 4
      blade-service/blade-manager/src/main/java/org/springblade/manager/controller/WbsTreePrivateController.java
  8. 6 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/feign/WbsParamClientImpl.java
  9. 4 1
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ExcelTabServiceImpl.java
  10. 3 3
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsFormElementServiceImpl.java
  11. 1 1
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreeContractServiceImpl.java
  12. 3 3
      blade-service/blade-manager/src/main/java/org/springblade/manager/utils/WbsElementUtil.java
  13. 53 14
      blade-service/blade-user/src/main/java/org/springblade/system/user/service/impl/UserServiceImpl.java

+ 3 - 0
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/feign/WbsParamClient.java

@@ -2,6 +2,7 @@ package org.springblade.manager.feign;
 
 
 import org.springblade.manager.entity.WbsParam;
+import org.springblade.manager.entity.WbsTreeContract;
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PostMapping;
@@ -23,4 +24,6 @@ public interface WbsParamClient {
     @GetMapping(API_PREFIX + "/getWbsParam")
     WbsParam getWbsParam(@RequestParam Long nodeId);
 
+    @PostMapping(API_PREFIX + "/createFileTitle")
+    String createFileTitle(@RequestBody WbsTreeContract contract);
 }

+ 11 - 5
blade-service/blade-business/src/main/java/org/springblade/business/controller/InformationWriteQueryController.java

@@ -150,6 +150,7 @@ public class InformationWriteQueryController extends BladeController {
 
     private final IRecycleBinService recycleBinService;
 
+
     @Autowired
     StringRedisTemplate RedisTemplate;
 
@@ -200,7 +201,7 @@ public class InformationWriteQueryController extends BladeController {
             .map(Long::valueOf)
             .collect(Collectors.toList());
         List<InformationQuery> queryList = this.informationQueryService.list(Wrappers.<InformationQuery>lambdaQuery()
-            .select(InformationQuery::getId, InformationQuery::getName,InformationQuery::getProjectId,InformationQuery::getClassify,InformationQuery::getStatus).in(InformationQuery::getId, idList));
+            .select(InformationQuery::getId, InformationQuery::getName,InformationQuery::getProjectId,InformationQuery::getClassify,InformationQuery::getStatus,InformationQuery::getWbsId).in(InformationQuery::getId, idList));
         String sgSuffix="";
         String jlSuffix="";
         if(queryList.size()>0){
@@ -211,13 +212,18 @@ public class InformationWriteQueryController extends BladeController {
                 jlSuffix=projectInfos.get(0).getJlSuffix()==null?"":projectInfos.get(0).getJlSuffix();
             }
             for (InformationQuery query : queryList) {
+                String sql="select * from m_wbs_tree_contract where p_key_id="+query.getWbsId()+" and is_deleted=0";
+                WbsTreeContract contract = jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper<>(WbsTreeContract.class));
+                  String result=wbsParamClient.createFileTitle(contract);
                 if(query.getClassify()!=null&&query.getClassify()==1&&StringUtils.isNotEmpty(sgSuffix)){
-                   if(!query.getName().endsWith(sgSuffix)){
-                       query.setName(query.getName()+sgSuffix);
+                    result=result+sgSuffix;
+                   if(!query.getName().equals(result)){
+                       query.setName(result);
                    }
                 }else if(query.getClassify()!=null&&query.getClassify()==2&&StringUtils.isNotEmpty(jlSuffix)){
-                    if(!query.getName().endsWith(jlSuffix)){
-                        query.setName(query.getName()+jlSuffix);
+                    result=result+jlSuffix;
+                    if(!query.getName().equals(result)){
+                        query.setName(result);
                     }
                 }
             }

+ 2 - 2
blade-service/blade-business/src/main/java/org/springblade/business/controller/TaskController.java

@@ -1873,7 +1873,7 @@ public class TaskController extends BladeController {
             throw new ServiceException("未获取到当前登陆的用户信息");
         } else {
             if (!SecureUtil.getUser().getRoleName().contains("administrator")) {
-                return R.data(200, null, "当前用户不是超管角色,未查询到信息");
+                return R.fail(200, "当前用户不是超管角色,未查询到信息");
             }
         }
         if (ObjectUtil.isEmpty(dto.getContractId())) {
@@ -1889,7 +1889,7 @@ public class TaskController extends BladeController {
         //封装入参SQL
         List<Object> params = new ArrayList<>();
         Integer eVisaStatus = dto.getVisaStatus();
-        StringBuilder sqlString = new StringBuilder("SELECT * FROM u_task WHERE approval_type not in (4, 5, 6, 7, 8) AND status != 3 AND is_deleted=0 AND contract_id = " + dto.getContractId()); //approval_type != 4 非档案的任务就是1填报资料,2工程文件,3日志资料
+        StringBuilder sqlString = new StringBuilder("SELECT * FROM u_task WHERE approval_type not in (4, 5, 6, 7, 11) AND status != 3 AND is_deleted=0 AND contract_id = " + dto.getContractId()); //approval_type != 4 非档案的任务就是1填报资料,2工程文件,3日志资料
 
         if (StringUtils.isNotBlank(dto.getStartTimeValue()) && StringUtils.isNotBlank(dto.getEndTimeValue())) {
             if (dto.getStartTimeValue().equals(dto.getEndTimeValue())) {

+ 9 - 8
blade-service/blade-business/src/main/java/org/springblade/business/service/impl/EntrustInfoServiceImpl.java

@@ -276,7 +276,8 @@ public class EntrustInfoServiceImpl extends BaseServiceImpl<EntrustInfoMapper, E
             if(formDataIds.size()>0){
                 for (String formDataId : formDataIds) {
                     String sql="Select * from u_task where form_data_id="+formDataId +" and status!=3 and is_deleted=0";
-                    Task task = jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper<>(Task.class));
+					List<Task> tasks = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(Task.class));
+					Task task = tasks.isEmpty() ? null : tasks.get(0);
                     if(task!=null){
                         String updateTaskParallel="update u_task_parallel set status=3 , e_visa_content = '撤回成功' where process_instance_id='" + task.getProcessInstanceId() + "'";
                         String updateTask="update u_task set status=3 where id="+task.getId()+" and status!=3 and is_deleted=0";
@@ -284,16 +285,16 @@ public class EntrustInfoServiceImpl extends BaseServiceImpl<EntrustInfoMapper, E
                         jdbcTemplate.update(updateTaskParallel);
                         jdbcTemplate.update(updateTask);
                         jdbcTemplate.execute(deleted);
+						JSONObject json = new JSONObject();
+						json.put("operationObjIds", Func.toStrList(task.getFormDataId()));
+						json.put("operationObjName", "批量废除");
+						json.put("projectId", task.getProjectId());
+						json.put("contractId", task.getContractId());
+						//保存操作记录
+						this.operationLogClient.saveUserOperationLog(62, "资料撤回废除", "委托单", json);
                     }
                     String updateinformationQuery="update u_information_query set status=3,e_visa_pdf_url= null where id="+formDataId;
                     jdbcTemplate.update(updateinformationQuery);
-					JSONObject json = new JSONObject();
-					json.put("operationObjIds", Func.toStrList(task.getFormDataId()));
-					json.put("operationObjName", "批量废除");
-					json.put("projectId", task.getProjectId());
-					json.put("contractId", task.getContractId());
-					//保存操作记录
-					this.operationLogClient.saveUserOperationLog(62, "资料撤回废除", "委托单", json);
 				}
 			}
 

+ 3 - 2
blade-service/blade-business/src/main/java/org/springblade/business/service/impl/TaskServiceImpl.java

@@ -2027,7 +2027,8 @@ public class TaskServiceImpl extends BaseServiceImpl<TaskMapper, Task> implement
                          b = informationQueryService.update(new LambdaUpdateWrapper<InformationQuery>()
                                 .eq(InformationQuery::getId, task.getFormDataId())
                                 .set(InformationQuery::getEVisaPdfUrl, null)
-                                .set(InformationQuery::getPdfUrl, null));
+//                                .set(InformationQuery::getPdfUrl, null)
+                         );
                     }else {
                         if(task.getApprovalType()==3){
                            b=contractLogService.update(new LambdaUpdateWrapper<ContractLog>()
@@ -2049,7 +2050,7 @@ public class TaskServiceImpl extends BaseServiceImpl<TaskMapper, Task> implement
                         //重新保存
                         long startTime_1 = System.currentTimeMillis();
                         //质检资料
-                        if(task.getApprovalType()==1){
+                        if(task.getApprovalType()==1 || task.getApprovalType()== 9){
                             String sql="select type from u_information_query where id="+task.getFormDataId();
                             Integer InformationType = jdbcTemplate.queryForObject(sql, new SingleColumnRowMapper<>(Integer.class));
                             if(InformationType==1){

+ 2 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/ArchiveTreeController.java

@@ -17,11 +17,13 @@ import org.springblade.core.tool.utils.Func;
 import org.springblade.manager.dto.ArchiveTreeContractAutoRuleMapDTO;
 import org.springblade.manager.dto.ArchiveTreeDTO;
 import org.springblade.manager.dto.ArchiveTreeSortDTO;
+import org.springblade.manager.entity.WbsTree;
 import org.springblade.manager.service.IArchiveTreeContractService;
 import org.springblade.manager.vo.ArchiveTreeVO2;
 import org.springblade.manager.vo.ArchiveTreeVO3;
 import org.springframework.jdbc.core.BeanPropertyRowMapper;
 import org.springframework.jdbc.core.JdbcTemplate;
+import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.bind.annotation.RequestParam;
 import org.springblade.manager.entity.ArchiveTree;

+ 4 - 4
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/WbsTreePrivateController.java

@@ -980,8 +980,8 @@ public class WbsTreePrivateController extends BladeController {
     public String getNameRuleV(String string){
         // 定义工程名称到C格式的映射
         Map<String, String> mapping = new HashMap<>();
-        mapping.put("单位工程", "C0");
-        mapping.put("单位工程", "C1");
+        mapping.put("单位工程类型", "C0");
+        mapping.put("单位工程", "C1");
         mapping.put("分部工程", "C2");
         mapping.put("子分部工程", "C3");
         mapping.put("分项工程", "C4");
@@ -1002,8 +1002,8 @@ public class WbsTreePrivateController extends BladeController {
     public String getNameRuleV1(String string){
         // 定义工程名称到C格式的映射
         Map<String, String> mapping = new HashMap<>();
-        mapping.put("C0", "单位工程");
-        mapping.put("C1", "单位工程");
+        mapping.put("C0", "单位工程类型");
+        mapping.put("C1", "单位工程");
         mapping.put("C2", "分部工程");
         mapping.put("C3", "子分部工程");
         mapping.put("C4", "分项工程");

+ 6 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/feign/WbsParamClientImpl.java

@@ -3,6 +3,7 @@ package org.springblade.manager.feign;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import lombok.AllArgsConstructor;
 import org.springblade.manager.entity.WbsParam;
+import org.springblade.manager.entity.WbsTreeContract;
 import org.springblade.manager.service.IWbsParamService;
 import org.springframework.web.bind.annotation.RestController;
 
@@ -21,4 +22,9 @@ public class WbsParamClientImpl implements WbsParamClient{
     public WbsParam getWbsParam(Long nodeId) {
         return iWbsParamService.getBaseMapper().selectOne(Wrappers.lambdaQuery(WbsParam.class).eq(WbsParam::getNodeId, nodeId).eq(WbsParam::getType, 200).eq(WbsParam::getIsDeleted, 0).eq(WbsParam::getK,"FILE_TITLE"));
     }
+
+    @Override
+    public String createFileTitle(WbsTreeContract contract) {
+        return iWbsParamService.createFileTitle(contract);
+    }
 }

+ 4 - 1
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ExcelTabServiceImpl.java

@@ -2295,6 +2295,9 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
                     Row row = sheet.getRow(y1 - 1);
                     if (row != null) {
                         Cell cell = row.getCell(x1 - 1, Row.MissingCellPolicy.CREATE_NULL_AS_BLANK);
+                        if (cell == null) {
+                            cell = row.createCell(x1 - 1);
+                        }
                         if (cell != null || ObjectUtils.isNotEmpty(cell)) {
                              // 获取单元格的现有值
                             String existingValue = cell.getStringCellValue();
@@ -4157,7 +4160,7 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
 
                     Row row = sheet.getRow(y1 - 1);
                     if (row != null) {
-                        Cell cell = row.getCell(x1 - 1);
+                        Cell cell = row.getCell(x1 - 1,  Row.MissingCellPolicy.CREATE_NULL_AS_BLANK);
                         if (cell != null || ObjectUtils.isNotEmpty(cell)) {
                             short fontIndex = cell.getCellStyle().getFontIndex();
                             Font oldfontAt = workbook.getFontAt(fontIndex);

+ 3 - 3
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsFormElementServiceImpl.java

@@ -59,7 +59,7 @@ public class WbsFormElementServiceImpl extends BaseServiceImpl<WbsFormElementMap
     //元素字符串、数值、时间类型默认长度
     public static final Integer DEFAULT_ELEMENT_LENGTH_VARCHAR = 200;
     public static final Integer DEFAULT_ELEMENT_LENGTH_NUMBER = 50;
-    public static final Integer DEFAULT_ELEMENT_LENGTH_DATE = 50;
+    public static final Integer DEFAULT_ELEMENT_LENGTH_DATE = 100;
     //实体表字段默认长度
     private static final String ELEMENT_LENGTH_ENTITY = "200";
 
@@ -236,8 +236,8 @@ public class WbsFormElementServiceImpl extends BaseServiceImpl<WbsFormElementMap
                     return wbsFormElement;
                 }
             } else if ("datetime".equals(fieldType)) {
-                if (wbsFormElement.getELength() > 50 || wbsFormElement.getELength() < 0) {
-                    throw new ServiceException("请输入正确的长度,范围为0-50");
+                if (wbsFormElement.getELength() > 100 || wbsFormElement.getELength() < 0) {
+                    throw new ServiceException("请输入正确的长度,范围为0-100");
                 } else {
                     //新增
                     baseMapper.insert(wbsFormElement);

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

@@ -2424,7 +2424,7 @@ public class WbsTreeContractServiceImpl extends BaseServiceImpl<WbsTreeContractM
                     }
                 }
                 //wbs节点和分部工程的名称类型能对应上,并且编号不一样,并且祖级节点也都能对应上,就修改编号
-                if(vo.getNodeName().equals(dto.getDivisionName())&&vo.getNodeType()==2&&!vo.getPartitionCode().equals(dto.getDivisionCode())){
+                if(vo.getNodeName().equals(dto.getDivisionName())&&vo.getNodeType()==2&&(vo.getPartitionCode()==null||vo.getPartitionCode().equals(dto.getDivisionCode()))){
                     Boolean exist = this.isExist(dto, WbsTreeContractListupdate, 3, wbsTreeContractRoot);
                     if(exist){
                         if(isTrueNode(Arrays.asList(dto.getUnitName(),dto.getSubUnitName(),dto.getDivisionName()),vo)){

+ 3 - 3
blade-service/blade-manager/src/main/java/org/springblade/manager/utils/WbsElementUtil.java

@@ -62,7 +62,7 @@ public class WbsElementUtil {
                 case 5:  //数值
                 case 3:  //小数
                 case 4:  //日期
-                    return "50";
+                    return "100";
                 default:
                     return "0";
             }
@@ -79,7 +79,7 @@ public class WbsElementUtil {
                 case "bigint":
                 case "decimal":
                 case "datetime":
-                    return 50;
+                    return 100;
                 default:
                     return 0;
             }
@@ -99,7 +99,7 @@ public class WbsElementUtil {
                 case "数值":
                 case "小数":
                 case "日期":
-                    return 50;
+                    return 100;
                 default:
                     return 0;
             }

+ 53 - 14
blade-service/blade-user/src/main/java/org/springblade/system/user/service/impl/UserServiceImpl.java

@@ -84,6 +84,7 @@ import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.locks.ReentrantLock;
 import java.util.function.Function;
 import java.util.stream.Collectors;
+import java.util.stream.Stream;
 
 @Service
 @AllArgsConstructor
@@ -789,12 +790,16 @@ public class UserServiceImpl extends BaseServiceImpl<UserMapper, User> implement
 
                         /* ================ 处理颜色 ================ */
                         long startTime = System.currentTimeMillis();
-                        List<NodeVO> nodeVOList = distinctNodesAll.stream().map(this::convertToNodeVO).collect(Collectors.toList());
-                        Map<Long, NodeVO> nodeVOMap = nodeVOList.stream().collect(Collectors.toMap(NodeVO::getId, vo -> vo, (existing, replacement) -> existing));
+//                        List<NodeVO> nodeVOList = distinctNodesAll.stream().map(this::convertToNodeVO).collect(Collectors.toList());
+//                        Map<Long, NodeVO> nodeVOMap = nodeVOList.stream().collect(Collectors.toMap(NodeVO::getId, vo -> vo, (existing, replacement) -> existing));
                         List<NodeVO> treeNodeVOList = this.buildNodeTreeByStream(distinctNodesAll, lowestNodesMap);
-                        NodeVO.calculateStatusToDFS(treeNodeVOList, nodeVOMap);
-                        List<NodeVO> nodeVOS = this.flattenTree(treeNodeVOList);
-                        Map<Long, Integer> nodeColorStatusMap = nodeVOS.stream().collect(Collectors.toMap(NodeVO::getPKeyId, NodeVO::getStatus, (existing, replacement) -> existing));
+//                        NodeVO.calculateStatusToDFS(treeNodeVOList, nodeVOMap);
+                        Map<Long, Integer> nodeColorStatusMap = new HashMap<>();
+                        NodeVO.calculateStatusToDFS1(treeNodeVOList, nodeColorStatusMap);
+//                        buildNodeTreeByStream(distinctNodesAll, lowestNodesMap, nodeColorStatusMap);
+                        // 将树形结构展开成列表
+//                        List<NodeVO> nodeVOS = this.flattenTree(treeNodeVOList);
+//                        Map<Long, Integer> nodeColorStatusMap = nodeVOS.stream().collect(Collectors.toMap(NodeVO::getPKeyId, NodeVO::getStatus, (existing, replacement) -> existing));
                         long endTime = System.currentTimeMillis();
                         long executionTime = endTime - startTime;
                         _logger.info("合同段 " + contractId + " 处理颜色 执行时间:" + executionTime + " ms");
@@ -928,13 +933,15 @@ public class UserServiceImpl extends BaseServiceImpl<UserMapper, User> implement
                                             }
                                         }).collect(Collectors.toMap(WbsTreeContractLazyVO::getPKeyId, Function.identity()));
 
-                                List<NodeVO> nodeVOList = distinctNodesAll.stream().map(this::convertToNodeVO).collect(Collectors.toList());
-                                Map<Long, NodeVO> nodeVOMap = nodeVOList.stream().collect(Collectors.toMap(NodeVO::getId, vo -> vo, (existing, replacement) -> existing));
+//                                List<NodeVO> nodeVOList = distinctNodesAll.stream().map(this::convertToNodeVO).collect(Collectors.toList());
+//                                Map<Long, NodeVO> nodeVOMap = nodeVOList.stream().collect(Collectors.toMap(NodeVO::getId, vo -> vo, (existing, replacement) -> existing));
                                 List<NodeVO> treeNodeVOList = this.buildNodeTreeByStream(distinctNodesAll, lowestNodesMap);
-                                NodeVO.calculateStatusToDFS(treeNodeVOList, nodeVOMap);
-                                List<NodeVO> nodeVOS = this.flattenTree(treeNodeVOList);
-                                Map<Long, Integer> nodeColorStatusMap = nodeVOS.stream().collect(Collectors.toMap(NodeVO::getPKeyId, NodeVO::getStatus, (existing, replacement) -> existing));
-
+//                                NodeVO.calculateStatusToDFS(treeNodeVOList, nodeVOMap);
+//                                List<NodeVO> nodeVOS = this.flattenTree(treeNodeVOList);
+//                                Map<Long, Integer> nodeColorStatusMap = nodeVOS.stream().collect(Collectors.toMap(NodeVO::getPKeyId, NodeVO::getStatus, (existing, replacement) -> existing));
+                                Map<Long, Integer> nodeColorStatusMap = new HashMap<>();
+                                NodeVO.calculateStatusToDFS1(treeNodeVOList, nodeColorStatusMap);
+//                                buildNodeTreeByStream(distinctNodesAll, lowestNodesMap, nodeColorStatusMap);
                                 if (lazyNodes.size() > 0) {
                                     Map<Long, Integer> countMap = new HashMap<>();
                                     for (WbsTreeContractLazyVO node : resultParentNodesTB) {
@@ -1426,7 +1433,8 @@ public class UserServiceImpl extends BaseServiceImpl<UserMapper, User> implement
 
             /*重新计算,进行递归获取父节点计数统计*/
             this.recursiveGetParentNodes(resultParentNodesTB, lowestNodeParentIdsTB, nodesAll);
-
+//            Map<Long, List<WbsTreeContractLazyVO>> map = nodesAll.stream().collect(Collectors.groupingBy(WbsTreeContractLazyVO::getId));
+//            recursiveGetParentNodes(resultParentNodesTB, lowestNodeParentIdsTB, map);
             long endTime = System.currentTimeMillis();
             long executionTime = endTime - startTime;
             _logger.info("合同段 " + contractId + " wbs节点树 数量计算 执行时间:" + executionTime + " ms");
@@ -1482,6 +1490,37 @@ public class UserServiceImpl extends BaseServiceImpl<UserMapper, User> implement
         }
     }
 
+    public void recursiveGetParentNodes(List<WbsTreeContractLazyVO> result, List<Long> lowestNodeParentIds, Map<Long, List<WbsTreeContractLazyVO>> nodeMap) {
+        if (lowestNodeParentIds == null || lowestNodeParentIds.isEmpty()) {
+            return;
+        }
+        Map<Long, Long> parentIdGroup = lowestNodeParentIds.stream()
+                .collect(Collectors.groupingByConcurrent(Function.identity(), Collectors.counting()));
+
+        List<WbsTreeContractLazyVO> collectedNodes = parentIdGroup.entrySet().stream()
+                .flatMap(entry -> {
+                    List<WbsTreeContractLazyVO> nodes = nodeMap.get(entry.getKey());
+                    if (nodes == null || nodes.isEmpty()) {
+                        return Stream.empty();
+                    }
+                    if (entry.getValue() > 1L) {
+                        nodes = nodes.stream().limit(1)
+                                .flatMap(node -> Collections.nCopies(entry.getValue().intValue(), node).stream())
+                                .collect(Collectors.toList());
+                    }
+                    return nodes.stream();
+                })
+                .collect(Collectors.toList());
+        List<Long> collect = collectedNodes.stream()
+                .map(WbsTreeContractLazyVO::getParentId).filter(Objects::nonNull).distinct()
+                .collect(Collectors.toList());
+        if (!collect.isEmpty()) {
+            result.addAll(collectedNodes);
+            this.recursiveGetParentNodes(result, collect, nodeMap);
+        }
+    }
+
+
     /**
      * 转换VO
      *
@@ -1493,7 +1532,7 @@ public class UserServiceImpl extends BaseServiceImpl<UserMapper, User> implement
         nodeVO.setId(wbsTreeContractLazyVO.getId());
         nodeVO.setParentId(wbsTreeContractLazyVO.getParentId());
         nodeVO.setPKeyId(wbsTreeContractLazyVO.getPKeyId());
-        nodeVO.setStatus(cn.hutool.core.util.ObjectUtil.isNotEmpty(wbsTreeContractLazyVO.getColorStatus()) ? wbsTreeContractLazyVO.getColorStatus() : 1);
+        nodeVO.setStatus(wbsTreeContractLazyVO.getColorStatus() != null ? wbsTreeContractLazyVO.getColorStatus() : 1);
         return nodeVO;
     }
 
@@ -1517,7 +1556,7 @@ public class UserServiceImpl extends BaseServiceImpl<UserMapper, User> implement
         for (WbsTreeContractLazyVO vo : list) {
             if (vo.getHasChildren().equals(0)) {
                 WbsTreeContractLazyVO lowestNodeVO = lowestNodesMap.getOrDefault(vo.getPKeyId(), null);
-                if (lowestNodeVO != null && cn.hutool.core.util.ObjectUtil.isNotEmpty(lowestNodeVO.getColorStatus())) {
+                if (lowestNodeVO != null && lowestNodeVO.getColorStatus() != null) {
                     //最底层颜色初始化
                     vo.setColorStatus(lowestNodeVO.getColorStatus());
                 }