From af77657a86713899cabe48aec37351734f8cfe32 Mon Sep 17 00:00:00 2001 From: gssong <1742057357@qq.com> Date: 星期六, 06 四月 2024 21:06:25 +0800 Subject: [PATCH] update 调整流程定义配置逻辑 --- ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/ActTaskController.java | 2 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IWfDefinitionConfigService.java | 26 ++++++++ ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/WfDefinitionConfigVo.java | 13 +++- ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/WfDefinitionConfigController.java | 15 ++++ ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActTaskServiceImpl.java | 12 +++- script/sql/flowable.sql | 3 script/sql/sqlserver/flowable.sql | 13 +++- ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/StartProcessBo.java | 8 ++ ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/WfDefinitionConfigServiceImpl.java | 46 +++++++++++++++ script/sql/oracle/flowable.sql | 8 +- ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/WfDefinitionConfig.java | 9 ++ ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/WfDefinitionConfigBo.java | 12 +++- script/sql/postgres/flowable.sql | 9 ++- 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 d494959..aa29012 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 @@ @Log(title = "浠诲姟绠$悊", businessType = BusinessType.INSERT) @RepeatSubmit() @PostMapping("/startWorkFlow") - public R<Map<String, Object>> startWorkFlow(@RequestBody StartProcessBo startProcessBo) { + public R<Map<String, Object>> startWorkFlow(@Validated(AddGroup.class) @RequestBody StartProcessBo startProcessBo) { Map<String, Object> 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 67e2ec4..176aba2 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 @@ */ @GetMapping("/getByDefId/{definitionId}") public R<WfDefinitionConfigVo> getByDefId(@NotBlank(message = "娴佺▼瀹氫箟ID涓嶈兘涓虹┖") - @PathVariable String definitionId) { + @PathVariable String definitionId) { return R.ok(wfDefinitionConfigService.getByDefId(definitionId)); } @@ -63,4 +63,17 @@ @PathVariable Long[] ids) { return toAjax(wfDefinitionConfigService.deleteByIds(List.of(ids))); } + + /** + * 鏌ヨ娴佺▼瀹氫箟閰嶇疆鎺掗櫎褰撳墠鏌ヨ鐨勬祦绋嬪畾涔� + * + * @param tableName 琛ㄥ悕 + * @param definitionId 娴佺▼瀹氫箟id + */ + @GetMapping("/getByTableNameNotDefId/{tableName}/{definitionId}") + public R<List<WfDefinitionConfigVo>> 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 0a6a653..11dcaa0 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 @@ private Long id; /** - * 琛ㄥ崟ID + * 琛ㄥ悕 */ - private Long formId; + private String tableName; /** * 娴佺▼瀹氫箟ID @@ -43,6 +43,11 @@ private String processKey; /** + * 娴佺▼鐗堟湰 + */ + private Integer version; + + /** * 澶囨敞 */ private String remark; 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 aff3f97..7af7935 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 @@ /** * 涓氬姟鍞竴鍊糹d */ + @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 c0a14d1..fac1770 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 @@ private Long id; /** - * 琛ㄥ崟ID + * 琛ㄥ悕 */ - @NotNull(message = "琛ㄥ崟ID涓嶈兘涓虹┖", groups = {AddGroup.class}) - private Long formId; + @NotBlank(message = "琛ㄥ悕涓嶈兘涓虹┖", groups = {AddGroup.class}) + private String tableName; /** * 娴佺▼瀹氫箟ID @@ -45,6 +45,12 @@ private String processKey; /** + * 娴佺▼鐗堟湰 + */ + @NotNull(message = "娴佺▼鐗堟湰涓嶈兘涓虹┖", groups = {AddGroup.class}) + private Integer version; + + /** * 澶囨敞 */ private String remark; 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 00919f8..9c7b0d7 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 @@ private Long id; /** - * 琛ㄥ崟ID + * 琛ㄥ悕 */ - @ExcelProperty(value = "琛ㄥ崟ID") - private Long formId; + @ExcelProperty(value = "琛ㄥ悕") + private String tableName; /** * 娴佺▼瀹氫箟ID @@ -48,6 +48,13 @@ @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 a80340f..fe5cf7a 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 @@ -23,6 +23,32 @@ 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<WfDefinitionConfigVo> getByTableNameNotDefId(String tableName, String definitionId); + + /** * 鏌ヨ娴佺▼瀹氫箟閰嶇疆鍒楄〃 * * @param definitionIds 娴佺▼瀹氫箟id 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 e4bac73..08d99d6 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.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 @@ private final IWfTaskBackNodeService iWfTaskBackNodeService; private final ActHiTaskinstMapper actHiTaskinstMapper; private final IWfNodeConfigService iWfNodeConfigService; + private final IWfDefinitionConfigService iWfDefinitionConfigService; /** * 鍚姩浠诲姟 @@ -106,6 +108,10 @@ map.put("taskId", taskResult.get(0).getId()); return map; } + WfDefinitionConfigVo wfDefinitionConfigVo = iWfDefinitionConfigService.getByTableNameLastVersion(startProcessBo.getTableName()); + if (wfDefinitionConfigVo == null) { + throw new ServiceException("璇峰埌娴佺▼瀹氫箟缁戝畾涓氬姟琛ㄥ悕涓庢祦绋婯EY锛�"); + } // 璁剧疆鍚姩浜� identityService.setAuthenticatedUserId(String.valueOf(LoginHelper.getUserId())); Authentication.setAuthenticatedUserId(String.valueOf(LoginHelper.getUserId())); @@ -118,12 +124,12 @@ 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 d69f6ec..9478825 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; @@ -35,6 +36,49 @@ } /** + * 鏌ヨ娴佺▼瀹氫箟閰嶇疆 + * + * @param tableName 琛ㄥ悕 + * @return 缁撴灉 + */ + @Override + public WfDefinitionConfigVo getByTableNameLastVersion(String tableName) { + List<WfDefinitionConfigVo> wfDefinitionConfigVos = baseMapper.selectVoList( + new LambdaQueryWrapper<WfDefinitionConfig>().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<WfDefinitionConfig>() + .eq(WfDefinitionConfig::getDefinitionId, definitionId) + .eq(WfDefinitionConfig::getTableName, tableName)); + } + + /** + * 鏌ヨ娴佺▼瀹氫箟閰嶇疆鎺掗櫎褰撳墠鏌ヨ鐨勬祦绋嬪畾涔� + * + * @param tableName 琛ㄥ悕 + * @param definitionId 娴佺▼瀹氫箟id + */ + @Override + public List<WfDefinitionConfigVo> getByTableNameNotDefId(String tableName, String definitionId) { + return baseMapper.selectVoList(new LambdaQueryWrapper<WfDefinitionConfig>() + .eq(WfDefinitionConfig::getTableName, tableName) + .ne(WfDefinitionConfig::getDefinitionId, definitionId)); + } + + /** * 鏌ヨ娴佺▼瀹氫箟閰嶇疆鍒楄〃 */ @Override @@ -49,6 +93,8 @@ @Transactional(rollbackFor = Exception.class) public Boolean saveOrUpdate(WfDefinitionConfigBo bo) { WfDefinitionConfig add = MapstructUtils.convert(bo, WfDefinitionConfig.class); + baseMapper.delete(new LambdaQueryWrapper<WfDefinitionConfig>().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 36ca5c9..ce215a7 100644 --- a/script/sql/flowable.sql +++ b/script/sql/flowable.sql @@ -79,9 +79,10 @@ ( 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 2691d7a..f3c1366 100644 --- a/script/sql/oracle/flowable.sql +++ b/script/sql/oracle/flowable.sql @@ -125,9 +125,10 @@ 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 @@ ); 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 c67e527..a44b051 100644 --- a/script/sql/postgres/flowable.sql +++ b/script/sql/postgres/flowable.sql @@ -169,9 +169,10 @@ 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 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 b3651bb..1b09fc9 100644 --- a/script/sql/sqlserver/flowable.sql +++ b/script/sql/sqlserver/flowable.sql @@ -215,11 +215,12 @@ 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 @@ 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 @@ '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 -- Gitblit v1.9.3