Commit 1b708ccd5567b29b659ca101c5c5720f4bb8e2ce
1 parent
b504d984
BPM:code review 快搭的实现
Showing
10 changed files
with
21 additions
and
9 deletions
yudao-module-bpm/yudao-module-bpm-api/src/main/java/cn/iocoder/yudao/module/bpm/enums/ErrorCodeConstants.java
| ... | ... | @@ -76,5 +76,7 @@ public interface ErrorCodeConstants { |
| 76 | 76 | ErrorCode PROCESS_EXPRESSION_NOT_EXISTS = new ErrorCode(1_009_014_000, "流程表达式不存在"); |
| 77 | 77 | |
| 78 | 78 | // ========== BPM 仿钉钉流程设计器 1-009-015-000 ========== |
| 79 | + // TODO @芋艿:这个错误码,需要关注下 | |
| 79 | 80 | ErrorCode CONVERT_TO_SIMPLE_MODEL_NOT_SUPPORT = new ErrorCode(1_009_015_000, "该流程模型不支持仿钉钉设计流程"); |
| 81 | + | |
| 80 | 82 | } | ... | ... |
yudao-module-bpm/yudao-module-bpm-api/src/main/java/cn/iocoder/yudao/module/bpm/enums/definition/BpmSimpleModelNodeType.java
| ... | ... | @@ -17,6 +17,7 @@ import java.util.Objects; |
| 17 | 17 | @AllArgsConstructor |
| 18 | 18 | public enum BpmSimpleModelNodeType implements IntArrayValuable { |
| 19 | 19 | |
| 20 | + // TODO @jaosn:-1、0、1、4、-2 是前端已经定义好的么?感觉未来可以考虑搞成和 BPMN 尽量一致的单词哈;类似 usertask 用户审批; | |
| 20 | 21 | START_NODE(-1, "开始节点"), |
| 21 | 22 | START_USER_NODE(0, "发起人结点"), |
| 22 | 23 | APPROVE_USER_NODE (1, "审批人节点"), |
| ... | ... | @@ -41,4 +42,5 @@ public enum BpmSimpleModelNodeType implements IntArrayValuable { |
| 41 | 42 | public int[] array() { |
| 42 | 43 | return ARRAYS; |
| 43 | 44 | } |
| 45 | + | |
| 44 | 46 | } | ... | ... |
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/definition/BpmSimpleModelController.java
| ... | ... | @@ -14,6 +14,7 @@ import org.springframework.web.bind.annotation.*; |
| 14 | 14 | |
| 15 | 15 | import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; |
| 16 | 16 | |
| 17 | +// TODO @芋艿:后续考虑下,怎么放这个 Controller | |
| 17 | 18 | @Tag(name = "管理后台 - BPM 仿钉钉流程设计器") |
| 18 | 19 | @RestController |
| 19 | 20 | @RequestMapping("/bpm/simple") | ... | ... |
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/definition/vo/simple/BpmSimpleModelNodeVO.java
| ... | ... | @@ -16,7 +16,7 @@ public class BpmSimpleModelNodeVO { |
| 16 | 16 | |
| 17 | 17 | @Schema(description = "模型节点编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "StartEvent_1") |
| 18 | 18 | @NotEmpty(message = "模型节点编号不能为空") |
| 19 | - private String id; | |
| 19 | + private String id; | |
| 20 | 20 | |
| 21 | 21 | @Schema(description = "模型节点类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") |
| 22 | 22 | @NotNull(message = "模型节点类型不能为空") |
| ... | ... | @@ -33,5 +33,6 @@ public class BpmSimpleModelNodeVO { |
| 33 | 33 | private List<BpmSimpleModelNodeVO> conditionNodes; |
| 34 | 34 | |
| 35 | 35 | @Schema(description = "节点的属性") |
| 36 | - private Map<String, Object> attributes; | |
| 36 | + private Map<String, Object> attributes; | |
| 37 | + | |
| 37 | 38 | } | ... | ... |
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/definition/vo/simple/BpmSimpleModelSaveReqVO.java
| ... | ... | @@ -6,6 +6,7 @@ import jakarta.validation.constraints.NotEmpty; |
| 6 | 6 | import jakarta.validation.constraints.NotNull; |
| 7 | 7 | import lombok.Data; |
| 8 | 8 | |
| 9 | +// TODO @芋艿:或许挪到 model 里的 simple 包 | |
| 9 | 10 | @Schema(description = "管理后台 - 仿钉钉流程设计模型的新增/修改 Request VO") |
| 10 | 11 | @Data |
| 11 | 12 | public class BpmSimpleModelSaveReqVO { |
| ... | ... | @@ -18,4 +19,5 @@ public class BpmSimpleModelSaveReqVO { |
| 18 | 19 | @NotNull(message = "仿钉钉流程设计模型对象不能为空") |
| 19 | 20 | @Valid |
| 20 | 21 | private BpmSimpleModelNodeVO simpleModelBody; |
| 22 | + | |
| 21 | 23 | } | ... | ... |
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/framework/flowable/core/enums/BpmnModelConstants.java
| ... | ... | @@ -28,6 +28,7 @@ public interface BpmnModelConstants { |
| 28 | 28 | */ |
| 29 | 29 | String USER_TASK_CANDIDATE_PARAM = "candidateParam"; |
| 30 | 30 | |
| 31 | + // TODO @芋艿:这里后面得关注下; | |
| 31 | 32 | /** |
| 32 | 33 | * BPMN End Event 节点 Id, 用于后端生成 End Event 节点 |
| 33 | 34 | */ |
| ... | ... | @@ -36,6 +37,6 @@ public interface BpmnModelConstants { |
| 36 | 37 | /** |
| 37 | 38 | * 支持转仿钉钉设计模型的 Bpmn 节点 |
| 38 | 39 | */ |
| 39 | - Set<Class<? extends FlowNode>> SUPPORT_CONVERT_SIMPLE_FlOW_NODES = ImmutableSet.of(UserTask.class, EndEvent.class); | |
| 40 | + Set<Class<? extends FlowNode>> SUPPORT_CONVERT_SIMPLE_FlOW_NODES = ImmutableSet.of(UserTask.class, EndEvent.class); | |
| 40 | 41 | |
| 41 | 42 | } | ... | ... |
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/framework/flowable/core/util/BpmnModelUtils.java
| ... | ... | @@ -335,6 +335,8 @@ public class BpmnModelUtils { |
| 335 | 335 | return userTaskList; |
| 336 | 336 | } |
| 337 | 337 | |
| 338 | + // ========== TODO 芋艿:这里得捉摸下; ========== | |
| 339 | + | |
| 338 | 340 | /** |
| 339 | 341 | * 仿钉钉流程设计模型数据结构(json) 转换成 Bpmn Model (待完善) |
| 340 | 342 | * |
| ... | ... | @@ -359,7 +361,6 @@ public class BpmnModelUtils { |
| 359 | 361 | addBpmnSequenceFlow(mainProcess, simpleModelNode); |
| 360 | 362 | // 自动布局 |
| 361 | 363 | new BpmnAutoLayout(bpmnModel).execute(); |
| 362 | - | |
| 363 | 364 | return bpmnModel; |
| 364 | 365 | } |
| 365 | 366 | |
| ... | ... | @@ -396,7 +397,6 @@ public class BpmnModelUtils { |
| 396 | 397 | sequenceFlow.setConditionExpression(conditionExpression); |
| 397 | 398 | } |
| 398 | 399 | mainProcess.addFlowElement(sequenceFlow); |
| 399 | - | |
| 400 | 400 | } |
| 401 | 401 | |
| 402 | 402 | private static void addBpmnFlowNode(Process mainProcess, BpmSimpleModelNodeVO simpleModelNode) { | ... | ... |
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/definition/BpmModelService.java
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/definition/BpmSimpleModelService.java
| ... | ... | @@ -13,14 +13,17 @@ public interface BpmSimpleModelService { |
| 13 | 13 | |
| 14 | 14 | /** |
| 15 | 15 | * 保存仿钉钉流程设计模型 |
| 16 | + * | |
| 16 | 17 | * @param reqVO 请求信息 |
| 17 | 18 | */ |
| 18 | 19 | Boolean saveSimpleModel(@Valid BpmSimpleModelSaveReqVO reqVO); |
| 19 | 20 | |
| 20 | 21 | /** |
| 21 | 22 | * 获取仿钉钉流程设计模型结构 |
| 23 | + * | |
| 22 | 24 | * @param modelId 流程模型编号 |
| 23 | 25 | * @return 仿钉钉流程设计模型结构 |
| 24 | 26 | */ |
| 25 | 27 | BpmSimpleModelNodeVO getSimpleModel(String modelId); |
| 28 | + | |
| 26 | 29 | } | ... | ... |
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/definition/BpmSimpleModelServiceImpl.java
| ... | ... | @@ -32,6 +32,7 @@ import static cn.iocoder.yudao.module.bpm.framework.flowable.core.enums.BpmnMode |
| 32 | 32 | @Service |
| 33 | 33 | @Validated |
| 34 | 34 | public class BpmSimpleModelServiceImpl implements BpmSimpleModelService { |
| 35 | + | |
| 35 | 36 | @Resource |
| 36 | 37 | private BpmModelService bpmModelService; |
| 37 | 38 | |
| ... | ... | @@ -48,7 +49,7 @@ public class BpmSimpleModelServiceImpl implements BpmSimpleModelService { |
| 48 | 49 | // bpmModelService.saveModelBpmnXml(model.getId(), BpmnModelUtils.getBpmnXml(bpmnModel)); |
| 49 | 50 | // return Boolean.TRUE; |
| 50 | 51 | // } else { |
| 51 | -// // TODO BPMN XML 已经存在。如何修改 ?? | |
| 52 | +// // TODO BPMN XML 已经存在。如何修改 ?? TODO add by 芋艿:感觉一个流程,只能二选一,要么 bpmn、要么 simple | |
| 52 | 53 | // return Boolean.FALSE; |
| 53 | 54 | // } |
| 54 | 55 | // 暂时直接修改 |
| ... | ... | @@ -66,9 +67,9 @@ public class BpmSimpleModelServiceImpl implements BpmSimpleModelService { |
| 66 | 67 | byte[] bpmnBytes = bpmModelService.getModelBpmnXML(modelId); |
| 67 | 68 | BpmnModel bpmnModel = BpmnModelUtils.getBpmnModel(bpmnBytes); |
| 68 | 69 | return convertBpmnModelToSimpleModel(bpmnModel); |
| 69 | - | |
| 70 | 70 | } |
| 71 | 71 | |
| 72 | + // TODO @jason:一般要支持这个么?感觉 bpmn 转 json 支持会不会太复杂。可以优先级低一点,做下调研~ | |
| 72 | 73 | /** |
| 73 | 74 | * Bpmn Model 转换成 仿钉钉流程设计模型数据结构(json) 待完善 |
| 74 | 75 | * |
| ... | ... | @@ -89,7 +90,6 @@ public class BpmSimpleModelServiceImpl implements BpmSimpleModelService { |
| 89 | 90 | rootNode.setName(startEvent.getName()); |
| 90 | 91 | recursiveBuildSimpleModelNode(startEvent, rootNode); |
| 91 | 92 | return rootNode; |
| 92 | - | |
| 93 | 93 | } |
| 94 | 94 | |
| 95 | 95 | private void recursiveBuildSimpleModelNode(FlowNode currentFlowNode, BpmSimpleModelNodeVO currentSimpleModeNode) { |
| ... | ... | @@ -113,7 +113,6 @@ public class BpmSimpleModelServiceImpl implements BpmSimpleModelService { |
| 113 | 113 | // TODO 其它节点类型待实现 |
| 114 | 114 | } |
| 115 | 115 | |
| 116 | - | |
| 117 | 116 | private BpmSimpleModelNodeVO convertUserTaskToSimpleModelNode(UserTask userTask) { |
| 118 | 117 | BpmSimpleModelNodeVO simpleModelNodeVO = new BpmSimpleModelNodeVO(); |
| 119 | 118 | simpleModelNodeVO.setType(BpmSimpleModelNodeType.APPROVE_USER_NODE.getType()); | ... | ... |