Commit 28c266f9228c3bd9d5f0257531fc69cfab437535
1 parent
8e43004c
fix(product):类目父级设置成自身(循环层级)明确拒绝
更新类目时把 parentId 设成分类自身的 id 可保存成功(一级类目自身 通过'父分类不能是二级分类'校验后放行),形成循环层级(A53); 创建路径父级必须是已存在分类,天然挡死。 updateCategory 补环检测:parentId==id 时抛新增业务错误 CATEGORY_PARENT_IS_SELF (1_008_001_006)。
Showing
2 changed files
with
5 additions
and
0 deletions
yudao-module-mall/yudao-module-product/src/main/java/cn/iocoder/yudao/module/product/enums/ErrorCodeConstants.java
| ... | ... | @@ -16,6 +16,7 @@ public interface ErrorCodeConstants { |
| 16 | 16 | ErrorCode CATEGORY_EXISTS_CHILDREN = new ErrorCode(1_008_001_003, "存在子分类,无法删除"); |
| 17 | 17 | ErrorCode CATEGORY_DISABLED = new ErrorCode(1_008_001_004, "商品分类({})已禁用,无法使用"); |
| 18 | 18 | ErrorCode CATEGORY_HAVE_BIND_SPU = new ErrorCode(1_008_001_005, "类别下存在商品,无法删除"); |
| 19 | + ErrorCode CATEGORY_PARENT_IS_SELF = new ErrorCode(1_008_001_006, "父分类不能设置为分类自身"); | |
| 19 | 20 | |
| 20 | 21 | // ========== 商品品牌相关编号 1-008-002-000 ========== |
| 21 | 22 | ErrorCode BRAND_NOT_EXISTS = new ErrorCode(1_008_002_000, "品牌不存在"); | ... | ... |
yudao-module-mall/yudao-module-product/src/main/java/cn/iocoder/yudao/module/product/service/category/ProductCategoryServiceImpl.java
| ... | ... | @@ -55,6 +55,10 @@ public class ProductCategoryServiceImpl implements ProductCategoryService { |
| 55 | 55 | public void updateCategory(ProductCategorySaveReqVO updateReqVO) { |
| 56 | 56 | // 校验分类是否存在 |
| 57 | 57 | validateProductCategoryExists(updateReqVO.getId()); |
| 58 | + // 校验父分类不能是分类自身(环检测:父级设成自己会形成循环层级,后续按父链遍历将死循环/脏数据) | |
| 59 | + if (Objects.equals(updateReqVO.getParentId(), updateReqVO.getId())) { | |
| 60 | + throw exception(CATEGORY_PARENT_IS_SELF); | |
| 61 | + } | |
| 58 | 62 | // 校验父分类存在 |
| 59 | 63 | validateParentProductCategory(updateReqVO.getParentId()); |
| 60 | 64 | ... | ... |