基于jeecg-boot的flowable流程审批时增加下一个审批人设置

news2024/11/27 11:48:40

      更多nbcio-boot功能请看演示系统

       gitee源代码地址

       后端代码: https://gitee.com/nbacheng/nbcio-boot

      前端代码:https://gitee.com/nbacheng/nbcio-vue.git

      在线演示(包括H5) : http://122.227.135.243:9888
 

      因为有时候需要审批时指定下一个审批人,所以增加这个功能

      1、前端

       这个比较简单,增加选择人员就可以了,如下:

<el-form-item label="附件"  prop="commentFileDto.fileurl">
          <j-upload v-model="taskForm.commentFileDto.fileurl"   ></j-upload>
        </el-form-item>
        <el-form-item label="选择抄送人" prop="ccUsers">
          <j-select-user-by-dep v-model="taskForm.ccUsers" />
        </el-form-item>
        <el-form-item label="选择下一审批人" prop="nextUsers">
          <j-select-user-by-dep v-model="taskForm.nextUsers" />
          <el-tag type="danger">注意: 多实例目前仅支持选择下一个审批人数要与原先设置的人数一致</el-tag>
        </el-form-item>
      </el-form>

   

2、后端

      下面对下个节点是多实例的会签要做特殊处理,包括并发与循序流转,对于循序流转需要递归传递下去参数,以便一个一个审批都能把人工设置的人员设置进去。

/**
     * 人工设置下一个审批人
     *
     * @param task,taskVo, nextFlowNode
     * @return 
     */
    private void setNextUsersAndComplete(Task task, FlowTaskVo taskVo, FlowNextDto nextFlowNode, List<String> manualSetNextUser) {
        if(Objects.nonNull(nextFlowNode)) {
        	taskFormComplete(taskVo); 
        	manualSetAssignee(task, taskVo, nextFlowNode, manualSetNextUser);    
        }
        else { //下一个节点是空
        	taskFormComplete(taskVo);
        }
		
	}
    
    /**
     * 人工设置审批人
     *
     * @param task,taskVo, nextFlowNode
     * @return 
     */
   private void manualSetAssignee(Task task, FlowTaskVo taskVo, FlowNextDto nextFlowNode, List<String> manualSetNextUser) {
	   List<String> nextusers = new ArrayList<String>();
	   if (StringUtils.isNotBlank(taskVo.getNextUsers())){
		   nextusers = CollUtil.newLinkedList(taskVo.getNextUsers().split(","));
	   }
	   if(nextusers.size() == 0 && ObjectUtil.isNotEmpty(manualSetNextUser)) {//若是人工串行会签传递过来参数
		   Task nexttask = taskService.createTaskQuery().processInstanceId(taskVo.getInstanceId()).active().singleResult();
		   taskService.setAssignee(nexttask.getId(),manualSetNextUser.get(0));
		   manualSetNextUser.remove(0);
		   if(manualSetNextUser.size()>0) {
			   taskService.setVariable(nexttask.getId(), "ManualSetNextUser", manualSetNextUser);
		   }
		   return;
	   }
	   List<SysUser> sysuserlist = nextFlowNode.getUserList();
	   if(nextusers.size() > 0) { 
		   if(nextFlowNode.getType().equals(ProcessConstants.PROCESS_MULTI_INSTANCE) 
			  && sysuserlist.size() == nextusers.size()) {//若下个节点是会签节点,且指定审核人数与原先设置的人数相同
			  List<Task> nexttasklist = taskService.createTaskQuery().processInstanceId(taskVo.getInstanceId()).active().list();
			  if(!nextFlowNode.isBisSequential()){//对并发会签进行assignee单独赋值
				  int i = 0;
				  for (Task nexttask : nexttasklist) {
					  String assignee = nextusers.get(i).toString();	
					  taskService.setAssignee(nexttask.getId(), assignee);
					  i++;
				  }
			  }
			  else {//串行的话,第一个也直接赋值,后面也需要带上参数值,以便传递下去
				  Task nexttask = taskService.createTaskQuery().processInstanceId(taskVo.getInstanceId()).active().singleResult();
				  taskService.setAssignee(nexttask.getId(), nextusers.get(0));
				  if(nextusers.size()>1) {
					  nextusers.remove(0);
					  taskService.setVariable(nexttask.getId(), "ManualSetNextUser", nextusers);//设置人工设置串行会签人员
				  }
				 
			  }   
		   }
		   else {
			   Task nexttask = taskService.createTaskQuery().processInstanceId(taskVo.getInstanceId()).active().singleResult();
			   taskService.setAssignee(nexttask.getId(), nextusers.get(0));
		   }
		   
	   }
   }

3、效果图

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/952554.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

工服穿戴检测算法 工装穿戴识别算法

工服穿戴检测算法 工装穿戴识别算法利用yolo网络模型图像识别技术&#xff0c;工服穿戴检测算法 工装穿戴识别算法可以准确地识别现场人员是否穿戴了正确的工装&#xff0c;包括工作服、安全帽等。一旦检测到未穿戴的情况&#xff0c;将立即发出警报并提示相关人员进行整改。Yo…

python中的模块和包

模块 模块就是一个Python文件&#xff0c;里面有类、函数、变量等&#xff0c;我们可以拿过来用&#xff08;导入模块去使用&#xff09; 模块的导入方式 模块在使用前需要先导入。导入的语法如下: 常用的组合形式如&#xff1a; import 模块名from 模块名 import 类、变量、…

JavaScript闭包漏洞与修补措施

请先看下面一段代码 var obj (function () {var sonObj {a: 1,b: 2}return {getObj: function (v) {return sonObj[v]}}})()可以看出,这是一段很典型的js闭包代码,可以通过obj调用get方法传一个参数,如果传的是a就可以得到闭包内的对象sonObj.a var obj (function () {var s…

企业合规改革如何进行?

企业合规是现代商业运作中的重要议题&#xff0c;合规改革是促使企业适应法规变化、规范经营行为的必经之路。本文将介绍企业合规改革的步骤和方法&#xff0c;帮助企业建立健全的合规机制&#xff0c;增强竞争力&#xff0c;并赢得社会信任。 一、评估和分析 合规改革的第一…

明厨亮灶监控实施方案 opencv

明厨亮灶监控实施方案通过pythonopencv网络模型图像识别算法&#xff0c;一旦发现现场人员没有正确佩戴厨师帽或厨师服&#xff0c;及时发现明火离岗、不戴口罩、厨房抽烟、老鼠出没以及陌生人进入后厨等问题生成告警信息并进行提示。OpenCV是一个基于Apache2.0许可&#xff08…

eureka服务注册和服务发现

文章目录 问题实现以orderservice为例orderservice服务注册orderservice服务拉取 总结 问题 我们要在orderservice中根据查询到的userId来查询user&#xff0c;将user信息封装到查询到的order中。 一个微服务&#xff0c;既可以是服务提供者&#xff0c;又可以是服务消费者&a…

六、事务-1.简介

一、简介 例&#xff1a;张三转账1000元给李四 step1&#xff1a;查询张三账户余额是否有2000元 step2&#xff1a;若张三账户余额有2000元&#xff0c;张三账户余额-1000 step3&#xff1a;李四账户余额1000 若step2执行成功&#xff0c;step3执行失败&#xff0c;此时需要…

ToBeWritten之VSOC安全运营

也许每个人出生的时候都以为这世界都是为他一个人而存在的&#xff0c;当他发现自己错的时候&#xff0c;他便开始长大 少走了弯路&#xff0c;也就错过了风景&#xff0c;无论如何&#xff0c;感谢经历 转移发布平台通知&#xff1a;将不再在CSDN博客发布新文章&#xff0c;敬…

【ES】illegal_argument_exception“,“reason“:“Result window is too large

查询ES数据返回错误&#xff1a; {"root_cause":[{"type":"illegal_argument_exception","reason":"Result window is too large, from size must be less than or equal to: [10000] but was [999999]. See the scroll api for…

直播预告|博睿学院第四季即将开讲:博睿数据资深运维团队现身说法!

博睿学院第四季开讲啦&#xff01;本季博睿学院的课程将于本周四&#xff08;8月31日&#xff09;16点正式启动。本季我们邀请到了博睿数据平台支撑中心的四位资深运维专家现身说法&#xff0c;来为我们分享一体化智能可观测平台Bonree ONE的实践干货。 他们&#xff0c;见多识…

Gradio使用介绍

与他人分享你的机器学习模型、API或数据科学工作流的最佳方式之一&#xff0c;就是创建一个交互式应用程序&#xff0c;让用户或同事可以在他们的浏览器中尝试演示,Gradio是创建提供了用非常方便的方式快速创建一个前端交互应用&#xff0c;那如何使用Gradio呢&#xff1f;因为…

element侧边栏子路由点击不高亮问题

最近自己封装侧边栏 又碰到了点击子路由不高亮的问题 <template><div class"aside"><el-scrollbar :vertical"true" class"scrollbar_left_nav"><el-menu :default-active"defaultActive" :collapse"$stor…

MySQL高级篇_13_事务基础知识_尚硅谷_宋红康

MySQL高级篇_事务基础知识 1. 数据库事务概述1.1 存储引擎支持情况1.2 基本概念1.3 事务的ACID特性原子性&#xff08;atomicity&#xff09;一致性&#xff08;consistency&#xff09;隔离性&#xff08;isolation)持久性&#xff08;durability&#xff09; 1.4 事务的状态 …

Openlayers 教程 - 获取地图中心点、范围以及缩放等级

Openlayers 教程 - 获取地图中心点、范围以及缩放等级 核心代码完整代码&#xff1a;在线示例 之前项目中需要实时获取地图中心点以及范围&#xff0c;难度不高&#xff0c;为了方便使用&#xff0c;这里记录分享一下。 本文包括核心代码、完整代码以及在线示例。 核心代码 //…

Consul原理介绍

官方文档&#xff1a;https://www.consul.io/docs Raft动画演示&#xff1a;http://thesecretlivesofdata.com/raft/ 注册中心对比 Consul特点 服务发现、健康检查、Key/Value存储、安全服务通信&#xff08;TLS证书&#xff09;、多数据中心 架构 角色 数据中心 数据中心内…

windows 中pycharm中venv无法激活

1.用管理员身份打开Windows PowerShell 2.进入项目的&#xff1a;venv\Scripts 如&#xff1a;D: (1): cd .\project\venv\Scripts\ (2): 执行命令&#xff1a; Set-ExecutionPolicy RemoteSigned (3): 选择&#xff1a;Y (4): .\activate

使用生成式 AI 和 Amazon Kendra 实现企业规模的图像字幕创建和搜索

Amazon Kendra 是一个由机器学习(ML)驱动的智能搜索服务。Amazon Kendra 重新构想了您的网站和应用程序的搜索功能,以便您的员工和客户可以轻松地找到散布在您组织内多个位置和内容存储库中的内容。 亚马逊云科技开发者社区为开发者们提供全球的开发技术资源。这里有技术文档、…

Linux启动黑屏卡住Logo登录界面无法进入系统的终极解决方式

Linux启动黑屏 卡住Logo登录界面无法进入系统的终极解决方式 "⮫适用于ubuntu系统⮨" 起因经过方法1--甲说方法2--乙说方法3--丙说方法4--丁说 结果中途误删ubuntu的etc文件如何恢复于是&#xff0c;我重装了系统&#xff0c;没想到有意外收获&#xff08;中途还把新…

C语言每日一练-------Day(9)

本专栏为c语言练习专栏&#xff0c;适合刚刚学完c语言的初学者。本专栏每天会不定时更新&#xff0c;通过每天练习&#xff0c;进一步对c语言的重难点知识进行更深入的学习。 今日练习题关键字&#xff1a;字符个数统计 多数元素 投票法 &#x1f493;博主csdn个人主页&#xf…

ITMS介绍

ITMS&#xff08;Integrated Terminal Management System&#xff09;&#xff0c;终端综合管理系统。 主要用于家庭网关的设备注册&#xff0c;初始化自动配置&#xff0c;软件版本升级&#xff0c;远程故障诊断修复和设备监控等。它通过北向连接服开系统用于接收业务工单&am…