bpm:code review 钉钉流程设计器

This commit is contained in:
YunaiV 2024-04-08 22:46:58 +08:00
parent df936deeca
commit 95dbf4f8aa
6 changed files with 23 additions and 11 deletions

View File

@ -18,14 +18,19 @@ import java.util.Objects;
public enum BpmSimpleModelNodeType implements IntArrayValuable {
// TODO @jaosn-1014-2 是前端已经定义好的么感觉未来可以考虑搞成和 BPMN 尽量一致的单词哈类似 usertask 用户审批
// TODO @jason_NODE 都删除掉哈
START_EVENT_NODE(0, "开始节点"),
APPROVE_USER_NODE(1, "审批人节点"),
// 抄送人节点对应 BPMN ScriptTask. 使用ScriptTask 原因好像 ServiceTask 自定义属性不能写入 XML
SCRIPT_TASK_NODE(2, "抄送人节点"),
EXCLUSIVE_GATEWAY_NODE(4, "排他网关"),
PARALLEL_GATEWAY_FORK_NODE(5, "并行网关分叉节点"),
END_EVENT_NODE(-2, "结束节点"), // TODO @jaosn挪到 START_EVENT_NODE
APPROVE_USER_NODE(1, "审批人节点"), // TODO @jaosn是不是这里从 10 开始好点相当于说0-9 给开始和结束10-19 给各种节点20-29 给各种条件TODO @jason改成 USER_TASK 是不是好点呀
// 抄送人节点对应 BPMN ScriptTask. 使用ScriptTask 原因好像 ServiceTask 自定义属性不能写入 XML
// TODO @jasonServiceTask 自定义 xml有没啥报错信息
SCRIPT_TASK_NODE(2, "抄送人节点"), // TODO @jason是不是改成 COPY_TASK 好一点哈
EXCLUSIVE_GATEWAY_NODE(4, "排他网关"), // TODO @jason是不是改成叫 条件分支
PARALLEL_GATEWAY_FORK_NODE(5, "并行网关分叉节点"), // TODO @jason是不是一个 并行分支 就可以啦
PARALLEL_GATEWAY_JOIN_NODE(6, "并行网关聚合节点"),
END_EVENT_NODE(-2, "结束节点");
;
public static final int[] ARRAYS = Arrays.stream(values()).mapToInt(BpmSimpleModelNodeType::getType).toArray();

View File

@ -340,7 +340,7 @@ public class BpmnModelUtils {
return userTaskList;
}
// ========== TODO 芋艿这里得捉摸下 ==========
// ========== TODO @jason单独出一个 SimpleModelUtils定位上它是 BPMN 的精简模式 ==========
/**
* 仿钉钉流程设计模型数据结构(json) 转换成 Bpmn Model (待完善
@ -382,6 +382,7 @@ public class BpmnModelUtils {
}
BpmSimpleModelNodeType nodeType = BpmSimpleModelNodeType.valueOf(node.getType());
Assert.notNull(nodeType, "模型节点类型不支持");
// TODO @jason建议是addXXX 都改成 buildXXX构建出一个什么然后返回之后让这个方法添加到自己的结果里
switch (nodeType) {
case START_EVENT_NODE:
case APPROVE_USER_NODE:
@ -488,9 +489,11 @@ public class BpmnModelUtils {
ScriptTask scriptTask = new ScriptTask();
scriptTask.setId(node.getId());
scriptTask.setName(node.getName());
// TODO @jason建议使用 ServiceTask通过 executionListeners 实现
scriptTask.setScriptFormat(ScriptingEngines.DEFAULT_SCRIPTING_LANGUAGE);
scriptTask.setScript(BPMN_SIMPLE_COPY_EXECUTION_SCRIPT);
// 添加自定义属性
// TODO @jason可以使用 ServiceTask ExtensionAttribute
addExtensionAttributes(node, scriptTask);
mainProcess.addFlowElement(scriptTask);
}

View File

@ -53,7 +53,7 @@ public interface BpmModelService {
* @param id 编号
* @param xmlBytes BPMN XML bytes
*/
// TODO @芋艿可能要关注下
// TODO @芋艿感觉可以不修改这个方法而是额外加一个方法传入 idbpmnjson
void saveModelBpmnXml(String id, byte[] xmlBytes);
/**

View File

@ -26,6 +26,7 @@ import static cn.iocoder.yudao.module.bpm.enums.definition.BpmSimpleModelNodeTyp
import static cn.iocoder.yudao.module.bpm.framework.flowable.core.enums.BpmnModelConstants.USER_TASK_CANDIDATE_PARAM;
import static cn.iocoder.yudao.module.bpm.framework.flowable.core.enums.BpmnModelConstants.USER_TASK_CANDIDATE_STRATEGY;
// TODO @jason这块可以讨论下是不是合并成一个 BpmnModelServiceImpl
/**
* 仿钉钉流程设计 Service 实现类
*

View File

@ -44,9 +44,10 @@ public class BpmProcessInstanceCopyServiceImpl implements BpmProcessInstanceCopy
@Lazy // 延迟加载避免循环依赖
private BpmProcessDefinitionService processDefinitionService;
// TODO @芋艿这里多加了一个 name
@Override
public void createProcessInstanceCopy(Collection<Long> userIds, String processInstanceId, String taskId, String taskName) {
// 1.1 校验任务存在 暂时去掉这个校验. 因为任务可能仿钉钉快搭的抄送节点(ScriptTask)
// 1.1 校验任务存在 暂时去掉这个校验. 因为任务可能仿钉钉快搭的抄送节点(ScriptTask) TODO jason抄送节点会没有来源的 taskId
// Task task = taskService.getTask(taskId);
// if (ObjectUtil.isNull(task)) {
// throw exception(ErrorCodeConstants.TASK_NOT_EXISTS);

View File

@ -9,7 +9,7 @@ import org.springframework.stereotype.Service;
import java.util.Set;
/**
* 仿钉钉快搭各个节点 Service
* 仿钉钉快搭各个节点 Service TODO @jason注释要有空行哈
* @author jason
*/
@Service
@ -21,14 +21,16 @@ public class BpmSimpleNodeService {
private BpmProcessInstanceCopyService processInstanceCopyService;
/**
* 仿钉钉快搭抄送
* 仿钉钉快搭抄送 TODO @jason注释要有空行哈
* @param execution 执行的任务(ScriptTask)
*/
public Boolean copy(DelegateExecution execution) {
// TODO @芋艿可能要考虑系统抄送没有 taskId 的情况
Set<Long> userIds = taskCandidateInvoker.calculateUsers(execution);
FlowElement currentFlowElement = execution.getCurrentFlowElement();
processInstanceCopyService.createProcessInstanceCopy(userIds, execution.getProcessInstanceId(),
currentFlowElement.getId(), currentFlowElement.getName());
return Boolean.TRUE;
}
}