From 4cecf59f39ce9b2066c2d328566f1180f8af7be2 Mon Sep 17 00:00:00 2001
From: wang1 <844966816@qq.com>
Date: 星期日, 25 六月 2023 18:04:59 +0800
Subject: [PATCH] 主数据流程调试驳回

---
 Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/entity/FlowTaskDTO.java                     |    2 
 Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/business/service/impl/FlowBusinessServiceImpl.java |   32 ++++++++++++++++
 Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/service/impl/VCIFlowserviceImpl.java        |   70 +++++++++++++++++++++++++++++------
 3 files changed, 91 insertions(+), 13 deletions(-)

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 46130f0..4e70d5f 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
@@ -27,12 +27,17 @@
 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.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.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;
@@ -55,6 +60,7 @@
 
 	private final TaskService taskService;
 	private final HistoryService historyService;
+	private final RuntimeService runtimeService;
 
 	@Override
 	public IPage<BladeFlow> selectClaimPage(IPage<BladeFlow> page, BladeFlow bladeFlow) {
@@ -264,8 +270,22 @@
 			variables = Kv.create();
 		}
 		variables.put(ProcessConstant.PASS_KEY, flow.isPass());
+
 		// 瀹屾垚浠诲姟
 		taskService.complete(taskId, variables);
+
+//		//璁剧疆涓嬩竴姝ュ鏍镐汉
+//		Task task = taskService.createTaskQuery().processInstanceId(processInstanceId).active().singleResult();//涓嬩竴姝ヨ妭鐐�
+//		String taskKey = task.getTaskDefinitionKey();//灏辨槸娴佺▼閰嶇疆鐨勮妭鐐筰d
+//		Object to = getVar(processInstanceId,taskKey);
+//		if(to==null){
+//			throw new ServiceException(taskKey+"娌℃湁璁剧疆瀹℃牳浜�");
+//		}
+//		String assignee = to.toString();
+//
+//		if(StringUtils.isNotEmpty(assignee)) {
+//			task.setAssignee(assignee);
+//		}
 		return true;
 	}
 
@@ -332,4 +352,16 @@
 		return historyService.createHistoricProcessInstanceQuery().processInstanceId(processInstanceId).singleResult();
 	}
 
+	public Object getVar(String processInstanceId,String key){
+		Object t = null;
+		List<Execution> list = runtimeService.createExecutionQuery().processInstanceId(processInstanceId).list();
+		for (Execution execution : list) {
+			Object va = runtimeService.getVariable(execution.getId(),key);
+			if(va!=null){
+				t=va;
+			}
+		}
+		return t;
+	}
+
 }
diff --git a/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/entity/FlowTaskDTO.java b/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/entity/FlowTaskDTO.java
index 62ee9c6..4a065b9 100644
--- a/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/entity/FlowTaskDTO.java
+++ b/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/entity/FlowTaskDTO.java
@@ -58,7 +58,7 @@
 
 	//娴佺▼涓弬鏁�
 	private List<FlowTaskDTO> toTasks;//娴佺▼涓嬩竴姝ユ寜閽�
-	private Map<String, Object> vars;//娴佺▼鍙傛暟
+	private Map<String, Object> variables;//娴佺▼鍙傛暟
 
 
 
diff --git a/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/service/impl/VCIFlowserviceImpl.java b/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/service/impl/VCIFlowserviceImpl.java
index 1221fa3..0fde0f7 100644
--- a/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/service/impl/VCIFlowserviceImpl.java
+++ b/Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/service/impl/VCIFlowserviceImpl.java
@@ -25,12 +25,14 @@
 import com.vci.ubcs.flow.engine.service.VICFlowService;
 import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
 import org.flowable.bpmn.model.*;
 import org.flowable.engine.*;
 import org.flowable.engine.impl.persistence.entity.ExecutionEntity;
 import org.flowable.engine.repository.ProcessDefinition;
 import org.flowable.engine.runtime.ProcessInstance;
 import org.flowable.task.api.Task;
+import org.springblade.core.log.exception.ServiceException;
 import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.support.Kv;
@@ -55,13 +57,14 @@
 	private final FlowEngineService flowEngineService;
 	private final HistoryService historyService;
 
+	private static String MODELKEY = "modelKey";//鍓嶇浼犺繃鏉ョ殑妯″瀷key
 	@Override
 	public R<BladeFlow> startProcess(FlowTaskDTO flowTaskUserC){
-		String modelKey = flowTaskUserC.getModelKey();
-		String templateId = flowTaskUserC.getTemplateId();
+		Map<String, Object> kvv = flowTaskUserC.getVariables();
 
-		Kv kv = Kv.create()
-			.set(ProcessConstant.TASK_VARIABLE_CREATE_USER, AuthUtil.getUserName());
+		String modelKey = kvv.get(MODELKEY).toString();
+
+		Kv kv = Kv.create().set(ProcessConstant.TASK_VARIABLE_CREATE_USER, AuthUtil.getUserName());
 
 		// 璁剧疆娴佺▼鍚姩鐢ㄦ埛
 		identityService.setAuthenticatedUserId(TaskUtil.getTaskUser());
@@ -72,11 +75,11 @@
 		String processDefinitionId = latesDefinition.getId();
 
 		//鏌ヨ姣忎竴姝ュ鏍镐汉
-		List<FlowTaskUser> taskUsers = flowTaskUserService.getTaskUserByTemplateAndModelKey(templateId,modelKey);
-		Set<String> taskIdSet = new HashSet<>();
+		List<FlowTaskUser> taskUsers = flowTaskUserC.getFlowTaskUsers();
+//		Set<String> taskIdSet = new HashSet<>();
 		for (FlowTaskUser taskUser:taskUsers){
 			kv.put(taskUser.getTaskId(),TaskUtil.getTaskUser(taskUser.getUserId()));
-			taskIdSet.add(taskUser.getTaskId());
+//			taskIdSet.add(taskUser.getTaskId());
 		}
 
 		//瀵规瘮閰嶇疆鐨勫鏍镐汉鍛樺拰娴佺▼涓妭鐐规槸鍚︿竴鑷达紝鍙兘瀛樺湪娴佺▼鑺傜偣鍙樻洿浜嗭紝澶氫簡鎴栬�呭皯浜嗚妭鐐癸紝浣嗘槸閰嶇疆瀹℃牳浜哄憳鐨勮妭鐐规病鏈夊彉
@@ -92,13 +95,28 @@
 //		}
 
 		//娴佺▼涓枃浠躲�佸彉閲忕瓑
-		//do..
+		if(kvv!=null&&!kvv.isEmpty()){
+			kv.putAll(kvv);
+		}
 
 		ProcessInstance processInstance = runtimeService.startProcessInstanceById(processDefinitionId, modelKey, kv);
 		// 缁勮娴佺▼閫氱敤绫�
 		BladeFlow flow = new BladeFlow();
 		flow.setProcessInstanceId(processInstance.getId());
 
+//		//璁剧疆涓嬩竴姝ュ鏍镐汉
+//		Task task = taskService.createTaskQuery().processInstanceId(processInstance.getId()).active().singleResult();
+//		String taskId = task.getTaskDefinitionKey();
+//		String assignee = null;
+//		for (FlowTaskUser taskUser:taskUsers) {
+//			if(taskId.equals(taskUser.getTaskId())){
+//				assignee = taskUser.getUserId();
+//			}
+//		}
+//		if(StringUtils.isEmpty(assignee)){
+//			throw new ServiceException(taskId+"娌℃湁閰嶇疆瀹℃牳浜�!");
+//		}
+//		taskService.setAssignee(task.getId(),assignee);
 		return R.data(flow);
 	}
 
@@ -126,7 +144,7 @@
 		//杩欎釜瀹炰緥鐨勬墍鏈夎妭鐐�
 		ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceId(processInstanceId).singleResult();
 		Map<String, Object> processVariables = processInstance.getProcessVariables();//鎵�鏈夊弬鏁�
-		flowTaskDTO.setVars(processVariables);
+		flowTaskDTO.setVariables(processVariables);
 
 		String modelKey = processInstance.getProcessDefinitionKey();
 		List<FlowTaskDTO> mis = flowEngineService.getNodeByFlowableKey(modelKey);
@@ -142,7 +160,24 @@
 				// 涓嬩竴涓鎵硅妭鐐�
 				FlowElement targetFlow = sequenceFlow.getTargetFlowElement();
 				if (targetFlow instanceof UserTask) {
-					System.out.println("涓嬩竴鑺傜偣: id=" + targetFlow.getId() + ",name=" + targetFlow.getName());
+					FlowTaskDTO flowTaskUserCi = new FlowTaskDTO();
+					//flowTaskUserCi.setConditionKey(null);
+					//flowTaskUserCi.setConditionValue(null);
+					flowTaskUserCi.setToName("鍚屾剰");
+					flowTaskUserCi.setToTaskId(targetFlow.getId());
+					flowTaskUserCi.setToTaskName(targetFlow.getName());
+					taskList.add(flowTaskUserCi);
+				}
+
+				//缁撴潫
+				if (targetFlow instanceof EndEvent) {
+					FlowTaskDTO flowTaskUserCi = new FlowTaskDTO();
+					//flowTaskUserCi.setConditionKey(null);
+					//flowTaskUserCi.setConditionValue(null);
+					flowTaskUserCi.setToName("鍚屾剰");
+					flowTaskUserCi.setToTaskId(targetFlow.getId());
+					flowTaskUserCi.setToTaskName(targetFlow.getName());
+					taskList.add(flowTaskUserCi);
 				}
 				// 濡傛灉涓嬩釜瀹℃壒鑺傜偣涓烘帓浠栫綉鍏�
 				if (targetFlow instanceof ExclusiveGateway) {
@@ -158,8 +193,19 @@
 							if(taskId.equals(flowTaskUserCi.getTaskId())){
 								flowTaskUserCi.setCondition(conditionExpression);
 								if(conditionExpression.split("=").length>1) {
-									flowTaskUserCi.setConditionKey(conditionExpression.split("=")[0]);
-									flowTaskUserCi.setConditionValue(conditionExpression.split("=")[1]);
+									conditionExpression = conditionExpression.replace("${","").replace("}","").replaceAll("\"","");
+									String[] conditionExpressionStr = conditionExpression.split("==");
+									if(conditionExpression.contains("<")){
+										conditionExpressionStr = conditionExpression.split("<");
+									}else if(conditionExpression.contains("<=")){
+										conditionExpressionStr = conditionExpression.split("<=");
+									}else if(conditionExpression.contains(">")){
+										conditionExpressionStr = conditionExpression.split(">");
+									}else if(conditionExpression.contains(">=")){
+										conditionExpressionStr = conditionExpression.split(">=");
+									}
+									flowTaskUserCi.setConditionKey(conditionExpressionStr.length>0?conditionExpressionStr[0]:null);
+									flowTaskUserCi.setConditionValue(conditionExpressionStr.length>1?conditionExpressionStr[1]:null);
 								}
 								flowTaskUserCi.setToName(name);
 								flowTaskUserCi.setToTaskId(taskId);

--
Gitblit v1.9.3