前言:此文章把流程设计器单独建立一个服务,通过接口供业务系统调用
一,pom.xml需要引入的包
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-json-converter</artifactId>
</dependency>
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-image-generator</artifactId>
</dependency>
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-engine</artifactId>
<version>7.1.0.M2</version>
</dependency>
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-spring</artifactId>
<version>7.1.0.M2</version>
</dependency>
二,引入流程model设计器,从activiti官网下载zip包,解压后把editor-app文件夹复制到resources下
如图
三:创建流程
建立ModelSaveRestResource类 实现ModelDataJsonConstants
```java
@RestController
public class ModelSaveRestResource implements ModelDataJsonConstants {
protected static final Logger LOGGER = LoggerFactory.getLogger(ModelSaveRestResource.class);
@Autowired
private RepositoryService repositoryService;
@Autowired
private ObjectMapper objectMapper;
@Value("${modelUrl}")
String modelUrl;
@RequestMapping(value = {"/service/model/{modelId}/save"}, method = {org.springframework.web.bind.annotation.RequestMethod.PUT})
// @ResponseStatus(HttpStatus.OK)
public void saveModel(@PathVariable String modelId,
@RequestParam(required = false) String json_xml,
@RequestParam(required = false) String svg_xml,
@RequestParam(required = false) String name,
@RequestParam(required = false) String description) {
try {
Model model = this.repositoryService.getModel(modelId);
System.out.println("ModelSaveRestResource.saveModel----------");
ObjectNode modelJson = (ObjectNode) this.objectMapper.readTree(model.getMetaInfo());
modelJson.put("name", name);
modelJson.put("description",description);
model.setMetaInfo(modelJson.toString());
model.setName(name);
this.repositoryService.saveModel(model);
this.repositoryService.addModelEditorSource(model.getId(), (json_xml.getBytes("utf-8")));
convertToPng(svg_xml,modelUrl+modelId+".png");
} catch (Exception e) {
LOGGER.error("Error saving model", e);
throw new ActivitiException("Error saving model", e);
}
}
生成png格式的流程图片,由于activiti7中没有生成png的方法了,所有要将获取到的svg转换成png,并保存到本地,直接上代码
```java
/**
* 将svg字符串转换为png
*
* @param svgCode svg代码
* @param pngFilePath 保存的路径
* @throws TranscoderException svg代码异常
* @throws IOException io错误
*/
public static void convertToPng(String svgCode, String pngFilePath) throws IOException,
TranscoderException {
File file = new File(pngFilePath);
FileOutputStream outputStream = null;
try {
file.createNewFile();
outputStream = new FileOutputStream(file);
convertToPng(svgCode, outputStream);
} finally {
if (outputStream != null) {
try {
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
/**
* 将svgCode转换成png文件。直接输出到流中
*
* @param svgCode svg代码
* @param outputStream 输出流
* @throws TranscoderException 异常
* @throws IOException io异常
*/
public static void convertToPng(String svgCode, OutputStream outputStream)
throws TranscoderException, IOException {
try {
byte[] bytes = svgCode.getBytes("utf-8");
PNGTranscoder t = new PNGTranscoder();
TranscoderInput input = new TranscoderInput(new ByteArrayInputStream(bytes));
TranscoderOutput output = new TranscoderOutput(outputStream);
t.transcode(input, output);
outputStream.flush();
} finally {
if (outputStream != null) {
try {
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
四,效果展示
输入http://127.0.0.1/modeler.html?modelId=58972228d5b64f3c936e7165177fc0e7,进入流程model流程设计器页面,根据业务设计流程
点保存
文件夹下面会生成,供前端页面显示
总结,SpringBoot+activiti7整合第一步,设计流程图,后续我会将如何实现流程的部署,发起,以及流程信息的查看更新出来,供大家参考。
生活不易,望大家多支持支持。
有不懂的同学可以联系我,我会第一时间解答