From ea71e2c2c8b9ec2fe9a47fdfca6d807806a21f12 Mon Sep 17 00:00:00 2001
From: xiaoyi <908147524@qq.com>
Date: 星期一, 02 十一月 2026 15:13:34 +0800
Subject: [PATCH] fix(bpm): 修复发起流程报 500 - 流程定义编号 URL 编码归一化 + 缺失定义容错
---
yudao-module-bpm/src/main/java/cn/iocoder/yudao/module/bpm/service/definition/BpmProcessDefinitionServiceImpl.java | 44 +++++++++++++++++++++++++++++++++++++-------
1 files changed, 37 insertions(+), 7 deletions(-)
diff --git a/yudao-module-bpm/src/main/java/cn/iocoder/yudao/module/bpm/service/definition/BpmProcessDefinitionServiceImpl.java b/yudao-module-bpm/src/main/java/cn/iocoder/yudao/module/bpm/service/definition/BpmProcessDefinitionServiceImpl.java
index 8171fb0..713fcc6 100644
--- a/yudao-module-bpm/src/main/java/cn/iocoder/yudao/module/bpm/service/definition/BpmProcessDefinitionServiceImpl.java
+++ b/yudao-module-bpm/src/main/java/cn/iocoder/yudao/module/bpm/service/definition/BpmProcessDefinitionServiceImpl.java
@@ -11,12 +11,14 @@
import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmProcessDefinitionInfoDO;
import cn.iocoder.yudao.module.bpm.dal.mysql.definition.BpmProcessDefinitionInfoMapper;
import cn.iocoder.yudao.module.bpm.framework.flowable.core.enums.BpmnModelConstants;
+import cn.iocoder.yudao.module.bpm.framework.flowable.core.util.BpmProcessDefinitionIdUtils;
import cn.iocoder.yudao.module.bpm.framework.flowable.core.util.FlowableUtils;
import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.flowable.bpmn.model.BpmnModel;
+import org.flowable.common.engine.api.FlowableObjectNotFoundException;
import org.flowable.common.engine.impl.db.SuspensionState;
import org.flowable.engine.RepositoryService;
import org.flowable.engine.repository.Deployment;
@@ -39,7 +41,7 @@
*
* @author yunlongn
* @author ZJQ
- * @author 鑺嬮亾婧愮爜
+ * @author 瓒呯骇绠$悊鍛�
*/
@Service
@Validated
@@ -57,12 +59,27 @@
@Override
public ProcessDefinition getProcessDefinition(String id) {
- return repositoryService.getProcessDefinition(id);
+ String definitionId = BpmProcessDefinitionIdUtils.normalize(id);
+ if (StrUtil.isBlank(definitionId)) {
+ return null;
+ }
+ // 缂栧彿涓嶅瓨鍦ㄦ椂 Flowable 浼氭姏 FlowableObjectNotFoundException锛岃繖閲岀粺涓�杞垚 null 鐢辫皟鐢ㄦ柟澶勭悊锛�
+ // 閬垮厤鍓嶇鎷垮埌 500銆岀郴缁熷紓甯搞��
+ try {
+ return repositoryService.getProcessDefinition(definitionId);
+ } catch (FlowableObjectNotFoundException ex) {
+ log.warn("[getProcessDefinition][娴佺▼瀹氫箟({}) 涓嶅瓨鍦╙", definitionId);
+ return null;
+ }
}
@Override
public List<ProcessDefinition> getProcessDefinitionList(Set<String> ids) {
- return repositoryService.createProcessDefinitionQuery().processDefinitionIds(ids).list();
+ if (CollUtil.isEmpty(ids)) {
+ return emptyList();
+ }
+ return repositoryService.createProcessDefinitionQuery().processDefinitionIds(
+ ids.stream().map(BpmProcessDefinitionIdUtils::normalize).collect(java.util.stream.Collectors.toSet())).list();
}
@Override
@@ -85,7 +102,7 @@
public ProcessDefinition getActiveProcessDefinition(String key) {
return repositoryService.createProcessDefinitionQuery()
.processDefinitionTenantId(FlowableUtils.getTenantId())
- .processDefinitionKey(key).active().singleResult();
+ .processDefinitionKey(BpmProcessDefinitionIdUtils.normalize(key)).active().singleResult();
}
@Override
@@ -200,17 +217,30 @@
@Override
public BpmnModel getProcessDefinitionBpmnModel(String id) {
- return repositoryService.getBpmnModel(id);
+ String definitionId = BpmProcessDefinitionIdUtils.normalize(id);
+ if (StrUtil.isBlank(definitionId)) {
+ return null;
+ }
+ try {
+ return repositoryService.getBpmnModel(definitionId);
+ } catch (FlowableObjectNotFoundException ex) {
+ log.warn("[getProcessDefinitionBpmnModel][娴佺▼瀹氫箟({}) 涓嶅瓨鍦╙", definitionId);
+ return null;
+ }
}
@Override
public BpmProcessDefinitionInfoDO getProcessDefinitionInfo(String id) {
- return processDefinitionMapper.selectByProcessDefinitionId(id);
+ return processDefinitionMapper.selectByProcessDefinitionId(BpmProcessDefinitionIdUtils.normalize(id));
}
@Override
public List<BpmProcessDefinitionInfoDO> getProcessDefinitionInfoList(Collection<String> ids) {
- return processDefinitionMapper.selectListByProcessDefinitionIds(ids);
+ if (CollUtil.isEmpty(ids)) {
+ return emptyList();
+ }
+ return processDefinitionMapper.selectListByProcessDefinitionIds(
+ ids.stream().map(BpmProcessDefinitionIdUtils::normalize).collect(java.util.stream.Collectors.toSet()));
}
@Override
--
Gitblit v1.9.3