当前位置:网站首页>审批流设计
审批流设计
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 应用层

流程编排
边栏推荐
- pgaudit 的安装使用《postgresql》
- mysql存生僻字奇怪问题,mysql为什么不能辨别mb4字符?
- ViewModel 记录下 +
- 【OpenCV】 - 显示图像API之imshow()对不同位深度(数据类型)的图像的处理方法
- 依赖注入(DI),自动配置,集合注入
- LiveData 记录下 +
- ArcEngine (six) use the tool tool to realize the zoom in, zoom out and translation of the pull box
- 推荐系统-排序层-特征工程:用户特征、物品特征
- mysql的innodb存储引擎和myisam存储引擎的区别
- AI mid-stage sequence labeling task: three data set construction process records
猜你喜欢

pyspark---encode the suuid interval (based on the number of exposures and clicks)

用diskpart的offline命令弹出顽固硬盘

xshell开启ssh端口转发,通过公网机器访问内网机器

"Swordsman Offer" brush questions print from 1 to the largest n digits

【图像去噪】基于matlab稀疏表示KSVD图像去噪【含Matlab源码 2016期】

【图像边缘检测】基于matlab灰度图像的积累加权边缘检测【含Matlab源码 2010期】

请求与响应:响应

解决移动端有纵向滚动条但是不能滚动的问题

【图像去雾】基于matlab暗通道和非均值滤波图像去雾【含Matlab源码 2011期】

数据仓库指标体系实践
随机推荐
数据库表结构文档 生成工具screw的使用
STL迭代器
ORB-SLAM2提取特征点
ArcEngine (six) use the tool tool to realize the zoom in, zoom out and translation of the pull box
PostMan使用,访问路径@RequestMapping
Roson的Qt之旅#106 QML在图片上方放置按钮并实现点击按钮切换图片
进程的创建
The ORB - SLAM2 extracting feature points
依赖注入(DI),自动配置,集合注入
DeFi明斯基时刻:压力测试与启示
[ 漏洞复现篇 ] yapi 代码执行 getshell 漏洞复现详解
加速FinOps实践,为企业降本增效
mysql5.7服务器The innodb_system data file 'ibdata1' must be writable导致无法启动服务器
mysql服务器上的mysql这个实例中表的介绍
[机缘参悟-59]:《素书》-6-安于礼仪[安礼章第六]
五、《图解HTTP》报文首部和HTTP缓存
"Swordsman Offer" brush questions print from 1 to the largest n digits
redis AOF持久化个人理解
【C语言】函数栈帧的创建和销毁详解
Postman will return to the interface to generate a json file to the local