feat(stream-proxy): 添加应用名修改时的唯一性验证

修改内容:
- update() 方法中添加 app+stream 唯一性检查
- 检测用户是否修改了 app 或 stream 字段
- 如果修改后与其他记录冲突,抛出友好的错误提示
- 错误消息:"应用名 [xxx] 下的流ID [yyy] 已存在"

场景示例:
原记录:大堂/001
用户修改为:停车场/001
系统检查:停车场下是否已有 001
- 如果已存在 → 抛出错误提示
- 如果不存在 → 允许修改

防止问题:
- 避免修改应用名后产生重复的 app+stream 组合
- 保持数据库唯一约束的完整性
- 提供清晰的用户反馈
This commit is contained in:
2026-02-25 13:50:24 +08:00
parent 8a540d59ba
commit 933a585242

View File

@@ -235,6 +235,18 @@ public class StreamProxyServiceImpl implements IStreamProxyService {
if (streamProxyInDb == null) { if (streamProxyInDb == null) {
throw new ControllerException(ErrorCode.ERROR100.getCode(), "代理不存在"); throw new ControllerException(ErrorCode.ERROR100.getCode(), "代理不存在");
} }
// 检查 app+stream 唯一性如果修改了app或stream
if (!streamProxyInDb.getApp().equals(streamProxy.getApp()) ||
!streamProxyInDb.getStream().equals(streamProxy.getStream())) {
StreamProxy duplicate = streamProxyMapper.selectOneByAppAndStream(
streamProxy.getApp(), streamProxy.getStream());
if (duplicate != null && !duplicate.getId().equals(streamProxy.getId())) {
throw new ControllerException(ErrorCode.ERROR100.getCode(),
"应用名 [" + streamProxy.getApp() + "] 下的流ID [" + streamProxy.getStream() + "] 已存在");
}
}
int updateResult = streamProxyMapper.update(streamProxy); int updateResult = streamProxyMapper.update(streamProxy);
if (updateResult > 0 && !ObjectUtils.isEmpty(streamProxy.getGbDeviceId())) { if (updateResult > 0 && !ObjectUtils.isEmpty(streamProxy.getGbDeviceId())) {
if (streamProxy.getGbId() > 0) { if (streamProxy.getGbId() > 0) {