mirror of
https://github.com/xinnan-tech/xiaozhi-esp32-server.git
synced 2026-07-30 05:13:59 +08:00
调整模版排序的漏洞
This commit is contained in:
+15
-1
@@ -106,6 +106,9 @@ public class AgentTemplateController {
|
|||||||
@Operation(summary = "创建模板")
|
@Operation(summary = "创建模板")
|
||||||
@RequiresPermissions("sys:role:superAdmin")
|
@RequiresPermissions("sys:role:superAdmin")
|
||||||
public Result<AgentTemplateEntity> createAgentTemplate(@Valid @RequestBody AgentTemplateEntity template) {
|
public Result<AgentTemplateEntity> createAgentTemplate(@Valid @RequestBody AgentTemplateEntity template) {
|
||||||
|
// 设置排序值为下一个可用的序号
|
||||||
|
template.setSort(agentTemplateService.getNextAvailableSort());
|
||||||
|
|
||||||
boolean saved = agentTemplateService.save(template);
|
boolean saved = agentTemplateService.save(template);
|
||||||
if (saved) {
|
if (saved) {
|
||||||
return ResultUtils.success(template);
|
return ResultUtils.success(template);
|
||||||
@@ -130,9 +133,20 @@ public class AgentTemplateController {
|
|||||||
@Operation(summary = "删除模板")
|
@Operation(summary = "删除模板")
|
||||||
@RequiresPermissions("sys:role:superAdmin")
|
@RequiresPermissions("sys:role:superAdmin")
|
||||||
public Result<String> deleteAgentTemplate(@PathVariable("id") String id) {
|
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);
|
boolean deleted = agentTemplateService.removeById(id);
|
||||||
if (deleted) {
|
if (deleted) {
|
||||||
return ResultUtils.success("删除成功");
|
// 删除成功后,重新排序剩余模板
|
||||||
|
agentTemplateService.reorderTemplatesAfterDelete(deletedSort);
|
||||||
|
return ResultUtils.success("删除模板成功");
|
||||||
} else {
|
} else {
|
||||||
return ResultUtils.error("删除模板失败");
|
return ResultUtils.error("删除模板失败");
|
||||||
}
|
}
|
||||||
|
|||||||
+14
@@ -25,4 +25,18 @@ public interface AgentTemplateService extends IService<AgentTemplateEntity> {
|
|||||||
* @param modelId 模型ID
|
* @param modelId 模型ID
|
||||||
*/
|
*/
|
||||||
void updateDefaultTemplateModelId(String modelType, String modelId);
|
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.entity.AgentTemplateEntity;
|
||||||
import xiaozhi.modules.agent.service.AgentTemplateService;
|
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
|
* @author chenerlei
|
||||||
* @description 针对表【ai_agent_template(智能体配置模板表)】的数据库操作Service实现
|
* @description 针对表【ai_agent_template(智能体配置模板表)】的数据库操作Service实现
|
||||||
@@ -69,4 +74,48 @@ public class AgentTemplateServiceImpl extends ServiceImpl<AgentTemplateDao, Agen
|
|||||||
wrapper.ge("sort", 0);
|
wrapper.ge("sort", 0);
|
||||||
update(wrapper);
|
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