Commit 3678752a610f70e414f4fe6f2ecf498604904b81
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); | ... | ... |