用户上传流程模板---》WorkFlow -----》流程模板部署到数据库----》deployProcess(byte[] processFile,byte[] processImg)----》流程得有公文,审批信息---》Document ,ApproveInfo ---》创建流程实例---》addProcessInstance(String wf_name,int documentId)---》公文绑定流程---》addDocForProcess(Document doc,WorkFlow wf)

 

  1. /** 
  2.  * 流程 
  3.  */ 
  4. public class WorkFlow { 
  5.  
  6.     private int wf_id; 
  7.     private String wf_name; 
  8.     private byte[] processFile; 
  9.     private byte[] processImg; 
  10.     private int flag; 
  11.  
  12.  
  13.  
  14.     public void deployProcess(byte[] processFile,byte[] processImg) { 
  15.         //将文件部署到数据库中 
  16.         ProcessDefinition pd = ProcessDefinition.parseXmlInputStream(new ByteArrayInputStream(processFile)); 
  17.         getContext().deployProcessDefinition(pd); 
  18.         //把数据存储在对应的tb_workFlow中 
  19.         //去到对应的WorkFlow (根据名称取出对象) 
  20.         WorkFlow wf = wsf.findByKey(WorkFlow.class"from WorkFlow wf where wf.wf_name=?",new Object[]{pd.getName()}); 
  21.         if(wf==null) { 
  22.             wf = new WorkFlow(); 
  23.             wf.setProcessFile(processFile); 
  24.             wf.setProcessImg(processImg); 
  25.             wf.setWf_name(pd.getName()); 
  26.             wf.setFlag(1); 
  27.             save(wf); 
  28.             return
  29.         }  
  30.         wf.setProcessFile(processFile); 
  31.         wf.setProcessImg(processImg); 
  32.         wf.setWf_name(pd.getName()); 
  33.         update(wf); 
  34.     } 
  35.  
  36.  
  37.  
  38. /** 
  39.  * 公文 
  40.  */ 
  41. public class Document { 
  42.     /** 公文id**/ 
  43.     private int dom_id; 
  44.     /** 标题**/ 
  45.     private String doc_title; 
  46.     /** 描述**/ 
  47.     private String doc_desc; 
  48.     /** 附件**/ 
  49.     private byte[] content; 
  50.     /** 创建者**/ 
  51.     private User creator; 
  52.     /** 创建时间**/ 
  53.     private Date createTime; 
  54.     /** 对应流程 多对一多个公文对应一个流程**/ 
  55.     private WorkFlow workFlow; 
  56.     /** 对应流程实例**/ 
  57.     private long processInstanceId; 
  58.     /**状态 **/ 
  59.     private String status; 
  60.     /** 附件名称 **/ 
  61.     private String loadName; 
  62.     /** 是否显示**/ 
  63.     private int flag; 
  64.  
  65.     /** 状态 **/ 
  66.     public final static String STATUS_NEW = "新建"
  67.     public final static String STATUS_ING = "审核中"
  68.     public final static String STATUS_END = "结束"
  69.  
  70.  
  71. /** 
  72.  * 审批信息 
  73.  */ 
  74. public class ApproveInfo { 
  75.     /** id **/ 
  76.     private int ao_id; 
  77.     /** 审批意见 **/ 
  78.     private String comment; 
  79.     /** 时间 **/ 
  80.     private Date approveTime; 
  81.     /** 审批公文 **/ 
  82.     private Document document; 
  83.     /** 审批者 **/ 
  84.     private User approver; 
  85.  
  86.     //得到流程实例的ID (得到流程的实例 且返回实例的ID 将公文的ID 通过变量设置在上下文中) 
  87.     public long addProcessInstance(String wf_name,int documentId) { 
  88.         JbpmContext context = getContext(); 
  89.         //通过流程名称得到流程定义 
  90.         ProcessDefinition pd = context.getGraphSessi().findLatestProcessDefinition(wf_name); 
  91.         //通过流程定义取得流程实例 
  92.         ProcessInstance pe = new ProcessInstance(pd); 
  93.         //将公文的ID 通过变量设置在上下文中 
  94.         pe.getContextInstance().createVariable("document", documentId); 
  95.         //存储流程实例到数据库中 
  96.         context.save(pe); 
  97.         return pe.getId(); 
  98.          
  99.     } 
  100.     //公文绑定流程 
  101.     public void addDocForProcess(Document doc,WorkFlow wf) { 
  102.       doc.setWorkFlow(wf); 
  103.       save(doc); 
  104.       long processInstanceId = addProcessInstance(wf.getWf_name(),doc.getDom_id()); 
  105.       doc.setProcessInstanceId(processInstanceId); 
  106.       update(doc); 
  107.     }