flowableUI源码分析(一)

雨点打透心脏的1/2处 2023-10-01 21:38 78阅读 0赞

计划从flowable–ui-admin包下源码入手,分析flowable框架操作sql表情况。然后再看flowable-engine包下源码,最后根据理解设计出自己的工作流后台。

修改配置类 “flowable-default.properties” 文件

  1. spring.datasource.driver-class-name=com.mysql.jdbc.Driver
  2. spring.datasource.url=jdbc:mysql://127.0.0.1:3306/project_flowable?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
  3. spring.datasource.username=root
  4. spring.datasource.password=root

启动admin后台

运行package org.flowable.ui.application

启动类FlowableUiApplication.java

1. Model类

UI应用,使用 Model类来存储BPM流程图、表单、流程应用。

创建BPM的XML流程图、表单、流程应用。都会创建到 act_de_model 表中

代码通过常量定义model的类型

  1. public static final int MODEL_TYPE_BPMN = 0;
  2. public static final int MODEL_TYPE_FORM = 2;
  3. public static final int MODEL_TYPE_APP = 3;
  4. public static final int MODEL_TYPE_DECISION_TABLE = 4;
  5. public static final int MODEL_TYPE_CMMN = 5;
  6. public static final int MODEL_TYPE_DECISION_SERVICE = 6;

持久化业务代码逻辑

  1. protected Model persistModel(Model model) {
  2. if (StringUtils.isNotEmpty(model.getModelEditorJson())) {
  3. // Parse json to java
  4. ObjectNode jsonNode = null;
  5. try {
  6. jsonNode = (ObjectNode) objectMapper.readTree(model.getModelEditorJson());
  7. } catch (Exception e) {
  8. LOGGER.error("Could not deserialize json model", e);
  9. throw new InternalServerErrorException("Could not deserialize json model");
  10. }
  11. // 1.BPM流程图持久化方案
  12. if ((model.getModelType() == null || model.getModelType().intValue() == Model.MODEL_TYPE_BPMN)) {
  13. // Thumbnail
  14. byte[] thumbnail = modelImageService.generateThumbnailImage(model, jsonNode);
  15. if (thumbnail != null) {
  16. model.setThumbnail(thumbnail);
  17. }
  18. modelRepository.save(model);
  19. // Relations
  20. handleBpmnProcessFormModelRelations(model, jsonNode);
  21. handleBpmnProcessDecisionTaskModelRelations(model, jsonNode);
  22. }
  23. // 2.表单持久化方案
  24. else if (model.getModelType().intValue() == Model.MODEL_TYPE_FORM ||
  25. model.getModelType().intValue() == Model.MODEL_TYPE_DECISION_TABLE) {
  26. jsonNode.put("name", model.getName());
  27. jsonNode.put("key", model.getKey());
  28. modelRepository.save(model);
  29. } else if (model.getModelType().intValue() == Model.MODEL_TYPE_APP) {
  30. modelRepository.save(model);
  31. handleAppModelProcessRelations(model, jsonNode);
  32. }
  33. }
  34. return model;
  35. }

2. 创建BPM流程图

2.1 接口
  1. /**
  2. * 创建BPM流程模型
  3. *
  4. * @param modelRepresentation
  5. * @return
  6. */
  7. @PostMapping(value = "/rest/models", produces = "application/json")
  8. public ModelRepresentation createModel(@RequestBody ModelRepresentation modelRepresentation) {
  9. modelRepresentation.setKey(modelRepresentation.getKey().replaceAll(" ", ""));
  10. checkForDuplicateKey(modelRepresentation);
  11. String json = modelService.createModelJson(modelRepresentation);
  12. Model newModel = modelService.createModel(modelRepresentation, json, SecurityUtils.getCurrentUserId());
  13. return new ModelRepresentation(newModel);
  14. }
2.2 BPM模型实体类封装。
  1. @Override
  2. public Model createModel(ModelRepresentation model, String editorJson, String createdBy) {
  3. Model newModel = new Model();
  4. newModel.setVersion(1);
  5. newModel.setName(model.getName());
  6. newModel.setKey(model.getKey());
  7. newModel.setModelType(model.getModelType());
  8. newModel.setCreated(Calendar.getInstance().getTime());
  9. newModel.setCreatedBy(createdBy);
  10. newModel.setDescription(model.getDescription());
  11. newModel.setModelEditorJson(editorJson);
  12. newModel.setLastUpdated(Calendar.getInstance().getTime());
  13. newModel.setLastUpdatedBy(createdBy);
  14. newModel.setTenantId(model.getTenantId());
  15. //持久化
  16. persistModel(newModel);
  17. return newModel;
  18. }
2.3 BPM持久化方案
  1. // 1.BPM流程图持久化方案
  2. if ((model.getModelType() == null || model.getModelType().intValue() == Model.MODEL_TYPE_BPMN)) {
  3. // 生成缩略图
  4. byte[] thumbnail = modelImageService.generateThumbnailImage(model, jsonNode);
  5. if (thumbnail != null) {
  6. model.setThumbnail(thumbnail);
  7. }
  8. // 入库持久化
  9. modelRepository.save(model);
  10. // Relations
  11. handleBpmnProcessFormModelRelations(model, jsonNode);
  12. handleBpmnProcessDecisionTaskModelRelations(model, jsonNode);
  13. }

发表评论

表情:
评论列表 (有 0 条评论,78人围观)

还没有评论,来说两句吧...

相关阅读

    相关 HashMap分析()

    之前有写到ArrayList的源码分析,欢迎大家点开我的头像查看 对于HashMap这个类大家一定不陌生,想必多多少少用过或者了解过,今天我来和大家谈谈HashMap的源码,