package com.jtgh.yjpt.controller; import java.util.List; 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.repository.Model; import org.apache.commons.lang3.StringUtils; import org.codehaus.jackson.map.ObjectMapper; import org.codehaus.jackson.node.ObjectNode; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.flex.remoting.RemotingDestination; import org.springframework.stereotype.Controller; import com.jtgh.yjpt.common.BusinessContext; @Controller @RemotingDestination public class ModelController extends BaseController { protected Logger logger = LoggerFactory.getLogger(getClass()); @Autowired private RepositoryService repositoryService; /** * 创建模型 * @param name * @param key * @param description * @return */ public BusinessContext createModel(String name, String key, String description) { BusinessContext bc = createBusinessContext(); try { 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")); } catch (Exception e) { logger.error("创建模型失败:", e); bc.setAttribute("success", false); bc.setAttribute("message", "创建模型失败!" ); } return bc; } /** * 根据Model部署流程 */ public BusinessContext deploy(String modelId) { BusinessContext bc = createBusinessContext(); try { 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"; repositoryService.createDeployment().name(modelData.getName()) .addString(processName, new String(bpmnBytes)).deploy(); } catch (Exception e) { logger.error("根据模型部署流程失败:modelId={}", modelId, e); bc.setAttribute("success", false); bc.setAttribute("message", "根据模型部署流程失败:modelId=" + modelId); } return bc; } /** * 删除流程 * @param modelId * @return */ public BusinessContext delete(String modelId) { repositoryService.deleteModel(modelId); return createBusinessContext(); } /** * 根据条件查询用户列表 * * @param spec * @param pageable * @return */ public BusinessContext list() { List list = repositoryService.createModelQuery().list(); return creaBusinessContext(list); } }