内容
1、支持并行分支
2、撤回/废弃/驳回 等内置按钮的可配置化
3、节点审批人身份策略支持(为空跳过/相邻跳过)
步骤
数据库脚本
CREATE TABLE state_machine_task_his (
id varchar(36) NOT NULL, -- 主键
def_id varchar(36) NOT NULL, -- 状态机定义
transaction_id varchar(256) NOT NULL, -- 业务事务ID
crt_user varchar(100) NULL, -- 创建人
crt_name varchar(100) NULL, -- 创建人姓名
crt_host varchar(100) NULL, -- 创建主机
crt_time timestamp NULL, -- 创建时间
upd_user varchar(100) NULL, -- 最后更新人
upd_name varchar(100) NULL, -- 最后更新人姓名
upd_host varchar(100) NULL, -- 最后更新主机
upd_time timestamp NULL, -- 最后更新时间
start_time timestamp NULL, -- 开始时间
task_id varchar(100) NULL, -- 执行实例ID
source_state_code varchar(256) NULL, -- 开始节点编码
source_state_name varchar(256) NULL, -- 开始节点名称
target_state_code varchar(256) NULL, -- 结束节点编码
target_state_name varchar(256) NULL, -- 结束节点名称
parent_task_id varchar(100) NULL, -- 父执行实例ID
end_time timestamp NULL, -- 结束时间
event_code varchar(256) NULL, -- 操作事件编码
event_name varchar(256) NULL, -- 操作事件名称
assignee varchar(2000) NULL, -- 签收人或被委托-实际操作人
owner varchar(2000) NULL, -- 实际签收人,任务的拥有者
active_type varchar(100) NULL, -- 当前节点类型(suspend/splitNode/joinNode)
PRIMARY KEY (id)
);
COMMENT ON COLUMN state_machine_task_his.id IS '主键';
COMMENT ON COLUMN state_machine_task_his.def_id IS '状态机定义';
COMMENT ON COLUMN state_machine_task_his.transaction_id IS '业务事务ID';
COMMENT ON COLUMN state_machine_task_his.crt_user IS '创建人';
COMMENT ON COLUMN state_machine_task_his.crt_name IS '创建人姓名';
COMMENT ON COLUMN state_machine_task_his.crt_host IS '创建主机';
COMMENT ON COLUMN state_machine_task_his.crt_time IS '创建时间';
COMMENT ON COLUMN state_machine_task_his.upd_user IS '最后更新人';
COMMENT ON COLUMN state_machine_task_his.upd_name IS '最后更新人姓名';
COMMENT ON COLUMN state_machine_task_his.upd_host IS '最后更新主机';
COMMENT ON COLUMN state_machine_task_his.upd_time IS '最后更新时间';
COMMENT ON COLUMN state_machine_task_his.start_time IS '开始时间';
COMMENT ON COLUMN state_machine_task_his.task_id IS '执行实例ID';
COMMENT ON COLUMN state_machine_task_his.source_state_code IS '开始节点编码';
COMMENT ON COLUMN state_machine_task_his.source_state_name IS '开始节点名称';
COMMENT ON COLUMN state_machine_task_his.target_state_code IS '结束节点编码';
COMMENT ON COLUMN state_machine_task_his.target_state_name IS '结束节点名称';
COMMENT ON COLUMN state_machine_task_his.parent_task_id IS '父执行实例ID';
COMMENT ON COLUMN state_machine_task_his.end_time IS '结束时间';
COMMENT ON COLUMN state_machine_task_his.event_code IS '操作事件编码';
COMMENT ON COLUMN state_machine_task_his.event_name IS '操作事件名称';
COMMENT ON COLUMN state_machine_task_his.assignee IS '签收人或被委托-实际操作人';
COMMENT ON COLUMN state_machine_task_his.owner IS '实际签收人,任务的拥有者';
COMMENT ON COLUMN state_machine_task_his.active_type IS '当前节点类型(suspend/splitNode/joinNode)';
ALTER TABLE state_machine_task ADD parent_id varchar(100) NULL;
COMMENT ON COLUMN state_machine_task.parent_id IS '父实例ID';
ALTER TABLE state_machine_task ADD active_type varchar(100) NULL;
COMMENT ON COLUMN state_machine_task.active_type IS '当前节点类型(suspend/splitNode/joinNode)';
ALTER TABLE state_machine_task ADD active_state varchar(1) NULL;
COMMENT ON COLUMN state_machine_task.active_state IS '当前节点状态(1-激活 0-挂起)';
ALTER TABLE state_machine_task ADD start_time timestamp NULL;
COMMENT ON COLUMN state_machine_task.start_time IS '当前节点进入时间';
ALTER TABLE state_machine_task ADD process_id varchar(100) NULL;
COMMENT ON COLUMN state_machine_task.process_id IS '当前节点状态(1-激活 0-挂起)';
ALTER TABLE state_machine_task ADD tenant_id varchar(100) NULL;
COMMENT ON COLUMN state_machine_task.tenant_id IS '租户id';
ALTER TABLE state_machine_task ADD title varchar(1024) NULL;
COMMENT ON COLUMN state_machine_task.title IS '流程标题';
ALTER TABLE state_machine_task ADD biz_type varchar(4000) NULL;
COMMENT ON COLUMN state_machine_task.biz_type IS '业务标识';
ALTER TABLE state_machine_task_log ADD p_task_id varchar NULL;
COMMENT ON COLUMN state_machine_task_log.p_task_id IS '父实例id';
ALTER TABLE state_machine_task_log ADD process_id varchar(100) NULL;
COMMENT ON COLUMN state_machine_task_log.process_id IS '流程实例id';
ALTER TABLE state_machine_trans_conditon ADD check_type varchar(1000) NULL;
COMMENT ON COLUMN state_machine_trans_conditon.check_type IS '条件类型';
ALTER TABLE state_machine_trans_branch ADD check_type varchar(1000) NULL;
COMMENT ON COLUMN state_machine_trans_branch.check_type IS '条件类型';
CREATE TABLE state_machine_task_error (
id varchar(36) NOT NULL, -- 主键
task_id varchar(36) NOT NULL, -- 状态机任务实例ID
machine_code varchar(256) NULL, -- 状态机编码
event_name varchar(256) NULL, -- 事件编码
request_body text NULL, -- 请求体
response_body text NULL, -- 响应体
op_user varchar(100) NULL, -- 操作人ID
op_name varchar(100) NULL, -- 操作人名称
op_time timestamp NULL, -- 操作时间
crt_user varchar(100) NULL, -- 创建人
crt_name varchar(100) NULL, -- 创建人姓名
crt_host varchar(100) NULL, -- 创建主机
crt_time timestamp NULL, -- 创建时间
upd_user varchar(100) NULL, -- 最后更新人
upd_name varchar(100) NULL, -- 最后更新人姓名
upd_host varchar(100) NULL, -- 最后更新主机
upd_time timestamp NULL, -- 最后更新时间
process_id varchar(100) NULL,
error_summary varchar(4000) NULL, -- 错误概要
error_info text NULL, -- 详细错误
error_type varchar(256) NULL, -- 错误类型
event_label varchar(256) NULL, -- 事件名称
PRIMARY KEY (id)
);
COMMENT ON COLUMN state_machine_task_error.id IS '主键';
COMMENT ON COLUMN state_machine_task_error.task_id IS '状态机任务实例ID';
COMMENT ON COLUMN state_machine_task_error.machine_code IS '状态机编码';
COMMENT ON COLUMN state_machine_task_error.event_name IS '事件编码';
COMMENT ON COLUMN state_machine_task_error.request_body IS '请求体';
COMMENT ON COLUMN state_machine_task_error.response_body IS '响应体';
COMMENT ON COLUMN state_machine_task_error.op_user IS '操作人ID';
COMMENT ON COLUMN state_machine_task_error.op_name IS '操作人名称';
COMMENT ON COLUMN state_machine_task_error.op_time IS '操作时间';
COMMENT ON COLUMN state_machine_task_error.crt_user IS '创建人';
COMMENT ON COLUMN state_machine_task_error.crt_name IS '创建人姓名';
COMMENT ON COLUMN state_machine_task_error.crt_host IS '创建主机';
COMMENT ON COLUMN state_machine_task_error.crt_time IS '创建时间';
COMMENT ON COLUMN state_machine_task_error.upd_user IS '最后更新人';
COMMENT ON COLUMN state_machine_task_error.upd_name IS '最后更新人姓名';
COMMENT ON COLUMN state_machine_task_error.upd_host IS '最后更新主机';
COMMENT ON COLUMN state_machine_task_error.upd_time IS '最后更新时间';
COMMENT ON COLUMN state_machine_task_error.error_summary IS '错误概要';
COMMENT ON COLUMN state_machine_task_error.error_info IS '详细错误';
COMMENT ON COLUMN state_machine_task_error.error_type IS '错误类型';
COMMENT ON COLUMN state_machine_task_error.event_label IS '事件名称';
ALTER TABLE state_machine_template ADD product_id varchar(100) NULL;
COMMENT ON COLUMN state_machine_template.product_id IS '产品id';
ALTER TABLE state_machine_template ADD tenant_id varchar(100) NULL;
COMMENT ON COLUMN state_machine_template.tenant_id IS '租户id';
ALTER TABLE state_machine_task ADD product_id varchar(100) NULL;
COMMENT ON COLUMN state_machine_task.product_id IS '产品id';
update state_machine_task set parent_id =-1 where parent_id is null ;
update state_machine_task set active_state =1 where active_state is null ;
ALTER TABLE state_machine_task ADD biz_name varchar(500) NULL;
COMMENT ON COLUMN state_machine_task.biz_name IS '业务单据名称';
ALTER TABLE state_machine_task_error ADD transaction_id varchar(64) NULL;
ALTER TABLE state_machine_task_error ADD biz_type varchar(100) NULL;
ALTER TABLE state_machine_task_error ADD biz_name varchar(1000) NULL;
ALTER TABLE state_machine_task_error ADD title varchar(1000) NULL;
ALTER TABLE state_machine_task_error ADD class_id varchar(32) NULL;
ALTER TABLE state_machine_task_error ADD serial_number varchar(100) NULL;
ALTER TABLE state_machine_task_error ADD lifecycle varchar(32) NULL;
ALTER TABLE state_machine_task_error ADD dversion_no numeric(8) NULL;
ALTER TABLE state_machine_task_error ADD p_class_id varchar(32) NULL;
ALTER TABLE state_machine_task_error ADD description varchar(1024) NULL;
ALTER TABLE state_machine_task_error ADD change_id varchar(32) NULL;
ALTER TABLE state_machine_task_error ADD release_date timestamp NULL;
ALTER TABLE state_machine_task_error ADD is_enabled varchar(4) NULL;
ALTER TABLE state_machine_task_error ADD is_deleted varchar(4) NULL;
ALTER TABLE state_machine_task_error ADD tenant_id varchar(64) NULL;
ALTER TABLE state_machine_task_error ADD product_id varchar(64) NULL;
ALTER TABLE state_machine_task_error ADD app_id varchar(64) NULL;
ALTER TABLE state_machine_task_error ADD org_id varchar(64) NULL;
ALTER TABLE state_machine_task_error ADD wf_relation_id varchar(256) NULL;
ALTER TABLE state_machine_task_error ADD wf_instance_id varchar(256) NULL;
ALTER TABLE state_machine_task_error ADD current_handler varchar(256) NULL;
ALTER TABLE state_machine_task_error ADD current_node varchar(256) NULL;
ALTER TABLE state_machine_task_error ADD current_handler_name varchar(256) NULL;
ALTER TABLE state_machine_task_error ADD current_node_name varchar(256) NULL;
ALTER TABLE state_machine_task_error ADD attr1 varchar(1024) NULL;
ALTER TABLE state_machine_task_error ADD attr2 varchar(1024) NULL;
ALTER TABLE state_machine_task_error ADD attr3 varchar(1024) NULL;
ALTER TABLE state_machine_task_error ADD attr4 varchar(1024) NULL;
ALTER TABLE state_machine_task_error ADD attr5 varchar(1024) NULL;
ALTER TABLE state_machine_task_error ADD attr6 varchar(1024) NULL;
ALTER TABLE state_machine_task_error ADD attr7 varchar(1024) NULL;
ALTER TABLE state_machine_task_error ADD attr8 varchar(1024) NULL;
ALTER TABLE state_machine_task_error ADD attr9 varchar(1024) NULL;
ALTER TABLE state_machine_task_error ADD attr10 varchar(1024) NULL;
CREATE TABLE IF NOT EXISTS state_machine_todo (
id varchar(64) NOT NULL, -- 主键
task_id varchar(64) NULL, -- 流程实例id
url varchar(2048) NULL, -- 待办链接
current_state varchar(1000) NULL, -- 当前节点编码
current_state_label varchar(1000) NULL, -- 当前节点名称
transaction_id varchar(64) NULL, -- 单据id
crt_time timestamp NULL, -- 创建时间
product_id varchar(64) NULL, -- 产品id
tenant_id varchar(64) NULL, -- 租户id
module_id varchar(1024) NULL, -- 模块标识
title varchar(2048) NULL, -- 待办标题
doc_creator_id varchar(256) NULL, -- 流程创建人标识
doc_create_name varchar(256) NULL, -- 流程创建人姓名
todo_type varchar(256) NULL, -- 待办类型(通知、待审)
"level" varchar(64) NULL, -- 紧急程度
wf_number varchar(64) NULL, -- 流程编码
CONSTRAINT state_machine_todo_pk PRIMARY KEY (id)
);
COMMENT ON COLUMN state_machine_todo.id IS '主键';
COMMENT ON COLUMN state_machine_todo.task_id IS '流程实例id';
COMMENT ON COLUMN state_machine_todo.url IS '待办链接';
COMMENT ON COLUMN state_machine_todo.current_state IS '当前节点编码';
COMMENT ON COLUMN state_machine_todo.current_state_label IS '当前节点名称';
COMMENT ON COLUMN state_machine_todo.transaction_id IS '单据id';
COMMENT ON COLUMN state_machine_todo.crt_time IS '创建时间';
COMMENT ON COLUMN state_machine_todo.product_id IS '产品id';
COMMENT ON COLUMN state_machine_todo.tenant_id IS '租户id';
COMMENT ON COLUMN state_machine_todo.module_id IS '模块标识';
COMMENT ON COLUMN state_machine_todo.title IS '待办标题';
COMMENT ON COLUMN state_machine_todo.doc_creator_id IS '流程创建人标识';
COMMENT ON COLUMN state_machine_todo.doc_create_name IS '流程创建人姓名';
COMMENT ON COLUMN state_machine_todo.todo_type IS '待办类型(通知、待审)';
COMMENT ON COLUMN state_machine_todo."level" IS '紧急程度';
COMMENT ON COLUMN state_machine_todo.wf_number IS '流程编码';
CREATE TABLE IF NOT EXISTS state_machine_todo_done (
id varchar NOT NULL,
todo_id varchar(64) NULL, -- 待办id
handler_user varchar(64) NULL, -- 用户id
handler_user_name varchar NULL, -- 用户姓名
finish_time timestamp NULL, -- 完成时间
CONSTRAINT state_machine_todo_done_pk PRIMARY KEY (id)
);
COMMENT ON COLUMN state_machine_todo_done.todo_id IS '待办id';
COMMENT ON COLUMN state_machine_todo_done.handler_user IS '用户id';
COMMENT ON COLUMN state_machine_todo_done.handler_user_name IS '用户姓名';
COMMENT ON COLUMN state_machine_todo_done.finish_time IS '完成时间';
CREATE TABLE IF NOT EXISTS state_machine_todo_target (
id varchar(64) NOT NULL, -- 主键
todo_id varchar(64) NULL, -- 待办id
handler_user varchar(64) NULL,
handler_user_name varchar(256) NULL, -- 用户姓名
CONSTRAINT state_machine_todo_target_pk PRIMARY KEY (id)
);
COMMENT ON COLUMN state_machine_todo_target.id IS '主键';
COMMENT ON COLUMN state_machine_todo_target.todo_id IS '待办id';
COMMENT ON COLUMN state_machine_todo_target.handler_user_name IS '用户姓名';
update state_machine_task_log set process_id = task_id,p_task_id ='-1' where process_id is null and p_task_id is null;
update state_machine_task set active_type = 'suspend' where active_type is null ;
ALTER TABLE state_machine_task ADD wf_number varchar(64) NULL;
COMMENT ON COLUMN state_machine_task.wf_number IS '流程编码';
ALTER TABLE state_machine_task ADD form_instance_url varchar(2048) NULL;
COMMENT ON COLUMN state_machine_task.form_instance_url IS '流程编码';
ALTER TABLE state_machine_task_log ADD COLUMN request_body1 text ;
update state_machine_task_log set request_body1 = request_body ;
ALTER TABLE state_machine_task_log DROP COLUMN request_body;
ALTER TABLE state_machine_task_log RENAME COLUMN request_body1 TO request_body;
ALTER TABLE state_machine_task_log ADD COLUMN response_body1 text ;
update state_machine_task_log set response_body1 = response_body ;
ALTER TABLE state_machine_task_log DROP COLUMN response_body;
ALTER TABLE state_machine_task_log RENAME COLUMN response_body1 TO response_body;
ALTER TABLE state_machine_task ADD COLUMN response_body1 text ;
update state_machine_task set response_body1 = response_body ;
ALTER TABLE state_machine_task DROP COLUMN response_body;
ALTER TABLE state_machine_task RENAME COLUMN response_body1 TO response_body;
ALTER TABLE state_machine_task ADD COLUMN request_body1 text ;
update state_machine_task set request_body1 = request_body ;
ALTER TABLE state_machine_task DROP COLUMN request_body;
ALTER TABLE state_machine_task RENAME COLUMN request_body1 TO request_body;
ALTER TABLE state_machine_template ADD product_id varchar(100) NULL;
COMMENT ON COLUMN state_machine_template.product_id IS '产品id';
依赖
springboot 2.+
更换或添加
<dependency>
<groupId>com.cvte.csb</groupId>
<artifactId>csb-statemachine-client</artifactId>
<version>1.4.3.PLUS-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.cvte.csb</groupId>
<artifactId>csb-statemachine-admin</artifactId>
<version>1.4.3.PLUS-SNAPSHOT</version>
</dependency>
springboot 1.5+
更换或添加
<dependency>
<groupId>com.cvte.csb</groupId>
<artifactId>csb-statemachine-client</artifactId>
<version>1.4.3-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.cvte.csb</groupId>
<artifactId>csb-statemachine-admin</artifactId>
<version>1.4.3-SNAPSHOT</version>
</dependency>
说明:如果依赖无法下载,提前配置依赖仓库
<repository>
<id>jfrog-virtual</id>
<name>artifactory-releases</name>
<url>
https://artifactory.gz.cvte.cn/artifactory/SR_maven_virtual/
</url>
<releases>
<enabled>true</enabled>
<updatePolicy>always</updatePolicy>
</releases>
<snapshots>
<enabled>true</enabled>
<updatePolicy>always</updatePolicy>
</snapshots>
</repository>
流程按钮
#指定用户的按钮获取
List<EventBtnDTO> btns = stateMachineService.getNextEventsV2("单据id", "域账号/ID");
审批操作
#审批
stateMachineService.dispatchEventV2("单据id","执行实例id,按钮中的taskId",event)
#转办
stateMachineService.updateApproverV2("单据id", "taskId",toApproverVo, fromApproverVo)
审批记录
前端包直接集成
其他能力
#可驳回节点
stateMachineHistoryServiceImpl.getRefuseNodes("单据id","执行实例taskId")
#可重启节点
stateMachineHistoryServiceImpl.getRestartNodes("单据id","执行实例taskId")
说明
流程图中审核节点出发的非正向的线需手工移除,使用"驳回选节点"功能代替
作者:叶端旺 创建时间:2023-12-20 15:24
最后编辑:叶端旺 更新时间:2024-12-27 15:01
最后编辑:叶端旺 更新时间:2024-12-27 15:01