Browse Source

工作流

dev
管理员 6 years ago
parent
commit
f7260a50ac
  1. 35
      esua-epdc/epdc-module/epdc-activiti/epdc-activiti-server/pom.xml
  2. 43
      esua-epdc/epdc-module/epdc-activiti/epdc-activiti-server/processon/yishi.bpmn
  3. 8
      esua-epdc/epdc-module/epdc-activiti/epdc-activiti-server/src/main/java/com/elink/esua/epdc/ActivitiApplication.java
  4. 92
      esua-epdc/epdc-module/epdc-activiti/epdc-activiti-server/src/main/java/com/elink/esua/epdc/controller/ActModelController.java
  5. 18
      esua-epdc/epdc-module/epdc-activiti/epdc-activiti-server/src/main/java/com/elink/esua/epdc/controller/ActProcessController.java
  6. 38
      esua-epdc/epdc-module/epdc-activiti/epdc-activiti-server/src/main/java/com/elink/esua/epdc/editor/main/StencilsetRestResource.java
  7. 69
      esua-epdc/epdc-module/epdc-activiti/epdc-activiti-server/src/main/java/com/elink/esua/epdc/editor/model/ModelEditorJsonRestResource.java
  8. 90
      esua-epdc/epdc-module/epdc-activiti/epdc-activiti-server/src/main/java/com/elink/esua/epdc/editor/model/ModelSaveRestResource.java
  9. 161
      esua-epdc/epdc-module/epdc-activiti/epdc-activiti-server/src/main/java/com/elink/esua/epdc/service/ActModelService.java
  10. 83
      esua-epdc/epdc-module/epdc-activiti/epdc-activiti-server/src/main/java/com/elink/esua/epdc/service/ActProcessService.java
  11. 28
      esua-epdc/epdc-module/epdc-activiti/epdc-activiti-server/src/main/resources/application.yml
  12. BIN
      esua-epdc/epdc-module/epdc-activiti/epdc-activiti-server/src/main/resources/processes/favicon.ico
  13. 21
      esua-epdc/epdc-module/epdc-activiti/epdc-activiti-server/src/main/resources/registry.conf

35
esua-epdc/epdc-module/epdc-activiti/epdc-activiti-server/pom.xml

@ -13,7 +13,7 @@
<packaging>jar</packaging> <packaging>jar</packaging>
<properties> <properties>
<activiti.version>5.22.0</activiti.version> <activiti.version>6.0.0</activiti.version>
</properties> </properties>
<dependencies> <dependencies>
@ -60,39 +60,6 @@
</exclusion> </exclusion>
</exclusions> </exclusions>
</dependency> </dependency>
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-explorer</artifactId>
<version>${activiti.version}</version>
<exclusions>
<exclusion>
<artifactId>vaadin</artifactId>
<groupId>com.vaadin</groupId>
</exclusion>
<exclusion>
<artifactId>dcharts-widget</artifactId>
<groupId>org.vaadin.addons</groupId>
</exclusion>
<exclusion>
<artifactId>activiti-simple-workflow</artifactId>
<groupId>org.activiti</groupId>
</exclusion>
<exclusion>
<artifactId>slf4j-log4j12</artifactId>
<groupId>org.slf4j</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-diagram-rest</artifactId>
<version>${activiti.version}</version>
</dependency>
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-modeler</artifactId>
<version>${activiti.version}</version>
</dependency>
</dependencies> </dependencies>

43
esua-epdc/epdc-module/epdc-activiti/epdc-activiti-server/processon/yishi.bpmn

@ -0,0 +1,43 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL"
xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI"
xmlns:activiti="http://activiti.org/bpmn"
xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC"
xmlns:tns="http://www.activiti.org/test"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
expressionLanguage="http://www.w3.org/1999/XPath"
id="m1566628843418"
name=""
targetNamespace="http://www.activiti.org/test"
typeLanguage="http://www.w3.org/2001/XMLSchema">
<process xmlns="" id="myProcess_1" isClosed="false" isExecutable="true"
processType="None">
<startEvent id="_2" name="开始"/>
<userTask activiti:exclusive="true" id="_3" name="UserTask">
<extensionElements>
<activiti:taskListener event="create"/>
</extensionElements>
</userTask>
</process>
<bpmndi:BPMNDiagram xmlns=""
documentation="background=#3C3F41;count=1;horizontalcount=1;orientation=0;width=842.4;height=1195.2;imageableWidth=832.4;imageableHeight=1185.2;imageableX=5.0;imageableY=5.0"
id="Diagram-_1"
name="New Diagram">
<bpmndi:BPMNPlane bpmnElement="myProcess_1">
<bpmndi:BPMNShape bpmnElement="_2" id="Shape-_2">
<omgdc:Bounds height="32.0" width="32.0" x="245.0" y="100.0"/>
<bpmndi:BPMNLabel>
<omgdc:Bounds height="32.0" width="32.0" x="0.0" y="0.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="_3" id="Shape-_3">
<omgdc:Bounds height="55.0" width="85.0" x="255.0" y="200.0"/>
<bpmndi:BPMNLabel>
<omgdc:Bounds height="55.0" width="85.0" x="0.0" y="0.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
</bpmndi:BPMNPlane>
</bpmndi:BPMNDiagram>
</definitions>

8
esua-epdc/epdc-module/epdc-activiti/epdc-activiti-server/src/main/java/com/elink/esua/epdc/ActivitiApplication.java

@ -1,8 +1,8 @@
/** /**
* Copyright (c) 2018 人人开源 All rights reserved. * Copyright (c) 2018 人人开源 All rights reserved.
* * <p>
* https://www.renren.io * https://www.renren.io
* * <p>
* 版权所有侵权必究 * 版权所有侵权必究
*/ */
@ -20,8 +20,8 @@ import org.springframework.cloud.openfeign.EnableFeignClients;
* @since 1.1.0 * @since 1.1.0
*/ */
@SpringBootApplication(exclude = { @SpringBootApplication(exclude = {
org.activiti.spring.boot.SecurityAutoConfiguration.class, org.activiti.spring.boot.SecurityAutoConfiguration.class,
org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration.class org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration.class
}) })
@EnableDiscoveryClient @EnableDiscoveryClient
@EnableFeignClients @EnableFeignClients

92
esua-epdc/epdc-module/epdc-activiti/epdc-activiti-server/src/main/java/com/elink/esua/epdc/controller/ActModelController.java

@ -1,92 +0,0 @@
/**
* Copyright (c) 2018 人人开源 All rights reserved.
*
* https://www.renren.io
*
* 版权所有侵权必究
*/
package com.elink.esua.epdc.controller;
import com.elink.esua.epdc.commons.tools.annotation.LogOperation;
import com.elink.esua.epdc.commons.tools.constant.Constant;
import com.elink.esua.epdc.commons.tools.page.PageData;
import com.elink.esua.epdc.commons.tools.utils.Result;
import com.elink.esua.epdc.commons.tools.validator.ValidatorUtils;
import com.elink.esua.epdc.dto.ModelDTO;
import com.elink.esua.epdc.service.ActModelService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.activiti.engine.repository.Model;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import springfox.documentation.annotations.ApiIgnore;
import javax.servlet.http.HttpServletResponse;
import java.util.Map;
/**
* 模型管理
*
* @author Mark sunlightcs@gmail.com
*/
@RestController
@RequestMapping("model")
@Api(tags="模型管理")
public class ActModelController {
@Autowired
private ActModelService actModelService;
@GetMapping("page")
@ApiOperation("分页")
@ApiImplicitParams({
@ApiImplicitParam(name = Constant.PAGE, value = "当前页码,从1开始", paramType = "query", required = true, dataType="int") ,
@ApiImplicitParam(name = Constant.LIMIT, value = "每页显示记录数", paramType = "query",required = true, dataType="int") ,
@ApiImplicitParam(name = "key", value = "key", paramType = "query", dataType="String"),
@ApiImplicitParam(name = "name", value = "name", paramType = "query", dataType="String")
})
public Result<PageData<Model>> page(@ApiIgnore @RequestParam Map<String, Object> params){
PageData<Model> page = actModelService.page(params);
return new Result<PageData<Model>>().ok(page);
}
@PostMapping
@ApiOperation("新增模型")
@LogOperation("新增模型")
public Result save(@RequestBody ModelDTO dto) throws Exception{
//效验数据
ValidatorUtils.validateEntity(dto);
actModelService.save(dto.getName(), dto.getKey(), dto.getDescription());
return new Result();
}
@PostMapping("deploy/{id}")
@ApiOperation("部署")
@LogOperation("部署")
public Result deploy(@PathVariable("id") String id) {
actModelService.deploy(id);
return new Result();
}
@GetMapping("export/{id}")
@ApiOperation("导出")
@LogOperation("导出")
public void export(@PathVariable("id") String id, @ApiIgnore HttpServletResponse response) {
actModelService.export(id, response);
}
@DeleteMapping
@ApiOperation("删除")
@LogOperation("删除")
public Result delete(@RequestBody String[] ids) {
for(String id : ids) {
actModelService.delete(id);
}
return new Result();
}
}

18
esua-epdc/epdc-module/epdc-activiti/epdc-activiti-server/src/main/java/com/elink/esua/epdc/controller/ActProcessController.java

@ -88,15 +88,15 @@ public class ActProcessController {
return new Result(); return new Result();
} }
@PostMapping("convertToModel/{id}") // @PostMapping("convertToModel/{id}")
@ApiOperation("将部署的流程转换为模型") // @ApiOperation("将部署的流程转换为模型")
@LogOperation("将部署的流程转换为模型") // @LogOperation("将部署的流程转换为模型")
@ApiImplicitParam(name = "id", value = "流程ID", paramType = "query", dataType="String") // @ApiImplicitParam(name = "id", value = "流程ID", paramType = "query", dataType="String")
public Result convertToModel(@PathVariable("id") String id) throws Exception { // public Result convertToModel(@PathVariable("id") String id) throws Exception {
actProcessService.convertToModel(id); // actProcessService.convertToModel(id);
//
return new Result(); // return new Result();
} // }
@DeleteMapping @DeleteMapping
@ApiOperation("删除流程") @ApiOperation("删除流程")

38
esua-epdc/epdc-module/epdc-activiti/epdc-activiti-server/src/main/java/com/elink/esua/epdc/editor/main/StencilsetRestResource.java

@ -1,38 +0,0 @@
/**
* Copyright (c) 2018 人人开源 All rights reserved.
*
* https://www.renren.io
*
* 版权所有侵权必究
*/
package com.elink.esua.epdc.editor.main;
import org.activiti.engine.ActivitiException;
import org.apache.commons.io.IOUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import java.io.InputStream;
/**
* Stencilset
*
* @author Mark sunlightcs@gmail.com
*/
@RestController
@RequestMapping("service")
public class StencilsetRestResource {
@RequestMapping(value="/editor/stencilset", method = RequestMethod.GET, produces = "application/json;charset=utf-8")
public @ResponseBody String getStencilset() {
InputStream stencilsetStream = this.getClass().getClassLoader().getResourceAsStream("stencilset.json");
try {
return IOUtils.toString(stencilsetStream, "utf-8");
} catch (Exception e) {
throw new ActivitiException("Error while loading stencil set", e);
}
}
}

69
esua-epdc/epdc-module/epdc-activiti/epdc-activiti-server/src/main/java/com/elink/esua/epdc/editor/model/ModelEditorJsonRestResource.java

@ -1,69 +0,0 @@
/**
* Copyright (c) 2018 人人开源 All rights reserved.
*
* https://www.renren.io
*
* 版权所有侵权必究
*/
package com.elink.esua.epdc.editor.model;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ObjectNode;
import org.activiti.editor.constants.ModelDataJsonConstants;
import org.activiti.engine.ActivitiException;
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.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
/**
* Model Editor
*
* @author Mark sunlightcs@gmail.com
*/
@RestController
@RequestMapping("service")
public class ModelEditorJsonRestResource implements ModelDataJsonConstants {
protected static final Logger LOGGER = LoggerFactory.getLogger(ModelEditorJsonRestResource.class);
@Autowired
private RepositoryService repositoryService;
@Autowired
private ObjectMapper objectMapper;
@RequestMapping(value="/model/{modelId}/json", method = RequestMethod.GET, produces = "application/json")
public ObjectNode getEditorJson(@PathVariable String modelId) {
ObjectNode modelNode = null;
Model model = repositoryService.getModel(modelId);
if (model != null) {
try {
if (StringUtils.isNotEmpty(model.getMetaInfo())) {
modelNode = (ObjectNode) objectMapper.readTree(model.getMetaInfo());
} else {
modelNode = objectMapper.createObjectNode();
modelNode.put(MODEL_NAME, model.getName());
}
modelNode.put(MODEL_ID, model.getId());
ObjectNode editorJsonNode = (ObjectNode) objectMapper.readTree(
new String(repositoryService.getModelEditorSource(model.getId()), "utf-8"));
modelNode.set("model", editorJsonNode);
} catch (Exception e) {
LOGGER.error("Error creating model JSON", e);
throw new ActivitiException("Error creating model JSON", e);
}
}
return modelNode;
}
}

90
esua-epdc/epdc-module/epdc-activiti/epdc-activiti-server/src/main/java/com/elink/esua/epdc/editor/model/ModelSaveRestResource.java

@ -1,90 +0,0 @@
/**
* Copyright (c) 2018 人人开源 All rights reserved.
*
* https://www.renren.io
*
* 版权所有侵权必究
*/
package com.elink.esua.epdc.editor.model;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ObjectNode;
import com.elink.esua.epdc.commons.tools.xss.XssHttpServletRequestWrapper;
import org.activiti.editor.constants.ModelDataJsonConstants;
import org.activiti.engine.ActivitiException;
import org.activiti.engine.RepositoryService;
import org.activiti.engine.repository.Model;
import org.apache.batik.transcoder.TranscoderInput;
import org.apache.batik.transcoder.TranscoderOutput;
import org.apache.batik.transcoder.image.PNGTranscoder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
/**
* Model Rest
*
* @author Mark sunlightcs@gmail.com
*/
@RestController
@RequestMapping("service")
public class ModelSaveRestResource implements ModelDataJsonConstants {
protected static final Logger LOGGER = LoggerFactory.getLogger(ModelSaveRestResource.class);
@Autowired
private RepositoryService repositoryService;
@Autowired
private ObjectMapper objectMapper;
@RequestMapping(value="/model/{modelId}/save", method = RequestMethod.PUT)
@ResponseStatus(value = HttpStatus.OK)
public void saveModel(@PathVariable String modelId, HttpServletRequest request) {
try {
HttpServletRequest orgRequest = XssHttpServletRequestWrapper.getOrgRequest(request);
String name = orgRequest.getParameter("name");
String description = orgRequest.getParameter("description");
String jsonXml = orgRequest.getParameter("json_xml");
String svgXml = orgRequest.getParameter("svg_xml");
Model model = repositoryService.getModel(modelId);
ObjectNode modelJson = (ObjectNode) objectMapper.readTree(model.getMetaInfo());
modelJson.put(MODEL_NAME, name);
modelJson.put(MODEL_DESCRIPTION, description);
model.setMetaInfo(modelJson.toString());
model.setName(name);
repositoryService.saveModel(model);
repositoryService.addModelEditorSource(model.getId(), jsonXml.getBytes("utf-8"));
InputStream svgStream = new ByteArrayInputStream(svgXml.getBytes("utf-8"));
TranscoderInput input = new TranscoderInput(svgStream);
PNGTranscoder transcoder = new PNGTranscoder();
// Setup output
ByteArrayOutputStream outStream = new ByteArrayOutputStream();
TranscoderOutput output = new TranscoderOutput(outStream);
// Do the transformation
transcoder.transcode(input, output);
final byte[] result = outStream.toByteArray();
repositoryService.addModelEditorSourceExtra(model.getId(), result);
outStream.close();
} catch (Exception e) {
LOGGER.error("Error saving model", e);
throw new ActivitiException("Error saving model", e);
}
}
}

161
esua-epdc/epdc-module/epdc-activiti/epdc-activiti-server/src/main/java/com/elink/esua/epdc/service/ActModelService.java

@ -8,31 +8,16 @@
package com.elink.esua.epdc.service; package com.elink.esua.epdc.service;
import com.elink.esua.epdc.exception.ModuleErrorCode;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ObjectNode;
import com.elink.esua.epdc.commons.tools.constant.Constant; import com.elink.esua.epdc.commons.tools.constant.Constant;
import com.elink.esua.epdc.commons.tools.exception.RenException;
import com.elink.esua.epdc.commons.tools.page.PageData; import com.elink.esua.epdc.commons.tools.page.PageData;
import com.elink.esua.epdc.exception.ModuleErrorCode; import com.fasterxml.jackson.databind.ObjectMapper;
import org.activiti.bpmn.converter.BpmnXMLConverter;
import org.activiti.bpmn.model.BpmnModel;
import org.activiti.editor.constants.ModelDataJsonConstants;
import org.activiti.editor.language.json.converter.BpmnJsonConverter;
import org.activiti.engine.RepositoryService; import org.activiti.engine.RepositoryService;
import org.activiti.engine.repository.Deployment;
import org.activiti.engine.repository.Model; import org.activiti.engine.repository.Model;
import org.activiti.engine.repository.ModelQuery; import org.activiti.engine.repository.ModelQuery;
import org.activiti.engine.repository.ProcessDefinition;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import javax.servlet.http.HttpServletResponse;
import java.io.ByteArrayInputStream;
import java.io.UnsupportedEncodingException;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@ -75,78 +60,78 @@ public class ActModelService {
return new PageData<>(list, (int)modelQuery.count()); return new PageData<>(list, (int)modelQuery.count());
} }
public void save(String name, String key, String description) throws UnsupportedEncodingException { // public void save(String name, String key, String description) throws UnsupportedEncodingException {
//新建一个空模型 // //新建一个空模型
Model model = repositoryService.newModel(); // Model model = repositoryService.newModel();
//
//metaInfo信息 // //metaInfo信息
ObjectNode metaInfo = objectMapper.createObjectNode(); // ObjectNode metaInfo = objectMapper.createObjectNode();
metaInfo.put(ModelDataJsonConstants.MODEL_NAME, name); // metaInfo.put(ModelDataJsonConstants.MODEL_NAME, name);
metaInfo.put(ModelDataJsonConstants.MODEL_DESCRIPTION, description); // metaInfo.put(ModelDataJsonConstants.MODEL_DESCRIPTION, description);
metaInfo.put(ModelDataJsonConstants.MODEL_REVISION, model.getVersion()); // metaInfo.put(ModelDataJsonConstants.MODEL_REVISION, model.getVersion());
//
model.setKey(key); // model.setKey(key);
model.setName(name); // model.setName(name);
model.setMetaInfo(metaInfo.toString()); // model.setMetaInfo(metaInfo.toString());
//
repositoryService.saveModel(model); // repositoryService.saveModel(model);
//
ObjectNode editorNode = objectMapper.createObjectNode(); // ObjectNode editorNode = objectMapper.createObjectNode();
editorNode.put("id", "canvas"); // editorNode.put("id", "canvas");
editorNode.put("resourceId", "canvas"); // editorNode.put("resourceId", "canvas");
ObjectNode stencilset = objectMapper.createObjectNode(); // ObjectNode stencilset = objectMapper.createObjectNode();
stencilset.put("namespace", "http://b3mn.org/stencilset/bpmn2.0#"); // stencilset.put("namespace", "http://b3mn.org/stencilset/bpmn2.0#");
editorNode.set("stencilset", stencilset); // editorNode.set("stencilset", stencilset);
repositoryService.addModelEditorSource(model.getId(), editorNode.toString().getBytes("utf-8")); // repositoryService.addModelEditorSource(model.getId(), editorNode.toString().getBytes("utf-8"));
} // }
//
public void deploy(String id) { // public void deploy(String id) {
try { // try {
Model model = repositoryService.getModel(id); // Model model = repositoryService.getModel(id);
BpmnJsonConverter jsonConverter = new BpmnJsonConverter(); // BpmnJsonConverter jsonConverter = new BpmnJsonConverter();
JsonNode editorNode = new ObjectMapper().readTree(repositoryService.getModelEditorSource(model.getId())); // JsonNode editorNode = new ObjectMapper().readTree(repositoryService.getModelEditorSource(model.getId()));
BpmnModel bpmnModel = jsonConverter.convertToBpmnModel(editorNode); // BpmnModel bpmnModel = jsonConverter.convertToBpmnModel(editorNode);
BpmnXMLConverter xmlConverter = new BpmnXMLConverter(); // BpmnXMLConverter xmlConverter = new BpmnXMLConverter();
byte[] bpmnBytes = xmlConverter.convertToXML(bpmnModel); // byte[] bpmnBytes = xmlConverter.convertToXML(bpmnModel);
//
String processName = model.getName(); // String processName = model.getName();
if (!StringUtils.endsWith(processName, ".bpmn20.xml")){ // if (!StringUtils.endsWith(processName, ".bpmn20.xml")){
processName += ".bpmn20.xml"; // processName += ".bpmn20.xml";
} // }
//
ByteArrayInputStream in = new ByteArrayInputStream(bpmnBytes); // ByteArrayInputStream in = new ByteArrayInputStream(bpmnBytes);
Deployment deployment = repositoryService.createDeployment().name(model.getName()).addInputStream(processName, in).deploy(); // Deployment deployment = repositoryService.createDeployment().name(model.getName()).addInputStream(processName, in).deploy();
//
List<ProcessDefinition> list = repositoryService.createProcessDefinitionQuery().deploymentId(deployment.getId()).list(); // List<ProcessDefinition> list = repositoryService.createProcessDefinitionQuery().deploymentId(deployment.getId()).list();
if (list.size() == 0){ // if (list.size() == 0){
throw new RenException(ModuleErrorCode.ACT_DEPLOY_ERROR); // throw new RenException(ModuleErrorCode.ACT_DEPLOY_ERROR);
} // }
} catch (Exception e) { // } catch (Exception e) {
throw new RenException(ModuleErrorCode.ACT_MODEL_IMG_ERROR, e); // throw new RenException(ModuleErrorCode.ACT_MODEL_IMG_ERROR, e);
} // }
} // }
//
/** // /**
* 导出模型 // * 导出模型
*/ // */
public void export(String id, HttpServletResponse response) { // public void export(String id, HttpServletResponse response) {
try { // try {
Model model = repositoryService.getModel(id); // Model model = repositoryService.getModel(id);
BpmnJsonConverter jsonConverter = new BpmnJsonConverter(); // BpmnJsonConverter jsonConverter = new BpmnJsonConverter();
JsonNode editorNode = new ObjectMapper().readTree(repositoryService.getModelEditorSource(model.getId())); // JsonNode editorNode = new ObjectMapper().readTree(repositoryService.getModelEditorSource(model.getId()));
BpmnModel bpmnModel = jsonConverter.convertToBpmnModel(editorNode); // BpmnModel bpmnModel = jsonConverter.convertToBpmnModel(editorNode);
BpmnXMLConverter xmlConverter = new BpmnXMLConverter(); // BpmnXMLConverter xmlConverter = new BpmnXMLConverter();
byte[] bpmnBytes = xmlConverter.convertToXML(bpmnModel); // byte[] bpmnBytes = xmlConverter.convertToXML(bpmnModel);
//
ByteArrayInputStream in = new ByteArrayInputStream(bpmnBytes); // ByteArrayInputStream in = new ByteArrayInputStream(bpmnBytes);
IOUtils.copy(in, response.getOutputStream()); // IOUtils.copy(in, response.getOutputStream());
String filename = bpmnModel.getMainProcess().getId() + ".bpmn20.xml"; // String filename = bpmnModel.getMainProcess().getId() + ".bpmn20.xml";
response.setHeader("Content-Disposition", "attachment; filename=" + filename); // response.setHeader("Content-Disposition", "attachment; filename=" + filename);
response.flushBuffer(); // response.flushBuffer();
} catch (Exception e) { // } catch (Exception e) {
throw new RenException(ModuleErrorCode.ACT_MODEL_EXPORT_ERROR, id); // throw new RenException(ModuleErrorCode.ACT_MODEL_EXPORT_ERROR, id);
} // }
} // }
/** /**
* 删除模型 * 删除模型

83
esua-epdc/epdc-module/epdc-activiti/epdc-activiti-server/src/main/java/com/elink/esua/epdc/service/ActProcessService.java

@ -8,20 +8,12 @@
package com.elink.esua.epdc.service; package com.elink.esua.epdc.service;
import com.elink.esua.epdc.exception.ModuleErrorCode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ObjectNode;
import com.elink.esua.epdc.commons.tools.constant.Constant; import com.elink.esua.epdc.commons.tools.constant.Constant;
import com.elink.esua.epdc.commons.tools.exception.RenException; import com.elink.esua.epdc.commons.tools.exception.RenException;
import com.elink.esua.epdc.commons.tools.page.PageData; import com.elink.esua.epdc.commons.tools.page.PageData;
import org.activiti.bpmn.converter.BpmnXMLConverter; import com.elink.esua.epdc.exception.ModuleErrorCode;
import org.activiti.bpmn.model.BpmnModel;
import org.activiti.editor.constants.ModelDataJsonConstants;
import org.activiti.editor.language.json.converter.BpmnJsonConverter;
import org.activiti.engine.RepositoryService; import org.activiti.engine.RepositoryService;
import org.activiti.engine.repository.Deployment; import org.activiti.engine.repository.Deployment;
import org.activiti.engine.repository.Model;
import org.activiti.engine.repository.ProcessDefinition; import org.activiti.engine.repository.ProcessDefinition;
import org.activiti.engine.repository.ProcessDefinitionQuery; import org.activiti.engine.repository.ProcessDefinitionQuery;
import org.apache.commons.io.FilenameUtils; import org.apache.commons.io.FilenameUtils;
@ -30,13 +22,8 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamReader;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
@ -147,40 +134,40 @@ public class ActProcessService {
repositoryService.suspendProcessDefinitionById(id, true, null); repositoryService.suspendProcessDefinitionById(id, true, null);
} }
/** // /**
* 将部署的流程转换为模型 // * 将部署的流程转换为模型
* @param id 流程ID // * @param id 流程ID
*/ // */
public Model convertToModel(String id) throws UnsupportedEncodingException, XMLStreamException { // public Model convertToModel(String id) throws UnsupportedEncodingException, XMLStreamException {
ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().processDefinitionId(id).singleResult(); // ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().processDefinitionId(id).singleResult();
InputStream bpmnStream = repositoryService.getResourceAsStream(processDefinition.getDeploymentId(), // InputStream bpmnStream = repositoryService.getResourceAsStream(processDefinition.getDeploymentId(),
processDefinition.getResourceName()); // processDefinition.getResourceName());
XMLInputFactory xif = XMLInputFactory.newInstance(); // XMLInputFactory xif = XMLInputFactory.newInstance();
InputStreamReader in = new InputStreamReader(bpmnStream, "UTF-8"); // InputStreamReader in = new InputStreamReader(bpmnStream, "UTF-8");
XMLStreamReader xtr = xif.createXMLStreamReader(in); // XMLStreamReader xtr = xif.createXMLStreamReader(in);
BpmnModel bpmnModel = new BpmnXMLConverter().convertToBpmnModel(xtr); // BpmnModel bpmnModel = new BpmnXMLConverter().convertToBpmnModel(xtr);
//
BpmnJsonConverter converter = new BpmnJsonConverter(); // BpmnJsonConverter converter = new BpmnJsonConverter();
ObjectNode modelNode = converter.convertToJson(bpmnModel); // ObjectNode modelNode = converter.convertToJson(bpmnModel);
Model modelData = repositoryService.newModel(); // Model modelData = repositoryService.newModel();
modelData.setKey(processDefinition.getKey()); // modelData.setKey(processDefinition.getKey());
modelData.setName(processDefinition.getResourceName()); // modelData.setName(processDefinition.getResourceName());
modelData.setCategory(processDefinition.getCategory()); // modelData.setCategory(processDefinition.getCategory());
modelData.setDeploymentId(processDefinition.getDeploymentId()); // modelData.setDeploymentId(processDefinition.getDeploymentId());
modelData.setVersion(Integer.parseInt(String.valueOf(repositoryService.createModelQuery().modelKey(modelData.getKey()).count()+1))); // modelData.setVersion(Integer.parseInt(String.valueOf(repositoryService.createModelQuery().modelKey(modelData.getKey()).count()+1)));
//
ObjectNode modelObjectNode = new ObjectMapper().createObjectNode(); // ObjectNode modelObjectNode = new ObjectMapper().createObjectNode();
modelObjectNode.put(ModelDataJsonConstants.MODEL_NAME, processDefinition.getName()); // modelObjectNode.put(ModelDataJsonConstants.MODEL_NAME, processDefinition.getName());
modelObjectNode.put(ModelDataJsonConstants.MODEL_REVISION, modelData.getVersion()); // modelObjectNode.put(ModelDataJsonConstants.MODEL_REVISION, modelData.getVersion());
modelObjectNode.put(ModelDataJsonConstants.MODEL_DESCRIPTION, processDefinition.getDescription()); // modelObjectNode.put(ModelDataJsonConstants.MODEL_DESCRIPTION, processDefinition.getDescription());
modelData.setMetaInfo(modelObjectNode.toString()); // modelData.setMetaInfo(modelObjectNode.toString());
//
repositoryService.saveModel(modelData); // repositoryService.saveModel(modelData);
//
repositoryService.addModelEditorSource(modelData.getId(), modelNode.toString().getBytes("utf-8")); // repositoryService.addModelEditorSource(modelData.getId(), modelNode.toString().getBytes("utf-8"));
//
return modelData; // return modelData;
} // }
/** /**
* 删除部署 * 删除部署

28
esua-epdc/epdc-module/epdc-activiti/epdc-activiti-server/src/main/resources/application.yml

@ -16,17 +16,19 @@ spring:
time-zone: GMT+8 time-zone: GMT+8
date-format: yyyy-MM-dd HH:mm:ss date-format: yyyy-MM-dd HH:mm:ss
activiti: activiti:
check-process-definitions: false check-process-definitions: true
database-schema-update: true
process-definition-location-prefix: classpath:/processes/
redis: redis:
database: 6 database: 2
host: 47.104.224.45 host: 47.104.224.45
timeout: 30s timeout: 30s
port: 6379 port: 6379
password: elink@888 password: elink@888
datasource: datasource:
druid: druid:
driver-class-name: com.mysql.jdbc.Driver driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://47.104.224.45:3308/epdc_activiti?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&useSSL=false url: jdbc:mysql://47.104.224.45:3308/epdc_activiti?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai
username: root username: root
password: shibei@888 password: shibei@888
cloud: cloud:
@ -38,15 +40,15 @@ spring:
seata: seata:
tx-service-group: epdc-activiti-server-fescar-service-group tx-service-group: epdc-activiti-server-fescar-service-group
#Oracle #Oracle
# driver-class-name: oracle.jdbc.OracleDriver # driver-class-name: oracle.jdbc.OracleDriver
# url: jdbc:oracle:thin:@localhost:1521:xe # url: jdbc:oracle:thin:@localhost:1521:xe
# username: renren_cloud # username: renren_cloud
# password: 123456 # password: 123456
#SQLServer #SQLServer
# driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver # driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
# url: jdbc:sqlserver://localhost:1433;DatabaseName=renren_cloud # url: jdbc:sqlserver://localhost:1433;DatabaseName=renren_cloud
# username: sa # username: sa
# password: 123456 # password: 123456
#postgresql #postgresql
# driver-class-name: org.postgresql.Driver # driver-class-name: org.postgresql.Driver
# url: jdbc:postgresql://localhost:5432/renren_cloud # url: jdbc:postgresql://localhost:5432/renren_cloud
@ -65,7 +67,7 @@ management:
mybatis-plus: mybatis-plus:
mapper-locations: classpath:/mapper/**/*.xml mapper-locations: classpath:/mapper/**/*.xml
#实体扫描,多个package用逗号或者分号分隔 #实体扫描,多个package用逗号或者分号分隔
typeAliasesPackage: io.renren.entity typeAliasesPackage: com.elink.esua.epdc.entity
global-config: global-config:
#数据库相关配置 #数据库相关配置
db-config: db-config:

BIN
esua-epdc/epdc-module/epdc-activiti/epdc-activiti-server/src/main/resources/processes/favicon.ico

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

21
esua-epdc/epdc-module/epdc-activiti/epdc-activiti-server/src/main/resources/registry.conf

@ -0,0 +1,21 @@
registry {
# file 、nacos 、eureka、redis、zk、consul、etcd3、sofa
type = "nacos"
nacos {
serverAddr = "47.104.224.45"
namespace = "public"
cluster = "default"
}
}
config {
# file、nacos 、apollo、zk、consul、etcd3
type = "nacos"
nacos {
serverAddr = "47.104.224.45"
namespace = "public"
cluster = "default"
}
}
Loading…
Cancel
Save