1. 背景

    Activiti
Modeler有个功能可以将已经部署的流程重新转化为可编辑模型,感觉这个功能还是很有实用价值的,百度后发现没有人整合过,所以自己看了源码,做了整合,下面分享给大家。

2. 代码分享

package com.ssm.service.manager; import
com.fasterxml.jackson.databind.ObjectMapper; import
com.fasterxml.jackson.databind.node.ObjectNode; import
com.ssm.common.ImpoerModelUtil; import com.ssm.common.util.layui.LayuiUnit;
import com.ssm.mapper.activiti.manager.ProcessManagerMapper; import
com.ssm.vo.activiti.manager.BaseManagerQueryVo; import
com.ssm.vo.activiti.manager.ProcessDefineModel; import
org.activiti.editor.constants.ModelDataJsonConstants; import
org.activiti.engine.ProcessEngine; import
org.activiti.engine.RepositoryService; import
org.activiti.engine.repository.Model; import
org.apache.commons.lang.StringUtils; import
org.springframework.stereotype.Service; import javax.annotation.Resource;
import java.io.InputStream; import java.util.List; @Service public class
ProcessManagerService { @Resource private ProcessManagerMapper
processManagerMapper; @Resource private RepositoryService repositoryService;
@Resource private ProcessEngine processEngine; @Resource private ObjectMapper
objectMapper; @Resource private ImpoerModelUtil impoerModelUtil; /** *
流程转化为可编辑模型 * * @param processDefineModel */ public String
changeProcessToModel(ProcessDefineModel processDefineModel) { Model modelData =
repositoryService.newModel(); // 初始化Model ObjectNode modelObjectNode =
objectMapper.createObjectNode();
modelObjectNode.put(ModelDataJsonConstants.MODEL_NAME,
processDefineModel.getName());
modelObjectNode.put(ModelDataJsonConstants.MODEL_REVISION, 1);
modelObjectNode.put(ModelDataJsonConstants.MODEL_DESCRIPTION,
processDefineModel.getDescription());
modelData.setMetaInfo(modelObjectNode.toString());
modelData.setName(processDefineModel.getName());
modelData.setKey(processDefineModel.getKey()); // 保存模型
repositoryService.saveModel(modelData); String deploymentId =
processDefineModel.getDeploymentId(); String processDefineResourceName = null;
// 通过deploymentId取得某个部署的资源的名称 List<String> resourceNames =
processEngine.getRepositoryService().getDeploymentResourceNames(deploymentId);
if (resourceNames != null && resourceNames.size() > 0) { for (String temp :
resourceNames) { if (temp.indexOf(".xml") > 0) { processDefineResourceName =
temp; } } } /* * 读取资源 * deploymentId:部署的id * resourceName:资源的文件名 */ InputStream
bpmnStream = processEngine.getRepositoryService()
.getResourceAsStream(deploymentId, processDefineResourceName);
impoerModelUtil.creatModelByImpoutStream(bpmnStream, modelData.getId()); return
modelData.getId(); } /** * 删除部署流程(单个删除与批量删除) * * @param deploymentIds
:被删除部署流程ID * @param deleteFlag : 是否级联删除,1.true级联删除;2.false非级联删除 */ public void
deleteProcessDeployments(String deploymentIds, boolean deleteFlag) { String[]
deploymentIdArray = deploymentIds.split(","); for (String deploymentId :
deploymentIdArray) { if (StringUtils.isNotEmpty(deploymentId)) {
processEngine.getRepositoryService().deleteDeployment(deploymentId,
deleteFlag); } } } }
 

package com.ssm.common; import
com.fasterxml.jackson.databind.node.ObjectNode; 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.explorer.util.XmlUtil; import
org.springframework.stereotype.Component; import javax.annotation.Resource;
import javax.xml.stream.XMLInputFactory; import
javax.xml.stream.XMLStreamException; import javax.xml.stream.XMLStreamReader;
import java.io.IOException; import java.io.InputStream; import
java.io.InputStreamReader; import java.io.UnsupportedEncodingException;
@Component public class ImpoerModelUtil { @Resource private RepositoryService
repositoryService; /** * 创建Model二进制信息 * @param bpmnStream * @param ModelID */
public void creatModelByImpoutStream(InputStream bpmnStream, String ModelID) {
XMLInputFactory xif; InputStreamReader in = null; XMLStreamReader xtr = null;
try { xif = XmlUtil.createSafeXmlInputFactory(); in = new
InputStreamReader(bpmnStream, "UTF-8"); xtr = xif.createXMLStreamReader(in);
BpmnModel bpmnModel = (new BpmnXMLConverter()).convertToBpmnModel(xtr);
ObjectNode modelNode = new BpmnJsonConverter().convertToJson(bpmnModel);
repositoryService.addModelEditorSource(ModelID,
modelNode.toString().getBytes("utf-8")); } catch (XMLStreamException e) {
e.printStackTrace(); } catch (UnsupportedEncodingException e) {
e.printStackTrace(); } finally { if (xtr != null) { try { xtr.close(); } catch
(XMLStreamException e) { e.printStackTrace(); } } if (in != null) { try {
in.close(); } catch (IOException e) { e.printStackTrace(); } } if (bpmnStream
!= null) { try { bpmnStream.close(); } catch (IOException e) {
e.printStackTrace(); } } } } }
3. 效果展示





 

友情链接
KaDraw流程图
API参考文档
OK工具箱
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:ixiaoyang8@qq.com
QQ群:637538335
关注微信