springboot+Activiti7整合实践 (四) 分配规则

系列文章目录

第一章 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:模型的主键,对应每一个设计的模型。

以上三个字段为重点字段,用于规则的关联关系,其他字段可以根据需求自行补充。

我设计的表结构,参考


总结

到此完成分配规则的主要内容,主要内容就是工作定义和代办人分配两个内容,这两项内容都是工作流之外的定义,而这些规则如何在工作流程中使用,会在下一章节分享。

  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

刘一线

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值