flowable中传入审批人是list




package org.springblade.flow.engine.listener; import org.flowable.engine.delegate.DelegateExecution;
import org.springframework.stereotype.Component; import java.io.Serializable; //判断是否一票否决
@Component("multiInstance")
public class MultiInstanceCompleteTask implements Serializable {
/**
* 评估结果判定条件
*
* @param execution 分配执行实例
*/
public boolean accessCondition(DelegateExecution execution) {
//已完成的实例数
int completedInstance = (int) execution.getVariable("nrOfCompletedInstances");
//总实例数
int nrOfInstances = (int) execution.getVariable("nrOfInstances");
//否决判断,一票否决
if (execution.getVariable("pass") != null) {
boolean pass = (boolean) execution.getVariable("pass");
if (!pass) {
//输出方向为拒绝
//一票否决其他实例没必要做,结束
return true;
}
}
//所有实例任务未全部做完则继续其他实例任务
if (completedInstance != nrOfInstances) {
return false;
} else {
//输出方向为赞同
//所有都做完了没被否决,结束
return true;
}
} }
package org.springblade.flow.engine.listener; import org.flowable.engine.delegate.DelegateExecution;
import org.springframework.stereotype.Component; import java.io.Serializable; //多实例任务节点完成条件
@Component("multiInstance")
public class MultiInstance implements Serializable { /**
* 一票否决
* 1、如果有驳回操作,则驳回当前任务节点。
* 2、若已审批人数不等于总人数,则多实例任务继续执行
* 3、若已审批人数等于总人数,则结束当前任务节点,进入下一个任务节点。
* @param execution 分配执行实例
*/
public boolean vetoPower(DelegateExecution execution) {
//已完成的实例数
int completedInstance = (int) execution.getVariable("nrOfCompletedInstances");
//总实例数
int nrOfInstances = (int) execution.getVariable("nrOfInstances");
//否决判断,一票否决
if (execution.getVariable("pass") != null) {
boolean pass = (boolean) execution.getVariable("pass");
if (!pass) {
//输出方向为拒绝
//一票否决其他实例没必要做,结束
return true;
}
}
//所有实例任务未全部做完则继续其他实例任务
if (completedInstance != nrOfInstances) {
return false;
} else {
//输出方向为赞同
//所有都做完了没被否决,结束
return true;
}
} /**
* 一票否决 + 少数服从多数
* 1、如果有驳回操作,则驳回当前任务节点。
* 2、若同意人数比例大于等于0.5,则结束当前任务节点,进入下一个任务节点。
* 3、若不同意人数比例大于0.5,则驳回当前任务节点。
* 4、否则多实例任务继续执行
* @param execution
* @return
*/
public boolean vetoPowerAndObeyMost(DelegateExecution execution) {
//否决判断,一票否决
if (execution.getVariable("pass") != null) {
boolean pass = (boolean) execution.getVariable("pass");
if (!pass) {
//输出方向为拒绝
//一票否决其他实例没必要做,结束
return true;
}
}
//已完成的实例数
int completedInstance = (int) execution.getVariable("nrOfCompletedInstances");
//总实例数
int nrOfInstances = (int) execution.getVariable("nrOfInstances");
//获取不同意的次数
int rejectCount = (int)execution.getVariable("rejectCount");
//获取同意人的次数
int agreeCount = (int)execution.getVariable("agreeCount");
//所有实例任务未全部做完则继续其他实例任务
if (completedInstance != nrOfInstances) {
//不同意的人数大于设置比例*总人数
if (rejectCount*1.00/nrOfInstances>0.5){
execution.setVariable("pass", false);
return true;
}
if (agreeCount*1.00/nrOfInstances>=0.5){
execution.setVariable("pass", true);
return true;
}
return false;
} else {
//输出方向为赞同
//所有都做完了没被否决,结束
return true;
}
} /**
* 少数服从多数
* 1、若同意人数比例大于等于0.5,则结束当前任务节点,进入下一个任务节点。
* 2、若不同意人数比例大于0.5,则驳回当前任务节点。
* 3、否则多实例任务继续执行
* @param execution
* @return
*/
public boolean obeyMost(DelegateExecution execution) {
//已完成的实例数
int completedInstance = (int) execution.getVariable("nrOfCompletedInstances");
//总实例数
int nrOfInstances = (int) execution.getVariable("nrOfInstances");
//获取不同意的次数
int rejectCount = (int)execution.getVariable("rejectCount");
//获取同意人的次数
int agreeCount = (int)execution.getVariable("agreeCount");
//所有实例任务未全部做完则继续其他实例任务
if (completedInstance != nrOfInstances) {
//不同意的人数大于设置比例*总人数
if (rejectCount*1.00/nrOfInstances>0.5){
execution.setVariable("pass", false);
return true;
}
if (agreeCount*1.00/nrOfInstances>=0.5){
execution.setVariable("pass", true);
return true;
}
return false;
} else {
//不同意的人数大于设置比例*总人数
if (rejectCount*1.00/nrOfInstances>0.5){
execution.setVariable("pass", false);
return true;
}
if (agreeCount*1.00/nrOfInstances>=0.5){
execution.setVariable("pass", true);
return true;
}
return true;
}
} public boolean test(DelegateExecution execution,int i,String a){
System.out.println("===========i====="+i);
System.out.println("===========a====="+a);
return false;
} }
package org.springblade.flow.engine.listener.task; import org.flowable.engine.delegate.TaskListener;
import org.flowable.engine.impl.el.FixedValue;
import org.flowable.task.service.delegate.DelegateTask;
import org.springblade.core.tool.utils.Func;
import org.springframework.stereotype.Component; //计算同意和拒绝数量
@Component("countAgreeAndRejectTaskListener")
public class CountAgreeAndRejectTaskListener implements TaskListener { private FixedValue agreeFlagText;
private FixedValue agreeCountText;
private FixedValue rejectCountText; @Override
public void notify(DelegateTask delegateTask) {
Boolean pass = (Boolean) delegateTask.getVariable(Func.toStr(agreeFlagText.getExpressionText(),"pass")); String agreeCountTextVariable = Func.toStr(agreeCountText.getExpressionText(),"agreeCount") ;
// 校验 agreeCountText 是否已经存在
if (!delegateTask.hasVariable(agreeCountTextVariable)) {
delegateTask.setVariable(agreeCountTextVariable, 0);
}
//ExecutionListner类中设置的同意计数变量
int agreeCount = (int) delegateTask.getVariable(agreeCountTextVariable); String rejectCountTextVariable = Func.toStr(rejectCountText.getExpressionText(),"rejectCount") ;
// 校验 rejectCountText 是否已经存在
if (!delegateTask.hasVariable(rejectCountTextVariable)) {
delegateTask.setVariable(rejectCountTextVariable, 0);
}
//ExecutionListner类中设置的拒绝计数变量
int rejectCount = (int) delegateTask.getVariable(rejectCountTextVariable); if (pass){
//同意
delegateTask.setVariable(agreeCountTextVariable, ++agreeCount);
}
else{
//拒绝
delegateTask.setVariable(rejectCountTextVariable, ++rejectCount);
}
}
}
package org.springblade.flow.engine.listener.execution; import org.flowable.engine.delegate.DelegateExecution;
import org.flowable.engine.delegate.ExecutionListener;
import org.flowable.engine.impl.el.FixedValue;
import org.springblade.core.tool.utils.Func;
import org.springframework.stereotype.Component; //设置初始值:同意、驳回计数初始化
@Component("initAgreeAndRejectExecutionListener")
public class InitAgreeAndRejectExecutionListener implements ExecutionListener { //页面注入同意计数变量名称
private FixedValue agreeCountText;
//页面注入驳回计数变量名称
private FixedValue rejectCountText; @Override
public void notify(DelegateExecution delegateExecution) {
delegateExecution.setVariable(Func.toStr(agreeCountText.getExpressionText(),"agreeCount"),0);
delegateExecution.setVariable(Func.toStr(rejectCountText.getExpressionText(),"rejectCount"),0);
}
}
flowable中传入审批人是list的更多相关文章
- react 不能往组件中传入属性的值为 undefined
在使用 andt design 的时候遇到个需求,需要清除 Select 组件选中后的值,让它变成什么都没选中,显示 placeholder 刚开始以为设置为 null 即可,结果发现设置为 null ...
- 如何向GLSL中传入多个纹理
http://blog.csdn.net/huawenguang/article/details/41245871 如何向GLSL中传入多个纹理 这几天在研究如何实现用GLSL对多个纹理进行融合处理, ...
- Java中传入一个时间范围,取出该时间范围内所有日期的集合
直接上代码: import java.time.LocalDate; import java.time.LocalDateTime; import java.time.LocalTime; impor ...
- H5_0010:JS动态创建CSS,并向CSS中传入参数值
1,在html中定义style 2,js中创建css,并添加进入head标签style中 !function(e, t, i) { n.classList && n.classList ...
- mapper.xml文件中传入list参数报错 ‘ ’附近有语法错误
mapper.xml文件中传入list参数,使用foreach循环遍历值,但是在遍历的过程中出错了,具体代码如下所示 mapper.xml <select id="selectByCo ...
- Flowable中的Service
前言 在学习博客[(https://blog.csdn.net/puhaiyang/article/details/79845248)]时,注意到Flowable中的各种Service(如下),进而在 ...
- 向shell脚本中传入参数
写一个 程序名为 test.sh 可带参数为 start 和 stop 执行 test.sh start执行 start 内容的代码 执行 test.sh stop 执行 stop 内 ...
- asp.net mvc 强类型视图中传入List 数据到控制器
问题来源: 在和一位技术老师聊天时,老师问我一个mvc 表单提交的问题,问道:怎样在表单提交的时候,将 带有 List 属性的对象传入控制器? 这时,我有点呆了,以前一直都好像是 单一属性的表单提交, ...
- curl javaSSm框架中传入json数组的格式方法
curl与java结合传入get.post,head请求, 比如: curl的地址: curl -l 127.0.0.1:8080/spacobj/core/do?acid=100 -H " ...
随机推荐
- vscode 中 eslint prettier 和 eslint -loader 配置关系
前置 本文将探究 vscode prettier 插件 和 eslint 插件在 vscode 中的配置以及这两者对应的在项目中的配置文件的关系,最后提及 vscode eslint 插件配置与 es ...
- partial conv
Image Inpainting for Irregular Holes Using Partial Convolutions pytorch代码 论文贡献: 提出了部分卷积(partial conv ...
- 实用主义当道——GitHub 热点速览 Vol.48
作者:HelloGitHub-小鱼干 当你看到实用为本周的关键词时,就应该知道本周的 GitHub 热点霸榜的基本为高星老项目,例如:知名的性能测试工具 k6,让你能在预生产环境和 QA 环境中以高负 ...
- 一个神奇的bug:OOM?优雅终止线程?系统内存占用较高?
摘要:该项目是DAYU平台的数据开发(DLF),数据开发中一个重要的功能就是ETL(数据清洗).ETL由源端到目的端,中间的业务逻辑一般由用户自己编写的SQL模板实现,velocity是其中涉及的一种 ...
- Nginx配置https以及配置说明
示例 worker_processes 1; events { worker_connections 1024; } http { #均衡负载 upstream demo{ server localh ...
- day4(cookie与session的原理及区别)
1.COOKIE使用和优缺点 1.1 cookie原理:用户名+密码 cookie是保存在用户浏览器端,用户名和密码等明文信息 1.2session使用原理 session是存储在服务器端的一段字符串 ...
- 第9章 Python文件操作目录
第9章 Python文件操作 第9.1节 Python的文件打开函数open简介 第9.2节 Python的文件打开函数open详解 第9.3节 Python的文件行读取:readline 第9.4节 ...
- flask加载配置文件的三种方法
1.第一种方法也是我们最长用到的,包括我们项目中也是采用第一种的方法,加载配置文件 配置信息全部写在config.py里面,在主app.py的文件中写入 import config app.confi ...
- tesseract-ocr 图片文字识别
本篇记录下python识别图片中的文字 所需的安装配置: 安装库: pip install pytesseract pip install PILLOW 安装 Tesseract-OCR软件: ...
- Echarts的食用方式
写在前面: 最近项目中用到了Echarts做趋势图,博主通过万能的度娘研究了一下.Echarts字段的使用基本都写在代码注释里了,这是博主的第一篇博客,如果哪里写的不好望大家见谅,最后希望本篇博客对大 ...