Commit c463f831f41da8738d15c1f082ffd73e686a7c24
Committed by
Gitee
!776 【CRM:优化产品以及产品分类】
Merge pull request !776 from ZanGe丶/feature/crm
Showing
30 changed files
with
442 additions
and
319 deletions
yudao-module-crm/yudao-module-crm-api/src/main/java/cn/iocoder/yudao/module/crm/enums/ErrorCodeConstants.java
| ... | ... | @@ -50,11 +50,18 @@ public interface ErrorCodeConstants { |
| 50 | 50 | ErrorCode CRM_PERMISSION_DELETE_SELF_PERMISSION_FAIL_EXIST_OWNER = new ErrorCode(1_020_007_007, "删除数据权限失败,原因:不能删除负责人"); |
| 51 | 51 | |
| 52 | 52 | // ========== 产品 1_020_008_000 ========== |
| 53 | - ErrorCode PRODUCT_NOT_EXISTS = new ErrorCode(1_020_008_000, "产品不存在"); | |
| 54 | - ErrorCode PRODUCT_NO_EXISTS = new ErrorCode(1_020_008_001, "产品编号已存在"); | |
| 53 | + ErrorCode CRM_PRODUCT_NOT_EXISTS = new ErrorCode(1_020_008_000, "产品不存在"); | |
| 54 | + ErrorCode CRM_PRODUCT_NO_EXISTS = new ErrorCode(1_020_008_001, "产品编号已存在"); | |
| 55 | 55 | |
| 56 | 56 | // ========== 产品分类 1_020_009_000 ========== |
| 57 | - ErrorCode PRODUCT_CATEGORY_NOT_EXISTS = new ErrorCode(1_020_009_000, "产品分类不存在"); | |
| 57 | + ErrorCode CRM_PRODUCT_CATEGORY_NOT_EXISTS = new ErrorCode(1_020_009_000, "产品分类不存在"); | |
| 58 | + ErrorCode CRM_PRODUCT_CATEGORY_EXISTS = new ErrorCode(1_020_009_001, "产品分类已存在"); | |
| 59 | + | |
| 60 | + ErrorCode CRM_PRODUCT_CATEGORY_USED = new ErrorCode(1_020_009_002, "产品分类已关联产品"); | |
| 61 | + | |
| 62 | + ErrorCode CRM_CATEGORY_PARENT_NOT_EXISTS = new ErrorCode(1_020_009_003, "父分类不存在"); | |
| 63 | + ErrorCode CRM_CATEGORY_PARENT_NOT_FIRST_LEVEL = new ErrorCode(1_020_009_004, "父分类不能是二级分类"); | |
| 64 | + ErrorCode CRM_CATEGORY_EXISTS_CHILDREN = new ErrorCode(1_020_009_005, "存在子分类,无法删除"); | |
| 58 | 65 | |
| 59 | 66 | // ========== 商机状态类型 1_020_010_000 ========== |
| 60 | 67 | ErrorCode BUSINESS_STATUS_TYPE_NOT_EXISTS = new ErrorCode(1_020_010_000, "商机状态类型不存在"); | ... | ... |
yudao-module-crm/yudao-module-crm-api/src/main/java/cn/iocoder/yudao/module/crm/enums/product/CrmProductStatusEnum.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.crm.enums.product; | |
| 2 | + | |
| 3 | +import cn.iocoder.yudao.framework.common.core.IntArrayValuable; | |
| 4 | +import lombok.AllArgsConstructor; | |
| 5 | +import lombok.Getter; | |
| 6 | + | |
| 7 | +import java.util.Arrays; | |
| 8 | + | |
| 9 | +/** | |
| 10 | + * @author ZanGe丶 | |
| 11 | + * @create 2023-11-30 21:53 | |
| 12 | + */ | |
| 13 | +@Getter | |
| 14 | +@AllArgsConstructor | |
| 15 | +public enum CrmProductStatusEnum implements IntArrayValuable { | |
| 16 | + DISABLE(0, "下架"), | |
| 17 | + ENABLE(1, "上架"); | |
| 18 | + | |
| 19 | + public static final int[] ARRAYS = Arrays.stream(values()).mapToInt(CrmProductStatusEnum::getStatus).toArray(); | |
| 20 | + | |
| 21 | + /** | |
| 22 | + * 状态 | |
| 23 | + */ | |
| 24 | + private final Integer status; | |
| 25 | + /** | |
| 26 | + * 状态名 | |
| 27 | + */ | |
| 28 | + private final String name; | |
| 29 | + | |
| 30 | + @Override | |
| 31 | + public int[] array() { | |
| 32 | + return ARRAYS; | |
| 33 | + } | |
| 34 | + | |
| 35 | + /** | |
| 36 | + * 判断是否处于【上架】状态 | |
| 37 | + * | |
| 38 | + * @param status 状态 | |
| 39 | + * @return 是否处于【上架】状态 | |
| 40 | + */ | |
| 41 | + public static boolean isEnable(Integer status) { | |
| 42 | + return ENABLE.getStatus().equals(status); | |
| 43 | + } | |
| 44 | +} | ... | ... |
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/productcategory/ProductCategoryController.java renamed to yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/product/CrmProductCategoryController.java
| 1 | -package cn.iocoder.yudao.module.crm.controller.admin.productcategory; | |
| 1 | +package cn.iocoder.yudao.module.crm.controller.admin.product; | |
| 2 | 2 | |
| 3 | -import org.springframework.web.bind.annotation.*; | |
| 4 | -import javax.annotation.Resource; | |
| 5 | -import org.springframework.validation.annotation.Validated; | |
| 6 | -import org.springframework.security.access.prepost.PreAuthorize; | |
| 7 | -import io.swagger.v3.oas.annotations.tags.Tag; | |
| 8 | -import io.swagger.v3.oas.annotations.Parameter; | |
| 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; | |
| 9 | +import cn.iocoder.yudao.module.crm.dal.dataobject.product.CrmProductCategoryDO; | |
| 10 | +import cn.iocoder.yudao.module.crm.service.product.CrmProductCategoryService; | |
| 9 | 11 | import io.swagger.v3.oas.annotations.Operation; |
| 12 | +import io.swagger.v3.oas.annotations.Parameter; | |
| 13 | +import io.swagger.v3.oas.annotations.tags.Tag; | |
| 14 | +import org.springframework.security.access.prepost.PreAuthorize; | |
| 15 | +import org.springframework.validation.annotation.Validated; | |
| 16 | +import org.springframework.web.bind.annotation.*; | |
| 10 | 17 | |
| 11 | -import javax.validation.constraints.*; | |
| 12 | -import javax.validation.*; | |
| 13 | -import javax.servlet.http.*; | |
| 14 | -import java.util.*; | |
| 15 | -import java.io.IOException; | |
| 18 | +import javax.annotation.Resource; | |
| 19 | +import javax.validation.Valid; | |
| 20 | +import java.util.List; | |
| 16 | 21 | |
| 17 | -import cn.iocoder.yudao.framework.common.pojo.PageResult; | |
| 18 | -import cn.iocoder.yudao.framework.common.pojo.CommonResult; | |
| 19 | 22 | import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; |
| 20 | 23 | |
| 21 | -import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; | |
| 22 | - | |
| 23 | -import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog; | |
| 24 | -import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.*; | |
| 25 | - | |
| 26 | -import cn.iocoder.yudao.module.crm.controller.admin.productcategory.vo.*; | |
| 27 | -import cn.iocoder.yudao.module.crm.dal.dataobject.productcategory.ProductCategoryDO; | |
| 28 | -import cn.iocoder.yudao.module.crm.convert.productcategory.ProductCategoryConvert; | |
| 29 | -import cn.iocoder.yudao.module.crm.service.productcategory.ProductCategoryService; | |
| 30 | - | |
| 31 | 24 | @Tag(name = "管理后台 - 产品分类") |
| 32 | 25 | @RestController |
| 33 | 26 | @RequestMapping("/crm/product-category") |
| 34 | 27 | @Validated |
| 35 | -public class ProductCategoryController { | |
| 28 | +public class CrmProductCategoryController { | |
| 36 | 29 | |
| 37 | 30 | @Resource |
| 38 | - private ProductCategoryService productCategoryService; | |
| 31 | + private CrmProductCategoryService productCategoryService; | |
| 39 | 32 | |
| 40 | 33 | @PostMapping("/create") |
| 41 | 34 | @Operation(summary = "创建产品分类") |
| 42 | 35 | @PreAuthorize("@ss.hasPermission('crm:product-category:create')") |
| 43 | - public CommonResult<Long> createProductCategory(@Valid @RequestBody ProductCategoryCreateReqVO createReqVO) { | |
| 36 | + public CommonResult<Long> createProductCategory(@Valid @RequestBody CrmProductCategoryCreateReqVO createReqVO) { | |
| 44 | 37 | return success(productCategoryService.createProductCategory(createReqVO)); |
| 45 | 38 | } |
| 46 | 39 | |
| 47 | 40 | @PutMapping("/update") |
| 48 | 41 | @Operation(summary = "更新产品分类") |
| 49 | 42 | @PreAuthorize("@ss.hasPermission('crm:product-category:update')") |
| 50 | - public CommonResult<Boolean> updateProductCategory(@Valid @RequestBody ProductCategoryUpdateReqVO updateReqVO) { | |
| 43 | + public CommonResult<Boolean> updateProductCategory(@Valid @RequestBody CrmProductCategoryUpdateReqVO updateReqVO) { | |
| 51 | 44 | productCategoryService.updateProductCategory(updateReqVO); |
| 52 | 45 | return success(true); |
| 53 | 46 | } |
| ... | ... | @@ -65,17 +58,17 @@ public class ProductCategoryController { |
| 65 | 58 | @Operation(summary = "获得产品分类") |
| 66 | 59 | @Parameter(name = "id", description = "编号", required = true, example = "1024") |
| 67 | 60 | @PreAuthorize("@ss.hasPermission('crm:product-category:query')") |
| 68 | - public CommonResult<ProductCategoryRespVO> getProductCategory(@RequestParam("id") Long id) { | |
| 69 | - ProductCategoryDO productCategory = productCategoryService.getProductCategory(id); | |
| 70 | - return success(ProductCategoryConvert.INSTANCE.convert(productCategory)); | |
| 61 | + public CommonResult<CrmProductCategoryRespVO> getProductCategory(@RequestParam("id") Long id) { | |
| 62 | + CrmProductCategoryDO productCategory = productCategoryService.getProductCategory(id); | |
| 63 | + return success(CrmProductCategoryConvert.INSTANCE.convert(productCategory)); | |
| 71 | 64 | } |
| 72 | 65 | |
| 73 | 66 | @GetMapping("/list") |
| 74 | 67 | @Operation(summary = "获得产品分类列表") |
| 75 | 68 | @PreAuthorize("@ss.hasPermission('crm:product-category:query')") |
| 76 | - public CommonResult<List<ProductCategoryRespVO>> getProductCategoryList(@Valid ProductCategoryListReqVO treeListReqVO) { | |
| 77 | - List<ProductCategoryDO> list = productCategoryService.getProductCategoryList(treeListReqVO); | |
| 78 | - return success(ProductCategoryConvert.INSTANCE.convertList(list)); | |
| 69 | + public CommonResult<List<CrmProductCategoryRespVO>> getProductCategoryList(@Valid CrmProductCategoryListReqVO treeListReqVO) { | |
| 70 | + List<CrmProductCategoryDO> list = productCategoryService.getProductCategoryList(treeListReqVO); | |
| 71 | + return success(CrmProductCategoryConvert.INSTANCE.convertList(list)); | |
| 79 | 72 | } |
| 80 | 73 | |
| 81 | 74 | } | ... | ... |
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/product/ProductController.java renamed to yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/product/CrmProductController.java
| ... | ... | @@ -4,10 +4,10 @@ import cn.iocoder.yudao.framework.common.pojo.CommonResult; |
| 4 | 4 | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| 5 | 5 | import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; |
| 6 | 6 | import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog; |
| 7 | -import cn.iocoder.yudao.module.crm.controller.admin.product.vo.*; | |
| 8 | -import cn.iocoder.yudao.module.crm.convert.product.ProductConvert; | |
| 9 | -import cn.iocoder.yudao.module.crm.dal.dataobject.product.ProductDO; | |
| 10 | -import cn.iocoder.yudao.module.crm.service.product.ProductService; | |
| 7 | +import cn.iocoder.yudao.module.crm.controller.admin.product.vo.product.*; | |
| 8 | +import cn.iocoder.yudao.module.crm.convert.product.CrmProductConvert; | |
| 9 | +import cn.iocoder.yudao.module.crm.dal.dataobject.product.CrmProductDO; | |
| 10 | +import cn.iocoder.yudao.module.crm.service.product.CrmProductService; | |
| 11 | 11 | import io.swagger.v3.oas.annotations.Operation; |
| 12 | 12 | import io.swagger.v3.oas.annotations.Parameter; |
| 13 | 13 | import io.swagger.v3.oas.annotations.tags.Tag; |
| ... | ... | @@ -28,22 +28,22 @@ import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.E |
| 28 | 28 | @RestController |
| 29 | 29 | @RequestMapping("/crm/product") |
| 30 | 30 | @Validated |
| 31 | -public class ProductController { | |
| 31 | +public class CrmProductController { | |
| 32 | 32 | |
| 33 | 33 | @Resource |
| 34 | - private ProductService productService; | |
| 34 | + private CrmProductService productService; | |
| 35 | 35 | |
| 36 | 36 | @PostMapping("/create") |
| 37 | 37 | @Operation(summary = "创建产品") |
| 38 | 38 | @PreAuthorize("@ss.hasPermission('crm:product:create')") |
| 39 | - public CommonResult<Long> createProduct(@Valid @RequestBody ProductCreateReqVO createReqVO) { | |
| 39 | + public CommonResult<Long> createProduct(@Valid @RequestBody CrmProductCreateReqVO createReqVO) { | |
| 40 | 40 | return success(productService.createProduct(createReqVO)); |
| 41 | 41 | } |
| 42 | 42 | |
| 43 | 43 | @PutMapping("/update") |
| 44 | 44 | @Operation(summary = "更新产品") |
| 45 | 45 | @PreAuthorize("@ss.hasPermission('crm:product:update')") |
| 46 | - public CommonResult<Boolean> updateProduct(@Valid @RequestBody ProductUpdateReqVO updateReqVO) { | |
| 46 | + public CommonResult<Boolean> updateProduct(@Valid @RequestBody CrmProductUpdateReqVO updateReqVO) { | |
| 47 | 47 | productService.updateProduct(updateReqVO); |
| 48 | 48 | return success(true); |
| 49 | 49 | } |
| ... | ... | @@ -61,29 +61,29 @@ public class ProductController { |
| 61 | 61 | @Operation(summary = "获得产品") |
| 62 | 62 | @Parameter(name = "id", description = "编号", required = true, example = "1024") |
| 63 | 63 | @PreAuthorize("@ss.hasPermission('crm:product:query')") |
| 64 | - public CommonResult<ProductRespVO> getProduct(@RequestParam("id") Long id) { | |
| 65 | - ProductDO product = productService.getProduct(id); | |
| 66 | - return success(ProductConvert.INSTANCE.convert(product)); | |
| 64 | + public CommonResult<CrmProductRespVO> getProduct(@RequestParam("id") Long id) { | |
| 65 | + CrmProductDO product = productService.getProduct(id); | |
| 66 | + return success(CrmProductConvert.INSTANCE.convert(product)); | |
| 67 | 67 | } |
| 68 | 68 | |
| 69 | 69 | @GetMapping("/page") |
| 70 | 70 | @Operation(summary = "获得产品分页") |
| 71 | 71 | @PreAuthorize("@ss.hasPermission('crm:product:query')") |
| 72 | - public CommonResult<PageResult<ProductRespVO>> getProductPage(@Valid ProductPageReqVO pageVO) { | |
| 73 | - PageResult<ProductDO> pageResult = productService.getProductPage(pageVO); | |
| 74 | - return success(ProductConvert.INSTANCE.convertPage(pageResult)); | |
| 72 | + public CommonResult<PageResult<CrmProductRespVO>> getProductPage(@Valid CrmProductPageReqVO pageVO) { | |
| 73 | + PageResult<CrmProductDO> pageResult = productService.getProductPage(pageVO); | |
| 74 | + return success(CrmProductConvert.INSTANCE.convertPage(pageResult)); | |
| 75 | 75 | } |
| 76 | 76 | |
| 77 | 77 | @GetMapping("/export-excel") |
| 78 | 78 | @Operation(summary = "导出产品 Excel") |
| 79 | 79 | @PreAuthorize("@ss.hasPermission('crm:product:export')") |
| 80 | 80 | @OperateLog(type = EXPORT) |
| 81 | - public void exportProductExcel(@Valid ProductExportReqVO exportReqVO, | |
| 81 | + public void exportProductExcel(@Valid CrmProductExportReqVO exportReqVO, | |
| 82 | 82 | HttpServletResponse response) throws IOException { |
| 83 | - List<ProductDO> list = productService.getProductList(exportReqVO); | |
| 83 | + List<CrmProductDO> list = productService.getProductList(exportReqVO); | |
| 84 | 84 | // 导出 Excel |
| 85 | - List<ProductExcelVO> datas = ProductConvert.INSTANCE.convertList02(list); | |
| 86 | - ExcelUtils.write(response, "产品.xls", "数据", ProductExcelVO.class, datas); | |
| 85 | + List<CrmProductExcelVO> datas = CrmProductConvert.INSTANCE.convertList02(list); | |
| 86 | + ExcelUtils.write(response, "产品.xls", "数据", CrmProductExcelVO.class, datas); | |
| 87 | 87 | } |
| 88 | 88 | |
| 89 | 89 | } | ... | ... |
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/product/vo/ProductBaseVO.java renamed to yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/product/vo/product/CrmProductBaseVO.java
| 1 | -package cn.iocoder.yudao.module.crm.controller.admin.product.vo; | |
| 1 | +package cn.iocoder.yudao.module.crm.controller.admin.product.vo.product; | |
| 2 | 2 | |
| 3 | 3 | import io.swagger.v3.oas.annotations.media.Schema; |
| 4 | 4 | import lombok.Data; |
| 5 | 5 | |
| 6 | 6 | import javax.validation.constraints.NotNull; |
| 7 | 7 | |
| 8 | -// TODO @zange:需要加 CRM 前置噢 | |
| 8 | +// TODO @zange-ok:需要加 CRM 前置噢 | |
| 9 | 9 | /** |
| 10 | 10 | * 产品 Base VO,提供给添加、修改、详细的子 VO 使用 |
| 11 | 11 | * 如果子 VO 存在差异的字段,请不要添加到这里,影响 Swagger 文档生成 |
| 12 | 12 | */ |
| 13 | 13 | @Data |
| 14 | -public class ProductBaseVO { | |
| 14 | +public class CrmProductBaseVO { | |
| 15 | 15 | |
| 16 | 16 | // TODO @zange:example 要写哈;主要是接口文档,可以基于 example 可以生产请求参数 |
| 17 | 17 | |
| 18 | - @Schema(description = "产品名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "李四") | |
| 18 | + @Schema(description = "产品名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "好产品") | |
| 19 | 19 | @NotNull(message = "产品名称不能为空") |
| 20 | 20 | private String name; |
| 21 | 21 | |
| 22 | - @Schema(description = "产品编码", requiredMode = Schema.RequiredMode.REQUIRED) | |
| 22 | + @Schema(description = "产品编码", requiredMode = Schema.RequiredMode.REQUIRED, example = "12306") | |
| 23 | 23 | @NotNull(message = "产品编码不能为空") |
| 24 | 24 | private String no; |
| 25 | 25 | |
| 26 | - @Schema(description = "单位") | |
| 26 | + @Schema(description = "单位", example = "2") | |
| 27 | 27 | private String unit; |
| 28 | 28 | |
| 29 | 29 | @Schema(description = "价格", example = "8911") |
| 30 | 30 | private Long price; |
| 31 | 31 | |
| 32 | - @Schema(description = "状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "2") | |
| 32 | + @Schema(description = "状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "上架") | |
| 33 | 33 | @NotNull(message = "状态不能为空") |
| 34 | 34 | private Integer status; |
| 35 | 35 | |
| 36 | - @Schema(description = "产品分类ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1738") | |
| 36 | + @Schema(description = "产品分类ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "2") | |
| 37 | 37 | @NotNull(message = "产品分类ID不能为空") |
| 38 | 38 | private Long categoryId; |
| 39 | 39 | |
| 40 | 40 | @Schema(description = "产品描述", example = "你说的对") |
| 41 | 41 | private String description; |
| 42 | 42 | |
| 43 | - // TODO @zange:这个字段只有 create 可以传递,update 不传递;所以放到 create 和 resp 里; | |
| 44 | - | |
| 45 | - @Schema(description = "负责人的用户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "31926") | |
| 46 | - @NotNull(message = "负责人的用户编号不能为空") | |
| 47 | - private Long ownerUserId; | |
| 43 | + // TODO @zange-ok:这个字段只有 create 可以传递,update 不传递;所以放到 create 和 resp 里; | |
| 48 | 44 | |
| 49 | 45 | } | ... | ... |
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/product/vo/ProductCreateReqVO.java renamed to yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/product/vo/product/CrmProductCreateReqVO.java
| 1 | -package cn.iocoder.yudao.module.crm.controller.admin.product.vo; | |
| 1 | +package cn.iocoder.yudao.module.crm.controller.admin.product.vo.product; | |
| 2 | 2 | |
| 3 | 3 | import lombok.*; |
| 4 | -import java.util.*; | |
| 5 | 4 | import io.swagger.v3.oas.annotations.media.Schema; |
| 6 | -import javax.validation.constraints.*; | |
| 5 | + | |
| 6 | +import javax.validation.constraints.NotNull; | |
| 7 | 7 | |
| 8 | 8 | @Schema(description = "管理后台 - 产品创建 Request VO") |
| 9 | 9 | @Data |
| 10 | 10 | @EqualsAndHashCode(callSuper = true) |
| 11 | 11 | @ToString(callSuper = true) |
| 12 | -public class ProductCreateReqVO extends ProductBaseVO { | |
| 13 | - | |
| 12 | +public class CrmProductCreateReqVO extends CrmProductBaseVO { | |
| 13 | + @Schema(description = "负责人的用户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "31926") | |
| 14 | + @NotNull(message = "负责人的用户编号不能为空") | |
| 15 | + private Long ownerUserId; | |
| 14 | 16 | } | ... | ... |
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/product/vo/ProductExcelVO.java renamed to yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/product/vo/product/CrmProductExcelVO.java
| 1 | -package cn.iocoder.yudao.module.crm.controller.admin.product.vo; | |
| 1 | +package cn.iocoder.yudao.module.crm.controller.admin.product.vo.product; | |
| 2 | 2 | |
| 3 | 3 | import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat; |
| 4 | 4 | import cn.iocoder.yudao.framework.excel.core.convert.DictConvert; |
| ... | ... | @@ -7,14 +7,14 @@ import lombok.Data; |
| 7 | 7 | |
| 8 | 8 | import java.time.LocalDateTime; |
| 9 | 9 | |
| 10 | -// TODO 芋艿:这个导出最后搞 | |
| 10 | +// TODO 芋艿:这个导出最后搞 那暂时就放着不动了哈 | |
| 11 | 11 | /** |
| 12 | 12 | * 产品 Excel VO |
| 13 | 13 | * |
| 14 | 14 | * @author ZanGe丶 |
| 15 | 15 | */ |
| 16 | 16 | @Data |
| 17 | -public class ProductExcelVO { | |
| 17 | +public class CrmProductExcelVO { | |
| 18 | 18 | |
| 19 | 19 | @ExcelProperty("主键id") |
| 20 | 20 | private Long id; | ... | ... |
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/product/vo/ProductExportReqVO.java renamed to yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/product/vo/product/CrmProductExportReqVO.java
| 1 | -package cn.iocoder.yudao.module.crm.controller.admin.product.vo; | |
| 1 | +package cn.iocoder.yudao.module.crm.controller.admin.product.vo.product; | |
| 2 | 2 | |
| 3 | 3 | import io.swagger.v3.oas.annotations.media.Schema; |
| 4 | 4 | import lombok.Data; |
| ... | ... | @@ -11,7 +11,7 @@ import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_ |
| 11 | 11 | // TODO 芋艿:这个导出最后搞 |
| 12 | 12 | @Schema(description = "管理后台 - 产品 Excel 导出 Request VO,参数和 ProductPageReqVO 是一致的") |
| 13 | 13 | @Data |
| 14 | -public class ProductExportReqVO { | |
| 14 | +public class CrmProductExportReqVO { | |
| 15 | 15 | |
| 16 | 16 | @Schema(description = "产品名称", example = "李四") |
| 17 | 17 | private String name; | ... | ... |
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/product/vo/ProductPageReqVO.java renamed to yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/product/vo/product/CrmProductPageReqVO.java
| 1 | -package cn.iocoder.yudao.module.crm.controller.admin.product.vo; | |
| 1 | +package cn.iocoder.yudao.module.crm.controller.admin.product.vo.product; | |
| 2 | 2 | |
| 3 | 3 | import cn.iocoder.yudao.framework.common.pojo.PageParam; |
| 4 | 4 | import io.swagger.v3.oas.annotations.media.Schema; |
| ... | ... | @@ -11,12 +11,12 @@ import java.time.LocalDateTime; |
| 11 | 11 | |
| 12 | 12 | import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; |
| 13 | 13 | |
| 14 | -// TODO @zange:按照需求,裁剪下筛选的字段,目前应该只要 name 和 status | |
| 14 | +// TODO @zange-ok:按照需求,裁剪下筛选的字段,目前应该只要 name 和 status | |
| 15 | 15 | @Schema(description = "管理后台 - 产品分页 Request VO") |
| 16 | 16 | @Data |
| 17 | 17 | @EqualsAndHashCode(callSuper = true) |
| 18 | 18 | @ToString(callSuper = true) |
| 19 | -public class ProductPageReqVO extends PageParam { | |
| 19 | +public class CrmProductPageReqVO extends PageParam { | |
| 20 | 20 | |
| 21 | 21 | @Schema(description = "产品名称", example = "李四") |
| 22 | 22 | private String name; | ... | ... |
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/product/vo/ProductRespVO.java renamed to yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/product/vo/product/CrmProductRespVO.java
| 1 | -package cn.iocoder.yudao.module.crm.controller.admin.product.vo; | |
| 1 | +package cn.iocoder.yudao.module.crm.controller.admin.product.vo.product; | |
| 2 | 2 | |
| 3 | 3 | import io.swagger.v3.oas.annotations.media.Schema; |
| 4 | 4 | import lombok.*; |
| 5 | + | |
| 6 | +import javax.validation.constraints.NotNull; | |
| 5 | 7 | import java.time.LocalDateTime; |
| 6 | 8 | |
| 7 | 9 | @Schema(description = "管理后台 - 产品 Response VO") |
| 8 | 10 | @Data |
| 9 | 11 | @EqualsAndHashCode(callSuper = true) |
| 10 | 12 | @ToString(callSuper = true) |
| 11 | -public class ProductRespVO extends ProductBaseVO { | |
| 13 | +public class CrmProductRespVO extends CrmProductBaseVO { | |
| 12 | 14 | |
| 13 | 15 | @Schema(description = "主键id", requiredMode = Schema.RequiredMode.REQUIRED, example = "20529") |
| 14 | 16 | private Long id; |
| ... | ... | @@ -16,4 +18,7 @@ public class ProductRespVO extends ProductBaseVO { |
| 16 | 18 | @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) |
| 17 | 19 | private LocalDateTime createTime; |
| 18 | 20 | |
| 21 | + @Schema(description = "负责人的用户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "31926") | |
| 22 | + @NotNull(message = "负责人的用户编号不能为空") | |
| 23 | + private Long ownerUserId; | |
| 19 | 24 | } | ... | ... |
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/product/vo/ProductUpdateReqVO.java renamed to yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/product/vo/product/CrmProductUpdateReqVO.java
| 1 | -package cn.iocoder.yudao.module.crm.controller.admin.product.vo; | |
| 1 | +package cn.iocoder.yudao.module.crm.controller.admin.product.vo.product; | |
| 2 | 2 | |
| 3 | 3 | import io.swagger.v3.oas.annotations.media.Schema; |
| 4 | 4 | import lombok.*; |
| 5 | -import java.util.*; | |
| 5 | + | |
| 6 | 6 | import javax.validation.constraints.*; |
| 7 | 7 | |
| 8 | 8 | @Schema(description = "管理后台 - 产品更新 Request VO") |
| 9 | 9 | @Data |
| 10 | 10 | @EqualsAndHashCode(callSuper = true) |
| 11 | 11 | @ToString(callSuper = true) |
| 12 | -public class ProductUpdateReqVO extends ProductBaseVO { | |
| 12 | +public class CrmProductUpdateReqVO extends CrmProductBaseVO { | |
| 13 | 13 | |
| 14 | 14 | @Schema(description = "主键id", requiredMode = Schema.RequiredMode.REQUIRED, example = "20529") |
| 15 | 15 | @NotNull(message = "主键id不能为空") | ... | ... |
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/productcategory/vo/ProductCategoryBaseVO.java renamed to yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/product/vo/productcategory/CrmProductCategoryBaseVO.java
| 1 | -package cn.iocoder.yudao.module.crm.controller.admin.productcategory.vo; | |
| 1 | +package cn.iocoder.yudao.module.crm.controller.admin.product.vo.productcategory; | |
| 2 | 2 | |
| 3 | 3 | import io.swagger.v3.oas.annotations.media.Schema; |
| 4 | 4 | import lombok.Data; |
| ... | ... | @@ -10,7 +10,7 @@ import javax.validation.constraints.NotNull; |
| 10 | 10 | * 如果子 VO 存在差异的字段,请不要添加到这里,影响 Swagger 文档生成 |
| 11 | 11 | */ |
| 12 | 12 | @Data |
| 13 | -public class ProductCategoryBaseVO { | |
| 13 | +public class CrmProductCategoryBaseVO { | |
| 14 | 14 | |
| 15 | 15 | @Schema(description = "名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "赵六") |
| 16 | 16 | @NotNull(message = "名称不能为空") | ... | ... |
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/productcategory/vo/ProductCategoryCreateReqVO.java renamed to yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/product/vo/productcategory/CrmProductCategoryCreateReqVO.java
| 1 | -package cn.iocoder.yudao.module.crm.controller.admin.productcategory.vo; | |
| 1 | +package cn.iocoder.yudao.module.crm.controller.admin.product.vo.productcategory; | |
| 2 | 2 | |
| 3 | 3 | import lombok.*; |
| 4 | -import java.util.*; | |
| 5 | 4 | import io.swagger.v3.oas.annotations.media.Schema; |
| 6 | -import javax.validation.constraints.*; | |
| 7 | 5 | |
| 8 | 6 | @Schema(description = "管理后台 - 产品分类创建 Request VO") |
| 9 | 7 | @Data |
| 10 | 8 | @EqualsAndHashCode(callSuper = true) |
| 11 | 9 | @ToString(callSuper = true) |
| 12 | -public class ProductCategoryCreateReqVO extends ProductCategoryBaseVO { | |
| 10 | +public class CrmProductCategoryCreateReqVO extends CrmProductCategoryBaseVO { | |
| 13 | 11 | |
| 14 | 12 | } | ... | ... |
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/productcategory/vo/ProductCategoryListReqVO.java renamed to yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/product/vo/productcategory/CrmProductCategoryListReqVO.java
| 1 | -package cn.iocoder.yudao.module.crm.controller.admin.productcategory.vo; | |
| 1 | +package cn.iocoder.yudao.module.crm.controller.admin.product.vo.productcategory; | |
| 2 | 2 | |
| 3 | 3 | import com.alibaba.excel.annotation.ExcelProperty; |
| 4 | 4 | import io.swagger.v3.oas.annotations.media.Schema; |
| ... | ... | @@ -9,7 +9,7 @@ import java.time.LocalDateTime; |
| 9 | 9 | // TODO 芋艿:这个导出最后搞;命名应该是按照 ProductExportReqVO 风格 |
| 10 | 10 | @Schema(description = "管理后台 - 产品分类列表 Request VO") |
| 11 | 11 | @Data |
| 12 | -public class ProductCategoryListReqVO { | |
| 12 | +public class CrmProductCategoryListReqVO { | |
| 13 | 13 | |
| 14 | 14 | @ExcelProperty("名称") |
| 15 | 15 | private String name; | ... | ... |
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/productcategory/vo/ProductCategoryRespVO.java renamed to yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/product/vo/productcategory/CrmProductCategoryRespVO.java
| 1 | -package cn.iocoder.yudao.module.crm.controller.admin.productcategory.vo; | |
| 1 | +package cn.iocoder.yudao.module.crm.controller.admin.product.vo.productcategory; | |
| 2 | 2 | |
| 3 | 3 | import io.swagger.v3.oas.annotations.media.Schema; |
| 4 | 4 | import lombok.*; |
| ... | ... | @@ -8,7 +8,7 @@ import java.time.LocalDateTime; |
| 8 | 8 | @Data |
| 9 | 9 | @EqualsAndHashCode(callSuper = true) |
| 10 | 10 | @ToString(callSuper = true) |
| 11 | -public class ProductCategoryRespVO extends ProductCategoryBaseVO { | |
| 11 | +public class CrmProductCategoryRespVO extends CrmProductCategoryBaseVO { | |
| 12 | 12 | |
| 13 | 13 | @Schema(description = "主键id", requiredMode = Schema.RequiredMode.REQUIRED, example = "23902") |
| 14 | 14 | private Long id; | ... | ... |
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/productcategory/vo/ProductCategoryUpdateReqVO.java renamed to yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/product/vo/productcategory/CrmProductCategoryUpdateReqVO.java
| 1 | -package cn.iocoder.yudao.module.crm.controller.admin.productcategory.vo; | |
| 1 | +package cn.iocoder.yudao.module.crm.controller.admin.product.vo.productcategory; | |
| 2 | 2 | |
| 3 | 3 | import io.swagger.v3.oas.annotations.media.Schema; |
| 4 | 4 | import lombok.Data; |
| ... | ... | @@ -11,7 +11,7 @@ import javax.validation.constraints.NotNull; |
| 11 | 11 | @Data |
| 12 | 12 | @EqualsAndHashCode(callSuper = true) |
| 13 | 13 | @ToString(callSuper = true) |
| 14 | -public class ProductCategoryUpdateReqVO extends ProductCategoryBaseVO { | |
| 14 | +public class CrmProductCategoryUpdateReqVO extends CrmProductCategoryBaseVO { | |
| 15 | 15 | |
| 16 | 16 | @Schema(description = "主键 id", requiredMode = Schema.RequiredMode.REQUIRED, example = "23902") |
| 17 | 17 | @NotNull(message = "主键 id 不能为空") | ... | ... |
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/convert/product/CrmProductCategoryConvert.java
0 → 100644
| 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
0 → 100644
| 1 | +package cn.iocoder.yudao.module.crm.convert.product; | |
| 2 | + | |
| 3 | +import cn.iocoder.yudao.framework.common.pojo.PageResult; | |
| 4 | +import cn.iocoder.yudao.module.crm.controller.admin.product.vo.product.CrmProductCreateReqVO; | |
| 5 | +import cn.iocoder.yudao.module.crm.controller.admin.product.vo.product.CrmProductExcelVO; | |
| 6 | +import cn.iocoder.yudao.module.crm.controller.admin.product.vo.product.CrmProductRespVO; | |
| 7 | +import cn.iocoder.yudao.module.crm.controller.admin.product.vo.product.CrmProductUpdateReqVO; | |
| 8 | +import cn.iocoder.yudao.module.crm.dal.dataobject.product.CrmProductDO; | |
| 9 | +import org.mapstruct.Mapper; | |
| 10 | +import org.mapstruct.factory.Mappers; | |
| 11 | + | |
| 12 | +import java.util.List; | |
| 13 | + | |
| 14 | +/** | |
| 15 | + * 产品 Convert | |
| 16 | + * | |
| 17 | + * @author ZanGe丶 | |
| 18 | + */ | |
| 19 | +@Mapper | |
| 20 | +public interface CrmProductConvert { | |
| 21 | + | |
| 22 | + CrmProductConvert INSTANCE = Mappers.getMapper(CrmProductConvert.class); | |
| 23 | + | |
| 24 | + CrmProductDO convert(CrmProductCreateReqVO bean); | |
| 25 | + | |
| 26 | + CrmProductDO convert(CrmProductUpdateReqVO bean); | |
| 27 | + | |
| 28 | + CrmProductRespVO convert(CrmProductDO bean); | |
| 29 | + | |
| 30 | + List<CrmProductRespVO> convertList(List<CrmProductDO> list); | |
| 31 | + | |
| 32 | + PageResult<CrmProductRespVO> convertPage(PageResult<CrmProductDO> page); | |
| 33 | + | |
| 34 | + List<CrmProductExcelVO> convertList02(List<CrmProductDO> list); | |
| 35 | + | |
| 36 | +} | ... | ... |
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/convert/product/ProductConvert.java deleted
| 1 | -package cn.iocoder.yudao.module.crm.convert.product; | |
| 2 | - | |
| 3 | -import java.util.*; | |
| 4 | - | |
| 5 | -import cn.iocoder.yudao.framework.common.pojo.PageResult; | |
| 6 | - | |
| 7 | -import org.mapstruct.Mapper; | |
| 8 | -import org.mapstruct.factory.Mappers; | |
| 9 | -import cn.iocoder.yudao.module.crm.controller.admin.product.vo.*; | |
| 10 | -import cn.iocoder.yudao.module.crm.dal.dataobject.product.ProductDO; | |
| 11 | - | |
| 12 | -/** | |
| 13 | - * 产品 Convert | |
| 14 | - * | |
| 15 | - * @author ZanGe丶 | |
| 16 | - */ | |
| 17 | -@Mapper | |
| 18 | -public interface ProductConvert { | |
| 19 | - | |
| 20 | - ProductConvert INSTANCE = Mappers.getMapper(ProductConvert.class); | |
| 21 | - | |
| 22 | - ProductDO convert(ProductCreateReqVO bean); | |
| 23 | - | |
| 24 | - ProductDO convert(ProductUpdateReqVO bean); | |
| 25 | - | |
| 26 | - ProductRespVO convert(ProductDO bean); | |
| 27 | - | |
| 28 | - List<ProductRespVO> convertList(List<ProductDO> list); | |
| 29 | - | |
| 30 | - PageResult<ProductRespVO> convertPage(PageResult<ProductDO> page); | |
| 31 | - | |
| 32 | - List<ProductExcelVO> convertList02(List<ProductDO> list); | |
| 33 | - | |
| 34 | -} |
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/convert/productcategory/ProductCategoryConvert.java deleted
| 1 | -package cn.iocoder.yudao.module.crm.convert.productcategory; | |
| 2 | - | |
| 3 | -import java.util.*; | |
| 4 | - | |
| 5 | -import cn.iocoder.yudao.framework.common.pojo.PageResult; | |
| 6 | - | |
| 7 | -import org.mapstruct.Mapper; | |
| 8 | -import org.mapstruct.factory.Mappers; | |
| 9 | -import cn.iocoder.yudao.module.crm.controller.admin.productcategory.vo.*; | |
| 10 | -import cn.iocoder.yudao.module.crm.dal.dataobject.productcategory.ProductCategoryDO; | |
| 11 | - | |
| 12 | -/** | |
| 13 | - * 产品分类 Convert | |
| 14 | - * | |
| 15 | - * @author ZanGe丶 | |
| 16 | - */ | |
| 17 | -@Mapper | |
| 18 | -public interface ProductCategoryConvert { | |
| 19 | - | |
| 20 | - ProductCategoryConvert INSTANCE = Mappers.getMapper(ProductCategoryConvert.class); | |
| 21 | - | |
| 22 | - ProductCategoryDO convert(ProductCategoryCreateReqVO bean); | |
| 23 | - | |
| 24 | - ProductCategoryDO convert(ProductCategoryUpdateReqVO bean); | |
| 25 | - | |
| 26 | - ProductCategoryRespVO convert(ProductCategoryDO bean); | |
| 27 | - | |
| 28 | - List<ProductCategoryRespVO> convertList(List<ProductCategoryDO> list); | |
| 29 | - | |
| 30 | -} |
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/dataobject/productcategory/ProductCategoryDO.java renamed to yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/dataobject/product/CrmProductCategoryDO.java
| 1 | -package cn.iocoder.yudao.module.crm.dal.dataobject.productcategory; | |
| 1 | +package cn.iocoder.yudao.module.crm.dal.dataobject.product; | |
| 2 | 2 | |
| 3 | 3 | import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; |
| 4 | 4 | import com.baomidou.mybatisplus.annotation.KeySequence; |
| ... | ... | @@ -19,7 +19,16 @@ import lombok.*; |
| 19 | 19 | @Builder |
| 20 | 20 | @NoArgsConstructor |
| 21 | 21 | @AllArgsConstructor |
| 22 | -public class ProductCategoryDO extends BaseDO { | |
| 22 | +public class CrmProductCategoryDO extends BaseDO { | |
| 23 | + | |
| 24 | + /** | |
| 25 | + * 父分类编号 - 根分类 | |
| 26 | + */ | |
| 27 | + public static final Long PARENT_ID_NULL = 0L; | |
| 28 | + /** | |
| 29 | + * 限定分类层级 | |
| 30 | + */ | |
| 31 | + public static final int CATEGORY_LEVEL = 2; | |
| 23 | 32 | |
| 24 | 33 | /** |
| 25 | 34 | * 主键id |
| ... | ... | @@ -32,7 +41,7 @@ public class ProductCategoryDO extends BaseDO { |
| 32 | 41 | private String name; |
| 33 | 42 | /** |
| 34 | 43 | * 父级 id |
| 35 | - * // TODO @zange:这个要写下关联 CategoryDO 的 id 字段;参考下别的模块哈 | |
| 44 | + * // TODO @zange-ok:这个要写下关联 CategoryDO 的 id 字段;参考下别的模块哈 | |
| 36 | 45 | */ |
| 37 | 46 | private Long parentId; |
| 38 | 47 | ... | ... |
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/dataobject/product/ProductDO.java renamed to yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/dataobject/product/CrmProductDO.java
| 1 | 1 | package cn.iocoder.yudao.module.crm.dal.dataobject.product; |
| 2 | 2 | |
| 3 | 3 | import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; |
| 4 | +import cn.iocoder.yudao.module.crm.enums.product.CrmProductStatusEnum; | |
| 4 | 5 | import com.baomidou.mybatisplus.annotation.KeySequence; |
| 5 | 6 | import com.baomidou.mybatisplus.annotation.TableId; |
| 6 | 7 | import com.baomidou.mybatisplus.annotation.TableName; |
| ... | ... | @@ -19,7 +20,7 @@ import lombok.*; |
| 19 | 20 | @Builder |
| 20 | 21 | @NoArgsConstructor |
| 21 | 22 | @AllArgsConstructor |
| 22 | -public class ProductDO extends BaseDO { | |
| 23 | +public class CrmProductDO extends BaseDO { | |
| 23 | 24 | |
| 24 | 25 | /** |
| 25 | 26 | * 主键 id |
| ... | ... | @@ -44,14 +45,12 @@ public class ProductDO extends BaseDO { |
| 44 | 45 | private Long price; |
| 45 | 46 | /** |
| 46 | 47 | * 状态 |
| 47 | - * | |
| 48 | - * 枚举 {@link TODO crm_product_status 对应的类} | |
| 49 | - * // TODO @zange:这个写个枚举类,然后 {@link关联下 | |
| 48 | + * 关联 {@link CrmProductStatusEnum} | |
| 50 | 49 | */ |
| 51 | 50 | private Integer status; |
| 52 | 51 | /** |
| 53 | 52 | * 产品分类 ID |
| 54 | - * // TODO @zange:这个要写下关联 CategoryDO 的 id 字段;参考下别的模块哈 | |
| 53 | + * 关联 {@link CrmProductCategoryDO#id} | |
| 55 | 54 | */ |
| 56 | 55 | private Long categoryId; |
| 57 | 56 | /** | ... | ... |
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/mysql/product/CrmProductCategoryMapper.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.crm.dal.mysql.product; | |
| 2 | + | |
| 3 | +import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; | |
| 4 | +import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; | |
| 5 | +import cn.iocoder.yudao.module.crm.controller.admin.product.vo.productcategory.CrmProductCategoryListReqVO; | |
| 6 | +import cn.iocoder.yudao.module.crm.dal.dataobject.product.CrmProductCategoryDO; | |
| 7 | +import org.apache.ibatis.annotations.Mapper; | |
| 8 | + | |
| 9 | +import java.util.List; | |
| 10 | + | |
| 11 | +/** | |
| 12 | + * 产品分类 Mapper | |
| 13 | + * | |
| 14 | + * @author ZanGe丶 | |
| 15 | + */ | |
| 16 | +@Mapper | |
| 17 | +public interface CrmProductCategoryMapper extends BaseMapperX<CrmProductCategoryDO> { | |
| 18 | + | |
| 19 | + | |
| 20 | + default List<CrmProductCategoryDO> selectList(CrmProductCategoryListReqVO reqVO) { | |
| 21 | + return selectList(new LambdaQueryWrapperX<CrmProductCategoryDO>() | |
| 22 | + .likeIfPresent(CrmProductCategoryDO::getName, reqVO.getName()) | |
| 23 | + .eqIfPresent(CrmProductCategoryDO::getParentId, reqVO.getParentId()) | |
| 24 | + .orderByDesc(CrmProductCategoryDO::getId)); | |
| 25 | + } | |
| 26 | + default CrmProductCategoryDO selectByName(String name) { | |
| 27 | + return selectOne(CrmProductCategoryDO::getName, name); | |
| 28 | + } | |
| 29 | + | |
| 30 | + default Long selectCountByParentId(Long parentId) { | |
| 31 | + return selectCount(CrmProductCategoryDO::getParentId, parentId); | |
| 32 | + } | |
| 33 | +} | ... | ... |
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/mysql/product/CrmProductMapper.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.crm.dal.mysql.product; | |
| 2 | + | |
| 3 | +import cn.iocoder.yudao.framework.common.pojo.PageResult; | |
| 4 | +import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; | |
| 5 | +import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; | |
| 6 | +import cn.iocoder.yudao.module.crm.controller.admin.product.vo.product.CrmProductExportReqVO; | |
| 7 | +import cn.iocoder.yudao.module.crm.controller.admin.product.vo.product.CrmProductPageReqVO; | |
| 8 | +import cn.iocoder.yudao.module.crm.dal.dataobject.product.CrmProductDO; | |
| 9 | +import org.apache.ibatis.annotations.Mapper; | |
| 10 | + | |
| 11 | +import java.util.List; | |
| 12 | + | |
| 13 | +/** | |
| 14 | + * 产品 Mapper | |
| 15 | + * | |
| 16 | + * @author ZanGe丶 | |
| 17 | + */ | |
| 18 | +@Mapper | |
| 19 | +public interface CrmProductMapper extends BaseMapperX<CrmProductDO> { | |
| 20 | + | |
| 21 | + default PageResult<CrmProductDO> selectPage(CrmProductPageReqVO reqVO) { | |
| 22 | + return selectPage(reqVO, new LambdaQueryWrapperX<CrmProductDO>() | |
| 23 | + .likeIfPresent(CrmProductDO::getName, reqVO.getName()) | |
| 24 | + .eqIfPresent(CrmProductDO::getStatus, reqVO.getStatus()) | |
| 25 | + .orderByDesc(CrmProductDO::getId)); | |
| 26 | + } | |
| 27 | + | |
| 28 | + default List<CrmProductDO> selectList(CrmProductExportReqVO reqVO) { | |
| 29 | + return selectList(new LambdaQueryWrapperX<CrmProductDO>() | |
| 30 | + .likeIfPresent(CrmProductDO::getName, reqVO.getName()) | |
| 31 | + .eqIfPresent(CrmProductDO::getStatus, reqVO.getStatus()) | |
| 32 | + .orderByDesc(CrmProductDO::getId)); | |
| 33 | + } | |
| 34 | + | |
| 35 | + default CrmProductDO selectByNo(String no) { | |
| 36 | + return selectOne(CrmProductDO::getNo, no); | |
| 37 | + } | |
| 38 | +} | ... | ... |
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/mysql/product/ProductMapper.java deleted
| 1 | -package cn.iocoder.yudao.module.crm.dal.mysql.product; | |
| 2 | - | |
| 3 | -import java.util.*; | |
| 4 | - | |
| 5 | -import cn.iocoder.yudao.framework.common.pojo.PageResult; | |
| 6 | -import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; | |
| 7 | -import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; | |
| 8 | -import cn.iocoder.yudao.module.crm.dal.dataobject.product.ProductDO; | |
| 9 | -import org.apache.ibatis.annotations.Mapper; | |
| 10 | -import cn.iocoder.yudao.module.crm.controller.admin.product.vo.*; | |
| 11 | - | |
| 12 | -/** | |
| 13 | - * 产品 Mapper | |
| 14 | - * | |
| 15 | - * @author ZanGe丶 | |
| 16 | - */ | |
| 17 | -@Mapper | |
| 18 | -public interface ProductMapper extends BaseMapperX<ProductDO> { | |
| 19 | - | |
| 20 | - default PageResult<ProductDO> selectPage(ProductPageReqVO reqVO) { | |
| 21 | - return selectPage(reqVO, new LambdaQueryWrapperX<ProductDO>() | |
| 22 | - .likeIfPresent(ProductDO::getName, reqVO.getName()) | |
| 23 | - .likeIfPresent(ProductDO::getNo, reqVO.getNo()) | |
| 24 | - .eqIfPresent(ProductDO::getUnit, reqVO.getUnit()) | |
| 25 | - .eqIfPresent(ProductDO::getPrice, reqVO.getPrice()) | |
| 26 | - .eqIfPresent(ProductDO::getStatus, reqVO.getStatus()) | |
| 27 | - .eqIfPresent(ProductDO::getCategoryId, reqVO.getCategoryId()) | |
| 28 | - .eqIfPresent(ProductDO::getDescription, reqVO.getDescription()) | |
| 29 | - .eqIfPresent(ProductDO::getOwnerUserId, reqVO.getOwnerUserId()) | |
| 30 | - .betweenIfPresent(ProductDO::getCreateTime, reqVO.getCreateTime()) | |
| 31 | - .orderByDesc(ProductDO::getId)); | |
| 32 | - } | |
| 33 | - | |
| 34 | - default List<ProductDO> selectList(ProductExportReqVO reqVO) { | |
| 35 | - return selectList(new LambdaQueryWrapperX<ProductDO>() | |
| 36 | - .likeIfPresent(ProductDO::getName, reqVO.getName()) | |
| 37 | - .likeIfPresent(ProductDO::getNo, reqVO.getNo()) | |
| 38 | - .eqIfPresent(ProductDO::getUnit, reqVO.getUnit()) | |
| 39 | - .eqIfPresent(ProductDO::getPrice, reqVO.getPrice()) | |
| 40 | - .eqIfPresent(ProductDO::getStatus, reqVO.getStatus()) | |
| 41 | - .eqIfPresent(ProductDO::getCategoryId, reqVO.getCategoryId()) | |
| 42 | - .eqIfPresent(ProductDO::getDescription, reqVO.getDescription()) | |
| 43 | - .eqIfPresent(ProductDO::getOwnerUserId, reqVO.getOwnerUserId()) | |
| 44 | - .betweenIfPresent(ProductDO::getCreateTime, reqVO.getCreateTime()) | |
| 45 | - .orderByDesc(ProductDO::getId)); | |
| 46 | - } | |
| 47 | - | |
| 48 | -} |
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/mysql/productcategory/ProductCategoryMapper.java deleted
| 1 | -package cn.iocoder.yudao.module.crm.dal.mysql.productcategory; | |
| 2 | - | |
| 3 | -import java.util.*; | |
| 4 | - | |
| 5 | -import cn.iocoder.yudao.framework.common.pojo.PageResult; | |
| 6 | -import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; | |
| 7 | -import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; | |
| 8 | -import cn.iocoder.yudao.module.crm.dal.dataobject.productcategory.ProductCategoryDO; | |
| 9 | -import org.apache.ibatis.annotations.Mapper; | |
| 10 | -import cn.iocoder.yudao.module.crm.controller.admin.productcategory.vo.*; | |
| 11 | - | |
| 12 | -/** | |
| 13 | - * 产品分类 Mapper | |
| 14 | - * | |
| 15 | - * @author ZanGe丶 | |
| 16 | - */ | |
| 17 | -@Mapper | |
| 18 | -public interface ProductCategoryMapper extends BaseMapperX<ProductCategoryDO> { | |
| 19 | - | |
| 20 | - | |
| 21 | - default List<ProductCategoryDO> selectList(ProductCategoryListReqVO reqVO) { | |
| 22 | - return selectList(new LambdaQueryWrapperX<ProductCategoryDO>() | |
| 23 | - .likeIfPresent(ProductCategoryDO::getName, reqVO.getName()) | |
| 24 | - .eqIfPresent(ProductCategoryDO::getParentId, reqVO.getParentId()) | |
| 25 | - .orderByDesc(ProductCategoryDO::getId)); | |
| 26 | - } | |
| 27 | - | |
| 28 | -} |
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/productcategory/ProductCategoryService.java renamed to yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/product/CrmProductCategoryService.java
| 1 | -package cn.iocoder.yudao.module.crm.service.productcategory; | |
| 1 | +package cn.iocoder.yudao.module.crm.service.product; | |
| 2 | 2 | |
| 3 | -import java.util.*; | |
| 4 | -import javax.validation.*; | |
| 5 | -import cn.iocoder.yudao.module.crm.controller.admin.productcategory.vo.*; | |
| 6 | -import cn.iocoder.yudao.module.crm.dal.dataobject.productcategory.ProductCategoryDO; | |
| 7 | -import cn.iocoder.yudao.framework.common.pojo.PageResult; | |
| 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; | |
| 6 | +import cn.iocoder.yudao.module.crm.dal.dataobject.product.CrmProductCategoryDO; | |
| 7 | + | |
| 8 | +import javax.validation.Valid; | |
| 9 | +import java.util.List; | |
| 8 | 10 | |
| 9 | 11 | /** |
| 10 | 12 | * 产品分类 Service 接口 |
| 11 | 13 | * |
| 12 | 14 | * @author ZanGe丶 |
| 13 | 15 | */ |
| 14 | -public interface ProductCategoryService { | |
| 16 | +public interface CrmProductCategoryService { | |
| 15 | 17 | |
| 16 | 18 | /** |
| 17 | 19 | * 创建产品分类 |
| ... | ... | @@ -19,14 +21,14 @@ public interface ProductCategoryService { |
| 19 | 21 | * @param createReqVO 创建信息 |
| 20 | 22 | * @return 编号 |
| 21 | 23 | */ |
| 22 | - Long createProductCategory(@Valid ProductCategoryCreateReqVO createReqVO); | |
| 24 | + Long createProductCategory(@Valid CrmProductCategoryCreateReqVO createReqVO); | |
| 23 | 25 | |
| 24 | 26 | /** |
| 25 | 27 | * 更新产品分类 |
| 26 | 28 | * |
| 27 | 29 | * @param updateReqVO 更新信息 |
| 28 | 30 | */ |
| 29 | - void updateProductCategory(@Valid ProductCategoryUpdateReqVO updateReqVO); | |
| 31 | + void updateProductCategory(@Valid CrmProductCategoryUpdateReqVO updateReqVO); | |
| 30 | 32 | |
| 31 | 33 | /** |
| 32 | 34 | * 删除产品分类 |
| ... | ... | @@ -41,7 +43,7 @@ public interface ProductCategoryService { |
| 41 | 43 | * @param id 编号 |
| 42 | 44 | * @return 产品分类 |
| 43 | 45 | */ |
| 44 | - ProductCategoryDO getProductCategory(Long id); | |
| 46 | + CrmProductCategoryDO getProductCategory(Long id); | |
| 45 | 47 | |
| 46 | 48 | /** |
| 47 | 49 | * 获得产品分类列表 |
| ... | ... | @@ -49,6 +51,6 @@ public interface ProductCategoryService { |
| 49 | 51 | * @param ids 编号 |
| 50 | 52 | * @return 产品分类列表 |
| 51 | 53 | */ |
| 52 | - List<ProductCategoryDO> getProductCategoryList(ProductCategoryListReqVO treeListReqVO); | |
| 54 | + List<CrmProductCategoryDO> getProductCategoryList(CrmProductCategoryListReqVO treeListReqVO); | |
| 53 | 55 | |
| 54 | 56 | } | ... | ... |
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/productcategory/ProductCategoryServiceImpl.java renamed to yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/product/CrmProductCategoryServiceImpl.java
| 1 | -package cn.iocoder.yudao.module.crm.service.productcategory; | |
| 1 | +package cn.iocoder.yudao.module.crm.service.product; | |
| 2 | 2 | |
| 3 | -import cn.iocoder.yudao.module.crm.controller.admin.productcategory.vo.ProductCategoryCreateReqVO; | |
| 4 | -import cn.iocoder.yudao.module.crm.controller.admin.productcategory.vo.ProductCategoryListReqVO; | |
| 5 | -import cn.iocoder.yudao.module.crm.controller.admin.productcategory.vo.ProductCategoryUpdateReqVO; | |
| 6 | -import cn.iocoder.yudao.module.crm.convert.productcategory.ProductCategoryConvert; | |
| 7 | -import cn.iocoder.yudao.module.crm.dal.dataobject.productcategory.ProductCategoryDO; | |
| 8 | -import cn.iocoder.yudao.module.crm.dal.mysql.productcategory.ProductCategoryMapper; | |
| 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; | |
| 8 | +import cn.iocoder.yudao.module.crm.dal.dataobject.product.CrmProductCategoryDO; | |
| 9 | +import cn.iocoder.yudao.module.crm.dal.mysql.product.CrmProductCategoryMapper; | |
| 10 | +import org.springframework.context.annotation.Lazy; | |
| 9 | 11 | import org.springframework.stereotype.Service; |
| 10 | 12 | import org.springframework.validation.annotation.Validated; |
| 11 | 13 | |
| 12 | 14 | import javax.annotation.Resource; |
| 13 | 15 | import java.util.List; |
| 16 | +import java.util.Objects; | |
| 14 | 17 | |
| 15 | 18 | import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; |
| 16 | -import static cn.iocoder.yudao.module.crm.enums.ErrorCodeConstants.PRODUCT_CATEGORY_NOT_EXISTS; | |
| 19 | +import static cn.iocoder.yudao.module.crm.dal.dataobject.product.CrmProductCategoryDO.PARENT_ID_NULL; | |
| 20 | +import static cn.iocoder.yudao.module.crm.enums.ErrorCodeConstants.*; | |
| 17 | 21 | |
| 18 | -// TODO @zange:这个类所在的包,放到 product 下; | |
| 22 | +// TODO @zange-ok:这个类所在的包,放到 product 下; | |
| 19 | 23 | /** |
| 20 | 24 | * 产品分类 Service 实现类 |
| 21 | 25 | * |
| ... | ... | @@ -23,28 +27,46 @@ import static cn.iocoder.yudao.module.crm.enums.ErrorCodeConstants.PRODUCT_CATEG |
| 23 | 27 | */ |
| 24 | 28 | @Service |
| 25 | 29 | @Validated |
| 26 | -public class ProductCategoryServiceImpl implements ProductCategoryService { | |
| 30 | +public class CrmProductCategoryServiceImpl implements CrmProductCategoryService { | |
| 27 | 31 | |
| 28 | 32 | @Resource |
| 29 | - private ProductCategoryMapper productCategoryMapper; | |
| 33 | + private CrmProductCategoryMapper productCategoryMapper; | |
| 34 | + @Resource | |
| 35 | + @Lazy | |
| 36 | + private CrmProductService crmProductService; | |
| 30 | 37 | |
| 31 | 38 | @Override |
| 32 | - public Long createProductCategory(ProductCategoryCreateReqVO createReqVO) { | |
| 39 | + public Long createProductCategory(CrmProductCategoryCreateReqVO createReqVO) { | |
| 33 | 40 | // TODO zange:参考 mall: ProductCategoryServiceImpl 补充下必要的参数校验; |
| 41 | + // 校验父分类存在 | |
| 42 | + validateParentProductCategory(createReqVO.getParentId()); | |
| 43 | + // 分类名称是否存在 | |
| 44 | + CrmProductCategoryDO dbProductCategory = productCategoryMapper.selectByName(createReqVO.getName()); | |
| 45 | + if (dbProductCategory != null) { | |
| 46 | + return dbProductCategory.getId(); | |
| 47 | + } | |
| 34 | 48 | // 插入 |
| 35 | - ProductCategoryDO productCategory = ProductCategoryConvert.INSTANCE.convert(createReqVO); | |
| 49 | + CrmProductCategoryDO productCategory = CrmProductCategoryConvert.INSTANCE.convert(createReqVO); | |
| 36 | 50 | productCategoryMapper.insert(productCategory); |
| 37 | 51 | // 返回 |
| 38 | 52 | return productCategory.getId(); |
| 39 | 53 | } |
| 40 | 54 | |
| 41 | 55 | @Override |
| 42 | - public void updateProductCategory(ProductCategoryUpdateReqVO updateReqVO) { | |
| 56 | + public void updateProductCategory(CrmProductCategoryUpdateReqVO updateReqVO) { | |
| 43 | 57 | // TODO zange:参考 mall: ProductCategoryServiceImpl 补充下必要的参数校验; |
| 44 | 58 | // 校验存在 |
| 45 | 59 | validateProductCategoryExists(updateReqVO.getId()); |
| 60 | + // 校验父分类存在 | |
| 61 | + validateParentProductCategory(updateReqVO.getParentId()); | |
| 62 | + // 校验名字重复 | |
| 63 | + CrmProductCategoryDO productCategoryDO = productCategoryMapper.selectByName(updateReqVO.getName()); | |
| 64 | + if (productCategoryDO != null && | |
| 65 | + ObjUtil.notEqual(productCategoryDO.getId(), updateReqVO.getId())) { | |
| 66 | + throw exception(CRM_PRODUCT_CATEGORY_EXISTS); | |
| 67 | + } | |
| 46 | 68 | // 更新 |
| 47 | - ProductCategoryDO updateObj = ProductCategoryConvert.INSTANCE.convert(updateReqVO); | |
| 69 | + CrmProductCategoryDO updateObj = CrmProductCategoryConvert.INSTANCE.convert(updateReqVO); | |
| 48 | 70 | productCategoryMapper.updateById(updateObj); |
| 49 | 71 | } |
| 50 | 72 | |
| ... | ... | @@ -53,23 +75,47 @@ public class ProductCategoryServiceImpl implements ProductCategoryService { |
| 53 | 75 | // TODO zange:参考 mall: ProductCategoryServiceImpl 补充下必要的参数校验; |
| 54 | 76 | // 校验存在 |
| 55 | 77 | validateProductCategoryExists(id); |
| 78 | + // 校验是否还有子分类 | |
| 79 | + if (productCategoryMapper.selectCountByParentId(id) > 0) { | |
| 80 | + throw exception(CRM_CATEGORY_EXISTS_CHILDREN); | |
| 81 | + } | |
| 82 | + // 校验是否被产品使用 | |
| 83 | + if (crmProductService.getProductByCategoryId(id) !=null) { | |
| 84 | + throw exception(CRM_PRODUCT_CATEGORY_USED); | |
| 85 | + } | |
| 56 | 86 | // 删除 |
| 57 | 87 | productCategoryMapper.deleteById(id); |
| 58 | 88 | } |
| 59 | 89 | |
| 60 | 90 | private void validateProductCategoryExists(Long id) { |
| 61 | 91 | if (productCategoryMapper.selectById(id) == null) { |
| 62 | - throw exception(PRODUCT_CATEGORY_NOT_EXISTS); | |
| 92 | + throw exception(CRM_PRODUCT_CATEGORY_NOT_EXISTS); | |
| 93 | + } | |
| 94 | + } | |
| 95 | + | |
| 96 | + private void validateParentProductCategory(Long id) { | |
| 97 | + // 如果是根分类,无需验证 | |
| 98 | + if (Objects.equals(id, PARENT_ID_NULL)) { | |
| 99 | + return; | |
| 100 | + } | |
| 101 | + // 父分类不存在 | |
| 102 | + CrmProductCategoryDO category = productCategoryMapper.selectById(id); | |
| 103 | + if (category == null) { | |
| 104 | + throw exception(CRM_CATEGORY_PARENT_NOT_EXISTS); | |
| 105 | + } | |
| 106 | + // 父分类不能是二级分类 | |
| 107 | + if (!Objects.equals(category.getParentId(), PARENT_ID_NULL)) { | |
| 108 | + throw exception(CRM_CATEGORY_PARENT_NOT_FIRST_LEVEL); | |
| 63 | 109 | } |
| 64 | 110 | } |
| 65 | 111 | |
| 66 | 112 | @Override |
| 67 | - public ProductCategoryDO getProductCategory(Long id) { | |
| 113 | + public CrmProductCategoryDO getProductCategory(Long id) { | |
| 68 | 114 | return productCategoryMapper.selectById(id); |
| 69 | 115 | } |
| 70 | 116 | |
| 71 | 117 | @Override |
| 72 | - public List<ProductCategoryDO> getProductCategoryList(ProductCategoryListReqVO treeListReqVO) { | |
| 118 | + public List<CrmProductCategoryDO> getProductCategoryList(CrmProductCategoryListReqVO treeListReqVO) { | |
| 73 | 119 | return productCategoryMapper.selectList(treeListReqVO); |
| 74 | 120 | } |
| 75 | 121 | ... | ... |
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/product/ProductService.java renamed to yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/product/CrmProductService.java
| 1 | 1 | package cn.iocoder.yudao.module.crm.service.product; |
| 2 | 2 | |
| 3 | -import java.util.*; | |
| 4 | -import javax.validation.*; | |
| 5 | -import cn.iocoder.yudao.module.crm.controller.admin.product.vo.*; | |
| 6 | -import cn.iocoder.yudao.module.crm.dal.dataobject.product.ProductDO; | |
| 7 | 3 | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| 4 | +import cn.iocoder.yudao.module.crm.controller.admin.product.vo.product.CrmProductCreateReqVO; | |
| 5 | +import cn.iocoder.yudao.module.crm.controller.admin.product.vo.product.CrmProductExportReqVO; | |
| 6 | +import cn.iocoder.yudao.module.crm.controller.admin.product.vo.product.CrmProductPageReqVO; | |
| 7 | +import cn.iocoder.yudao.module.crm.controller.admin.product.vo.product.CrmProductUpdateReqVO; | |
| 8 | +import cn.iocoder.yudao.module.crm.dal.dataobject.product.CrmProductDO; | |
| 9 | + | |
| 10 | +import javax.validation.Valid; | |
| 11 | +import java.util.Collection; | |
| 12 | +import java.util.List; | |
| 8 | 13 | |
| 9 | 14 | /** |
| 10 | 15 | * 产品 Service 接口 |
| 11 | 16 | * |
| 12 | 17 | * @author ZanGe丶 |
| 13 | 18 | */ |
| 14 | -public interface ProductService { | |
| 19 | +public interface CrmProductService { | |
| 15 | 20 | |
| 16 | 21 | /** |
| 17 | 22 | * 创建产品 |
| ... | ... | @@ -19,14 +24,14 @@ public interface ProductService { |
| 19 | 24 | * @param createReqVO 创建信息 |
| 20 | 25 | * @return 编号 |
| 21 | 26 | */ |
| 22 | - Long createProduct(@Valid ProductCreateReqVO createReqVO); | |
| 27 | + Long createProduct(@Valid CrmProductCreateReqVO createReqVO); | |
| 23 | 28 | |
| 24 | 29 | /** |
| 25 | 30 | * 更新产品 |
| 26 | 31 | * |
| 27 | 32 | * @param updateReqVO 更新信息 |
| 28 | 33 | */ |
| 29 | - void updateProduct(@Valid ProductUpdateReqVO updateReqVO); | |
| 34 | + void updateProduct(@Valid CrmProductUpdateReqVO updateReqVO); | |
| 30 | 35 | |
| 31 | 36 | /** |
| 32 | 37 | * 删除产品 |
| ... | ... | @@ -41,7 +46,7 @@ public interface ProductService { |
| 41 | 46 | * @param id 编号 |
| 42 | 47 | * @return 产品 |
| 43 | 48 | */ |
| 44 | - ProductDO getProduct(Long id); | |
| 49 | + CrmProductDO getProduct(Long id); | |
| 45 | 50 | |
| 46 | 51 | /** |
| 47 | 52 | * 获得产品列表 |
| ... | ... | @@ -49,7 +54,7 @@ public interface ProductService { |
| 49 | 54 | * @param ids 编号 |
| 50 | 55 | * @return 产品列表 |
| 51 | 56 | */ |
| 52 | - List<ProductDO> getProductList(Collection<Long> ids); | |
| 57 | + List<CrmProductDO> getProductList(Collection<Long> ids); | |
| 53 | 58 | |
| 54 | 59 | /** |
| 55 | 60 | * 获得产品分页 |
| ... | ... | @@ -57,7 +62,7 @@ public interface ProductService { |
| 57 | 62 | * @param pageReqVO 分页查询 |
| 58 | 63 | * @return 产品分页 |
| 59 | 64 | */ |
| 60 | - PageResult<ProductDO> getProductPage(ProductPageReqVO pageReqVO); | |
| 65 | + PageResult<CrmProductDO> getProductPage(CrmProductPageReqVO pageReqVO); | |
| 61 | 66 | |
| 62 | 67 | /** |
| 63 | 68 | * 获得产品列表, 用于 Excel 导出 |
| ... | ... | @@ -65,6 +70,13 @@ public interface ProductService { |
| 65 | 70 | * @param exportReqVO 查询条件 |
| 66 | 71 | * @return 产品列表 |
| 67 | 72 | */ |
| 68 | - List<ProductDO> getProductList(ProductExportReqVO exportReqVO); | |
| 73 | + List<CrmProductDO> getProductList(CrmProductExportReqVO exportReqVO); | |
| 69 | 74 | |
| 75 | + /** | |
| 76 | + * 获得产品 | |
| 77 | + * | |
| 78 | + * @param categoryId 分类编号 | |
| 79 | + * @return 产品 | |
| 80 | + */ | |
| 81 | + CrmProductDO getProductByCategoryId(Long categoryId); | |
| 70 | 82 | } | ... | ... |
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/product/ProductServiceImpl.java renamed to yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/product/CrmProductServiceImpl.java
| ... | ... | @@ -3,13 +3,14 @@ package cn.iocoder.yudao.module.crm.service.product; |
| 3 | 3 | import cn.hutool.core.collection.CollUtil; |
| 4 | 4 | import cn.hutool.core.collection.ListUtil; |
| 5 | 5 | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| 6 | -import cn.iocoder.yudao.module.crm.controller.admin.product.vo.ProductCreateReqVO; | |
| 7 | -import cn.iocoder.yudao.module.crm.controller.admin.product.vo.ProductExportReqVO; | |
| 8 | -import cn.iocoder.yudao.module.crm.controller.admin.product.vo.ProductPageReqVO; | |
| 9 | -import cn.iocoder.yudao.module.crm.controller.admin.product.vo.ProductUpdateReqVO; | |
| 10 | -import cn.iocoder.yudao.module.crm.convert.product.ProductConvert; | |
| 11 | -import cn.iocoder.yudao.module.crm.dal.dataobject.product.ProductDO; | |
| 12 | -import cn.iocoder.yudao.module.crm.dal.mysql.product.ProductMapper; | |
| 6 | +import cn.iocoder.yudao.module.crm.controller.admin.product.vo.product.CrmProductCreateReqVO; | |
| 7 | +import cn.iocoder.yudao.module.crm.controller.admin.product.vo.product.CrmProductExportReqVO; | |
| 8 | +import cn.iocoder.yudao.module.crm.controller.admin.product.vo.product.CrmProductPageReqVO; | |
| 9 | +import cn.iocoder.yudao.module.crm.controller.admin.product.vo.product.CrmProductUpdateReqVO; | |
| 10 | +import cn.iocoder.yudao.module.crm.convert.product.CrmProductConvert; | |
| 11 | +import cn.iocoder.yudao.module.crm.dal.dataobject.product.CrmProductCategoryDO; | |
| 12 | +import cn.iocoder.yudao.module.crm.dal.dataobject.product.CrmProductDO; | |
| 13 | +import cn.iocoder.yudao.module.crm.dal.mysql.product.CrmProductMapper; | |
| 13 | 14 | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| 14 | 15 | import org.springframework.stereotype.Service; |
| 15 | 16 | import org.springframework.validation.annotation.Validated; |
| ... | ... | @@ -19,8 +20,7 @@ import java.util.Collection; |
| 19 | 20 | import java.util.List; |
| 20 | 21 | |
| 21 | 22 | import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; |
| 22 | -import static cn.iocoder.yudao.module.crm.enums.ErrorCodeConstants.PRODUCT_NOT_EXISTS; | |
| 23 | -import static cn.iocoder.yudao.module.crm.enums.ErrorCodeConstants.PRODUCT_NO_EXISTS; | |
| 23 | +import static cn.iocoder.yudao.module.crm.enums.ErrorCodeConstants.*; | |
| 24 | 24 | |
| 25 | 25 | /** |
| 26 | 26 | * 产品 Service 实现类 |
| ... | ... | @@ -29,59 +29,67 @@ import static cn.iocoder.yudao.module.crm.enums.ErrorCodeConstants.PRODUCT_NO_EX |
| 29 | 29 | */ |
| 30 | 30 | @Service |
| 31 | 31 | @Validated |
| 32 | -public class ProductServiceImpl implements ProductService { | |
| 32 | +public class CrmProductServiceImpl implements CrmProductService { | |
| 33 | 33 | |
| 34 | 34 | @Resource |
| 35 | - private ProductMapper productMapper; | |
| 35 | + private CrmProductMapper productMapper; | |
| 36 | + @Resource | |
| 37 | + private CrmProductCategoryService productCategoryService; | |
| 36 | 38 | |
| 37 | 39 | @Override |
| 38 | - public Long createProduct(ProductCreateReqVO createReqVO) { | |
| 40 | + public Long createProduct(CrmProductCreateReqVO createReqVO) { | |
| 39 | 41 | // 校验产品编号是否存在 |
| 40 | - validateProductNo(createReqVO.getNo()); | |
| 41 | - // TODO @zange:需要校验 categoryId 是否存在; | |
| 42 | + validateProductNoDuplicate(createReqVO.getNo()); | |
| 43 | + // TODO @zange-ok:需要校验 categoryId 是否存在; | |
| 44 | + validateProductCategoryExists(createReqVO.getCategoryId()); | |
| 42 | 45 | // 插入 |
| 43 | - ProductDO product = ProductConvert.INSTANCE.convert(createReqVO); | |
| 46 | + CrmProductDO product = CrmProductConvert.INSTANCE.convert(createReqVO); | |
| 44 | 47 | productMapper.insert(product); |
| 45 | 48 | // 返回 |
| 46 | 49 | return product.getId(); |
| 47 | 50 | } |
| 48 | 51 | |
| 49 | 52 | @Override |
| 50 | - public void updateProduct(ProductUpdateReqVO updateReqVO) { | |
| 53 | + public void updateProduct(CrmProductUpdateReqVO updateReqVO) { | |
| 51 | 54 | // 校验存在 |
| 52 | - validateProductExists(updateReqVO.getId(), updateReqVO.getNo()); | |
| 53 | - // TODO @zange:需要校验 categoryId 是否存在; | |
| 55 | + validateProductExists(updateReqVO.getId()); | |
| 56 | + // TODO @zange-ok:需要校验 categoryId 是否存在; | |
| 57 | + validateProductCategoryExists(updateReqVO.getCategoryId()); | |
| 54 | 58 | // 更新 |
| 55 | - ProductDO updateObj = ProductConvert.INSTANCE.convert(updateReqVO); | |
| 59 | + CrmProductDO updateObj = CrmProductConvert.INSTANCE.convert(updateReqVO); | |
| 56 | 60 | productMapper.updateById(updateObj); |
| 57 | 61 | } |
| 58 | 62 | |
| 59 | 63 | @Override |
| 60 | 64 | public void deleteProduct(Long id) { |
| 61 | 65 | // 校验存在 |
| 62 | - validateProductExists(id, null); | |
| 66 | + validateProductExists(id); | |
| 63 | 67 | // 删除 |
| 64 | 68 | productMapper.deleteById(id); |
| 65 | 69 | } |
| 66 | 70 | |
| 67 | - // TODO @zange:validateProductExists 要不只校验是否存在;然后是否 no 重复,交给 validateProductNo,名字改成 validateProductNoDuplicate,和别的模块保持一致哈; | |
| 68 | - private void validateProductExists(Long id, String no) { | |
| 69 | - ProductDO product = productMapper.selectById(id); | |
| 71 | + // TODO @zange-ok:validateProductExists 要不只校验是否存在;然后是否 no 重复,交给 validateProductNo,名字改成 validateProductNoDuplicate,和别的模块保持一致哈; | |
| 72 | + private void validateProductExists(Long id) { | |
| 73 | + CrmProductDO product = productMapper.selectById(id); | |
| 70 | 74 | if (product == null) { |
| 71 | - throw exception(PRODUCT_NOT_EXISTS); | |
| 75 | + throw exception(CRM_PRODUCT_NOT_EXISTS); | |
| 72 | 76 | } |
| 73 | - if (no != null && no.equals(product.getNo())) { | |
| 74 | - throw exception(PRODUCT_NO_EXISTS); | |
| 77 | + } | |
| 78 | + | |
| 79 | + private void validateProductCategoryExists(Long categoryId) { | |
| 80 | + CrmProductCategoryDO productCategory = productCategoryService.getProductCategory(categoryId); | |
| 81 | + if (productCategory == null) { | |
| 82 | + throw exception(CRM_PRODUCT_CATEGORY_NOT_EXISTS); | |
| 75 | 83 | } |
| 76 | 84 | } |
| 77 | 85 | |
| 78 | 86 | @Override |
| 79 | - public ProductDO getProduct(Long id) { | |
| 87 | + public CrmProductDO getProduct(Long id) { | |
| 80 | 88 | return productMapper.selectById(id); |
| 81 | 89 | } |
| 82 | 90 | |
| 83 | 91 | @Override |
| 84 | - public List<ProductDO> getProductList(Collection<Long> ids) { | |
| 92 | + public List<CrmProductDO> getProductList(Collection<Long> ids) { | |
| 85 | 93 | if (CollUtil.isEmpty(ids)) { |
| 86 | 94 | return ListUtil.empty(); |
| 87 | 95 | } |
| ... | ... | @@ -89,19 +97,24 @@ public class ProductServiceImpl implements ProductService { |
| 89 | 97 | } |
| 90 | 98 | |
| 91 | 99 | @Override |
| 92 | - public PageResult<ProductDO> getProductPage(ProductPageReqVO pageReqVO) { | |
| 100 | + public PageResult<CrmProductDO> getProductPage(CrmProductPageReqVO pageReqVO) { | |
| 93 | 101 | return productMapper.selectPage(pageReqVO); |
| 94 | 102 | } |
| 95 | 103 | |
| 96 | 104 | @Override |
| 97 | - public List<ProductDO> getProductList(ProductExportReqVO exportReqVO) { | |
| 105 | + public List<CrmProductDO> getProductList(CrmProductExportReqVO exportReqVO) { | |
| 98 | 106 | return productMapper.selectList(exportReqVO); |
| 99 | 107 | } |
| 100 | 108 | |
| 101 | - private void validateProductNo(String no) { | |
| 102 | - ProductDO product = productMapper.selectOne(new LambdaQueryWrapper<ProductDO>().eq(ProductDO::getNo, no)); | |
| 109 | + @Override | |
| 110 | + public CrmProductDO getProductByCategoryId(Long categoryId) { | |
| 111 | + return productMapper.selectOne(new LambdaQueryWrapper<CrmProductDO>().eq(CrmProductDO::getCategoryId, categoryId)); | |
| 112 | + } | |
| 113 | + | |
| 114 | + private void validateProductNoDuplicate(String no) { | |
| 115 | + CrmProductDO product = productMapper.selectOne(new LambdaQueryWrapper<CrmProductDO>().eq(CrmProductDO::getNo, no)); | |
| 103 | 116 | if (product != null) { |
| 104 | - throw exception(PRODUCT_NO_EXISTS); | |
| 117 | + throw exception(CRM_PRODUCT_NO_EXISTS); | |
| 105 | 118 | } |
| 106 | 119 | } |
| 107 | 120 | ... | ... |