activiti自定义流程之Spring整合activiti-modeler5.16实例(九):历史任务查询

注:(1)环境搭建:activiti自定义流程之Spring整合activiti-modeler5.16实例(一):环境搭建
        (2)创建流程模型:activiti自定义流程之Spring整合activiti-modeler5.16实例(二):创建流程模型
        (3)流程模型列表展示:activiti自定义流程之Spring整合activiti-modeler5.16实例(三):流程模型列表展示
        (4)部署流程定义:activiti自定义流程之Spring整合activiti-modeler5.16实例(四):部署流程定义

(5)流程定义列表:activiti自定义流程之Spring整合activiti-modeler5.16实例(五):流程定义列表

(6)启动流程:activiti自定义流程之Spring整合activiti-modeler5.16实例(六):启动流程

(7)任务列表展示:activiti自定义流程之Spring整合activiti-modeler5.16实例(七):任务列表展示

(8)完成个人任务:activiti自定义流程之Spring整合activiti-modeler5.16实例(八):完成个人任务

1.所有任务完成,流程也就结束了,查询历史任务或历史流程就要操作act_hi_taskinst表,用的都是historyService来调用相关的方法。
本节示例查询历史任务,历史流程便不再专门示例。

2.后台业务代码,
  (1)自定义的任务实体类

[java] view plain copy

  1. package model;
  2. import <a href="http://lib.csdn.net/base/17" class="replace_word" title="Java EE知识库" target="_blank" style="color:#df3434; font-weight:bold;">java</a>.util.Date;
  3. public class HisTaskModel {
  4. private String id;
  5. private String name;
  6. private String assignee;
  7. private String processInstanceId;
  8. private Date startTime;
  9. private Date endTime;
  10. private String cause;
  11. private String content;
  12. private String taskType;
  13. public String getCause() {
  14. return cause;
  15. }
  16. public void setCause(String cause) {
  17. this.cause = cause;
  18. }
  19. public String getContent() {
  20. return content;
  21. }
  22. public void setContent(String content) {
  23. this.content = content;
  24. }
  25. public String getTaskType() {
  26. return taskType;
  27. }
  28. public void setTaskType(String taskType) {
  29. this.taskType = taskType;
  30. }
  31. public String getId() {
  32. return id;
  33. }
  34. public void setId(String id) {
  35. this.id = id;
  36. }
  37. public String getName() {
  38. return name;
  39. }
  40. public void setName(String name) {
  41. this.name = name;
  42. }
  43. public String getAssignee() {
  44. return assignee;
  45. }
  46. public void setAssignee(String assignee) {
  47. this.assignee = assignee;
  48. }
  49. public String getProcessInstanceId() {
  50. return processInstanceId;
  51. }
  52. public void setProcessInstanceId(String processInstanceId) {
  53. this.processInstanceId = processInstanceId;
  54. }
  55. public Date getStartTime() {
  56. return startTime;
  57. }
  58. public void setStartTime(Date startTime) {
  59. this.startTime = startTime;
  60. }
  61. public Date getEndTime() {
  62. return endTime;
  63. }
  64. public void setEndTime(Date endTime) {
  65. this.endTime = endTime;
  66. }
  67. @Override
  68. public String toString() {
  69. return "HisTaskModel [id=" + id + ", name=" + name + ", assignee="
  70. + assignee + ", processInstanceId=" + processInstanceId
  71. + ", startTime=" + startTime + ", endTime=" + endTime
  72. + ", cause=" + cause + ", content=" + content + ", taskType="
  73. + taskType + "]";
  74. }
  75. }

(2)业务逻辑:
这里需要注意的是,历史表中存在并非是单一类型的数据,就拿历史任务表来说,里边既有已经结束的任务,也有还没有结束的任务。
如果要单独查询结束了的任务,就可以调用finished()方法,查询的就是已经结束的任务。

[java] view plain copy

  1. /**
  2. * 查询我的历史任务
  3. *
  4. * @author:tuzongxun
  5. * @Title: hisTask
  6. * @param @param req
  7. * @param @return
  8. * @return Object
  9. * @date Mar 18, 2016 9:12:07 AM
  10. * @throws
  11. */
  12. @RequestMapping(value = "/hisTask.do", method = RequestMethod.POST, produces = "application/json;charset=utf-8")
  13. @ResponseBody
  14. public Object hisTask(HttpServletRequest req) {
  15. Map<String, Object> map = new HashMap<String, Object>();
  16. boolean isLogin = this.isLogin(req);
  17. if (isLogin) {
  18. HttpSession session = req.getSession();
  19. String assignee = (String) session.getAttribute("userName");
  20. List<HistoricTaskInstance> hisTaskList1 = historyService
  21. .createHistoricTaskInstanceQuery().taskAssignee(assignee)
  22. .finished().list();
  23. List<HisTaskModel> hisTaskList = new ArrayList<HisTaskModel>();
  24. for (HistoricTaskInstance hisTask : hisTaskList1) {
  25. HisTaskModel hisModel = new HisTaskModel();
  26. List<HistoricVariableInstance> hisList = historyService
  27. .createHistoricVariableInstanceQuery()
  28. .processInstanceId(hisTask.getProcessInstanceId())
  29. .list();
  30. for (HistoricVariableInstance hisVariable : hisList) {
  31. String name = hisVariable.getVariableName();
  32. if (name.equals("content")) {
  33. hisModel.setContent((String) hisVariable.getValue());
  34. } else if (name.equals("cause")) {
  35. hisModel.setCause((String) hisVariable.getValue());
  36. } else if (name.equals("taskType")) {
  37. hisModel.setTaskType((String) hisVariable.getValue());
  38. }
  39. }
  40. hisModel.setAssignee(hisTask.getAssignee());
  41. hisModel.setEndTime(hisTask.getEndTime());
  42. hisModel.setId(hisTask.getId());
  43. hisModel.setName(hisTask.getName());
  44. hisModel.setProcessInstanceId(hisTask.getProcessInstanceId());
  45. hisModel.setStartTime(hisTask.getStartTime());
  46. hisTaskList.add(hisModel);
  47. }
  48. map.put("isLogin", "yes");
  49. map.put("userName",
  50. (String) req.getSession().getAttribute("userName"));
  51. map.put("result", "success");
  52. map.put("data", hisTaskList);
  53. } else {
  54. map.put("isLogin", "no");
  55. }
  56. return map;
  57. }

3.angular js前台代码(前台只是做简单的展示,不多讲):
  (1)app.js中配置路由:

[javascript] view plain copy

  1. $stateProvider
  2. .state(‘hisTask‘, {
  3. url: "/hisTask",
  4. views: {
  5. ‘view‘: {
  6. templateUrl: ‘activi_views/hisTask.html‘,
  7. controller: ‘hisTaskCtr‘
  8. }
  9. }
  10. });

(2)逻辑相关代码:

[javascript] view plain copy

  1. angular.module(‘activitiApp‘)
  2. .controller(‘hisTaskCtr‘, [‘$rootScope‘,‘$scope‘,‘$http‘,‘$location‘, function($rootScope,$scope,$http,$location){
  3. $scope.init=function(){
  4. $http.post("./hisTask.do").success(function(result) {
  5. if(result.isLogin==="yes"){
  6. console.log(result.data);
  7. $rootScope.userName=result.userName;
  8. $scope.taskList=result.data;
  9. }else{
  10. $location.path("/login");
  11. }
  12. });
  13. }
  14. }])

4.对应的填写相关信息的页面:

[html] view plain copy

    1. <div id="logdiv1" ng-init="init();">
    2. <p style="font-size:24px;margin-top:10px">历史任务列表</p>
    3. <center>
    4. <table border="1px" style="width:87%;font-size:18px;text-align:center;margin-top:1px;margin-left:2px;position:relative;float:left;" cellSpacing="0px" cellPadding="0px">
    5. <tr style="background-color:#ccc">
    6. <td>类型</td>
    7. <td>ID</td>
    8. <td>NAME</td>
    9. <td>流程实例Id</td>
    10. <td>开始时间</td>
    11. <td>受理人</td>
    12. <td>完成时间</td>
    13. <td>发起原因</td>
    14. <td>内容</td>
    15. </tr>
    16. <tr ng-repeat="task in taskList | orderBy:‘id‘" >
    17. <td>{{task.taskType}}</td>
    18. <td>{{task.id}}</td>
    19. <td>{{task.name}}</td>
    20. <td>{{task.processInstanceId}}</td>
    21. <td>{{task.startTime | date:"yyyy-MM-dd HH:mm:ss"}}</td>
    22. <td>{{task.assignee}}</td>
    23. <td>{{task.endTime | date:"yyyy-MM-dd HH:mm:ss"}}</td>
    24. <td>{{task.cause}}</td>
    25. <td>{{task.content}}</td>
    26. </tr>
    27. </table>
    28. </center>
    29. </div>
时间: 2024-11-05 06:26:20

activiti自定义流程之Spring整合activiti-modeler5.16实例(九):历史任务查询的相关文章

activiti自定义流程之Spring整合activiti-modeler5.16实例(四):部署流程定义

注:(1)环境搭建:activiti自定义流程之Spring整合activiti-modeler5.16实例(一):环境搭建        (2)创建流程模型:activiti自定义流程之Spring整合activiti-modeler5.16实例(二):创建流程模型        (3)流程模型列表展示:activiti自定义流程之Spring整合activiti-modeler5.16实例(三):流程模型列表展示 1.maven导包及spring的一些基本配置与之前的没有什么变化,依旧沿用就

activiti自定义流程之Spring整合activiti-modeler5.16实例(七):任务列表展示

注:(1)环境搭建:activiti自定义流程之Spring整合activiti-modeler5.16实例(一):环境搭建        (2)创建流程模型:activiti自定义流程之Spring整合activiti-modeler5.16实例(二):创建流程模型        (3)流程模型列表展示:activiti自定义流程之Spring整合activiti-modeler5.16实例(三):流程模型列表展示        (4)部署流程定义:activiti自定义流程之Spring整合

activiti自定义流程之Spring整合activiti-modeler5.16实例(六):启动流程

注:(1)环境搭建:activiti自定义流程之Spring整合activiti-modeler5.16实例(一):环境搭建        (2)创建流程模型:activiti自定义流程之Spring整合activiti-modeler5.16实例(二):创建流程模型        (3)流程模型列表展示:activiti自定义流程之Spring整合activiti-modeler5.16实例(三):流程模型列表展示        (4)部署流程定义:activiti自定义流程之Spring整合

activiti自定义流程之Spring整合activiti-modeler5.16实例(二):创建流程模型

注:(1)环境搭建:activiti自定义流程之Spring整合activiti-modeler5.16实例(一):环境搭建 1.maven导包,这里就没有什么多的好说了,直接代码: [html] view plain copy <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11&

activiti自定义流程之Spring整合activiti-modeler5.16实例(八):完成个人任务

注:(1)环境搭建:activiti自定义流程之Spring整合activiti-modeler5.16实例(一):环境搭建        (2)创建流程模型:activiti自定义流程之Spring整合activiti-modeler5.16实例(二):创建流程模型        (3)流程模型列表展示:activiti自定义流程之Spring整合activiti-modeler5.16实例(三):流程模型列表展示        (4)部署流程定义:activiti自定义流程之Spring整合

activiti自定义流程之Spring整合activiti-modeler5.16实例(三):流程模型列表展示

注:(1)环境搭建:activiti自定义流程之Spring整合activiti-modeler5.16实例(一):环境搭建        (2)创建流程模型:activiti自定义流程之Spring整合activiti-modeler5.16实例(二):创建流程模型 1.maven导包及spring的一些基本配置与创建流程模型时候的没有什么变化,依旧沿用就好;前端的首页也不用有太大变化,只需要把之后新创建的js引入进来即可. 2.acitivit流程定义有必要的24张表.  创建模型时相关的有

activiti自定义流程之Spring整合activiti-modeler5.16实例(五):流程定义列表

注:(1)环境搭建:activiti自定义流程之Spring整合activiti-modeler5.16实例(一):环境搭建        (2)创建流程模型:activiti自定义流程之Spring整合activiti-modeler5.16实例(二):创建流程模型        (3)流程模型列表展示:activiti自定义流程之Spring整合activiti-modeler5.16实例(三):流程模型列表展示        (4)部署流程定义:activiti自定义流程之Spring整合

activiti自定义流程之Spring整合activiti-modeler实例(三):流程模型列表展示

1.maven导包及spring的一些基本配置与创建流程模型时候的没有什么变化,依旧沿用就好;前端的首页也不用有太大变化,只需要把之后新创建的js引入进来即可. 2.acitivit流程定义有必要的24张表. 创建模型时相关的有act_re_model和act_ge_bytearray两个. 成功创建模型后可以看到model表中会有一条数据,同时在bytearray表中也会同时生成两条对应的数据.而model表中会存入这两条数据的id,从而产生关联. 因此流程模型列表查询时就需要在这两张表中进行

activiti自定义流程之Spring整合activiti-modeler实例(七):任务列表展示

1.通过上一节的操作,可以知道流程启动以后会同时生成一个流程实例和用户任务,这个用户任务保存在act_ru_task和act_hi_task表中,从表明可以看出ru是runtime,hi是history.但是需要注意的是,和操作流程使用的service不同,操作正在发生任务不是使用runtimeService,而是专门的taskService. 2.后台业务代码, (1)自定义的任务实体类 [java] view plain copy package model; import java.uti