文档章节

Activiti工作流5.22版本撤回

工作流流流流流
 工作流流流流流
发布于 02/13 09:30
字数 502
阅读 12
收藏 0
//instId 为流程表单id  business_key
//hisTaskId  已办任务中的任务历史id(该id为最后一个已办节点,也可以通过 instId来获取list遍历)
Task task = taskService.createTaskQuery().processInstanceBusinessKey(instId).singleResult();
if(task==null) {
    throw new TransException("流程未启动或已执行完成,无法撤回");
}
//获取当前用户id
String userId = SessionUser.getUserId();

//获取已完成的任务历史记录
//		List<HistoricTaskInstance> htiList = historyService.createHistoricTaskInstanceQuery()
//				.processInstanceId(procInstId)
//				.finished()
//				.orderByTaskCreateTime()
//				.desc()
//				.list();
//		//判断上一节点处理人是否为当前用户
//		HistoricTaskInstance hisTask = null;
//		if(htiList != null && htiList.size()>0) {
//			HistoricTaskInstance hisTaskObj = htiList.get(0);
//			if(userId.equals(hisTaskObj.getAssignee())) {
//				hisTask = hisTaskObj;
//			}
//		}

HistoricTaskInstance hisTask = historyService.createHistoricTaskInstanceQuery().taskId(hisTaskId).singleResult();

if(null==hisTask || !userId.equals(hisTask.getAssignee())) {
    throw new TransException("该任务非当前用户提交,无法撤回");
}
//获取上一活动的节点id      
String taskNodeId = hisTask.getTaskDefinitionKey();

ProcessDefinitionImpl processDefinitionImpl = (ProcessDefinitionImpl) repositoryService.getProcessDefinition(hisTask.getProcessDefinitionId());

// 取得上一步活动
ActivityImpl currActivity = processDefinitionImpl.findActivity(taskNodeId);

//获取节点进口
List<PvmTransition> nextTransitionList = currActivity.getIncomingTransitions();
        
// 取得当前待办活动节点
ActivityImpl execActivity = processDefinitionImpl.findActivity(task.getTaskDefinitionKey());

// 清除当前活动的出口
List<PvmTransition> oriPvmTransitionList = new ArrayList<PvmTransition>();
List<PvmTransition> pvmTransitionList = execActivity.getOutgoingTransitions();
for (PvmTransition pvmTransition : pvmTransitionList) {
   oriPvmTransitionList.add(pvmTransition);
}
pvmTransitionList.clear();

//把进口当做出口,重新建立通道
List<TransitionImpl> newTransitions = new ArrayList<TransitionImpl>();
TransitionImpl newTransition = execActivity.createOutgoingTransition();
newTransition.setDestination(currActivity);
newTransitions.add(newTransition);
// 完成任务
List<Task> tasks = taskService.createTaskQuery().processInstanceId(procInstId).list();
for (Task taskObj : tasks) {
    Map<String,Object> currentVariables = new HashMap<String,Object>();
    //此处可以根据也许需求获取上一节点处理人,本人使用的是自己自定义的动态表单
    List<String> userList = new ArrayList<>();
    userList.add("0122");
    currentVariables.put("transactorIdList",userList);
            
    Authentication.setAuthenticatedUserId(userId);
    taskService.addComment(taskObj.getId(), taskObj.getProcessInstanceId(), "撤回");
            
    taskService.complete(taskObj.getId(), currentVariables);
    //删除历史、此处执行这两行代码在ACT_HI_TASKINST表中是看不到撤回记录的,但是在ACT_HI_ACTINST表中能看到全部记录
    //historyService.deleteHistoricTaskInstance(taskObj.getId());
    //historyService.deleteHistoricTaskInstance(hisTask.getId());
}
// 恢复方向
for (TransitionImpl transitionImpl : newTransitions) {
    execActivity.getOutgoingTransitions().remove(transitionImpl);
}
for (PvmTransition pvmTransition : oriPvmTransitionList) {
    pvmTransitionList.add(pvmTransition);
}

//后面需要处理的就是 已办的流程历史回显 和 已办的流程表单回显,可根据自己业务需求来调整。

 

© 著作权归作者所有

共有 人打赏支持
工作流流流流流
粉丝 16
博文 4
码字总数 2271
作品 0
郑州
程序员
私信 提问
我的项目是5.22版本,数据库是6.0版本,这样有什么办法可以连接上数据库吗?

我的项目是activiti-explorer的5.22版本,数据库是6.0版本(必须用6.0数据库),这样有什么办法可以连接上数据库吗? 报的错误是 Could not update Activiti database schema: unknown versi...

SpringDu
2018/05/23
210
0
Activiti5.22:删除工作流引擎自动创建的外键约束

Activiti 工作流引擎自带建库脚本,同时生成了索引、外键等信息。为了降低外键约束对数据库造成的性能影响,我们需要将外键删除,下文描述删除外键的工程。注:在互联网系统设计中尽量保持数...

wc_飞豆
2018/05/11
0
0
疯狂Activiti6.0连载(12)DMN规范概述

本文节选自《疯狂工作流讲义(第2版)》 京东购买地址:https://item.jd.com/12246565.html 疯狂Activiti电子书:https://my.oschina.net/JavaLaw/blog/1570397 工作流Activiti教学视频:htt...

杨大仙的程序空间
2017/10/27
0
0
activiti工作流引擎(一)why activiti

公司早前花了一年,由5人左右规模的团队,弄了一个工作流为基础的平台系统,基于jbpm4实现。 最近我接手了这个项目组,开始在想升级优化的事情,刚开始想着从业务通用化的角度去改造。但看着...

fengwenjie
2014/03/01
0
1
工作流引擎 flowable 5.22.0,完全兼容 Activiti

2016年10月13日,从工作流引擎 Activiti 分支出的新项目 Flowable 发布了首个版本 flowable-5.22.0 ,可无缝替代activiti-5.21.0 。 亮点: 无缝替代 activiti-5.21.0 。除了修改 Maven 的 gr...

viruscamp
2016/10/28
9.5K
8

没有更多内容

加载失败,请刷新页面

加载更多

grafana安装使用及与zabbix集成

grafana简介 Grafana是一个完全开源的度量分析与可视化平台,可对来自各种各种数据源的数据进行查询、分析、可视化处理以及配置告警。 Grafana支持的数据源: 官方:Graphite,InfluxDB,Ope...

阿dai学长
20分钟前
1
0
带你看数据挖掘与机器学习-厦大EDP上课出勤预测

带你看数据挖掘与机器学习-厦大EDP上课出勤预测 标签: 数据挖掘 特征工程 机器学习 出勤预测 write by xmhexi 2019/3/22 内容提要 首先说明本文是一篇科普文章,通过一个实际案例,帮助理解什...

xmhexi
今天
53
0
IOS  学习记录

1.StackView=>IOS 9及以上支持 2.布局方式: AutoLayout / StackView 堆布局 (线性布局) 3.屏幕适配 (资源分辨率、设计分辨率、屏幕分辨率) Size Class技术 可以针对 屏幕的方向进行设置...

萨x姆
今天
4
0
第四次工业革命:自主经济的崛起

https://36kr.com/p/5170370.html

shengjuntu
昨天
3
0
Cloud Native 与12-Factor

12-Factor(twelve-factor),也称为“十二要素”,是一套流行的应用程序开发原则。Cloud Native架构中使用12-Factor作为设计准则。 12-Factor 的目标在于: 使用标准化流程自动配置,从而使...

waylau
昨天
10
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部