fix 解决设计器选择设置流程发起人设置变量有问题

This commit is contained in:
songgaoshuai 2023-08-09 13:43:07 +08:00
parent dc3c86f0d7
commit d58ccebe30
3 changed files with 35 additions and 2 deletions

View File

@ -59,4 +59,14 @@ public interface FlowConstant {
*/ */
String PROCESS_INSTANCE_VO = "processInstanceVo"; String PROCESS_INSTANCE_VO = "processInstanceVo";
/**
* 流程发起人
*/
String INITIATOR = "INITIATOR";
/**
* 开启跳过表达式变量
*/
String FLOWABLE_SKIP_EXPRESSION_ENABLED = "_FLOWABLE_SKIP_EXPRESSION_ENABLED";
} }

View File

@ -9,6 +9,7 @@ import cn.hutool.core.util.ZipUtil;
import cn.hutool.json.JSONUtil; import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ObjectNode; import com.fasterxml.jackson.databind.node.ObjectNode;
import jakarta.servlet.http.HttpServletResponse; import jakarta.servlet.http.HttpServletResponse;
@ -231,7 +232,24 @@ public class ActModelServiceImpl implements IActModelService {
}); });
model.setKey(key); model.setKey(key);
repositoryService.saveModel(model); repositoryService.saveModel(model);
byte[] xmlBytes = WorkflowUtils.bpmnJsonToXmlBytes(Objects.requireNonNull(values.getFirst("json_xml")).getBytes(StandardCharsets.UTF_8)); //解决设计器选择设置流程发起人设置变量有问题
JsonNode jsonNode = objectMapper.readTree(values.getFirst("json_xml"));
JsonNode childShapes = jsonNode.get("childShapes");
for (JsonNode childShape : childShapes) {
JsonNode properties = childShape.get("properties");
if(!properties.path("usertaskassignment").isMissingNode()){
JsonNode usertaskassignment = properties.get("usertaskassignment");
if(!usertaskassignment.path("assignment").isMissingNode()){
JsonNode assignment = usertaskassignment.get("assignment");
if(!assignment.path("assignee").isMissingNode()){
if ("$INITIATOR".equals(assignment.get("assignee").textValue())) {
((ObjectNode) assignment).put("assignee", "${INITIATOR}");
}
}
}
}
}
byte[] xmlBytes = WorkflowUtils.bpmnJsonToXmlBytes(Objects.requireNonNull(JsonUtils.toJsonString(jsonNode)).getBytes(StandardCharsets.UTF_8));
if (ArrayUtil.isEmpty(xmlBytes)) { if (ArrayUtil.isEmpty(xmlBytes)) {
throw new ServiceException("模型不能为空!"); throw new ServiceException("模型不能为空!");
} }

View File

@ -41,6 +41,9 @@ import org.springframework.transaction.annotation.Transactional;
import java.util.*; import java.util.*;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import static org.dromara.workflow.common.constant.FlowConstant.FLOWABLE_SKIP_EXPRESSION_ENABLED;
import static org.dromara.workflow.common.constant.FlowConstant.INITIATOR;
/** /**
* 任务 服务层实现 * 任务 服务层实现
* *
@ -87,7 +90,9 @@ public class ActTaskServiceImpl implements IActTaskService {
// 启动流程实例提交申请 // 启动流程实例提交申请
Map<String, Object> variables = startProcessBo.getVariables(); Map<String, Object> variables = startProcessBo.getVariables();
// 启动跳过表达式 // 启动跳过表达式
variables.put("_FLOWABLE_SKIP_EXPRESSION_ENABLED", true); variables.put(FLOWABLE_SKIP_EXPRESSION_ENABLED, true);
// 流程发起人
variables.put(INITIATOR, (String.valueOf(LoginHelper.getUserId())));
ProcessInstance pi = runtimeService.startProcessInstanceByKeyAndTenantId(startProcessBo.getProcessKey(), startProcessBo.getBusinessKey(), variables, TenantHelper.getTenantId()); ProcessInstance pi = runtimeService.startProcessInstanceByKeyAndTenantId(startProcessBo.getProcessKey(), startProcessBo.getBusinessKey(), variables, TenantHelper.getTenantId());
// 将流程定义名称 作为 流程实例名称 // 将流程定义名称 作为 流程实例名称
runtimeService.setProcessInstanceName(pi.getProcessInstanceId(), pi.getProcessDefinitionName()); runtimeService.setProcessInstanceName(pi.getProcessInstanceId(), pi.getProcessDefinitionName());