Crud数据审批

审批流 #

mysql建表 #

drop table if exists oa_flowinfo;
CREATE TABLE oa_flowinfo(
	id int PRIMARY KEY auto_increment,
	tid  smallint default 0 comment '租户ID',
	uuid varchar(20),
	name varchar(50),
	description varchar(200),
	category varchar(50),
	flow TEXT,
	status varchar(20),
	create_time DATETIME DEFAULT CURRENT_TIMESTAMP,
	update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
	updater varchar(50),
	UNIQUE uc(tid,name)
) comment '审批流定义';

drop table if exists oa_flowinstances;
CREATE TABLE if exists oa_flowinstances(
	id int PRIMARY KEY auto_increment,
	tid  smallint default 0 comment '租户ID',
	uuid varchar(50),
	title varchar(100),
    remark varchar(500),
    formId varchar(50),
    variables varchar(500),
	definitionId varchar(50),
	applicant varchar(50),
	status varchar(50),
	currentNodeId varchar(50),
	create_time DATETIME DEFAULT CURRENT_TIMESTAMP,
	update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
	updater varchar(50)
)comment '审批单';

drop table if exists oa_flowtasks;
CREATE TABLE oa_flowtasks(
	id int PRIMARY KEY auto_increment,
	tid  smallint default 0 comment '租户ID',
	uuid varchar(50),
	instanceId varchar(50),
	nodeId varchar(50),
	nodeName varchar(50),
	assignee varchar(50),
	status varchar(50),
	instructions varchar(200),
	variables varchar(500),
	comment varchar(100),
	create_time DATETIME DEFAULT CURRENT_TIMESTAMP,
	update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
	updater varchar(50)
)comment '审批任务';

sqlite建表 #

DROP TABLE IF EXISTS oa_flowinfo;
CREATE TABLE oa_flowinfo(
	id INTEGER PRIMARY KEY AUTOINCREMENT,
	tid INTEGER DEFAULT 0,
	uuid TEXT,
	name TEXT,
	description TEXT,
	category TEXT,
	flow TEXT,
	status TEXT,
	create_time DATETIME DEFAULT CURRENT_TIMESTAMP,
	update_time DATETIME DEFAULT CURRENT_TIMESTAMP,
	updater TEXT,
	UNIQUE(tid, name)
);

DROP TABLE IF EXISTS oa_flowinstances;
CREATE TABLE oa_flowinstances(
	id INTEGER PRIMARY KEY AUTOINCREMENT,
	tid INTEGER DEFAULT 0,
	uuid TEXT,
	title TEXT,
    remark TEXT,
    formId TEXT,
    variables TEXT,
	definitionId TEXT,
	applicant TEXT,
	status TEXT,
	currentNodeId TEXT,
	create_time DATETIME DEFAULT CURRENT_TIMESTAMP,
	update_time DATETIME DEFAULT CURRENT_TIMESTAMP,
	updater TEXT
);

DROP TABLE IF EXISTS oa_flowtasks;
CREATE TABLE oa_flowtasks(
	id INTEGER PRIMARY KEY AUTOINCREMENT,
	tid INTEGER DEFAULT 0,
	uuid TEXT,
	instanceId TEXT,
	nodeId TEXT,
	nodeName TEXT,
	assignee TEXT,
	status TEXT,
	instructions TEXT,
	variables TEXT,
	comment TEXT,
	create_time DATETIME DEFAULT CURRENT_TIMESTAMP,
	update_time DATETIME DEFAULT CURRENT_TIMESTAMP,
	updater TEXT
);

导入审批流页面 #

专业版本可以找客服提供

数据变更审批 #

  • 不管是新增,更新,审批,导入的数据集配置方法都是一样的,参考 数据更新
  • 新建好数据集后,指定对定的数据集序号就可以开启了
  • 关于审批ds, 你需要先建好审批表,然后定义写入审批即可,以下为建表样列
create table modify_request(
    id INT NOT NULL AUTO_INCREMENT,
    tablename VARCHAR(50) NOT NULL,
    codename VARCHAR(50) NOT NULL,
    code VARCHAR(50) NOT NULL,
    columnname varchar(50),
    oldvalue varchar(100),
    newvalue varchar(255),
    requester varchar(50),
    checker varchar(50),
    flag int default 0,
    request_remark varchar(200),
    check_remark varchar(200),
    create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    PRIMARY KEY (id)
) comment '变更清单';
dataset={
    "table":"modify_request",
    "sFields":[],
    "id":"id",
    "fDict":{},
    "autoDict":{"tablename":"表名","codename":"主键名","requester":"$username"}
}
  • 审批有两种方式, 一种是打开单独的窗口选择要修改的字段(开启审批), 还有一种是编辑里不会生效,会流向审批(开启审批编辑)

  • 审批界面也是通过平台CRUD功能生成, 采用两个功能按钮(参考"批量动作设定")

import json
action='$action'
updatelist="$updatelist"
sql=''
if action=='check':
    contents=ds_sql('数据源名',f'select tablename,columnname,newvalue,codename,code from modify_request where id in ({updatelist})')
    sql=[]
    for content in contents[1:]:
        if content[1]:
            sql.append(f"update {content[0]} set {content[1]}='{content[2]}' where {content[3]}='{content[4]}'")
        else:
            changeList=[]
            changeDict=json.loads(content[2])
            for k,v in changeDict.items():
                changeList.append(f"{k}='{v}'")
            changeList=','.join(changeList)
            if changeList:
                sql.append(f"update {content[0]} set {changeList} where {content[3]}='{content[4]}'")
            
    sql.append(f"update modify_request set flag=2, checker='$username' where id in ({updatelist})")
    sql=';'.join(sql)
elif action=='reject':
    sql= f"update modify_request set flag=1, checker='$username' where id in ({updatelist})"
if sql:
    ds=ds_sql('数据源名',sql)