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 " ...
随机推荐
- Oracle11gR2 sqlplus中可以执行上键查询backspace删除
1.1 sqlplus中可以执行上键查询backspace删除 1.1.1 上键查询 方法1: 安装源-导入key-安装rpm包-进入配置文件修改参数 rpm -ivh http://download ...
- Generalizing from a Few Examples: A Survey on Few-Shot Learning 小样本学习最新综述 | 三大数据增强方法
目录 原文链接:小样本学习与智能前沿 01 Transforming Samples from Dtrain 02 Transforming Samples from a Weakly Labeled ...
- ActiveMQ Cannot send, channel has already failed: tcp:127.0.0.1:8161
仅针对如下错误内容: Cannot send, channel has already failed: tcp://127.0.0.1:8161 一种尝试解决,修改连接端口为 61616: tcp:/ ...
- 排序--ShellSort 希尔排序
希尔排序 no 实现 希尔排序其实就是插入排序.只不过希尔排序在比较的元素的间隔不是1. 我们知道插入排序 都是 一个一个和之前的元素比较.发现比之前元素小就交换位置.但是希尔排序可能是和前第n个元素 ...
- 02day
1.python注释(不执行) #:单行注释 ''' '''或者""" """:多行注释 2.python2中文解决方法 #coding=u ...
- activiti笔记
activiti笔记 核心api api介绍 1.ProcessEngine 说明: 1) 在Activiti中最核心的类,其他的类都是由他而来. 2) 产生方式: ProcessEngine pro ...
- moviepy音视频开发:audio_normalize调整剪辑音量大小到正常
☞ ░ 前往老猿Python博文目录 ░ 概述 audio_normalize函数用于将一个剪辑的音量大小调整到正常,调整的思路就是将剪辑中音频帧数据的最大值取出来,当其值小于1时,表示剪辑的音量偏小 ...
- PyQt(Python+Qt)学习随笔:toolButton的toolButtonStyle属性
toolButtonStyle属性用于确认toolButton按钮显示文字.图标的方式,其类型为枚举类型 Qt.ToolButtonStyle,有如下值: ToolButtonIconOnly(值为0 ...
- flask对数据库的外键 主键
近期一直在学flask框架,后悔当初没有好好学习数据库.一个外键的知识,真的是太....蓝瘦香菇 创建数据库 class Users(db.Model): __tablename__ = 'users ...
- pandas 移动列的方法
import pandas as pd df = pd.DataFrame(np.random.randn(3,4),columns=['a','b','c','d']) k = df.pop(&qu ...