ソースを参照

Merge branch 'test' into test-merge

# Conflicts:
#	blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/WbsTreeContractLazyVO.java
lvy 2 ヶ月 前
コミット
3b2a7350db

+ 1 - 0
blade-service/blade-business/src/main/java/org/springblade/business/controller/ArchiveFileController.java

@@ -421,6 +421,7 @@ public class ArchiveFileController extends BladeController {
     @ApiOperationSupport(order = 3)
     @ApiOperation("按文件日期排序")
     public R<Boolean> sortByFileTime(@RequestParam Long nodeId){
+
         return R.status(this.archiveFileService.sortByFileTime(nodeId));
     }
 

+ 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){

+ 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/WbsTreePrivateServiceImpl.java

@@ -143,7 +143,7 @@ public class WbsTreePrivateServiceImpl extends BaseServiceImpl<WbsTreePrivateMap
             //如果className,unitName不为空,则要判断该节点是否是最小节点
             if (ObjectUtil.isNotEmpty(wbsTreePrivate.getClassName()) && ObjectUtil.isNotEmpty(wbsTreePrivate.getUnitName())) {
                 QueryWrapper<WbsTreePrivate> wrapper = new QueryWrapper<>();
-                wrapper.eq("parent_id", wbsTreePrivate.getId()).eq("is_deleted", 0);
+                wrapper.eq("parent_id", wbsTreePrivate.getId()).eq("project_id",  wbsTreePrivate.getProjectId());
                 //查出当前节点所有子节点。如果子节点中没有节点,说明是最小节点
                 List<WbsTreePrivate> wbsTreePrivates = baseMapper.selectList(wrapper);
                 if (wbsTreePrivates.size() > 0) {

+ 57 - 4
blade-service/blade-user/src/main/java/org/springblade/system/user/bean/NodeVO.java

@@ -3,10 +3,7 @@ package org.springblade.system.user.bean;
 import cn.hutool.core.util.ObjectUtil;
 import lombok.Data;
 
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-import java.util.Queue;
+import java.util.*;
 import java.util.stream.Collectors;
 
 /**
@@ -154,6 +151,62 @@ public class NodeVO {
         node.setStatus(2);
     }
 
+    public static void calculateStatusToDFS1(List<NodeVO> nodeList, Map<Long, Integer> nodeColorStatusMap) {
+        NodeVO rootNode = findRootNode(nodeList);
+        if (rootNode != null) {
+            calculateNodeStatusToDFS1(rootNode, nodeColorStatusMap);
+            nodeColorStatusMap.put(rootNode.getPKeyId(), rootNode.getStatus());
+        }
+    }
+    public static void calculateNodeStatusToDFS1(NodeVO node, Map<Long, Integer> nodeColorStatusMap) {
+        //最底层节点直接返回
+        if (ObjectUtil.isEmpty(node.getChildren())) {
+            return;
+        }
+        //递归处理子节点
+        for (NodeVO child : node.getChildren()) {
+            calculateNodeStatusToDFS1(child, nodeColorStatusMap);
+            nodeColorStatusMap.put(child.getPKeyId(), child.getStatus());
+        }
+        //判断子级
+        Set<Integer> childStatusList = node.getChildren().stream().map(NodeVO::getStatus).collect(Collectors.toSet());
+        //如果子节点都是相同的状态,则父节点状态也为该状态
+        if (childStatusList.size() == 1) {
+            node.setStatus(childStatusList.iterator().next());
+            return;
+        }
+        //判断是否存在同时只存在1、3的情况
+        if (childStatusList.contains(1) && childStatusList.contains(3) && !childStatusList.contains(2)) {
+            node.setStatus(2);
+            return;
+        }
+        //判断是否存在同时只存在3、4的情况
+        if (childStatusList.contains(3) && childStatusList.contains(4) && !childStatusList.contains(1) && !childStatusList.contains(2)) {
+            node.setStatus(3);
+            return;
+        }
+        //判断是否存在只有1但不全是1的情况
+        if (childStatusList.contains(1) && !childStatusList.contains(2) && !childStatusList.contains(3) && !childStatusList.contains(4)) {
+            node.setStatus(2);
+            return;
+        }
+
+        //判断是否存在只有2但不全是2的情况
+        if (childStatusList.contains(2) && !childStatusList.contains(1) && !childStatusList.contains(3) && !childStatusList.contains(4)) {
+            node.setStatus(2);
+            return;
+        }
+
+        //判断是否存在只有3但不全是3的情况
+        if (childStatusList.contains(3) && !childStatusList.contains(1) && !childStatusList.contains(2) && !childStatusList.contains(4)) {
+            node.setStatus(3);
+            return;
+        }
+
+        //其他情况,父节点状态默认为2
+        node.setStatus(2);
+    }
+
     /**
      * BFS
      *

+ 57 - 15
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) {
@@ -1425,8 +1432,9 @@ public class UserServiceImpl extends BaseServiceImpl<UserMapper, User> implement
             long startTime = System.currentTimeMillis();
 
             /*重新计算,进行递归获取父节点计数统计*/
-            this.recursiveGetParentNodes(resultParentNodesTB, lowestNodeParentIdsTB, nodesAll);
-
+//            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,40 @@ 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());
+        if (collectedNodes.isEmpty()) {
+            return;
+        }
+        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 +1535,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 +1559,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());
                 }