From de297e3a78d5a331e5d51ae0f28f328d40796871 Mon Sep 17 00:00:00 2001 From: LesanOuO <1960681385@qq.com> Date: Thu, 23 Jan 2025 12:06:12 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20BPM-=E6=9B=B4=E5=A4=9A=E8=AE=BE?= =?UTF-8?q?=E7=BD=AE-=E6=A0=87=E9=A2=98=E8=AE=BE=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../definition/vo/model/BpmModelMetaInfoVO.java | 17 +++++++++++++++++ .../definition/BpmProcessDefinitionInfoDO.java | 6 ++++++ .../core/enums/BpmnVariableConstants.java | 8 ++++++++ .../task/BpmProcessInstanceServiceImpl.java | 16 ++++++++++++++-- 4 files changed, 45 insertions(+), 2 deletions(-) diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/definition/vo/model/BpmModelMetaInfoVO.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/definition/vo/model/BpmModelMetaInfoVO.java index eb42c73e55..dd33fa0573 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/definition/vo/model/BpmModelMetaInfoVO.java +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/definition/vo/model/BpmModelMetaInfoVO.java @@ -74,6 +74,9 @@ public class BpmModelMetaInfoVO { @InEnum(BpmAutoApproveTypeEnum.class) private Integer autoApprovalType; + @Schema(description = "标题设置", example = "{}") + private CustomTitleSetting customTitleSetting; + @Schema(description = "流程 ID 规则") @Data @Valid @@ -98,4 +101,18 @@ public class BpmModelMetaInfoVO { } + @Schema(description = "标题设置") + @Data + @Valid + public static class CustomTitleSetting { + + @Schema(description = "是否自定义", example = "false") + @NotNull(message = "是否自定义不能为空") + private Boolean enable; + + @Schema(description = "标题", example = "流程标题") + private String title; + + } + } diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/definition/BpmProcessDefinitionInfoDO.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/definition/BpmProcessDefinitionInfoDO.java index 359c7042f4..223f3be689 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/definition/BpmProcessDefinitionInfoDO.java +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/definition/BpmProcessDefinitionInfoDO.java @@ -170,4 +170,10 @@ public class BpmProcessDefinitionInfoDO extends BaseDO { */ private Integer autoApprovalType; + /** + * 标题设置 + */ + @TableField(typeHandler = JacksonTypeHandler.class) + private BpmModelMetaInfoVO.CustomTitleSetting customTitleSetting; + } diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/framework/flowable/core/enums/BpmnVariableConstants.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/framework/flowable/core/enums/BpmnVariableConstants.java index 0f3e4c2079..10e0e3ab8e 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/framework/flowable/core/enums/BpmnVariableConstants.java +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/framework/flowable/core/enums/BpmnVariableConstants.java @@ -50,6 +50,14 @@ public class BpmnVariableConstants { * @see Flowable/Activiti之SkipExpression 完成自动审批 */ public static final String PROCESS_INSTANCE_SKIP_EXPRESSION_ENABLED = "_FLOWABLE_SKIP_EXPRESSION_ENABLED"; + /** + * 流程实例的变量 - 流程开始时间 + */ + public static final String PROCESS_START_TIME = "PROCESS_START_TIME"; + /** + * 流程实例的变量 - 流程定义名称 + */ + public static final String PROCESS_DEFINITION_NAME = "PROCESS_DEFINITION_NAME"; /** * 任务的变量 - 状态 diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmProcessInstanceServiceImpl.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmProcessInstanceServiceImpl.java index 291cd152e1..954b3771d2 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmProcessInstanceServiceImpl.java +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmProcessInstanceServiceImpl.java @@ -2,6 +2,7 @@ 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.DateUtil; import cn.hutool.core.lang.Assert; import cn.hutool.core.util.ArrayUtil; import cn.hutool.core.util.ObjectUtil; @@ -610,14 +611,25 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService ProcessInstanceBuilder processInstanceBuilder = runtimeService.createProcessInstanceBuilder() .processDefinitionId(definition.getId()) .businessKey(businessKey) - .name(definition.getName().trim()) .variables(variables); // 3.1 创建流程 ID BpmModelMetaInfoVO.ProcessIdRule processIdRule = processDefinitionInfo.getProcessIdRule(); if (processIdRule != null && Boolean.TRUE.equals(processIdRule.getEnable())) { processInstanceBuilder.predefineProcessInstanceId(processIdRedisDAO.generate(processIdRule)); } - // 3.2 发起流程实例 + // 3.2 流程名称 + BpmModelMetaInfoVO.CustomTitleSetting customTitleSetting = processDefinitionInfo.getCustomTitleSetting(); + if (customTitleSetting != null && Boolean.TRUE.equals(customTitleSetting.getEnable())) { + AdminUserRespDTO user = adminUserApi.getUser(userId); + Map cloneVariables = ObjectUtil.clone(variables); + cloneVariables.put(BpmnVariableConstants.PROCESS_INSTANCE_VARIABLE_START_USER_ID, user.getNickname()); + cloneVariables.put(BpmnVariableConstants.PROCESS_START_TIME, DateUtil.now()); + cloneVariables.put(BpmnVariableConstants.PROCESS_DEFINITION_NAME, definition.getName().trim()); + processInstanceBuilder.name(StrUtil.format(customTitleSetting.getTitle(), cloneVariables)); + } else { + processInstanceBuilder.name(definition.getName().trim()); + } + // 3.3 发起流程实例 ProcessInstance instance = processInstanceBuilder.start(); return instance.getId(); }