示例工程

初始化脚本

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