用戶上傳流程模板---》WorkFlow -----》流程模板部署到數據庫----》deployProcess(byte[] processFile,byte[] processImg)----》流程得有公文,審批信息---》Document ,ApproveInfo ---》創建流程實例---》addProcessInstance(String wf_name,int documentId)---》公文綁定流程---》addDocForProcess(Document doc,WorkFlow wf)
- /**
- * 流程
- */
- public class WorkFlow {
- private int wf_id;
- private String wf_name;
- private byte[] processFile;
- private byte[] processImg;
- private int flag;
- }
- public void deployProcess(byte[] processFile,byte[] processImg) {
- //將文件部署到數據庫中
- ProcessDefinition pd = ProcessDefinition.parseXmlInputStream(new ByteArrayInputStream(processFile));
- getContext().deployProcessDefinition(pd);
- //把數據存儲在對應的tb_workFlow中
- //去到對應的WorkFlow (根據名稱取出對象)
- WorkFlow wf = wsf.findByKey(WorkFlow.class, "from WorkFlow wf where wf.wf_name=?",new Object[]{pd.getName()});
- if(wf==null) {
- wf = new WorkFlow();
- wf.setProcessFile(processFile);
- wf.setProcessImg(processImg);
- wf.setWf_name(pd.getName());
- wf.setFlag(1);
- save(wf);
- return;
- }
- wf.setProcessFile(processFile);
- wf.setProcessImg(processImg);
- wf.setWf_name(pd.getName());
- update(wf);
- }
- /**
- * 公文
- */
- public class Document {
- /** 公文id**/
- private int dom_id;
- /** 標題**/
- private String doc_title;
- /** 描述**/
- private String doc_desc;
- /** 附件**/
- private byte[] content;
- /** 創建者**/
- private User creator;
- /** 創建時間**/
- private Date createTime;
- /** 對應流程 多對一多個公文對應一個流程**/
- private WorkFlow workFlow;
- /** 對應流程實例**/
- private long processInstanceId;
- /**狀態 **/
- private String status;
- /** 附件名稱 **/
- private String loadName;
- /** 是否顯示**/
- private int flag;
- /** 狀態 **/
- public final static String STATUS_NEW = "新建";
- public final static String STATUS_ING = "審覈中";
- public final static String STATUS_END = "結束";
- }
- /**
- * 審批信息
- */
- public class ApproveInfo {
- /** id **/
- private int ao_id;
- /** 審批意見 **/
- private String comment;
- /** 時間 **/
- private Date approveTime;
- /** 審批公文 **/
- private Document document;
- /** 審批者 **/
- private User approver;
- }
- //得到流程實例的ID (得到流程的實例 且返回實例的ID 將公文的ID 通過變量設置在上下文中)
- public long addProcessInstance(String wf_name,int documentId) {
- JbpmContext context = getContext();
- //通過流程名稱得到流程定義
- ProcessDefinition pd = context.getGraphSessi().findLatestProcessDefinition(wf_name);
- //通過流程定義取得流程實例
- ProcessInstance pe = new ProcessInstance(pd);
- //將公文的ID 通過變量設置在上下文中
- pe.getContextInstance().createVariable("document", documentId);
- //存儲流程實例到數據庫中
- context.save(pe);
- return pe.getId();
- }
- //公文綁定流程
- public void addDocForProcess(Document doc,WorkFlow wf) {
- doc.setWorkFlow(wf);
- save(doc);
- long processInstanceId = addProcessInstance(wf.getWf_name(),doc.getDom_id());
- doc.setProcessInstanceId(processInstanceId);
- update(doc);
- }