系列文章目录
第一章 springboot+Activiti7整合实践 (一)
第二章 springboot+Activiti7整合实践 (二) 模型定义
第三章 springboot+Activiti7整合实践 (三) 流程定义
前言
此章节主要内容是对流程设计中的重要环节,代办人的分配规则的处理,大部分流程中,用户任务是比不缺少的,有用户任务,那么必然绕不开设置代办人,这里会提供设计思路及关键性代码,大家多指导。
一、设计思路
规则分配,分配的主要两点,其一是设置工作的具体内容,其二是分配工作的代办人;
工作内容:这里的工作内容分为表单、审批,表单根据自己的情况写增删改查的功能,代表具体的业务功能,审批即对于具体业务功能的审核。
代办人:任务的具体处理人,可分配多人,也可分配角色或部门等。
在用户查询自己的代办任务时,可根据配置的代办人查询需要自己处理的任务,并且处理任务时可根据分配的工作内容,动态展现不同的表单或审批功能,完成任务。
二、工作内容设计
1.数据库设计
CREATE TABLE `work_info` (
`id` varchar(50) NOT NULL COMMENT '主键id',
`name` varchar(100) DEFAULT NULL COMMENT '名称',
`route` varchar(100) DEFAULT NULL COMMENT '路由',
`type` varchar(2) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '工作类型1:表单2:审批',
`history_view_route` varchar(100) DEFAULT NULL COMMENT '历史信息展示页路由',
`create_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '0' COMMENT '创建人id',
`create_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_id` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '0' COMMENT '修改人id',
`update_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
`sort` tinyint DEFAULT '0' COMMENT '排序',
`state` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '1' COMMENT '数据状态,1:可用,0:不可用(逻辑删除)',
`remark` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '备注',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='工作信息表';
2.页面设计
工作内容的设计本质就是保存工作的类型、对应前端的哪个处理页面,在前端点击功能按钮时可根据具体的任务信息,查询到对应的前端页面,从而完成任务,功能简单,代码不贴了。
三、代办人分配设计
1.任务分配规则列表
后端实现:
/**
* 获得工作流分配规则列表
* @author Liubin
* @time 2023-12-25 17:10
* @param modelId ,processDefinitionId
* @return com.sx.common.ResponseResult
*/
public List<WorkTaskAssignRule> getTaskAssignRuleList(String modelId, String processDefinitionId) {
// 获得规则
List<WorkTaskAssignRule> rules = Collections.emptyList();
BpmnModel model = null;
if (StrUtil.isNotEmpty(modelId)) {
rules = getTaskAssignRuleListByModelId(modelId);
model = actModelService.getBpmnModel(modelId);
} else if (StrUtil.isNotEmpty(processDefinitionId)) {
rules = getTaskAssignRuleListByProcessDefinitionId(processDefinitionId, null);
model = processDefinitionService.getBpmnModel(processDefinitionId);
}
if (model == null) {
return Collections.emptyList();
}
// 获得用户任务,只有用户任务才可以设置分配规则
List<UserTask> userTasks = BpmnModelUtils.getBpmnModelElements(model, UserTask.class);
if (CollUtil.isEmpty(userTasks)) {
return Collections.emptyList();
}
Map<String, WorkTaskAssignRule> ruleMap = CollectionUtils.convertMap(rules, WorkTaskAssignRule::getTaskDefinitionKey);
// 转换数据
return CollectionUtils.convertList(userTasks, task -> {
WorkTaskAssignRule respVO = ruleMap.get(task.getId());
if (respVO == null) {
respVO = new WorkTaskAssignRule();
respVO.setTaskDefinitionKey(task.getId());
}
if(StringUtil.isNotEmpty(respVO.getWorkInfoId())){
WorkInfo workInfo = workInfoService.dataById(respVO.getWorkInfoId());
respVO.setWorkInfoName(workInfo!=null?workInfo.getName():"");
}
respVO.setTaskDefinitionName(task.getName());
String options = respVO.getOptions();
if(StringUtil.isNotEmpty(options)){
List<String> optionList = Arrays.stream(options.split(",")).collect(Collectors.toList());
respVO.setOptionList(optionList);
}
return respVO;
});
}
功能解释:获得流程设计图对象:BpmnModel,山选出UserTask的用户任务节点,只有用户任务节点才需要分配代办人。
2.分配规则
规则分为:
用户:记录分配的用户id,用逗号分隔
角色:记录分配的角色id,用逗号分隔
部门:记录分配的部门id,用逗号分隔
页面设计:
规则分配表的重点字段:
processDefinitionId:流程定义id(注:流程发布之后才会产生,更新到分配规则表中)
taskDefinitionKey:流程设计元素的key值,就是流程图中每个节点的唯一主键。
modelId:模型的主键,对应每一个设计的模型。
以上三个字段为重点字段,用于规则的关联关系,其他字段可以根据需求自行补充。
总结
到此完成分配规则的主要内容,主要内容就是工作定义和代办人分配两个内容,这两项内容都是工作流之外的定义,而这些规则如何在工作流程中使用,会在下一章节分享。