瀏覽代碼

平行签最终审批人bug

Signed-off-by: liuyc <56808083@qq.com>
liuyc 1 年之前
父節點
當前提交
79b0941486

+ 23 - 10
blade-service/blade-meter/src/main/java/org/springblade/meter/controller/TaskController.java

@@ -2221,9 +2221,12 @@ public class TaskController extends BladeController {
     }
 
     private boolean checkTheTaskPersonSort(List<TaskParallel> taskParallels) {
-        //未完成审批人信息
-        List<String> name = new ArrayList<>();
-        //是否为最后一个审批人
+        List<TaskParallel> taskParallelList = BeanUtil.copyProperties(taskParallels, TaskParallel.class);
+
+        /*未完成审批人名称*/
+        List<String> uncompletedName = new ArrayList<>();
+
+        /*最终审批人*/
         boolean isCurrentUserLastApprover = false;
 
         /*平行签审批,首先排除相同sort,只判断自己的顺序*/
@@ -2234,6 +2237,7 @@ public class TaskController extends BladeController {
         Integer currentSort = current.getSort();
         taskParallels.removeIf(f -> f.getSort().equals(currentSort) && !f.getTaskUser().equals(SecureUtil.getUserId().toString()));
 
+        /*解析*/
         for (TaskParallel parallel : taskParallels) {
             if (parallel.getTaskUser().equals(SecureUtil.getUserId().toString())) {
                 if (parallel.getStatus().equals(2)) {
@@ -2242,18 +2246,27 @@ public class TaskController extends BladeController {
                 break;
             }
             if (parallel.getStatus() != 2) {
-                name.add(parallel.getTaskUserName());
+                uncompletedName.add(parallel.getTaskUserName());
             }
         }
-        if (name.size() > 0) {
-            throw new ServiceException("当前任务还有【" + StringUtils.join(name, "、") + "】未完成审批,请您稍后再试");
+        if (uncompletedName.size() > 0) {
+            throw new ServiceException("当前任务还有【" + StringUtils.join(uncompletedName, "、") + "】未完成审批,请您稍后再试");
         }
 
-        TaskParallel taskParallel = taskParallels.get(taskParallels.size() - 1);
-        if (taskParallel.getTaskUser().equals(SecureUtil.getUserId().toString())) {
-            isCurrentUserLastApprover = true;
+        /*判断平行签情况:最后一个人如果为平行签人,那么判断是否还有同sort人员的审批状态*/
+        TaskParallel taskParallel_1 = taskParallelList.get(taskParallelList.size() - 1);
+        if (taskParallel_1.getTaskUser().equals(SecureUtil.getUserId().toString())) {
+            /*其他人是否已完成,都完成的情况下才视为最终审批人*/
+            List<TaskParallel> collect = taskParallelList.stream()
+                    .filter(f -> f.getSort().equals(taskParallel_1.getSort())
+                            && !f.getTaskUser().equals(SecureUtil.getUserId().toString()))
+                    .collect(Collectors.toList());
+            /*如果还有待审批(status=1)的,那么非最终审批人;只有全部是已审批(status=2)才视为最终审批人*/
+            List<TaskParallel> collect1 = collect.stream().filter(f -> f.getStatus().equals(1)).collect(Collectors.toList());
+            if (collect1.size() == 0) {
+                isCurrentUserLastApprover = true;
+            }
         }
-
         return isCurrentUserLastApprover;
     }