工作流流程合并
因为项目需要做了一个简单的工作流引擎,用于集成订单管理(IOM)的生产调度。之前的文章有提到。原想着有这样一个引擎来进行生产调度,设计好业务流程后就可以面朝大海,春暖花开。在还生产系统对接的时候发现有一部分还是人工处理更好,毕竟不是所有的流程都能那么细致合理。
下面是我们的解决方案,图片是从wps里另存出来的,不知道咋就变成黑底了。
1.1 问题描述
工作流引擎处理流程调度部分的内容。客户下订单之后,协调各生产部门进行工作。
最理想化的情况是对客户发起的每一种操作都定义一组流程,在流程执行的过程中每种状下态当有新的操作进来也相应定义一组流程,但这样一来流程设计工作极其繁琐,容易出错,不利于降低管理难度减轻管理工作量。
一个折中的方案是对执行中的流程进行流程合并。选择对一部分操作不创建新流程,给用户提示信息,由用户觉得如何进行手工操作。
1.2 问题分析
1.2.1 概念定义
生产平台:生产平台是由人和机器构成的,能将一定输入转化为特定输出的有机整体。对应于工厂中的生产车间概念。
生产线:生产是与相关的一个部门或一组操作对应的组织。类似于项目组的概念,是依据生产流程对生产能力的一种划分方式。
产品:产品是指中企动力运用营销手段,将业务或业务组合附加上销售对象、销售地域、资费计划、销售渠道、服务水平及配套资源属性后的产物,是向客户最终交付的、客户可以购买的产品单元组合实例。
产品单元:产品单元是业务在生产系统的具体表现。
产品单元与生产线之间是多对多的关系。如果一个产品单元需要跨多个生产线,引擎需要调度产品单元在不同生产线的生产过程。
流程组:流程组指由一系列操作流程组成的流程集合,有流程间的先后顺序。流程组在此是由产品和操作类型共同决定的。
流程:流程是一系列操作环节的集合。环节间有并行和串行的关系。流程在此处是由平台和操作类型决定的。
环节:环节是一系列操作的集合。环节此处定义是由一个人的一个或多个可并行的操作决定的。
任务:任务是可执行的最小单位。任务具有原子性,是环节的组成部分。一般一个任务完成一个事务。
一个环节包含多个任务,一个流程包含多个环节,一个流程组包含多个流程。
1.2.2 问题描述
以一件定制服装的过程为例,只是为了说明问题对流程做了简化。见下图。
定制服装生产流程:
最简化的情况,客户在提交了定制服装生产的要求后便不再干预,生产线就按流程走就可以了。
但是客户可能会在生产的各个环节提出变更要求,已经制作完成了客户要求加个兜,已经质检完成了客户要求加个纽扣,已经包装好了客户要求领子样式改改。
如果把每一种可能都定义一组流程,就这个简化流程全部列出来也够贴一面墙了。所以我们采取了一种折中的方案,在大多数情况下正在生产时客户要求有变化,通过一个描述性的工单告诉生产线负责人暂停生产、并由负责人来决定回退到那个环节重新进行。
如果都包装好了客户还要改,那就暂停当前流程,走和客户打官司的流程了,这种情况下需要一个流程。
本方案通过对生产中的流程进行合并,减少流程定义的工作量和复杂程性度。
1.3 问题解决
1.3.1 工单
1.3.1.1 逻辑模型
订单生成工单的过程,称为合单。
订单工单关系 |
工单属性 |
|
|
现在所描述的都是对同一个订购实例所下各种订单的合单处理情况。
1.订购实例第一次下订单,根据订单生成工单和工单明细。
2.订购实例第二次下订单
a) 之前生成的工单已经竣工,生成新工单和新工单明细。
b) 之前生成的工单还未生产,废弃该工单,生成新工单和新工单明细
c) 之前生成的工单生产中,废弃该工单,继续沿用原工单编号,合并生成新工单和新工单明细。新工单状态为生产中。
在工单明细表增加字段“产品单元变更标识”,如果产品单元对应的属性内容在两次订单中没有变化,引擎不暂定产品单元触发的流程。
1.3.2 流程实例化
1.3.2.1 逻辑模型
流程定义模型见下图,概念定义部分对名词有描述。
流程定义 |
流程实例化 |
|
|
在业务支撑系统经常使用的一个概念,实例化。
用户购买一个产品后,就产生一个产品的实例化,区别于别的客户购买的同类产品,称为订购实例。
定义一组流程用来处理产品生产过程,具体到某个订购实例的生产过程的实例化,就有了流程组实例、流程实例、环节实例和任务实例。
1.3.2.2 流程定义过程
有了流程定义的模型,我们就是可以设计或者叫定义产品的生产流程。
完成一件复杂的工作,总是需要一个步骤一个步骤的完成,每个步骤称为一个环节,在这个环节下可能需要做几个事情,每个要做的事情称为一个任务。
1.根据生产部门划分生产线
2.根据生产线+操作,定义流程,把流程中的任务根据负责人划分为不同的环节。
3.按照产品涉及的流程划分为不同的流程组。
1.3.2.3 流程实例化
1.实例化约束
a) 一个订购实例当前只有一个运行中的流程组实例;
b) 流程合并前先暂停,避免和引擎并发竞争。
2.实例化过程
a) 接收工单,检查订购实例当前是否有流程组实例在运行中;
i. 无,实例化一个新的流程组实例
ii. 检查是否属于同一个流程组定义
1. 是同一个流程组,进行流程合并。
2. 不是同一个流程组,暂不实例化,待下一次轮询再处理。
流程合并细节见《流程合并详细设计》
1.3.3 流程引擎
1.3.3.1 模型状态
1.已实例化
2.已分配(负责人)
3.执行中
4.暂停
5.已完成
流程启动后按顺序执行,当要回到上一步骤时,监控页面支持回退和回滚两种操作。
回退,当前执行中/暂停的环节设置为已分配,上一环节由已完成设置为执行中。
回滚,对任务可以执行其反任务。
1.3.3.2 功能描述
1.引擎轮询程序,检查处于执行中状态的环节,如果环节下所有关键任务都已完成则环节进入已完成状态,下一环节进入执行中状态。
2.环节实例化后处于已实例化状态,用户在任务分配页面指定环节负责人,环节处于已分配状态,上一环节完成后由引擎设置本环节进入执行中状态。
3.鉴于引擎对执行中的环节进行调度工作,实例化程序和页面监控程序在对执行中的环节操作时,需先暂停环节。
4.监控页面支持对流程、环节的回退,支持对任务的回滚。