浏览代码

改进后的实验

buzhanyi 2 年之前
父节点
当前提交
1299e4c3b2

+ 161 - 6
application-webadmin/src/main/java/com/ankaibei/workFlow/webadmin/ankaibei/controller/CostInfoController.java

@@ -10,6 +10,9 @@ import com.ankaibei.workFlow.common.core.object.ResponseResult;
 import com.ankaibei.workFlow.common.core.object.TokenData;
 import com.ankaibei.workFlow.common.core.util.MyPageUtil;
 import com.ankaibei.workFlow.common.flow.dao.ProjectInfoFlowMapper;
+import com.ankaibei.workFlow.common.flow.model.FlowCategory;
+import com.ankaibei.workFlow.common.flow.model.FlowEntry;
+import com.ankaibei.workFlow.common.flow.model.FlowWorkOrder;
 import com.ankaibei.workFlow.common.flow.service.FlowApiService;
 import com.ankaibei.workFlow.common.flow.service.FlowCategoryService;
 import com.ankaibei.workFlow.common.flow.service.FlowEntryService;
@@ -28,7 +31,9 @@ import com.ankaibei.workFlow.common.online.model.constant.RelationType;
 import com.ankaibei.workFlow.common.online.service.OnlineOperationService;
 import com.ankaibei.workFlow.common.online.util.OnlineOperationHelper;
 import com.ankaibei.workFlow.webadmin.ankaibei.api.CostInFoApi;
+import com.ankaibei.workFlow.webadmin.ankaibei.entity.ProjectInfoEntity;
 import com.ankaibei.workFlow.webadmin.ankaibei.enums.CodeEnum;
+import com.ankaibei.workFlow.webadmin.ankaibei.mapper.ProjectInfoMapper;
 import com.ankaibei.workFlow.webadmin.ankaibei.utils.FlowTaskStart;
 import com.ankaibei.workFlow.webadmin.ankaibei.vo.CostInfoVo;
 import com.ankaibei.workFlow.webadmin.ankaibei.vo.ResMsg;
@@ -44,8 +49,11 @@ import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
 import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 import java.util.stream.Collectors;
 
 /**
@@ -69,6 +77,8 @@ public class CostInfoController {
     @Autowired
     private ProjectInfoFlowMapper projectInfoFlowMapper;
     @Autowired
+    private ProjectInfoMapper projectInfoMapper;
+    @Autowired
     private FlowOperationHelper flowOperationHelper;
     @Autowired
     private OnlineOperationHelper onlineOperationHelper;
@@ -155,12 +165,14 @@ 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);
         List<FlowTaskVo> flowTaskVoList = flowApiService.convertToFlowTaskList(pageData.getDataList());
         //加上流程分类名称和关联的表单信息中的项目名称
         List<FlowTaskVo> flowTaskVoListAd = new ArrayList<>();
+
         for (FlowTaskVo taskVo : flowTaskVoList) {
             String categoryName = categoryService.getById(flowEntryService.getById(taskVo.getEntryId()).getCategoryId()).getName();
             taskVo.setCategoryName(categoryName);
@@ -170,11 +182,13 @@ public class CostInfoController {
             if (masterAndOneToOne.get("project_id") != null) {
                 Integer projectId = Integer.parseInt(masterAndOneToOne.get("project_id").toString());
                 taskVo.setProjectId(projectId);
-                taskVo.setProjectName(projectInfoFlowMapper.getById(projectId).getProjectName());
+                String projectName = projectInfoFlowMapper.getById(projectId).getProjectName();
+                taskVo.setProjectName(projectName == null ? "" : projectName);
             } else if (masterAndOneToOne.get("project_name") != null) {
                 Integer projectId = Integer.parseInt(masterAndOneToOne.get("project_name").toString());
                 taskVo.setProjectId(projectId);
-                taskVo.setProjectName(projectInfoFlowMapper.getById(projectId).getProjectName());
+                String projectName = projectInfoFlowMapper.getById(projectId).getProjectName();
+                taskVo.setProjectName(projectName == null ? "" : projectName);
             }
             if (masterAndOneToOne.get("total_money") != null) {
                 taskVo.setApplicationFee(masterAndOneToOne.get("total_money").toString());
@@ -194,6 +208,9 @@ 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()));
     }
 
@@ -232,7 +249,8 @@ public class CostInfoController {
                 Map<String, Object> masterAndOneToOne = (Map<String, Object>) jsonData.get("masterAndOneToOne");
                 if (masterAndOneToOne.get("project_name") != null) {
                     Integer projectId = Integer.parseInt(masterAndOneToOne.get("project_name").toString());
-                    taskVo.setProjectName(projectInfoFlowMapper.getById(projectId).getProjectName());
+                    String projectName = projectInfoFlowMapper.getById(projectId).getProjectName();
+                    taskVo.setProjectName(projectName == null ? "" : projectName);
                 }
                 if (masterAndOneToOne.get("application_fee") != null) {
                     taskVo.setApplicationFee(masterAndOneToOne.get("application_fee").toString());
@@ -306,8 +324,10 @@ public class CostInfoController {
                 if (masterAndOneToOne.get("project_name") != null) {
                     Integer projectId = Integer.parseInt(masterAndOneToOne.get("project_name").toString());
                     taskVo.setProjectId(projectId);
-                    taskVo.setProjectName(projectInfoFlowMapper.getById(projectId).getProjectName());
+                    String projectName = projectInfoFlowMapper.getById(projectId).getProjectName();
+                    taskVo.setProjectName(projectName == null ? "" : projectName);
                 }
+
                 if (masterAndOneToOne.get("man_id") != null) {
                     taskVo.setApplyDataId(Integer.parseInt(masterAndOneToOne.get("man_id").toString()));
                 }
@@ -360,7 +380,8 @@ public class CostInfoController {
                 if (masterAndOneToOne.get("project_id") != null) {
                     Integer projectId = Integer.parseInt(masterAndOneToOne.get("project_id").toString());
                     taskVo.setProjectId(projectId);
-                    taskVo.setProjectName(projectInfoFlowMapper.getById(projectId).getProjectName());
+                    String projectName = projectInfoFlowMapper.getById(projectId).getProjectName();
+                    taskVo.setProjectName(projectName == null ? "" : projectName);
                 }
                 taskVo.setCostType(categoryName);
                 taskVo.setFlowTaskStatus(flowWorkOrderService.getFlowWorkOrderByProcessInstanceId(taskVo.getProcessInstanceId()).getFlowStatus() + "");
@@ -411,7 +432,8 @@ public class CostInfoController {
                 if (masterAndOneToOne.get("project_id") != null) {
                     Integer projectId = Integer.parseInt(masterAndOneToOne.get("project_id").toString());
                     taskVo.setProjectId(projectId);
-                    taskVo.setProjectName(projectInfoFlowMapper.getById(projectId).getProjectName());
+                    String projectName = projectInfoFlowMapper.getById(projectId).getProjectName();
+                    taskVo.setProjectName(projectName == null ? "" : projectName);
                 }
                 if (masterAndOneToOne.get("task_id") != null) {
                     taskVo.setApplyDataId(Integer.parseInt(masterAndOneToOne.get("task_id").toString()));
@@ -529,4 +551,137 @@ public class CostInfoController {
         return ResMsg.newInstance(CodeEnum.OK, MyPageUtil.makeResponseData(flowTaskVoListByExpenseRsg, Long.valueOf(flowTaskVoListByExpense.size())));
     }
 
+
+    //============================================================================================================================================================
+    //============================================================================================================================================================
+
+    /**
+     * 返回当前用户待办的任务列表。(操作项目信息分类)
+     * param processDefinitionName 流程定义名 (模糊查询)。
+     * param taskName              任务名称 (模糊查询)。
+     * param pageParam             分页对象。
+     *
+     * @return 返回当前用户待办的任务列表。如果指定流程标识,则仅返回该流程的待办任务列表。
+     */
+    @DisableDataFilter
+    @PostMapping("/listRuntimeTaskByProjectAddd")
+    public ResMsg listRuntimeTaskByProjectAddd(
+            @RequestBody ListRuntimeTaskRequestVo listRuntimeTaskRequestVo) {
+        Date queryStartTime = new Date();
+
+        String username = TokenData.takeFromRequest().getLoginName();
+        //MyPageData<Task> pageData = flowApiService.getTaskListByUserName(
+        //        username, listRuntimeTaskRequestVo);
+        //List<FlowTaskVo> flowTaskVoList = flowApiService.convertToFlowTaskList(pageData.getDataList());
+        //---查询到所有的任务量
+        final Integer pageNum = listRuntimeTaskRequestVo.getPageNum();
+        listRuntimeTaskRequestVo.setPageNum(1);
+        listRuntimeTaskRequestVo.setPageSize(flowWorkOrderService.getCountByCondition(""));
+        MyPageData<Task> pageDataTwo = flowApiService.getTaskListByUserName(username, listRuntimeTaskRequestVo);
+        Date changeBe = new Date();
+        System.err.println("转换为流程对象前+++++:" + changeBe.getTime());
+        List<FlowTaskVo> flowTaskVoList = flowApiService.convertToFlowTaskList(pageDataTwo.getDataList());
+        Date changeAf = new Date();
+        System.err.println("转换为流程对象前+++++:" + changeAf.getTime());
+        System.err.println("转换为流程对象耗时+++++:" + (changeAf.getTime() - changeBe.getTime()));
+        String queryType = "新建项目";
+        //---从所有的任务里取出一个分类的任务
+        //先拿到任务所在的全部流程
+        List<FlowTaskVo> flowTaskVoListByProjectAdd = new ArrayList<>();
+        Set<Long> entryIdList = new HashSet<>();
+        for (FlowTaskVo taskVo : flowTaskVoList) {
+            entryIdList.add(taskVo.getEntryId());
+        }
+        List<FlowEntry> entryList = flowEntryService.getInList(entryIdList);
+        //获取流程所在的分类
+        Set<Long> categoryIdList = new HashSet<>();
+        for (FlowEntry entry : entryList) {
+            categoryIdList.add(entry.getCategoryId());
+        }
+        List<FlowCategory> flowCategoryList = categoryService.getInList(categoryIdList);
+        //给流程任务对象的流程分类字段赋值
+        for (FlowTaskVo taskVo : flowTaskVoList) {
+            Long entryId = taskVo.getEntryId();
+            for (FlowEntry entry : entryList) {
+                if (entry.getEntryId().equals(entryId)) {
+                    for (FlowCategory category : flowCategoryList) {
+                        if (category.getCategoryId().equals(entry.getCategoryId())) {
+                            if (category.getName().equals(queryType)) {
+                                taskVo.setCostType(category.getName());
+                                flowTaskVoListByProjectAdd.add(taskVo);
+                            }
+                        }
+                    }
+                }
+            }
+        }
+        return PackageAgainn(flowTaskVoListByProjectAdd, pageNum, queryType, queryStartTime);
+    }
+
+    private ResMsg PackageAgainn(List<FlowTaskVo> flowTaskVoListByExpense, Integer pageNum, String queryType, Date queryStartTime) {
+        //重新进行包装分页
+        if (flowTaskVoListByExpense.size() < 1) {
+            return ResMsg.newInstance(CodeEnum.OK, MyPageUtil.makeResponseData(flowTaskVoListByExpense, Long.valueOf(flowTaskVoListByExpense.size())));
+        }
+        List<FlowTaskVo> flowTaskVoListByExpenseRsg = new ArrayList<>();
+        if (pageNum == 1) {
+            for (int i = 0; i < 10; i++) {
+                flowTaskVoListByExpenseRsg.add(flowTaskVoListByExpense.get(i));
+            }
+        } else {
+            for (int i = (pageNum - 1) * 10; i < pageNum * 10 - 1; i++) {
+                flowTaskVoListByExpenseRsg.add(flowTaskVoListByExpense.get(i));
+                if (i == flowTaskVoListByExpense.size() - 1) {
+                    break;
+                }
+            }
+        }
+        //获取任务中的全部项目id和流程实例id
+        Set<Integer> projectIds = new HashSet<>();
+        Set<String> processInstanceIds = new HashSet<>();
+        Date getIdBefore = new Date();
+        System.err.println("获取ID数据前:" + getIdBefore.getTime());
+        for (FlowTaskVo taskVo : flowTaskVoListByExpenseRsg) {
+            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());
+        }
+        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 : flowTaskVoListByExpenseRsg) {
+            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.setFlowTaskStatus(order.getFlowStatus() + "");
+                    break;
+                }
+            }
+        }
+
+        System.err.println("本次查询开始时间:" + queryStartTime);
+        Date queryEndTime = new Date();
+        System.err.println("本次查询结束时间:" + queryEndTime);
+        System.err.println("本次查询耗时+++++:" + (queryEndTime.getTime() - queryStartTime.getTime()));
+
+        return ResMsg.newInstance(CodeEnum.OK, MyPageUtil.makeResponseData(flowTaskVoListByExpenseRsg, Long.valueOf(flowTaskVoListByExpense.size())));
+    }
+
 }

+ 8 - 0
common/common-flow/src/main/java/com/ankaibei/workFlow/common/flow/dao/FlowWorkOrderMapper.java

@@ -28,4 +28,12 @@ public interface FlowWorkOrderMapper extends BaseDaoMapper<FlowWorkOrder> {
      */
     List<FlowWorkOrder> getFlowWorkOrderList(
             @Param("flowWorkOrderFilter") FlowWorkOrder flowWorkOrderFilter, @Param("orderBy") String orderBy);
+
+    /**
+     * 根据流程实例的id获取表单数据
+     *
+     * @param instanceIds 要进行查询的流程实例id集合
+     * @return 查询结果
+     */
+    List<FlowWorkOrder> findAllByProcessInstanceIdIn(@Param("instanceIds") Set<String> instanceIds);
 }

+ 11 - 0
common/common-flow/src/main/java/com/ankaibei/workFlow/common/flow/dao/mapper/FlowWorkOrderMapper.xml

@@ -66,4 +66,15 @@
             ORDER BY ${orderBy}
         </if>
     </select>
+
+    <select id="findAllByProcessInstanceIdIn" resultMap="BaseResultMap">
+        SELECT *
+        FROM zz_flow_work_order
+        where process_instance_id in
+        <!-- for循环, item:循环后的值, index:循环下标列式for循环的 i ,collection:参数名-->
+        <!-- open="(" close=")" separator="," 就是把循环的值组成 (item1,item2,item3)的格式-->
+        <foreach item="item" index="index" collection="instanceIds" open="(" close=")" separator=",">
+            #{instanceIds}
+        </foreach>
+    </select>
 </mapper>

+ 8 - 0
common/common-flow/src/main/java/com/ankaibei/workFlow/common/flow/service/FlowWorkOrderService.java

@@ -156,4 +156,12 @@ public interface FlowWorkOrderService extends IBaseService<FlowWorkOrder, Long>
      * @return 停止流程实例的结果。
      */
     CallResult removeDraft(FlowWorkOrder flowWorkOrder);
+
+    /**
+     * 根据流程实例的id获取表单数据
+     *
+     * @param instanceIds 要进行查询的流程实例id集合
+     * @return 查询结果
+     */
+    List<FlowWorkOrder> findAllByProcessInstanceIdIn(Set<String> instanceIds);
 }

+ 18 - 0
common/common-flow/src/main/java/com/ankaibei/workFlow/common/flow/service/impl/FlowWorkOrderServiceImpl.java

@@ -28,6 +28,7 @@ import com.ankaibei.workFlow.common.flow.util.FlowCustomExtFactory;
 import com.ankaibei.workFlow.common.redis.util.CommonRedisUtil;
 import com.ankaibei.workFlow.common.sequence.wrapper.IdGeneratorWrapper;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.ibatis.annotations.Param;
 import org.flowable.engine.runtime.ProcessInstance;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -301,4 +302,21 @@ public class FlowWorkOrderServiceImpl extends BaseService<FlowWorkOrder, Long> i
         return commonRedisUtil.generateTransId(
                 rule.getPrefix(), rule.getPrecisionTo(), rule.getMiddle(), rule.getIdWidth());
     }
+
+    /**
+     * 根据流程实例的id获取表单数据
+     *
+     * @param instanceIds 要进行查询的流程实例id集合
+     * @return 查询结果
+     */
+    @Override
+    public List<FlowWorkOrder> findAllByProcessInstanceIdIn(Set<String> instanceIds) {
+        //List<String>list = new ArrayList<>(instanceIds);
+        //String[] instanceIdStr = new String[instanceIds.size()];
+        //for (int i = 0; i < list.size(); i++) {
+        //    instanceIdStr[i]=list.get(i);
+        //}
+        return flowWorkOrderMapper.findAllByProcessInstanceIdIn(instanceIds);
+    }
+
 }