Browse Source

对接任务流程查看

chenr 6 months ago
parent
commit
4c78a61496

+ 119 - 4
blade-service/blade-meter/src/main/java/org/springblade/meter/controller/APIController.java

@@ -7,9 +7,12 @@ import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.AllArgsConstructor;
 import org.apache.commons.lang.StringUtils;
+import org.springblade.business.entity.FixedFlowLink;
 import org.springblade.business.entity.Task;
+import org.springblade.business.entity.TaskParallel;
 import org.springblade.common.utils.SnowFlakeUtil;
 import org.springblade.core.log.exception.ServiceException;
+import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.secure.utils.SecureUtil;
 import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.utils.ObjectUtil;
@@ -26,13 +29,11 @@ import org.springblade.meter.vo.ApiTaskPageVo;
 import org.springframework.jdbc.core.BeanPropertyRowMapper;
 import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.jdbc.core.SingleColumnRowMapper;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
 import java.math.BigDecimal;
 import java.math.RoundingMode;
+import java.text.SimpleDateFormat;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -187,4 +188,118 @@ public class APIController {
         page.setTotal(totalCount);
         return R.data(page);
     }
+    @GetMapping("/task/getTaskProcessInfo")
+    @ApiOperationSupport(order = 2)
+    @ApiOperation(value = "获取任务流程", notes = "taskId")
+    public List<Map<String, Object>> getTaskProcessInfo(Long taskId){
+        Task task = jdbcTemplate.query("SELECT * FROM u_task WHERE id = ?", new Object[]{taskId}, new BeanPropertyRowMapper<>(Task.class)).stream().findAny().orElse(null);
+        if(task!=null){
+            List<Map<String, Object>> taskProcessInfo = new LinkedList<>();
+            /*左侧任务流程信息*/
+            List<TaskParallel> taskParallels = jdbcTemplate.query("SELECT * FROM u_task_parallel WHERE process_instance_id = ? ORDER BY sort", new Object[]{task.getProcessInstanceId()}, new BeanPropertyRowMapper<>(TaskParallel.class));
+            //排名第一就是第一人
+            if (taskParallels.size() == 0) {
+                throw new ServiceException("未获取到任务流程信息");
+            }
+            /*上报人*/
+            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+            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", "上报");
+            taskProcessInfo.add(0, taskUserOne);
+
+            //判断当前用户所属流程,如果为审计流程则类型1显示Excel,如果是后面流程则类型2显示PDF,没有PDF则类型3
+            Integer currentUserFlow = null;
+            List<Integer> auditFlow = new ArrayList<>();
+            /*预设流程(平行、顺序审批)*/
+            if (ObjectUtil.isNotEmpty(task.getFixedFlowId()) && !task.getFixedFlowId().equals(0L)) {
+                List<FixedFlowLink> query = jdbcTemplate.query("SELECT * FROM u_fixed_flow_link WHERE fixed_flow_id = ? order by fixed_flow_branch_sort ", new Object[]{task.getFixedFlowId()}, new BeanPropertyRowMapper<>(FixedFlowLink.class));
+                //查看流程中是否存在审计流程
+                for (FixedFlowLink link : query) {
+//                    if (StringUtils.isNotBlank(link.getFixedFlowLink()) && link.getFixedFlowLink().contains("审计")) {
+                    if (link.getFlowTaskType() == 2) {
+                        auditFlow.add(link.getFixedFlowBranchSort());
+                    }
+                }
+                //校验当前用户在第几流程
+                //Map<Long, Integer> collect = query.stream().collect(Collectors.toMap(l -> l.getFixedFlowLinkUser(), l -> l.getFixedFlowBranchSort()));
+                //Integer sort = collect.get(AuthUtil.getUserId());
+                for (int i = 0; i < query.size(); i++) {
+                    FixedFlowLink flowLink= query.get(i);
+                    TaskParallel taskParallel = taskParallels.get(i);
+                    if(flowLink.getFixedFlowLinkUser().equals(AuthUtil.getUserId()) &&taskParallel.getStatus()==1 ){
+                        // 为空则代表是上报人,直接显示当前结果
+                        currentUserFlow = flowLink.getFixedFlowBranchSort();
+                        break;
+                    }
+                }
+
+                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<String> userIds = value.stream().map(fen -> fen.getFixedFlowLinkUser()+"-"+fen.getFixedFlowBranchSort()).collect(Collectors.toList());
+
+                    List<Map<String, String>> userList = new LinkedList<>();
+                    for (int i = 0; i < taskParallels.size(); i++) {
+                        TaskParallel taskParallel = taskParallels.get(i);
+                        String userO = taskParallel.getTaskUser()+"-"+taskParallel.getSort();
+                        if (userIds.contains(userO)) {
+                            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.getCreateTime()));
+                            }
+                            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);
+                }
+                    return  taskProcessInfo;
+
+                /*非预设流程(默认顺序审批)*/
+            } 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);
+                }
+                return  taskProcessInfo;
+            }
+        }
+        return null;
+    }
 }