基于jeecgboot的支持flowable的排它网关之后的会签功能(二)
对于审批完成的处理也要对这种特殊情况做处理,目前暂时不支持子流程
taskService.setAssignee(taskVo.getTaskId(), loginUser.getUsername());
// 获取下一节点数据
FlowNextDto nextFlowNode = flowTaskService.getNextFlowNode(task.getId(), taskVo.getValues());
String definitionld = runtimeService.createProcessInstanceQuery().processInstanceId(taskVo.getInstanceId()).singleResult().getProcessDefinitionId(); //获取bpm(模型)对象
BpmnModel bpmnModel = repositoryService.getBpmnModel(definitionld);
//传节点定义key获取当前节点
FlowNode flowNode = (FlowNode) bpmnModel.getFlowElement(task.getTaskDefinitionKey());
if(Objects.nonNull(nextFlowNode)) {
if(flowNode instanceof UserTask ){//当前节点是用户任务
UserTask userTask = (UserTask) flowNode;
MultiInstanceLoopCharacteristics multiInstance = userTask.getLoopCharacteristics();
if (Objects.nonNull(multiInstance)) {//当前节点是会签节点
if(nextFlowNode.getType().equals(ProcessConstants.PROCESS_MULTI_INSTANCE)) {//若下个节点也是会签节点
taskService.complete(taskVo.getTaskId());
}
else if(Objects.nonNull(taskVo.getValues()) && (taskVo.getValues().containsKey("approval"))) {//不是会签而且有approval
//complete方法来流传任务到下一个节点。其中第二个参数variables为下一个节点需要的参数Map,主要指流程设置的一些变量信息
taskService.complete(taskVo.getTaskId(), taskVo.getValues(),true);
Task nexttask = taskService.createTaskQuery().processInstanceId(taskVo.getInstanceId()).active().singleResult();
String assignee = taskVo.getValues().get("approval").toString();
taskService.setAssignee(nexttask.getId(), assignee);
}
else {
taskService.complete(taskVo.getTaskId());
}
}
else if(Objects.nonNull(taskVo.getValues())) {//当前节点不是会签节点,而且有变量值
if(nextFlowNode.getType().equals(ProcessConstants.PROCESS_MULTI_INSTANCE)) {//若下个节点也是会签节点
if(Objects.nonNull(nextFlowNode.getUserList())) {//有下个节点有用户
Map<String, Object> approvalmap = new HashMap<>();
List<String> sysuserlist = nextFlowNode.getUserList().stream().map(obj-> (String) obj.getUsername()).collect(Collectors.toList());
approvalmap.put("approval", sysuserlist);
taskService.complete(taskVo.getTaskId(), approvalmap);
if(!nextFlowNode.isBisSequential()){//对并发会签进行assignee单独赋值
List<Task> nexttasklist = taskService.createTaskQuery().processInstanceId(taskVo.getInstanceId()).active().list();
int i=0;
for (Task nexttask : nexttasklist) {
String assignee = sysuserlist.get(i).toString();
taskService.setAssignee(nexttask.getId(), assignee);
i++;
}
}
}
else {//有下个节点无用户
taskService.complete(taskVo.getTaskId(),taskVo.getValues());
}
}
else {//下个节点也不是会签而且有approval
taskService.complete(taskVo.getTaskId(), taskVo.getValues(),true);
Task nexttask = taskService.createTaskQuery().processInstanceId(taskVo.getInstanceId()).active().singleResult();
if(taskVo.getValues().containsKey("approval")) {//前端传回的审批人变量值
String assignee = taskVo.getValues().get("approval").toString();
taskService.setAssignee(nexttask.getId(), assignee);
}
}
}
else {//无传值情况
taskService.complete(taskVo.getTaskId());
}
}
}
else { //下一个节点是空
taskService.complete(taskVo.getTaskId());
}
基于jeecgboot的支持flowable的排它网关之后的会签功能(二)相关推荐
- 基于jeecgboot的支持online表单审批的功能正式发布
基于jeecgboot的flowable流程支持online表单审批线上发布一个完整的版本,利用原有online表单功能,通过选择现有online表单数据进行审批申请与操作,基本支持各自表单包括主从表 ...
- 基于国产龙芯 CPU 的气井工业网关研究与设计(二)
3.1 系统硬件的总体设计 从硬件架构上,该 RTU 主要包括三大部分的设计: (1)外围电路设计:电源电路设计.RTC 电路设计和 EEPROM 电路设计. (2)RTU 本体 I/O 端口设计:A ...
- java毕业设计——基于JSP+sqlserver的高校智能排课系统设计与实现(毕业论文+程序源码)——高校智能排课系统
基于JSP+sqlserver的高校智能排课系统设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于JSP+sqlserver的高校智能排课系统设计与实现,文章末尾附有本毕业设计的论文和源码下 ...
- 基于springboot的支持http接口+dubbo接口的TestNG自动化测试框架
一.背景 由于大多数公司都是使用Java作为后端开发语言,因此为了更好的与研发的框架对接.测试,掌握一套Java的自动化测试框架也逐渐成为测试人员的必修课. 同时随着现在微服务框架的流行,自动化测试框 ...
- riscv运行linux,首款基于RISC-V,支持Linux的PC——HiFive Unleashed已诞生!
对于常在开源硬件界混的小伙伴,相信对市面上的一些单板计算机都不陌生,什么树莓派.香蕉派.BeagleBone Black.Up Board等等,这些大多数都是采用ARM Coretx-A系列应用处理器 ...
- 巡检路线排班问题matlab,基于数学建模的巡检线路排班设计
黄家云:基于数学建模的巡检线路排班设计 49 基于数学建模的巡检线路排班设计 黄家云 夏伟 蒋娜 张磊 (芜湖职业技术学院基础部,安徽芜湖,241003) 摘 要:巡检线路的排班设计是 2017 年全 ...
- 基于JEECG-BOOT制作“左树右表”交互页面
前置知识: 1.ant-design-vue 2.vue的slot概念 需求效果: 如上界面所示. 后端不改动,基于jeecg-boot生成的代码,前端自定义,分为左右两块,典型的"左树右表 ...
- 基于SSM的健身房私教排课系统(含论文)
基于SSM的健身房私教排课系统(含论文) 健身房私教排课系统能很好的为用户提供快捷的信息登记.查询.管理功能,通过网络能及时获得各项信息资料,不但减少了人力,节省物力,而且提高了管理员的工作效率.本项 ...
- SAP UI5 应用开发教程之六十六 - 基于 OData V4 的 SAP UI5 表格控件如何实现删除功能试读版
一套适合 SAP UI5 初学者循序渐进的学习教程 教程目录 SAP UI5 本地开发环境的搭建 SAP UI5 应用开发教程之一:Hello World SAP UI5 应用开发教程之二:SAP U ...
最新文章
- float js 正则 验证_使用HTML和Vuejs进行表单验证
- springmvc DispatchServlet初始化九大加载策略(二)
- SOAWebservice系列课程(1)--The Essentials of Service Orientation
- 科普:CPU缓存一致性协议
- 身体容易缺少的微量元素
- SpringCloud Ribbon(一)之自定义负载均衡器ILoadBalancer
- java源码文件丢恢复需要多少钱,上岸蚂蚁金服!
- Ubuntu14.04 Apollo 3.5安装
- “大龄”程序员的出路
- hdu 1872 稳定排序
- 百度张亚勤当选美国艺术与科学院院士:今年当选的唯一华人科学家
- 佩奇扑街、外星人疯狂!Python 告诉你大年初一应该看哪部电影?
- python解析json传入变量_Python 使用 docopt 解析json参数文件过程讲解
- python基础6-控制语句
- SAI红绿蓝三原色叠加效果
- 原生android字体,不用Root,国产安卓手机如何把字体切换成安卓原生字体
- GoF设计模式——适配器模式(C++实现)
- 解决C语言运行窗口一闪而过问题
- linux嵌入式主要学什么软件,嵌入式软件工程师需要学什么?嵌入式Linux开发的工作内容...
- 降噪耳机哪个牌子好?给大家推荐几款质量比较好的降噪耳机品牌
热门文章
- 图像处理专业术语中英文对照
- Leetcode 1276:不浪费原料的汉堡制作方案(超详细的解法!!!)
- sfc /scannow扫描修复系统文件命令怎么用
- 折纸 瓦力机器人_一张纸成千种形态机器人:折纸机器人,神奇的创造
- 小勇机器人如何绑定_小勇机器人app
- 【BUG解决】 RuntimeError: Input type (torch.cuda.FloatTensor) and weight type (torch.FloatTensor)
- C# 字符串首字符大写
- 她的梦想是买一台新的计算机的英语,关于梦想的英语作文(精选11篇)
- 大体重程序员的减肥经历(不完整待补充)
- 最后谁剩下来了就返回哪个阵营 Dota2 Senate