1. 程式人生 > >No.3 簡易工作流系統搭建(2) : 整合Activiti + 模型管理功能

No.3 簡易工作流系統搭建(2) : 整合Activiti + 模型管理功能

之前的一篇文章我們整合了系統最簡單的部分,就是使用者管理部分。在這篇文章中,我們將整合activiti,新增使用者管理中的註冊功能,同時增加模型管理功能

一、整合Activiti5.17

1. 修改web.xml

在web.xml相應位置新增spring-activiti.xml檔案配置位置

<param-value>
        classpath*:/applicationContext.xml,
        classpath*:/spring-activiti.xml
</param-value>
2.新增spring-activiti.xml

在resources中新增spring-activiti.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="processEngineConfiguration" class="org.activiti.spring.SpringProcessEngineConfiguration">
        <property name="dataSource" ref="dataSource"/>
        <property name="transactionManager" ref="transactionManager"/>
        <property name="databaseSchemaUpdate" value="true"/>
        <property name="jobExecutorActivate" value="false"/>
        <property name="activityFontName" value="宋體"/>
        <property name="labelFontName" value="宋體"/>
        <property name="history" value="full"/>
    </bean>

    <bean id="objectMapper" class="com.fasterxml.jackson.databind.ObjectMapper"/>

    <bean id="processEngine" class="org.activiti.spring.ProcessEngineFactoryBean">
        <property name="processEngineConfiguration" ref="processEngineConfiguration"/>
    </bean>

    <bean id="repositoryService" factory-bean="processEngine" factory-method="getRepositoryService"/>
    <bean id="formService" factory-bean="processEngine" factory-method="getFormService"/>
    <bean id="runtimeService" factory-bean="processEngine" factory-method="getRuntimeService"/>
    <bean id="taskService" factory-bean="processEngine" factory-method="getTaskService"/>
    <bean id="historyService" factory-bean="processEngine" factory-method="getHistoryService"/>
    <bean id="managementService" factory-bean="processEngine" factory-method="getManagementService"/>
    <bean id="identityService" factory-bean="processEngine" factory-method="getIdentityService"/>
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"/>
    </bean>
</beans>
3.在pom.xml中增加maven依賴

在pom.xml中新增以下內容

<!-- Activiti -->
    <!-- https://mvnrepository.com/artifact/org.activiti/activiti-engine -->
    <dependency>
      <groupId>org.activiti</groupId>
      <artifactId>activiti-engine</artifactId>
      <version>${activiti.version}</version>
    </dependency>
    <dependency>
      <groupId>org.activiti</groupId>
      <artifactId>activiti-spring</artifactId>
      <version>${activiti.version}</version>
      <exclusions>
        <exclusion>
          <artifactId>commons-dbcp</artifactId>
          <groupId>commons-dbcp</groupId>
        </exclusion>
      </exclusions>
    </dependency>

    <!-- https://mvnrepository.com/artifact/commons-dbcp/commons-dbcp -->
    <dependency>
      <groupId>commons-dbcp</groupId>
      <artifactId>commons-dbcp</artifactId>
      <version>1.4</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>3.2.5</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/javax.activation/activation -->
    <dependency>
      <groupId>javax.activation</groupId>
      <artifactId>activation</artifactId>
      <version>1.1</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.activiti/activiti-bpmn-model -->
    <dependency>
      <groupId>org.activiti</groupId>
      <artifactId>activiti-bpmn-model</artifactId>
      <version>${activiti.version}</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.activiti/activiti-bpmn-converter -->
    <dependency>
      <groupId>org.activiti</groupId>
      <artifactId>activiti-bpmn-converter</artifactId>
      <version>${activiti.version}</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.activiti/activiti-bpmn-layout -->
    <dependency>
      <groupId>org.activiti</groupId>
      <artifactId>activiti-bpmn-layout</artifactId>
      <version>${activiti.version}</version>
    </dependency>

    <!-- https://mvnrepository.com/artifact/org.activiti/activiti-common-rest -->
    <dependency>
      <groupId>org.activiti</groupId>
      <artifactId>activiti-common-rest</artifactId>
      <version>${activiti.version}</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.activiti/activiti-crystalball -->
    <dependency>
      <groupId>org.activiti</groupId>
      <artifactId>activiti-crystalball</artifactId>
      <version>${activiti.version}</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.activiti/activiti-diagram-rest -->
    <dependency>
      <groupId>org.activiti</groupId>
      <artifactId>activiti-diagram-rest</artifactId>
      <version>${activiti.version}</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.activiti/activiti-explorer -->
    <dependency>
      <groupId>org.activiti</groupId>
      <artifactId>activiti-explorer</artifactId>
      <version>${activiti.version}</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.activiti/activiti-image-generator -->
    <dependency>
      <groupId>org.activiti</groupId>
      <artifactId>activiti-image-generator</artifactId>
      <version>${activiti.version}</version>
    </dependency>

    <!-- https://mvnrepository.com/artifact/org.activiti/activiti-json-converter -->
    <dependency>
      <groupId>org.activiti</groupId>
      <artifactId>activiti-json-converter</artifactId>
      <version>${activiti.version}</version>
    </dependency>
    <dependency>
      <groupId>org.activiti</groupId>
      <artifactId>activiti-modeler</artifactId>
      <version>${activiti.version}</version>
    </dependency>
    <dependency>
      <groupId>org.activiti</groupId>
      <artifactId>activiti-simple-workflow</artifactId>
      <version>${activiti.version}</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.vaadin.addons/dcharts-widget -->
    <dependency>
      <groupId>org.vaadin.addons</groupId>
      <artifactId>dcharts-widget</artifactId>
      <version>0.10.0</version>
    </dependency>
    <dependency>
      <groupId>org.activiti</groupId>
      <artifactId>activiti-process-validation</artifactId>
      <version>${activiti.version}</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.apache.xmlgraphics/xmlgraphics-commons -->
    <dependency>
      <groupId>org.apache.xmlgraphics</groupId>
      <artifactId>xmlgraphics-commons</artifactId>
      <version>1.2</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/com.vaadin/vaadin -->
    <dependency>
      <groupId>com.vaadin</groupId>
      <artifactId>vaadin</artifactId>
      <version>6.8.8</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.imgscalr/imgscalr-lib -->
<dependency>
<dependency>
      <groupId>org.json</groupId>
      <artifactId>org.json</artifactId>
      <version>chargebee-1.0</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/net.sf.json-lib/json-lib-ext-spring -->
    <dependency>
      <groupId>net.sf.json-lib</groupId>
      <artifactId>json-lib-ext-spring</artifactId>
      <version>1.0.2</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-core -->
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-core</artifactId>
      <version>2.7.4</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>2.7.4</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-annotations -->
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-annotations</artifactId>
      <version>2.7.4</version>
    </dependency>
此時,執行專案,在資料庫中即可看到activit相關的23張表。

到此為止,activiti就成功的整合到了專案中

二、添加註冊功能

1.在activiti的act_id_group表中加入以下資料(這裡為了圖方便,提前預設了組關係)


在之前的LoginController中,刪去registerPost()函式的註釋,同時刪去IdentityService的註釋,重新啟動專案,即可註冊



三、整合activiti modeler

在為了在專案中成功整合activiti modeler你需要在activiti5.17中找到以下內容:

1. 在activiti-5.17的lib資料夾內,解壓以下兩個jar包:


將其org.activiti.rest路徑下的資料夾拷貝到專案的org.activiti.rest包中,內容如下所示:


2.解壓war資料夾中的兩個war包,把activiti-explorer\WEB-INF\classes 路徑下的stencilset.json、ui.properties、ui.properties.alfresco拷貝到新專案resources中

3.把wars\activiti-explorer下的diagram-viewer、editor-app、modeler.html拷貝到新專案webapp中

4.更改editor-app/app-cfg.js中的contextRoot,刪去/activiti-explorer,只保留/service

5.將org.activiti.rest包下所有controller註解的類添加註解:@RequestMapping("/service")

6.在applicationContext.xml相應位置中新增:

<context:component-scan base-package="org.activiti.rest.diagram">
        <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
    </context:component-scan>
    <context:component-scan base-package="org.activiti.rest.editor">
        <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
    </context:component-scan>
7.在pom.xml中新增以下依賴:
<dependency>
      <groupId>com.vaadin</groupId>
      <artifactId>vaadin</artifactId>
      <version>6.8.8</version>
    </dependency>
<!-- https://mvnrepository.com/artifact/org.imgscalr/imgscalr-lib -->
    <dependency>
      <groupId>org.imgscalr</groupId>
      <artifactId>imgscalr-lib</artifactId>
      <version>4.2</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/geronimo-spec/geronimo-spec-servlet -->
    <!-- https://mvnrepository.com/artifact/org.apache.geronimo.specs/geronimo-servlet_3.0_spec -->
    <dependency>
      <groupId>org.apache.geronimo.specs</groupId>
      <artifactId>geronimo-servlet_3.0_spec</artifactId>
      <version>1.0</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/javax/javaee-api -->
    <dependency>
      <groupId>javax</groupId>
      <artifactId>javaee-api</artifactId>
      <version>7.0</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/joda-time/joda-time -->
    <dependency>
      <groupId>joda-time</groupId>
      <artifactId>joda-time</artifactId>
      <version>2.1</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/batik/batik-transcoder -->
    <dependency>
      <groupId>batik</groupId>
      <artifactId>batik-transcoder</artifactId>
      <version>1.7</version>
    </dependency>
    <dependency>
      <groupId>batik</groupId>
      <artifactId>batik-dom</artifactId>
      <version>1.7</version>
    </dependency>
    <dependency>
      <groupId>batik</groupId>
      <artifactId>batik-bridge</artifactId>
      <version>1.7</version>
    </dependency>
    <dependency>
      <groupId>batik</groupId>
      <artifactId>batik-css</artifactId>
      <version>1.7</version>
    </dependency>
    <dependency>
      <groupId>batik</groupId>
      <artifactId>batik-anim</artifactId>
      <version>1.7</version>
    </dependency>
    <dependency>
      <groupId>batik</groupId>
      <artifactId>batik-codec</artifactId>
      <version>1.7</version>
    </dependency>
    <dependency>
      <groupId>batik</groupId>
      <artifactId>batik-ext</artifactId>
      <version>1.7</version>
    </dependency>
    <dependency>
      <groupId>batik</groupId>
      <artifactId>batik-gvt</artifactId>
      <version>1.7</version>
    </dependency>
    <dependency>
      <groupId>batik</groupId>
      <artifactId>batik-script</artifactId>
      <version>1.7</version>
    </dependency>
    <!--<dependency>
      <groupId>batik</groupId>
      <artifactId>batik-js</artifactId>
      <version>1.7</version>
    </dependency>-->
    <dependency>
      <groupId>batik</groupId>
      <artifactId>batik-parser</artifactId>
      <version>1.7</version>
    </dependency>
    <dependency>
      <groupId>batik</groupId>
      <artifactId>batik-svg-dom</artifactId>
      <version>1.7</version>
    </dependency>
    <dependency>
      <groupId>batik</groupId>
      <artifactId>batik-svggen</artifactId>
      <version>1.7</version>
    </dependency>
    <dependency>
      <groupId>batik</groupId>
      <artifactId>batik-util</artifactId>
      <version>1.7</version>
    </dependency>
    <dependency>
      <groupId>batik</groupId>
      <artifactId>batik-xml</artifactId>
      <version>1.7</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.apache.xmlgraphics/batik-js -->
    <dependency>
      <groupId>org.apache.xmlgraphics</groupId>
      <artifactId>batik-js</artifactId>
      <version>1.7</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/xml-apis/xml-apis-ext -->
    <dependency>
      <groupId>xml-apis</groupId>
      <artifactId>xml-apis-ext</artifactId>
      <version>1.3.04</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/xml-apis/xml-apis-ext -->
    <dependency>
      <groupId>xml-apis</groupId>
      <artifactId>xml-apis</artifactId>
      <version>1.3.04</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.apache.xmlgraphics/xmlgraphics-commons -->
    <dependency>
      <groupId>org.apache.xmlgraphics</groupId>
      <artifactId>xmlgraphics-commons</artifactId>
      <version>1.2</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.apache.xmlgraphics/batik-awt-util -->
    <dependency>
      <groupId>org.apache.xmlgraphics</groupId>
      <artifactId>batik-awt-util</artifactId>
      <version>1.7</version>
    </dependency>
注:batik相關的依賴可能無法下載,可以自行在activiti5.17\wars\activiti-explorer\WEB-INF\lib中找到,手動加入

8.為了測試我們的modeler是否能正常工作,我們在這裡新增一個ModuleController進行測試

package com.blog.yanming.controller;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ObjectNode;
import net.sf.json.JSONArray;
import org.activiti.editor.constants.ModelDataJsonConstants;
import org.activiti.engine.RepositoryService;
import org.activiti.engine.repository.Model;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.UnsupportedEncodingException;

/**
 * Created by YanMing on 2017/7/15.
 */
@Controller
@RequestMapping("/model")
public class ModuleController {
    private Logger logger = LoggerFactory.getLogger(ModuleController.class);
    
    @Autowired
    private RepositoryService repositoryService;

    /**
     * @Date: 13:41 2017/6/15
     * 建立模型功能
     * @param name 模型名稱
     * @param key 模型key值
     * @param description 模型描述
     *
     */
    @RequestMapping(value = "create")
    public void create(@RequestParam("name")String name,
                       @RequestParam("key")String key,
                       @RequestParam("description")String description,
                       HttpServletRequest request, HttpServletResponse response) {
        try{
            //將前端 ISO-8859-1編碼轉碼為 UTF-8
            name = new String(name.getBytes("ISO-8859-1"),"UTF-8");
            key = new String(key.getBytes("ISO-8859-1"),"UTF-8");
            description = new String(description.getBytes("ISO-8859-1"),"UTF-8");
            //建立一個activiti bpmn模板物件
            ObjectMapper objectMapper = new ObjectMapper();
            ObjectNode editorNode = objectMapper.createObjectNode();
            editorNode.put("id","canvas");
            editorNode.put("resourceId","canvas");
            ObjectNode stencilSetNode = objectMapper.createObjectNode();
            stencilSetNode.put("namespace","http://b3mn.org/stencilset/bpmn2.0#");
            editorNode.put("stencilset",stencilSetNode); //為模型繫結引數
            Model modelData = repositoryService.newModel(); //建立模型物件

            ObjectNode modelObjectNode = objectMapper.createObjectNode();
            modelObjectNode.put(ModelDataJsonConstants.MODEL_NAME,name);
            modelObjectNode.put(ModelDataJsonConstants.MODEL_REVISION,1);
            description = StringUtils.defaultString(description);
            modelObjectNode.put(ModelDataJsonConstants.MODEL_DESCRIPTION,description);
            modelData.setMetaInfo(modelObjectNode.toString());
            modelData.setName(name);
            modelData.setKey(StringUtils.defaultString(key));

            repositoryService.saveModel(modelData);  //儲存模型模型
            repositoryService.addModelEditorSource(modelData.getId(),editorNode.toString().getBytes("utf-8"));
            response.sendRedirect(request.getContextPath() + "/modeler.html?modelId=" + modelData.getId());//跳轉到模型設計介面
        }catch (Exception e){
            logger.error("建立模型失敗",e);
        }
    }

}
執行專案,輸入http://localhost:8080/model/create?name=test&key=test&description=testModel成功跳轉到以下介面:



到此,Activiti modeler整合完畢,接下來就編寫我們的模型管理。很簡單,直接上程式碼!

四、整合模型管理:

1.完整的ModuleController

package com.adc.gim.controller;

import com.adc.gim.service.ModelService;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ObjectNode;
import net.sf.json.JSONArray;
import org.activiti.editor.constants.ModelDataJsonConstants;
import org.activiti.engine.RepositoryService;
import org.activiti.engine.repository.Model;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.UnsupportedEncodingException;


/**
 * Created by YanMing on 2017/6/8.
 */
/**
* @Date: 13:33 2017/6/6
 * 實現關於module管理相關操作功能
*/
@Controller
@RequestMapping("/model")
public class ModuleController {
    private Logger logger = LoggerFactory.getLogger(ModuleController.class);


    @Autowired
    private ModelService modelService;
    @Autowired
    private RepositoryService repositoryService;

    /**
    * @Date: 13:41 2017/6/15
     * 建立模型功能
     * @param name 模型名稱
     * @param key 模型key值
     * @param description 模型描述
     *
    */
    @RequestMapping(value = "create")
    public void create(@RequestParam("name")String name,
                       @RequestParam("key")String key,
                       @RequestParam("description")String description,
                        HttpServletRequest request, HttpServletResponse response) {
        try{
            //將前端 ISO-8859-1編碼轉碼為 UTF-8
            name = new String(name.getBytes("ISO-8859-1"),"UTF-8");
            key = new String(key.getBytes("ISO-8859-1"),"UTF-8");
            description = new String(description.getBytes("ISO-8859-1"),"UTF-8");
            //建立一個activiti bpmn模板物件
            ObjectMapper objectMapper = new ObjectMapper();
            ObjectNode editorNode = objectMapper.createObjectNode();
            editorNode.put("id","canvas");
            editorNode.put("resourceId","canvas");
            ObjectNode stencilSetNode = objectMapper.createObjectNode();
            stencilSetNode.put("namespace","http://b3mn.org/stencilset/bpmn2.0#");
            editorNode.put("stencilset",stencilSetNode); //為模型繫結引數
            Model modelData = repositoryService.newModel(); //建立模型物件

            ObjectNode modelObjectNode = objectMapper.createObjectNode();
            modelObjectNode.put(ModelDataJsonConstants.MODEL_NAME,name);
            modelObjectNode.put(ModelDataJsonConstants.MODEL_REVISION,1);
            description = StringUtils.defaultString(description);
            modelObjectNode.put(ModelDataJsonConstants.MODEL_DESCRIPTION,description);
            modelData.setMetaInfo(modelObjectNode.toString());
            modelData.setName(name);
            modelData.setKey(StringUtils.defaultString(key));

            repositoryService.saveModel(modelData);  //儲存模型模型
            repositoryService.addModelEditorSource(modelData.getId(),editorNode.toString().getBytes("utf-8"));
            response.sendRedirect(request.getContextPath() + "/modeler.html?modelId=" + modelData.getId());//跳轉到模型設計介面
        }catch (Exception e){
            logger.error("建立模型失敗",e);
        }
    }

    /**
     * @Date: 13:44 2017/6/15
     * 獲取所ACTI_RE_MODEL表所有模型資訊
     *
    */
    @RequestMapping(value = "/getAllModel",method = RequestMethod.GET)
    @ResponseBody
    public JSONArray getAllModel(){
        return modelService.getAllModule();
    }

    /**
     * @Date: 13:45 2017/6/15
     * 根據指定模型Id、部署模型
     * 返回狀態字串
     *
    */
    @RequestMapping(value = "/deployModel",method = RequestMethod.POST)
    @ResponseBody
    public String deployModel(@RequestParam("modelId") String modelId) throws UnsupportedEncodingException{
        //前端modelId轉碼為UTF-8
        modelId = new String(modelId.getBytes("ISO-8859-1"),"UTF-8");
        return modelService.deployModel(modelId)?"right":"wrong";
    }

    /**
     * @Date: 13:47 2017/6/15
     * 根據制定模型Id、匯出模型XML檔案,顯示在新的HTML中
     *
    */
    @RequestMapping(value = "/exportModel",method = RequestMethod.GET)
    @ResponseBody
    public String exportModel(HttpServletRequest request) throws UnsupportedEncodingException{
        //獲取modelId並轉碼
        String modelId = request.getParameter("modelId");
        modelId = new String(modelId.getBytes("ISO-8859-1"),"UTF-8");
        String res = "<xmp>";
        res =  res + modelService.exportModel(modelId) + "</xmp>";
        return res;
    }

    /**
     * @Date: 13:48 2017/6/15
     * 根據制定模型Id、刪除模型
     *
    */
    @RequestMapping(value = "/deleteModel",method = RequestMethod.POST)
    @ResponseBody
    public String deleteModel(@RequestParam("modelId") String modelId)throws UnsupportedEncodingException{
        modelId = new String(modelId.getBytes("ISO-8859-1"),"UTF-8");
        return modelService.deleteModel(modelId)?"right":"wrong";
    }

}
2.在model包中新增Mymodel,用於在檢視層進行顯示模型資訊的類
package com.adc.gim.model;

import org.activiti.engine.repository.Model;

/**
 * Created by YanMing on 2017/6/9.
 */
/**

* @Date: 16:11 2017/6/18
 * 模型列表顯示
 *
*/
public class MyModel {
    private String modelId;
    private String modelKey;
    private String modelName;
    private String modelVersion;
    private String modelCtime;
    private String modelLMtime;
    private String modelMetaData;

    public MyModel(){

    }
    public MyModel(Model model){
        this.modelId = model.getId();
        this.modelKey = model.getKey();
        this.modelName = model.getName();
        this.modelVersion = model.getVersion().toString();
        this.modelCtime = model.getCreateTime().toString();
        this.modelLMtime=model.getLastUpdateTime().toString();
        this.modelMetaData = model.getMetaInfo();

    }

    public String getModelId() {
        return modelId;
    }

    public void setModelId(String modelId) {
        this.modelId = modelId;
    }

    public String getModelKey() {
        return modelKey;
    }

    public void setModelKey(String modelKey) {
        this.modelKey = modelKey;
    }

    public String getModelName() {
        return modelName;
    }

    public void setModelName(String modelName) {
        this.modelName = modelName;
    }

    public String getModelVersion() {
        return modelVersion;
    }

    public void setModelVersion(String modelVersion) {
        this.modelVersion = modelVersion;
    }

    public String getModelCtime() {
        return modelCtime;
    }

    public void setModelCtime(String modelCtime) {
        this.modelCtime = modelCtime;
    }

    public String getModelLMtime() {
        return modelLMtime;
    }

    public void setModelLMtime(String modelLMtime) {
        this.modelLMtime = modelLMtime;
    }

    public String getModelMetaData() {
        return modelMetaData;
    }

    public void setModelMetaData(String modelMetaData) {
        this.modelMetaData = modelMetaData;
    }
}

3.在service包中新增ModelService 和 ModelServiceImpl

ModelService

package com.adc.gim.service;

import com.adc.gim.model.MyModel;
import net.sf.json.JSONArray;

import java.util.List;

/**
 * Created by YanMing on 2017/6/12.
 */
public interface ModelService {

    JSONArray getAllModule();
    boolean deployModel(String modelId);
    String exportModel(String modelId);
    boolean deleteModel(String modelId);
}
ModelServiceImpl
package com.adc.gim.service.impl;

import com.adc.gim.model.MyModel;
import com.adc.gim.service.ModelService;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ObjectNode;
import net.sf.json.JSONArray;
import org.activiti.bpmn.converter.BpmnXMLConverter;
import org.activiti.bpmn.model.BpmnModel;
import org.activiti.editor.language.json.converter.BpmnJsonConverter;
import org.activiti.engine.RepositoryService;
import org.activiti.engine.repository.Deployment;
import org.activiti.engine.repository.Model;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

/**
 * Created by YanMing on 2017/6/1.
 */
@Service
public class ModelServiceImpl implements ModelService {

    @Autowired
    private RepositoryService repositoryService;

    /**
    * @Date: 16:26 2017/6/2
     * 獲取所有模型
    */
    @Override
    public JSONArray getAllModule() {
        List<MyModel> resList = new ArrayList<MyModel>();
        JSONArray jsonArray = null;
        try {
            //獲取所有模型列表
            List<Model>list = repositoryService.createModelQuery().orderByCreateTime()
                    .desc().list();
            for (Model model : list) {
                //轉換為前端顯示MyModel
                MyModel myModel = new MyModel(model);
                resList.add(myModel);
            }
            jsonArray = JSONArray.fromObject(resList);
            return jsonArray;
        }catch (Exception e){
            System.out.println(e.getMessage());
            return jsonArray;
        }
    }

    /**
    * @Date: 16:28 2017/6/2
     * 部署模型
    */
    @Override
    public boolean deployModel(String modelId){
        //System.out.println(modelId);
        try {
            //獲取指定模型id的模型
            Model modelData = repositoryService.getModel(modelId);
            //解析模型
            ObjectNode modelNode = (ObjectNode) new ObjectMapper()
                    .readTree(repositoryService.getModelEditorSource(modelData.getId()));
            byte [] bpmnBytes = null;
            BpmnModel model = new BpmnJsonConverter().convertToBpmnModel(modelNode);
            bpmnBytes = new BpmnXMLConverter().convertToXML(model);
            String processName = modelData.getName() + ".bpmn20.xml";
            //部署
            Deployment deployment = repositoryService.createDeployment()
                    .name(modelData.getName())
                    .addString(processName,new String(bpmnBytes))
                    .deploy();
            return true;
        }catch (Exception e){
            e.printStackTrace();
            return false;
        }

    }

    /**
    * @Date: 16:31 2017/6/2
     * 匯出模型定義
    */
    @Override
    public String exportModel(String modelId) {
        String res = "";
        try {
            Model modelData = repositoryService.getModel(modelId);
            ObjectNode modelNode = (ObjectNode) new ObjectMapper()
                    .readTree(repositoryService.getModelEditorSource(modelData.getId()));
            BpmnModel model = new BpmnJsonConverter().convertToBpmnModel(modelNode);
            byte [] bpmnBytes = new BpmnXMLConverter().convertToXML(model);
            ByteArrayInputStream in = new ByteArrayInputStream(bpmnBytes);
            byte [] bytes = new byte [1024];
            ByteArrayOutputStream outStream = new ByteArrayOutputStream();
            int len = -1;
            while ((len = in.read(bytes,0,1024))!=-1){
                outStream.write(bytes,0,len);
            }
            res = new String(outStream.toString().getBytes("UTF-8"),"ISO-8859-1");
            return res;
        }catch (Exception e){
            e.printStackTrace();
            return res;
        }
    }

    /**
    * @Date: 16:31 2017/6/2
     * 刪除模型
    */
    @Override
    public boolean deleteModel(String modelId) {
        try {
            repositoryService.deleteModel(modelId);
            return true;
        }catch (Exception e){
            e.printStackTrace();
            return false;
        }
    }
}

4.新增控制導航的MainController

package com.adc.gim.controller;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;


/**
* @Autohr:YanMing
* @Description:
 *
 * 實現流程管理和模型管理頁面跳轉
 *
* @Date: 13:43 2017/6/5
*/

@Controller
public class MainController {
    private static final Logger logger = LoggerFactory.getLogger(MainController.class);
    /**
    * @Date: 13:29 2017/6/6
     * 跳轉到模型管理頁面
    */
    @RequestMapping(value = {"/modelPage"})
    public String modelManagePage(){
        return "modelManage";
    }

    /**
    * @Date: 13:30 2017/6/6
     * 跳轉到流程管理頁面
    */
    @RequestMapping(value = {"/processPage"})
    public String processManagePage(){
        return "processManage";
    }


}

新增模型管理的html檔案以及資原始檔,見原始碼,這裡不再贅述

執行專案,效果如下:



P.S.文章不妥之處還望指正