博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
activiti自定义流程之Spring整合activiti-modeler5.16实例(八):完成个人任务
阅读量:5755 次
发布时间:2019-06-18

本文共 4514 字,大约阅读时间需要 15 分钟。

注:(1)环境搭建:

        (2)创建流程模型:

        (3)流程模型列表展示:

        (4)部署流程定义:

        (5)流程定义列表:

        (6)启动流程:

        (7)任务列表展示:

1.完成个人任务依旧是使用taskService操作,调用complete方法,需要传入任务id,同时还可以传入流程变量。
2.后台业务代码,
  (1)自定义的任务实体类(使用之前自定义的taskModel)
  (2)业务逻辑:
完成任务使用taskService调用complete方法来完成,一旦正确调用了这个方法,当前任务就会结束,进入到下一个任务,如果当前任务已经是最后一个任务,则整个流程结束。
对于已经结束的任务,act_ru_task中所存在的那条对应数据会被删除,取而代之的是,对应的act_hi_taskinst中的那条数据会增加结束时间。

上边所说的正确调用是指,如果当前任务的下一个任务设有个人任务变量或者组任务变量,那么提交的时候必须有对应的变量数据,否则会抛出异常,完成任务失败。(但是,如果下一个任务没有设置这些,提交时依旧填了流程变量是不会出错的)

下边的例子中,之所以还查询了流程节点的信息,并做了相关的处理,是为了实现针对任意数量任务的流程都能正常运行,否则不需要这么麻烦。

/**	 * @throws XMLStreamException	 *             完成个人任务	 * 	 * @author:tuzongxun	 * @Title: completeTask	 * @param @return	 * @return Object	 * @date Mar 17, 2016 4:55:31 PM	 * @throws	 */	@RequestMapping(value = "/completeTask.do", method = RequestMethod.POST, produces = "application/json;charset=utf-8")	@ResponseBody	public Object completeTask(@RequestBody TaskModel taskModel,			HttpServletRequest req) throws XMLStreamException {		boolean isLogin = this.isLogin(req);		if (isLogin) {			String taskId = taskModel.getId();			// 1、查task			Task task = taskService.createTaskQuery().taskId(taskId)					.singleResult();			// 2、查variables			Map
variables = runtimeService.getVariables(task .getProcessInstanceId()); Set
keysSet = variables.keySet(); Iterator
keySet = keysSet.iterator(); Map
variables1 = new HashMap
(); String assignee = task.getAssignee(); // 判断之后是否还有任务 // while (keySet.hasNext()) { String key = keySet.next(); if (key.equals("cause") || key.equals("content") || key.equals("taskType")) { continue; } else if (!(assignee.equals(variables.get(key)))) { // 3、查flowElement Iterator
iterator = this.findFlow(task .getProcessDefinitionId()); while (iterator.hasNext()) { FlowElement flowElement = iterator.next(); String classNames = flowElement.getClass() .getSimpleName(); if (classNames.equals("UserTask")) { UserTask userTask = (UserTask) flowElement; String assginee11 = userTask.getAssignee(); String assginee12 = assginee11.substring( assginee11.indexOf("{") + 1, assginee11.indexOf("}")); String assignee13 = (String) variables .get(assginee12); if (assignee.equals(assignee13)) { // 看下下一个节点是什么 iterator.next(); FlowElement flowElement2 = iterator.next(); String classNames1 = flowElement2.getClass() .getSimpleName(); // 设置下一个任务人 if (!(classNames1.equals("EndEvent"))) { UserTask userTask2 = (UserTask) flowElement2; String assginee21 = userTask2.getAssignee(); String assginee22 = assginee21.substring( assginee21.indexOf("{") + 1, assginee21.indexOf("}")); // String assignee23 = (String) variables // .get(assginee22); String assignee23 = taskModel .getNextPerson(); variables1.put(assginee22, assignee23); } } } } } } taskService.complete(taskId, variables1); } return null; }
3.angular js前台代码(前台只是做简单的展示,不多讲):
  (1)app.js中配置路由:
 
$stateProvider     .state('completeTaskTo', {     url: "/completeTaskTo",     views: {        'view': {         templateUrl: 'activi_views/completeTask.html',         controller: 'completeTaskCtr'        }     }    });
  (2)逻辑相关代码:
   
angular.module('activitiApp')  .controller('completeTaskCtr', ['$rootScope','$scope','$http','$location','$state', function($rootScope,$scope,$http,$location,$state){  	$http.post("createFlush.do").success(function(result){		if(result.isLogin==="yes"){			$rootScope.userName=result.userName;			if($rootScope.task==null||$rootScope.task.id==null){				$location.path("/taskList");			}else{				$scope.task=$rootScope.task;			}		}else{			$location.path("/login");		}	});        $scope.completeTask=function(task){        	console.log(task);        	$rootScope.task=task;        	$http.post("./completeTask.do",task).success(function(taskResult){        		$location.path("/taskList");        	});        }        }])
4.对应的填写相关信息的页面:

处理当前任务

类      型:
NAME      :
任  务  ID :
ProcessIntanceId:
ProcessDefId   :
创 建 时 间 :
申  请  人 :
受  理  人 :
申 请 原 因 :
申 请 内 容 :
   

转载地址:http://yknkx.baihongyu.com/

你可能感兴趣的文章
siki学习之观察者模式笔记
查看>>
spring.net 继承
查看>>
ES6:模块简单解释
查看>>
JavaScript indexOf() 方法
查看>>
ZJU PAT 1023
查看>>
WMI远程访问问题解决方法
查看>>
Android开发历程_15(AppWidget的使用)
查看>>
阿花宝宝 Java 笔记 之 初识java
查看>>
Linux下的C编程实战
查看>>
[32期] html中部分代码与英语单词关系
查看>>
PHP安装环境,服务器不支持curl_exec的解决办法
查看>>
jQuery|元素遍历
查看>>
用 ThreadLocal 管理用户session
查看>>
setprecision后是要四舍五入吗?
查看>>
上云就是这么简单——阿里云10分钟快速入门
查看>>
MFC多线程的创建,包括工作线程和用户界面线程
查看>>
我的友情链接
查看>>
FreeNAS8 ISCSI target & initiator for linux/windows
查看>>
PostgreSQL数据库集群初始化
查看>>
++重载
查看>>