From 8b6a2a8255d9da50b90a086222583ba1b4a77c99 Mon Sep 17 00:00:00 2001
From: dangsn <dangshuainan@louddt.com>
Date: 星期日, 30 七月 2023 21:40:23 +0800
Subject: [PATCH] 待办任务增加显示项:上一步操作人以及处理意见

---
 Source/UBCS/ubcs-ops-api/ubcs-flow-api/src/main/java/com/vci/ubcs/flow/core/entity/BladeFlow.java                 |   17 ++++++++
 Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/business/service/impl/FlowBusinessServiceImpl.java |   62 +++++++++++++++++++++++++++++-
 Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/constant/FlowEngineConstant.java            |    2 +
 3 files changed, 77 insertions(+), 4 deletions(-)

diff --git a/Source/UBCS/ubcs-ops-api/ubcs-flow-api/src/main/java/com/vci/ubcs/flow/core/entity/BladeFlow.java b/Source/UBCS/ubcs-ops-api/ubcs-flow-api/src/main/java/com/vci/ubcs/flow/core/entity/BladeFlow.java
index bc0c590..a0ca9b6 100644
--- a/Source/UBCS/ubcs-ops-api/ubcs-flow-api/src/main/java/com/vci/ubcs/flow/core/entity/BladeFlow.java
+++ b/Source/UBCS/ubcs-ops-api/ubcs-flow-api/src/main/java/com/vci/ubcs/flow/core/entity/BladeFlow.java
@@ -125,7 +125,7 @@
 	 */
 	private String historyActivityId;
 	/**
-	 * 鍘嗗彶娲诲姩娴佺▼
+	 * 鍘嗗彶娲诲姩鍚嶇О
 	 */
 	private String historyActivityName;
 	/**
@@ -170,6 +170,21 @@
 	private Map<String, Object> variables;
 
 	/**
+	 * 鍘嗗彶娲诲姩澶勭悊浜�
+	 */
+	private String historyActivityAssigne;
+
+	/**
+	 * 鍘嗗彶娲诲姩澶勭悊浜哄悕绉�
+	 */
+	private String historyActivityAssigneName;
+
+	/**
+	 * 鍘嗗彶娲诲姩鎰忚
+	 */
+	private String historyActivityIdea;
+
+	/**
 	 * 鑾峰彇鏄惁閫氳繃
 	 */
 	public boolean isPass() {
diff --git a/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/business/service/impl/FlowBusinessServiceImpl.java b/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/business/service/impl/FlowBusinessServiceImpl.java
index 4e70d5f..502f332 100644
--- a/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/business/service/impl/FlowBusinessServiceImpl.java
+++ b/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/business/service/impl/FlowBusinessServiceImpl.java
@@ -24,20 +24,21 @@
 import com.vci.ubcs.flow.engine.constant.FlowEngineConstant;
 import com.vci.ubcs.flow.engine.entity.FlowProcess;
 import com.vci.ubcs.flow.engine.utils.FlowCache;
+import com.vci.ubcs.system.user.cache.UserCache;
+import com.vci.ubcs.system.user.entity.User;
 import lombok.AllArgsConstructor;
 import org.apache.commons.lang3.StringUtils;
 import org.flowable.engine.HistoryService;
 import org.flowable.engine.RuntimeService;
 import org.flowable.engine.TaskService;
+import org.flowable.engine.history.HistoricActivityInstance;
 import org.flowable.engine.history.HistoricProcessInstance;
 import org.flowable.engine.history.HistoricProcessInstanceQuery;
 import org.flowable.engine.runtime.Execution;
-import org.flowable.engine.runtime.ProcessInstance;
-import org.flowable.task.api.Task;
+import org.flowable.engine.task.Comment;
 import org.flowable.task.api.TaskQuery;
 import org.flowable.task.api.history.HistoricTaskInstance;
 import org.flowable.task.api.history.HistoricTaskInstanceQuery;
-import org.springblade.core.log.exception.ServiceException;
 import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.tool.support.Kv;
 import org.springblade.core.tool.utils.Func;
@@ -45,6 +46,7 @@
 import org.springblade.core.tool.utils.StringUtil;
 import org.springframework.stereotype.Service;
 
+import java.util.ArrayList;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
@@ -323,6 +325,37 @@
 			flow.setVariables(task.getProcessVariables());
 
 			HistoricProcessInstance historicProcessInstance = getHistoricProcessInstance(task.getProcessInstanceId());
+
+			//鑾峰彇涓婁竴浠诲姟淇℃伅
+			HistoricActivityInstance historicActivityInstance = getPrevHistoricActivityInstance(task.getProcessInstanceId(),task.getId());
+			flow.setHistoryActivityId(historicActivityInstance.getTaskId());
+			flow.setHistoryActivityName(historicActivityInstance.getActivityName());
+			//鑾峰彇鍘嗗彶浠诲姟鎵ц浜�
+			if(historicActivityInstance.getActivityType().equals(FlowEngineConstant.USR_TASK)){
+				User user = UserCache.getUser(TaskUtil.getUserId(historicActivityInstance.getAssignee()));
+				flow.setHistoryActivityAssigne(historicActivityInstance.getAssignee());
+				flow.setHistoryActivityAssigneName(user.getName());
+				List<Comment> commentList = taskService.getTaskComments(historicActivityInstance.getTaskId());
+				if (commentList.size() > 0) {
+					flow.setHistoryActivityIdea(commentList.get(0).getFullMessage());
+				}
+			}
+			// 鑾峰彇娴佺▼鍙戣捣浜哄悕绉�
+			if (FlowEngineConstant.START_EVENT.equals(historicActivityInstance.getActivityType())) {
+				List<HistoricProcessInstance> processInstanceList = historyService.createHistoricProcessInstanceQuery()
+					.processInstanceId(task.getProcessInstanceId()).orderByProcessInstanceStartTime().asc().list();
+				if (processInstanceList.size() > 0) {
+					if (StringUtil.isNotBlank(processInstanceList.get(0).getStartUserId())) {
+						String taskUser = processInstanceList.get(0).getStartUserId();
+						User user = UserCache.getUser(TaskUtil.getUserId(taskUser));
+						if (user != null) {
+							flow.setHistoryActivityAssigne(historicActivityInstance.getAssignee());
+							flow.setHistoryActivityAssigneName(user.getName());
+						}
+					}
+				}
+			}
+
 			if (Func.isNotEmpty(historicProcessInstance)) {
 				String[] businessKey = Func.toStrArray(StringPool.COLON, historicProcessInstance.getBusinessKey());
 				flow.setBusinessTable(businessKey[0]);
@@ -342,6 +375,29 @@
 		});
 	}
 
+	private HistoricActivityInstance getPrevHistoricActivityInstance(String processInstanceId, String taskDefinitionId) {
+		List<HistoricActivityInstance> historicActivityInstanceList = historyService.createHistoricActivityInstanceQuery().processInstanceId(processInstanceId)
+			.orderByHistoricActivityInstanceStartTime().asc()
+			.orderByHistoricActivityInstanceEndTime().asc().list();
+		List<HistoricActivityInstance> tempList = new ArrayList<>();
+		int index = 0;
+		for(HistoricActivityInstance historicActivityInstance : historicActivityInstanceList){
+			if (StringUtils.equals(FlowEngineConstant.USR_TASK, historicActivityInstance.getActivityType())
+				|| FlowEngineConstant.START_EVENT.equals(historicActivityInstance.getActivityType())
+				|| FlowEngineConstant.END_EVENT.equals(historicActivityInstance.getActivityType())) {
+				tempList.add(historicActivityInstance);
+			}
+			if(StringUtils.isNotEmpty(historicActivityInstance.getTaskId()) && historicActivityInstance.getTaskId().equals(taskDefinitionId)){
+				index = tempList.indexOf(historicActivityInstance);
+				break;
+			}
+		}
+		if(index == 0){
+			return tempList.get(0);
+		}
+		return tempList.get(index-1);
+	}
+
 	/**
 	 * 鑾峰彇鍘嗗彶娴佺▼
 	 *
diff --git a/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/constant/FlowEngineConstant.java b/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/constant/FlowEngineConstant.java
index 758abbe..509b0b9 100644
--- a/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/constant/FlowEngineConstant.java
+++ b/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/constant/FlowEngineConstant.java
@@ -49,4 +49,6 @@
 
 	String END_EVENT = "endEvent";
 
+	String USR_TASK = "userTask";
+
 }

--
Gitblit v1.9.3