From af77657a86713899cabe48aec37351734f8cfe32 Mon Sep 17 00:00:00 2001 From: gssong <1742057357@qq.com> Date: Sat, 6 Apr 2024 21:06:25 +0800 Subject: [PATCH] =?UTF-8?q?update=20=E8=B0=83=E6=95=B4=E6=B5=81=E7=A8=8B?= =?UTF-8?q?=E5=AE=9A=E4=B9=89=E9=85=8D=E7=BD=AE=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/ActTaskController.java | 2 +- .../WfDefinitionConfigController.java | 15 +++++- .../workflow/domain/WfDefinitionConfig.java | 9 +++- .../workflow/domain/bo/StartProcessBo.java | 8 +++- .../domain/bo/WfDefinitionConfigBo.java | 12 +++-- .../domain/vo/WfDefinitionConfigVo.java | 13 ++++-- .../service/IWfDefinitionConfigService.java | 26 +++++++++++ .../service/impl/ActTaskServiceImpl.java | 12 +++-- .../impl/WfDefinitionConfigServiceImpl.java | 46 +++++++++++++++++++ script/sql/flowable.sql | 3 +- script/sql/oracle/flowable.sql | 8 ++-- script/sql/postgres/flowable.sql | 9 ++-- script/sql/sqlserver/flowable.sql | 13 ++++-- 13 files changed, 150 insertions(+), 26 deletions(-) diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/ActTaskController.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/ActTaskController.java index d4949594b..aa290127a 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/ActTaskController.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/ActTaskController.java @@ -53,7 +53,7 @@ public class ActTaskController extends BaseController { @Log(title = "任务管理", businessType = BusinessType.INSERT) @RepeatSubmit() @PostMapping("/startWorkFlow") - public R> startWorkFlow(@RequestBody StartProcessBo startProcessBo) { + public R> startWorkFlow(@Validated(AddGroup.class) @RequestBody StartProcessBo startProcessBo) { Map map = actTaskService.startWorkFlow(startProcessBo); return R.ok("提交成功", map); } diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/WfDefinitionConfigController.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/WfDefinitionConfigController.java index 67e2ec442..176aba2e4 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/WfDefinitionConfigController.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/WfDefinitionConfigController.java @@ -38,7 +38,7 @@ public class WfDefinitionConfigController extends BaseController { */ @GetMapping("/getByDefId/{definitionId}") public R getByDefId(@NotBlank(message = "流程定义ID不能为空") - @PathVariable String definitionId) { + @PathVariable String definitionId) { return R.ok(wfDefinitionConfigService.getByDefId(definitionId)); } @@ -63,4 +63,17 @@ public class WfDefinitionConfigController extends BaseController { @PathVariable Long[] ids) { return toAjax(wfDefinitionConfigService.deleteByIds(List.of(ids))); } + + /** + * 查询流程定义配置排除当前查询的流程定义 + * + * @param tableName 表名 + * @param definitionId 流程定义id + */ + @GetMapping("/getByTableNameNotDefId/{tableName}/{definitionId}") + public R> getByTableNameNotDefId(@NotBlank(message = "表名不能为空") @PathVariable String tableName, + @NotBlank(message = "流程定义ID不能为空") @PathVariable String definitionId) { + return R.ok(wfDefinitionConfigService.getByTableNameNotDefId(tableName, definitionId)); + } + } diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/WfDefinitionConfig.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/WfDefinitionConfig.java index 0a6a6533d..11dcaa081 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/WfDefinitionConfig.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/WfDefinitionConfig.java @@ -28,9 +28,9 @@ public class WfDefinitionConfig extends BaseEntity { private Long id; /** - * 表单ID + * 表名 */ - private Long formId; + private String tableName; /** * 流程定义ID @@ -42,6 +42,11 @@ public class WfDefinitionConfig extends BaseEntity { */ private String processKey; + /** + * 流程版本 + */ + private Integer version; + /** * 备注 */ diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/StartProcessBo.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/StartProcessBo.java index aff3f9745..7af7935e6 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/StartProcessBo.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/StartProcessBo.java @@ -1,7 +1,9 @@ package org.dromara.workflow.domain.bo; +import jakarta.validation.constraints.NotBlank; import lombok.Data; +import org.dromara.common.core.validate.AddGroup; import java.io.Serial; import java.io.Serializable; @@ -23,12 +25,14 @@ public class StartProcessBo implements Serializable { /** * 业务唯一值id */ + @NotBlank(message = "业务ID不能为空", groups = {AddGroup.class}) private String businessKey; /** - * 流程执行key + * 表名 */ - private String processKey; + @NotBlank(message = "表名不能为空", groups = {AddGroup.class}) + private String tableName; /** * 流程变量,前端会提交一个元素{'entity': {业务详情数据对象}} diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/WfDefinitionConfigBo.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/WfDefinitionConfigBo.java index c0a14d1eb..fac17709a 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/WfDefinitionConfigBo.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/WfDefinitionConfigBo.java @@ -27,10 +27,10 @@ public class WfDefinitionConfigBo extends BaseEntity { private Long id; /** - * 表单ID + * 表名 */ - @NotNull(message = "表单ID不能为空", groups = {AddGroup.class}) - private Long formId; + @NotBlank(message = "表名不能为空", groups = {AddGroup.class}) + private String tableName; /** * 流程定义ID @@ -44,6 +44,12 @@ public class WfDefinitionConfigBo extends BaseEntity { @NotBlank(message = "流程KEY不能为空", groups = {AddGroup.class}) private String processKey; + /** + * 流程版本 + */ + @NotNull(message = "流程版本不能为空", groups = {AddGroup.class}) + private Integer version; + /** * 备注 */ diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/WfDefinitionConfigVo.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/WfDefinitionConfigVo.java index 00919f88e..9c7b0d7db 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/WfDefinitionConfigVo.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/WfDefinitionConfigVo.java @@ -31,10 +31,10 @@ public class WfDefinitionConfigVo implements Serializable { private Long id; /** - * 表单ID + * 表名 */ - @ExcelProperty(value = "表单ID") - private Long formId; + @ExcelProperty(value = "表名") + private String tableName; /** * 流程定义ID @@ -48,6 +48,13 @@ public class WfDefinitionConfigVo implements Serializable { @ExcelProperty(value = "流程KEY") private String processKey; + + /** + * 流程版本 + */ + @ExcelProperty(value = "流程版本") + private Integer version; + /** * 备注 */ diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IWfDefinitionConfigService.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IWfDefinitionConfigService.java index a80340f0e..fe5cf7ad3 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IWfDefinitionConfigService.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IWfDefinitionConfigService.java @@ -22,6 +22,32 @@ public interface IWfDefinitionConfigService { */ WfDefinitionConfigVo getByDefId(String definitionId); + /** + * 查询流程定义配置 + * + * @param tableName 表名 + * @return 结果 + */ + WfDefinitionConfigVo getByTableNameLastVersion(String tableName); + + /** + * 查询流程定义配置 + * + * @param definitionId 流程定义id + * @param tableName 表名 + * @return 结果 + */ + WfDefinitionConfigVo getByDefIdAndTableName(String definitionId, String tableName); + + /** + * 查询流程定义配置排除当前查询的流程定义 + * + * @param definitionId 流程定义id + * @param tableName 表名 + * @return 结果 + */ + List getByTableNameNotDefId(String tableName, String definitionId); + /** * 查询流程定义配置列表 * 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 e4bac73e7..08d99d689 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 @@ -30,6 +30,7 @@ import org.dromara.workflow.flowable.strategy.FlowTaskEventHandler; import org.dromara.workflow.mapper.ActHiTaskinstMapper; import org.dromara.workflow.mapper.ActTaskMapper; import org.dromara.workflow.service.IActTaskService; +import org.dromara.workflow.service.IWfDefinitionConfigService; import org.dromara.workflow.service.IWfNodeConfigService; import org.dromara.workflow.service.IWfTaskBackNodeService; import org.dromara.workflow.utils.ModelUtils; @@ -78,6 +79,7 @@ public class ActTaskServiceImpl implements IActTaskService { private final IWfTaskBackNodeService iWfTaskBackNodeService; private final ActHiTaskinstMapper actHiTaskinstMapper; private final IWfNodeConfigService iWfNodeConfigService; + private final IWfDefinitionConfigService iWfDefinitionConfigService; /** * 启动任务 @@ -106,6 +108,10 @@ public class ActTaskServiceImpl implements IActTaskService { map.put("taskId", taskResult.get(0).getId()); return map; } + WfDefinitionConfigVo wfDefinitionConfigVo = iWfDefinitionConfigService.getByTableNameLastVersion(startProcessBo.getTableName()); + if (wfDefinitionConfigVo == null) { + throw new ServiceException("请到流程定义绑定业务表名与流程KEY!"); + } // 设置启动人 identityService.setAuthenticatedUserId(String.valueOf(LoginHelper.getUserId())); Authentication.setAuthenticatedUserId(String.valueOf(LoginHelper.getUserId())); @@ -118,12 +124,12 @@ public class ActTaskServiceImpl implements IActTaskService { ProcessInstance pi; try { if (TenantHelper.isEnable()) { - pi = runtimeService.startProcessInstanceByKeyAndTenantId(startProcessBo.getProcessKey(), startProcessBo.getBusinessKey(), variables, TenantHelper.getTenantId()); + pi = runtimeService.startProcessInstanceByKeyAndTenantId(wfDefinitionConfigVo.getProcessKey(), startProcessBo.getBusinessKey(), variables, TenantHelper.getTenantId()); } else { - pi = runtimeService.startProcessInstanceByKey(startProcessBo.getProcessKey(), startProcessBo.getBusinessKey(), variables); + pi = runtimeService.startProcessInstanceByKey(wfDefinitionConfigVo.getProcessKey(), startProcessBo.getBusinessKey(), variables); } } catch (FlowableObjectNotFoundException e) { - throw new ServiceException("找不到当前【" + startProcessBo.getProcessKey() + "】流程定义!"); + throw new ServiceException("找不到当前【" + wfDefinitionConfigVo.getProcessKey() + "】流程定义!"); } // 将流程定义名称 作为 流程实例名称 runtimeService.setProcessInstanceName(pi.getProcessInstanceId(), pi.getProcessDefinitionName()); diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/WfDefinitionConfigServiceImpl.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/WfDefinitionConfigServiceImpl.java index d69f6eca7..947882570 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/WfDefinitionConfigServiceImpl.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/WfDefinitionConfigServiceImpl.java @@ -1,5 +1,6 @@ package org.dromara.workflow.service.impl; +import cn.hutool.core.collection.CollUtil; import org.dromara.common.core.utils.MapstructUtils; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import lombok.RequiredArgsConstructor; @@ -34,6 +35,49 @@ public class WfDefinitionConfigServiceImpl implements IWfDefinitionConfigService return baseMapper.selectVoOne(new LambdaQueryWrapper().eq(WfDefinitionConfig::getDefinitionId, definitionId)); } + /** + * 查询流程定义配置 + * + * @param tableName 表名 + * @return 结果 + */ + @Override + public WfDefinitionConfigVo getByTableNameLastVersion(String tableName) { + List wfDefinitionConfigVos = baseMapper.selectVoList( + new LambdaQueryWrapper().eq(WfDefinitionConfig::getTableName, tableName).orderByDesc(WfDefinitionConfig::getVersion)); + if (CollUtil.isNotEmpty(wfDefinitionConfigVos)) { + return wfDefinitionConfigVos.get(0); + } + return null; + } + + /** + * 查询流程定义配置 + * + * @param definitionId 流程定义id + * @param tableName 表名 + * @return 结果 + */ + @Override + public WfDefinitionConfigVo getByDefIdAndTableName(String definitionId, String tableName) { + return baseMapper.selectVoOne(new LambdaQueryWrapper() + .eq(WfDefinitionConfig::getDefinitionId, definitionId) + .eq(WfDefinitionConfig::getTableName, tableName)); + } + + /** + * 查询流程定义配置排除当前查询的流程定义 + * + * @param tableName 表名 + * @param definitionId 流程定义id + */ + @Override + public List getByTableNameNotDefId(String tableName, String definitionId) { + return baseMapper.selectVoList(new LambdaQueryWrapper() + .eq(WfDefinitionConfig::getTableName, tableName) + .ne(WfDefinitionConfig::getDefinitionId, definitionId)); + } + /** * 查询流程定义配置列表 */ @@ -49,6 +93,8 @@ public class WfDefinitionConfigServiceImpl implements IWfDefinitionConfigService @Transactional(rollbackFor = Exception.class) public Boolean saveOrUpdate(WfDefinitionConfigBo bo) { WfDefinitionConfig add = MapstructUtils.convert(bo, WfDefinitionConfig.class); + baseMapper.delete(new LambdaQueryWrapper().eq(WfDefinitionConfig::getTableName, bo.getTableName())); + add.setTableName(add.getTableName().toLowerCase()); boolean flag = baseMapper.insertOrUpdate(add); if (baseMapper.insertOrUpdate(add)) { bo.setId(add.getId()); diff --git a/script/sql/flowable.sql b/script/sql/flowable.sql index 36ca5c957..ce215a7dd 100644 --- a/script/sql/flowable.sql +++ b/script/sql/flowable.sql @@ -79,9 +79,10 @@ create table wf_definition_config ( id bigint not null comment '主键' primary key, - form_id bigint not null comment '表单ID', + table_name varchar(255) not null comment '表名', definition_id varchar(255) not null comment '流程定义ID', process_key varchar(255) not null comment '流程KEY', + version int(10) not null comment '流程版本', create_dept bigint null comment '创建部门', create_by bigint null comment '创建者', create_time datetime null comment '创建时间', diff --git a/script/sql/oracle/flowable.sql b/script/sql/oracle/flowable.sql index 2691d7ac3..f3c13662e 100644 --- a/script/sql/oracle/flowable.sql +++ b/script/sql/oracle/flowable.sql @@ -125,9 +125,10 @@ create table WF_DEFINITION_CONFIG ID NUMBER(20) NOT NULL CONSTRAINT PK_WF_DEFINITION_CONFIG PRIMARY KEY, - FORM_ID NUMBER(20) NOT NULL, + TABLE_NAME VARCHAR2(255) NOT NULL, DEFINITION_ID VARCHAR2(255) NOT NULL, - PROCESS_KEY VARCHAR2(255) NOT NULL, + PROCESS_KEY VARCHAR2(255) NOT NULL, + VERSION NUMBER(10) NOT NULL, TENANT_ID VARCHAR2(20), CREATE_DEPT NUMBER(20), CREATE_BY NUMBER(20), @@ -139,9 +140,10 @@ create table WF_DEFINITION_CONFIG ); comment on table WF_DEFINITION_CONFIG is '流程定义配置' comment on column WF_DEFINITION_CONFIG.ID is '主键' -comment on column WF_DEFINITION_CONFIG.FORM_ID is '表单ID' +comment on column WF_DEFINITION_CONFIG.TABLE_NAME is '表名' comment on column WF_DEFINITION_CONFIG.DEFINITION_ID is '流程定义ID' comment on column WF_DEFINITION_CONFIG.PROCESS_KEY is '流程KEY' +comment on column WF_DEFINITION_CONFIG.VERSION is '流程版本' comment on column WF_DEFINITION_CONFIG.TENANT_ID is '租户编号' comment on column WF_DEFINITION_CONFIG.CREATE_DEPT is '创建部门' comment on column WF_DEFINITION_CONFIG.CREATE_BY is '创建者' diff --git a/script/sql/postgres/flowable.sql b/script/sql/postgres/flowable.sql index c67e527c4..a44b051e7 100644 --- a/script/sql/postgres/flowable.sql +++ b/script/sql/postgres/flowable.sql @@ -169,9 +169,10 @@ create table wf_definition_config id bigint not null constraint pk_wf_definition_config primary key, - form_id bigint(20) not null, + table_name varchar(255) not null, definition_id varchar(255) not null, - process_key varchar(255) not null, + process_key varchar(255) not null, + version bigint not null, tenant_id varchar(20), create_dept bigint, create_by bigint, @@ -184,12 +185,14 @@ comment on table wf_definition_config is '流程定义配置'; comment on column wf_definition_config.id is '主键'; -comment on column wf_definition_config.form_id is '表单ID'; +comment on column wf_definition_config.table_name is '表名'; comment on column wf_definition_config.definition_id is '流程定义ID'; comment on column wf_definition_config.process_key is '流程KEY'; +comment on column wf_definition_config.version is '流程版本'; + comment on column wf_definition_config.tenant_id is '租户id'; comment on column wf_definition_config.create_dept is '创建部门'; diff --git a/script/sql/sqlserver/flowable.sql b/script/sql/sqlserver/flowable.sql index b3651bbcc..1b09fc9cd 100644 --- a/script/sql/sqlserver/flowable.sql +++ b/script/sql/sqlserver/flowable.sql @@ -215,11 +215,12 @@ go create table wf_definition_config ( id bigint not null primary key, - form_id bigint not null, - definition_id nvarchar(255) + table_name nvarchar(255) not null, + definition_id nvarchar(255) not null constraint uni_definition_id unique, process_key nvarchar(255) not null, + version bigint not null, tenant_id nvarchar(20), create_dept bigint, create_by bigint, @@ -235,8 +236,8 @@ go exec sp_addextendedproperty 'MS_Description', N'主键', 'SCHEMA', 'dbo', 'TABLE', 'wf_definition_config', 'COLUMN', 'id' go -exec sp_addextendedproperty 'MS_Description', N'表单ID', 'SCHEMA', 'dbo', 'TABLE', 'wf_definition_config', 'COLUMN', - 'form_id' +exec sp_addextendedproperty 'MS_Description', N'表名', 'SCHEMA', 'dbo', 'TABLE', 'wf_definition_config', 'COLUMN', + 'table_name' go exec sp_addextendedproperty 'MS_Description', N'流程定义ID', 'SCHEMA', 'dbo', 'TABLE', 'wf_definition_config', 'COLUMN', @@ -247,6 +248,10 @@ exec sp_addextendedproperty 'MS_Description', N'流程KEY', 'SCHEMA', 'dbo', 'TA 'process_key' go +exec sp_addextendedproperty 'MS_Description', N'流程版本', 'SCHEMA', 'dbo', 'TABLE', 'wf_definition_config', 'COLUMN', + 'version' +go + exec sp_addextendedproperty 'MS_Description', N'租户编号', 'SCHEMA', 'dbo', 'TABLE', 'wf_definition_config', 'COLUMN', 'tenant_id' go