您的位置:首页 > 其它

[工作流与Activiti] - No.3 简易工作流系统搭建(2) : 整合Activiti + 模型管理功能

2017-07-15 12:19 921 查看
之前的一篇文章我们整合了系统最简单的部分,就是用户管理部分。在这篇文章中,我们将整合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.文章不妥之处还望指正

本文Github源码下载
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐