可复用,可多流程的简单审批流程引擎

目录结构

相关表

CREATE TABLE PROCESS_DEF_MAIN
(
  ID                                  NUMBER(18) generated by default on null as identity (start with 17),
  PROCESS_CODE                        VARCHAR2(200),
  PROCESS_NAME                        VARCHAR2(200),
  VERSION                             NUMBER(4),
  PROCESS_ORDER                       NUMBER(4),
  DELETED                             NUMBER(4),
  USER_DEFIN1                         VARCHAR2(200),
  USER_DEFIN2                         VARCHAR2(200),
  USER_DEFIN3                         VARCHAR2(200),
  CREATE_TIME                         DATE DEFAULT  SYSDATE
)
TABLESPACE IERS_DATA_TBS;
ALTER  TABLE PROCESS_DEF_MAIN
ADD CONSTRAINT  PROCESS_DEF_MAIN_PK PRIMARY KEY (ID);
COMMENT ON TABLE PROCESS_DEF_MAIN IS '流程主实例';
COMMENT ON COLUMN PROCESS_DEF_MAIN.ID IS '主键自增长';
COMMENT ON COLUMN PROCESS_DEF_MAIN.PROCESS_CODE IS '流程编码';
COMMENT ON COLUMN PROCESS_DEF_MAIN.PROCESS_NAME IS '流程名称';
COMMENT ON COLUMN PROCESS_DEF_MAIN.VERSION IS '版本';
COMMENT ON COLUMN PROCESS_DEF_MAIN.PROCESS_ORDER IS   '流程优先级';
COMMENT ON COLUMN PROCESS_DEF_MAIN.DELETED IS '是否删除1:是;0:否';
COMMENT ON COLUMN PROCESS_DEF_MAIN.USER_DEFIN1 IS '保留字段1';
COMMENT ON COLUMN PROCESS_DEF_MAIN.USER_DEFIN2 IS '保留字段2';
COMMENT ON COLUMN PROCESS_DEF_MAIN.USER_DEFIN3 IS '保留字段3';
COMMENT ON COLUMN PROCESS_DEF_MAIN.CREATE_TIME IS '写入时间';




CREATE TABLE PROCESS_DEF_ACTIVITY
(
  ID                                  NUMBER(18) generated by default on null as identity (start with 17),
  ACTIVITY_ID                         VARCHAR2(200),
  PROCESS_DEF_MAIN_ID                 NUMBER(18),
  ACTIVITY_ENAME                      VARCHAR2(200),
  ACTIVITY_CNAME                      VARCHAR2(200),
  USER_DEFIN1                         VARCHAR2(200),
  USER_DEFIN2                         VARCHAR2(200),
  USER_DEFIN3                         VARCHAR2(200),
  CREATE_TIME                         DATE DEFAULT  SYSDATE
)
TABLESPACE IERS_DATA_TBS;
ALTER  TABLE PROCESS_DEF_ACTIVITY
ADD CONSTRAINT  PROCESS_DEF_ACTIVITY_PK PRIMARY KEY (ID);
COMMENT ON TABLE PROCESS_DEF_ACTIVITY IS '流程中动作';
COMMENT ON COLUMN PROCESS_DEF_ACTIVITY.ID IS '主键自增长';
COMMENT ON COLUMN PROCESS_DEF_ACTIVITY.ACTIVITY_ID IS '流程动作';
COMMENT ON COLUMN PROCESS_DEF_ACTIVITY.PROCESS_DEF_MAIN_ID IS '主流程id';
COMMENT ON COLUMN PROCESS_DEF_ACTIVITY.ACTIVITY_ENAME IS '动作英文名称';
COMMENT ON COLUMN PROCESS_DEF_ACTIVITY.ACTIVITY_CNAME IS   '动作中文名称';
COMMENT ON COLUMN PROCESS_DEF_ACTIVITY.USER_DEFIN1 IS '保留字段1';
COMMENT ON COLUMN PROCESS_DEF_ACTIVITY.USER_DEFIN2 IS '保留字段2';
COMMENT ON COLUMN PROCESS_DEF_ACTIVITY.USER_DEFIN3 IS '保留字段3';
COMMENT ON COLUMN PROCESS_DEF_ACTIVITY.CREATE_TIME IS '写入时间';

CREATE TABLE PROCESS_DEF_NODE
(
  ID                                  NUMBER(18) generated by default on null as identity (start with 17),
  NODE_ID                             VARCHAR2(200),
  PROCESS_DEF_MAIN_ID                 NUMBER(18),
  NODE_ENAME                          VARCHAR2(200),
  NODE_CNAME                          VARCHAR2(200),
  USER_DEFIN1                         VARCHAR2(200),
  USER_DEFIN2                         VARCHAR2(200),
  USER_DEFIN3                         VARCHAR2(200),
  CREATE_TIME                         DATE DEFAULT  SYSDATE
)
TABLESPACE IERS_DATA_TBS;
ALTER  TABLE PROCESS_DEF_NODE
ADD CONSTRAINT  PROCESS_DEF_NODE_PK PRIMARY KEY (ID);
COMMENT ON TABLE PROCESS_DEF_NODE IS '流程中节点';
COMMENT ON COLUMN PROCESS_DEF_NODE.ID IS '主键自增长';
COMMENT ON COLUMN PROCESS_DEF_NODE.NODE_ID IS '节点id';
COMMENT ON COLUMN PROCESS_DEF_NODE.PROCESS_DEF_MAIN_ID IS '主流程id';
COMMENT ON COLUMN PROCESS_DEF_NODE.NODE_ENAME IS '节点英文名称';
COMMENT ON COLUMN PROCESS_DEF_NODE.NODE_CNAME IS   '节点中文名称';
COMMENT ON COLUMN PROCESS_DEF_NODE.USER_DEFIN1 IS '保留字段1';
COMMENT ON COLUMN PROCESS_DEF_NODE.USER_DEFIN2 IS '保留字段2';
COMMENT ON COLUMN PROCESS_DEF_NODE.USER_DEFIN3 IS '保留字段3';
COMMENT ON COLUMN PROCESS_DEF_NODE.CREATE_TIME IS '写入时间';


CREATE TABLE PROCESS_DEF_NODE_ACTIVITY
(
  ID                                  NUMBER(18) generated by default on null as identity (start with 17),
  PROCESS_DEF_MAIN_ID                 NUMBER(18),
  CURRENT_NODE_ID                     VARCHAR2(200),
  NEXT_NODE_ID                        VARCHAR2(200),
  ACTIVITY_ID                         VARCHAR2(200),
	CONDITION                           VARCHAR2(200),
	USER_DEFIN1                         VARCHAR2(200),
  USER_DEFIN2                         VARCHAR2(200),
  USER_DEFIN3                         VARCHAR2(200),
  CREATE_TIME                         DATE DEFAULT  SYSDATE
)
TABLESPACE IERS_DATA_TBS;
ALTER  TABLE PROCESS_DEF_NODE_ACTIVITY
ADD CONSTRAINT  PROCESS_DEF_NODE_ACTIVITY_PK PRIMARY KEY (ID);
COMMENT ON TABLE PROCESS_DEF_NODE_ACTIVITY IS '流程中节点与动作';
COMMENT ON COLUMN PROCESS_DEF_NODE_ACTIVITY.ID IS '主键自增长';
COMMENT ON COLUMN PROCESS_DEF_NODE_ACTIVITY.PROCESS_DEF_MAIN_ID IS '主流程id';
COMMENT ON COLUMN PROCESS_DEF_NODE_ACTIVITY.CURRENT_NODE_ID IS '单前节点id';
COMMENT ON COLUMN PROCESS_DEF_NODE_ACTIVITY.NEXT_NODE_ID IS   '下一节点id';
COMMENT ON COLUMN PROCESS_DEF_NODE_ACTIVITY.ACTIVITY_ID IS   '单前动作id';
COMMENT ON COLUMN PROCESS_DEF_NODE_ACTIVITY.CONDITION IS   '条件';
COMMENT ON COLUMN PROCESS_DEF_NODE_ACTIVITY.USER_DEFIN1 IS '保留字段1';
COMMENT ON COLUMN PROCESS_DEF_NODE_ACTIVITY.USER_DEFIN2 IS '保留字段2';
COMMENT ON COLUMN PROCESS_DEF_NODE_ACTIVITY.USER_DEFIN3 IS '保留字段3';
COMMENT ON COLUMN PROCESS_DEF_NODE_ACTIVITY.CREATE_TIME IS '写入时间';


CREATE TABLE PROCESS_INSTANCE
(
  ID                                  NUMBER(18) generated by default on null as identity (start with 17),
  PROCESS_DEF_MAIN_ID                 NUMBER(18),
  BIZ_ID                              NUMBER(18),
	BIZ_NO                              VARCHAR2(200),
  NODE_ID                             VARCHAR2(200),
  ACTIVITY_ID                         VARCHAR2(200),
	COMMENTS                            VARCHAR2(200),
	VERSION                             NUMBER(4) DEFAULT  0,
	ACTIVE                              NUMBER(4) DEFAULT  1,
	PROCESS_CODE                        VARCHAR2(200),
	USER_DEFIN1                         VARCHAR2(200),
  USER_DEFIN2                         VARCHAR2(200),
  USER_DEFIN3                         VARCHAR2(200),
  CREATE_TIME                         DATE DEFAULT  SYSDATE,
	CREATED_BY                          VARCHAR2(200),
	UPDATED_AT                          DATE DEFAULT  SYSDATE,
	UPDATED_BY                          VARCHAR2(200)
)
TABLESPACE IERS_DATA_TBS;
ALTER  TABLE PROCESS_INSTANCE
ADD CONSTRAINT  PROCESS_INSTANCE_PK PRIMARY KEY (ID);
COMMENT ON TABLE PROCESS_INSTANCE IS '流程审批信息';
COMMENT ON COLUMN PROCESS_INSTANCE.ID IS '主键自增长';
COMMENT ON COLUMN PROCESS_INSTANCE.PROCESS_DEF_MAIN_ID IS '主流程id';
COMMENT ON COLUMN PROCESS_INSTANCE.BIZ_ID IS '事物表主键';
COMMENT ON COLUMN PROCESS_INSTANCE.BIZ_NO IS   '事物表单号';
COMMENT ON COLUMN PROCESS_INSTANCE.NODE_ID IS   '节点id';
COMMENT ON COLUMN PROCESS_INSTANCE.ACTIVITY_ID IS   '动作id';
COMMENT ON COLUMN PROCESS_INSTANCE.COMMENTS IS   '审批意见';
COMMENT ON COLUMN PROCESS_INSTANCE.VERSION IS   '版本';
COMMENT ON COLUMN PROCESS_INSTANCE.ACTIVE IS   '条件';
COMMENT ON COLUMN PROCESS_INSTANCE.PROCESS_CODE IS   '流程代码';
COMMENT ON COLUMN PROCESS_INSTANCE.USER_DEFIN1 IS '保留字段1';
COMMENT ON COLUMN PROCESS_INSTANCE.USER_DEFIN2 IS '保留字段2';
COMMENT ON COLUMN PROCESS_INSTANCE.USER_DEFIN3 IS '保留字段3';
COMMENT ON COLUMN PROCESS_INSTANCE.CREATE_TIME IS '写入时间';
COMMENT ON COLUMN PROCESS_INSTANCE.CREATED_BY IS '写入人';
COMMENT ON COLUMN PROCESS_INSTANCE.UPDATED_AT IS '修改时间';
COMMENT ON COLUMN PROCESS_INSTANCE.UPDATED_BY IS '修改人';



CREATE TABLE PROCESS_INSTANCE_HIS
(
  ID                                  NUMBER(18) generated by default on null as identity (start with 17),
  PROCESS_INSTANCE_ID                 NUMBER(18),
  PROCESS_DEF_MAIN_ID                 NUMBER(18),
	BIZ_ID                              VARCHAR2(200),
	BIZ_NO                              VARCHAR2(200),
  NODE_ID                             VARCHAR2(200),
  ACTIVITY_ID                         VARCHAR2(200),
	COMMENTS                            VARCHAR2(200),
	VERSION                             NUMBER(4) DEFAULT  0,
	ACTIVE                              NUMBER(4) DEFAULT  1,
	PROCESS_CODE                        VARCHAR2(200),
	USER_DEFIN1                         VARCHAR2(200),
  USER_DEFIN2                         VARCHAR2(200),
  USER_DEFIN3                         VARCHAR2(200),
  CREATE_TIME                         DATE DEFAULT  SYSDATE,
	CREATED_BY                          VARCHAR2(200),
	UPDATED_AT                          DATE DEFAULT  SYSDATE,
	UPDATED_BY                          VARCHAR2(200)
)
TABLESPACE IERS_DATA_TBS;
ALTER  TABLE PROCESS_INSTANCE_HIS
ADD CONSTRAINT  PROCESS_INSTANCE_HIS_PK PRIMARY KEY (ID);
COMMENT ON TABLE PROCESS_INSTANCE_HIS IS '流程审批信息历史表';
COMMENT ON COLUMN PROCESS_INSTANCE_HIS.ID IS '主键自增长';
COMMENT ON COLUMN PROCESS_INSTANCE_HIS.PROCESS_INSTANCE_ID IS '流程审批信息id';
COMMENT ON COLUMN PROCESS_INSTANCE_HIS.PROCESS_DEF_MAIN_ID IS '流程主实例id';
COMMENT ON COLUMN PROCESS_INSTANCE_HIS.BIZ_ID IS '事物表主键';
COMMENT ON COLUMN PROCESS_INSTANCE_HIS.BIZ_NO IS   '事物表单号';
COMMENT ON COLUMN PROCESS_INSTANCE_HIS.NODE_ID IS   '节点id';
COMMENT ON COLUMN PROCESS_INSTANCE_HIS.ACTIVITY_ID IS   '动作id';
COMMENT ON COLUMN PROCESS_INSTANCE_HIS.COMMENTS IS   '审批意见';
COMMENT ON COLUMN PROCESS_INSTANCE_HIS.VERSION IS   '版本';
COMMENT ON COLUMN PROCESS_INSTANCE_HIS.ACTIVE IS   '条件';
COMMENT ON COLUMN PROCESS_INSTANCE_HIS.PROCESS_CODE IS   '流程代码';
COMMENT ON COLUMN PROCESS_INSTANCE_HIS.USER_DEFIN1 IS '保留字段1';
COMMENT ON COLUMN PROCESS_INSTANCE_HIS.USER_DEFIN2 IS '保留字段2';
COMMENT ON COLUMN PROCESS_INSTANCE_HIS.USER_DEFIN3 IS '保留字段3';
COMMENT ON COLUMN PROCESS_INSTANCE_HIS.CREATE_TIME IS '写入时间';
COMMENT ON COLUMN PROCESS_INSTANCE_HIS.CREATED_BY IS '写入人';
COMMENT ON COLUMN PROCESS_INSTANCE_HIS.UPDATED_AT IS '修改时间';
COMMENT ON COLUMN PROCESS_INSTANCE_HIS.UPDATED_BY IS '修改人';




CREATE TABLE PROCESS_USER
(
  ID                                  NUMBER(18) generated by default on null as identity (start with 17),
  PROCESS_INSTANCE_ID                 NUMBER(18),
  USER_ID                             VARCHAR2(200),
	ACTIVE                              NUMBER(4) DEFAULT  1,
	USER_DEFIN1                         VARCHAR2(200),
  USER_DEFIN2                         VARCHAR2(200),
  USER_DEFIN3                         VARCHAR2(200),
  CREATE_TIME                         DATE DEFAULT  SYSDATE,
	CREATED_BY                          VARCHAR2(200),
	UPDATED_AT                          DATE DEFAULT  SYSDATE,
	UPDATED_BY                          VARCHAR2(200)
)
TABLESPACE IERS_DATA_TBS;
ALTER  TABLE PROCESS_USER
ADD CONSTRAINT  PROCESS_USER_PK PRIMARY KEY (ID);
COMMENT ON TABLE PROCESS_USER IS '流程人员表';
COMMENT ON COLUMN PROCESS_USER.ID IS '主键自增长';
COMMENT ON COLUMN PROCESS_USER.PROCESS_INSTANCE_ID IS '流程审批信息id';
COMMENT ON COLUMN PROCESS_USER.USER_ID IS '流程人id';

COMMENT ON COLUMN PROCESS_USER.ACTIVE IS   '条件';
COMMENT ON COLUMN PROCESS_USER.USER_DEFIN1 IS '保留字段1';
COMMENT ON COLUMN PROCESS_USER.USER_DEFIN2 IS '保留字段2';
COMMENT ON COLUMN PROCESS_USER.USER_DEFIN3 IS '保留字段3';
COMMENT ON COLUMN PROCESS_USER.CREATE_TIME IS '写入时间';
COMMENT ON COLUMN PROCESS_USER.CREATED_BY IS '写入人';
COMMENT ON COLUMN PROCESS_USER.UPDATED_AT IS '修改时间';
COMMENT ON COLUMN PROCESS_USER.UPDATED_BY IS '修改人';



CREATE TABLE PROCESS_USER_HIS
(
  ID                                  NUMBER(18) generated by default on null as identity (start with 17),
  PROCESS_INSTANCE_HIS_ID             NUMBER(18),
  USER_ID                             VARCHAR2(200),
	ACTIVE                              NUMBER(4) DEFAULT  1,
	USER_DEFIN1                         VARCHAR2(200),
  USER_DEFIN2                         VARCHAR2(200),
  USER_DEFIN3                         VARCHAR2(200),
  CREATE_TIME                         DATE DEFAULT  SYSDATE,
	CREATED_BY                          VARCHAR2(200),
	UPDATED_AT                          DATE DEFAULT  SYSDATE,
	UPDATED_BY                          VARCHAR2(200)
)
TABLESPACE IERS_DATA_TBS;
ALTER  TABLE PROCESS_USER_HIS
ADD CONSTRAINT  PROCESS_USER_HIS_PK PRIMARY KEY (ID);
COMMENT ON TABLE PROCESS_USER_HIS IS '流程人员历史表';
COMMENT ON COLUMN PROCESS_USER_HIS.ID IS '主键自增长';
COMMENT ON COLUMN PROCESS_USER_HIS.PROCESS_INSTANCE_HIS_ID IS '流程审批信息历史id';
COMMENT ON COLUMN PROCESS_USER_HIS.USER_ID IS '流程人id';

COMMENT ON COLUMN PROCESS_USER_HIS.ACTIVE IS   '条件';
COMMENT ON COLUMN PROCESS_USER_HIS.USER_DEFIN1 IS '保留字段1';
COMMENT ON COLUMN PROCESS_USER_HIS.USER_DEFIN2 IS '保留字段2';
COMMENT ON COLUMN PROCESS_USER_HIS.USER_DEFIN3 IS '保留字段3';
COMMENT ON COLUMN PROCESS_USER_HIS.CREATE_TIME IS '写入时间';
COMMENT ON COLUMN PROCESS_USER_HIS.CREATED_BY IS '写入人';
COMMENT ON COLUMN PROCESS_USER_HIS.UPDATED_AT IS '修改时间';
COMMENT ON COLUMN PROCESS_USER_HIS.UPDATED_BY IS '修改人';

相关存储过程

-----存储过程------
CREATE OR REPLACE PROCEDURE SP_START_WORKFLOW_STATUS
(
  P_PROC_CODE       IN VARCHAR2   -- 主实例代码
, P_MAIN_ID         IN NUMBER     -- 事件表id
, P_BIZ_NO          IN VARCHAR2   -- 事件表单号
, P_EMPID           IN VARCHAR2   -- 流程审批人
, P_STAGE           IN VARCHAR2   -- 流程节点
, O_RESULT          OUT VARCHAR2
, O_NEXT_NODE_ID    OUT NVARCHAR2
) AS
   V_PROCESS_DEF_MAIN_ID NUMBER(18);
   V_PROCESS_INSTANCE_SEQID     NUMBER(18);
   V_PROCESS_INSTANCE_HIS_SEQID     NUMBER(18);
BEGIN
SELECT ID INTO V_PROCESS_DEF_MAIN_ID FROM PROCESS_DEF_MAIN WHERE PROCESS_CODE = P_PROC_CODE;
IF V_PROCESS_DEF_MAIN_ID IS NOT NULL THEN
     INSERT INTO PROCESS_INSTANCE
            (PROCESS_DEF_MAIN_ID,
             BIZ_ID,
             BIZ_NO,
             PROCESS_CODE,
             NODE_ID,
             ACTIVITY_ID,
             COMMENTS,
             VERSION,
             ACTIVE,
             CREATE_TIME,
             CREATED_BY,
             UPDATED_AT,
             UPDATED_BY)
          VALUES
            (V_PROCESS_DEF_MAIN_ID,
             P_MAIN_ID,
             P_BIZ_NO,
             P_PROC_CODE,
             P_STAGE,
             'ACT_CREATION',
             NULL,
             0,
             1,
             SYSDATE,
             'SYS',
             SYSDATE,
             'SYS') RETURN ID INTO V_PROCESS_INSTANCE_SEQID;

     INSERT INTO PROCESS_USER
        (PROCESS_INSTANCE_ID,
         USER_ID,
         ACTIVE,
         CREATE_TIME,
         CREATED_BY,
         UPDATED_AT,
         UPDATED_BY)
      VALUES
        (V_PROCESS_INSTANCE_SEQID,
         P_EMPID, -- P_EMPID
         1,
         SYSDATE,
         'SYS',
         SYSDATE,
         'SYS');

         INSERT INTO PROCESS_INSTANCE_HIS
            (PROCESS_DEF_MAIN_ID,
             PROCESS_INSTANCE_ID,
             BIZ_ID,
             BIZ_NO,
             PROCESS_CODE,
             NODE_ID,
             ACTIVITY_ID,
             COMMENTS,
             VERSION,
             ACTIVE,
             CREATE_TIME,
             CREATED_BY,
             UPDATED_AT,
             UPDATED_BY)
          VALUES
            (V_PROCESS_DEF_MAIN_ID,
            V_PROCESS_INSTANCE_SEQID,
             P_MAIN_ID,
             P_BIZ_NO,
             P_PROC_CODE,
             P_STAGE,
             'ACT_CREATION',
             NULL,
             0,
             1,
             SYSDATE,
             'SYS',
             SYSDATE,
             'SYS') RETURN ID INTO V_PROCESS_INSTANCE_HIS_SEQID;

     INSERT INTO PROCESS_USER_HIS
        (PROCESS_INSTANCE_HIS_ID,
         USER_ID,
         ACTIVE,
         CREATE_TIME,
         CREATED_BY,
         UPDATED_AT,
         UPDATED_BY)
      VALUES
        (V_PROCESS_INSTANCE_HIS_SEQID,
         P_EMPID,
         1,
         SYSDATE,
         'SYS',
         SYSDATE,
         'SYS');
      O_RESULT       := 'OK';
      O_NEXT_NODE_ID :='0';
  END IF ;

  COMMIT ;
  EXCEPTION
  WHEN OTHERS THEN
    O_RESULT       := 'FAILED';
    O_NEXT_NODE_ID := null;
    dbms_output.put_line(SQLERRM);
    ROLLBACK;
END SP_START_WORKFLOW_STATUS;





create or replace procedure SP_UPDATE_WORKFLOW_STATUS(P_PROC_CODE       IN NVARCHAR2, -- process code  主流程code
                                                      P_CUR_NODE_ID     IN NVARCHAR2, -- current node id 单前节点
                                                      P_CUR_ACTIVITY_ID IN NVARCHAR2, -- current activity id  单前动作
                                                      P_CONDITION       IN NVARCHAR2:=0, -- activity condition 流程版本
                                                      P_MAIN_ID         IN NUMBER,    --业务 id
                                                      P_BIZ_NO          IN NVARCHAR2, --业务单号
                                                      P_EMPID           IN NVARCHAR2, -- current emp id(UPDATE_BY)  当前user
                                                      P_TO_EMP_ID       IN NVARCHAR2, -- approve emp id             下一个user
                                                      P_SAVE_IN_HISTORY NVARCHAR2 := 'Y', --whether need current step move to history
                                                      P_COMMENTS        IN NVARCHAR2:=NULL, -- COMMENTS
                                                      O_RESULT          OUT NVARCHAR2,
                                                      O_NEXT_NODE_ID    OUT NVARCHAR2) is
  V_NEXT_NODE_ID               NVARCHAR2(50);
  V_PROCESS_INSTANCE_HIS_SEQID NUMBER(18);
  V_HIS_SEQ_NO                 NVARCHAR2(20) := TO_CHAR(SYSDATE,
                                                        'YYYYMMDDHH24MMSS');
BEGIN
     SELECT B.NEXT_NODE_ID  INTO V_NEXT_NODE_ID
     FROM        PROCESS_DEF_MAIN A
     INNER JOIN  PROCESS_DEF_NODE_ACTIVITY B ON A.ID = B.PROCESS_DEF_MAIN_ID
     WHERE A.DELETED = 0
     AND   A.PROCESS_CODE = P_PROC_CODE
     AND   B.CURRENT_NODE_ID = P_CUR_NODE_ID
     AND   B.ACTIVITY_ID = P_CUR_ACTIVITY_ID
     AND   B.CONDITION = P_CONDITION;
     dbms_output.put_line(V_NEXT_NODE_ID);
  --move process instance to history
  IF P_SAVE_IN_HISTORY = 'Y' AND V_NEXT_NODE_ID IS NOT NULL THEN
        -- SHOULD BE ONLY 1 RECORD FOR EACH BIZ_ID AND PROCESS_CODE
        --  UPDATE ACTIVITY TO CURRENT ACTIVITY
        UPDATE PROCESS_INSTANCE SET ACTIVITY_ID=P_CUR_ACTIVITY_ID,COMMENTS=P_COMMENTS,UPDATED_AT=SYSDATE,UPDATED_BY=P_EMPID WHERE BIZ_ID = P_MAIN_ID AND PROCESS_CODE = P_PROC_CODE;

        FOR PROC_INS_RECORD IN (SELECT *
                                  FROM PROCESS_INSTANCE P
                                 WHERE P.BIZ_ID = P_MAIN_ID
                                   AND P.PROCESS_CODE = P_PROC_CODE) LOOP

          INSERT INTO PROCESS_INSTANCE_HIS
            (PROCESS_INSTANCE_ID,
             PROCESS_DEF_MAIN_ID,
             BIZ_ID,
             BIZ_NO,
             PROCESS_CODE,
             NODE_ID,
             ACTIVITY_ID,
             COMMENTS,
             VERSION,
             ACTIVE,
             CREATE_TIME,
             CREATED_BY,
             UPDATED_AT,
             UPDATED_BY)
          VALUES
            (PROC_INS_RECORD.ID,
             PROC_INS_RECORD.PROCESS_DEF_MAIN_ID,
             PROC_INS_RECORD.BIZ_ID,
             PROC_INS_RECORD.BIZ_NO,
             PROC_INS_RECORD.PROCESS_CODE,
             PROC_INS_RECORD.NODE_ID,
             PROC_INS_RECORD.ACTIVITY_ID,
             PROC_INS_RECORD.COMMENTS,
             PROC_INS_RECORD.VERSION,
             PROC_INS_RECORD.ACTIVE,
             SYSDATE,
             'SYS',
             SYSDATE,
             'SYS') RETURN ID INTO V_PROCESS_INSTANCE_HIS_SEQID;

          FOR PROC_USER_INS_RECORD IN (SELECT *
                                         FROM PROCESS_USER U
                                        WHERE U.PROCESS_INSTANCE_ID =
                                              PROC_INS_RECORD.ID AND U.USER_ID=P_EMPID) LOOP
            INSERT INTO PROCESS_USER_HIS
              (PROCESS_INSTANCE_HIS_ID,
               USER_ID,
               ACTIVE,
               CREATE_TIME,
               CREATED_BY,
               UPDATED_AT,
               UPDATED_BY)
            VALUES
              (V_PROCESS_INSTANCE_HIS_SEQID,
               PROC_USER_INS_RECORD.USER_ID,
               PROC_USER_INS_RECORD.ACTIVE,
               SYSDATE,
               'SYS',
               SYSDATE,
               'SYS');
         END LOOP;

         -- update current process
         UPDATE PROCESS_INSTANCE SET NODE_ID = V_NEXT_NODE_ID,UPDATED_AT=SYSDATE,UPDATED_BY=P_EMPID WHERE ID = PROC_INS_RECORD.ID;

         -- ****delete old user****
         DELETE FROM PROCESS_USER WHERE  PROCESS_INSTANCE_ID=PROC_INS_RECORD.ID;

         -- insert new user for PROCESS_USER (split P_TO_EMP_ID by ',')
         FOR TO_USER_RECORD IN(
                       SELECT DISTINCT TRIM(REGEXP_SUBSTR(T.NAME, '[^,]+', 1, LEVELS.COLUMN_VALUE)) AS NAME
                          FROM (SELECT P_TO_EMP_ID AS NAME FROM DUAL) T,
                               TABLE(CAST(MULTISET
                                          (SELECT LEVEL
                                             FROM DUAL
                                           CONNECT BY LEVEL <=
                                                      LENGTH(REGEXP_REPLACE(T.NAME, '[^,]+')) + 1) AS
                                          SYS.ODCINUMBERLIST)) LEVELS
                         ORDER BY NAME
           )LOOP
                 INSERT INTO PROCESS_USER
                    (PROCESS_INSTANCE_ID,
                     USER_ID,
                     ACTIVE,
                     CREATE_TIME,
                     CREATED_BY,
                     UPDATED_AT,
                     UPDATED_BY)
                  VALUES
                    (PROC_INS_RECORD.ID,
                     TO_USER_RECORD.NAME,
                     1,
                     SYSDATE,
                     'SYS',
                     SYSDATE,
                     'SYS');
            END LOOP;
        END LOOP;

    ELSE -- NO NEED MOVE TO HISTORY,ONLY UPDATE PROCESS_INSTANCE STATUS
      IF V_NEXT_NODE_ID IS NOT NULL THEN
          UPDATE PROCESS_INSTANCE SET NODE_ID = V_NEXT_NODE_ID,COMMENTS=P_COMMENTS,ACTIVITY_ID=P_CUR_ACTIVITY_ID,UPDATED_AT=SYSDATE,UPDATED_BY=P_EMPID WHERE BIZ_ID = P_MAIN_ID AND PROCESS_CODE = P_PROC_CODE;
      END IF;
  END IF;


  IF V_NEXT_NODE_ID IS NULL THEN
     O_NEXT_NODE_ID := NULL;
     O_RESULT       := 'FAILED';
  ELSE
     O_NEXT_NODE_ID := V_NEXT_NODE_ID;
     O_RESULT       := 'OK';
  END IF;

EXCEPTION
  WHEN OTHERS THEN
    O_NEXT_NODE_ID := NULL;
    O_RESULT       := 'FAILED';
     dbms_output.put_line(SQLERRM);
end SP_UPDATE_WORKFLOW_STATUS;


-----存储过程------
  • PROCESS_DEF_MAIN
    PROCESS_DEF_MAIN
  • PROCESS_DEF_ACTIVITY
    在这里插入图片描述
  • PROCESS_DEF_NODE在这里插入图片描述
  • PROCESS_DEF_NODE_ACTIVITY在这里插入图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值