技术标签: 表单式工作流 接口设计 系统设计 功能模块设计 项目经验 数据库设计
最近一个项目中需要独自设计一个表单式工作流功能模块,在此将整个功能模块的设计思路分享出来。
此处所有的需求是建立在医院临床信息管理系统之上的。这里只分析关于表单式工作流功能模块的需求。
关于表单式工作流功能模块的需求全部整理如下:
针对这些需求,对整个工作流功能模块初步的想法大概是这个样子:
上述要实现的表单式的工作流跟oa系统中的工作流不大一样,oa系统中的工作流一般是这样几个步骤:
整个oa系统的工作流功能的核心就是多级审批机制,但我们需求中的表单式的工作流,并不设计审批机制,整个工作流的功能可以简单理解为:一条患者信息选择流程后会在各个时期不停流动,在一个时期需要填写非常多的表单,这些表单填写完成后,医生点击进入下一流程,患者信息即可进入下一流程,但是这条患者信息已经留在了每个时期的表单中,医生仍然可以查看和修改这条信息。
oa式的工作流的实现非常复杂,市面上也有商业化和开源的工作流框架和引擎,但是针对我们这个需求来看,如果硬加使用,只会使整个业务更加复杂,因此,最好的办法就是自己设计一种简单工作流机制,实现上述全部的需求。
根据上面的需求分析和功能实现的分析,设计的整个工作流结构如下:
根据上面的分析,总的设计思路如下:
各时期的主表主要干的事情就是存储患者信息的id,代表着患者正处于当前流程节点或者已经完成该流程节点。
字段 | 说明 |
---|---|
id | 患者id |
… | 权限管理需要的其它字段 |
字段 | 说明 |
---|---|
id | 患者id |
… | 患者表所有字段 |
存储基本信息,关键是外键是主表的id。
字段 | 说明 |
---|---|
id | 唯一id |
… | 所有数据字段 |
主要是绑定主表,还可以添加一个时期的额外数据,比如一个时期的表单填写提示。
字段 | 说明 |
---|---|
id | 唯一id |
master_table | 主表名称 |
… | 权限控制相关字段 |
… | 该时期的其它数据字段 |
在工作流表中绑定多个工作节点有两种方式:
同样,两种方式各有好处:
字段 | 说明 |
---|---|
id | 唯一id |
process_name | 工作流名称 |
process_des | 工作流描述 |
process_ndoes | 所有节点id |
… | 权限控制相关的其它字段 |
字段 | 说明 |
---|---|
id | 唯一id |
process_name | 工作流名称 |
process_des | 工作流描述 |
node_num | 节点数目 |
process_hash | 工作流哈希值 |
node1 | 节点1 |
node2 | 节点2 |
node3 | 节点3 |
… | 若干节点 |
… | 权限控制相关的其它字段 |
患者表中和流程相关的一共三个字段:工作流id,当前节点id,下一节点id。其中存储下一节点id的做法类似单链表。
字段 | 说明 |
---|---|
id | 唯一id |
process_id | 工作流id |
current_node_id | 当前节点id |
next_node_id | 下一节点id |
… | 所有数据字段 |
1.新增工作流节点。
2.修改工作流节点。
3.删除工作流节点。
4.查询工作流节点。
1.新增工作流。
2.修改工作流。
3.删除工作流。
4.查询工作流。
CRUD操作略。
查询患者流程信息。
患者流程通过。
这种表单式工作流的设计,理论上是可以抽取出来成为一个独立的框架,待日后有时间精力再去尝试。
ATFWUS 2021-08-26
文章浏览阅读196次。python 中的strptime()和strftime()转自:https://blog.csdn.net/qq_39348113/article/details/82528851strptime(): 功能:按照特定时间格式将字符串转换(解析)为时间类型。 示例如下:def date_try(date): date = datetime.datetime.strpt..._strptime 2月29
这篇文章介绍了Linux系统的基础知识和操作命令,包括其特点、支持的平台以及一些常用的命令如grep。
文章浏览阅读6k次,点赞7次,收藏13次。openssl windows版安装_windows openssl
文章浏览阅读1k次。大部分按照此教程即可:https://www.jianshu.com/p/6d6e629df051若出错,在Store中安装ubuntu时候提示,重试该操作,无法加载页面。轻稍后重试。错误码:0x80131500,按照https://blog.csdn.net/han12398766/article/details/88068036错误码:0x80000403,需要打开Windows Upd..._windows10 不用wsl直接用ubantu
文章浏览阅读3.7w次,点赞61次,收藏112次。特别声明:此篇文章由David根据csswizardry的英文文章原名《MindBEMding – getting your head ’round BEM syntax》进行翻译,整个译文带有我们自己的理解与思想,如果译得不好或不对之处还请同行朋友指点。如需转载此译文,需注明英文出处:http://csswizardry.com/2013/01/mindbemding-getting-you_bem规范
文章浏览阅读1.8k次。EMMA 是一个用于检测和报告 JAVA 代码覆盖率的开源工具。它不但能很好的用于小型项目,很方便得得出覆盖率报告,而且适用于大型企业级别的项目。EMMA 有许多优点,首先你能免费得到它,并把它用于自己项目的开发。它支持许多种级别的覆盖率指标:包,类,方法,语句块(basic block)和行,特别是它能测出某一行是否只是被部分覆盖,如条件语句短路的情况。它能生成 text,xml,html_java 测试用例检测覆盖的api
文章浏览阅读535次。在支持向量机(support vector machine,SVM)算法中,有诸多数学思想。学习SVM是一个非常好的实践数学思想的过程,为我们以后创新解决问题思路提供了启发。在卷积神经网络兴起之前,在机器学习界一直是非常受追捧的算法,不光是因为其有良好的泛化能力、很高的准确度,更是因为其完备的数学理论依据以及诸多较难理解的数学知识。这两点让人们觉得SVM是一个很精妙很酷的算法!所以在实际应用也非常..._简述支持向量机中核函数方法的基本思想。
文章浏览阅读7.3k次,点赞8次,收藏40次。曲率高斯滤波及平均滤波去噪python实现(附代码)曲率滤波的理论基础可以参考下曲率滤波的理论基础和应用,这篇博客介绍的思想完美的避开了一大堆数学公式,简直是我的福音,但还是要细看的,不然很容易忽略重点,我这里就简单的做个总结,所有图片均来源于前面这篇博客。曲率滤波基本原理1、曲率曲面上的一点有一切平面tangent plane,此点处会有各个方向上的曲率,但是必然会有最大主曲率和最小主曲..._曲率滤波
文章浏览阅读1.4w次,点赞10次,收藏34次。AI之AutoML:Google AutoML(Google Cloud自动化机器学习平台库)的简介、安装、使用方法目录Google AutoML(Google Cloud自动化机器学习平台库)的简介AutoML的安装AutoML的使用方法Google AutoML(Google Cloud自动化机器学习平台库)的简介1、Google AutoML的概述背景 AutoML 基于谷歌最新的图像识别技术神经架构搜索( Neural A_automl
文章浏览阅读8.5k次,点赞144次,收藏34次。文章目录Linux-Unix编程手册(上下两册全).pdf 高清原版 可复制 可搜索 带书签简介预览下载Linux-Unix编程手册(上下两册全).pdf 高清原版 可复制 可搜索 带书签简介《linux/unix系统编程手册(上、下册)》是介绍linux与unix编程接口的权威著作。linux编程资深专家michael kerrisk在书中详细描述了linux/unix系统编程所涉及的系统调用和库函数,并辅之以全面而清晰的代码示例。《linux/unix系统编程手册(上、下册)》涵盖了逾500个系统_linux/unix系统编程手册pdf
文章浏览阅读1w次。1.request中包含了前端发送过来的所有数据 ,请求的 request 对象中保存了一次HTTP请求的一切信息。 通过request.from可以直接发送提取请求体中的表单格式数据,是一个类字典的对象 通过get方法只能拿到多个重名参数的第一个 2. reques常用的属性: 4.这里会用到Postman工具 下载:打开官网,https..._request.form.name只能获取第一个
文章浏览阅读9.9k次,点赞9次,收藏73次。学习目标:需求分析(知识点总结)学习内容:数据流图(Data Flow Diagram,简称DFD)建模方法核心:数据流特性:1、抽象性:只有信息和数据存储、流动、使用以及加工的情况,所以描述的是抽象出来的数据2、概括性:把系统对各种业务的处理过程联系起来考虑,形成总体,反映数据流之间的概括情况数据库应用系统(DBAS)性能指标:1、数据操作响应时间(数据访问响应时间)2、系统吞吐量:指系统在单位时间内可以完成的数据库事务或查询的数量3、允许并发访问的最大用户数4、每TPS代价值_功能需求分析