首页
Web开发
Windows程序
编程语言
数据库
移动开发
系统相关
微信
其他好文
会员
首页
>
编程语言
> 详细
activiti自己定义流程之Spring整合activiti-modeler实例(七):任务列表展示
时间:
2017-08-05 19:52:06
阅读:
288
评论:
0
收藏:
0
[点我收藏+]
标签:
pac
data-
fork
获取
display
eve
16px
https
src
1.通过上一节的操作,能够知道流程启动以后会同一时候生成一个流程实例和用户任务。这个用户任务保存在act_ru_task和act_hi_task表中,从表明能够看出ru是runtime,hi是history。可是须要注意的是,和操作流程使用的service不同。操作正在发生任务不是使用runtimeService,而是专门的taskService。
2.后台业务代码,
(1)自己定义的任务实体类
[java]
view plain
copy
package
model;
import
java.util.Date;
public
class
TaskModel {
private
String id;
private
String name;
private
String processInstanceId;
private
String assignee;
private
Date createTime;
private
String nextPerson;
private
String cause;
private
String content;
private
String taskType;
private
String processKey;
private
String processDefId;
public
String getTaskType() {
return
taskType;
}
public
void
setTaskType(String taskType) {
this
.taskType = taskType;
}
public
String getId() {
return
id;
}
public
void
setId(String id) {
this
.id = id;
}
public
String getName() {
return
name;
}
public
void
setName(String name) {
this
.name = name;
}
public
String getProcessInstanceId() {
return
processInstanceId;
}
public
void
setProcessInstanceId(String processInstanceId) {
this
.processInstanceId = processInstanceId;
}
public
String getAssignee() {
return
assignee;
}
public
void
setAssignee(String assignee) {
this
.assignee = assignee;
}
public
Date getCreateTime() {
return
createTime;
}
public
void
setCreateTime(Date createTime) {
this
.createTime = createTime;
}
public
String getNextPerson() {
return
nextPerson;
}
public
void
setNextPerson(String nextPerson) {
this
.nextPerson = nextPerson;
}
public
String getCause() {
return
cause;
}
public
void
setCause(String cause) {
this
.cause = cause;
}
public
String getContent() {
return
content;
}
public
void
setContent(String content) {
this
.content = content;
}
public
String getProcessKey() {
return
processKey;
}
public
void
setProcessKey(String processKey) {
this
.processKey = processKey;
}
public
String getProcessDefId() {
return
processDefId;
}
public
void
setProcessDefId(String processDefId) {
this
.processDefId = processDefId;
}
@Override
public
String toString() {
return
"TaskModel [id="
+ id +
", name="
+ name
+
", processInstanceId="
+ processInstanceId +
", assignee="
+ assignee +
", createTime="
+ createTime +
", nextPerson="
+ nextPerson +
", cause="
+ cause +
", content="
+ content
+
", taskType="
+ taskType +
", processKey="
+ processKey
+
", processDefId="
+ processDefId +
"]"
;
}
}
(2)业务逻辑:查询任务使用taskService调用相关的方法来完毕,能够依据特定的条件,也能够不加条件查询全部。能够返回task为元素的list。也能够返回单独的task对象,可是须要注意的是,假设要返回单独的task对象。则必须确定返回值是唯一的对象,否则就会抛出异常。下边的样例中。我是依据当前登陆的username来查询出相应的全部task:
[java]
view plain
copy
/**
* @throws XMLStreamException
* 查询个人任务
*
* @author:tuzongxun
* @Title: findTask
* @param @return
* @return Object
* @date Mar 17, 2016 2:44:11 PM
* @throws
*/
@RequestMapping
(value =
"/findTask.do"
, method = RequestMethod.POST, produces =
"application/json;charset=utf-8"
)
@ResponseBody
public
Object findTask(HttpServletRequest req)
throws
XMLStreamException {
Map<String, Object> map =
new
HashMap<String, Object>();
boolean
isLogin =
this
.isLogin(req);
if
(isLogin) {
List<TaskModel> taskList =
new
ArrayList<TaskModel>();
HttpSession session = req.getSession();
String assginee = (String) session.getAttribute(
"userName"
);
List<Task> taskList1 = taskService.createTaskQuery()
.taskAssignee(assginee).list();
if
(taskList1 !=
null
&& taskList1.size() >
0
) {
for
(Task task : taskList1) {
TaskModel taskModel =
new
TaskModel();
taskModel.setAssignee(task.getAssignee());
taskModel.setCreateTime(task.getCreateTime());
taskModel.setId(task.getId());
taskModel.setName(task.getName());
taskModel.setProcessInstanceId(task.getProcessInstanceId());
taskModel.setProcessDefId(task.getProcessDefinitionId());
// 获取流程变量
Map<String, Object> variables = runtimeService
.getVariables(task.getProcessInstanceId());
Set<String> keysSet = variables.keySet();
Iterator<String> keySet = keysSet.iterator();
while
(keySet.hasNext()) {
String key = keySet.next();
if
(key.endsWith(
"cause"
)) {
taskModel.setCause((String) variables.get(
"cause"
));
}
else
if
(key.endsWith(
"content"
)) {
taskModel.setContent((String) variables
.get(
"content"
));
}
else
if
(key.endsWith(
"taskType"
)) {
taskModel.setTaskType((String) variables
.get(
"taskType"
));
}
else
if
(!assginee.equals(variables.get(key))) {
// 想办法查询是否还有下一个任务节点
Iterator<FlowElement> 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
(assginee.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);
taskModel.setNextPerson(ToolUtils
.isEmpty(assignee23));
}
}
}
}
// //////////
}
}
taskList.add(taskModel);
}
}
map.put(
"isLogin"
,
"yes"
);
map.put(
"userName"
,
(String) req.getSession().getAttribute(
"userName"
));
map.put(
"result"
,
"success"
);
map.put(
"data"
, taskList);
}
else
{
map.put(
"isLogin"
,
"no"
);
}
return
map;
}
3.angular js前台代码(前台仅仅是做简单的展示,不多讲):
(1)app.js中配置路由:
[javascript]
view plain
copy
$stateProvider
.state(
‘taskList‘
, {
url:
"/taskList"
,
views: {
‘view‘
: {
templateUrl:
‘activi_views/taskList.html‘
,
controller:
‘taskCtr‘
}
}
});
(2)逻辑相关代码:
[javascript]
view plain
copy
angular.module(
‘activitiApp‘
)
.controller(
‘taskCtr‘
, [
‘$rootScope‘
,
‘$scope‘
,
‘$http‘
,
‘$location‘
,
‘$state‘
,
function
($rootScope,$scope,$http,$location,$state){
$scope.init=
function
(){
$http.post(
"./findTask.do"
).success(
function
(result) {
if
(result.isLogin===
"yes"
){
console.log(result.data);
$rootScope.userName=result.userName;
$scope.taskList=result.data;
}
else
{
$location.path(
"/login"
);
}
});
}
$scope.completeTaskTo=
function
(task){
console.log(task);
$rootScope.task=task;
//$location.path("/completeTaskTo");
$location.path(
"/completeTaskTo1"
);
}
}])
4.相应的填写相关信息的页面:
[html]
view plain
copy
<
div
id
=
"logdiv1"
ng-init
=
"init();"
>
<
p
style
=
"font-size:22px;margin-top:10px"
>
当前任务列表
</
p
>
<
center
>
<
table
border
=
"1px"
style
=
"width:87%;font-size:14px;text-align:center;margin-top:1px;margin-left:2px;position:relative;float:left;"
cellSpacing
=
"0px"
cellPadding
=
"0px"
>
<
tr
style
=
"background-color:#ccc"
>
<
td
>
类型
</
td
>
<
td
>
ID
</
td
>
<
td
>
NAME
</
td
>
<
td
>
ProcessIntanceId
</
td
>
<
td
>
ProcessDefId
</
td
>
<
td
>
创建时间
</
td
>
<
td
>
申请人
</
td
>
<
td
>
受理人
</
td
>
<
td
>
申请原因
</
td
>
<
td
>
申请内容
activiti自己定义流程之Spring整合activiti-modeler实例(七):任务列表展示
标签:
pac
data-
fork
获取
display
eve
16px
https
src
原文地址:http://www.cnblogs.com/yxysuanfa/p/7291038.html
踩
(
0
)
赞
(
0
)
举报
评论
一句话评论(
0
)
登录后才能评论!
分享档案
更多>
2021年07月29日 (22)
2021年07月28日 (40)
2021年07月27日 (32)
2021年07月26日 (79)
2021年07月23日 (29)
2021年07月22日 (30)
2021年07月21日 (42)
2021年07月20日 (16)
2021年07月19日 (90)
2021年07月16日 (35)
周排行
更多
Spring Cloud 从入门到精通(一)Nacos 服务中心初探
2021-07-29
基础的排序算法
2021-07-29
SpringBoot|常用配置介绍
2021-07-29
关于 .NET 与 JAVA 在 JIT 编译上的一些差异
2021-07-29
C语言常用函数-toupper()将字符转换为大写英文字母函数
2021-07-29
《手把手教你》系列技巧篇(十)-java+ selenium自动化测试-元素定位大法之By class name(详细教程)
2021-07-28
4-1 YAML配置文件 注入 JavaBean中
2021-07-28
【python】 用来将对象持久化的 pickle 模块
2021-07-28
马拉车算法
2021-07-28
用Python进行冒泡排序
2021-07-28
友情链接
兰亭集智
国之画
百度统计
站长统计
阿里云
chrome插件
新版天听网
关于我们
-
联系我们
-
留言反馈
© 2014
mamicode.com
版权所有 联系我们:gaon5@hotmail.com
迷上了代码!