PostgreSQL数据库,简单的实现一个可配置节点的审批流,审批过程中包含会审、或审

news/2025/1/9 5:57:57/

PostgreSQL数据库,简单的实现一个可配置节点的审批流,审批过程中包含会审、或审

实现一个可配置节点的审批流需要设计两个表,一个是节点表,一个是连接表。节点表用于保存各个节点的信息,连接表用于保存节点之间的连接关系。

在节点表中,我们需要保存每个节点的ID、节点类型、节点名称以及其他相关信息。节点类型包括会审节点和或审节点,节点名称是可配置的,用于描述节点的用途。其他信息可以根据实际需求进行添加。

在连接表中,我们需要保存每个连接的ID、源节点ID、目标节点ID,以及连接类型。连接类型包括和审和或审,用于描述连接的审批方式。

在查询这些节点和连接信息时,可以使用递归查询来实现。递归查询可以查找所有与节点相关的连接,以及与这些连接相关的节点,直到查询完所有节点为止。在 PostgreSQL 中,递归查询使用 WITH RECURSIVE 关键字实现。

除了以上内容外,还需要设计一个评估函数,用于判断审批流程是否通过,评估函数可以根据具体的审批条件进行自定义。

实现思路如下:

  1. 创建节点表和连接表。
CREATE TABLE node (id SERIAL PRIMARY KEY,type TEXT NOT NULL,name TEXT NOT NULL,-- 其他字段可以根据具体需求添加
);CREATE TABLE connection (id SERIAL PRIMARY KEY,source_node_id INTEGER NOT NULL,target_node_id INTEGER NOT NULL,type TEXT NOT NULL,FOREIGN KEY (source_node_id) REFERENCES node(id),FOREIGN KEY (target_node_id) REFERENCES node(id)
);
  1. 插入节点和连接信息。
-- 插入会审节点
INSERT INTO node (type, name) VALUES ('and', '会审1');
INSERT INTO node (type, name) VALUES ('and', '会审2');-- 插入或审节点
INSERT INTO node (type, name) VALUES ('or', '或审1');
INSERT INTO node (type, name) VALUES ('or', '或审2');-- 插入连接信息
INSERT INTO connection (source_node_id, target_node_id, type) VALUES (1, 3, 'and');
INSERT INTO connection (source_node_id, target_node_id, type) VALUES (2, 3, 'and');
INSERT INTO connection (source_node_id, target_node_id, type) VALUES (3, 4, 'or');
  1. 查询节点和连接信息。
WITH RECURSIVE node_path(id, path, depth) AS (SELECT id, ARRAY[id], 1FROM node WHERE name = '会审1' -- 指定起始节点UNION ALLSELECT node.id, path || node.id, depth + 1FROM nodeJOIN connection ON node.id = connection.target_node_idJOIN node_path ON connection.source_node_id = node_path.id AND type = 'and'WHERE NOT node.id = ANY(path)
)
SELECT *
FROM node_path
ORDER BY depth, path;

以上查询将返回从起始节点到结束节点的所有路径。在查询进行中,使用连接表中的连接信息来确定下一步是和审还是或审,如果是和审,则查询必须通过当前节点才能继续,如果是或审,则查询只需要通过其中一个子节点就能继续。

  1. 构建评估函数,判断审批流程是否通过。

评估函数可以根据实际场景进行自定义,例如,在会审节点中必须所有子节点都通过才能通过,而在或审节点中只要有一个子节点通过即可通过。函数可以根据节点类型、连接类型以及其他相关信息来进行判断。具体实现略。


http://www.ppmy.cn/news/340545.html

相关文章

2. CompletableFuture

2.1 Future接口理论知识复习 Future接口(FutureTask实现类)定义了操作异步任务执行一些方法,如获取异步任务的执行结果、取消异步任务的执行、判断任务是否被取消、判断任务执行是否完毕等。 举例:比如主线程让一个子线程去执行任…

远程控制之原理和实战

按理来说,本人不该发表此类专业文章,鄙人零星碎片化的开发经历,让本人斗胆向诸位网友,在远控方面做一点演示说明,谈论一点自己的认识。 程序工程代码地址:点击此处下载。 程序分为两个部分,控…

MapReduce基础

函数式编程概念MapReduce程序是设计用来并行计算大规模海量数据的,这需要把工作流分划到大量的机器上去,如果组件(component)之间可以任意的共享数据,那这个模型就没法扩展到大规模集群上去了(数百或数千个节点)&#…

史诗级计算机字符编码知识分享,万字长文,一文即懂!

本文由阿里技术团队詹向阳(骁飏)分享,原题“一文读懂字符编码”,有修订和改动。 一、引言 说起计算机字符编码,让我想起了科幻巨作《三体-黑暗深林》人类遇到外星文明魔戒的画面(以下内容摘自大刘的原文&a…

Portraiture5.0滤镜插件中文升级版本下载及功能介绍

专注人像修图,打造完美摄影作品,Portrait5.0是款最新版的人脸图像后期处理软件。它可以帮助用户快速编辑修图,提供全方面的人物美白效果,让用户可以更轻松地修图,操作简单,方便快捷,非常不错。新…

调用阿里API实现银行卡实名认证

调用阿里API实现银行卡实名认证 1.作者介绍2.算法介绍2.1 阿里云技术介绍2.2 API介绍 3.实验代码3.1 调用阿里云API流程3.2 代码实现3.2.1完整代码3.2.2实验结果 4.报错分析5.参考链接 1.作者介绍 薛维哥&…

网络安全的学习路线是怎么样的?不同人路不同,快来对号入座吧!

最近看到网上有很多人在问诸如:“怎样成为网络安全工程师”等相关问题 这可能与近几年网络安全事件频发,国家对于互联网信息安全和互联网舆情的重视程度不断提升有关,网络信息安全工程师随之成为炙手可热的职业。关于职业前景的详细分析&…

小米mini路由小米3 PandoraBox下载地址

小米mini路由 PandoraBox下载地址 http://downloads.openwrt.org.cn/PandoraBox/Xiaomi-Mini-R1CM/stable/ 下载下来的写是2015年的了。没什么人更新了。 但感觉wifi桥接功能很稳定。 7M和10M版本,建议选7M,虽然里头有很多参数需要自己手动选。但起码…