update 调整流程定义配置逻辑

This commit is contained in:
gssong 2024-04-06 21:06:25 +08:00
parent eb03afef41
commit af77657a86
13 changed files with 150 additions and 26 deletions

View File

@ -53,7 +53,7 @@ public class ActTaskController extends BaseController {
@Log(title = "任务管理", businessType = BusinessType.INSERT) @Log(title = "任务管理", businessType = BusinessType.INSERT)
@RepeatSubmit() @RepeatSubmit()
@PostMapping("/startWorkFlow") @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); Map<String, Object> map = actTaskService.startWorkFlow(startProcessBo);
return R.ok("提交成功", map); return R.ok("提交成功", map);
} }

View File

@ -38,7 +38,7 @@ public class WfDefinitionConfigController extends BaseController {
*/ */
@GetMapping("/getByDefId/{definitionId}") @GetMapping("/getByDefId/{definitionId}")
public R<WfDefinitionConfigVo> getByDefId(@NotBlank(message = "流程定义ID不能为空") public R<WfDefinitionConfigVo> getByDefId(@NotBlank(message = "流程定义ID不能为空")
@PathVariable String definitionId) { @PathVariable String definitionId) {
return R.ok(wfDefinitionConfigService.getByDefId(definitionId)); return R.ok(wfDefinitionConfigService.getByDefId(definitionId));
} }
@ -63,4 +63,17 @@ public class WfDefinitionConfigController extends BaseController {
@PathVariable Long[] ids) { @PathVariable Long[] ids) {
return toAjax(wfDefinitionConfigService.deleteByIds(List.of(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));
}
} }

View File

@ -28,9 +28,9 @@ public class WfDefinitionConfig extends BaseEntity {
private Long id; private Long id;
/** /**
* 单ID *
*/ */
private Long formId; private String tableName;
/** /**
* 流程定义ID * 流程定义ID
@ -42,6 +42,11 @@ public class WfDefinitionConfig extends BaseEntity {
*/ */
private String processKey; private String processKey;
/**
* 流程版本
*/
private Integer version;
/** /**
* 备注 * 备注
*/ */

View File

@ -1,7 +1,9 @@
package org.dromara.workflow.domain.bo; package org.dromara.workflow.domain.bo;
import jakarta.validation.constraints.NotBlank;
import lombok.Data; import lombok.Data;
import org.dromara.common.core.validate.AddGroup;
import java.io.Serial; import java.io.Serial;
import java.io.Serializable; import java.io.Serializable;
@ -23,12 +25,14 @@ public class StartProcessBo implements Serializable {
/** /**
* 业务唯一值id * 业务唯一值id
*/ */
@NotBlank(message = "业务ID不能为空", groups = {AddGroup.class})
private String businessKey; private String businessKey;
/** /**
* 流程执行key * 表名
*/ */
private String processKey; @NotBlank(message = "表名不能为空", groups = {AddGroup.class})
private String tableName;
/** /**
* 流程变量前端会提交一个元素{'entity': {业务详情数据对象}} * 流程变量前端会提交一个元素{'entity': {业务详情数据对象}}

View File

@ -27,10 +27,10 @@ public class WfDefinitionConfigBo extends BaseEntity {
private Long id; private Long id;
/** /**
* 单ID *
*/ */
@NotNull(message = "表单ID不能为空", groups = {AddGroup.class}) @NotBlank(message = "表名不能为空", groups = {AddGroup.class})
private Long formId; private String tableName;
/** /**
* 流程定义ID * 流程定义ID
@ -44,6 +44,12 @@ public class WfDefinitionConfigBo extends BaseEntity {
@NotBlank(message = "流程KEY不能为空", groups = {AddGroup.class}) @NotBlank(message = "流程KEY不能为空", groups = {AddGroup.class})
private String processKey; private String processKey;
/**
* 流程版本
*/
@NotNull(message = "流程版本不能为空", groups = {AddGroup.class})
private Integer version;
/** /**
* 备注 * 备注
*/ */

View File

@ -31,10 +31,10 @@ public class WfDefinitionConfigVo implements Serializable {
private Long id; private Long id;
/** /**
* 单ID *
*/ */
@ExcelProperty(value = "单ID") @ExcelProperty(value = "")
private Long formId; private String tableName;
/** /**
* 流程定义ID * 流程定义ID
@ -48,6 +48,13 @@ public class WfDefinitionConfigVo implements Serializable {
@ExcelProperty(value = "流程KEY") @ExcelProperty(value = "流程KEY")
private String processKey; private String processKey;
/**
* 流程版本
*/
@ExcelProperty(value = "流程版本")
private Integer version;
/** /**
* 备注 * 备注
*/ */

View File

@ -22,6 +22,32 @@ public interface IWfDefinitionConfigService {
*/ */
WfDefinitionConfigVo getByDefId(String definitionId); 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);
/** /**
* 查询流程定义配置列表 * 查询流程定义配置列表
* *

View File

@ -30,6 +30,7 @@ import org.dromara.workflow.flowable.strategy.FlowTaskEventHandler;
import org.dromara.workflow.mapper.ActHiTaskinstMapper; import org.dromara.workflow.mapper.ActHiTaskinstMapper;
import org.dromara.workflow.mapper.ActTaskMapper; import org.dromara.workflow.mapper.ActTaskMapper;
import org.dromara.workflow.service.IActTaskService; import org.dromara.workflow.service.IActTaskService;
import org.dromara.workflow.service.IWfDefinitionConfigService;
import org.dromara.workflow.service.IWfNodeConfigService; import org.dromara.workflow.service.IWfNodeConfigService;
import org.dromara.workflow.service.IWfTaskBackNodeService; import org.dromara.workflow.service.IWfTaskBackNodeService;
import org.dromara.workflow.utils.ModelUtils; import org.dromara.workflow.utils.ModelUtils;
@ -78,6 +79,7 @@ public class ActTaskServiceImpl implements IActTaskService {
private final IWfTaskBackNodeService iWfTaskBackNodeService; private final IWfTaskBackNodeService iWfTaskBackNodeService;
private final ActHiTaskinstMapper actHiTaskinstMapper; private final ActHiTaskinstMapper actHiTaskinstMapper;
private final IWfNodeConfigService iWfNodeConfigService; private final IWfNodeConfigService iWfNodeConfigService;
private final IWfDefinitionConfigService iWfDefinitionConfigService;
/** /**
* 启动任务 * 启动任务
@ -106,6 +108,10 @@ public class ActTaskServiceImpl implements IActTaskService {
map.put("taskId", taskResult.get(0).getId()); map.put("taskId", taskResult.get(0).getId());
return map; return map;
} }
WfDefinitionConfigVo wfDefinitionConfigVo = iWfDefinitionConfigService.getByTableNameLastVersion(startProcessBo.getTableName());
if (wfDefinitionConfigVo == null) {
throw new ServiceException("请到流程定义绑定业务表名与流程KEY");
}
// 设置启动人 // 设置启动人
identityService.setAuthenticatedUserId(String.valueOf(LoginHelper.getUserId())); identityService.setAuthenticatedUserId(String.valueOf(LoginHelper.getUserId()));
Authentication.setAuthenticatedUserId(String.valueOf(LoginHelper.getUserId())); Authentication.setAuthenticatedUserId(String.valueOf(LoginHelper.getUserId()));
@ -118,12 +124,12 @@ public class ActTaskServiceImpl implements IActTaskService {
ProcessInstance pi; ProcessInstance pi;
try { try {
if (TenantHelper.isEnable()) { if (TenantHelper.isEnable()) {
pi = runtimeService.startProcessInstanceByKeyAndTenantId(startProcessBo.getProcessKey(), startProcessBo.getBusinessKey(), variables, TenantHelper.getTenantId()); pi = runtimeService.startProcessInstanceByKeyAndTenantId(wfDefinitionConfigVo.getProcessKey(), startProcessBo.getBusinessKey(), variables, TenantHelper.getTenantId());
} else { } else {
pi = runtimeService.startProcessInstanceByKey(startProcessBo.getProcessKey(), startProcessBo.getBusinessKey(), variables); pi = runtimeService.startProcessInstanceByKey(wfDefinitionConfigVo.getProcessKey(), startProcessBo.getBusinessKey(), variables);
} }
} catch (FlowableObjectNotFoundException e) { } catch (FlowableObjectNotFoundException e) {
throw new ServiceException("找不到当前【" + startProcessBo.getProcessKey() + "】流程定义!"); throw new ServiceException("找不到当前【" + wfDefinitionConfigVo.getProcessKey() + "】流程定义!");
} }
// 将流程定义名称 作为 流程实例名称 // 将流程定义名称 作为 流程实例名称
runtimeService.setProcessInstanceName(pi.getProcessInstanceId(), pi.getProcessDefinitionName()); runtimeService.setProcessInstanceName(pi.getProcessInstanceId(), pi.getProcessDefinitionName());

View File

@ -1,5 +1,6 @@
package org.dromara.workflow.service.impl; package org.dromara.workflow.service.impl;
import cn.hutool.core.collection.CollUtil;
import org.dromara.common.core.utils.MapstructUtils; import org.dromara.common.core.utils.MapstructUtils;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
@ -34,6 +35,49 @@ public class WfDefinitionConfigServiceImpl implements IWfDefinitionConfigService
return baseMapper.selectVoOne(new LambdaQueryWrapper<WfDefinitionConfig>().eq(WfDefinitionConfig::getDefinitionId, definitionId)); return baseMapper.selectVoOne(new LambdaQueryWrapper<WfDefinitionConfig>().eq(WfDefinitionConfig::getDefinitionId, definitionId));
} }
/**
* 查询流程定义配置
*
* @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));
}
/** /**
* 查询流程定义配置列表 * 查询流程定义配置列表
*/ */
@ -49,6 +93,8 @@ public class WfDefinitionConfigServiceImpl implements IWfDefinitionConfigService
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public Boolean saveOrUpdate(WfDefinitionConfigBo bo) { public Boolean saveOrUpdate(WfDefinitionConfigBo bo) {
WfDefinitionConfig add = MapstructUtils.convert(bo, WfDefinitionConfig.class); 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); boolean flag = baseMapper.insertOrUpdate(add);
if (baseMapper.insertOrUpdate(add)) { if (baseMapper.insertOrUpdate(add)) {
bo.setId(add.getId()); bo.setId(add.getId());

View File

@ -79,9 +79,10 @@ create table wf_definition_config
( (
id bigint not null comment '主键' id bigint not null comment '主键'
primary key, primary key,
form_id bigint not null comment '表单ID', table_name varchar(255) not null comment '表名',
definition_id varchar(255) not null comment '流程定义ID', definition_id varchar(255) not null comment '流程定义ID',
process_key varchar(255) not null comment '流程KEY', process_key varchar(255) not null comment '流程KEY',
version int(10) not null comment '流程版本',
create_dept bigint null comment '创建部门', create_dept bigint null comment '创建部门',
create_by bigint null comment '创建者', create_by bigint null comment '创建者',
create_time datetime null comment '创建时间', create_time datetime null comment '创建时间',

View File

@ -125,9 +125,10 @@ create table WF_DEFINITION_CONFIG
ID NUMBER(20) NOT NULL ID NUMBER(20) NOT NULL
CONSTRAINT PK_WF_DEFINITION_CONFIG CONSTRAINT PK_WF_DEFINITION_CONFIG
PRIMARY KEY, PRIMARY KEY,
FORM_ID NUMBER(20) NOT NULL, TABLE_NAME VARCHAR2(255) NOT NULL,
DEFINITION_ID 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), TENANT_ID VARCHAR2(20),
CREATE_DEPT NUMBER(20), CREATE_DEPT NUMBER(20),
CREATE_BY NUMBER(20), CREATE_BY NUMBER(20),
@ -139,9 +140,10 @@ create table WF_DEFINITION_CONFIG
); );
comment on table WF_DEFINITION_CONFIG is '流程定义配置' comment on table WF_DEFINITION_CONFIG is '流程定义配置'
comment on column WF_DEFINITION_CONFIG.ID 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.DEFINITION_ID is '流程定义ID'
comment on column WF_DEFINITION_CONFIG.PROCESS_KEY is '流程KEY' 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.TENANT_ID is '租户编号'
comment on column WF_DEFINITION_CONFIG.CREATE_DEPT is '创建部门' comment on column WF_DEFINITION_CONFIG.CREATE_DEPT is '创建部门'
comment on column WF_DEFINITION_CONFIG.CREATE_BY is '创建者' comment on column WF_DEFINITION_CONFIG.CREATE_BY is '创建者'

View File

@ -169,9 +169,10 @@ create table wf_definition_config
id bigint not null id bigint not null
constraint pk_wf_definition_config constraint pk_wf_definition_config
primary key, primary key,
form_id bigint(20) not null, table_name varchar(255) not null,
definition_id 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), tenant_id varchar(20),
create_dept bigint, create_dept bigint,
create_by 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.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.definition_id is '流程定义ID';
comment on column wf_definition_config.process_key is '流程KEY'; 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.tenant_id is '租户id';
comment on column wf_definition_config.create_dept is '创建部门'; comment on column wf_definition_config.create_dept is '创建部门';

View File

@ -215,11 +215,12 @@ go
create table wf_definition_config create table wf_definition_config
( (
id bigint not null primary key, id bigint not null primary key,
form_id bigint not null, table_name nvarchar(255) not null,
definition_id nvarchar(255) definition_id nvarchar(255) not null
constraint uni_definition_id constraint uni_definition_id
unique, unique,
process_key nvarchar(255) not null, process_key nvarchar(255) not null,
version bigint not null,
tenant_id nvarchar(20), tenant_id nvarchar(20),
create_dept bigint, create_dept bigint,
create_by bigint, create_by bigint,
@ -235,8 +236,8 @@ go
exec sp_addextendedproperty 'MS_Description', N'主键', 'SCHEMA', 'dbo', 'TABLE', 'wf_definition_config', 'COLUMN', 'id' exec sp_addextendedproperty 'MS_Description', N'主键', 'SCHEMA', 'dbo', 'TABLE', 'wf_definition_config', 'COLUMN', 'id'
go go
exec sp_addextendedproperty 'MS_Description', N'单ID', 'SCHEMA', 'dbo', 'TABLE', 'wf_definition_config', 'COLUMN', exec sp_addextendedproperty 'MS_Description', N'', 'SCHEMA', 'dbo', 'TABLE', 'wf_definition_config', 'COLUMN',
'form_id' 'table_name'
go go
exec sp_addextendedproperty 'MS_Description', N'流程定义ID', 'SCHEMA', 'dbo', 'TABLE', 'wf_definition_config', 'COLUMN', 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' 'process_key'
go 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', exec sp_addextendedproperty 'MS_Description', N'租户编号', 'SCHEMA', 'dbo', 'TABLE', 'wf_definition_config', 'COLUMN',
'tenant_id' 'tenant_id'
go go