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的更多相关文章

  1. react 不能往组件中传入属性的值为 undefined

    在使用 andt design 的时候遇到个需求,需要清除 Select 组件选中后的值,让它变成什么都没选中,显示 placeholder 刚开始以为设置为 null 即可,结果发现设置为 null ...

  2. 如何向GLSL中传入多个纹理

    http://blog.csdn.net/huawenguang/article/details/41245871 如何向GLSL中传入多个纹理 这几天在研究如何实现用GLSL对多个纹理进行融合处理, ...

  3. Java中传入一个时间范围,取出该时间范围内所有日期的集合

    直接上代码: import java.time.LocalDate; import java.time.LocalDateTime; import java.time.LocalTime; impor ...

  4. H5_0010:JS动态创建CSS,并向CSS中传入参数值

    1,在html中定义style 2,js中创建css,并添加进入head标签style中 !function(e, t, i) { n.classList && n.classList ...

  5. mapper.xml文件中传入list参数报错 ‘ ’附近有语法错误

    mapper.xml文件中传入list参数,使用foreach循环遍历值,但是在遍历的过程中出错了,具体代码如下所示 mapper.xml <select id="selectByCo ...

  6. Flowable中的Service

    前言 在学习博客[(https://blog.csdn.net/puhaiyang/article/details/79845248)]时,注意到Flowable中的各种Service(如下),进而在 ...

  7. 向shell脚本中传入参数

    写一个 程序名为    test.sh    可带参数为 start 和 stop 执行  test.sh start执行  start 内容的代码 执行 test.sh stop 执行 stop 内 ...

  8. asp.net mvc 强类型视图中传入List 数据到控制器

    问题来源: 在和一位技术老师聊天时,老师问我一个mvc 表单提交的问题,问道:怎样在表单提交的时候,将 带有 List 属性的对象传入控制器? 这时,我有点呆了,以前一直都好像是 单一属性的表单提交, ...

  9. curl javaSSm框架中传入json数组的格式方法

    curl与java结合传入get.post,head请求, 比如: curl的地址: curl -l 127.0.0.1:8080/spacobj/core/do?acid=100 -H " ...

随机推荐

  1. ResHacker 用命令行方式修改 windows PE文件版本号

    由于工作需要在詹金斯(genkins)集成环境打包,打包避免不了需要修改版本号,写入版本号最简单的方式通过修改windows rc文件 这就意味着,每次构建新版本前需要修改一次源文件 这个在用詹金斯集 ...

  2. 喝完可乐桶后程序员回归本源,开源Spring基础内容

    周六了,又是摸鱼的一天,今天还有点不在状态,脑瓜子迷迷糊糊的,昨晚出去喝可乐桶喝的脑子到现在都不是很正常(奉劝各位可以自己小酌:450ml威士忌+1L多一点可乐刚刚好,可能是我酒量不好),正好没啥事就 ...

  3. 第14.9节 Python中使用urllib.request+BeautifulSoup获取url访问的基本信息

    利用urllib.request读取url文档的内容并使用BeautifulSoup解析后,可以通过一些基本的BeautifulSoup对象输出html文档的基本信息.以博文<第14.6节 使用 ...

  4. 【Vue】 axios同步执行多个请求

    问题 项目中遇到一个需求,在填写商品的时候,选择商品分类后,加载出商品分类的扩展属性. 这个扩展属性有可能是自定义的数据字典里的单选/多远. 要用第一个axios查询扩展属性,第二个axios 从第一 ...

  5. 关于我 About Me

    重庆某大学计算机专业大三学渣 CTF酱油选手 web安全菜鸡 SRC低危小子 精通多门语言 hello world 输出 和 windows linux单词拼写 扣扣:MjU4NTYxNDQ2NA== ...

  6. Java面试专题-多线程(3)-原子操作

  7. 第 4 篇 Scrum 冲刺博客

    每天举行会议 会议照片: 昨天已完成的工作与今天计划完成的工作及工作中遇到的困难: 成员姓名 昨天完成工作 今天计划完成的工作 工作中遇到的困难 蔡双浩 实现收藏夹功能 实现重设计的个人界面功能 无 ...

  8. 【NOI2018】你的名字(SAM & 线段树合并)

    Description Hint Solution 不妨先讨论一下无区间限制的做法. 首先"子串"可以理解为"前缀的后缀",因此我们定义一个 \(\lim(i) ...

  9. hadoop技术产生

    一.为什么有大数据 我的理解是: 1)数据量达到了传统数据库的瓶颈 2)数据量的激增 3)硬件成本的降低 [ 技术水平的上升 ] 4)想通过大量的数据发现潜在的商业价值 二.什么是大数据 大数据指的是 ...

  10. Android全面解析之Context机制

    前言 很高兴遇见你~ 欢迎阅读我的文章. 在文章Android全面解析之由浅及深Handler消息机制中讨论到,Handler可以: 避免我们自己去手动写 死循环和输入阻塞 来不断获取用户的输入以及避 ...