feat(process): 新增流程ID有效性验证功能

- 在IProcessService接口添加validateFlowId方法声明
- 在ProcessServiceImpl实现流程ID验证逻辑
- 在ProcessController添加validateFlowId接口供前端调用
- 支持检查流程ID是否在IProcessInstanceStatusEventService实现类中注册
This commit is contained in:
PIGCLOUD committed 2025-12-28 11:25:36 +08:00
1 parent d6c1a0aad1
commit 0ad5864476
3 files changed
+61 -2

No files matched your search

@@ -66,7 +66,7 @@ public class ProcessController {
* - delete: 删除流程(逻辑删除,可恢复)
* - 修改分组:传入groupId参数可将流程移动到其他分组
* </p>
*
*
* @param flowId 流程定义ID
* @param type 操作类型(stop/using/delete)
* @param groupId 流程分组ID(可选,用于修改流程所属分组)
@@ -78,4 +78,20 @@ public class ProcessController {
return processService.update(flowId, type, groupId);
}
/**
* 验证流程ID是否在所有IProcessInstanceStatusEventService实现类中存在
* <p>
* 用于前端表单验证,检查用户输入的流程ID是否已在系统中注册。
* 流程ID必须在某个IProcessInstanceStatusEventService实现类的getFlowId()方法中返回,
* 才能被认为是有效的流程ID。
* </p>
*
* @param flowId 流程定义ID
* @return 验证结果:true表示流程ID存在,false表示不存在
*/
@GetMapping("validateFlowId")
public R<Boolean> validateFlowId(@RequestParam String flowId) {
return processService.validateFlowId(flowId);
}
}
@@ -61,7 +61,7 @@ public interface IProcessService extends IService<Process> {
/**
* 更新流程状态或分组
*
*
* @param flowId 流程定义ID
* @param type 操作类型:stop(停用)、using(启用)、delete(删除)
* @param groupId 流程分组ID(可选,用于修改流程分组)
@@ -69,4 +69,12 @@ public interface IProcessService extends IService<Process> {
*/
R update(String flowId, String type, Long groupId);
/**
* 验证流程ID是否在所有IProcessInstanceStatusEventService实现类中存在
*
* @param flowId 流程定义ID
* @return 验证结果:true表示存在,false表示不存在
*/
R<Boolean> validateFlowId(String flowId);
}
@@ -24,6 +24,7 @@ import com.pig4cloud.pigx.flow.dto.NodeUser;
import com.pig4cloud.pigx.flow.entity.Process;
import com.pig4cloud.pigx.flow.entity.ProcessStarter;
import com.pig4cloud.pigx.flow.mapper.ProcessMapper;
import com.pig4cloud.pigx.flow.service.IProcessInstanceStatusEventService;
import com.pig4cloud.pigx.flow.service.IProcessService;
import com.pig4cloud.pigx.flow.service.IProcessStarterService;
import com.pig4cloud.pigx.flow.support.utils.ModelUtil;
@@ -42,6 +43,7 @@ import org.springframework.stereotype.Service;
import java.util.Date;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
/**
* 流程定义服务实现类
@@ -66,6 +68,8 @@ public class ProcessServiceImpl extends ServiceImpl<ProcessMapper, Process> impl
private final Sequence flowSequence;
private final Optional<List<IProcessInstanceStatusEventService>> processInstanceStatusEventServicesOptional;
/**
* 获取流程详细信息
* <p>
@@ -295,4 +299,35 @@ public class ProcessServiceImpl extends ServiceImpl<ProcessMapper, Process> impl
return R.ok();
}
/**
* 验证流程ID是否在所有IProcessInstanceStatusEventService实现类中存在
* <p>
* 遍历所有实现了IProcessInstanceStatusEventService接口的服务类,检查输入的flowId
* 是否与任意一个服务的getFlowId()返回值匹配。如果匹配则返回true,否则返回false。
* </p>
*
* @param flowId 流程定义ID
* @return 验证结果:true表示存在,false表示不存在
*/
@Override
public R<Boolean> validateFlowId(String flowId) {
// 如果flowId为空,直接返回false
if (StrUtil.isBlank(flowId)) {
return R.ok(false);
}
// 如果没有IProcessInstanceStatusEventService实现类,返回false
if (processInstanceStatusEventServicesOptional.isEmpty()) {
log.warn("未找到任何IProcessInstanceStatusEventService实现类");
return R.ok(false);
}
// 遍历所有实现类,检查flowId是否存在
List<IProcessInstanceStatusEventService> serviceList = processInstanceStatusEventServicesOptional.get();
boolean exists = serviceList.stream()
.anyMatch(service -> flowId.equals(service.getFlowId()));
return R.ok(exists);
}
}