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();
}