From d58ccebe3069f0a1b2afb0e9fbfb3ac5223f3c46 Mon Sep 17 00:00:00 2001 From: songgaoshuai <1742057357@qq.com> Date: Wed, 9 Aug 2023 13:43:07 +0800 Subject: [PATCH] =?UTF-8?q?fix=20=E8=A7=A3=E5=86=B3=E8=AE=BE=E8=AE=A1?= =?UTF-8?q?=E5=99=A8=E9=80=89=E6=8B=A9=E8=AE=BE=E7=BD=AE=E6=B5=81=E7=A8=8B?= =?UTF-8?q?=E5=8F=91=E8=B5=B7=E4=BA=BA=E8=AE=BE=E7=BD=AE=E5=8F=98=E9=87=8F?= =?UTF-8?q?=E6=9C=89=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/constant/FlowConstant.java | 10 ++++++++++ .../service/impl/ActModelServiceImpl.java | 20 ++++++++++++++++++- .../service/impl/ActTaskServiceImpl.java | 7 ++++++- 3 files changed, 35 insertions(+), 2 deletions(-) diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/common/constant/FlowConstant.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/common/constant/FlowConstant.java index 8bb684ee6..e1ee141f7 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/common/constant/FlowConstant.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/common/constant/FlowConstant.java @@ -59,4 +59,14 @@ public interface FlowConstant { */ String PROCESS_INSTANCE_VO = "processInstanceVo"; + /** + * 流程发起人 + */ + String INITIATOR = "INITIATOR"; + + /** + * 开启跳过表达式变量 + */ + String FLOWABLE_SKIP_EXPRESSION_ENABLED = "_FLOWABLE_SKIP_EXPRESSION_ENABLED"; + } diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActModelServiceImpl.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActModelServiceImpl.java index 447472673..e57e4d396 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActModelServiceImpl.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActModelServiceImpl.java @@ -9,6 +9,7 @@ import cn.hutool.core.util.ZipUtil; import cn.hutool.json.JSONUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.node.ObjectNode; import jakarta.servlet.http.HttpServletResponse; @@ -231,7 +232,24 @@ public class ActModelServiceImpl implements IActModelService { }); model.setKey(key); 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)) { throw new ServiceException("模型不能为空!"); } diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActTaskServiceImpl.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActTaskServiceImpl.java index 2d081c189..ad6f18265 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActTaskServiceImpl.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActTaskServiceImpl.java @@ -41,6 +41,9 @@ import org.springframework.transaction.annotation.Transactional; import java.util.*; 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 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()); // 将流程定义名称 作为 流程实例名称 runtimeService.setProcessInstanceName(pi.getProcessInstanceId(), pi.getProcessDefinitionName());