mirror of
https://github.com/xinnan-tech/xiaozhi-esp32-server.git
synced 2026-07-22 07:03:53 +08:00
调整模版排序的漏洞
This commit is contained in:
+15
-1
@@ -106,6 +106,9 @@ public class AgentTemplateController {
|
||||
@Operation(summary = "创建模板")
|
||||
@RequiresPermissions("sys:role:superAdmin")
|
||||
public Result<AgentTemplateEntity> createAgentTemplate(@Valid @RequestBody AgentTemplateEntity template) {
|
||||
// 设置排序值为下一个可用的序号
|
||||
template.setSort(agentTemplateService.getNextAvailableSort());
|
||||
|
||||
boolean saved = agentTemplateService.save(template);
|
||||
if (saved) {
|
||||
return ResultUtils.success(template);
|
||||
@@ -130,9 +133,20 @@ public class AgentTemplateController {
|
||||
@Operation(summary = "删除模板")
|
||||
@RequiresPermissions("sys:role:superAdmin")
|
||||
public Result<String> deleteAgentTemplate(@PathVariable("id") String id) {
|
||||
// 先查询要删除的模板信息,获取其排序值
|
||||
AgentTemplateEntity template = agentTemplateService.getById(id);
|
||||
if (template == null) {
|
||||
return ResultUtils.error("模板不存在");
|
||||
}
|
||||
|
||||
Integer deletedSort = template.getSort();
|
||||
|
||||
// 执行删除操作
|
||||
boolean deleted = agentTemplateService.removeById(id);
|
||||
if (deleted) {
|
||||
return ResultUtils.success("删除成功");
|
||||
// 删除成功后,重新排序剩余模板
|
||||
agentTemplateService.reorderTemplatesAfterDelete(deletedSort);
|
||||
return ResultUtils.success("删除模板成功");
|
||||
} else {
|
||||
return ResultUtils.error("删除模板失败");
|
||||
}
|
||||
|
||||
+14
@@ -25,4 +25,18 @@ public interface AgentTemplateService extends IService<AgentTemplateEntity> {
|
||||
* @param modelId 模型ID
|
||||
*/
|
||||
void updateDefaultTemplateModelId(String modelType, String modelId);
|
||||
|
||||
/**
|
||||
* 删除模板后重新排序剩余模板
|
||||
*
|
||||
* @param deletedSort 被删除模板的排序值
|
||||
*/
|
||||
void reorderTemplatesAfterDelete(Integer deletedSort);
|
||||
|
||||
/**
|
||||
* 获取下一个可用的排序序号(寻找最小的未使用序号)
|
||||
*
|
||||
* @return 下一个可用的排序序号
|
||||
*/
|
||||
Integer getNextAvailableSort();
|
||||
}
|
||||
|
||||
+49
@@ -10,6 +10,11 @@ import xiaozhi.modules.agent.dao.AgentTemplateDao;
|
||||
import xiaozhi.modules.agent.entity.AgentTemplateEntity;
|
||||
import xiaozhi.modules.agent.service.AgentTemplateService;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.util.stream.Collectors;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
|
||||
/**
|
||||
* @author chenerlei
|
||||
* @description 针对表【ai_agent_template(智能体配置模板表)】的数据库操作Service实现
|
||||
@@ -69,4 +74,48 @@ public class AgentTemplateServiceImpl extends ServiceImpl<AgentTemplateDao, Agen
|
||||
wrapper.ge("sort", 0);
|
||||
update(wrapper);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void reorderTemplatesAfterDelete(Integer deletedSort) {
|
||||
if (deletedSort == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
// 查询所有排序值大于被删除模板的记录
|
||||
UpdateWrapper<AgentTemplateEntity> updateWrapper = new UpdateWrapper<>();
|
||||
updateWrapper.gt("sort", deletedSort)
|
||||
.setSql("sort = sort - 1");
|
||||
|
||||
// 执行批量更新,将这些记录的排序值减1
|
||||
this.update(updateWrapper);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Integer getNextAvailableSort() {
|
||||
// 查询所有已存在的排序值并按升序排序
|
||||
List<Integer> sortValues = baseMapper.selectList(new QueryWrapper<AgentTemplateEntity>())
|
||||
.stream()
|
||||
.map(AgentTemplateEntity::getSort)
|
||||
.filter(Objects::nonNull)
|
||||
.sorted()
|
||||
.collect(Collectors.toList());
|
||||
|
||||
// 如果没有排序值,返回1
|
||||
if (sortValues.isEmpty()) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
// 寻找最小的未使用序号
|
||||
int expectedSort = 1;
|
||||
for (Integer sort : sortValues) {
|
||||
if (sort > expectedSort) {
|
||||
// 找到空缺的序号
|
||||
return expectedSort;
|
||||
}
|
||||
expectedSort = sort + 1;
|
||||
}
|
||||
|
||||
// 如果没有空缺,返回最大序号+1
|
||||
return expectedSort;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user