diff --git a/src/main/java/com/ai/da/controller/GenerateController.java b/src/main/java/com/ai/da/controller/GenerateController.java index 683bbc21..b1699a49 100644 --- a/src/main/java/com/ai/da/controller/GenerateController.java +++ b/src/main/java/com/ai/da/controller/GenerateController.java @@ -14,7 +14,7 @@ import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import javax.validation.Valid; -import java.io.IOException; +import javax.validation.constraints.NotNull; import java.util.List; import java.util.Map; @@ -148,7 +148,8 @@ public class GenerateController { @ApiOperation(value = "删除pose transfer的结果") @GetMapping("/deleteResult") - public Response deleteToProductRelightResult(@RequestParam("projectId") Long projectId, @RequestParam("id") Long id){ + public Response deleteToProductRelightResult(@RequestParam("projectId") @NotNull Long projectId, + @RequestParam("id") @NotNull Long id){ try{ generateService.deleteGeneratedPose(projectId, id); return Response.success(); diff --git a/src/main/java/com/ai/da/service/impl/GenerateServiceImpl.java b/src/main/java/com/ai/da/service/impl/GenerateServiceImpl.java index b21398cd..731a8022 100644 --- a/src/main/java/com/ai/da/service/impl/GenerateServiceImpl.java +++ b/src/main/java/com/ai/da/service/impl/GenerateServiceImpl.java @@ -1830,31 +1830,57 @@ public class GenerateServiceImpl extends ServiceImpl i private CollectionSortMapper collectionSortMapper; @Transactional(rollbackFor = Exception.class) - public void deleteGeneratedPose(Long projectId, Long id){ + public void deleteGeneratedPose(Long projectId, Long id) { + // 1. 权限校验 Long accountId = UserContext.getUserHolder().getId(); - // 1、删除generate中的结果 - UpdateWrapper wrapper = new UpdateWrapper<>(); - wrapper.eq("id", id) - .set("is_deleted", 1) // 手动设置 - .set("update_time", LocalDateTime.now()); - int update = poseTransformationMapper.update(null, wrapper); - log.info("删除PoseTransfer 结果, id为{}, 影响行数={}", id, update); - if (update != 0) { - // 2、如果有排序,删除排序,排序后是否需要重置排序计数器以及后续排序数字 - // 先校验type的值是不是ToProductImage、Relight、PoseTransfer - if (id == null || projectId == null) { - throw new IllegalArgumentException("参数不能为null"); - } - Project project = projectService.getById(projectId); - if (!project.getAccountId().equals(accountId)){ - throw new IllegalArgumentException("项目id不属于当前账号,请仅对自己的账号数据进行处理"); - } - int deletedRows = collectionSortMapper.delete(new QueryWrapper() - .eq("project_id", projectId) - .eq("relation_id", id).eq("relation_type", "PoseTransfer")); - - log.info("deleteGeneratedPose 删除记录:id={}, type={}, 影响行数={}", id, "PoseTransfer", deletedRows); + Project project = projectService.getById(projectId); + if (!project.getAccountId().equals(accountId)) { + throw new IllegalArgumentException("项目不属于当前账号"); } + + // 2. 软删除主表数据 + int update = poseTransformationMapper.update(null, + new UpdateWrapper() + .eq("id", id) + .set("is_deleted", 1) + .set("update_time", LocalDateTime.now())); + + log.info("删除PoseTransfer 结果, id为{}, 影响行数={}", id, update); + + if (update == 0) return; + + // 3. 查询可能删除的多个排序项(存在脏数据可能,所有会查出多个) + List deletedItems = collectionSortMapper.selectList( + new QueryWrapper() + .eq("project_id", projectId) + .eq("relation_id", id) + .eq("relation_type", "PoseTransfer") + .orderByAsc("sort") + ); + + if (deletedItems.isEmpty()) return; + + // 4. 删除这些排序记录 + int deletedCount = collectionSortMapper.delete( + new QueryWrapper() + .eq("project_id", projectId) + .eq("relation_id", id) + .eq("relation_type", "PoseTransfer") + ); + + // 5. 重新调整剩余记录的排序(两种方案可选) + // 方案一:精确调整(每条被删除记录单独处理) + for (CollectionSort deletedItem : deletedItems) { + collectionSortMapper.update( + null, + new UpdateWrapper() + .eq("project_id", projectId) + .gt("sort", deletedItem.getSort()) + .setSql("sort = sort - 1") + ); + } + + log.info("删除PoseTransfer排序记录:id={}, 删除{}条,已重新排序后续记录", id, deletedCount); } diff --git a/src/main/java/com/ai/da/service/impl/UserLikeGroupServiceImpl.java b/src/main/java/com/ai/da/service/impl/UserLikeGroupServiceImpl.java index 2c5a9d3c..7d462092 100644 --- a/src/main/java/com/ai/da/service/impl/UserLikeGroupServiceImpl.java +++ b/src/main/java/com/ai/da/service/impl/UserLikeGroupServiceImpl.java @@ -592,7 +592,8 @@ public class UserLikeGroupServiceImpl extends ServiceImpl wrapper = new UpdateWrapper<>(); wrapper.eq("id", id) .eq("project_id", projectId) - .set("is_deleted", 1); // 手动设置 + .set("is_deleted", 1); int update = toProductImageResultMapper.update(null, wrapper); - log.info("删除{} 结果, id为{}, 影响行数={}", type, id, update); + log.info("删除 {} 结果, id={}, 影响行数={}", type, id, update); - if (update != 0) { - // 2、如果有排序,删除排序,排序后是否需要重置排序计数器以及后续排序数字 - // 先校验type的值是不是ToProductImage、Relight、PoseTransfer - if (id == null || type == null || projectId == null) { - throw new IllegalArgumentException("参数不能为null"); - } + if (update == 0) { + return; // 未删除任何数据,直接返回 + } - int deletedRows = collectionSortMapper.delete(new QueryWrapper() - .eq("project_id", projectId) - .eq("relation_id", id).eq("relation_type", type)); + // 3. 查询所有被删除的排序项(按sort升序) + List deletedItems = collectionSortMapper.selectList( + new QueryWrapper() + .eq("project_id", projectId) + .eq("relation_id", id) + .eq("relation_type", type) + .orderByAsc("sort") + ); - log.info("deleteToProductRelightResult 删除记录:id={}, type={}, 影响行数={}", id, type, deletedRows); + if (deletedItems.isEmpty()) return; + + // 4. 删除这些记录 + int deletedCount = collectionSortMapper.delete( + new QueryWrapper() + .eq("project_id", projectId) + .eq("relation_id", id) + .eq("relation_type", type) + ); + log.info("删除排序记录:id={}, type={}, 影响行数={}", id, type, deletedCount); + + // 5. 对每个被删除的sort值,单独调整后续记录 + for (CollectionSort deletedItem : deletedItems) { + collectionSortMapper.update( + null, + new UpdateWrapper() + .eq("project_id", projectId) + .gt("sort", deletedItem.getSort()) + .setSql("sort = sort - 1") // 每条SQL只减1 + ); } }