From f6232cf43301c8680c244d7e9a6bac96567d59da Mon Sep 17 00:00:00 2001 From: YunaiV Date: Thu, 2 Oct 2025 19:03:20 +0800 Subject: [PATCH 1/7] =?UTF-8?q?fix=EF=BC=9A=E3=80=90iot=20=E7=89=A9?= =?UTF-8?q?=E8=81=94=E7=BD=91=E3=80=91=E5=A2=9E=E5=BC=BA=20jdk8=20?= =?UTF-8?q?=E7=9A=84=E5=85=BC=E5=AE=B9=E6=80=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../scene/action/IotDeviceControlSceneRuleAction.java | 3 ++- .../action/IotDeviceServiceInvokeSceneRuleAction.java | 11 +++++++---- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/rule/scene/action/IotDeviceControlSceneRuleAction.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/rule/scene/action/IotDeviceControlSceneRuleAction.java index dd10ed8134..79da298442 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/rule/scene/action/IotDeviceControlSceneRuleAction.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/rule/scene/action/IotDeviceControlSceneRuleAction.java @@ -1,6 +1,7 @@ package cn.iocoder.yudao.module.iot.service.rule.scene.action; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.map.MapUtil; import cn.hutool.core.util.StrUtil; import cn.iocoder.yudao.module.iot.core.enums.IotDeviceMessageMethodEnum; import cn.iocoder.yudao.module.iot.core.mq.message.IotDeviceMessage; @@ -126,7 +127,7 @@ public class IotDeviceControlSceneRuleAction implements IotSceneRuleAction { private IotDeviceMessage buildPropertySetMessage(IotSceneRuleDO.Action actionConfig, IotDeviceDO device) { try { // 属性设置参数格式: {"properties": {"identifier": value}} - Object params = Map.of("properties", Map.of(actionConfig.getIdentifier(), actionConfig.getParams())); + Object params = MapUtil.of("properties", MapUtil.of(actionConfig.getIdentifier(), actionConfig.getParams())); return IotDeviceMessage.requestOf(IotDeviceMessageMethodEnum.PROPERTY_SET.getMethod(), params); } catch (Exception e) { log.error("[buildPropertySetMessage][构建属性设置消息异常]", e); diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/rule/scene/action/IotDeviceServiceInvokeSceneRuleAction.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/rule/scene/action/IotDeviceServiceInvokeSceneRuleAction.java index eb7bedf2f0..646990601f 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/rule/scene/action/IotDeviceServiceInvokeSceneRuleAction.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/rule/scene/action/IotDeviceServiceInvokeSceneRuleAction.java @@ -1,6 +1,7 @@ package cn.iocoder.yudao.module.iot.service.rule.scene.action; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.map.MapUtil; import cn.hutool.core.util.StrUtil; import cn.iocoder.yudao.module.iot.core.enums.IotDeviceMessageMethodEnum; import cn.iocoder.yudao.module.iot.core.mq.message.IotDeviceMessage; @@ -13,6 +14,8 @@ import jakarta.annotation.Resource; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; +import java.util.Collections; +import java.util.HashMap; import java.util.List; import java.util.Map; @@ -126,10 +129,10 @@ public class IotDeviceServiceInvokeSceneRuleAction implements IotSceneRuleAction private IotDeviceMessage buildServiceInvokeMessage(IotSceneRuleDO.Action actionConfig, IotDeviceDO device) { try { // 服务调用参数格式: {"identifier": "serviceId", "params": {...}} - Object params = Map.of( - "identifier", actionConfig.getIdentifier(), - "params", actionConfig.getParams() != null ? actionConfig.getParams() : Map.of() - ); + Object params = MapUtil.builder() + .put("identifier", actionConfig.getIdentifier()) + .put("params", actionConfig.getParams() != null ? actionConfig.getParams() : Collections.emptyMap()) + .build(); return IotDeviceMessage.requestOf(IotDeviceMessageMethodEnum.SERVICE_INVOKE.getMethod(), params); } catch (Exception e) { log.error("[buildServiceInvokeMessage][构建服务调用消息异常]", e); From a860aac46841a27e212cf70c181f2029a2100bdf Mon Sep 17 00:00:00 2001 From: YunaiV Date: Fri, 3 Oct 2025 09:07:11 +0800 Subject: [PATCH 2/7] =?UTF-8?q?feat=EF=BC=9A=E3=80=90antd=E3=80=91?= =?UTF-8?q?=E3=80=90ele=E3=80=91=E7=BB=9F=E4=B8=80=20await=20formApi.setVa?= =?UTF-8?q?lues(formData.value);=20=E7=9A=84=E5=86=99=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../codegen/vue3_vben5_antd/schema/views/form.vue.vm | 4 +--- .../resources/codegen/vue3_vben5_ele/schema/views/form.vue.vm | 4 +--- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/yudao-module-infra/src/main/resources/codegen/vue3_vben5_antd/schema/views/form.vue.vm b/yudao-module-infra/src/main/resources/codegen/vue3_vben5_antd/schema/views/form.vue.vm index e94f439f43..ea654da0b9 100644 --- a/yudao-module-infra/src/main/resources/codegen/vue3_vben5_antd/schema/views/form.vue.vm +++ b/yudao-module-infra/src/main/resources/codegen/vue3_vben5_antd/schema/views/form.vue.vm @@ -127,9 +127,7 @@ const [Modal, modalApi] = useVbenModal({ try { formData.value = await get${simpleClassName}(data.id); // 设置到 values - if (formData.value) { - await formApi.setValues(formData.value); - } + await formApi.setValues(formData.value); } finally { modalApi.unlock(); } diff --git a/yudao-module-infra/src/main/resources/codegen/vue3_vben5_ele/schema/views/form.vue.vm b/yudao-module-infra/src/main/resources/codegen/vue3_vben5_ele/schema/views/form.vue.vm index c3342c4d49..fa4c346061 100644 --- a/yudao-module-infra/src/main/resources/codegen/vue3_vben5_ele/schema/views/form.vue.vm +++ b/yudao-module-infra/src/main/resources/codegen/vue3_vben5_ele/schema/views/form.vue.vm @@ -127,9 +127,7 @@ const [Modal, modalApi] = useVbenModal({ try { formData.value = await get${simpleClassName}(data.id); // 设置到 values - if (formData.value) { - await formApi.setValues(formData.value); - } + await formApi.setValues(formData.value); } finally { modalApi.unlock(); } From 32758bc4c1b47f79161dd13124c53dced29afeda Mon Sep 17 00:00:00 2001 From: YunaiV Date: Tue, 7 Oct 2025 11:11:38 +0800 Subject: [PATCH 3/7] =?UTF-8?q?feat=EF=BC=9A=E3=80=90infra=20=E5=9F=BA?= =?UTF-8?q?=E7=A1=80=E8=AE=BE=E6=96=BD=E3=80=91=E7=BB=9F=E4=B8=80=20InputN?= =?UTF-8?q?umber=20=E7=9A=84=20controlsPosition=20=E5=86=99=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../codegen/vue3_vben5_antd/schema/views/data.ts.vm | 3 --- .../codegen/vue3_vben5_ele/schema/views/data.ts.vm | 9 ++++++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/yudao-module-infra/src/main/resources/codegen/vue3_vben5_antd/schema/views/data.ts.vm b/yudao-module-infra/src/main/resources/codegen/vue3_vben5_antd/schema/views/data.ts.vm index 58d64fc2c1..e2b131db1b 100644 --- a/yudao-module-infra/src/main/resources/codegen/vue3_vben5_antd/schema/views/data.ts.vm +++ b/yudao-module-infra/src/main/resources/codegen/vue3_vben5_antd/schema/views/data.ts.vm @@ -124,7 +124,6 @@ export function useFormSchema(): VbenFormSchema[] { component: 'InputNumber', componentProps: { min: 0, - controlsPosition: 'right', placeholder: '请输入${comment}', }, #end @@ -326,7 +325,6 @@ export function use${subSimpleClassName}FormSchema(): VbenFormSchema[] { component: 'InputNumber', componentProps: { min: 0, - controlsPosition: 'right', placeholder: '请输入${comment}', }, #end @@ -560,7 +558,6 @@ export function use${subSimpleClassName}GridColumns(): VxeTableGridOptions<${api component: 'InputNumber', componentProps: { min: 0, - controlsPosition: 'right', placeholder: '请输入${comment}', }, #end diff --git a/yudao-module-infra/src/main/resources/codegen/vue3_vben5_ele/schema/views/data.ts.vm b/yudao-module-infra/src/main/resources/codegen/vue3_vben5_ele/schema/views/data.ts.vm index 375a3c90ac..da9582448e 100644 --- a/yudao-module-infra/src/main/resources/codegen/vue3_vben5_ele/schema/views/data.ts.vm +++ b/yudao-module-infra/src/main/resources/codegen/vue3_vben5_ele/schema/views/data.ts.vm @@ -124,8 +124,9 @@ export function useFormSchema(): VbenFormSchema[] { component: 'InputNumber', componentProps: { min: 0, - controlsPosition: 'right', placeholder: '请输入${comment}', + controlsPosition: 'right', + class: '!w-full', }, #end }, @@ -326,8 +327,9 @@ export function use${subSimpleClassName}FormSchema(): VbenFormSchema[] { component: 'InputNumber', componentProps: { min: 0, - controlsPosition: 'right', placeholder: '请输入${comment}', + controlsPosition: 'right', + class: '!w-full', }, #end }, @@ -560,8 +562,9 @@ export function use${subSimpleClassName}GridColumns(): VxeTableGridOptions<${api component: 'InputNumber', componentProps: { min: 0, - controlsPosition: 'right', placeholder: '请输入${comment}', + controlsPosition: 'right', + class: '!w-full', }, #end }, From 120736e393d462797b56cbcab77765e05b2943b4 Mon Sep 17 00:00:00 2001 From: jason <2667446@qq.com> Date: Fri, 10 Oct 2025 10:48:54 +0800 Subject: [PATCH 4/7] =?UTF-8?q?fix:=20[BPM=20=E5=B7=A5=E4=BD=9C=E6=B5=81]?= =?UTF-8?q?=20=E9=A9=B3=E5=9B=9E=E9=A2=84=E6=B5=8B=20review=20=E4=BF=AE?= =?UTF-8?q?=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bpm/service/task/BpmTaskServiceImpl.java | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/yudao-module-bpm/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmTaskServiceImpl.java b/yudao-module-bpm/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmTaskServiceImpl.java index 34fa696d1b..7be2d53d7b 100644 --- a/yudao-module-bpm/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmTaskServiceImpl.java +++ b/yudao-module-bpm/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmTaskServiceImpl.java @@ -2,7 +2,6 @@ package cn.iocoder.yudao.module.bpm.service.task; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.convert.Convert; -import cn.hutool.core.date.DateUtil; import cn.hutool.core.lang.Assert; import cn.hutool.core.util.*; import cn.hutool.extra.spring.SpringUtil; @@ -934,9 +933,10 @@ public class BpmTaskServiceImpl implements BpmTaskService { // 3. 构建需要预测的任务流程变量 // TODO @jason:【驳回预测相关】是不是搞成一个变量,里面是 set 更简洁一点呀? - Set taskDefinitionKeyList = getNeedSimulateTaskDefinitionKeys(bpmnModel, currentTask, targetElement); - Map needSimulateVariables = convertMap(taskDefinitionKeyList, - taskId -> StrUtil.concat(false, PROCESS_INSTANCE_VARIABLE_NEED_SIMULATE_PREFIX, taskId), item -> Boolean.TRUE); + Set needSimulateTaskDefinitionKeys = getNeedSimulateTaskDefinitionKeys(bpmnModel, currentTask, targetElement); + Map needSimulateVariables = convertMap(needSimulateTaskDefinitionKeys, + key -> StrUtil.concat(false, PROCESS_INSTANCE_VARIABLE_NEED_SIMULATE_PREFIX, key), item -> Boolean.TRUE); + // 4. 执行驳回 // 使用 moveExecutionsToSingleActivityId 替换 moveActivityIdsToSingleActivityId 原因: @@ -956,22 +956,22 @@ public class BpmTaskServiceImpl implements BpmTaskService { // 1. 获取需要预测的任务的 definition key。因为当前任务还没完成,也需要预测 Set taskDefinitionKeys = CollUtil.newHashSet(currentTask.getTaskDefinitionKey()); - // 2.1 从已结束任务中找到要回退的目标任务,按时间倒序最近的一个目标任务 + // 2.1 获取已结束任务按时间倒序排序 List endTaskList = CollectionUtils.filterList( getTaskListByProcessInstanceId(currentTask.getProcessInstanceId(), Boolean.FALSE), item -> item.getEndTime() != null); - // 2.2 遍历已结束的任务,找到在 targetTask 之后生成的任务,且串行可达的任务 + // 2.2 从结束任务中找到最近一个的目标任务 HistoricTaskInstance targetTask = findFirst(endTaskList, item -> item.getTaskDefinitionKey().equals(targetElement.getId())); - // TODO @jason:【驳回预测相关】是不是 if targetTask 先判空? + if (targetTask == null) { + return taskDefinitionKeys; + } + // 2.3 遍历已结束的任务,找到在 targetTask 之后生成的任务,且串行可达的任务 endTaskList.forEach(item -> { FlowElement element = getFlowElementById(bpmnModel, item.getTaskDefinitionKey()); - // 如果已结束的任务在回退目标节点之后生成,且串行可达,则标记为需要预算节点 + // 如果已结束的任务在回退目标节点之后生成,且串行可达,则加到需要预测节点中 // TODO 串行可达的方法需要和判断可回退节点 validateTargetTaskCanReturn 分开吗? 并行网关可能会有问题。 - // TODO @jason:【驳回预测相关】这里是不是判断 element 哈? - if (targetTask != null - // TODO @jason:【驳回预测相关】这里直接 createTime 的 compare 更简单?因为不太会出现空哈。 - && DateUtil.compare(item.getCreateTime(), targetTask.getCreateTime()) > 0 + if (item.getCreateTime().compareTo(targetTask.getCreateTime()) > 0 && BpmnModelUtils.isSequentialReachable(element, targetElement, null)) { taskDefinitionKeys.add(item.getTaskDefinitionKey()); } From 2cb726449e27a3efc6522eabe2a43679f6564bbc Mon Sep 17 00:00:00 2001 From: jason <2667446@qq.com> Date: Fri, 10 Oct 2025 23:06:07 +0800 Subject: [PATCH 5/7] =?UTF-8?q?perf:=20[BPM=20=E5=B7=A5=E4=BD=9C=E6=B5=81]?= =?UTF-8?q?=20=E9=A9=B3=E5=9B=9E=E9=A2=84=E6=B5=8B=20review=20=E4=BF=AE?= =?UTF-8?q?=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bpm/service/task/BpmProcessInstanceServiceImpl.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/yudao-module-bpm/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmProcessInstanceServiceImpl.java b/yudao-module-bpm/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmProcessInstanceServiceImpl.java index 587d9969e5..eec0454c48 100644 --- a/yudao-module-bpm/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmProcessInstanceServiceImpl.java +++ b/yudao-module-bpm/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmProcessInstanceServiceImpl.java @@ -233,8 +233,11 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService needSimulateTaskDefKeysByReturn.add(StrUtil.removePrefix(key, PROCESS_INSTANCE_VARIABLE_NEED_SIMULATE_PREFIX))); } // 移除运行中的节点,运行中的节点无需预测 - // TODO @jason:是不是 foreach runActivityNodes,然后移除 needSimulateTaskDefKeysByReturn 更好?(理解成本低一点) - CollectionUtils.convertList(runActivityNodes, ActivityNode::getId).forEach(needSimulateTaskDefKeysByReturn::remove); + if (CollUtil.isNotEmpty(runActivityNodes)) { + runActivityNodes.forEach( activityNode -> { + needSimulateTaskDefKeysByReturn.remove(activityNode.getId()); + }); + } // 3.3 预测未运行节点的审批信息 List simulateActivityNodes = getSimulateApproveNodeList(startUserId, bpmnModel, From 65b811479981963bdf0ed5709e1c60387dbf3fae Mon Sep 17 00:00:00 2001 From: jason <2667446@qq.com> Date: Fri, 10 Oct 2025 23:07:40 +0800 Subject: [PATCH 6/7] =?UTF-8?q?perf:=20[BPM=20=E5=B7=A5=E4=BD=9C=E6=B5=81]?= =?UTF-8?q?=20=E9=A9=B3=E5=9B=9E=E9=A2=84=E6=B5=8B=20review=20=E4=BF=AE?= =?UTF-8?q?=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bpm/service/task/BpmProcessInstanceServiceImpl.java | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/yudao-module-bpm/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmProcessInstanceServiceImpl.java b/yudao-module-bpm/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmProcessInstanceServiceImpl.java index eec0454c48..ffca8caea2 100644 --- a/yudao-module-bpm/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmProcessInstanceServiceImpl.java +++ b/yudao-module-bpm/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmProcessInstanceServiceImpl.java @@ -2,7 +2,6 @@ package cn.iocoder.yudao.module.bpm.service.task; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.ListUtil; -import cn.hutool.core.date.DatePattern; import cn.hutool.core.date.DateUtil; import cn.hutool.core.lang.Assert; import cn.hutool.core.map.MapUtil; @@ -14,7 +13,6 @@ import cn.iocoder.yudao.framework.common.util.json.JsonUtils; import cn.iocoder.yudao.framework.common.util.object.ObjectUtils; import cn.iocoder.yudao.framework.common.util.object.PageUtils; import cn.iocoder.yudao.module.bpm.api.task.dto.BpmProcessInstanceCreateReqDTO; -import cn.iocoder.yudao.module.bpm.controller.admin.base.user.UserSimpleBaseVO; import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.model.BpmModelMetaInfoVO; import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.model.simple.BpmSimpleModelNodeVO; import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.instance.*; @@ -73,7 +71,6 @@ import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionU import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.*; import static cn.iocoder.yudao.module.bpm.controller.admin.task.vo.instance.BpmApprovalDetailRespVO.ActivityNode; import static cn.iocoder.yudao.module.bpm.enums.ErrorCodeConstants.*; -import static cn.iocoder.yudao.module.bpm.enums.task.BpmReasonEnum.REJECT_CHILD_PROCESS; import static cn.iocoder.yudao.module.bpm.framework.flowable.core.enums.BpmnModelConstants.START_USER_NODE_ID; import static cn.iocoder.yudao.module.bpm.framework.flowable.core.enums.BpmnVariableConstants.PROCESS_INSTANCE_VARIABLE_NEED_SIMULATE_PREFIX; import static cn.iocoder.yudao.module.bpm.framework.flowable.core.util.BpmnModelUtils.parseNodeType; @@ -234,9 +231,7 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService } // 移除运行中的节点,运行中的节点无需预测 if (CollUtil.isNotEmpty(runActivityNodes)) { - runActivityNodes.forEach( activityNode -> { - needSimulateTaskDefKeysByReturn.remove(activityNode.getId()); - }); + runActivityNodes.forEach( activityNode -> needSimulateTaskDefKeysByReturn.remove(activityNode.getId())); } // 3.3 预测未运行节点的审批信息 From 4fed75935fa76a68aa8008765928a7cb08d8b2fb Mon Sep 17 00:00:00 2001 From: YunaiV Date: Sun, 12 Oct 2025 11:02:03 +0800 Subject: [PATCH 7/7] =?UTF-8?q?review=EF=BC=9A=E3=80=90bpm=20=E5=B7=A5?= =?UTF-8?q?=E4=BD=9C=E6=B5=81=E3=80=91=E9=A9=B3=E5=9B=9E=E7=9A=84=E4=BC=98?= =?UTF-8?q?=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../yudao/module/bpm/service/task/BpmTaskServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/yudao-module-bpm/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmTaskServiceImpl.java b/yudao-module-bpm/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmTaskServiceImpl.java index d7ebb73561..57450a9a6b 100644 --- a/yudao-module-bpm/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmTaskServiceImpl.java +++ b/yudao-module-bpm/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmTaskServiceImpl.java @@ -940,7 +940,7 @@ public class BpmTaskServiceImpl implements BpmTaskService { // TODO @jason:【驳回预测相关】是不是搞成一个变量,里面是 set 更简洁一点呀? Set needSimulateTaskDefinitionKeys = getNeedSimulateTaskDefinitionKeys(bpmnModel, currentTask, targetElement); Map needSimulateVariables = convertMap(needSimulateTaskDefinitionKeys, - key -> StrUtil.concat(false, PROCESS_INSTANCE_VARIABLE_NEED_SIMULATE_PREFIX, key), item -> Boolean.TRUE); + key -> StrUtil.concat(false, BpmnVariableConstants.PROCESS_INSTANCE_VARIABLE_NEED_SIMULATE_PREFIX, key), item -> Boolean.TRUE); // 4. 执行驳回