审批流设计

审批流系统

在日常企业中,经常涉及员工提交申请单,需要上级领导和多个节点审批通过,驳回,已完成申请单。

实现目标

  • 工单自定义模版,需支持用户自定义表单,拖拽式动态生成流转表单,打造低代码平台,降低了研发投入成本,提高整体人效;
  • 工单流程需支持用户自定义配置流程,丰富的配置选项,包括流程节点处理人配置、节点操作配置、节点表单模版配置,相对于传统审批流框架更加灵活、修改及时生效,不需要研发修改流程图再发布上线的过程;
  • 工单流程需提供丰富的节点处理人配置,包含按照组织部门架构配置处理部门,人员岗位角色和指定人员;
  • 工单系统需支持多种处理操作,包括工单提交、工单驳回、工单转交和工单废弃,支持业务方各种工单流转场景;
  • 工单系统将表单和流程进行解耦,并将业务表单进行插件化配置,可支持更多业务场景并且不需要对工单系统进行额外开发,只需独立开发业务表单部分,完成业务产品快速上线,提高产品交付效率;

系统设计

系统流程交互

审批流设计_第1张图片

ddd领域模型架构

审批流设计_第2张图片

JSON Schema

使用JSON Schema 自定义申请表单

如何使用 - XRender

基于JSON Schema的前端可视化活动编辑器 - 知乎

审批流设计_第3张图片

审批流程

审批流设计_第4张图片

代码实现

Domain领域层设计

目录结构

审批流设计_第5张图片

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 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 getFlowReqNodes() {
        return flowReqNodes;
    }

    public String getReqId() {
        return reqId;
    }

    public FlowReqNode getHeadFlowReqNode() {
        return headFlowReqNode;
    }
}

infrastructure基础设施层设计

目录结构

审批流设计_第6张图片

application 应用层

审批流设计_第7张图片

流程编排

(三)JDEasyFlow-流程引擎模块使用指南_jjtliyl的博客-CSDN博客

GitHub - JDEasyFlow/jd-easyflow

Compileflow入门教程_灬点点的博客-CSDN博客_compileflow 使用

通用流程编排引擎介绍_changtianshuiyue的博客-CSDN博客_流程编排引擎

自建工单(审批流)系统设计_wenqi365的博客-CSDN博客_工单系统数据库表设计

你可能感兴趣的:(MySQL,java基础和并发编程,分布式,java)