Commit 3678752a610f70e414f4fe6f2ecf498604904b81

Authored by YunaiV
1 parent c94f71a3

🔨 CRM:优化产品分类代码的实现

Showing 15 changed files with 130 additions and 175 deletions
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/product/CrmProductCategoryController.java
1 1 package cn.iocoder.yudao.module.crm.controller.admin.product;
2 2  
3 3 import cn.iocoder.yudao.framework.common.pojo.CommonResult;
4   -import cn.iocoder.yudao.module.crm.controller.admin.product.vo.productcategory.CrmProductCategoryCreateReqVO;
5   -import cn.iocoder.yudao.module.crm.controller.admin.product.vo.productcategory.CrmProductCategoryListReqVO;
6   -import cn.iocoder.yudao.module.crm.controller.admin.product.vo.productcategory.CrmProductCategoryRespVO;
7   -import cn.iocoder.yudao.module.crm.controller.admin.product.vo.productcategory.CrmProductCategoryUpdateReqVO;
8   -import cn.iocoder.yudao.module.crm.convert.product.CrmProductCategoryConvert;
  4 +import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
  5 +import cn.iocoder.yudao.module.crm.controller.admin.product.vo.category.CrmProductCategoryCreateReqVO;
  6 +import cn.iocoder.yudao.module.crm.controller.admin.product.vo.category.CrmProductCategoryListReqVO;
  7 +import cn.iocoder.yudao.module.crm.controller.admin.product.vo.category.CrmProductCategoryRespVO;
9 8 import cn.iocoder.yudao.module.crm.dal.dataobject.product.CrmProductCategoryDO;
10 9 import cn.iocoder.yudao.module.crm.service.product.CrmProductCategoryService;
11 10 import io.swagger.v3.oas.annotations.Operation;
... ... @@ -21,7 +20,7 @@ import java.util.List;
21 20  
22 21 import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
23 22  
24   -@Tag(name = "管理后台 - 产品分类")
  23 +@Tag(name = "管理后台 - CRM 产品分类")
25 24 @RestController
26 25 @RequestMapping("/crm/product-category")
27 26 @Validated
... ... @@ -40,7 +39,7 @@ public class CrmProductCategoryController {
40 39 @PutMapping("/update")
41 40 @Operation(summary = "更新产品分类")
42 41 @PreAuthorize("@ss.hasPermission('crm:product-category:update')")
43   - public CommonResult<Boolean> updateProductCategory(@Valid @RequestBody CrmProductCategoryUpdateReqVO updateReqVO) {
  42 + public CommonResult<Boolean> updateProductCategory(@Valid @RequestBody CrmProductCategoryCreateReqVO updateReqVO) {
44 43 productCategoryService.updateProductCategory(updateReqVO);
45 44 return success(true);
46 45 }
... ... @@ -59,16 +58,16 @@ public class CrmProductCategoryController {
59 58 @Parameter(name = "id", description = "编号", required = true, example = "1024")
60 59 @PreAuthorize("@ss.hasPermission('crm:product-category:query')")
61 60 public CommonResult<CrmProductCategoryRespVO> getProductCategory(@RequestParam("id") Long id) {
62   - CrmProductCategoryDO productCategory = productCategoryService.getProductCategory(id);
63   - return success(CrmProductCategoryConvert.INSTANCE.convert(productCategory));
  61 + CrmProductCategoryDO category = productCategoryService.getProductCategory(id);
  62 + return success(BeanUtils.toBean(category, CrmProductCategoryRespVO.class));
64 63 }
65 64  
66 65 @GetMapping("/list")
67 66 @Operation(summary = "获得产品分类列表")
68 67 @PreAuthorize("@ss.hasPermission('crm:product-category:query')")
69   - public CommonResult<List<CrmProductCategoryRespVO>> getProductCategoryList(@Valid CrmProductCategoryListReqVO treeListReqVO) {
70   - List<CrmProductCategoryDO> list = productCategoryService.getProductCategoryList(treeListReqVO);
71   - return success(CrmProductCategoryConvert.INSTANCE.convertList(list));
  68 + public CommonResult<List<CrmProductCategoryRespVO>> getProductCategoryList(@Valid CrmProductCategoryListReqVO listReqVO) {
  69 + List<CrmProductCategoryDO> list = productCategoryService.getProductCategoryList(listReqVO);
  70 + return success(BeanUtils.toBean(list, CrmProductCategoryRespVO.class));
72 71 }
73 72  
74 73 }
... ...
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/product/CrmProductController.java
... ... @@ -4,7 +4,7 @@ import cn.hutool.core.collection.CollUtil;
4 4 import cn.iocoder.yudao.framework.common.pojo.CommonResult;
5 5 import cn.iocoder.yudao.framework.common.pojo.PageParam;
6 6 import cn.iocoder.yudao.framework.common.pojo.PageResult;
7   -import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
  7 +import cn.iocoder.yudao.framework.common.util.collection.SetUtils;
8 8 import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
9 9 import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog;
10 10 import cn.iocoder.yudao.module.crm.controller.admin.product.vo.product.CrmProductPageReqVO;
... ... @@ -82,7 +82,13 @@ public class CrmProductController {
82 82 @PreAuthorize("@ss.hasPermission('crm:product:query')")
83 83 public CommonResult<CrmProductRespVO> getProduct(@RequestParam("id") Long id) {
84 84 CrmProductDO product = productService.getProduct(id);
85   - return success(BeanUtils.toBean(product, CrmProductRespVO.class));
  85 + if (product == null) {
  86 + return success(null);
  87 + }
  88 + Map<Long, AdminUserRespDTO> userMap = adminUserApi.getUserMap(
  89 + SetUtils.asSet( Long.valueOf(product.getCreator()), product.getOwnerUserId()));
  90 + CrmProductCategoryDO category = productCategoryService.getProductCategory(product.getCategoryId());
  91 + return success(CrmProductConvert.INSTANCE.convert(product, userMap, category));
86 92 }
87 93  
88 94 @GetMapping("/page")
... ...
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/product/vo/category/CrmProductCategoryCreateReqVO.java 0 → 100644
  1 +package cn.iocoder.yudao.module.crm.controller.admin.product.vo.category;
  2 +
  3 +import lombok.*;
  4 +import io.swagger.v3.oas.annotations.media.Schema;
  5 +
  6 +import javax.validation.constraints.NotNull;
  7 +
  8 +@Schema(description = "管理后台 - CRM 产品分类创建/更新 Request VO")
  9 +@Data
  10 +public class CrmProductCategoryCreateReqVO{
  11 +
  12 + @Schema(description = "分类编号", example = "23902")
  13 + private Long id;
  14 +
  15 + @Schema(description = "分类名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "赵六")
  16 + @NotNull(message = "分类名称不能为空")
  17 + private String name;
  18 +
  19 + @Schema(description = "父级编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "4680")
  20 + @NotNull(message = "父级编号不能为空")
  21 + private Long parentId;
  22 +
  23 +}
... ...
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/product/vo/productcategory/CrmProductCategoryListReqVO.java renamed to yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/product/vo/category/CrmProductCategoryListReqVO.java
1   -package cn.iocoder.yudao.module.crm.controller.admin.product.vo.productcategory;
  1 +package cn.iocoder.yudao.module.crm.controller.admin.product.vo.category;
2 2  
3 3 import com.alibaba.excel.annotation.ExcelProperty;
4 4 import io.swagger.v3.oas.annotations.media.Schema;
... ... @@ -6,8 +6,7 @@ import lombok.Data;
6 6  
7 7 import java.time.LocalDateTime;
8 8  
9   -// TODO 芋艿:这个导出最后搞;命名应该是按照 ProductExportReqVO 风格
10   -@Schema(description = "管理后台 - 产品分类列表 Request VO")
  9 +@Schema(description = "管理后台 - CRM 产品分类列表 Request VO")
11 10 @Data
12 11 public class CrmProductCategoryListReqVO {
13 12  
... ...
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/product/vo/productcategory/CrmProductCategoryRespVO.java renamed to yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/product/vo/category/CrmProductCategoryRespVO.java
1   -package cn.iocoder.yudao.module.crm.controller.admin.product.vo.productcategory;
  1 +package cn.iocoder.yudao.module.crm.controller.admin.product.vo.category;
2 2  
3 3 import io.swagger.v3.oas.annotations.media.Schema;
4 4 import lombok.*;
  5 +
5 6 import java.time.LocalDateTime;
6 7  
7   -@Schema(description = "管理后台 - 产品分类 Response VO")
  8 +@Schema(description = "管理后台 - CRM 产品分类 Response VO")
8 9 @Data
9   -@EqualsAndHashCode(callSuper = true)
10   -@ToString(callSuper = true)
11   -public class CrmProductCategoryRespVO extends CrmProductCategoryBaseVO {
  10 +public class CrmProductCategoryRespVO {
12 11  
13   - @Schema(description = "主键id", requiredMode = Schema.RequiredMode.REQUIRED, example = "23902")
  12 + @Schema(description = "分类编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "23902")
14 13 private Long id;
15 14  
  15 + @Schema(description = "分类名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "赵六")
  16 + private String name;
  17 +
  18 + @Schema(description = "父级编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "4680")
  19 + private Long parentId;
  20 +
16 21 @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
17 22 private LocalDateTime createTime;
18 23  
... ...
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/product/vo/product/CrmProductRespVO.java
... ... @@ -67,4 +67,8 @@ public class CrmProductRespVO {
67 67 @ExcelProperty("创建时间")
68 68 private LocalDateTime createTime;
69 69  
  70 + @Schema(description = "更新时间", requiredMode = Schema.RequiredMode.REQUIRED)
  71 + @ExcelProperty("更新时间")
  72 + private LocalDateTime updateTime;
  73 +
70 74 }
... ...
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/product/vo/productcategory/CrmProductCategoryBaseVO.java deleted
1   -package cn.iocoder.yudao.module.crm.controller.admin.product.vo.productcategory;
2   -
3   -import io.swagger.v3.oas.annotations.media.Schema;
4   -import lombok.Data;
5   -
6   -import javax.validation.constraints.NotNull;
7   -
8   -/**
9   - * 产品分类 Base VO,提供给添加、修改、详细的子 VO 使用
10   - * 如果子 VO 存在差异的字段,请不要添加到这里,影响 Swagger 文档生成
11   - */
12   -@Data
13   -public class CrmProductCategoryBaseVO {
14   -
15   - @Schema(description = "名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "赵六")
16   - @NotNull(message = "名称不能为空")
17   - private String name;
18   -
19   - @Schema(description = "父级 id", requiredMode = Schema.RequiredMode.REQUIRED, example = "4680")
20   - @NotNull(message = "父级 id 不能为空")
21   - private Long parentId;
22   -
23   -}
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/product/vo/productcategory/CrmProductCategoryCreateReqVO.java deleted
1   -package cn.iocoder.yudao.module.crm.controller.admin.product.vo.productcategory;
2   -
3   -import lombok.*;
4   -import io.swagger.v3.oas.annotations.media.Schema;
5   -
6   -@Schema(description = "管理后台 - 产品分类创建 Request VO")
7   -@Data
8   -@EqualsAndHashCode(callSuper = true)
9   -@ToString(callSuper = true)
10   -public class CrmProductCategoryCreateReqVO extends CrmProductCategoryBaseVO {
11   -
12   -}
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/product/vo/productcategory/CrmProductCategoryUpdateReqVO.java deleted
1   -package cn.iocoder.yudao.module.crm.controller.admin.product.vo.productcategory;
2   -
3   -import io.swagger.v3.oas.annotations.media.Schema;
4   -import lombok.Data;
5   -import lombok.EqualsAndHashCode;
6   -import lombok.ToString;
7   -
8   -import javax.validation.constraints.NotNull;
9   -
10   -@Schema(description = "管理后台 - 产品分类更新 Request VO")
11   -@Data
12   -@EqualsAndHashCode(callSuper = true)
13   -@ToString(callSuper = true)
14   -public class CrmProductCategoryUpdateReqVO extends CrmProductCategoryBaseVO {
15   -
16   - @Schema(description = "主键 id", requiredMode = Schema.RequiredMode.REQUIRED, example = "23902")
17   - @NotNull(message = "主键 id 不能为空")
18   - private Long id;
19   -
20   -}
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/convert/product/CrmProductCategoryConvert.java deleted
1   -package cn.iocoder.yudao.module.crm.convert.product;
2   -
3   -import cn.iocoder.yudao.module.crm.controller.admin.product.vo.productcategory.CrmProductCategoryCreateReqVO;
4   -import cn.iocoder.yudao.module.crm.controller.admin.product.vo.productcategory.CrmProductCategoryRespVO;
5   -import cn.iocoder.yudao.module.crm.controller.admin.product.vo.productcategory.CrmProductCategoryUpdateReqVO;
6   -import cn.iocoder.yudao.module.crm.dal.dataobject.product.CrmProductCategoryDO;
7   -import org.mapstruct.Mapper;
8   -import org.mapstruct.factory.Mappers;
9   -
10   -import java.util.List;
11   -
12   -/**
13   - * 产品分类 Convert
14   - *
15   - * @author ZanGe丶
16   - */
17   -@Mapper
18   -public interface CrmProductCategoryConvert {
19   -
20   - CrmProductCategoryConvert INSTANCE = Mappers.getMapper(CrmProductCategoryConvert.class);
21   -
22   - CrmProductCategoryDO convert(CrmProductCategoryCreateReqVO bean);
23   -
24   - CrmProductCategoryDO convert(CrmProductCategoryUpdateReqVO bean);
25   -
26   - CrmProductCategoryRespVO convert(CrmProductCategoryDO bean);
27   -
28   - List<CrmProductCategoryRespVO> convertList(List<CrmProductCategoryDO> list);
29   -
30   -}
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/convert/product/CrmProductConvert.java
1 1 package cn.iocoder.yudao.module.crm.convert.product;
2 2  
  3 +import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
3 4 import cn.iocoder.yudao.framework.common.util.collection.MapUtils;
4 5 import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
5 6 import cn.iocoder.yudao.module.crm.controller.admin.product.vo.product.CrmProductRespVO;
... ... @@ -11,6 +12,7 @@ import org.mapstruct.factory.Mappers;
11 12  
12 13 import java.util.List;
13 14 import java.util.Map;
  15 +import java.util.Optional;
14 16  
15 17 import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertMap;
16 18  
... ... @@ -27,14 +29,18 @@ public interface CrmProductConvert {
27 29 default List<CrmProductRespVO> convertList(List<CrmProductDO> list,
28 30 Map<Long, AdminUserRespDTO> userMap,
29 31 List<CrmProductCategoryDO> categoryList) {
30   - List<CrmProductRespVO> voList = BeanUtils.toBean(list, CrmProductRespVO.class);
31 32 Map<Long, CrmProductCategoryDO> categoryMap = convertMap(categoryList, CrmProductCategoryDO::getId);
32   - for (CrmProductRespVO vo : voList) {
33   - MapUtils.findAndThen(categoryMap, vo.getCategoryId(), category -> vo.setCategoryName(category.getName()));
34   - MapUtils.findAndThen(userMap, vo.getOwnerUserId(), user -> vo.setOwnerUserName(user.getNickname()));
35   - MapUtils.findAndThen(userMap, Long.valueOf(vo.getCreator()), user -> vo.setCreatorName(user.getNickname()));
36   - }
37   - return voList;
  33 + return CollectionUtils.convertList(list,
  34 + product -> convert(product, userMap, categoryMap.get(product.getCategoryId())));
  35 + }
  36 +
  37 + default CrmProductRespVO convert(CrmProductDO product,
  38 + Map<Long, AdminUserRespDTO> userMap, CrmProductCategoryDO category) {
  39 + CrmProductRespVO productVO = BeanUtils.toBean(product, CrmProductRespVO.class);
  40 + Optional.ofNullable(category).ifPresent(c -> productVO.setCategoryName(c.getName()));
  41 + MapUtils.findAndThen(userMap, productVO.getOwnerUserId(), user -> productVO.setOwnerUserName(user.getNickname()));
  42 + MapUtils.findAndThen(userMap, Long.valueOf(productVO.getCreator()), user -> productVO.setCreatorName(user.getNickname()));
  43 + return productVO;
38 44 }
39 45  
40 46 }
... ...
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/dataobject/product/CrmProductCategoryDO.java
... ... @@ -31,17 +31,18 @@ public class CrmProductCategoryDO extends BaseDO {
31 31 public static final int CATEGORY_LEVEL = 2;
32 32  
33 33 /**
34   - * 主键id
  34 + * 分类编号
35 35 */
36 36 @TableId
37 37 private Long id;
38 38 /**
39   - * 名称
  39 + * 分类名称
40 40 */
41 41 private String name;
42 42 /**
43   - * 父级 id
44   - * // TODO @zange-ok:这个要写下关联 CategoryDO 的 id 字段;参考下别的模块哈
  43 + * 父级编号
  44 + *
  45 + * 关联 {@link CrmProductCategoryDO#getId()}
45 46 */
46 47 private Long parentId;
47 48  
... ...
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/mysql/product/CrmProductCategoryMapper.java
... ... @@ -2,32 +2,33 @@ package cn.iocoder.yudao.module.crm.dal.mysql.product;
2 2  
3 3 import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
4 4 import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
5   -import cn.iocoder.yudao.module.crm.controller.admin.product.vo.productcategory.CrmProductCategoryListReqVO;
  5 +import cn.iocoder.yudao.module.crm.controller.admin.product.vo.category.CrmProductCategoryListReqVO;
6 6 import cn.iocoder.yudao.module.crm.dal.dataobject.product.CrmProductCategoryDO;
7 7 import org.apache.ibatis.annotations.Mapper;
8 8  
9 9 import java.util.List;
10 10  
11 11 /**
12   - * 产品分类 Mapper
  12 + * CRM 产品分类 Mapper
13 13 *
14 14 * @author ZanGe丶
15 15 */
16 16 @Mapper
17 17 public interface CrmProductCategoryMapper extends BaseMapperX<CrmProductCategoryDO> {
18 18  
19   -
20 19 default List<CrmProductCategoryDO> selectList(CrmProductCategoryListReqVO reqVO) {
21 20 return selectList(new LambdaQueryWrapperX<CrmProductCategoryDO>()
22 21 .likeIfPresent(CrmProductCategoryDO::getName, reqVO.getName())
23 22 .eqIfPresent(CrmProductCategoryDO::getParentId, reqVO.getParentId())
24 23 .orderByDesc(CrmProductCategoryDO::getId));
25 24 }
26   - default CrmProductCategoryDO selectByName(String name) {
27   - return selectOne(CrmProductCategoryDO::getName, name);
  25 +
  26 + default CrmProductCategoryDO selectByParentIdAndName(Long parentId, String name) {
  27 + return selectOne(CrmProductCategoryDO::getParentId, parentId, CrmProductCategoryDO::getName, name);
28 28 }
29 29  
30 30 default Long selectCountByParentId(Long parentId) {
31 31 return selectCount(CrmProductCategoryDO::getParentId, parentId);
32 32 }
  33 +
33 34 }
... ...
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/product/CrmProductCategoryService.java
1 1 package cn.iocoder.yudao.module.crm.service.product;
2 2  
3   -import cn.iocoder.yudao.module.crm.controller.admin.product.vo.productcategory.CrmProductCategoryCreateReqVO;
4   -import cn.iocoder.yudao.module.crm.controller.admin.product.vo.productcategory.CrmProductCategoryListReqVO;
5   -import cn.iocoder.yudao.module.crm.controller.admin.product.vo.productcategory.CrmProductCategoryUpdateReqVO;
  3 +import cn.iocoder.yudao.module.crm.controller.admin.product.vo.category.CrmProductCategoryCreateReqVO;
  4 +import cn.iocoder.yudao.module.crm.controller.admin.product.vo.category.CrmProductCategoryListReqVO;
6 5 import cn.iocoder.yudao.module.crm.dal.dataobject.product.CrmProductCategoryDO;
7 6  
8 7 import javax.validation.Valid;
... ... @@ -29,7 +28,7 @@ public interface CrmProductCategoryService {
29 28 *
30 29 * @param updateReqVO 更新信息
31 30 */
32   - void updateProductCategory(@Valid CrmProductCategoryUpdateReqVO updateReqVO);
  31 + void updateProductCategory(@Valid CrmProductCategoryCreateReqVO updateReqVO);
33 32  
34 33 /**
35 34 * 删除产品分类
... ...
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/product/CrmProductCategoryServiceImpl.java
1 1 package cn.iocoder.yudao.module.crm.service.product;
2 2  
3   -import cn.hutool.core.util.ObjUtil;
4   -import cn.iocoder.yudao.module.crm.controller.admin.product.vo.productcategory.CrmProductCategoryCreateReqVO;
5   -import cn.iocoder.yudao.module.crm.controller.admin.product.vo.productcategory.CrmProductCategoryListReqVO;
6   -import cn.iocoder.yudao.module.crm.controller.admin.product.vo.productcategory.CrmProductCategoryUpdateReqVO;
7   -import cn.iocoder.yudao.module.crm.convert.product.CrmProductCategoryConvert;
  3 +import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
  4 +import cn.iocoder.yudao.module.crm.controller.admin.product.vo.category.CrmProductCategoryCreateReqVO;
  5 +import cn.iocoder.yudao.module.crm.controller.admin.product.vo.category.CrmProductCategoryListReqVO;
8 6 import cn.iocoder.yudao.module.crm.dal.dataobject.product.CrmProductCategoryDO;
9 7 import cn.iocoder.yudao.module.crm.dal.mysql.product.CrmProductCategoryMapper;
10 8 import org.springframework.context.annotation.Lazy;
... ... @@ -21,7 +19,7 @@ import static cn.iocoder.yudao.module.crm.dal.dataobject.product.CrmProductCateg
21 19 import static cn.iocoder.yudao.module.crm.enums.ErrorCodeConstants.*;
22 20  
23 21 /**
24   - * 产品分类 Service 实现类
  22 + * CRM 产品分类 Service 实现类
25 23 *
26 24 * @author ZanGe丶
27 25 */
... ... @@ -38,56 +36,29 @@ public class CrmProductCategoryServiceImpl implements CrmProductCategoryService
38 36  
39 37 @Override
40 38 public Long createProductCategory(CrmProductCategoryCreateReqVO createReqVO) {
41   - // TODO zange:参考 mall: ProductCategoryServiceImpl 补充下必要的参数校验;
42   - // 校验父分类存在
  39 + // 1.1 校验父分类存在
43 40 validateParentProductCategory(createReqVO.getParentId());
44   - // 分类名称是否存在
45   - CrmProductCategoryDO dbProductCategory = productCategoryMapper.selectByName(createReqVO.getName());
46   - if (dbProductCategory != null) {
47   - return dbProductCategory.getId();
48   - }
49   - // 插入
50   - CrmProductCategoryDO productCategory = CrmProductCategoryConvert.INSTANCE.convert(createReqVO);
51   - productCategoryMapper.insert(productCategory);
52   - // 返回
53   - return productCategory.getId();
  41 + // 1.2 分类名称是否存在
  42 + validateProductNameExists(null, createReqVO.getParentId(), createReqVO.getName());
  43 + // 2. 插入
  44 + CrmProductCategoryDO category = BeanUtils.toBean(createReqVO, CrmProductCategoryDO.class);
  45 + productCategoryMapper.insert(category);
  46 + return category.getId();
54 47 }
55 48  
56 49 @Override
57   - public void updateProductCategory(CrmProductCategoryUpdateReqVO updateReqVO) {
58   - // TODO zange:参考 mall: ProductCategoryServiceImpl 补充下必要的参数校验;
59   - // 校验存在
  50 + public void updateProductCategory(CrmProductCategoryCreateReqVO updateReqVO) {
  51 + // 1.1 校验存在
60 52 validateProductCategoryExists(updateReqVO.getId());
61   - // 校验父分类存在
  53 + // 1.2 校验父分类存在
62 54 validateParentProductCategory(updateReqVO.getParentId());
63   - // 校验名字重复
64   - CrmProductCategoryDO productCategoryDO = productCategoryMapper.selectByName(updateReqVO.getName());
65   - if (productCategoryDO != null &&
66   - ObjUtil.notEqual(productCategoryDO.getId(), updateReqVO.getId())) {
67   - throw exception(PRODUCT_CATEGORY_EXISTS);
68   - }
69   - // 更新
70   - CrmProductCategoryDO updateObj = CrmProductCategoryConvert.INSTANCE.convert(updateReqVO);
  55 + // 1.3 分类名称是否存在
  56 + validateProductNameExists(updateReqVO.getId(), updateReqVO.getParentId(), updateReqVO.getName());
  57 + // 2. 更新
  58 + CrmProductCategoryDO updateObj = BeanUtils.toBean(updateReqVO, CrmProductCategoryDO.class);
71 59 productCategoryMapper.updateById(updateObj);
72 60 }
73 61  
74   - @Override
75   - public void deleteProductCategory(Long id) {
76   - // TODO zange:参考 mall: ProductCategoryServiceImpl 补充下必要的参数校验;
77   - // 校验存在
78   - validateProductCategoryExists(id);
79   - // 校验是否还有子分类
80   - if (productCategoryMapper.selectCountByParentId(id) > 0) {
81   - throw exception(product_CATEGORY_EXISTS_CHILDREN);
82   - }
83   - // 校验是否被产品使用
84   - if (crmProductService.getProductByCategoryId(id) !=null) {
85   - throw exception(PRODUCT_CATEGORY_USED);
86   - }
87   - // 删除
88   - productCategoryMapper.deleteById(id);
89   - }
90   -
91 62 private void validateProductCategoryExists(Long id) {
92 63 if (productCategoryMapper.selectById(id) == null) {
93 64 throw exception(PRODUCT_CATEGORY_NOT_EXISTS);
... ... @@ -110,6 +81,32 @@ public class CrmProductCategoryServiceImpl implements CrmProductCategoryService
110 81 }
111 82 }
112 83  
  84 + private void validateProductNameExists(Long id, Long parentId, String name) {
  85 + CrmProductCategoryDO category = productCategoryMapper.selectByParentIdAndName(parentId, name);
  86 + if (category == null
  87 + || category.getId().equals(id)) {
  88 + return;
  89 + }
  90 + throw exception(PRODUCT_CATEGORY_EXISTS);
  91 + }
  92 +
  93 + @Override
  94 + public void deleteProductCategory(Long id) {
  95 + // TODO zange:参考 mall: ProductCategoryServiceImpl 补充下必要的参数校验;
  96 + // 校验存在
  97 + validateProductCategoryExists(id);
  98 + // 校验是否还有子分类
  99 + if (productCategoryMapper.selectCountByParentId(id) > 0) {
  100 + throw exception(product_CATEGORY_EXISTS_CHILDREN);
  101 + }
  102 + // 校验是否被产品使用
  103 + if (crmProductService.getProductByCategoryId(id) !=null) {
  104 + throw exception(PRODUCT_CATEGORY_USED);
  105 + }
  106 + // 删除
  107 + productCategoryMapper.deleteById(id);
  108 + }
  109 +
113 110 @Override
114 111 public CrmProductCategoryDO getProductCategory(Long id) {
115 112 return productCategoryMapper.selectById(id);
... ...