瀏覽代碼

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

yangyj 1 年之前
父節點
當前提交
4d090d647b

+ 1 - 2
blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/vo/TaskDetailVO.java

@@ -13,8 +13,7 @@ import java.util.Map;
 public class TaskDetailVO implements Serializable {
 
     @ApiModelProperty(value = "流程信息")
-    private List<Map<String, String>> taskProcessInfo;
-    //private Map<String, List<Map<String, String>>> taskProcessInfo;
+    private List<Map<String, Object>> taskProcessInfo;
 
     @ApiModelProperty(value = "中间的业务数据列表信息")
     private Object taskCenterDataInfo;

+ 3 - 0
blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/vo/TaskPageVO.java

@@ -48,4 +48,7 @@ public class TaskPageVO implements Serializable {
     @ApiModelProperty(value = "计量数据类型")
     private Integer meterType;
 
+    @ApiModelProperty(value = "预设流程id")
+    private Long fixedFlowId;
+
 }

+ 107 - 47
blade-service/blade-meter/src/main/java/org/springblade/meter/controller/TaskController.java

@@ -512,18 +512,9 @@ public class TaskController extends BladeController {
             List<FixedFlowLink> fixedFlowLinks = jdbcTemplate.query("SELECT * FROM u_fixed_flow_link WHERE is_deleted = 0 AND fixed_flow_id = ?", new Object[]{approvalDTO.getFixedFlowId()}, new BeanPropertyRowMapper<>(FixedFlowLink.class));
             if (fixedFlowLinks.size() > 0) {
                 List<Long> userIds = fixedFlowLinks.stream().map(FixedFlowLink::getFixedFlowLinkUser).collect(Collectors.toList());
-                String resultString = StringUtils.join(userIds, ",");
-                /*检查签字证书信息*/
-                if (ObjectUtil.isNotEmpty(resultString)) {
-                    R<Object> objectR = archiveFileTaskClient.checkTaskUserCertificateInfo(resultString);
-                    if (objectR.isSuccess()) {
-                        approvalDTO.setTaskUserIds(resultString);
-                    } else {
-                        throw new ServiceException("预设流程任务人没有签字证书信息");
-                    }
-                }
+                approvalDTO.setTaskUserIds(StringUtils.join(userIds, ","));
 
-                /*首先根据分支分组顺序排序*/
+                /*分支分组顺序排序*/
                 Map<String, List<FixedFlowLink>> collect = fixedFlowLinks.stream().collect(Collectors.groupingBy(obj -> obj.getFixedFlowBranchSort() + "@@@" + obj.getFixedFlowLinkType()));
                 sortedMap = new TreeMap<>((key1, key2) -> {
                     int branchSort1 = extractBranchSort(key1);
@@ -537,6 +528,10 @@ public class TaskController extends BladeController {
         if (ObjectUtil.isEmpty(approvalDTO.getTaskUserIds())) {
             throw new ServiceException("未获取到任务人信息");
         }
+        R<Object> objectR = archiveFileTaskClient.checkTaskUserCertificateInfo(approvalDTO.getTaskUserIds());
+        if (!objectR.isSuccess()) {
+            throw new ServiceException("选择的任务人没有签字证书信息,请联系管理员");
+        }
 
         /*主任务*/
         Long processInstanceId = SnowFlakeUtil.getId();
@@ -565,7 +560,7 @@ public class TaskController extends BladeController {
 
         task.setType(1);
         task.setApprovalType(5); //计量
-        task.setFixedFlowId(0L);
+        task.setFixedFlowId(ObjectUtil.isNotEmpty(approvalDTO.getFixedFlowId()) ? Long.parseLong(approvalDTO.getFixedFlowId()) : 0L);
         task.setStatus(1); //待审批
         task.setIsDeleted(0);
         taskClient.saveTask(task);
@@ -1063,6 +1058,7 @@ public class TaskController extends BladeController {
                     vo.setMeterType(task.getMeterTaskType());
                     vo.setTaskDesc(task.getTaskContent());
                     vo.setTaskReportUserName(nameMap.get(Long.parseLong(task.getReportUser())));
+                    vo.setFixedFlowId(ObjectUtil.isNotEmpty(task.getFixedFlowId()) ? task.getFixedFlowId().equals(0L) ? null : task.getFixedFlowId() : null);
                     List<TaskParallel> taskParallelList = finalTaskParallelGroupMap.get(task.getProcessInstanceId());
                     if (taskParallelList != null && taskParallelList.size() > 0) {
                         List<String> names = taskParallelList.stream().map(TaskParallel::getTaskUserName).collect(Collectors.toList());
@@ -1118,44 +1114,95 @@ public class TaskController extends BladeController {
             throw new ServiceException("任务id、用户信息不能为空");
         }
         TaskDetailVO vo = new TaskDetailVO();
-        Task task = jdbcTemplate.query("SELECT * FROM u_task WHERE id = " + id, new BeanPropertyRowMapper<>(Task.class)).stream().findAny().orElse(null);
+        Task task = jdbcTemplate.query("SELECT * FROM u_task WHERE id = ?", new Object[]{id}, new BeanPropertyRowMapper<>(Task.class)).stream().findAny().orElse(null);
         if (task != null) {
+
+            List<Map<String, Object>> taskProcessInfo = new LinkedList<>();
+
             /*左侧任务流程信息*/
-            List<TaskParallel> taskParallels = jdbcTemplate.query("select process_instance_id,task_user,task_user_name,e_visa_status,e_visa_content,status,sort,update_time from u_task_parallel where process_instance_id = " + task.getProcessInstanceId() + " order by sort", new BeanPropertyRowMapper<>(TaskParallel.class));
-            List<Map<String, String>> taskProcessInfo = new LinkedList<>();
+            List<TaskParallel> taskParallels = jdbcTemplate.query("SELECT process_instance_id,task_user,task_user_name,e_visa_status,e_visa_content,status,sort,update_time FROM u_task_parallel WHERE process_instance_id = ? ORDER BY sort", new Object[]{task.getProcessInstanceId()}, new BeanPropertyRowMapper<>(TaskParallel.class));
 
             /*上报人*/
             SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
-            Map<String, String> taskUserOne = new LinkedHashMap<>();
+            Map<String, Object> taskUserOne = new LinkedHashMap<>();
             taskUserOne.put("name", task.getReportUserName());
             taskUserOne.put("date", sdf.format(task.getCreateTime()));
             taskUserOne.put("status", "2");
             taskUserOne.put("flowValue", "上报");
-            taskUserOne.put("sort", "0");
             taskProcessInfo.add(0, taskUserOne);
 
-            /*流程人*/
-            for (int i = 0; i < taskParallels.size(); i++) {
-                TaskParallel taskParallel = taskParallels.get(i);
-                Map<String, String> taskUserOther = new LinkedHashMap<>();
-                taskUserOther.put("name", taskParallel.getTaskUserName());
-                if (taskParallel.getStatus().equals(2) || taskParallel.getStatus().equals(3)) {
-                    taskUserOther.put("date", sdf.format(taskParallel.getUpdateTime()));
-                }
-                taskUserOther.put("status", taskParallel.getStatus().toString());
-                if (i == taskParallels.size() - 1) {
-                    taskUserOther.put("flowValue", (taskParallel.getStatus().equals(2) ? "同意" : taskParallel.getStatus().equals(1) ? "待审批" : "已废除") + "</br></br>结束流程");
-                } else {
-                    taskUserOther.put("flowValue", taskParallel.getStatus().equals(2) ? "同意" : taskParallel.getStatus().equals(1) ? "待审批" : "已废除");
+            /*预设流程(平行、顺序审批)*/
+            if (ObjectUtil.isNotEmpty(task.getFixedFlowId()) && !task.getFixedFlowId().equals(0L)) {
+                List<FixedFlowLink> query = jdbcTemplate.query("SELECT * FROM u_fixed_flow_link WHERE fixed_flow_id = ?", new Object[]{task.getFixedFlowId()}, new BeanPropertyRowMapper<>(FixedFlowLink.class));
+                Map<String, List<FixedFlowLink>> group = query.stream()
+                        .collect(Collectors.groupingBy(obj -> obj.getFixedFlowLink() + "@@@" + obj.getFixedFlowLinkType(),
+                                LinkedHashMap::new,
+                                Collectors.toList()));
+
+                for (Map.Entry<String, List<FixedFlowLink>> stringListEntry : group.entrySet()) {
+                    Map<String, Object> m = new LinkedHashMap<>();
+                    m.put("taskBranchName", stringListEntry.getKey().split("@@@")[0]);
+                    m.put("taskBranchType", stringListEntry.getKey().split("@@@")[1]);
+
+                    List<FixedFlowLink> value = stringListEntry.getValue();
+                    if (stringListEntry.getKey().split("@@@")[1].equals("1")) {
+                        value.sort(Comparator.comparingInt(FixedFlowLink::getFixedFlowLinkSort));
+                    }
+                    List<Long> userIds = value.stream().map(FixedFlowLink::getFixedFlowLinkUser).collect(Collectors.toList());
+
+                    List<Map<String, String>> userList = new LinkedList<>();
+                    for (int i = 0; i < taskParallels.size(); i++) {
+                        TaskParallel taskParallel = taskParallels.get(i);
+                        if (userIds.contains(Long.parseLong(taskParallel.getTaskUser()))) {
+                            Map<String, String> taskUserOther = new LinkedHashMap<>();
+                            taskUserOther.put("name", taskParallel.getTaskUserName());
+                            if (taskParallel.getStatus().equals(2) || taskParallel.getStatus().equals(3)) {
+                                taskUserOther.put("date", sdf.format(taskParallel.getUpdateTime()));
+                            }
+                            taskUserOther.put("status", taskParallel.getStatus().toString());
+                            if (i == taskParallels.size() - 1) {
+                                taskUserOther.put("flowValue", (taskParallel.getStatus().equals(2) ? "同意" : taskParallel.getStatus().equals(1) ? "待审批" : "已废除") + "</br></br>结束流程");
+                            } else {
+                                taskUserOther.put("flowValue", taskParallel.getStatus().equals(2) ? "同意" : taskParallel.getStatus().equals(1) ? "待审批" : "已废除");
+                            }
+                            userList.add(taskUserOther);
+                        }
+                    }
+                    m.put("userList", userList);
+
+                    String var = "1";
+                    List<String> statusList = userList.stream()
+                            .map(user -> user.get("status"))
+                            .filter(Objects::nonNull)
+                            .collect(Collectors.toList());
+                    if (statusList.stream().allMatch("2"::equals)) {
+                        var = "2";
+                    }
+                    m.put("taskBranchStatus", var);
+
+                    taskProcessInfo.add(m);
                 }
-                taskUserOther.put("sort", taskParallel.getSort().toString());
-                taskProcessInfo.add(taskUserOther);
-            }
-            vo.setTaskProcessInfo(taskProcessInfo);
+                vo.setTaskProcessInfo(taskProcessInfo);
 
-            /*Map<String, List<Map<String, String>>> groupedBySort = taskProcessInfo.stream().collect(Collectors.groupingBy(obj_1 -> obj_1.get("sort")));
-            groupedBySort.values().forEach(group -> group.sort(Comparator.comparing(obj_2 -> obj_2.get("sort"))));
-            vo.setTaskProcessInfo(groupedBySort);*/
+                /*非预设流程(默认顺序审批)*/
+            } else if (ObjectUtil.isEmpty(task.getFixedFlowId()) || task.getFixedFlowId().equals(0L)) {
+                for (int i = 0; i < taskParallels.size(); i++) {
+                    TaskParallel taskParallel = taskParallels.get(i);
+                    Map<String, Object> taskUserOther = new LinkedHashMap<>();
+                    taskUserOther.put("name", taskParallel.getTaskUserName());
+                    if (taskParallel.getStatus().equals(2) || taskParallel.getStatus().equals(3)) {
+                        taskUserOther.put("date", sdf.format(taskParallel.getUpdateTime()));
+                    }
+                    taskUserOther.put("status", taskParallel.getStatus().toString());
+                    if (i == taskParallels.size() - 1) {
+                        taskUserOther.put("flowValue", (taskParallel.getStatus().equals(2) ? "同意" : taskParallel.getStatus().equals(1) ? "待审批" : "已废除") + "</br></br>结束流程");
+                    } else {
+                        taskUserOther.put("flowValue", taskParallel.getStatus().equals(2) ? "同意" : taskParallel.getStatus().equals(1) ? "待审批" : "已废除");
+                    }
+                    taskProcessInfo.add(taskUserOther);
+                }
+                vo.setTaskProcessInfo(taskProcessInfo);
+            }
 
             /*中间业务taskVO复制数据(只有待审批、已审批任务才能查看到具体的taskVO复制数据,因为废除任务时taskVO被删除,但是单条驳回时有记录单条数据的历史信息,所以通过的任务还是能查看到)*/
             if (ObjectUtil.isNotEmpty(task.getFormDataId()) && Arrays.asList(1, 2).contains(task.getStatus())) {
@@ -2221,9 +2268,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 +2284,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 +2293,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;
     }