资源描述
安华信息
工作流引擎
详细设计说明书
2012-3-21
[该文档主要描述工作流引擎的实现细节。]
目录
1引言 4
1.1编写目的 4
1.2背景 4
1.3定义 4
1.4参考资料 4
2 程序详细设计 5
2.1 工作流运行时(WorkflowRuntime) 5
2.1.1 程序概述 5
2.1.2 功能设计 5
2.1.3 外部接口 11
2.1.4 尚未解决的问题 12
2.2 工作流设计器(WorkflowDesigner) 12
2.2.1 程序概述 12
2.2.2 功能设计 12
2.2.3 外部接口 16
2.2.4 尚未解决的问题 17
1.3 公共对象 17
1.4 数据库结构说明 20
2.4.1地区表 20
2.4.2业务附件文件 20
2.4.3流程业务数据包 20
2.4.4流程业务数据包定义 21
2.4.5流程实例表 21
2.4.6流程日志 22
2.4.7已处理消息队列表 22
2.4.8待处理消息队列表 23
2.4.9流程状态结点 23
2.4.10流程状态参与角色关系表 23
2.4.11流程模板表 24
2.4.12流程模板与业务类别、险类标识关系表 24
2.4.13日志项表 24
2.4.14状态操作附加规则 25
2.4.15流程状态后活动 25
2.4.16流程状态前活动 26
2.4.17流程状态表单信息 26
2.4.18流程状态操作表 26
2.4.19流程状态操作消息表 27
28
详细设计说明书
1引言
1.1编写目的
工作流引擎的开发人员。
1.2背景
说明:
a. 本系统名称:工作流引擎。
b. 本系统概要设计工作由秦超完成,详细设计由王思远完成,刘云峰执行开发任务。
1.3定义
Workflow 工作流
Runtime 运行时
Designer设计器
MessageQueue 消息队列
1.4参考资料
列出有关的参考资料,如:
a. 本项目的经核准的计划任务书或合同、上级机关的批文;
b. 属于本项目的其他已发表的文件;
c. 本文件中各处引用到的文件资料,包括所要用到的软件开发标准。列出这些文件的标题、文件编号、发表日期和出版单位,说明能够取得这些文件的来源。
2 程序详细设计
2.1 工作流运行时(WorkflowRuntime)
2.1.1 程序概述
工作流运行时是工作流概念的核心部分,作用于工作流服务生命周期的全部场景,挂接各项工作流的配套服务,如工作流实例状态跟踪、记录轨迹、消息分发等。
2.1.2 功能设计
1. WorkflowRuntime类
l 命名空间:AHIT.WorkflowEngine
l 关键字: sealed
l 类职责:
ü 确定工作流模板:
根据业务类型(1核保、2核赔)和险类标志(1农险、2非农险)确定使用的工作流模板
ü 创建工作流实例:
根据工作流模板表,状态结点表,结点的角色、操作、规则表创建工作流实例表和流程日志表(如果已加载日志服务,调用日志服务)。
ü 加载流程业务数据包
加载的业务数据包必须符合流程业务数据包定义表的规则,否则触发异常。
ü 加载业务附加文件
ü 获取工作流实例任务列表
包括待处理任务列表、已处理任务列表、逾期任务列表
ü 获取单体工作流实例
主要返回指定实例的流程业务数据包
ü 工作流操作
从待处理任务列表选择要处理的流程实例
取流程状态参与角色关系表判断操作的流程实例结点是否有权限
取状态操作附加规则表判断操作的流程实例结点的规则(由规则引擎实现)
在符合规则的前提下取流程状态操作表判断结点的下一步操作
将要更改工作流实例的操作添加至消息队列(交由消息队列服务处理)
l 字段及属性:
字段名称
字段描述
字段类型
备注
OperatingInstanceCount
当前实例数量
Int
静态存储
StartTime
开启时间
DateTime
静态存储
OperatingServiceCount
当前服务数量
Int
静态存储
l 方法:
a) 获得待处理任务列表
Public List<WorkflowInstance> GetInstanceList(string operatorNumber);
(参数是否加业务类型、险类标识)
根据操作者的ID,先取流程状态参与角色关系表取全部可操作的节点信息,排除特例表的不应自己操作的节点信息,然后内关联流程实例表的当前节点字段,再左关联流程状态节点表的主键,得出所有待操作的实例信息及节点状态并返回。
b) 根据操作员编号、实例编号获得待处理任务的详细信息
Class InstanceColletion
{
T_FlowInstance flowInstance;
T_FlowBizDataBag flowBizDataBag;
List<T_StatusOperationMessage> operationMessageList;
}
Public InstanceColletion GetInstance(string instanceNumber,string operatorNumber)
根据instanceId获取数据包BizDataBag、单体WorkflowInstance、还有可执行的操作集List<Operation>这三者组合而成的大对象InstanceColletion。
c) 将流程业务数据包传给规则引擎返回可操作的流程列表
Public List<T_StatusOperation> GetOperations(BizDataBag bag)
根据RecentNode和取出下一步可进行的操作列表,然后将Bag传入规则引擎,返回操作代码,再关联操作表的主键得到操作的List。
d) 创建工作流实例
Public bool CreateInstance(BizDataBag bag,string bizNumber,string templateCode, attachFile file)
根据传入的数据包、业务单据号、模板编号创建实例,组装一个Message对象,传入调用MessageService. AddToMessageQueue(T_FlowMessage QueueWaited msg)。
e) 根据传入的instanceNumber 反持久化Workflow实例。
public bool DePersistentInstance(string instanceNumber)
工作流运行时相关类
a) T_FlowBizDataBag类
(1) 验证业务数据包,调用T_FlowBizDataBagDefinition类的相关方法进行验证
Bool ValidateFlowBizDataBag(string flowInstanceNumber);
(2) 加载业务数据包
Bool AddFlowBizDataBag(T_FlowBizDataBag bizDataBag);
b) T_BizAttachFile类
(1) 加载文件
Bool AddBizAttachFile(T_BizAttachFile bizAttachFile);
c) T_StatusOperationMessage类
(1) 添加流程状态操作消息
Bool AddStatusOperationMessage(T_StatusOperationMessage statusOperationMess age);
(2) 根据实例编号导入流程状态操作消息
Bool GetStatusOperationMessage(string flowInstanceNumber);
l 限制及约束:WorkflowRuntime是一个密封类,没有派生者,以单件模式创建,随Windows Service启动,运行时常驻内存。
2. MessageService类
l 命名空间:AHIT.WorkflowEngine
l 关键字:static
l 类职责:
ü 将消息添加至消息队列(物理表)
ü 轮询消息队列并处理Task
ü 判断某一具体Task是否合法
l 字段及属性:无。
l 方法说明:
a) public static Void AddToMessageQueue(T_FlowMessageQueuqWaited msg)
将Message加入引擎待处理消息表。
b) public static void ExecuteTask()
循环访问待处理消息表,取时间戳最早的一条记录处理,共处理三件事情,第一是增加流程状态操作信息表的记录,二是更新实例表,三是写日志项表,在一个事务中控制,当处理结束时同时更新两张表,即在待处理消息表中删除记录和在已处理消息表中增加记录,若事务完成则回到循环体继续访问待处理消息表。
c) private static bool JudgeTask(T_FlowMessageQueuqWaited msg)
利用message携带的实例信息判断该实例的当前操作是否满足要求。如防止重复操作。
l 限制及约束:无。
3. LogService类
l 命名空间:AHIT.WorkflowEngine
l 关键字:static
l 类职责:
ü 填写日志
在创建流程实例时写流程日志
在操作工作流结点时写日志项
ü 查看日志列表
ü 查看单体日志
l 字段及属性:无
l 方法:
Public static void WriteFlowLog(T_FlowLog flowLog)
写流程日志。
Public static void WriteLogItem(T_LogItem logItem)
写日志项
Public static List<Log> GetLogs(string instanceCode)
根据实例编码取该实例的操作日志列表。Log为流程日志和日志项的组合类
Public static Log GetLog(string logItemNumber)
根据日志编码主键访问单体日志。Log为流程日志和日志项的组合类
l 限制及约束:写日志受Task执行成功与否的制约,被包含在ExecuteTask()所触发的事务里。
4. ExceptionHelper类
l 命名空间:AHIT.WorkflowEngine
l 关键字:static
l 类职责:
ü 抛出自定义异常
l 字段及属性:无
l 方法:
Public static string GetCustomizeException(string exceptionCode)
l 限制及约束:无。
2.1.3 外部接口
1. 调用的外部接口(External Interface)
a) 获取系统级人员信息
b) 获取系统级角色信息
c) 将核赔后的业务状态传递至理赔子系统
d) 将核保后的业务状态传递至承保子系统
e) 获取地域字典描述
f) 获取险种字典描述
g) 获取规则引擎的判断结果
2. 被调用的外部接口(Public Interface)
a) 查看当前核保流程状态
b) 查看当前核赔流程状态
c) 查看流程轨迹
2.1.4 尚未解决的问题
1. 与规则引擎的衔接
2. 子流程的需求
2.2 工作流设计器(WorkflowDesigner)
2.2.1 程序概述
工作流设计器是定义工作流模板、流程节点、操作与规则的工具,是对静态定义的描述。
2.2.2 功能设计
1. TemplateConfiguration类
l 命名空间:AHIT.WorkflowDesigner
l 关键字:无
l 类职责:
ü 根据业务类型(核保、核赔)和险类标识(是否农险)创建不同的双核工作流模板
ü 设置工作流模板的流程业务数据包定义
ü 构建工作流模板的各个结点
ü 指定各个结点的权限
ü 设置各个结点的级别、关系
ü 设置结点之间的流转规则
ü 指定各个结点的流程状态前活动事件和状态后活动事件
ü 指定各个结点的流程状态表单信息(结点对应审批窗体显示信息实体类名,运行期从流程业务数据包读取)
l 方法:
创建工作流模板方法
Public bool CreateFlowTemplate(Template flowTemplate);
传入Template公共类,内部调用“其它模板配置相关类“构建工作流模板、节点、操作、规则等。
其它模板配置相关类:
2. T_FlowTemplate类
(1) 根据模板编号获取模板实体
Public T_FlowTemplate GetFlowTemplate(string flowTemplateNumber);
(2) 根据业务类型、险类取模板实体
Public T_FlowTemplate GetFlowTemplate(string businessType, string classFlag);
(3) 创建流程模板
Public bool AddFlowTemplate(T_FlowTemplate flowTemplate);
3. T_FlowStatusNode类
(1) 根据模板编号取状态结点列表
Public List<T_FlowStatusNode> GetFlowStatusNodeList(string templateNumber);
(2) 根据结点编号取状态结点实体
Public T_FlowStatusNode GetFlowStatusNode(string nodeNumber);
(3) 添加状态结点实体
Public bool AddFlowStatusNode(T_FlowStatusNode flowStatusNode);
4. T_FlowStatusNodeRole类
(1) 根据角色、状态结点编号取流程状态参与角色关系表实体
Public T_FlowStatusNodeRole GetFlowStatusNodeRole(string RoleNumber, string FlowStatusNodeNumber);
(2) 也可以根据用户名,暂不考虑
(3) 添加流程状态参与角色关系表
Public bool AddFlowStatusNodeRole(T_FlowStatusNodeRole flowStatusNodeRole);
5. T_StatusOperation类
(1) 根据状态结点编号取流程状态操作实体
Public T_StatusOperation GetStatusOperation(string flowStatusNodeNumber);
(2) 添加流程状态操作实体
Public bool AddStatusOperation(T_StatusOperation statusOperation);
6. FlowBizDataBagDefinition类
(1) 添加流程业务数据包定义
Public bool AddFlowBizDataBagDefinition(T_FlowBizDataBagDefinition dataBagDefini tion)
(2) 根据模板编号取数据包定义实体
Public List<T_FlowBizDataBagDefinition> GetFlowBizDataBagDefinition(string flowTemp lateNumber);
7. T_StatusBeforeAction
(1) 根据模板编号取流程状态前活动实体列表
List<T_ StatusBeforeAction> GetStatusBeforeAction(string flowTemplateNumber);
(2) 添加流程状态前活动实体
Public bool Add StatusBeforeAction(T_ StatusBeforeAction statusBeforeAction);
8. T_StatusAfterAction
(1) 根据模板编号取流程状态后活动实体列表
List<T_ StatusAfterAction> GetStatusAfterAction(string flowTemplateNumber);
(2) 添加流程状态后活动实体
Public bool AddStatusAfterAction(T_ StatusAfterAction statusAfterAction);
9. T_StatusFormInfo
(1) 根据状态结点编号取流程状态表单信息实体
T_StatusFormInfo GetStatusFormInfo(string flowStatusNodeNumber);
(2) 添加流程状态表单信息实体
Public bool AddStatusFormInfo(T_StatusFormInfo statusFormInfo);
1. Designer类(Version 1.1 的内容)
l 命名空间:AHIT.WorkflowDesigner
l 关键字:无
l 类职责:
ü 以图形化的方式配置工作流模板
3. RuleDefinition类
l 命名空间:AHIT.WorkflowDesigner
l 关键字:无
l 类职责:
ü 创建并保存规则
ü 修改并保存规则
ü 停用规则
规则定义相关类
a) RuleDefinition类
(1) 调用规则引擎设计窗体
Public string CallRuleEngine(Rule rule);
传入Rule类(内含规则表达式及规则涉及到的实体对象),返回规则引擎编号
(2) 保存规则引擎编号,调用T_StatusActionRule类
Public bool SaveRule(string ruleNumber);
b) T_StatusActionRule类
(1) 根据流程状态操作编号取状态操作附加规则(主要取规则引擎编号)
Public T_StatusActionRule GetStatusActionRule(string statusOperationNumber);
(2) 添加状态操作附加规则
Public bool AddStatusActionRule(T_StatusActionRule statusActionRule);
2.2.3 外部接口
1. 调用的外部接口(External Interface)
a) 获取系统级人员信息
b) 获取系统级角色信息
c) 获取地域字典描述
d) 获取险种字典描述
e) 定义规则
2. 被调用的外部接口(Public Interface)
无。
2.2.4 尚未解决的问题
1. 与规则引擎的衔接
2. 子流程的需求
1.3 公共对象
1、Template类
字段名称
字段描述
字段类型
备注
FlowTemplateNumber
流程模板编号
Int
静态存储
Name
流程模板名称
String
静态存储
Version
流程模板版本
String
静态存储
FlowTemplateType
流程模板类型
String
静态存储
StopFlag
停用标识
bool
静态存储
FlowTemplateRelationNumber
流程模板地区关系编号
int
静态存储
BusinessType
业务类型
String
静态存储
RiskFlag
险类标识
string
静态存储
FlowBizDataBag
DefinitionNumber
流程业务数据包定义编号
Int
静态存储
DataBagDefinitionXSD
流程业务数据包定义内容
xml
静态存储
RiskCodeNumber
险种编号
String
静态存储
List<Node>
结点集合
List<T>
静态存储
2、Node类
字段名称
字段描述
字段类型
备注
FlowStatusNodeNumber
流程状态节点编号
int
静态存储
FlowTemplateNumber
流程模板编号
int
静态存储
StatusName
流程状态节点名称
String
静态存储
StatusFormInfoNumber
流程状态表单信息编号
Int
静态存储
FormClassName
流程状态表单信息类名
string
静态存储
FlowStatusNodeRoleNumber
流程状态参与角色关系编号
int
静态存储
RoleNumber
角色编号
int
静态存储
UserNumber
用户编号
int
静态存储
List<Operation>
流程状态操作集合
List<T>
静态存储
3、Operation类
字段名称
字段描述
字段类型
备注
StatusOperationNumber
流程状态操作编号
int
静态存储
FlowStatusNodeNumber
流程状态节点编号
int
静态存储
TargetStatusNodeNumber
目标状态节点编号
int
静态存储
OperationName
操作员姓名
varchar
静态存储
List<Rule>
状态操作附加规则集
List<T>
静态存储
4、Rule类
字段名称
字段描述
字段类型
备注
StatusActionRuleNumber
状态操作附加规则编号
int
静态存储
StatusOperationNumber
状态操作编号
int
静态存储
RuleText
规则表达式
varchar
静态存储
FlowBizDataBagXml
数据包存储对象XML(一个Rule在规则引擎只能对应一个实体对象)
Xml
静态存储
1.4 数据库结构说明
2.4.1地区表
T_Area
字段名称
字段类型
字段长度
是否必填
是否主键
字段描述
AreaNumber
int
4
是
是
地区编号
2.4.2业务附件文件
T_BizAttachFile
字段名称
字段类型
字段长度
是否必填
是否主键
字段描述
BizAttachFileNumber
int
4
是
是
业务附件文件编号
FlowInstanceNumber
int
4
否
否
流程实例编号
FileName
varchar
200
否
否
文件名
FileContent
varchar
500
否
否
文件内容
FileSize
decimal
9
否
否
文件大小
2.4.3流程业务数据包
T_FlowBizDataBag
字段名称
字段类型
字段长度
是否必填
是否主键
字段描述
FlowBizDataBagNumber
int
4
是
是
流程业务数据包编号
FlowInstanceNumber
int
4
否
否
流程实例编号
FlowBizDataBag
DefinitionNumber
int
4
否
否
流程业务数据包定义编号
FlowBizDataBagXML
xml
-1
否
否
流程业务数据包内容
2.4.4流程业务数据包定义
T_FlowBizDataBagDefinition
字段名称
字段类型
字段长度
是否必填
是否主键
字段描述
FlowBizDataBag
DefinitionNumber
int
4
是
是
流程业务数据包定义编号
DataBagDefinitionXSD
xml
-1
否
否
流程业务数据包定义内容
RiskCodeNumber
int
4
否
否
险种编号
FlowTemplateNumber
int
4
否
否
流程模板编号
2.4.5流程实例表
T_FlowInstance
字段名称
字段类型
字段长度
是否必填
是否主键
字段描述
FlowInstanceNumber
int
4
是
是
流程实例编号
FlowTemplateNumber
int
4
否
否
流程模板编号
ParentFlowInstanceNumber
int
4
否
否
父流程实例编号
StartTime
datetime
8
否
否
开始时间
EndTime
datetime
8
否
否
终止时间
LastDealTime
datetime
8
否
否
最后处理日期
AreaNumber
int
4
否
否
地区编号
RiskCodeNumber
int
4
否
否
险种编号
Amount
decimal
9
否
否
金额
EndFlag
bit
1
否
否
结束标识
CurrentStatusNodeNumber
int
4
否
否
当前状态结点编号
BusinessNumber
int
4
否
否
业务号(如投保单号,
赔款计算书号)
2.4.6流程日志
T_FlowLog
字段名称
字段类型
字段长度
是否必填
是否主键
字段描述
FlowLogNumber
int
4
是
是
流程日志编号
FlowInstanceNumber
int
4
否
否
流程实例编号
OperationDate
datetime
8
否
否
操作日期
2.4.7已处理消息队列表
T_FlowMessageQueueDone
字段名称
字段类型
字段长度
是否必填
是否主键
字段描述
FlowLogNumber
int
4
是
是
流程日志编号
FlowInstanceNumber
int
4
否
否
流程实例编号
OperationDate
datetime
8
否
否
操作日期
2.4.8待处理消息队列表
T_FlowMessageQueueWaited
字段名称
字段类型
字段长度
是否必填
是否主键
字段描述
StatusOperation
MessageNumber
int
4
是
是
未处理流程状态操
作消息队列编号
StatusOperation
MessageInQuequeNumber
int
4
否
否
状态操作信息编号
OperationDate
datetime
8
否
否
操作日期
2.4.9流程状态结点
T_FlowStatusNode
字段名称
字段类型
字段长度
是否必填
是否主键
字段描述
FlowStatusNodeNumber
int
4
是
是
流程状态节点编号
FlowTemplateNumber
int
4
否
否
流程模板编号
StatusName
varchar
50
否
否
流程状态节点名称
2.4.10流程状态参与角色关系表
T_FlowStatusNodeRole
字段名称
字段类型
字段长度
是否必填
是否主键
字段描述
FlowStatusNodeRoleNumber
int
4
是
是
流程状态参与角色关系编号
FlowStatusNodeNumber
int
4
否
否
流程状态节点编号
RoleNumber
int
4
否
否
角色编号
UserNumber
int
4
否
否
用户编号
2.4.11流程模板表
T_FlowTemplate
字段名称
字段类型
字段长度
是否必填
是否主键
字段描述
FlowTemplateNumber
int
4
是
是
流程模板编号
Name
varchar
50
否
否
流程模板名称
Version
varchar
50
否
否
流程模板版本
FlowTemplateType
varchar
50
否
否
流程模板类型
StopFlag
bit
1
否
否
停用标识
2.4.12流程模板与业务类别、险类标识关系表
T_FlowTemplateRelation
字段名称
字段类型
字段长度
是否必填
是否主键
字段描述
FlowTemplate
AreaRiskCodeNumber
int
4
是
是
流程模板地区关系编号
BusinessType
varchar
50
否
否
业务类型 1 核保 2 核赔
RiskFlag
varchar
50
否
否
险类标识 1 农险 2 非农险
FlowTemplateNumber
int
4
否
否
流程模板编号
2.4.13日志项表
T_LogItem
字段名称
字段类型
字段长度
是否必填
是否主键
字段描述
LogItemNumber
int
4
是
是
日志项编号
FlowLogNumber
int
4
否
否
流程日志编号
StatusOperationMessageNumber
int
4
否
否
状态操作信息编号
ItemTime
datetime
8
否
否
项目时间
StatusComment
varchar
200
否
否
状态注释
2.4.14状态操作附加规则
T_StatusActionRule
字段名称
字段类型
字段长度
是否必填
是否主键
字段描述
StatusActionRuleNumber
int
4
是
是
状态操作附加规则编号
StatusOperationNumber
int
4
否
否
状态操作编号
RuleText
varchar
50
否
否
规则表达式
2.4.15流程状态后活动
T_StatusAfterAction
字段名称
字段类型
字段长度
是否必填
是否主键
字段描述
StatusAfterActionNumber
int
4
是
是
流程状态后活动编号
FlowTemplateNumber
int
4
否
否
流程模板编号
ClassName
varchar
100
否
否
类名
FlowStatusNodeNumber
int
4
否
否
流程状态节点编号
MethodName
varchar
50
否
否
方法名
AssembleName
varchar
100
否
否
程序集名称
2.4.16流程状态前活动
T_StatusBeforeAction
字段名称
字段类型
字段长度
是否必填
是否主键
字段描述
StatusBeforeActionNumber
int
4
是
是
流程状态前活动编号
FlowTemplateNumber
int
4
否
否
流程模板编号
ClassName
varchar
100
否
否
类名
FlowStatusNodeNumber
int
4
否
否
流程状态节点编号
MethodName
varchar
50
否
否
方法名
AssembleName
varchar
100
否
否
程序集名称
2.4.17流程状态表单信息
T_StatusFormInfo
字段名称
字段类型
字段长度
是否必填
是否主键
字段描述
StatusFormInfoNumber
int
4
是
是
流程状态表单信息编号
FlowStatusNodeNumber
int
4
否
否
流程状态节点编号
FormClassName
varchar
100
否
否
流程状态表单信息类名
2.4.18流程状态操作表
T_StatusOperation
字段名称
字段类型
字段长度
是否必填
是否主键
字段描述
StatusOperationNumber
int
4
是
是
流程状态操作编号
FlowStatusNodeNumber
int
4
否
否
流程状态节点编号
TargetStatusNodeNumber
int
4
否
否
目标状态节点编号
OperationName
varchar
50
否
否
操作员姓名
2.4.19流程状态操作消息表
T_StatusOperationMessage
字段名称
字段类型
字段长度
是否必填
是否主键
字段描述
StatusOperationMessageNumber
int
4
是
是
流程状态操作消息编号
FlowInstanceNumber
int
4
否
否
流程实例编号
FlowStatusNodeNumber
int
4
否
否
源状态结点编号
TargetStatusNodeNumber
int
4
否
否
目标状态结点编号
RoleNumber
int
4
否
否
角色编号
UserNumber
int
4
否
否
用户编号
OperationDate
datetime
8
否
否
操作日期
展开阅读全文