diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/controller/WorkCenterController.java b/laws-modules/src/main/java/com/jero/modules/activiti/controller/WorkCenterController.java index 01e02231..96bb9587 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/controller/WorkCenterController.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/controller/WorkCenterController.java @@ -125,9 +125,8 @@ public class WorkCenterController { @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize, HttpServletRequest req) { QueryWrapper queryWrapper = getProcessAllQueryWrapper(processAll, true); - queryWrapper.like(StrUtil.isNotBlank(processAll.getCreateUserName()),"CONCAT(u.realname, '(', u.username, ')')", processAll.getCreateUserName()); Page page = new Page<>(pageNo, pageSize); - IPage sentList = processAllService.getAllList(page, queryWrapper, req); + IPage sentList = processAllService.getAllList(page, queryWrapper, req, processAll); return Result.OK(sentList); } diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/mapper/ProcessAllMapper.java b/laws-modules/src/main/java/com/jero/modules/activiti/mapper/ProcessAllMapper.java index 924c86cd..c165980f 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/mapper/ProcessAllMapper.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/mapper/ProcessAllMapper.java @@ -20,7 +20,7 @@ public interface ProcessAllMapper extends BaseMapper { IPage getSentList(Page page, @Param(Constants.WRAPPER) QueryWrapper queryWrapper, @Param("column") String column, @Param("order") String order); - IPage getAllList(Page page, @Param(Constants.WRAPPER) QueryWrapper queryWrapper, @Param("column") String column, @Param("order") String order); + IPage getAllList(Page page, @Param(Constants.WRAPPER) QueryWrapper queryWrapper, @Param("column") String column, @Param("order") String order, @Param("pa") ProcessAll processAll); int physicalDeleteByProjectId(@Param("tableName") String tableName, @Param("projectId") String projectId); diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/mapper/xml/ProcessAllMapper.xml b/laws-modules/src/main/java/com/jero/modules/activiti/mapper/xml/ProcessAllMapper.xml index e5f4ccf0..8f043e69 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/mapper/xml/ProcessAllMapper.xml +++ b/laws-modules/src/main/java/com/jero/modules/activiti/mapper/xml/ProcessAllMapper.xml @@ -98,22 +98,24 @@ \ No newline at end of file diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/service/ProcessAllService.java b/laws-modules/src/main/java/com/jero/modules/activiti/service/ProcessAllService.java index ea725521..07e5a177 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/service/ProcessAllService.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/service/ProcessAllService.java @@ -161,48 +161,68 @@ public class ProcessAllService extends ServiceImpl return sentList; } - public IPage getAllList(Page page, QueryWrapper queryWrapper, HttpServletRequest req) { + public IPage getAllList(Page page, QueryWrapper queryWrapper, HttpServletRequest req, ProcessAll processAll) { + queryWrapper.like(StrUtil.isNotBlank(processAll.getCreateUserName()),"CONCAT(u.realname, '(', u.username, ')')", processAll.getCreateUserName()); String column = req.getParameter("column"); String order = req.getParameter("order"); - IPage allList = processAllMapper.getAllList(page, queryWrapper, column, order); + IPage allList = processAllMapper.getAllList(page, queryWrapper, column, order, processAll); List records = allList.getRecords(); - if (records.isEmpty()){ + + if (records.isEmpty()) { return allList; } - List incompleteCollect = records.stream().filter(item -> ProcessStatusEnum.INCOMPLETE.getValue().equals(item.getPrcStatus())).map(ProcessAll::getProcessInstanceId).collect(Collectors.toList()); - List incompleteRecordList = new ArrayList<>(); - if (!incompleteCollect.isEmpty()) { - QueryWrapper wrapper = new QueryWrapper<>(); - wrapper.select("process_instance_id","group_concat(distinct user_id) as user_id"); - wrapper.lambda().in(ProcessApprovalRecord::getProcessInstanceId,incompleteCollect) - .eq(ProcessApprovalRecord::getFinishFlag,FinishFlagEnum.INCOMPLETE.getValue()) - .groupBy(ProcessApprovalRecord::getProcessInstanceId); - incompleteRecordList = approvalRecordService.list(wrapper); - } - Map incompleteUserMap = CollStreamUtil.toMap(incompleteRecordList, ProcessApprovalRecord::getProcessInstanceId, ProcessApprovalRecord::getUserId); - List withdrawnCollect = records.stream().filter(item -> ProcessStatusEnum.WITHDRAWN.getValue().equals(item.getPrcStatus())).map(ProcessAll::getProcessInstanceId).collect(Collectors.toList()); - List withdrawnRecordList = new ArrayList<>(); - if (!withdrawnCollect.isEmpty()){ - QueryWrapper wrapper1 = new QueryWrapper<>(); - wrapper1.select("process_instance_id","group_concat(distinct user_id) as user_id"); - wrapper1.lambda().in(ProcessApprovalRecord::getProcessInstanceId,withdrawnCollect) - .eq(ProcessApprovalRecord::getFinishFlag,FinishFlagEnum.WITHDRAWN.getValue()) - .groupBy(ProcessApprovalRecord::getProcessInstanceId); - withdrawnRecordList = approvalRecordService.list(wrapper1); - } - Map withdrawnUserMap = CollStreamUtil.toMap(withdrawnRecordList, ProcessApprovalRecord::getProcessInstanceId, ProcessApprovalRecord::getUserId); + // 分别收集 INCOMPLETE 和 WITHDRAWN 状态的实例ID + Map> statusCollect = records.parallelStream() + .filter(item -> item.getPrcStatus() != null) + .collect(Collectors.groupingBy(ProcessAll::getPrcStatus, + Collectors.mapping(ProcessAll::getProcessInstanceId, Collectors.toList()))); - for (ProcessAll record : records) { + // 获取不完整的审批记录 + List incompleteRecordList = fetchApprovalRecords( + statusCollect.getOrDefault(ProcessStatusEnum.INCOMPLETE.getValue(), Collections.emptyList()), + FinishFlagEnum.INCOMPLETE.getValue()); + + // 获取撤回的审批记录 + List withdrawnRecordList = fetchApprovalRecords( + statusCollect.getOrDefault(ProcessStatusEnum.WITHDRAWN.getValue(), Collections.emptyList()), + FinishFlagEnum.WITHDRAWN.getValue()); + + // 将不完整和撤回的审批记录映射到ProcessInstanceId -> UserId + Map incompleteUserMap = toUserMap(incompleteRecordList); + Map withdrawnUserMap = toUserMap(withdrawnRecordList); + + // 更新记录的 HandleUserId + records.parallelStream().forEach(record -> { if (ProcessStatusEnum.INCOMPLETE.getValue().equals(record.getPrcStatus())) { record.setHandleUserId(incompleteUserMap.get(record.getProcessInstanceId())); - } - if (ProcessStatusEnum.WITHDRAWN.getValue().equals(record.getPrcStatus())) { + } else if (ProcessStatusEnum.WITHDRAWN.getValue().equals(record.getPrcStatus())) { record.setHandleUserId(withdrawnUserMap.get(record.getProcessInstanceId())); } - } + }); + return allList; } + + private List fetchApprovalRecords(List processInstanceIds, Integer finishFlag) { + if (processInstanceIds.isEmpty()) { + return Collections.emptyList(); + } + + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.select("process_instance_id", "group_concat(distinct user_id) as user_id"); + wrapper.lambda().in(ProcessApprovalRecord::getProcessInstanceId, processInstanceIds) + .eq(ProcessApprovalRecord::getFinishFlag, finishFlag) + .groupBy(ProcessApprovalRecord::getProcessInstanceId); + + return approvalRecordService.list(wrapper); + } + + private Map toUserMap(List recordList) { + return recordList.parallelStream() + .collect(Collectors.toMap(ProcessApprovalRecord::getProcessInstanceId, ProcessApprovalRecord::getUserId)); + } + @Transactional(rollbackFor = Exception.class) public void forcedWithdrawal(String processInstanceId) { //获得流程总表