浏览代码

自定义流程接口-转审BUG修复

wangliang 3 年之前
父节点
当前提交
7319757077

+ 26 - 12
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ActivitiServiceImpl.java

@@ -121,10 +121,11 @@ public class ActivitiServiceImpl implements ActivitiService {
         for (Map.Entry<String, CustomFlowVarDto> entry : agginessMap.entrySet()) {
             CustomFlowVarDto customFlowVarDto = gson.fromJson(gson.toJson(entry.getValue()), CustomFlowVarDto.class);
             if (Objects.nonNull(customFlowVarDto.getFlowTaskVar()) && customFlowVarDto.getFlowTaskVar().contains(DefaultInstanceConvertToMultiInstance.DEFAULT_ASSIGNEE_LIST)) {
+                Set<String> set = new LinkedHashSet(customFlowVarDto.getApproveIds());
                 if (customFlowVarDto.getMultipleUserApproveType() == CustomFlowMultipleUserApproveTypeEnum.SOME) {
-                    varMap.computeIfAbsent(customFlowVarDto.getFlowTaskVar(), s -> customFlowVarDto.getApproveIds().toString().replaceAll("\\[", "").replaceAll("\\]", "").trim());
+                    varMap.computeIfAbsent(customFlowVarDto.getFlowTaskVar(), s -> set.toString().replaceAll("\\[", "").replaceAll("\\]", "").trim());
                 } else {
-                    varMap.computeIfAbsent(customFlowVarDto.getFlowTaskVar(), s -> customFlowVarDto.getApproveIds());
+                    varMap.computeIfAbsent(customFlowVarDto.getFlowTaskVar(), s -> set);
                 }
             } else {
                 varMap.computeIfAbsent(customFlowVarDto.getFlowTaskVar(), s -> customFlowVarDto.getApproveIds().get(0));
@@ -535,10 +536,11 @@ public class ActivitiServiceImpl implements ActivitiService {
         if (Objects.nonNull(agginessMap.get(nextFlowTaskResult.getTaskKey()))) {
             CustomFlowVarDto customFlowVarDto = gson.fromJson(gson.toJson(agginessMap.get(nextFlowTaskResult.getTaskKey())), CustomFlowVarDto.class);
             if (Objects.nonNull(customFlowVarDto.getFlowTaskVar()) && customFlowVarDto.getFlowTaskVar().contains(DefaultInstanceConvertToMultiInstance.DEFAULT_ASSIGNEE_LIST)) {
+                Set<String> set = new LinkedHashSet(customFlowVarDto.getApproveIds());
                 if (customFlowVarDto.getMultipleUserApproveType() == CustomFlowMultipleUserApproveTypeEnum.SOME) {
-                    map.computeIfAbsent(customFlowVarDto.getFlowTaskVar(), s -> customFlowVarDto.getApproveIds().toString().replaceAll("\\[", "").replaceAll("\\]", "").trim());
+                    map.computeIfAbsent(customFlowVarDto.getFlowTaskVar(), s -> set.toString().replaceAll("\\[", "").replaceAll("\\]", "").trim());
                 } else {
-                    map.computeIfAbsent(customFlowVarDto.getFlowTaskVar(), s -> customFlowVarDto.getApproveIds());
+                    map.computeIfAbsent(customFlowVarDto.getFlowTaskVar(), s -> set);
                 }
             } else {
                 map.computeIfAbsent(customFlowVarDto.getFlowTaskVar(), v -> customFlowVarDto.getApproveIds().get(0));
@@ -837,8 +839,9 @@ public class ActivitiServiceImpl implements ActivitiService {
                             List<String> approveIds = customFlowVarAllDto.getApproveIds();
                             approveIds.remove(String.valueOf(sysUser.getId()));
                             approveIds.add(userId);
+                            Set<String> set = new LinkedHashSet(approveIds);
                             allAgginessMap.put(userTask.getId(), customFlowVarAllDto);
-                            tfFlowLog.setPendApproveId(approveIds.toString().replaceAll("\\[", "").replaceAll("\\]", ""));
+                            tfFlowLog.setPendApproveId(set.toString().replaceAll("\\[", "").replaceAll("\\]", ""));
                         }
                         tfFlowApprove.setAllAssignee(JacksonUtil.parseJson(allAgginessMap));
                     } else {
@@ -846,10 +849,12 @@ public class ActivitiServiceImpl implements ActivitiService {
                     }
                 }
             } else {
-                removeApproveUserId(customFlowVarDto, String.valueOf(sysUser.getId()), userId);
+                Set<String> set = removeApproveUserId(customFlowVarDto, String.valueOf(sysUser.getId()), userId);
+                tfFlowLog.setPendApproveId(set.toString().replaceAll("\\[", "").replaceAll("\\]", ""));
             }
         }
-        ApproveUserResult approveUserResult = sysUserService.findByIds(customFlowVarDto.getApproveIds().stream().map(x -> SystemConstant.convertIdToLong(x)).collect(Collectors.toList()));
+        Set<String> set = new LinkedHashSet(customFlowVarDto.getApproveIds());
+        ApproveUserResult approveUserResult = sysUserService.findByIds(set.stream().map(x -> SystemConstant.convertIdToLong(x)).collect(Collectors.toList()));
         customFlowVarDto.setApproveUserNames(approveUserResult.getPendApproveUsers());
         agginessMap.put(userTask.getId(), customFlowVarDto);
         tfFlowApprove.setTransferAssignee(JacksonUtil.parseJson(agginessMap));
@@ -860,7 +865,12 @@ public class ActivitiServiceImpl implements ActivitiService {
         tfFlowLog.setApproveUserApproveType(customFlowVarDto.getMultipleUserApproveType());
         tfFlowLogService.save(tfFlowLog);
 
-        taskService.setAssignee(taskId, userId);
+        if (!multiInstance) {
+            taskService.deleteCandidateUser(taskId, String.valueOf(sysUser.getId()));
+            taskService.addCandidateUser(taskId, userId);
+        } else {
+            taskService.setAssignee(taskId, userId);
+        }
         return true;
     }
 
@@ -871,10 +881,11 @@ public class ActivitiServiceImpl implements ActivitiService {
      * @param userId
      * @param exchangeUserId
      */
-    protected void removeApproveUserId(CustomFlowVarDto customFlowVarDto, String userId, String exchangeUserId) {
+    protected Set removeApproveUserId(CustomFlowVarDto customFlowVarDto, String userId, String exchangeUserId) {
         List<String> approveIds = customFlowVarDto.getApproveIds();
         approveIds.remove(userId);
         approveIds.add(exchangeUserId);
+        return new LinkedHashSet(approveIds);
     }
 
     /**
@@ -952,10 +963,12 @@ public class ActivitiServiceImpl implements ActivitiService {
                             default:
                                 break;
                         }
-                        ApproveUserResult approveUserResult = sysUserService.findByIds(approveUserIds.stream().map(x -> SystemConstant.convertIdToLong(x)).collect(Collectors.toList()));
+                        Set<String> set = new LinkedHashSet(approveUserIds);
+                        ApproveUserResult approveUserResult = sysUserService.findByIds(set.stream().map(x -> SystemConstant.convertIdToLong(x)).collect(Collectors.toList()));
                         ApproveUserResult approveUserResultCopyUser = null;
                         if (copyUserIds.size() > 0) {
-                            approveUserResultCopyUser = sysUserService.findByIds(copyUserIds.stream().map(x -> SystemConstant.convertIdToLong(x)).collect(Collectors.toList()));
+                            Set<String> copyUserSet = new LinkedHashSet(copyUserIds);
+                            approveUserResultCopyUser = sysUserService.findByIds(copyUserSet.stream().map(x -> SystemConstant.convertIdToLong(x)).collect(Collectors.toList()));
                         }
                         agginessMap.put(node.getTask().getFlowTaskId(), new CustomFlowVarDto(DefaultInstanceConvertToMultiInstance.DEFAULT_ASSIGNEE_LIST + i, approveUserIds, node.getTask().getProperty().getApproveUserType(), node.getTask().getProperty().getMultipleUserApproveType(), node.getTask().getProperty().getRejectType(), node.getTask().getProperty().getRejectResubmitType(), approveUserResult.getPendApproveUsers(), copyUserIds, Objects.nonNull(approveUserResultCopyUser) ? approveUserResultCopyUser.getPendApproveUsers() : null));
                         if (Objects.nonNull(customFlowPropertyDto.getRejectType()) && !Objects.equals(customFlowPropertyDto.getRejectType(), "")) {
@@ -1289,7 +1302,8 @@ public class ActivitiServiceImpl implements ActivitiService {
         }
         Map<String, CustomFlowVarDto> agginessMap = (Map<String, CustomFlowVarDto>) flowProcessVarMap.get(SystemConstant.AGGINESS_MAP);
         List<String> approveUserIds = new ArrayList(Arrays.asList(String.valueOf(approveId)));
-        ApproveUserResult approveUserResult = sysUserService.findByIds(approveUserIds.stream().map(x -> SystemConstant.convertIdToLong(x)).collect(Collectors.toList()));
+        Set<String> set = new LinkedHashSet(approveUserIds);
+        ApproveUserResult approveUserResult = sysUserService.findByIds(set.stream().map(x -> SystemConstant.convertIdToLong(x)).collect(Collectors.toList()));
         agginessMap.put(CustomFlowTypeEnum.USER_TASK.getId() + DefaultInstanceConvertToMultiInstance.DEFAULT_USER_TASK, new CustomFlowVarDto(SystemConstant.APPROVE_ID, approveUserIds, approveUserResult.getPendApproveUsers(), null, null));
         flowProcessVarMap.put(SystemConstant.AGGINESS_MAP, agginessMap);