Browse Source

优化查询审核任务接口

buzhanyi 2 years ago
parent
commit
ceebab1c98

+ 135 - 35
application-webadmin/src/main/java/com/ankaibei/workFlow/webadmin/ankaibei/controller/CostInfoController.java

@@ -50,6 +50,7 @@ import org.springframework.web.bind.annotation.RestController;
 
 import java.util.ArrayList;
 import java.util.Date;
+import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
@@ -165,7 +166,6 @@ public class CostInfoController {
     @PostMapping("/listRuntimeTask")
     public ResMsg listRuntimeTask(
             @RequestBody ListRuntimeTaskRequestVo listRuntimeTaskRequestVo) {
-        Date queryStartTime = new Date();
         String username = TokenData.takeFromRequest().getLoginName();
         MyPageData<Task> pageData = flowApiService.getTaskListByUserName(
                 username, listRuntimeTaskRequestVo);
@@ -208,9 +208,6 @@ public class CostInfoController {
                 flowTaskVoListAd.add(taskVo);
             }
         }
-        Date queryEndTime = new Date();
-        System.err.println("本次查询结束时间:" + queryEndTime);
-        System.err.println("本次查询耗时+++++:" + (queryEndTime.getTime() - queryStartTime.getTime()));
         return ResMsg.newInstance(CodeEnum.OK, MyPageUtil.makeResponseData(flowTaskVoListAd, pageData.getTotalCount()));
     }
 
@@ -516,6 +513,9 @@ public class CostInfoController {
         if (pageNum == 1) {
             for (int i = 0; i < 10; i++) {
                 flowTaskVoListByQueryTypeRsg.add(flowTaskVoListByQueryType.get(i));
+                if (i == flowTaskVoListByQueryType.size() - 1) {
+                    break;
+                }
             }
         } else {
             for (int i = (pageNum - 1) * 10; i < pageNum * 10 - 1; i++) {
@@ -530,6 +530,87 @@ public class CostInfoController {
         Set<String> processInstanceIds = new HashSet<>();
         Date getIdBefore = new Date();
         System.err.println("获取ID数据前:" + getIdBefore.getTime());
+        //查询的任务分类是新建项目时,需要筛选新建项目的表单数据
+        if (queryType.equals("新建项目")) {
+            Map<String, Object> byTaskAdd = flowTaskAssignmentByProjectAdd(flowTaskVoListByQueryTypeRsg, queryType);
+            projectIds = (Set<Integer>) byTaskAdd.get("projectIds");
+            processInstanceIds = (Set<String>) byTaskAdd.get("processInstanceIds");
+            flowTaskVoListByQueryTypeRsg = (List<FlowTaskVo>) byTaskAdd.get("flowTaskVoListByQueryTypeRsg");
+        }
+        //查询的任务分类是新建项目任务时,需要筛选新建任务的表单数据
+        if (queryType.equals("新建任务")) {
+            Map<String, Object> byTaskAdd = flowTaskAssignmentByTaskAdd(flowTaskVoListByQueryTypeRsg, queryType);
+            projectIds = (Set<Integer>) byTaskAdd.get("projectIds");
+            processInstanceIds = (Set<String>) byTaskAdd.get("processInstanceIds");
+            flowTaskVoListByQueryTypeRsg = (List<FlowTaskVo>) byTaskAdd.get("flowTaskVoListByQueryTypeRsg");
+        }
+        //查询的任务分类是人员工时时,需要筛选人员工时的表单数据
+        if (queryType.equals("人员工时")) {
+            Map<String, Object> byTaskAdd = flowTaskAssignmentByManhour(flowTaskVoListByQueryTypeRsg, queryType);
+            projectIds = (Set<Integer>) byTaskAdd.get("projectIds");
+            processInstanceIds = (Set<String>) byTaskAdd.get("processInstanceIds");
+            flowTaskVoListByQueryTypeRsg = (List<FlowTaskVo>) byTaskAdd.get("flowTaskVoListByQueryTypeRsg");
+        }
+        //查询的任务分类是费用报销时,需要筛选费用报销的表单数据
+        if (queryType.equals("费用报销")) {
+            Map<String, Object> byTaskAdd = flowTaskAssignmentByExpense(flowTaskVoListByQueryTypeRsg, queryType);
+            projectIds = (Set<Integer>) byTaskAdd.get("projectIds");
+            processInstanceIds = (Set<String>) byTaskAdd.get("processInstanceIds");
+            flowTaskVoListByQueryTypeRsg = (List<FlowTaskVo>) byTaskAdd.get("flowTaskVoListByQueryTypeRsg");
+        }
+
+        Date getIdAfter = new Date();
+        System.err.println("获取ID数据后:" + getIdAfter.getTime());
+        System.err.println("获取ID数据耗时+++++:" + (getIdAfter.getTime() - getIdBefore.getTime()));
+        //查询到任务信息中包含的全部项目和表单数据
+        List<ProjectInfoEntity> projectInfos = projectInfoMapper.findAllById(projectIds);
+        List<FlowWorkOrder> instanceIdIn = flowWorkOrderService.findAllByProcessInstanceIdIn(processInstanceIds);
+
+        for (FlowTaskVo taskVo : flowTaskVoListByQueryTypeRsg) {
+            for (ProjectInfoEntity info : projectInfos) {
+                if (info.getProjectId().equals(taskVo.getProjectId())) {
+                    taskVo.setProjectName(info.getProjectName() == null ? "" : info.getProjectName());
+                    break;
+                }
+            }
+            for (FlowWorkOrder order : instanceIdIn) {
+                if (order.getProcessInstanceId().equals(taskVo.getProcessInstanceId())) {
+                    taskVo.setProcessInstanceInitiator(order.getSubmitUsername());
+                    taskVo.setFlowTaskStatus(order.getFlowStatus() + "");
+                    break;
+                }
+            }
+        }
+        return ResMsg.newInstance(CodeEnum.OK, MyPageUtil.makeResponseData(flowTaskVoListByQueryTypeRsg, Long.valueOf(flowTaskVoListByQueryType.size())));
+    }
+
+    //查询的任务分类是新建项目时,需要筛选项目流程记录的表单数据
+    private Map<String, Object> flowTaskAssignmentByProjectAdd(List<FlowTaskVo> flowTaskVoListByQueryTypeRsg, String queryType) {
+        Set<Integer> projectIds = new HashSet<>();
+        Set<String> processInstanceIds = new HashSet<>();
+        for (FlowTaskVo taskVo : flowTaskVoListByQueryTypeRsg) {
+            Integer projectId = null;
+            JSONObject jsonData = viewUserTaskDatasource(taskVo.getProcessInstanceId(), taskVo.getTaskId()).getData();
+            Map<String, Object> masterAndOneToOne = (Map<String, Object>) jsonData.get("masterAndOneToOne");
+            if (masterAndOneToOne.get("project_id") != null) {
+                projectId = Integer.parseInt(masterAndOneToOne.get("project_id").toString());
+                taskVo.setProjectId(projectId);
+            }
+            taskVo.setCostType(queryType);
+            projectIds.add(projectId);
+            processInstanceIds.add(taskVo.getProcessInstanceId());
+        }
+        Map<String, Object> map = new HashMap<>();
+        map.put("projectIds", projectIds);
+        map.put("processInstanceIds", processInstanceIds);
+        map.put("flowTaskVoListByQueryTypeRsg", flowTaskVoListByQueryTypeRsg);
+        return map;
+    }
+
+    //查询的任务分类是新建项目任务时,需要筛选新建任务的表单数据
+    private Map<String, Object> flowTaskAssignmentByTaskAdd(List<FlowTaskVo> flowTaskVoListByQueryTypeRsg, String queryType) {
+        Set<Integer> projectIds = new HashSet<>();
+        Set<String> processInstanceIds = new HashSet<>();
         for (FlowTaskVo taskVo : flowTaskVoListByQueryTypeRsg) {
             Integer projectId = null;
             JSONObject jsonData = viewUserTaskDatasource(taskVo.getProcessInstanceId(), taskVo.getTaskId()).getData();
@@ -542,6 +623,25 @@ public class CostInfoController {
             if (masterAndOneToOne.get("task_id") != null) {
                 taskVo.setApplyDataId(Integer.parseInt(masterAndOneToOne.get("task_id").toString()));
             }
+            taskVo.setCostType(queryType);
+            projectIds.add(projectId);
+            processInstanceIds.add(taskVo.getProcessInstanceId());
+        }
+        Map<String, Object> map = new HashMap<>();
+        map.put("projectIds", projectIds);
+        map.put("processInstanceIds", processInstanceIds);
+        map.put("flowTaskVoListByQueryTypeRsg", flowTaskVoListByQueryTypeRsg);
+        return map;
+    }
+
+    //查询的任务分类是新建项目任务时,需要筛选新建任务的表单数据
+    private Map<String, Object> flowTaskAssignmentByManhour(List<FlowTaskVo> flowTaskVoListByQueryTypeRsg, String queryType) {
+        Set<Integer> projectIds = new HashSet<>();
+        Set<String> processInstanceIds = new HashSet<>();
+        for (FlowTaskVo taskVo : flowTaskVoListByQueryTypeRsg) {
+            Integer projectId = null;
+            JSONObject jsonData = viewUserTaskDatasource(taskVo.getProcessInstanceId(), taskVo.getTaskId()).getData();
+            Map<String, Object> masterAndOneToOne = (Map<String, Object>) jsonData.get("masterAndOneToOne");
             //人员工时分类中,获取的项目id和工时流程表中保存的工时id
             if (masterAndOneToOne.get("project_name") != null) {
                 projectId = Integer.parseInt(masterAndOneToOne.get("project_name").toString());
@@ -550,6 +650,30 @@ public class CostInfoController {
             if (masterAndOneToOne.get("man_id") != null) {
                 taskVo.setApplyDataId(Integer.parseInt(masterAndOneToOne.get("man_id").toString()));
             }
+            taskVo.setCostType(queryType);
+            projectIds.add(projectId);
+            processInstanceIds.add(taskVo.getProcessInstanceId());
+        }
+        Map<String, Object> map = new HashMap<>();
+        map.put("projectIds", projectIds);
+        map.put("processInstanceIds", processInstanceIds);
+        map.put("flowTaskVoListByQueryTypeRsg", flowTaskVoListByQueryTypeRsg);
+        return map;
+    }
+
+    //查询的任务分类是费用报销时,需要筛选费用报销的表单数据
+    private Map<String, Object> flowTaskAssignmentByExpense(List<FlowTaskVo> flowTaskVoListByQueryTypeRsg, String queryType) {
+        Set<Integer> projectIds = new HashSet<>();
+        Set<String> processInstanceIds = new HashSet<>();
+        for (FlowTaskVo taskVo : flowTaskVoListByQueryTypeRsg) {
+            Integer projectId = null;
+            JSONObject jsonData = viewUserTaskDatasource(taskVo.getProcessInstanceId(), taskVo.getTaskId()).getData();
+            Map<String, Object> masterAndOneToOne = (Map<String, Object>) jsonData.get("masterAndOneToOne");
+            //获取的项目id
+            if (masterAndOneToOne.get("project_name") != null) {
+                projectId = Integer.parseInt(masterAndOneToOne.get("project_name").toString());
+                taskVo.setProjectId(projectId);
+            }
             //费用报销分类中,获取费用申请记录流程表中的【申请费用,总价,住宿天数】
             if (masterAndOneToOne.get("application_fee") != null) {
                 taskVo.setApplicationFee(masterAndOneToOne.get("application_fee").toString());
@@ -563,46 +687,22 @@ public class CostInfoController {
             //费用报销分类中,每个审批项在各自记录表中的主键id
             if (masterAndOneToOne.get("id") != null) {
                 taskVo.setApplyDataId(Integer.parseInt(masterAndOneToOne.get("id").toString()));
-            }
-            if (masterAndOneToOne.get("communication_id") != null) {
+            } else if (masterAndOneToOne.get("communication_id") != null) {
                 taskVo.setApplyDataId(Integer.parseInt(masterAndOneToOne.get("communication_id").toString()));
-            }
-            if (masterAndOneToOne.get("purchase_id") != null) {
+            } else if (masterAndOneToOne.get("purchase_id") != null) {
                 taskVo.setApplyDataId(Integer.parseInt(masterAndOneToOne.get("purchase_id").toString()));
             }
             //费用报销分类中,每个审批项的费用类别
             if (masterAndOneToOne.get("cost_type") != null) {
                 taskVo.setCostType(masterAndOneToOne.get("cost_type").toString());
             }
-            taskVo.setCostType(queryType);
             projectIds.add(projectId);
             processInstanceIds.add(taskVo.getProcessInstanceId());
         }
-        Date getIdAfter = new Date();
-        System.err.println("获取ID数据后:" + getIdAfter.getTime());
-        System.err.println("获取ID数据耗时+++++:" + (getIdAfter.getTime() - getIdBefore.getTime()));
-
-        //查询到任务信息中包含的全部项目和表单数据
-        List<ProjectInfoEntity> projectInfos = projectInfoMapper.findAllById(projectIds);
-        List<FlowWorkOrder> instanceIdIn = flowWorkOrderService.findAllByProcessInstanceIdIn(processInstanceIds);
-
-        for (FlowTaskVo taskVo : flowTaskVoListByQueryTypeRsg) {
-            for (ProjectInfoEntity info : projectInfos) {
-                if (info.getProjectId().equals(taskVo.getProjectId())) {
-                    taskVo.setProjectName(info.getProjectName() == null ? "" : info.getProjectName());
-                    break;
-                }
-            }
-            for (FlowWorkOrder order : instanceIdIn) {
-                if (order.getProcessInstanceId().equals(taskVo.getProcessInstanceId())) {
-                    taskVo.setProcessInstanceInitiator(order.getSubmitUsername());
-                    taskVo.setFlowTaskStatus(order.getFlowStatus() + "");
-                    break;
-                }
-            }
-        }
-
-        return ResMsg.newInstance(CodeEnum.OK, MyPageUtil.makeResponseData(flowTaskVoListByQueryTypeRsg, Long.valueOf(flowTaskVoListByQueryType.size())));
+        Map<String, Object> map = new HashMap<>();
+        map.put("projectIds", projectIds);
+        map.put("processInstanceIds", processInstanceIds);
+        map.put("flowTaskVoListByQueryTypeRsg", flowTaskVoListByQueryTypeRsg);
+        return map;
     }
-
 }

+ 3 - 0
application-webadmin/src/main/java/com/ankaibei/workFlow/webadmin/ankaibei/service/impl/TaskInfoServiceImpl.java

@@ -79,6 +79,9 @@ public class TaskInfoServiceImpl implements TaskInfoService {
         if (taskInfoMapper.countByTargetTaskEqualsAndIsDeleteEquals(taskInfoEntity.getTargetTask(), "1") > 1) {
             return new ResMsg(CodeEnum.TASK_ALREADY_EXISTS);
         }
+        if (taskInfoEntity.getStartTime() == null || taskInfoEntity.getEndTime() == null) {
+            return new ResMsg(CodeEnum.PARAM_IS_NULL, "请录入任务计划的开始时间和结束时间");
+        }
         if (taskParticipant.size() < 1) {
             //(1 已分配 2未分配 3已延期)
             taskInfoEntity.setTaskStatus("2");