当前位置:网站首页>审批流设计
审批流设计
2022-08-03 07:39:00 【yangyanping20108】
审批流系统
在日常企业中,经常涉及员工提交申请单,需要上级领导和多个节点审批通过,驳回,已完成申请单。
实现目标
- 工单自定义模版,需支持用户自定义表单,拖拽式动态生成流转表单,打造低代码平台,降低了研发投入成本,提高整体人效;
- 工单流程需支持用户自定义配置流程,丰富的配置选项,包括流程节点处理人配置、节点操作配置、节点表单模版配置,相对于传统审批流框架更加灵活、修改及时生效,不需要研发修改流程图再发布上线的过程;
- 工单流程需提供丰富的节点处理人配置,包含按照组织部门架构配置处理部门,人员岗位角色和指定人员;
- 工单系统需支持多种处理操作,包括工单提交、工单驳回、工单转交和工单废弃,支持业务方各种工单流转场景;
- 工单系统将表单和流程进行解耦,并将业务表单进行插件化配置,可支持更多业务场景并且不需要对工单系统进行额外开发,只需独立开发业务表单部分,完成业务产品快速上线,提高产品交付效率;
系统设计
系统流程交互
ddd领域模型架构
JSON Schema
使用JSON Schema 自定义申请表单
审批流程
代码实现
Domain领域层设计
目录结构
FlowReq 聚合根类定义
聚合根:
Aggregate是一组相关对象地集合,作为一个整体被外界访问,聚合根是这个聚合地根节点。
聚合是一个非常重要的概念,核心领域往往都需要聚合来表达。其次,聚合在技术上有非常高的价值,可以指导详细设计。聚合由根实体,值对象和实体组成。
/**
* FlowReq Entity
*/
@NoArgsConstructor
public class FlowReq {
/**
* 主键
*/
private Integer id;
/**
* 主配置表(flow_config)编码
*/
private String flowConfigCode;
/**
* 流程申请id
*/
private String reqId;
/**
* 流程名称
*/
private String reqName;
/**
* 流程当前节点编码
*/
private String currentNodeCode;
/**
* 流程状态
*/
private FlowReqStatusEnum flowReqStatus;
/**
* 子流程总数
*/
private Integer subTotal;
/**
* 子流程完成数
*/
private Integer subFinishCount;
/**
* 申请人
*/
private String applyErp;
/**
* 数据
*/
private String data;
/**
* 业务id
*/
private Integer relId;
/**
* 业务类型,1:垂直业务申请,2:水平业务申请,3:水平业务使用申请
*/
private Integer businessType;
private Date createAt;
private String createBy;
private Date modifyAt;
private String modifyBy;
private List<FlowReqNode> flowReqNodes;
private FlowReqNode headFlowReqNode;
public FlowReq(FlowReqSubmitCmd command, String headNodeCode, String headNodeName) {
}
/**
* 提交申请单
*/
public void submit() {
}
/**
* 批准
*/
public void adopt() {
// 申请单是否到终态
if (FlowReqStatusEnum.terminateStatus.contains(flowReqStatus)) {
//throw new FlowReqNoWithdrawException();
}
// 判断是否最后一个节点
}
/**
* 驳回到终节点
*/
public void refuse() {
}
/**
* 撤回
*/
public void withdraw() {
}
public List<FlowReqNode> getFlowReqNodes() {
return flowReqNodes;
}
public String getReqId() {
return reqId;
}
public FlowReqNode getHeadFlowReqNode() {
return headFlowReqNode;
}
}
infrastructure基础设施层设计
目录结构
application 应用层
流程编排
边栏推荐
猜你喜欢
DSP Trick:向量长度估算
Data warehouse buried point system and attribution practice
2022年 SQL 优化大全总结详解
加速FinOps实践,为企业降本增效
- display image API OpenCV 】 【 imshow () to a depth (data type) at different image processing methods
服务器资源监控工具-nmon、nmon_analyser
“碳中和”愿景下,什么样的数据中心才是我们需要的?
Postman will return to results generated CSV file to the local interface
PostMan使用,访问路径@RequestMapping
9月考,如何选择靠谱正规的培训机构?
随机推荐
ArcEngine (six) use the tool tool to realize the zoom in, zoom out and translation of the pull box
用diskpart的offline命令弹出顽固硬盘
MySQL or使索引失效
boot - SSE
ViewModel 记录下 +
差分(前缀和的逆运算)
“碳中和”愿景下,什么样的数据中心才是我们需要的?
mysql服务器上的mysql这个实例中表的介绍
mysqlbinlog: unknown variable 'default-character-set=utf8'
【多线程进阶】--- 常见锁策略,CAS,synchronized底层工作原理,JUC,线程安全的集合类,死锁
解决移动端有纵向滚动条但是不能滚动的问题
ceph简介
Oracle Rac Cluster File Directory Migration
【OpenCV】 - 显示图像API之imshow()对不同位深度(数据类型)的图像的处理方法
DSP-ADAU1452输出通道配置
The use of the database table structure document generation tool screw
【Kaggle实战】泰坦尼克号生存人数预测(从零到提交到Kaggle再到模型的保存与恢复)
pyspark---low frequency feature processing
加载properties文件,容器总结
C语言实现树的底层遍历--超简代码