ModelController.java 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. package com.jtgh.yjpt.controller;
  2. import java.util.List;
  3. import org.activiti.bpmn.converter.BpmnXMLConverter;
  4. import org.activiti.bpmn.model.BpmnModel;
  5. import org.activiti.editor.constants.ModelDataJsonConstants;
  6. import org.activiti.editor.language.json.converter.BpmnJsonConverter;
  7. import org.activiti.engine.RepositoryService;
  8. import org.activiti.engine.repository.Model;
  9. import org.apache.commons.lang3.StringUtils;
  10. import org.codehaus.jackson.map.ObjectMapper;
  11. import org.codehaus.jackson.node.ObjectNode;
  12. import org.slf4j.Logger;
  13. import org.slf4j.LoggerFactory;
  14. import org.springframework.beans.factory.annotation.Autowired;
  15. import org.springframework.flex.remoting.RemotingDestination;
  16. import org.springframework.stereotype.Controller;
  17. import com.jtgh.yjpt.common.BusinessContext;
  18. @Controller
  19. @RemotingDestination
  20. public class ModelController extends BaseController {
  21. protected Logger logger = LoggerFactory.getLogger(getClass());
  22. @Autowired
  23. private RepositoryService repositoryService;
  24. /**
  25. * 创建模型
  26. * @param name
  27. * @param key
  28. * @param description
  29. * @return
  30. */
  31. public BusinessContext createModel(String name, String key,
  32. String description) {
  33. BusinessContext bc = createBusinessContext();
  34. try {
  35. ObjectMapper objectMapper = new ObjectMapper();
  36. ObjectNode editorNode = objectMapper.createObjectNode();
  37. editorNode.put("id", "canvas");
  38. editorNode.put("resourceId", "canvas");
  39. ObjectNode stencilSetNode = objectMapper.createObjectNode();
  40. stencilSetNode.put("namespace",
  41. "http://b3mn.org/stencilset/bpmn2.0#");
  42. editorNode.put("stencilset", stencilSetNode);
  43. Model modelData = repositoryService.newModel();
  44. ObjectNode modelObjectNode = objectMapper.createObjectNode();
  45. modelObjectNode.put(ModelDataJsonConstants.MODEL_NAME, name);
  46. modelObjectNode.put(ModelDataJsonConstants.MODEL_REVISION, 1);
  47. description = StringUtils.defaultString(description);
  48. modelObjectNode.put(ModelDataJsonConstants.MODEL_DESCRIPTION,
  49. description);
  50. modelData.setMetaInfo(modelObjectNode.toString());
  51. modelData.setName(name);
  52. modelData.setKey(StringUtils.defaultString(key));
  53. repositoryService.saveModel(modelData);
  54. repositoryService.addModelEditorSource(modelData.getId(),
  55. editorNode.toString().getBytes("utf-8"));
  56. } catch (Exception e) {
  57. logger.error("创建模型失败:", e);
  58. bc.setAttribute("success", false);
  59. bc.setAttribute("message", "创建模型失败!" );
  60. }
  61. return bc;
  62. }
  63. /**
  64. * 根据Model部署流程
  65. */
  66. public BusinessContext deploy(String modelId) {
  67. BusinessContext bc = createBusinessContext();
  68. try {
  69. Model modelData = repositoryService.getModel(modelId);
  70. ObjectNode modelNode = (ObjectNode) new ObjectMapper()
  71. .readTree(repositoryService.getModelEditorSource(modelData
  72. .getId()));
  73. byte[] bpmnBytes = null;
  74. BpmnModel model = new BpmnJsonConverter()
  75. .convertToBpmnModel(modelNode);
  76. bpmnBytes = new BpmnXMLConverter().convertToXML(model);
  77. String processName = modelData.getName() + ".bpmn20.xml";
  78. repositoryService.createDeployment().name(modelData.getName())
  79. .addString(processName, new String(bpmnBytes)).deploy();
  80. } catch (Exception e) {
  81. logger.error("根据模型部署流程失败:modelId={}", modelId, e);
  82. bc.setAttribute("success", false);
  83. bc.setAttribute("message", "根据模型部署流程失败:modelId=" + modelId);
  84. }
  85. return bc;
  86. }
  87. /**
  88. * 删除流程
  89. * @param modelId
  90. * @return
  91. */
  92. public BusinessContext delete(String modelId) {
  93. repositoryService.deleteModel(modelId);
  94. return createBusinessContext();
  95. }
  96. /**
  97. * 根据条件查询用户列表
  98. *
  99. * @param spec
  100. * @param pageable
  101. * @return
  102. */
  103. public BusinessContext list() {
  104. List<Model> list = repositoryService.createModelQuery().list();
  105. return creaBusinessContext(list);
  106. }
  107. }