【整合篇】Activiti业务与流程整合之查询(三)

来源:互联网 发布:便签数据损坏 编辑:程序博客网 时间:2024/06/05 17:57

继前两篇博客:应用第三种方式

 

实体中不需要引入任何与工作流相关的任何属性,单纯的做好自己即可!例如如下申请实体(Leave):

[java] view plaincopyprint?在CODE上查看代码片派生到我的代码片
  1. package com.tgb.itoo.basic.entity;  
  2.   
  3. import java.util.Date;  
  4. import java.util.HashSet;  
  5. import java.util.Map;  
  6. import java.util.Set;  
  7.   
  8. import javax.persistence.CascadeType;  
  9. import javax.persistence.Column;  
  10. import javax.persistence.Entity;  
  11. import javax.persistence.FetchType;  
  12. import javax.persistence.JoinColumn;  
  13. import javax.persistence.ManyToOne;  
  14. import javax.persistence.OneToMany;  
  15. import javax.persistence.Table;  
  16. import javax.persistence.Temporal;  
  17. import javax.persistence.TemporalType;  
  18. import javax.persistence.Transient;  
  19.   
  20. import org.activiti.engine.history.HistoricProcessInstance;  
  21. import org.activiti.engine.repository.ProcessDefinition;  
  22. import org.activiti.engine.runtime.ProcessInstance;  
  23. import org.activiti.engine.task.Task;  
  24. import org.codehaus.jackson.annotate.JsonIgnore;  
  25. import org.springframework.format.annotation.DateTimeFormat;  
  26.   
  27. /** 
  28.  * Entity: Leave 
  29.  * 
  30.  * @author hejingyuan IdEntity implements Serializable 
  31.  */  
  32. @Entity  
  33. @Table(name = "OA_LEAVE")  
  34. public class Leave  extends IdEntity {   
  35.       
  36.     /** 
  37.      *  
  38.      */  
  39.     private static final long serialVersionUID = 1L;  
  40.     private String processInstanceId;  
  41.     private String userId;  
  42.     private String testId;  
  43.     private String oldCourse;  
  44.     private String applyCourse;  
  45.     @Column  
  46.     public String getApplyCourse() {  
  47.         return applyCourse;  
  48.     }  
  49.   
  50.     public void setApplyCourse(String applyCourse) {  
  51.         this.applyCourse = applyCourse;  
  52.     }  
  53.   
  54.     @Column  
  55.     public String getOldCourse() {  
  56.         return oldCourse;  
  57.     }  
  58.   
  59.     public void setOldCourse(String oldCourse) {  
  60.         this.oldCourse = oldCourse;  
  61.     }  
  62.     @Column  
  63.     public String getNewCourse() {  
  64.         return newCourse;  
  65.     }  
  66.   
  67.     public void setNewCourse(String newCourse) {  
  68.         this.newCourse = newCourse;  
  69.     }  
  70.   
  71.     private String newCourse;  
  72.      
  73.     @Column  
  74.     public String getTestId() {  
  75.         return testId;  
  76.     }  
  77.   
  78.     public void setTestId(String testId) {  
  79.         this.testId = testId;  
  80.     }  
  81.   
  82.    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm")  
  83.     private Date startTime;  
  84.   
  85.     @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm")  
  86.     private Date endTime;  
  87.   
  88.     private Date applyTime;  
  89.     private String leaveType;  
  90.     private String reason;  
  91.   
  92.     //-- 临时属性 --//  
  93.   
  94.     private Map<String, Object> variables;  
  95.       
  96.     @Column  
  97.     public String getProcessInstanceId() {  
  98.         return processInstanceId;  
  99.     }  
  100.   
  101.     public void setProcessInstanceId(String processInstanceId) {  
  102.         this.processInstanceId = processInstanceId;  
  103.     }  
  104.   
  105.     @Column  
  106.     public String getUserId() {  
  107.         return userId;  
  108.     }  
  109.   
  110.     public void setUserId(String userId) {  
  111.         this.userId = userId;  
  112.     }  
  113.   
  114.     @Temporal(TemporalType.TIMESTAMP)  
  115.     @Column(name = "START_TIME")  
  116.     public Date getStartTime() {  
  117.         return startTime;  
  118.     }  
  119.   
  120.     public void setStartTime(Date startTime) {  
  121.         this.startTime = startTime;  
  122.     }  
  123.   
  124.     @Temporal(TemporalType.TIMESTAMP)  
  125.     @Column(name = "END_TIME")  
  126.     public Date getEndTime() {  
  127.         return endTime;  
  128.     }  
  129.   
  130.     public void setEndTime(Date endTime) {  
  131.         this.endTime = endTime;  
  132.     }  
  133.   
  134.     @Column  
  135.     @Temporal(TemporalType.TIMESTAMP)  
  136.     public Date getApplyTime() {  
  137.         return applyTime;  
  138.     }  
  139.   
  140.     public void setApplyTime(Date applyTime) {  
  141.         this.applyTime = applyTime;  
  142.     }  
  143.   
  144.     @Column  
  145.     public String getLeaveType() {  
  146.         return leaveType;  
  147.     }  
  148.   
  149.     public void setLeaveType(String leaveType) {  
  150.         this.leaveType = leaveType;  
  151.     }  
  152.   
  153.     @Column  
  154.     public String getReason() {  
  155.         return reason;  
  156.     }  
  157.   
  158.     public void setReason(String reason) {  
  159.         this.reason = reason;  
  160.     }  
  161.      
  162.     
  163.     @Transient  
  164.     public Map<String, Object> getVariables() {  
  165.         return variables;  
  166.     }  
  167.   
  168.     public void setVariables(Map<String, Object> variables) {  
  169.         this.variables = variables;  
  170.     }  
  171.       
  172. }  

那么查询时要如何与工作流进行整合?


我们来看待办任务结点:


[java] view plaincopyprint?在CODE上查看代码片派生到我的代码片
  1. /** 
  2.     * 任务列表ERROR [stderr] (http-localhost/127.0.0.1:8080-3) ScriptEngineManager providers.next(): javax.script.ScriptEngineFactory: Provider com.sun.script.javascript.RhinoScriptEngineFactory not found 
  3.     * 
  4.     * @param leave 
  5.     */  
  6.    @RequestMapping(value = "list/task")  
  7.    public ModelAndView taskList(HttpSession session, HttpServletRequest request) {  
  8.     List<Map<String, Object>> results = new ArrayList<Map<String, Object>>();  
  9.     String userId = UserUtil.getUserFromSession(session).getId();  
  10.     results=abstractTaskList(userId);         
  11.     return new ModelAndView("/oa/leave/taskList","results",results);  
  12.                                        
  13.    }  
  14.      
  15.   
  16. /** 
  17.     * 抽象出来的查看任务列表,与基本业务无关 
  18.     * 
  19.     * @param userId 用户id 
  20.     * @return 
  21.     */  
  22. public List<Map<String, Object>> abstractTaskList(String userId){  
  23.     List<Leave> results = new ArrayList<Leave>();  
  24.      // 根据当前人的ID查询  
  25.      TaskQuery taskQuery = taskService.createTaskQuery().taskCandidateOrAssigned(userId);          
  26.      List<Task> tasks = taskQuery.list();       
  27.      int i=0;        
  28.        
  29.      List<Map<String, Object>> mapList = new ArrayList<Map<String, Object>>();  
  30.      // 根据流程的业务ID查询实体并关联  
  31.      for (Task task : tasks) {  
  32.          String processInstanceId = task.getProcessInstanceId();  
  33.          ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceId(processInstanceId).active().singleResult();  
  34.          String businessKey = processInstance.getBusinessKey();  
  35.          if (businessKey == null) {  
  36.              continue;  
  37.          }   
  38.            
  39.          Map<String, Object> map = new HashMap<String, Object>();  
  40.            
  41.          Leave leave = leaveBean.findEntityById(businessKey);  
  42.            
  43.                                       
  44.      map.put("leave", leave);//存入“申请信息”  
  45.      map.put("task", task);  
  46.      map.put("processDefinition", getProcessDefinition(processInstance.getProcessDefinitionId()));  
  47.      map.put("processInstance", processInstance);//存入“流程实例”  
  48.      mapList.add(map);  
  49.          /*Leave leave=updateEntity(processInstance,task,businessKey); 
  50.          results.add(leave); */  
  51.          i=i+1;  
  52.      }  
  53.     return mapList;  
  54. }  

此时我们采用的方式是利用businessKey,并不使用流程变量中存放的业务数据,而是直接去业务表中进行查询,避免了不同步的情况,而且返回值采用map的形式,并不需要业务实体去添加额外的属性,离我们所说的AOP更近了一步。

以上的这些方式也都是在实践中的积累,做个总结记录一下!



0 0
原创粉丝点击