From 519462150670dbea357d26201491035b547a256f Mon Sep 17 00:00:00 2001
From: xiangpei <xiangpei@timesnew.cn>
Date: 星期一, 24 三月 2025 15:57:25 +0800
Subject: [PATCH] 流程推进展示跳过事项
---
business/src/main/java/com/ycl/domain/vo/ProjectProcessDetailVO.java | 5 +
common/src/main/java/com/ycl/common/enums/business/TaskStatusEnum.java | 1
business/src/main/java/com/ycl/service/impl/ProjectProcessServiceImpl.java | 155 +++++++++++++++++++++++++++++++++++++++++++++++++++
business/src/main/java/com/ycl/constant/TaskTypeConstant.java | 1
4 files changed, 161 insertions(+), 1 deletions(-)
diff --git a/business/src/main/java/com/ycl/constant/TaskTypeConstant.java b/business/src/main/java/com/ycl/constant/TaskTypeConstant.java
index bf4a08b..44d08d6 100644
--- a/business/src/main/java/com/ycl/constant/TaskTypeConstant.java
+++ b/business/src/main/java/com/ycl/constant/TaskTypeConstant.java
@@ -11,6 +11,7 @@
public final static String ALL = "all"; // 鍏ㄩ儴浠诲姟
public final static String TODO = "todo"; // 寰呭姙浠诲姟
public final static String WAIT = "wait"; // 瀹圭己
+ public final static String JUMP = "jump"; // 瀹圭己
public final static String REMAINING = "remaining"; // 鍓╀綑浠诲姟
public final static String TIMELY = "timely"; // 鍙婃椂瀹屾垚鐨勪换鍔�
public final static String OVERTIME = "overtime"; // 瓒呮椂瀹屾垚鐨勪换鍔�
diff --git a/business/src/main/java/com/ycl/domain/vo/ProjectProcessDetailVO.java b/business/src/main/java/com/ycl/domain/vo/ProjectProcessDetailVO.java
index d49ca68..799bf09 100644
--- a/business/src/main/java/com/ycl/domain/vo/ProjectProcessDetailVO.java
+++ b/business/src/main/java/com/ycl/domain/vo/ProjectProcessDetailVO.java
@@ -91,5 +91,10 @@
* 瀹圭己浠诲姟鏁�
*/
private Long waitTaskNum = 0L;
+
+ /**
+ * 璺宠繃浠诲姟鏁�
+ */
+ private Long jumpTaskNum = 0L;
}
}
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 6e44713..38f032c 100644
--- a/business/src/main/java/com/ycl/service/impl/ProjectProcessServiceImpl.java
+++ b/business/src/main/java/com/ycl/service/impl/ProjectProcessServiceImpl.java
@@ -306,7 +306,7 @@
taskStatistics.setOvertimeTaskNum(this.getOvertimeTaskNum(projectProcess.getProcessInsId()));
taskStatistics.setWillOvertimeTaskNum(this.getWillOvertimeTaskNum(projectProcess.getProcessInsId()));
taskStatistics.setWaitTaskNum(this.getWaitTaskNum(projectProcess.getProcessInsId()));
-// taskStatistics.setCurrentTask(this.getCurrentNodeTaskList(projectProcess.getProcessInstanceId()));
+ taskStatistics.setJumpTaskNum(this.getJumpTaskNum(projectProcess.getProcessInsId()));
detail.setStatistics(taskStatistics);
Result result = Result.ok();
@@ -363,6 +363,9 @@
break;
case TaskTypeConstant.WAIT:
this.getWaitTask(query.getProjectId(), query.getProcessDefId(), projectProcess.getProcessInsId(), query.getTaskName(), (int) query.getCurrentPage(), (int) query.getPageSize(), ok);
+ break;
+ case TaskTypeConstant.JUMP:
+ this.getJumpTask(query.getProjectId(), query.getProcessDefId(), projectProcess.getProcessInsId(), query.getTaskName(), (int) query.getCurrentPage(), (int) query.getPageSize(), ok);
break;
case TaskTypeConstant.REMAINING:
this.getRemainingTask(query.getProjectId(), query.getProcessDefId(), projectProcess.getProcessInsId(), query.getTaskName(), (int) query.getCurrentPage(), (int) query.getPageSize(), ok);
@@ -1991,6 +1994,156 @@
}
/**
+ * 鑾峰彇璺宠繃浠诲姟
+ *
+ * @param processInsId
+ * @return
+ */
+ private Long getJumpTaskNum(String processInsId) {
+ // 鏌ュ嚭璺宠繃鐨勪换鍔�
+ List<ProcessLog> allJumpTaskList = new LambdaQueryChainWrapper<>(processLogService.getBaseMapper())
+ .eq(ProcessLog::getProcessInsId, processInsId)
+ .eq(ProcessLog::getEventType, ProcessLogEventTypeEnum.JUMP)
+ .orderByDesc(ProcessLog::getGmtCreate)
+ .list();
+ List<String> jumpTaskIds = allJumpTaskList.stream().map(ProcessLog::getTaskId).collect(Collectors.toList());
+ List<HistoricTaskInstance> hisTaskList = historyService.createHistoricTaskInstanceQuery()
+ .processInstanceId(processInsId)
+ .taskIds(jumpTaskIds)
+ .includeIdentityLinks()
+ .orderByHistoricTaskInstanceStartTime()
+ .desc()
+ .list();
+ hisTaskList = this.distinctHisTask(hisTaskList);
+ return Long.valueOf(hisTaskList.size());
+ }
+
+ /**
+ * 鑾峰彇璺宠繃浠诲姟
+ *
+ * @param projectId
+ * @param processDefinitionId
+ * @param processInsId
+ * @param taskName
+ * @param pageNum
+ * @param pageSize
+ * @param result
+ * @return
+ */
+ private List<CustomerTaskVO> getJumpTask(String projectId,
+ String processDefinitionId,
+ String processInsId,
+ String taskName,
+ Integer pageNum,
+ Integer pageSize,
+ Result result) {
+ // 鏌ュ嚭璺宠繃鐨勪换鍔�
+ List<ProcessLog> allJumpTaskList = new LambdaQueryChainWrapper<>(processLogService.getBaseMapper())
+ .eq(ProcessLog::getProcessInsId, processInsId)
+ .eq(ProcessLog::getEventType, ProcessLogEventTypeEnum.JUMP)
+ .like(StringUtils.isNotBlank(taskName), ProcessLog::getTaskName, taskName)
+ .orderByDesc(ProcessLog::getGmtCreate)
+ .list();
+ List<String> jumpTaskIds = allJumpTaskList.stream().map(ProcessLog::getTaskId).collect(Collectors.toList());
+ List<HistoricTaskInstance> hisTaskList = historyService.createHistoricTaskInstanceQuery()
+ .processInstanceId(processInsId)
+ .taskIds(jumpTaskIds)
+ .includeIdentityLinks()
+ .orderByHistoricTaskInstanceStartTime()
+ .desc()
+ .list();
+ hisTaskList = this.distinctHisTask(hisTaskList);
+ if (CollectionUtils.isEmpty(hisTaskList)) {
+ result.total(0l);
+ return new ArrayList<>();
+ }
+ int startNum = pageSize * (pageNum - 1);
+ int endNum = startNum + pageSize;
+ if (startNum >= hisTaskList.size()) {
+ result.total(0l);
+ // 濡傛灉璧峰绱㈠紩瓒呭嚭浜嗗垪琛ㄧ殑澶у皬锛岃繑鍥炰竴涓┖鍒楄〃
+ return new ArrayList<>();
+ }
+ result.total(hisTaskList.size());
+ int end = Math.min(endNum, hisTaskList.size());
+ List<HistoricTaskInstance> targetTaskList = hisTaskList.subList(startNum, end);
+
+ // 杞崲鎴怴O
+ // 寰楀埌鐩爣浠诲姟瀵瑰簲鐨勫畾涔�
+ List<String> taskDefs = targetTaskList.stream().map(HistoricTaskInstance::getTaskDefinitionKey).collect(Collectors.toList());
+ Map<String, HistoricTaskInstance> keyMap = targetTaskList.stream().collect(Collectors.toMap(HistoricTaskInstance::getTaskDefinitionKey, his -> his));
+ List<UserTask> finishedUserTaskElement = this.getAllUserTaskElement(processDefinitionId).stream().filter(el -> taskDefs.contains(el.getId())).collect(Collectors.toList());
+
+ // 鏌ュ嚭娴佺▼
+ ProcessInstance process = runtimeService.createProcessInstanceQuery().processInstanceId(processInsId).singleResult();
+ String deployId = "";
+ String processName = "";
+ if (Objects.nonNull(process)) {
+ deployId = process.getDeploymentId();
+ processName = process.getProcessDefinitionName();
+ } else {
+ HistoricProcessInstance hisProcess = historyService.createHistoricProcessInstanceQuery().processInstanceId(processInsId).singleResult();
+ deployId = hisProcess.getDeploymentId();
+ processName = hisProcess.getProcessDefinitionName();
+ }
+
+ String finalDeployId = deployId;
+ String finalProcessName = processName;
+ List<CustomerTaskVO> vos = finishedUserTaskElement.stream().map(userTask -> {
+ CustomerTaskVO vo = new CustomerTaskVO();
+ vo.setProcessInsId(processInsId);
+ vo.setProcessDefId(processDefinitionId);
+ vo.setDeployId(finalDeployId);
+ vo.setTaskName(userTask.getName());
+ vo.setProcessName(finalProcessName);
+
+ // 涓�涓换鍔″彲鑳芥湁澶氫釜鍊欓�変汉/缁勶紝鎵�浠ラ渶瑕佷娇鐢╨ist
+ List<Long> handlerIds = new ArrayList<>(2);
+ List<String> handlerNames = new ArrayList<>(2);
+ List<Long> handlerUnitIds = new ArrayList<>(2);
+ List<String> handlerUnitNames = new ArrayList<>(2);
+ List<String> promoterNames = new ArrayList<>(2);
+ List<String> promoterUnitNames = new ArrayList<>(2);
+ vo.setHandlerId(handlerIds);
+ vo.setHandlerName(handlerNames);
+ vo.setHandlerUnitId(handlerUnitIds);
+ vo.setHandlerUnitName(handlerUnitNames);
+ vo.setPromoterName(promoterNames);
+ vo.setPromoterUnitName(promoterUnitNames);
+
+ this.setCandidateInfo(userTask, vo, projectId, processInsId);
+ HistoricTaskInstance hisTask = keyMap.get(userTask.getId());
+ if (Objects.nonNull(hisTask)) {
+ vo.setTaskStatus(TaskStatusEnum.JUMP);
+ // 濡傛灉鏄凡瀹屾垚鐨勶紝淇℃伅闇�瑕佸崟鐙祴鍊�
+ vo.setTaskId(hisTask.getId());
+ vo.setExecutionId(hisTask.getExecutionId());
+ vo.setCreateTime(hisTask.getStartTime());
+
+ // 鏌ヨ瀹為檯澶勭悊浜�
+ if (StringUtils.isNotBlank(hisTask.getAssignee())) {
+ long handlerUserId = Long.parseLong(hisTask.getAssignee());
+ SysUser handlerUser = sysUserService.selectUserById(handlerUserId);
+ if (Objects.nonNull(handlerUser)) {
+ vo.getHandlerId().add(handlerUserId);
+ vo.getHandlerName().add(this.getUserShowName(handlerUser));
+ if (Objects.nonNull(handlerUser.getDept())) {
+ vo.getHandlerUnitId().add(handlerUser.getDept().getDeptId());
+ vo.getHandlerUnitName().add(handlerUser.getDept().getDeptName());
+ }
+ }
+ }
+ this.setHandler(vo, hisTask.getIdentityLinks());
+ vo.setTaskDefinitionKey(hisTask.getTaskDefinitionKey());
+ }
+ this.distinctVo(vo);
+ return vo;
+ }).collect(Collectors.toList());
+ result.data(vos);
+ return vos;
+ }
+
+ /**
* 瀹圭己浠诲姟鍒嗛〉
*
* @param projectId
diff --git a/common/src/main/java/com/ycl/common/enums/business/TaskStatusEnum.java b/common/src/main/java/com/ycl/common/enums/business/TaskStatusEnum.java
index 1e3e87b..caa490a 100644
--- a/common/src/main/java/com/ycl/common/enums/business/TaskStatusEnum.java
+++ b/common/src/main/java/com/ycl/common/enums/business/TaskStatusEnum.java
@@ -17,6 +17,7 @@
FINISHED("finished", "宸插畬鎴�"),
WAIT("wait", "瀹圭己"),
HANGUP("HANGUP", "鎸傝捣"),
+ JUMP("JUMP", "璺宠繃"),
;
private final String value;
--
Gitblit v1.8.0