From 7c777b6f9f47ca57193b9e4196fa14fa184abe6c Mon Sep 17 00:00:00 2001 From: xiangpei <xiangpei@timesnew.cn> Date: 星期二, 11 二月 2025 14:01:19 +0800 Subject: [PATCH] 任务处理人bug --- business/src/main/java/com/ycl/service/impl/ProjectProcessServiceImpl.java | 308 ++++++++++++++++++++++++++++++--------------------- 1 files changed, 182 insertions(+), 126 deletions(-) diff --git a/business/src/main/java/com/ycl/service/impl/ProjectProcessServiceImpl.java b/business/src/main/java/com/ycl/service/impl/ProjectProcessServiceImpl.java index 68e9f43..16549dc 100644 --- a/business/src/main/java/com/ycl/service/impl/ProjectProcessServiceImpl.java +++ b/business/src/main/java/com/ycl/service/impl/ProjectProcessServiceImpl.java @@ -649,7 +649,8 @@ .active() .processInstanceId(processInsId) .includeProcessVariables() - .orderByTaskCreateTime().desc(); + .orderByTaskCreateTime() + .desc(); if (StringUtils.isNotBlank(taskName)) { taskQuery.processDefinitionNameLike(taskName); @@ -921,11 +922,11 @@ taskVO.setHandlerType(HandlerTypeEnum.USER); SysUser sysUser = sysUserService.selectUserById(Long.parseLong(identityLink.getUserId())); if (Objects.nonNull(sysUser)) { - handlerIds.add(sysUser.getUserId()); - handlerNames.add(sysUser.getNickName()); + taskVO.getHandlerId().add(sysUser.getUserId()); + taskVO.getHandlerName().add(sysUser.getNickName()); if (Objects.nonNull(sysUser.getDept())) { - handlerUnitIds.add(sysUser.getDept().getDeptId()); - handlerUnitNames.add(sysUser.getDept().getDeptName()); + taskVO.getHandlerUnitId().add(sysUser.getDept().getDeptId()); + taskVO.getHandlerUnitName().add(sysUser.getDept().getDeptName()); } } // 缁戝畾鐨勬槸瑙掕壊鎴栬�呴儴闂� @@ -937,16 +938,16 @@ // 閮ㄩ棬 SysDept dept = sysDeptService.selectDeptById(Long.parseLong(split[1])); if (Objects.nonNull(dept)) { - handlerUnitIds.add(dept.getDeptId()); - handlerUnitNames.add(dept.getDeptName()); + taskVO.getHandlerUnitId().add(dept.getDeptId()); + taskVO.getHandlerUnitName().add(dept.getDeptName()); } } } else { taskVO.setHandlerType(HandlerTypeEnum.ROLE); SysRole role = sysRoleService.selectRoleById(Long.parseLong(identityLink.getGroupId())); if (Objects.nonNull(role)) { - handlerUnitIds.add(Long.parseLong(identityLink.getGroupId())); - handlerUnitNames.add(role.getRoleName()); + taskVO.getHandlerUnitId().add(Long.parseLong(identityLink.getGroupId())); + taskVO.getHandlerUnitName().add(role.getRoleName()); } } } @@ -962,24 +963,36 @@ * @return */ private Long getTimelyTaskNum(String processInsId) { - // 鏌ュ嚭鏃堕棿姝e父鐨勪换鍔d - List<String> taskKeyList = new LambdaQueryChainWrapper<>(processCodingService.getBaseMapper()) - .select(ProcessCoding::getTaskDefKey) - .eq(ProcessCoding::getProcessInsId, processInsId) - .eq(ProcessCoding::getOvertimeStatus, ProcessOverTimeConstants.NORMAL) - .list() - .stream() - .map(ProcessCoding::getTaskDefKey) - .collect(Collectors.toList()); - if (CollectionUtils.isEmpty(taskKeyList)) { - return 0L; - } - // 鏌ュ嚭鎵�鏈夊凡瀹屾垚鐨勪换鍔� - return historyService.createHistoricTaskInstanceQuery() + // 鏌ュ嚭宸插畬鎴愮殑浠诲姟key + List<HistoricTaskInstance> hisTaskList = historyService.createHistoricTaskInstanceQuery() .processInstanceId(processInsId) .finished() - .caseDefinitionKeyIn(taskKeyList) - .count(); + .includeIdentityLinks() + .list(); + if (CollectionUtils.isEmpty(hisTaskList)) { + return 0L; + } + + List<String> hisTaskKeys = hisTaskList.stream().map(HistoricTaskInstance::getTaskDefinitionKey).distinct().collect(Collectors.toList()); + Map<String, HistoricTaskInstance> hisTaskMap = hisTaskList.stream().collect(Collectors.toMap(HistoricTaskInstance::getTaskDefinitionKey, his -> his)); + // 鏌ュ嚭鏃堕棿姝e父鐨勪换鍔ey + List<ProcessCoding> taskList = new LambdaQueryChainWrapper<>(processCodingService.getBaseMapper()) + .eq(ProcessCoding::getProcessInsId, processInsId) + .in(ProcessCoding::getTaskDefKey, hisTaskKeys) + .list(); + Map<String, ProcessCoding> codingMap = taskList.stream().collect(Collectors.toMap(ProcessCoding::getTaskDefKey, pro -> pro)); + List<HistoricTaskInstance> finishedTaskList = new ArrayList<>(); + // 鍒ゆ柇 + for (String key : hisTaskMap.keySet()) { + ProcessCoding processCoding = codingMap.get(key); + // 濡傛灉宸插畬鎴愮殑浠诲姟娌′粠鏁版嵁搴撴煡鎵惧嚭鏉ワ紝璇存槑璇ヤ换鍔℃病閰嶇疆璧嬬爜绛夋椂闂达紝鐩存帴璁剧疆涓烘寜鏃跺畬鎴� + if (Objects.isNull(processCoding)) { + finishedTaskList.add(hisTaskMap.get(key)); + } else if (ProcessOverTimeConstants.NORMAL.equals(processCoding.getOvertimeStatus()) || StringUtils.isBlank(processCoding.getOvertimeStatus())) { + finishedTaskList.add(hisTaskMap.get(key)); + } + } + return Long.valueOf(finishedTaskList.size()); } /** @@ -997,26 +1010,38 @@ int startNum = pageSize * (pageNum - 1); int endNum = startNum + pageSize; - // 鏌ュ嚭鏃堕棿姝e父鐨勪换鍔d - List<String> taskKeyList = new LambdaQueryChainWrapper<>(processCodingService.getBaseMapper()) - .select(ProcessCoding::getTaskDefKey) - .eq(ProcessCoding::getProcessInsId, processInsId) - .eq(ProcessCoding::getOvertimeStatus, ProcessOverTimeConstants.NORMAL) - .list() - .stream() - .map(ProcessCoding::getTaskDefKey) - .collect(Collectors.toList()); + // 鏌ュ嚭宸插畬鎴愮殑浠诲姟key + List<HistoricTaskInstance> hisTaskList = historyService.createHistoricTaskInstanceQuery() + .processInstanceId(processInsId) + .finished() + .taskNameLike(taskName) + .includeIdentityLinks() + .orderByTaskCreateTime() + .desc() + .list(); + if (CollectionUtils.isEmpty(hisTaskList)) { + result.total(0); + return new ArrayList<>(); + } + List<String> hisTaskKeys = hisTaskList.stream().map(HistoricTaskInstance::getTaskDefinitionKey).distinct().collect(Collectors.toList()); + Map<String, HistoricTaskInstance> hisTaskMap = hisTaskList.stream().collect(Collectors.toMap(HistoricTaskInstance::getTaskDefinitionKey, his -> his)); + // 鏌ュ嚭鏃堕棿姝e父鐨勪换鍔ey + List<ProcessCoding> taskList = new LambdaQueryChainWrapper<>(processCodingService.getBaseMapper()) + .eq(ProcessCoding::getProcessInsId, processInsId) + .in(ProcessCoding::getTaskDefKey, hisTaskKeys) + .list(); + Map<String, ProcessCoding> codingMap = taskList.stream().collect(Collectors.toMap(ProcessCoding::getTaskDefKey, pro -> pro)); List<HistoricTaskInstance> finishedTaskList = new ArrayList<>(); - if (! CollectionUtils.isEmpty(taskKeyList)) { - // 鏌ュ嚭鎵�鏈夊凡瀹屾垚鐨勪换鍔� - finishedTaskList = historyService.createHistoricTaskInstanceQuery() - .processInstanceId(processInsId) - .finished() - .taskNameLike(taskName) - .caseDefinitionKeyIn(taskKeyList) - .includeIdentityLinks() - .list(); + // 鍒ゆ柇 + for (String key : hisTaskMap.keySet()) { + ProcessCoding processCoding = codingMap.get(key); + // 濡傛灉宸插畬鎴愮殑浠诲姟娌′粠鏁版嵁搴撴煡鎵惧嚭鏉ワ紝璇存槑璇ヤ换鍔℃病閰嶇疆璧嬬爜绛夋椂闂达紝鐩存帴璁剧疆涓烘寜鏃跺畬鎴� + if (Objects.isNull(processCoding)) { + finishedTaskList.add(hisTaskMap.get(key)); + } else if (ProcessOverTimeConstants.NORMAL.equals(processCoding.getOvertimeStatus()) || StringUtils.isBlank(processCoding.getOvertimeStatus())) { + finishedTaskList.add(hisTaskMap.get(key)); + } } if (startNum >= finishedTaskList.size()) { @@ -1077,8 +1102,8 @@ long handlerUserId = Long.parseLong(hisTask.getAssignee()); SysUser handlerUser = sysUserService.selectUserById(handlerUserId); if (Objects.nonNull(handlerUser)) { - handlerIds.add(handlerUserId); - handlerNames.add(handlerUser.getNickName()); + vo.getHandlerId().add(handlerUserId); + vo.getHandlerName().add(handlerUser.getNickName()); vo.setActualHandlerUserId(hisTask.getAssignee()); vo.setActualHandlerUserName(handlerUser.getNickName()); } @@ -1101,23 +1126,31 @@ * @return */ private Long getOvertimeTaskNum(String processInsId) { - // 鏌ュ嚭鏃堕棿姝e父鐨勪换鍔d - List<String> taskKeyList = new LambdaQueryChainWrapper<>(processCodingService.getBaseMapper()) - .select(ProcessCoding::getTaskDefKey) - .eq(ProcessCoding::getProcessInsId, processInsId) - .eq(ProcessCoding::getOvertimeStatus, ProcessOverTimeConstants.OVERTIME) - .list() - .stream() - .map(ProcessCoding::getTaskDefKey) - .collect(Collectors.toList()); - if (CollectionUtils.isEmpty(taskKeyList)) { + // 鏌ュ嚭杩愯鍦ㄧ殑浠诲姟key + List<Task> taskList = taskService.createTaskQuery().processInstanceId(processInsId).list(); + + if (CollectionUtils.isEmpty(taskList)) { return 0L; } - // 鏌ュ嚭鎵�鏈夊凡瀹屾垚鐨勪换鍔� - return taskService.createTaskQuery() - .processInstanceId(processInsId) - .caseDefinitionKeyIn(taskKeyList) - .count(); + List<String> taskKeys = taskList.stream().map(Task::getTaskDefinitionKey).distinct().collect(Collectors.toList()); + Map<String, Task> taskMap = taskList.stream().collect(Collectors.toMap(Task::getTaskDefinitionKey, his -> his)); + // 鏌ュ嚭鏁版嵁搴撶殑浠诲姟key + List<ProcessCoding> databaseTaskList = new LambdaQueryChainWrapper<>(processCodingService.getBaseMapper()) + .eq(ProcessCoding::getProcessInsId, processInsId) + .in(ProcessCoding::getTaskDefKey, taskKeys) + .list(); + Map<String, ProcessCoding> codingMap = databaseTaskList.stream().collect(Collectors.toMap(ProcessCoding::getTaskDefKey, pro -> pro)); + List<Task> tList = new ArrayList<>(); + // 鍒ゆ柇 + for (String key : taskMap.keySet()) { + ProcessCoding processCoding = codingMap.get(key); + // 濡傛灉杩愯涓殑浠诲姟娌′粠鏁版嵁搴撴煡鎵惧嚭鏉ワ紝璇存槑璇ヤ换鍔℃病閰嶇疆璧嬬爜绛夋椂闂达紝涓嶇畻瓒呮椂 + if (Objects.nonNull(processCoding) && ProcessOverTimeConstants.OVERTIME.equals(processCoding.getOvertimeStatus())) { + tList.add(taskMap.get(key)); + } + } + + return Long.valueOf(taskList.size()); } /** @@ -1136,33 +1169,42 @@ int startNum = pageSize * (pageNum - 1); int endNum = startNum + pageSize; - // 鏌ュ嚭鍗冲皢瓒呮椂鐨勪换鍔� - List<String> taskKeyList = new LambdaQueryChainWrapper<>(processCodingService.getBaseMapper()) - .select(ProcessCoding::getTaskDefKey) + // 鏌ュ嚭杩愯鍦ㄧ殑浠诲姟key + List<Task> taskList = new ArrayList<>(12); + if (StringUtils.isNotBlank(taskName)) { + taskList = taskService.createTaskQuery().processInstanceId(processInsId).taskNameLike(taskName).orderByTaskCreateTime().desc().list(); + } else { + taskList = taskService.createTaskQuery().processInstanceId(processInsId).orderByTaskCreateTime().desc().list(); + } + if (CollectionUtils.isEmpty(taskList)) { + result.total(0); + return new ArrayList<>(); + } + List<String> taskKeys = taskList.stream().map(Task::getTaskDefinitionKey).distinct().collect(Collectors.toList()); + Map<String, Task> taskMap = taskList.stream().collect(Collectors.toMap(Task::getTaskDefinitionKey, his -> his)); + // 鏌ュ嚭鏁版嵁搴撶殑浠诲姟key + List<ProcessCoding> databaseTaskList = new LambdaQueryChainWrapper<>(processCodingService.getBaseMapper()) .eq(ProcessCoding::getProcessInsId, processInsId) - .eq(ProcessCoding::getOvertimeStatus, ProcessOverTimeConstants.OVERTIME) - .list() - .stream() - .map(ProcessCoding::getTaskDefKey) - .collect(Collectors.toList()); - - List<Task> taskList = new ArrayList<>(); - // 鏌ュ嚭鎵�鏈夋鍦ㄥ鐞�(杩愯鏃�)鐨勪换鍔� - if (! CollectionUtils.isEmpty(taskKeyList)) { - taskList = taskService.createTaskQuery() - .processInstanceId(processInsId) - .taskNameLike(taskName) - .caseDefinitionKeyIn(taskKeyList) - .list(); + .in(ProcessCoding::getTaskDefKey, taskKeys) + .list(); + Map<String, ProcessCoding> codingMap = databaseTaskList.stream().collect(Collectors.toMap(ProcessCoding::getTaskDefKey, pro -> pro)); + List<Task> tList = new ArrayList<>(); + // 鍒ゆ柇 + for (String key : taskMap.keySet()) { + ProcessCoding processCoding = codingMap.get(key); + // 濡傛灉杩愯涓殑浠诲姟娌′粠鏁版嵁搴撴煡鎵惧嚭鏉ワ紝璇存槑璇ヤ换鍔℃病閰嶇疆璧嬬爜绛夋椂闂达紝涓嶇畻瓒呮椂 + if (Objects.nonNull(processCoding) && ProcessOverTimeConstants.OVERTIME.equals(processCoding.getOvertimeStatus())) { + tList.add(taskMap.get(key)); + } } - if (startNum >= taskList.size()) { + if (startNum >= tList.size()) { // 濡傛灉璧峰绱㈠紩瓒呭嚭浜嗗垪琛ㄧ殑澶у皬锛岃繑鍥炰竴涓┖鍒楄〃 return new ArrayList<>(); } - result.total(taskList.size()); - int end = Math.min(endNum, taskList.size()); - List<Task> pageTaskList = taskList.subList(startNum, end); + result.total(tList.size()); + int end = Math.min(endNum, tList.size()); + List<Task> pageTaskList = tList.subList(startNum, end); List<String> taskDefs = pageTaskList.stream().map(Task::getTaskDefinitionKey).collect(Collectors.toList()); Map<String, Task> keyMap = pageTaskList.stream().collect(Collectors.toMap(Task::getTaskDefinitionKey, his -> his)); @@ -1187,23 +1229,29 @@ * @return */ private Long getWillOvertimeTaskNum(String processInsId) { - // 鏌ュ嚭鏃堕棿姝e父鐨勪换鍔d - List<String> taskKeyList = new LambdaQueryChainWrapper<>(processCodingService.getBaseMapper()) - .select(ProcessCoding::getTaskDefKey) - .eq(ProcessCoding::getProcessInsId, processInsId) - .eq(ProcessCoding::getOvertimeStatus, ProcessOverTimeConstants.WILLOVERTIME) - .list() - .stream() - .map(ProcessCoding::getTaskDefKey) - .collect(Collectors.toList()); - if (CollectionUtils.isEmpty(taskKeyList)) { + // 鏌ュ嚭杩愯鍦ㄧ殑浠诲姟key + List<Task> taskList = taskService.createTaskQuery().processInstanceId(processInsId).list(); + if (CollectionUtils.isEmpty(taskList)) { return 0L; } - // 鏌ュ嚭鎵�鏈夊凡瀹屾垚鐨勪换鍔� - return taskService.createTaskQuery() - .processInstanceId(processInsId) - .caseDefinitionKeyIn(taskKeyList) - .count(); + List<String> taskKeys = taskList.stream().map(Task::getTaskDefinitionKey).distinct().collect(Collectors.toList()); + Map<String, Task> taskMap = taskList.stream().collect(Collectors.toMap(Task::getTaskDefinitionKey, his -> his)); + // 鏌ュ嚭鏁版嵁搴撶殑浠诲姟key + List<ProcessCoding> databaseTaskList = new LambdaQueryChainWrapper<>(processCodingService.getBaseMapper()) + .eq(ProcessCoding::getProcessInsId, processInsId) + .in(ProcessCoding::getTaskDefKey, taskKeys) + .list(); + Map<String, ProcessCoding> codingMap = databaseTaskList.stream().collect(Collectors.toMap(ProcessCoding::getTaskDefKey, pro -> pro)); + List<Task> tList = new ArrayList<>(); + // 鍒ゆ柇 + for (String key : taskMap.keySet()) { + ProcessCoding processCoding = codingMap.get(key); + // 濡傛灉杩愯涓殑浠诲姟娌′粠鏁版嵁搴撴煡鎵惧嚭鏉ワ紝璇存槑璇ヤ换鍔℃病閰嶇疆璧嬬爜绛夋椂闂达紝涓嶇畻鍗冲皢瓒呮椂 + if (Objects.nonNull(processCoding) && ProcessOverTimeConstants.WILLOVERTIME.equals(processCoding.getOvertimeStatus())) { + tList.add(taskMap.get(key)); + } + } + return Long.valueOf(tList.size()); } /** @@ -1222,33 +1270,42 @@ int startNum = pageSize * (pageNum - 1); int endNum = startNum + pageSize; - // 鏌ュ嚭鍗冲皢瓒呮椂鐨勪换鍔� - List<String> taskKeyList = new LambdaQueryChainWrapper<>(processCodingService.getBaseMapper()) - .select(ProcessCoding::getTaskDefKey) + // 鏌ュ嚭杩愯鍦ㄧ殑浠诲姟key + List<Task> taskList = new ArrayList<>(12); + if (StringUtils.isNotBlank(taskName)) { + taskList = taskService.createTaskQuery().processInstanceId(processInsId).taskNameLike(taskName).orderByTaskCreateTime().desc().list(); + } else { + taskList = taskService.createTaskQuery().processInstanceId(processInsId).orderByTaskCreateTime().desc().list(); + } + if (CollectionUtils.isEmpty(taskList)) { + result.total(0); + return new ArrayList<>(); + } + List<String> taskKeys = taskList.stream().map(Task::getTaskDefinitionKey).distinct().collect(Collectors.toList()); + Map<String, Task> taskMap = taskList.stream().collect(Collectors.toMap(Task::getTaskDefinitionKey, his -> his)); + // 鏌ュ嚭鏁版嵁搴撶殑浠诲姟key + List<ProcessCoding> databaseTaskList = new LambdaQueryChainWrapper<>(processCodingService.getBaseMapper()) .eq(ProcessCoding::getProcessInsId, processInsId) - .eq(ProcessCoding::getOvertimeStatus, ProcessOverTimeConstants.WILLOVERTIME) - .list() - .stream() - .map(ProcessCoding::getTaskDefKey) - .collect(Collectors.toList()); - - List<Task> taskList = new ArrayList<>(); - // 鏌ュ嚭鎵�鏈夋鍦ㄥ鐞�(杩愯鏃�)鐨勪换鍔� - if (! CollectionUtils.isEmpty(taskKeyList)) { - taskList = taskService.createTaskQuery() - .processInstanceId(processInsId) - .taskNameLike(taskName) - .caseDefinitionKeyIn(taskKeyList) - .list(); + .in(ProcessCoding::getTaskDefKey, taskKeys) + .list(); + Map<String, ProcessCoding> codingMap = databaseTaskList.stream().collect(Collectors.toMap(ProcessCoding::getTaskDefKey, pro -> pro)); + List<Task> tList = new ArrayList<>(); + // 鍒ゆ柇 + for (String key : taskMap.keySet()) { + ProcessCoding processCoding = codingMap.get(key); + // 濡傛灉杩愯涓殑浠诲姟娌′粠鏁版嵁搴撴煡鎵惧嚭鏉ワ紝璇存槑璇ヤ换鍔℃病閰嶇疆璧嬬爜绛夋椂闂达紝涓嶇畻鍗冲皢瓒呮椂 + if (Objects.nonNull(processCoding) && ProcessOverTimeConstants.WILLOVERTIME.equals(processCoding.getOvertimeStatus())) { + tList.add(taskMap.get(key)); + } } - if (startNum >= taskList.size()) { + if (startNum >= tList.size()) { // 濡傛灉璧峰绱㈠紩瓒呭嚭浜嗗垪琛ㄧ殑澶у皬锛岃繑鍥炰竴涓┖鍒楄〃 return new ArrayList<>(); } - result.total(taskList.size()); - int end = Math.min(endNum, taskList.size()); - List<Task> pageTaskList = taskList.subList(startNum, end); + result.total(tList.size()); + int end = Math.min(endNum, tList.size()); + List<Task> pageTaskList = tList.subList(startNum, end); List<String> taskDefs = pageTaskList.stream().map(Task::getTaskDefinitionKey).collect(Collectors.toList()); Map<String, Task> keyMap = pageTaskList.stream().collect(Collectors.toMap(Task::getTaskDefinitionKey, his -> his)); @@ -1348,11 +1405,11 @@ } SysUser sysUser = sysUserService.selectUserById(Long.parseLong(userTask.getAssignee())); if (Objects.nonNull(sysUser)) { - handlerIds.add(sysUser.getUserId()); - handlerNames.add(sysUser.getNickName()); + vo.getHandlerId().add(sysUser.getUserId()); + vo.getHandlerName().add(sysUser.getNickName()); if (Objects.nonNull(sysUser.getDept())) { - handlerUnitIds.add(sysUser.getDept().getDeptId()); - handlerUnitNames.add(sysUser.getDept().getDeptName()); + vo.getHandlerUnitId().add(sysUser.getDept().getDeptId()); + vo.getHandlerUnitName().add(sysUser.getDept().getDeptName()); } } } else if (CollectionUtil.isNotEmpty(userTask.getCandidateGroups())) { @@ -1365,17 +1422,16 @@ // 閮ㄩ棬 SysDept dept = sysDeptService.selectDeptById(Long.parseLong(split[1])); if (Objects.nonNull(dept)) { - handlerUnitIds.add(dept.getDeptId()); - handlerUnitNames.add(dept.getDeptName()); - + vo.getHandlerUnitId().add(dept.getDeptId()); + vo.getHandlerUnitName().add(dept.getDeptName()); } } } else { vo.setHandlerType(HandlerTypeEnum.ROLE); SysRole role = sysRoleService.selectRoleById(Long.parseLong(groupId)); if (Objects.nonNull(role)) { - handlerUnitIds.add(role.getRoleId()); - handlerUnitNames.add(role.getRoleName()); + vo.getHandlerUnitId().add(role.getRoleId()); + vo.getHandlerUnitName().add(role.getRoleName()); } } } -- Gitblit v1.8.0