示例工程
初始化脚本
state_machine_oracle-v1.2(1.1升级到1.2).sql
CREATE TABLE state_machine_category (
id varchar2(50) NOT NULL,
code varchar2(50) NULL,
name varchar2(100) NULL,
parent_id varchar2(50) NULL,
is_deleted varchar2(1) DEFAULT '0',
crt_user varchar2(50) NULL,
crt_name varchar2(50) NULL,
crt_time timestamp NULL,
crt_host varchar2(100) NULL,
upd_user varchar2(100) NULL,
upd_name varchar2(50) NULL,
upd_time timestamp NULL,
upd_host varchar2(100) NULL,
PRIMARY KEY (id)
);
-- state_machine_node definition
-- Drop table
-- DROP TABLE state_machine_node;
CREATE TABLE state_machine_node (
id varchar2(36) NOT NULL,
code varchar2(50) NULL,
name varchar2(100) NULL,
type varchar2(50) NULL,
template_version_id varchar2(50) NULL,
enter_actions varchar2(500) NULL,
exit_actions varchar2(500) NULL,
config clob NULL,
PRIMARY KEY (id)
);
-- state_machine_node_auth definition
-- Drop table
-- DROP TABLE state_machine_node_auth;
CREATE TABLE state_machine_node_auth (
id varchar2(36) NOT NULL,
node_id varchar2(50) NULL,
auth_type varchar2(50) NULL,
type varchar2(50) NULL,
choiced_id varchar2(100) NULL,
PRIMARY KEY (id)
);
-- state_machine_template definition
-- Drop table
-- DROP TABLE state_machine_template;
CREATE TABLE state_machine_template (
id varchar2(36) NOT NULL,
code varchar2(50) NULL,
descri varchar2(1000) NULL,
category_id varchar2(50) NULL,
is_enabled varchar2(1) DEFAULT '0',
is_deleted varchar2(1) DEFAULT '0',
crt_user varchar2(50) NULL,
crt_name varchar2(50) NULL,
crt_time timestamp NULL,
crt_host varchar2(100) NULL,
upd_user varchar2(100) NULL,
upd_name varchar2(50) NULL,
upd_time timestamp NULL,
upd_host varchar2(100) NULL,
name varchar2(100) NULL,
interceptors varchar2(500) NULL,
config clob NULL,
PRIMARY KEY (id)
);
-- state_machine_template_version definition
-- Drop table
-- DROP TABLE state_machine_template_version;
CREATE TABLE state_machine_template_version (
id varchar2(36) NOT NULL,
template_id varchar2(50) NULL,
version_no NUMBER(8,0),
is_enabled varchar2(1) NULL,
is_deleted varchar2(1) NULL,
crt_user varchar2(50) NULL,
crt_name varchar2(50) NULL,
crt_time timestamp NULL,
crt_host varchar2(100) NULL,
upd_user varchar2(100) NULL,
upd_name varchar2(50) NULL,
upd_time timestamp NULL,
upd_host varchar2(100) NULL,
description varchar2(500) NULL,
version_name varchar2(200) NULL,
config clob NULL,
PRIMARY KEY (id)
);
-- state_machine_trans_branch definition
-- Drop table
-- DROP TABLE state_machine_trans_branch;
CREATE TABLE state_machine_trans_branch (
id varchar2(36) NOT NULL,
trans_id varchar2(50) NULL,
check_express varchar2(100) NULL,
target_node_id varchar2(50) NULL,
priority NUMBER(4,0),
is_default varchar2(1) NULL,
code varchar2(50) NULL,
name varchar2(200) NULL,
check_tips varchar2(200) NULL,
PRIMARY KEY (id)
);
-- state_machine_trans_conditon definition
-- Drop table
-- DROP TABLE state_machine_trans_conditon;
CREATE TABLE state_machine_trans_conditon (
id varchar2(36) NOT NULL,
miss_action varchar2(50) NULL,
check_condition varchar2(100) NULL,
check_express varchar2(100) NULL,
check_tips varchar2(50) NULL,
target_node_id varchar2(50) NULL,
trans_id varchar2(50) NULL,
PRIMARY KEY (id)
);
-- state_machine_trans_conf definition
-- Drop table
-- DROP TABLE state_machine_trans_conf;
CREATE TABLE state_machine_trans_conf (
code varchar2(50) NULL,
id varchar2(36) NOT NULL,
name varchar2(100) NULL,
template_version_id varchar2(50) NULL,
is_auto varchar2(50) NULL,
type varchar2(50) NULL,
source_node_id varchar2(50) NULL,
target_node_id varchar2(50) NULL,
event_code varchar2(50) NULL,
error_action varchar2(50) NULL,
config clob NULL,
PRIMARY KEY (id)
);
-- state_machine_trans_trig definition
-- Drop table
-- DROP TABLE state_machine_trans_trig;
CREATE TABLE state_machine_trans_trig (
id varchar2(36) NOT NULL,
trans_id varchar2(50) NULL,
action varchar2(500) NULL,
PRIMARY KEY (id)
);
CREATE TABLE state_machine_audit_note (
id varchar2(100) NOT NULL, -- 主键id
transaction_id varchar2(100) NULL, -- 业务id
node_id varchar2(100) NULL, -- 节点id
node_name varchar2(100) NULL, -- 节点名称
action_key varchar2(100) NULL, -- 操作类型
action_name varchar2(100) NULL, -- 操作名称
audit_note varchar2(2000) NULL, -- 操作意见/备注
expecter_id varchar2(100) NULL, -- 期望操作人用户Id
status varchar2(100) NULL, -- 状态(done-已操作,init-未操作)
task_id varchar2(100) NULL, -- 流程id
is_deleted varchar2(4) NULL, -- 是否删除
crt_user varchar2(100) NULL, -- 创建人
crt_name varchar2(100) NULL, -- 创建人姓名
crt_host varchar2(100) NULL, -- 创建人主机
crt_time timestamp NULL, -- 创建时间
upd_user varchar2(100) NULL, -- 更新人
upd_name varchar2(100) NULL, -- 更新人姓名
upd_host varchar2(100) NULL, -- 更新人主机
upd_time timestamp NULL, -- 更新时间
node_code varchar2(100) NULL, -- 节点编码
statemachine_code varchar2(100) NULL, -- 状态机编码
expecter_account varchar2(100) NULL, -- 期望操作人用户账号
PRIMARY KEY (id)
);
COMMENT ON TABLE state_machine_audit_note IS '状态机审批记录表';
-- Column comments
COMMENT ON COLUMN state_machine_audit_note.id IS '主键id';
COMMENT ON COLUMN state_machine_audit_note.transaction_id IS '业务id';
COMMENT ON COLUMN state_machine_audit_note.node_id IS '节点id';
COMMENT ON COLUMN state_machine_audit_note.node_name IS '节点名称';
COMMENT ON COLUMN state_machine_audit_note.action_key IS '操作类型';
COMMENT ON COLUMN state_machine_audit_note.action_name IS '操作名称';
COMMENT ON COLUMN state_machine_audit_note.audit_note IS '操作意见/备注';
COMMENT ON COLUMN state_machine_audit_note.expecter_id IS '期望操作人用户Id';
COMMENT ON COLUMN state_machine_audit_note.status IS '状态(done-已操作,init-未操作)';
COMMENT ON COLUMN state_machine_audit_note.task_id IS '流程id';
COMMENT ON COLUMN state_machine_audit_note.is_deleted IS '是否删除';
COMMENT ON COLUMN state_machine_audit_note.crt_user IS '创建人';
COMMENT ON COLUMN state_machine_audit_note.crt_name IS '创建人姓名';
COMMENT ON COLUMN state_machine_audit_note.crt_host IS '创建人主机';
COMMENT ON COLUMN state_machine_audit_note.crt_time IS '创建时间';
COMMENT ON COLUMN state_machine_audit_note.upd_user IS '更新人';
COMMENT ON COLUMN state_machine_audit_note.upd_name IS '更新人姓名';
COMMENT ON COLUMN state_machine_audit_note.upd_host IS '更新人主机';
COMMENT ON COLUMN state_machine_audit_note.upd_time IS '更新时间';
COMMENT ON COLUMN state_machine_audit_note.node_code IS '节点编码';
COMMENT ON COLUMN state_machine_audit_note.statemachine_code IS '状态机编码';
COMMENT ON COLUMN state_machine_audit_note.expecter_account IS '期望操作人用户账号';
ALTER TABLE state_machine_task ADD approval_account varchar2(100) NULL;
COMMENT ON COLUMN state_machine_task.approval_account IS '当前操作人域账号';
COMMENT ON COLUMN state_machine_task.approval_user IS '当前操作人用户id';
ALTER TABLE state_machine_node ADD audit_type varchar2(100) NULL;
COMMENT ON COLUMN state_machine_node.audit_type IS '审核类型(标准/会审)';
ALTER TABLE state_machine_node ADD biz_status_code varchar2(100) NULL;
COMMENT ON COLUMN state_machine_node.biz_status_code IS '业务状态编码';
ALTER TABLE state_machine_task_log ADD source_state_label varchar2(100) NULL;
COMMENT ON COLUMN state_machine_task_log.source_state_label IS '转化前状态名称';
ALTER TABLE state_machine_task_log ADD target_state_label varchar2(100) NULL;
COMMENT ON COLUMN state_machine_task_log.target_state_label IS '目标状态名称';
ALTER TABLE state_machine_task_log ADD final_state_label varchar2(100) NULL;
COMMENT ON COLUMN state_machine_task_log.final_state_label IS '最终状态名称';
ALTER TABLE state_machine_task_log ADD event_label varchar2(256) NULL;
COMMENT ON COLUMN state_machine_task_log.event_label IS '事件名称';
ALTER TABLE state_machine_task ADD current_state_label varchar2(100) NULL;
COMMENT ON COLUMN state_machine_task.current_state_label IS '状态机现任状态名称';
ALTER TABLE state_machine_task ADD template_version_id varchar2(64) NULL;
COMMENT ON COLUMN state_machine_task.template_version_id IS '状态机模板版本标识';
ALTER TABLE state_machine_trans_branch ADD target_node_code varchar2(50) NULL;
COMMENT ON COLUMN state_machine_trans_branch.target_node_code IS '目标节点编码';
ALTER TABLE state_machine_trans_branch ADD trans_id varchar2(50) NULL;
COMMENT ON COLUMN state_machine_trans_branch.trans_id IS '扭转ID';
ALTER TABLE state_machine_trans_branch ADD trans_code varchar2(50) NULL;
COMMENT ON COLUMN state_machine_trans_branch.trans_code IS '扭转编码';
ALTER TABLE state_machine_trans_branch ADD template_version_id varchar2(100) NULL;
COMMENT ON COLUMN state_machine_trans_branch.template_version_id IS '状态机模板版本标识';
ALTER TABLE state_machine_trans_conditon ADD template_version_id varchar2(100) NULL;
COMMENT ON COLUMN state_machine_trans_conditon.template_version_id IS '状态机模板版本标识';
ALTER TABLE state_machine_trans_conditon ADD trans_code varchar2(64) NULL;
COMMENT ON COLUMN state_machine_trans_conditon.trans_code IS '扭转编码';
ALTER TABLE state_machine_trans_conditon ADD target_node_code varchar2(64) NULL;
COMMENT ON COLUMN state_machine_trans_conditon.target_node_code IS '目标节点编码';
ALTER TABLE state_machine_trans_trig ADD template_version_id varchar2(100) NULL;
COMMENT ON COLUMN state_machine_trans_trig.template_version_id IS '状态机模板版本标识';
ALTER TABLE state_machine_trans_trig ADD trans_code varchar2(50) NULL;
COMMENT ON COLUMN state_machine_trans_trig.trans_code IS '扭转编码';
ALTER TABLE state_machine_node_auth ADD template_version_id varchar2(100) NULL;
COMMENT ON COLUMN state_machine_node_auth.template_version_id IS '状态机模板版本标识';
ALTER TABLE state_machine_node_auth ADD node_code varchar2(50) NULL;
COMMENT ON COLUMN state_machine_node_auth.node_code IS '节点编码';
ALTER TABLE state_machine_trans_conf ADD source_node_code varchar2(50) NULL;
COMMENT ON COLUMN state_machine_trans_conf.source_node_code IS '源节点编码';
ALTER TABLE state_machine_trans_conf ADD target_node_code varchar2(50) NULL;
COMMENT ON COLUMN state_machine_trans_conf.target_node_code IS '目标节点编码';
state_machine_oracle_v1.2.all.sql
create table STATE_MACHINE_DEF
(
ID VARCHAR2(36) not null
primary key,
MACHINE_CODE VARCHAR2(256),
MACHINE_NAME VARCHAR2(256),
MACHINE_VERSION VARCHAR2(32),
MACHINE_DEFINITION VARCHAR2(4000),
SYSTEM_ID VARCHAR2(36),
MODULE_CODE VARCHAR2(256),
IS_DELETED CHAR default '0',
CRT_USER VARCHAR2(100),
CRT_NAME VARCHAR2(100),
CRT_HOST VARCHAR2(100),
CRT_TIME TIMESTAMP(6),
UPD_USER VARCHAR2(100),
UPD_NAME VARCHAR2(100),
UPD_HOST VARCHAR2(100),
UPD_TIME TIMESTAMP(6),
VERSION NUMBER(8)
)
;
comment on table STATE_MACHINE_DEF is '状态机定义'
;
comment on column STATE_MACHINE_DEF.ID is '主键'
;
comment on column STATE_MACHINE_DEF.MACHINE_CODE is '状态机编码'
;
comment on column STATE_MACHINE_DEF.MACHINE_NAME is '状态机名称'
;
comment on column STATE_MACHINE_DEF.MACHINE_VERSION is '状态机版本号'
;
comment on column STATE_MACHINE_DEF.MACHINE_DEFINITION is '状态机定义'
;
comment on column STATE_MACHINE_DEF.SYSTEM_ID is '业务系统ID'
;
comment on column STATE_MACHINE_DEF.MODULE_CODE is '业务模块编码'
;
comment on column STATE_MACHINE_DEF.IS_DELETED is '是否删除'
;
comment on column STATE_MACHINE_DEF.CRT_USER is '创建人'
;
comment on column STATE_MACHINE_DEF.CRT_NAME is '创建人姓名'
;
comment on column STATE_MACHINE_DEF.CRT_HOST is '创建主机'
;
comment on column STATE_MACHINE_DEF.CRT_TIME is '创建时间'
;
comment on column STATE_MACHINE_DEF.UPD_USER is '最后更新人'
;
comment on column STATE_MACHINE_DEF.UPD_NAME is '最后更新人姓名'
;
comment on column STATE_MACHINE_DEF.UPD_HOST is '最后更新主机'
;
comment on column STATE_MACHINE_DEF.UPD_TIME is '最后更新时间'
;
create unique index STATE_MACHINE_DEF_U2
on STATE_MACHINE_DEF (MACHINE_NAME, MACHINE_VERSION)
;
create table STATE_MACHINE_TASK
(
ID VARCHAR2(36) not null
primary key,
DEF_ID VARCHAR2(36) not null,
TRANSACTION_ID VARCHAR2(256) not null,
PREDECESSOR_STATE VARCHAR2(32),
CURRENT_STATE VARCHAR2(32),
STATUS VARCHAR2(32),
REQUEST_BODY VARCHAR2(2048),
RESPONSE_BODY VARCHAR2(1024),
ERROR_MSG VARCHAR2(1024),
RETRY_TIMES NUMBER(8),
USED_RETRY_TIMES NUMBER,
NEXT_FIRE_TIME TIMESTAMP(6),
APPROVAL_USER VARCHAR2(100),
APPROVAL_NAME VARCHAR2(100),
CRT_USER VARCHAR2(100),
CRT_NAME VARCHAR2(100),
CRT_HOST VARCHAR2(100),
CRT_TIME TIMESTAMP(6),
UPD_USER VARCHAR2(100),
UPD_NAME VARCHAR2(100),
UPD_HOST VARCHAR2(100),
UPD_TIME TIMESTAMP(6),
VERSION NUMBER(8),
APPROVAL_ACCOUNT VARCHAR2(100),
SOURCE_STATE_LABEL VARCHAR2(100),
TARGET_STATE_LABEL VARCHAR2(100),
FINAL_STATE_LABEL VARCHAR2(100),
CURRENT_STATE_LABEL VARCHAR2(100),
TEMPLATE_VERSION_ID VARCHAR2(64)
)
;
comment on table STATE_MACHINE_TASK is '状态机任务实例'
;
comment on column STATE_MACHINE_TASK.ID is '主键'
;
comment on column STATE_MACHINE_TASK.DEF_ID is '状态机定义'
;
comment on column STATE_MACHINE_TASK.TRANSACTION_ID is '业务事务ID'
;
comment on column STATE_MACHINE_TASK.PREDECESSOR_STATE is '状态机前任状态'
;
comment on column STATE_MACHINE_TASK.CURRENT_STATE is '状态机现任状态'
;
comment on column STATE_MACHINE_TASK.STATUS is '任务状态'
;
comment on column STATE_MACHINE_TASK.REQUEST_BODY is '请求体'
;
comment on column STATE_MACHINE_TASK.RESPONSE_BODY is '响应体'
;
comment on column STATE_MACHINE_TASK.ERROR_MSG is '错误信息'
;
comment on column STATE_MACHINE_TASK.RETRY_TIMES is '重试次数'
;
comment on column STATE_MACHINE_TASK.USED_RETRY_TIMES is '已重试次数'
;
comment on column STATE_MACHINE_TASK.NEXT_FIRE_TIME is '下一次调度时间'
;
comment on column STATE_MACHINE_TASK.APPROVAL_USER is '当前操作人用户id'
;
comment on column STATE_MACHINE_TASK.APPROVAL_NAME is '当前操作人姓名'
;
comment on column STATE_MACHINE_TASK.CRT_USER is '创建人'
;
comment on column STATE_MACHINE_TASK.CRT_NAME is '创建人姓名'
;
comment on column STATE_MACHINE_TASK.CRT_HOST is '创建主机'
;
comment on column STATE_MACHINE_TASK.CRT_TIME is '创建时间'
;
comment on column STATE_MACHINE_TASK.UPD_USER is '最后更新人'
;
comment on column STATE_MACHINE_TASK.UPD_NAME is '最后更新人姓名'
;
comment on column STATE_MACHINE_TASK.UPD_HOST is '最后更新主机'
;
comment on column STATE_MACHINE_TASK.UPD_TIME is '最后更新时间'
;
comment on column STATE_MACHINE_TASK.APPROVAL_ACCOUNT is '当前操作人域账号'
;
comment on column STATE_MACHINE_TASK.SOURCE_STATE_LABEL is '转化前状态名称'
;
comment on column STATE_MACHINE_TASK.TARGET_STATE_LABEL is '目标状态名称'
;
comment on column STATE_MACHINE_TASK.FINAL_STATE_LABEL is '最终状态名称'
;
comment on column STATE_MACHINE_TASK.CURRENT_STATE_LABEL is '状态机现任状态名称'
;
comment on column STATE_MACHINE_TASK.TEMPLATE_VERSION_ID is '状态机模板版本标识'
;
create index STATE_MACHINE_TASK_IDX1
on STATE_MACHINE_TASK (DEF_ID)
;
create index STATE_MACHINE_TASK_IDX2
on STATE_MACHINE_TASK (TRANSACTION_ID)
;
create index STATE_MACHINE_TASK_IDX3
on STATE_MACHINE_TASK (STATUS)
;
create table STATE_MACHINE_TASK_LOG
(
ID VARCHAR2(36) not null
primary key,
TASK_ID VARCHAR2(36) not null,
MACHINE_CODE VARCHAR2(256),
SOURCE_STATE VARCHAR2(32),
TARGET_STATE VARCHAR2(32),
FINAL_STATE VARCHAR2(32),
EVENT VARCHAR2(256),
REQUEST_BODY VARCHAR2(2048),
RESPONSE_BODY VARCHAR2(1024),
OP_USER VARCHAR2(100),
OP_NAME VARCHAR2(100),
OP_TIME TIMESTAMP(6),
OP_REASON VARCHAR2(2000),
CRT_USER VARCHAR2(100),
CRT_NAME VARCHAR2(100),
CRT_HOST VARCHAR2(100),
CRT_TIME TIMESTAMP(6),
UPD_USER VARCHAR2(100),
UPD_NAME VARCHAR2(100),
UPD_HOST VARCHAR2(100),
UPD_TIME TIMESTAMP(6),
VERSION NUMBER,
OP_TYPE VARCHAR2(32),
SOURCE_STATE_LABEL VARCHAR2(100),
TARGET_STATE_LABEL VARCHAR2(100),
FINAL_STATE_LABEL VARCHAR2(100),
EVENT_LABEL VARCHAR2(256)
)
;
comment on table STATE_MACHINE_TASK_LOG is '状态机任务实例日志'
;
comment on column STATE_MACHINE_TASK_LOG.ID is '主键'
;
comment on column STATE_MACHINE_TASK_LOG.TASK_ID is '状态机任务实例ID'
;
comment on column STATE_MACHINE_TASK_LOG.MACHINE_CODE is '状态机编码'
;
comment on column STATE_MACHINE_TASK_LOG.SOURCE_STATE is '转化前状态'
;
comment on column STATE_MACHINE_TASK_LOG.TARGET_STATE is '目标状态'
;
comment on column STATE_MACHINE_TASK_LOG.FINAL_STATE is '实际状态'
;
comment on column STATE_MACHINE_TASK_LOG.EVENT is '事件'
;
comment on column STATE_MACHINE_TASK_LOG.REQUEST_BODY is '请求体'
;
comment on column STATE_MACHINE_TASK_LOG.RESPONSE_BODY is '响应体'
;
comment on column STATE_MACHINE_TASK_LOG.OP_USER is '操作人ID'
;
comment on column STATE_MACHINE_TASK_LOG.OP_NAME is '操作人名称'
;
comment on column STATE_MACHINE_TASK_LOG.OP_TIME is '操作时间'
;
comment on column STATE_MACHINE_TASK_LOG.OP_REASON is '操作备注'
;
comment on column STATE_MACHINE_TASK_LOG.CRT_USER is '创建人'
;
comment on column STATE_MACHINE_TASK_LOG.CRT_NAME is '创建人姓名'
;
comment on column STATE_MACHINE_TASK_LOG.CRT_HOST is '创建主机'
;
comment on column STATE_MACHINE_TASK_LOG.CRT_TIME is '创建时间'
;
comment on column STATE_MACHINE_TASK_LOG.UPD_USER is '最后更新人'
;
comment on column STATE_MACHINE_TASK_LOG.UPD_NAME is '最后更新人姓名'
;
comment on column STATE_MACHINE_TASK_LOG.UPD_HOST is '最后更新主机'
;
comment on column STATE_MACHINE_TASK_LOG.UPD_TIME is '最后更新时间'
;
comment on column STATE_MACHINE_TASK_LOG.OP_TYPE is '操作类型'
;
comment on column STATE_MACHINE_TASK_LOG.SOURCE_STATE_LABEL is '转化前状态名称'
;
comment on column STATE_MACHINE_TASK_LOG.TARGET_STATE_LABEL is '目标状态名称'
;
comment on column STATE_MACHINE_TASK_LOG.FINAL_STATE_LABEL is '最终状态名称'
;
comment on column STATE_MACHINE_TASK_LOG.EVENT_LABEL is '事件名称'
;
create index STATE_MACHINE_TASK_LOG_IDX1
on STATE_MACHINE_TASK_LOG (TASK_ID)
;
create table STATE_MACHINE_CATEGORY
(
ID VARCHAR2(50) not null
primary key,
CODE VARCHAR2(50),
NAME VARCHAR2(100),
PARENT_ID VARCHAR2(50),
IS_DELETED VARCHAR2(1) default '0',
CRT_USER VARCHAR2(50),
CRT_NAME VARCHAR2(50),
CRT_TIME TIMESTAMP(6),
CRT_HOST VARCHAR2(100),
UPD_USER VARCHAR2(100),
UPD_NAME VARCHAR2(50),
UPD_TIME TIMESTAMP(6),
UPD_HOST VARCHAR2(100)
)
;
create table STATE_MACHINE_NODE_AUTH
(
ID VARCHAR2(36) not null
primary key,
NODE_ID VARCHAR2(50),
AUTH_TYPE VARCHAR2(50),
TYPE VARCHAR2(50),
CHOICED_ID VARCHAR2(100),
TEMPLATE_VERSION_ID VARCHAR2(100),
NODE_CODE VARCHAR2(50)
)
;
create table STATE_MACHINE_TRANS_BRANCH
(
ID VARCHAR2(36) not null
primary key,
TRANS_ID VARCHAR2(50),
CHECK_EXPRESS VARCHAR2(100),
TARGET_NODE_ID VARCHAR2(50),
PRIORITY NUMBER(4),
IS_DEFAULT VARCHAR2(1),
CODE VARCHAR2(50),
NAME VARCHAR2(200),
CHECK_TIPS VARCHAR2(200),
TEMPLATE_VERSION_ID VARCHAR2(100),
TARGET_NODE_CODE VARCHAR2(50),
TRANS_CODE VARCHAR2(50)
)
;
comment on column STATE_MACHINE_TRANS_BRANCH.TARGET_NODE_CODE is '目标节点编码'
;
comment on column STATE_MACHINE_TRANS_BRANCH.TRANS_CODE is '扭转编码'
;
create table STATE_MACHINE_TRANS_CONDITON
(
ID VARCHAR2(36) not null
primary key,
MISS_ACTION VARCHAR2(50),
CHECK_CONDITION VARCHAR2(100),
CHECK_EXPRESS VARCHAR2(100),
CHECK_TIPS VARCHAR2(50),
TARGET_NODE_ID VARCHAR2(50),
TRANS_ID VARCHAR2(50),
TEMPLATE_VERSION_ID VARCHAR2(100),
TRANS_CODE VARCHAR2(64),
TARGET_NODE_CODE VARCHAR2(64)
)
;
comment on column STATE_MACHINE_TRANS_CONDITON.TEMPLATE_VERSION_ID is '状态机模板版本标识'
;
comment on column STATE_MACHINE_TRANS_CONDITON.TRANS_CODE is '扭转编码'
;
comment on column STATE_MACHINE_TRANS_CONDITON.TARGET_NODE_CODE is '目标节点编码'
;
create table STATE_MACHINE_TRANS_TRIG
(
ID VARCHAR2(36) not null
primary key,
TRANS_ID VARCHAR2(50),
ACTION VARCHAR2(500),
TEMPLATE_VERSION_ID VARCHAR2(100),
TRANS_CODE VARCHAR2(50)
)
;
comment on column STATE_MACHINE_TRANS_TRIG.TEMPLATE_VERSION_ID is '状态机模板版本标识'
;
comment on column STATE_MACHINE_TRANS_TRIG.TRANS_CODE is '扭转编码'
;
create table STATE_MACHINE_AUDIT_NOTE
(
ID VARCHAR2(100) not null
primary key,
TRANSACTION_ID VARCHAR2(100),
NODE_ID VARCHAR2(100),
NODE_NAME VARCHAR2(100),
ACTION_KEY VARCHAR2(100),
ACTION_NAME VARCHAR2(100),
AUDIT_NOTE VARCHAR2(2000),
EXPECTER_ID VARCHAR2(100),
STATUS VARCHAR2(100),
TASK_ID VARCHAR2(100),
IS_DELETED VARCHAR2(4),
CRT_USER VARCHAR2(100),
CRT_NAME VARCHAR2(100),
CRT_HOST VARCHAR2(100),
CRT_TIME TIMESTAMP(6),
UPD_USER VARCHAR2(100),
UPD_NAME VARCHAR2(100),
UPD_HOST VARCHAR2(100),
UPD_TIME TIMESTAMP(6),
NODE_CODE VARCHAR2(100),
STATEMACHINE_CODE VARCHAR2(100),
EXPECTER_ACCOUNT VARCHAR2(100),
TRAIT VARCHAR2(256)
)
;
comment on table STATE_MACHINE_AUDIT_NOTE is '状态机审批记录表'
;
comment on column STATE_MACHINE_AUDIT_NOTE.ID is '主键id'
;
comment on column STATE_MACHINE_AUDIT_NOTE.TRANSACTION_ID is '业务id'
;
comment on column STATE_MACHINE_AUDIT_NOTE.NODE_ID is '节点id'
;
comment on column STATE_MACHINE_AUDIT_NOTE.NODE_NAME is '节点名称'
;
comment on column STATE_MACHINE_AUDIT_NOTE.ACTION_KEY is '操作类型'
;
comment on column STATE_MACHINE_AUDIT_NOTE.ACTION_NAME is '操作名称'
;
comment on column STATE_MACHINE_AUDIT_NOTE.AUDIT_NOTE is '操作意见;备注'
;
comment on column STATE_MACHINE_AUDIT_NOTE.EXPECTER_ID is '期望操作人用户Id'
;
comment on column STATE_MACHINE_AUDIT_NOTE.STATUS is '状态(done-已操作,init-未操作)'
;
comment on column STATE_MACHINE_AUDIT_NOTE.TASK_ID is '流程id'
;
comment on column STATE_MACHINE_AUDIT_NOTE.IS_DELETED is '是否删除'
;
comment on column STATE_MACHINE_AUDIT_NOTE.CRT_USER is '创建人'
;
comment on column STATE_MACHINE_AUDIT_NOTE.CRT_NAME is '创建人姓名'
;
comment on column STATE_MACHINE_AUDIT_NOTE.CRT_HOST is '创建人主机'
;
comment on column STATE_MACHINE_AUDIT_NOTE.CRT_TIME is '创建时间'
;
comment on column STATE_MACHINE_AUDIT_NOTE.UPD_USER is '更新人'
;
comment on column STATE_MACHINE_AUDIT_NOTE.UPD_NAME is '更新人姓名'
;
comment on column STATE_MACHINE_AUDIT_NOTE.UPD_HOST is '更新人主机'
;
comment on column STATE_MACHINE_AUDIT_NOTE.UPD_TIME is '更新时间'
;
comment on column STATE_MACHINE_AUDIT_NOTE.NODE_CODE is '节点编码'
;
comment on column STATE_MACHINE_AUDIT_NOTE.STATEMACHINE_CODE is '状态机编码'
;
comment on column STATE_MACHINE_AUDIT_NOTE.EXPECTER_ACCOUNT is '期望操作人用户账号'
;
create table STATE_MACHINE_NODE
(
ID VARCHAR2(36) not null
primary key,
CODE VARCHAR2(50),
NAME VARCHAR2(100),
TYPE VARCHAR2(50),
TEMPLATE_VERSION_ID VARCHAR2(50),
ENTER_ACTIONS VARCHAR2(500),
EXIT_ACTIONS VARCHAR2(500),
CONFIG CLOB,
AUDIT_TYPE VARCHAR2(100),
BIZ_STATUS_CODE VARCHAR2(100),
TRAIT VARCHAR2(100)
)
;
comment on column STATE_MACHINE_NODE.AUDIT_TYPE is '审核类型(标准;会审)'
;
comment on column STATE_MACHINE_NODE.BIZ_STATUS_CODE is '业务状态编码'
;
comment on column STATE_MACHINE_NODE.TRAIT is '节点特性,多个的话,分号分隔'
;
create table STATE_MACHINE_TEMPLATE
(
ID VARCHAR2(36) not null
primary key,
CODE VARCHAR2(50),
DESCRI VARCHAR2(1000),
CATEGORY_ID VARCHAR2(50),
IS_ENABLED VARCHAR2(1) default '0',
IS_DELETED VARCHAR2(1) default '0',
CRT_USER VARCHAR2(50),
CRT_NAME VARCHAR2(50),
CRT_TIME TIMESTAMP(6),
CRT_HOST VARCHAR2(100),
UPD_USER VARCHAR2(100),
UPD_NAME VARCHAR2(50),
UPD_TIME TIMESTAMP(6),
UPD_HOST VARCHAR2(100),
NAME VARCHAR2(100),
INTERCEPTORS VARCHAR2(500),
CONFIG CLOB
)
;
create table STATE_MACHINE_TEMPLATE_VERSION
(
ID VARCHAR2(36) not null
primary key,
TEMPLATE_ID VARCHAR2(50),
VERSION_NO NUMBER(8),
IS_ENABLED VARCHAR2(1),
IS_DELETED VARCHAR2(1),
CRT_USER VARCHAR2(50),
CRT_NAME VARCHAR2(50),
CRT_TIME TIMESTAMP(6),
CRT_HOST VARCHAR2(100),
UPD_USER VARCHAR2(100),
UPD_NAME VARCHAR2(50),
UPD_TIME TIMESTAMP(6),
UPD_HOST VARCHAR2(100),
DESCRIPTION VARCHAR2(500),
VERSION_NAME VARCHAR2(200),
CONFIG CLOB
)
;
create table STATE_MACHINE_TRANS_CONF
(
CODE VARCHAR2(50),
ID VARCHAR2(36) not null
primary key,
NAME VARCHAR2(100),
TEMPLATE_VERSION_ID VARCHAR2(50),
IS_AUTO VARCHAR2(50),
TYPE VARCHAR2(50),
SOURCE_NODE_ID VARCHAR2(50),
TARGET_NODE_ID VARCHAR2(50),
EVENT_CODE VARCHAR2(50),
ERROR_ACTION VARCHAR2(50),
CONFIG CLOB,
SOURCE_NODE_CODE VARCHAR2(50),
TARGET_NODE_CODE VARCHAR2(50)
)
;
state_machine_pg_v1.2.all.sql
create table STATE_MACHINE_DEF
(
ID VARCHAR(36) not null
primary key,
MACHINE_CODE VARCHAR(256),
MACHINE_NAME VARCHAR(256),
MACHINE_VERSION VARCHAR(32),
MACHINE_DEFINITION VARCHAR(4000),
SYSTEM_ID VARCHAR(36),
MODULE_CODE VARCHAR(256),
IS_DELETED CHAR default '0',
CRT_USER VARCHAR(100),
CRT_NAME VARCHAR(100),
CRT_HOST VARCHAR(100),
CRT_TIME TIMESTAMP NULL,
UPD_USER VARCHAR(100),
UPD_NAME VARCHAR(100),
UPD_HOST VARCHAR(100),
UPD_TIME TIMESTAMP NULL,
VERSION int4
)
;
comment on table STATE_MACHINE_DEF is '状态机定义'
;
comment on column STATE_MACHINE_DEF.ID is '主键'
;
comment on column STATE_MACHINE_DEF.MACHINE_CODE is '状态机编码'
;
comment on column STATE_MACHINE_DEF.MACHINE_NAME is '状态机名称'
;
comment on column STATE_MACHINE_DEF.MACHINE_VERSION is '状态机版本号'
;
comment on column STATE_MACHINE_DEF.MACHINE_DEFINITION is '状态机定义'
;
comment on column STATE_MACHINE_DEF.SYSTEM_ID is '业务系统ID'
;
comment on column STATE_MACHINE_DEF.MODULE_CODE is '业务模块编码'
;
comment on column STATE_MACHINE_DEF.IS_DELETED is '是否删除'
;
comment on column STATE_MACHINE_DEF.CRT_USER is '创建人'
;
comment on column STATE_MACHINE_DEF.CRT_NAME is '创建人姓名'
;
comment on column STATE_MACHINE_DEF.CRT_HOST is '创建主机'
;
comment on column STATE_MACHINE_DEF.CRT_TIME is '创建时间'
;
comment on column STATE_MACHINE_DEF.UPD_USER is '最后更新人'
;
comment on column STATE_MACHINE_DEF.UPD_NAME is '最后更新人姓名'
;
comment on column STATE_MACHINE_DEF.UPD_HOST is '最后更新主机'
;
comment on column STATE_MACHINE_DEF.UPD_TIME is '最后更新时间'
;
create unique index STATE_MACHINE_DEF_U2
on STATE_MACHINE_DEF (MACHINE_NAME, MACHINE_VERSION)
;
create table STATE_MACHINE_TASK
(
ID VARCHAR(36) not null
primary key,
DEF_ID VARCHAR(36) not null,
TRANSACTION_ID VARCHAR(256) not null,
PREDECESSOR_STATE VARCHAR(32),
CURRENT_STATE VARCHAR(32),
STATUS VARCHAR(32),
REQUEST_BODY VARCHAR(2048),
RESPONSE_BODY VARCHAR(1024),
ERROR_MSG VARCHAR(1024),
RETRY_TIMES int4,
USED_RETRY_TIMES int4,
NEXT_FIRE_TIME TIMESTAMP NULL,
APPROVAL_USER VARCHAR(100),
APPROVAL_NAME VARCHAR(100),
CRT_USER VARCHAR(100),
CRT_NAME VARCHAR(100),
CRT_HOST VARCHAR(100),
CRT_TIME TIMESTAMP NULL,
UPD_USER VARCHAR(100),
UPD_NAME VARCHAR(100),
UPD_HOST VARCHAR(100),
UPD_TIME TIMESTAMP NULL,
VERSION int4,
APPROVAL_ACCOUNT VARCHAR(100),
SOURCE_STATE_LABEL VARCHAR(100),
TARGET_STATE_LABEL VARCHAR(100),
FINAL_STATE_LABEL VARCHAR(100),
CURRENT_STATE_LABEL VARCHAR(100),
TEMPLATE_VERSION_ID VARCHAR(64)
)
;
comment on table STATE_MACHINE_TASK is '状态机任务实例'
;
comment on column STATE_MACHINE_TASK.ID is '主键'
;
comment on column STATE_MACHINE_TASK.DEF_ID is '状态机定义'
;
comment on column STATE_MACHINE_TASK.TRANSACTION_ID is '业务事务ID'
;
comment on column STATE_MACHINE_TASK.PREDECESSOR_STATE is '状态机前任状态'
;
comment on column STATE_MACHINE_TASK.CURRENT_STATE is '状态机现任状态'
;
comment on column STATE_MACHINE_TASK.STATUS is '任务状态'
;
comment on column STATE_MACHINE_TASK.REQUEST_BODY is '请求体'
;
comment on column STATE_MACHINE_TASK.RESPONSE_BODY is '响应体'
;
comment on column STATE_MACHINE_TASK.ERROR_MSG is '错误信息'
;
comment on column STATE_MACHINE_TASK.RETRY_TIMES is '重试次数'
;
comment on column STATE_MACHINE_TASK.USED_RETRY_TIMES is '已重试次数'
;
comment on column STATE_MACHINE_TASK.NEXT_FIRE_TIME is '下一次调度时间'
;
comment on column STATE_MACHINE_TASK.APPROVAL_USER is '当前操作人用户id'
;
comment on column STATE_MACHINE_TASK.APPROVAL_NAME is '当前操作人姓名'
;
comment on column STATE_MACHINE_TASK.CRT_USER is '创建人'
;
comment on column STATE_MACHINE_TASK.CRT_NAME is '创建人姓名'
;
comment on column STATE_MACHINE_TASK.CRT_HOST is '创建主机'
;
comment on column STATE_MACHINE_TASK.CRT_TIME is '创建时间'
;
comment on column STATE_MACHINE_TASK.UPD_USER is '最后更新人'
;
comment on column STATE_MACHINE_TASK.UPD_NAME is '最后更新人姓名'
;
comment on column STATE_MACHINE_TASK.UPD_HOST is '最后更新主机'
;
comment on column STATE_MACHINE_TASK.UPD_TIME is '最后更新时间'
;
comment on column STATE_MACHINE_TASK.APPROVAL_ACCOUNT is '当前操作人域账号'
;
comment on column STATE_MACHINE_TASK.SOURCE_STATE_LABEL is '转化前状态名称'
;
comment on column STATE_MACHINE_TASK.TARGET_STATE_LABEL is '目标状态名称'
;
comment on column STATE_MACHINE_TASK.FINAL_STATE_LABEL is '最终状态名称'
;
comment on column STATE_MACHINE_TASK.CURRENT_STATE_LABEL is '状态机现任状态名称'
;
comment on column STATE_MACHINE_TASK.TEMPLATE_VERSION_ID is '状态机模板版本标识'
;
create index STATE_MACHINE_TASK_IDX1
on STATE_MACHINE_TASK (DEF_ID)
;
create index STATE_MACHINE_TASK_IDX2
on STATE_MACHINE_TASK (TRANSACTION_ID)
;
create index STATE_MACHINE_TASK_IDX3
on STATE_MACHINE_TASK (STATUS)
;
create table STATE_MACHINE_TASK_LOG
(
ID VARCHAR(36) not null
primary key,
TASK_ID VARCHAR(36) not null,
MACHINE_CODE VARCHAR(256),
SOURCE_STATE VARCHAR(32),
TARGET_STATE VARCHAR(32),
FINAL_STATE VARCHAR(32),
EVENT VARCHAR(256),
REQUEST_BODY VARCHAR(2048),
RESPONSE_BODY VARCHAR(1024),
OP_USER VARCHAR(100),
OP_NAME VARCHAR(100),
OP_TIME TIMESTAMP NULL,
OP_REASON VARCHAR(2000),
CRT_USER VARCHAR(100),
CRT_NAME VARCHAR(100),
CRT_HOST VARCHAR(100),
CRT_TIME TIMESTAMP NULL,
UPD_USER VARCHAR(100),
UPD_NAME VARCHAR(100),
UPD_HOST VARCHAR(100),
UPD_TIME TIMESTAMP NULL,
VERSION int4,
OP_TYPE VARCHAR(32),
SOURCE_STATE_LABEL VARCHAR(100),
TARGET_STATE_LABEL VARCHAR(100),
FINAL_STATE_LABEL VARCHAR(100),
EVENT_LABEL VARCHAR(256)
)
;
comment on table STATE_MACHINE_TASK_LOG is '状态机任务实例日志'
;
comment on column STATE_MACHINE_TASK_LOG.ID is '主键'
;
comment on column STATE_MACHINE_TASK_LOG.TASK_ID is '状态机任务实例ID'
;
comment on column STATE_MACHINE_TASK_LOG.MACHINE_CODE is '状态机编码'
;
comment on column STATE_MACHINE_TASK_LOG.SOURCE_STATE is '转化前状态'
;
comment on column STATE_MACHINE_TASK_LOG.TARGET_STATE is '目标状态'
;
comment on column STATE_MACHINE_TASK_LOG.FINAL_STATE is '实际状态'
;
comment on column STATE_MACHINE_TASK_LOG.EVENT is '事件'
;
comment on column STATE_MACHINE_TASK_LOG.REQUEST_BODY is '请求体'
;
comment on column STATE_MACHINE_TASK_LOG.RESPONSE_BODY is '响应体'
;
comment on column STATE_MACHINE_TASK_LOG.OP_USER is '操作人ID'
;
comment on column STATE_MACHINE_TASK_LOG.OP_NAME is '操作人名称'
;
comment on column STATE_MACHINE_TASK_LOG.OP_TIME is '操作时间'
;
comment on column STATE_MACHINE_TASK_LOG.OP_REASON is '操作备注'
;
comment on column STATE_MACHINE_TASK_LOG.CRT_USER is '创建人'
;
comment on column STATE_MACHINE_TASK_LOG.CRT_NAME is '创建人姓名'
;
comment on column STATE_MACHINE_TASK_LOG.CRT_HOST is '创建主机'
;
comment on column STATE_MACHINE_TASK_LOG.CRT_TIME is '创建时间'
;
comment on column STATE_MACHINE_TASK_LOG.UPD_USER is '最后更新人'
;
comment on column STATE_MACHINE_TASK_LOG.UPD_NAME is '最后更新人姓名'
;
comment on column STATE_MACHINE_TASK_LOG.UPD_HOST is '最后更新主机'
;
comment on column STATE_MACHINE_TASK_LOG.UPD_TIME is '最后更新时间'
;
comment on column STATE_MACHINE_TASK_LOG.OP_TYPE is '操作类型'
;
comment on column STATE_MACHINE_TASK_LOG.SOURCE_STATE_LABEL is '转化前状态名称'
;
comment on column STATE_MACHINE_TASK_LOG.TARGET_STATE_LABEL is '目标状态名称'
;
comment on column STATE_MACHINE_TASK_LOG.FINAL_STATE_LABEL is '最终状态名称'
;
comment on column STATE_MACHINE_TASK_LOG.EVENT_LABEL is '事件名称'
;
create index STATE_MACHINE_TASK_LOG_IDX1
on STATE_MACHINE_TASK_LOG (TASK_ID)
;
create table STATE_MACHINE_CATEGORY
(
ID VARCHAR(50) not null
primary key,
CODE VARCHAR(50),
NAME VARCHAR(100),
PARENT_ID VARCHAR(50),
IS_DELETED VARCHAR(1) default '0',
CRT_USER VARCHAR(50),
CRT_NAME VARCHAR(50),
CRT_TIME TIMESTAMP NULL,
CRT_HOST VARCHAR(100),
UPD_USER VARCHAR(100),
UPD_NAME VARCHAR(50),
UPD_TIME TIMESTAMP NULL,
UPD_HOST VARCHAR(100)
)
;
create table STATE_MACHINE_NODE_AUTH
(
ID VARCHAR(36) not null
primary key,
NODE_ID VARCHAR(50),
AUTH_TYPE VARCHAR(50),
TYPE VARCHAR(50),
CHOICED_ID VARCHAR(100),
TEMPLATE_VERSION_ID VARCHAR(100),
NODE_CODE VARCHAR(50)
)
;
create table STATE_MACHINE_TRANS_BRANCH
(
ID VARCHAR(36) not null
primary key,
TRANS_ID VARCHAR(50),
CHECK_EXPRESS VARCHAR(100),
TARGET_NODE_ID VARCHAR(50),
PRIORITY int4,
IS_DEFAULT VARCHAR(1),
CODE VARCHAR(50),
NAME VARCHAR(200),
CHECK_TIPS VARCHAR(200),
TEMPLATE_VERSION_ID VARCHAR(100),
TARGET_NODE_CODE VARCHAR(50),
TRANS_CODE VARCHAR(50)
)
;
comment on column STATE_MACHINE_TRANS_BRANCH.TARGET_NODE_CODE is '目标节点编码'
;
comment on column STATE_MACHINE_TRANS_BRANCH.TRANS_CODE is '扭转编码'
;
create table STATE_MACHINE_TRANS_CONDITON
(
ID VARCHAR(36) not null
primary key,
MISS_ACTION VARCHAR(50),
CHECK_CONDITION VARCHAR(100),
CHECK_EXPRESS VARCHAR(100),
CHECK_TIPS VARCHAR(50),
TARGET_NODE_ID VARCHAR(50),
TRANS_ID VARCHAR(50),
TEMPLATE_VERSION_ID VARCHAR(100),
TRANS_CODE VARCHAR(64),
TARGET_NODE_CODE VARCHAR(64)
)
;
comment on column STATE_MACHINE_TRANS_CONDITON.TEMPLATE_VERSION_ID is '状态机模板版本标识'
;
comment on column STATE_MACHINE_TRANS_CONDITON.TRANS_CODE is '扭转编码'
;
comment on column STATE_MACHINE_TRANS_CONDITON.TARGET_NODE_CODE is '目标节点编码'
;
create table STATE_MACHINE_TRANS_TRIG
(
ID VARCHAR(36) not null
primary key,
TRANS_ID VARCHAR(50),
ACTION VARCHAR(500),
TEMPLATE_VERSION_ID VARCHAR(100),
TRANS_CODE VARCHAR(50)
)
;
comment on column STATE_MACHINE_TRANS_TRIG.TEMPLATE_VERSION_ID is '状态机模板版本标识'
;
comment on column STATE_MACHINE_TRANS_TRIG.TRANS_CODE is '扭转编码'
;
create table STATE_MACHINE_AUDIT_NOTE
(
ID VARCHAR(100) not null
primary key,
TRANSACTION_ID VARCHAR(100),
NODE_ID VARCHAR(100),
NODE_NAME VARCHAR(100),
ACTION_KEY VARCHAR(100),
ACTION_NAME VARCHAR(100),
AUDIT_NOTE VARCHAR(2000),
EXPECTER_ID VARCHAR(100),
STATUS VARCHAR(100),
TASK_ID VARCHAR(100),
IS_DELETED VARCHAR(4),
CRT_USER VARCHAR(100),
CRT_NAME VARCHAR(100),
CRT_HOST VARCHAR(100),
CRT_TIME TIMESTAMP NULL,
UPD_USER VARCHAR(100),
UPD_NAME VARCHAR(100),
UPD_HOST VARCHAR(100),
UPD_TIME TIMESTAMP NULL,
NODE_CODE VARCHAR(100),
STATEMACHINE_CODE VARCHAR(100),
EXPECTER_ACCOUNT VARCHAR(100),
TRAIT VARCHAR(256)
)
;
comment on table STATE_MACHINE_AUDIT_NOTE is '状态机审批记录表'
;
comment on column STATE_MACHINE_AUDIT_NOTE.ID is '主键id'
;
comment on column STATE_MACHINE_AUDIT_NOTE.TRANSACTION_ID is '业务id'
;
comment on column STATE_MACHINE_AUDIT_NOTE.NODE_ID is '节点id'
;
comment on column STATE_MACHINE_AUDIT_NOTE.NODE_NAME is '节点名称'
;
comment on column STATE_MACHINE_AUDIT_NOTE.ACTION_KEY is '操作类型'
;
comment on column STATE_MACHINE_AUDIT_NOTE.ACTION_NAME is '操作名称'
;
comment on column STATE_MACHINE_AUDIT_NOTE.AUDIT_NOTE is '操作意见;备注'
;
comment on column STATE_MACHINE_AUDIT_NOTE.EXPECTER_ID is '期望操作人用户Id'
;
comment on column STATE_MACHINE_AUDIT_NOTE.STATUS is '状态(done-已操作,init-未操作)'
;
comment on column STATE_MACHINE_AUDIT_NOTE.TASK_ID is '流程id'
;
comment on column STATE_MACHINE_AUDIT_NOTE.IS_DELETED is '是否删除'
;
comment on column STATE_MACHINE_AUDIT_NOTE.CRT_USER is '创建人'
;
comment on column STATE_MACHINE_AUDIT_NOTE.CRT_NAME is '创建人姓名'
;
comment on column STATE_MACHINE_AUDIT_NOTE.CRT_HOST is '创建人主机'
;
comment on column STATE_MACHINE_AUDIT_NOTE.CRT_TIME is '创建时间'
;
comment on column STATE_MACHINE_AUDIT_NOTE.UPD_USER is '更新人'
;
comment on column STATE_MACHINE_AUDIT_NOTE.UPD_NAME is '更新人姓名'
;
comment on column STATE_MACHINE_AUDIT_NOTE.UPD_HOST is '更新人主机'
;
comment on column STATE_MACHINE_AUDIT_NOTE.UPD_TIME is '更新时间'
;
comment on column STATE_MACHINE_AUDIT_NOTE.NODE_CODE is '节点编码'
;
comment on column STATE_MACHINE_AUDIT_NOTE.STATEMACHINE_CODE is '状态机编码'
;
comment on column STATE_MACHINE_AUDIT_NOTE.EXPECTER_ACCOUNT is '期望操作人用户账号'
;
create table STATE_MACHINE_NODE
(
ID VARCHAR(36) not null
primary key,
CODE VARCHAR(50),
NAME VARCHAR(100),
TYPE VARCHAR(50),
TEMPLATE_VERSION_ID VARCHAR(50),
ENTER_ACTIONS VARCHAR(500),
EXIT_ACTIONS VARCHAR(500),
CONFIG TEXT NULL,
AUDIT_TYPE VARCHAR(100),
BIZ_STATUS_CODE VARCHAR(100),
TRAIT VARCHAR(100)
)
;
comment on column STATE_MACHINE_NODE.AUDIT_TYPE is '审核类型(标准;会审)'
;
comment on column STATE_MACHINE_NODE.BIZ_STATUS_CODE is '业务状态编码'
;
comment on column STATE_MACHINE_NODE.TRAIT is '节点特性,多个的话,分号分隔'
;
create table STATE_MACHINE_TEMPLATE
(
ID VARCHAR(36) not null
primary key,
CODE VARCHAR(50),
DESCRI VARCHAR(1000),
CATEGORY_ID VARCHAR(50),
IS_ENABLED VARCHAR(1) default '0',
IS_DELETED VARCHAR(1) default '0',
CRT_USER VARCHAR(50),
CRT_NAME VARCHAR(50),
CRT_TIME TIMESTAMP NULL,
CRT_HOST VARCHAR(100),
UPD_USER VARCHAR(100),
UPD_NAME VARCHAR(50),
UPD_TIME TIMESTAMP NULL,
UPD_HOST VARCHAR(100),
NAME VARCHAR(100),
INTERCEPTORS VARCHAR(500),
CONFIG TEXT NULL
)
;
create table STATE_MACHINE_TEMPLATE_VERSION
(
ID VARCHAR(36) not null
primary key,
TEMPLATE_ID VARCHAR(50),
VERSION_NO int4,
IS_ENABLED VARCHAR(1),
IS_DELETED VARCHAR(1),
CRT_USER VARCHAR(50),
CRT_NAME VARCHAR(50),
CRT_TIME TIMESTAMP NULL,
CRT_HOST VARCHAR(100),
UPD_USER VARCHAR(100),
UPD_NAME VARCHAR(50),
UPD_TIME TIMESTAMP NULL,
UPD_HOST VARCHAR(100),
DESCRIPTION VARCHAR(500),
VERSION_NAME VARCHAR(200),
CONFIG TEXT NULL
)
;
create table STATE_MACHINE_TRANS_CONF
(
CODE VARCHAR(50),
ID VARCHAR(36) not null
primary key,
NAME VARCHAR(100),
TEMPLATE_VERSION_ID VARCHAR(50),
IS_AUTO VARCHAR(50),
TYPE VARCHAR(50),
SOURCE_NODE_ID VARCHAR(50),
TARGET_NODE_ID VARCHAR(50),
EVENT_CODE VARCHAR(50),
ERROR_ACTION VARCHAR(50),
CONFIG TEXT NULL,
SOURCE_NODE_CODE VARCHAR(50),
TARGET_NODE_CODE VARCHAR(50)
)
;
集成依赖
配置注解
同业务域一般配置一个项目为本地数据库获取,其他项目为远程方式从DB项目获取
1、配置远程获取
@EnableCSBRedisCache
@EnableRestStateMachine
2、配置本地数据库获取
@EnableCSBRedisCache
@EnableRestStateMachine
配置依赖
springboot 1.5.9
更换或添加
<dependency>
<groupId>com.cvte.csb</groupId>
<artifactId>csb-statemachine-client</artifactId>
<version>1.2-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.cvte.csb</groupId>
<artifactId>csb-statemachine-admin</artifactId>
<version>1.2-SNAPSHOT</version>
</dependency>
springboot 2.+
更换或添加
<dependency>
<groupId>com.cvte.csb</groupId>
<artifactId>csb-statemachine-client</artifactId>
<version>1.2.PLUS-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.cvte.csb</groupId>
<artifactId>csb-statemachine-admin</artifactId>
<version>1.2.PLUS-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>
基础配置
csb:
mybatis:
basePackage: com.cvte.csb.statemachine.**.mapper
xmlLocation: classpath*:mapper/*.xmlswagger:
swagger:
basePackage: com.cvte.csb.statemachine.admin.controller
数据源
spring:
datasource: # 配置持久化
driver-class-name: org.postgresql.Driver
url: jdbc:postgresql://pgtest002.gz.cvte.cn:5432/xxx
username: xxx
password: xxx
filters: stat
maxActive: 20
initialSize: 1
maxWait: 60000
minIdle: 1
timeBetweenEvictionRunsMillis: 60000
minEvictableIdleTimeMillis: 300000
validationQuery: select 'x' from DUAL
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
poolPreparedStatements: true
maxOpenPreparedStatements: 20
redis: # 配置分布式锁
host: redis-dev001.gz.cvte.cn
password: xxxx
database: 4
设置打印日志
logging:
level:
tk.mybatis: DEBUG
org.mybatis: DEBUG
com.cvte.csb: DEBUG
启用引擎
@EnableCSB
@EnableCSBRedisCache
@EnableCSBMybatis
@EnableDbStateMachine
@EnableFeignClients({"com.cvte.csb.statemachine"})
public class SampleBootstrap {
public static void main(String[] args) {
SpringApplication app = new SpringApplication(SampleBootstrap.class);
app.run(args);
}
}
配置状态流
流程设计
内置事件编码说明
驳回: handler_refuse
撤回: drafter_return
转办: handler_commission
废弃: drafter_abandon
引擎示例开发
/**
* 开始->起草->单人审核->两人会审(1通过,2通过)->单人审核1->结束
*/
@Test
@Transactional
public void testStatemachineJointTrial1() throws InterruptedException {
String transactionId = "2ddf30914412412113213";
String statemachine = "ORDER1-YDW";
OperatingUser operatingUser = new OperatingUser();
operatingUser.setId("yeduanwang");
operatingUser.setAccount("yeduanwang");
operatingUser.setName("叶端旺");
CurrentContext.setCurrentOperatingUser(operatingUser);
//1.状态机启动
stateMachineService.startStateMachineSyncV2(statemachine, transactionId);
EventHeader eventHeader = new EventHeader();
//2.提交,审批记录中操作名称显示"提交-label"
eventHeader.addHeader(EventHeaderConstant.CURRENT_EVENT_LABEL,"提交-label");
stateMachineService.dispatchEventV2(transactionId, new DefaultEvent("提交",eventHeader));
eventHeader.removeHeader(EventHeaderConstant.CURRENT_EVENT_LABEL);
//3.单人审核通过
stateMachineService.dispatchEventV2(transactionId, new DefaultEvent("单人审核通过",eventHeader));
List<ApproverVO> approverVoList = new ArrayList<>();
ApproverVO approverVO = new ApproverVO("叶端旺","yeduanwang");
approverVoList.add(approverVO);
stateMachineService.removeJointAuditApprover(transactionId,statemachine,"会审",approverVoList);
List<ApproverVO> approverVoList1 = new ArrayList<>();
ApproverVO approverVO1 = new ApproverVO("叶端旺","yeduanwang");
approverVoList1.add(approverVO1);
stateMachineService.addJointAuditApprover(transactionId,statemachine,"会审",approverVoList1);
//把niewei转办给huangweihong
ApproverVO toApprover = new ApproverVO("huangweihong","huangweihong","huangweihong",null);
ApproverVO fromApprover = new ApproverVO("niewei","niewei","niewei",null);
stateMachineService.updateApproverV2(transactionId,toApprover,fromApprover,null);
StateMachineTask task = stateMachineTaskService.getStateMachineTaskByTransaction(transactionId);
operatingUser.setId("huangweihong");
operatingUser.setAccount("huangweihong");
operatingUser.setName("黄威鸿");
CurrentContext.setCurrentOperatingUser(operatingUser);
//4.会审通过-用户1
stateMachineService.dispatchEventV2(transactionId, new DefaultEvent("会审通过",eventHeader));
//4.会审通过-用户2
OperatingUser operatingUser1 = new OperatingUser();
operatingUser1.setId("yeduanwang");
operatingUser1.setAccount("yeduanwang");
operatingUser1.setName("叶端旺");
CurrentContext.setCurrentOperatingUser(operatingUser1);
stateMachineService.dispatchEventV2(transactionId, new DefaultEvent("会审通过",eventHeader));
//获取用户当前按钮
List<EventBtnDTO> eventBtnDTOS = stateMachineService.getNextEventsV2(transactionId,"yeduanwang");
EventBtnDTO returnDto = eventBtnDTOS.get(1);
eventHeader.addHeader(EventHeaderConstant.CURRENT_STATE_NAME,returnDto.getCurrentStateCode());
if(StringUtils.isNotEmpty(returnDto.getTargetStateCode())){
eventHeader.addHeader(EventHeaderConstant.STATE_GOD_TARGET,returnDto.getTargetStateCode());
}
//5.撤回审批 (用户yeduanwang)
stateMachineService.dispatchEventV2(transactionId, new DefaultEvent(returnDto.getCode(), eventHeader));
//6.会审通过 (用户yeduanwang)
stateMachineService.dispatchEventV2(transactionId, new DefaultEvent("会审通过",eventHeader));
List<EventBtnDTO> refusetnDTOS = stateMachineService.getNextEventsV2(transactionId,"yeduanwang");
//驳回前,获取所有可驳回的节点
List<StateMachineTaskLog> allPreTaskLog = stateMachineService.getPreEventNoCircle(transactionId,statemachine);
String refuseNode = allPreTaskLog.get(2).getSourceState();
EventBtnDTO refuseDto = refusetnDTOS.get(0);
eventHeader.addHeader(EventHeaderConstant.CURRENT_STATE_NAME,refuseDto.getCurrentStateCode());
eventHeader.addHeader(EventHeaderConstant.STATE_GOD_TARGET,refuseNode);
eventHeader.addHeader(EventHeaderConstant.HANDLER_EVENT_TRAIT,"研发工程师");
eventHeader.addHeader(EventHeaderConstant.HANDLER_REFUSE_USER,"yeduanwang");
//7.驳回到会审节点(内部节点为 研发工程师,审核人为 yeduanwang)
stateMachineService.dispatchEventV2(transactionId, new DefaultEvent(SysEventType.HANDLER_REFUSE.getCode(), eventHeader));
}
会审节点注意事项:
1、上帝事件跳入会审节点不触发会审初始化动作
解决办法:
拦截器继承抽象类 AbstractJointTrialInterceptor ,并调用 super.postStateChange(stateMachine,converter)
例:
@Component
public class XxxInterceptor extends AbstractJointTrialInterceptor{
......
@Override
public void postStateChange(StateMachine stateMachine, Converter converter) {
super.postStateChange(stateMachine,converter);
.... 业务系统逻辑
}
......
作者:王浩彬 创建时间:2021-11-02 19:16
最后编辑:叶端旺 更新时间:2024-12-27 15:01
最后编辑:叶端旺 更新时间:2024-12-27 15:01