|
@@ -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;
|
|
|
+ }
|
|
|
}
|