From af73b1917e58e37daaa3e63f5303da1056cedfa3 Mon Sep 17 00:00:00 2001 From: wang1 <844966816@qq.com> Date: 星期四, 13 七月 2023 18:18:26 +0800 Subject: [PATCH] 修复生命周期调试异常,整理流程代码 --- Source/UBCS/ubcs-ops/ubcs-flow/src/main/java/com/vci/ubcs/flow/engine/service/impl/VCIFlowserviceImpl.java | 91 +++++++++++++++++++++++++++++++++++++++------ 1 files changed, 78 insertions(+), 13 deletions(-) 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..4a1ea85 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 @@ -16,21 +16,28 @@ */ package com.vci.ubcs.flow.engine.service.impl; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.vci.ubcs.flow.core.constant.ProcessConstant; +import com.vci.ubcs.flow.core.dto.FlowTaskDTO; import com.vci.ubcs.flow.core.entity.BladeFlow; +import com.vci.ubcs.flow.core.entity.FlowTaskUser; import com.vci.ubcs.flow.core.utils.TaskUtil; import com.vci.ubcs.flow.engine.entity.*; import com.vci.ubcs.flow.engine.service.FlowEngineService; import com.vci.ubcs.flow.engine.service.FlowTaskUserService; +import com.vci.ubcs.flow.engine.service.ProcessStageAttrService; 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.mp.support.Condition; import org.springblade.core.secure.utils.AuthUtil; import org.springblade.core.tool.api.R; import org.springblade.core.tool.support.Kv; @@ -54,14 +61,18 @@ private final FlowTaskUserService flowTaskUserService; private final FlowEngineService flowEngineService; private final HistoryService historyService; + private final ProcessStageAttrService processStageAttrService; + private static String MODELKEY = "modelKey";//鍓嶇浼犺繃鏉ョ殑妯″瀷key + private static String TASKID = "taskId";//鍓嶇浼犺繃鏉ョ殑妯″瀷key + private static String PROCESSINSTANCEID = "processInstanceId";//鍓嶇浼犺繃鏉ョ殑妯″瀷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 +83,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 +103,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 +152,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 +168,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) { @@ -157,9 +200,20 @@ for (FlowTaskDTO flowTaskUserCi:mis){ if(taskId.equals(flowTaskUserCi.getTaskId())){ flowTaskUserCi.setCondition(conditionExpression); - if(conditionExpression.split("=").length>1) { - flowTaskUserCi.setConditionKey(conditionExpression.split("=")[0]); - flowTaskUserCi.setConditionValue(conditionExpression.split("=")[1]); + if(conditionExpression.contains("=")||conditionExpression.contains("<")||conditionExpression.contains(">")) { + 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); @@ -171,6 +225,17 @@ } } } + + //娴佺▼甯搁噺 + Map<String,Object> variables = runtimeService.getVariables(processInstanceId); + if(!variables.isEmpty()){ + flowTaskDTO.setVariables(variables); + } + + + //鏀惧叆娴佺▼闃舵銆佹祦绋媘odelkey + variables.put(TASKID,crruentActivityId); + variables.put(PROCESSINSTANCEID,processInstanceId); return flowTaskDTO; } } -- Gitblit v1.9.3