/sigma

Java开源工单管理系统,集成 Camunda && vue-element-admin

Primary LanguageJava

Sigma

项目功能点

  • 部署流程定义,支持版本升级
  • 支持 BPMN2.0 设计流程定义,节点元素有开始事件、结束事件、用户任务、排他网关、并行网关等。
  • 支持用户任务节点上挂靠多个表单
  • 支持自定义流程实例上下文的参数
  • 支持按角色或者用户 id 分配用户任务
  • 支持流程实例上下文的参数与表单数据进行关联
  • 发起流程实例操作
  • 中止流程实例操作
  • 完成用户任务操作
  • 转派用户任务操作
  • 用户任务支持会签/或签
  • 支持表单模版设计
  • 流程实例的列表与详情
  • 待办任务的列表与详情
  • 流程定义的列表与详情
  • 流程分类的列表与详情
  • 表单的列表与详情
  • 用户系统支持 RBAC 权限模型
  • 集成 vue-element-admin 开发后台界面

领域知识

在开始之前,首先需要明确工作流这个领域中的几个概念:流程、流程定义、流程实例、任务、表单。

  1. 流程(Process):流程是一个比较宽泛的概念,这个词其实既可以表示流程定义,也可以表示流程实例。举个例子,我们说新建一个流程时,其实说的是新建一个流程定义;而我们说发起一个流程时,其实说的是发起一个流程实例。在实际交流中,流程这个词用来指代我们一般理解的工作流,我们需要用流程定义流程实例这两个更为准确的词来描述业务场景。
  2. 流程定义(Process Definition):流程定义用来描述一个流程的结构,其中包含开始节点、中止节点、网关节点、任务节点等元素。流程定义可以类比成 Java 中类的概念,是静态的数据。
  3. 流程实例(Process Instance):流程实例是就相当于是流程定义的一次执行,它相当于 Java 中的对象的概念,一个类可以生成多个对象,每个对象都有自己独有的属性。类似的,一个流程定义可以有多个流程实例,每个流程实例都有自己的参数值、人员信息等。因此,不同的流程实例在同一个流程定义上对应的执行走向可能是不一样的。
  4. 任务(Task):任务流程实例在流转过程中产生的东西。在工作流这个领域中,常常出现一个流程流转到某个节点,然后需要这个节点上的人员执行相关的操作,这个相关的操作指的就是任务,它是流程实例流转过程中产生的。
  5. 表单(Form):表单是挂靠在节点上的,属于静态数据,在流程定义中需要指定某个节点上拥有哪些表单。表单中的数据是每个流程实例所特有的,比如发起一个报修流程实例的时候需要填写相关的报修数据,不同的报修流程实例的报修数据可以是不一样的。

详细的流程相关的领域知识以及我整个系统的设计思路见这里

落地 DDD

本项目基于领域驱动设计(DDD)的设计**,并采用六边形架构进行落地实现,代码的结构如下:

├── application.service
│       ├── command
│       │   ├── cmd
│       │   └── transfer
│       └── query
│           ├── assembler
│           └── dto
├── domain
│   ├── agg
│   ├── event
│   ├── repository
│   ├── service
│   └── valueobject
├── infrastructure
│   ├── client.impl
│   ├── db
│   │   ├── adapter
│   │   ├── dataobject
│   │   ├── mapper
│   │   ├── query
│   │   └── repository.impl
│   ├── inbound
│   │   ├── job.controller
│   │   ├── rpc.controller
│   │   └── web.controller
│   └── process
│       ├── adapter
│       └── impl
└── shared
    ├── client
    ├── constants
    ├── enums
    ├── process
    │   └── valueobject
    └── utils

关于本项目的 DDD 的详细介绍与规范见这里

项目脚手架

本项目基于 Spring Cloud 进行开发,采用 Nacos 作为注册中心,Spring Cloud Gateway 作为网关,Open Feign 实现微服务间的调用,同时还封装了一些通用的 starter。详细代码结构如下:

├── sigma-parent       // 整个项目依赖版本管理 
├── sigma-rpc		   // 服务间调用的 feign 接口定义以及相关的 DTO
├── sigma-services     // 该 module 下包含所有的微服务
│   ├── sigma-auth     // 用户中心
│   ├── sigma-gateway  // 网关
│   ├── sigma-process  // 流程服务,本项目的核心模块
│   └── sigma-registry // 注册中心,nacos
└── sigma-starters     // 封装的一些本项目通用的 starters
    ├── sigma-starter-commons     // 通用的类或方法
    ├── sigma-starter-feign	      // feign 相关的配置,如 feign 调用的拦截器
    ├── sigma-starter-generator   // mybatis-plus 代码生成器
    ├── sigma-starter-mybatis     // mybatis 相关的配置,如日志打印、sql 注入等
    ├── sigma-starter-web         // spring-boot-starter-web 相关的依赖以及一些拦截器、过滤器等
    ├── // starter 继续扩展中

友情链接

  1. camundahttps://camunda.org
  2. vue-element-adminhttps://github.com/PanJiaChen/vue-element-admin
  3. ferryhttps://github.com/lanyulei/ferry