[工作流与Activiti] - No.3 简易工作流系统搭建(2) : 整合Activiti + 模型管理功能
2017-07-15 12:19
921 查看
之前的一篇文章我们整合了系统最简单的部分,就是用户管理部分。在这篇文章中,我们将整合activiti,添加用户管理中的注册功能,同时增加模型管理功能
一、整合Activiti5.17
1. 修改web.xml
在web.xml相应位置添加spring-activiti.xml文件配置位置
在resources中添加spring-activiti.xml
在pom.xml中添加以下内容
到此为止,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相应位置中添加:
8.为了测试我们的modeler是否能正常工作,我们在这里添加一个ModuleController进行测试
到此,Activiti modeler整合完毕,接下来就编写我们的模型管理。很简单,直接上代码!
四、整合模型管理:
1.完整的ModuleController
3.在service包中添加ModelService 和 ModelServiceImpl
ModelService
4.添加控制导航的MainController
添加模型管理的html文件以及资源文件,见源码,这里不再赘述
运行项目,效果如下:
P.S.文章不妥之处还望指正
本文Github源码下载
一、整合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源码下载
相关文章推荐
- [工作流与Activiti] - No.4 简易工作流系统搭建(3) : 流程管理功能+个人任务管理
- [工作流与Activiti] - No.2 简易工作流系统搭建(1) : 用户管理
- Angularjs,WebAPI 搭建一个简易权限管理系统 —— 基本功能演示(二)
- Angularjs,WebAPI 搭建一个简易权限管理系统 —— 基本功能演示(二)
- JavaWeb企业实训 简易股市自选查询分析系统(六)使用Shiro控制登录等权限管理与Spring项目整合
- 工作流管理系统模型的设计分析
- Apache Shiro+SpringMVC+Hibernate Search+Hibernate+Bootstrap企业信息管理系统基础框架搭建整合实例代码教程
- 搭建一个简易的成绩管理系统的数据库(实验楼)
- 最简易的权限管理模型 和 标准权限管理模块 和 复杂权限系统
- 整合LAMP+loganalyzer+rsyslog搭建企业级集中式日志管理系统
- Angularjs,WebAPI 搭建一个简易权限管理系统 —— Angularjs名词与概念(一)
- Angularjs,WebAPI 搭建一个简易权限管理系统
- Angularjs,WebAPI 搭建一个简易权限管理系统 —— 系统业务与实现(三)
- 这几天做完简易酒店管理系统,对自动计费功能的收获。
- Angularjs,WebAPI 搭建一个简易权限管理系统 —— WebAPI项目主体结构(四)
- 关于项目管理系统 activiti工作流开发
- Extjs2.0搭建的一个简易后台管理系统demo教程,能更换主题,可直接不用部署在Tomcat上就能运行
- Apache Shiro+SpringMVC+Hibernate Search+Hibernate+Bootstrap企业信息管理系统基础框架搭建整合实例代码教程
- Angularjs,WebAPI 搭建一个简易权限管理系统 —— Angularjs名词与概念(一)
- Angularjs,WebAPI 搭建一个简易权限管理系统 —— Angularjs 前端主体结构(五)