Commit 6891b75e27c41608c4dc70adcecf2feb9f472ff0

Authored by YunaiV
1 parent 19c0227c

📖 CRM:产品模块的 review

yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/product/CrmProductController.java
@@ -136,8 +136,7 @@ public class CrmProductController { @@ -136,8 +136,7 @@ public class CrmProductController {
136 public CommonResult<PageResult<OperateLogV2RespDTO>> getProductOperateLog(@RequestParam("bizId") Long bizId) { 136 public CommonResult<PageResult<OperateLogV2RespDTO>> getProductOperateLog(@RequestParam("bizId") Long bizId) {
137 OperateLogV2PageReqDTO reqVO = new OperateLogV2PageReqDTO(); 137 OperateLogV2PageReqDTO reqVO = new OperateLogV2PageReqDTO();
138 reqVO.setPageSize(PAGE_SIZE_NONE); // 不分页 138 reqVO.setPageSize(PAGE_SIZE_NONE); // 不分页
139 - reqVO.setBizType(CRM_PRODUCT_TYPE);  
140 - reqVO.setBizId(bizId); 139 + reqVO.setBizType(CRM_PRODUCT_TYPE).setBizId(bizId);
141 return success(operateLogApi.getOperateLogPage(BeanUtils.toBean(reqVO, OperateLogV2PageReqDTO.class))); 140 return success(operateLogApi.getOperateLogPage(BeanUtils.toBean(reqVO, OperateLogV2PageReqDTO.class)));
142 } 141 }
143 142
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/product/vo/product/CrmProductSaveReqVO.java
1 package cn.iocoder.yudao.module.crm.controller.admin.product.vo.product; 1 package cn.iocoder.yudao.module.crm.controller.admin.product.vo.product;
2 2
  3 +import cn.iocoder.yudao.module.crm.framework.operatelog.core.CrmProductStatusParseFunction;
  4 +import cn.iocoder.yudao.module.crm.framework.operatelog.core.CrmProductUnitParseFunction;
3 import com.mzt.logapi.starter.annotation.DiffLogField; 5 import com.mzt.logapi.starter.annotation.DiffLogField;
4 import io.swagger.v3.oas.annotations.media.Schema; 6 import io.swagger.v3.oas.annotations.media.Schema;
5 import jakarta.validation.constraints.NotNull; 7 import jakarta.validation.constraints.NotNull;
@@ -23,7 +25,7 @@ public class CrmProductSaveReqVO { @@ -23,7 +25,7 @@ public class CrmProductSaveReqVO {
23 private String no; 25 private String no;
24 26
25 @Schema(description = "单位", example = "2") 27 @Schema(description = "单位", example = "2")
26 - @DiffLogField(name = "单位", function = "getProductUnitName") 28 + @DiffLogField(name = "单位", function = CrmProductUnitParseFunction.NAME)
27 private Integer unit; 29 private Integer unit;
28 30
29 @Schema(description = "价格, 单位:分", requiredMode = Schema.RequiredMode.REQUIRED, example = "8911") 31 @Schema(description = "价格, 单位:分", requiredMode = Schema.RequiredMode.REQUIRED, example = "8911")
@@ -33,7 +35,7 @@ public class CrmProductSaveReqVO { @@ -33,7 +35,7 @@ public class CrmProductSaveReqVO {
33 35
34 @Schema(description = "状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "上架") 36 @Schema(description = "状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "上架")
35 @NotNull(message = "状态不能为空") 37 @NotNull(message = "状态不能为空")
36 - @DiffLogField(name = "状态", function = "getProductStatusName") 38 + @DiffLogField(name = "状态", function = CrmProductStatusParseFunction.NAME)
37 private Integer status; 39 private Integer status;
38 40
39 @Schema(description = "产品分类编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "2") 41 @Schema(description = "产品分类编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/product/CrmProductCategoryServiceImpl.java
@@ -49,7 +49,8 @@ public class CrmProductCategoryServiceImpl implements CrmProductCategoryService @@ -49,7 +49,8 @@ public class CrmProductCategoryServiceImpl implements CrmProductCategoryService
49 // 2. 插入分类 49 // 2. 插入分类
50 CrmProductCategoryDO category = BeanUtils.toBean(createReqVO, CrmProductCategoryDO.class); 50 CrmProductCategoryDO category = BeanUtils.toBean(createReqVO, CrmProductCategoryDO.class);
51 productCategoryMapper.insert(category); 51 productCategoryMapper.insert(category);
52 - // 记录操作日志上下文 52 +
  53 + // 3. 记录操作日志上下文
53 LogRecordContext.putVariable("productCategoryId", category.getId()); 54 LogRecordContext.putVariable("productCategoryId", category.getId());
54 return category.getId(); 55 return category.getId();
55 } 56 }
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/product/CrmProductServiceImpl.java
@@ -58,21 +58,21 @@ public class CrmProductServiceImpl implements CrmProductService { @@ -58,21 +58,21 @@ public class CrmProductServiceImpl implements CrmProductService {
58 @LogRecord(type = CRM_PRODUCT_TYPE, subType = CRM_PRODUCT_CREATE_SUB_TYPE, bizNo = "{{#productId}}", 58 @LogRecord(type = CRM_PRODUCT_TYPE, subType = CRM_PRODUCT_CREATE_SUB_TYPE, bizNo = "{{#productId}}",
59 success = CRM_PRODUCT_CREATE_SUCCESS) 59 success = CRM_PRODUCT_CREATE_SUCCESS)
60 public Long createProduct(CrmProductSaveReqVO createReqVO) { 60 public Long createProduct(CrmProductSaveReqVO createReqVO) {
61 - // 校验产品 61 + // 1. 校验产品
62 adminUserApi.validateUserList(Collections.singleton(createReqVO.getOwnerUserId())); 62 adminUserApi.validateUserList(Collections.singleton(createReqVO.getOwnerUserId()));
63 validateProductNoDuplicate(null, createReqVO.getNo()); 63 validateProductNoDuplicate(null, createReqVO.getNo());
64 validateProductCategoryExists(createReqVO.getCategoryId()); 64 validateProductCategoryExists(createReqVO.getCategoryId());
65 65
66 - // 插入产品 66 + // 2. 插入产品
67 CrmProductDO product = BeanUtils.toBean(createReqVO, CrmProductDO.class); 67 CrmProductDO product = BeanUtils.toBean(createReqVO, CrmProductDO.class);
68 productMapper.insert(product); 68 productMapper.insert(product);
69 69
70 - // 插入数据权限 70 + // 3. 插入数据权限
71 permissionService.createPermission(new CrmPermissionCreateReqBO().setUserId(product.getOwnerUserId()) 71 permissionService.createPermission(new CrmPermissionCreateReqBO().setUserId(product.getOwnerUserId())
72 .setBizType(CrmBizTypeEnum.CRM_PRODUCT.getType()).setBizId(product.getId()) 72 .setBizType(CrmBizTypeEnum.CRM_PRODUCT.getType()).setBizId(product.getId())
73 .setLevel(CrmPermissionLevelEnum.OWNER.getLevel())); 73 .setLevel(CrmPermissionLevelEnum.OWNER.getLevel()));
74 74
75 - // 记录操作日志上下文 75 + // 4. 记录操作日志上下文
76 LogRecordContext.putVariable("productId", product.getId()); 76 LogRecordContext.putVariable("productId", product.getId());
77 return product.getId(); 77 return product.getId();
78 } 78 }
@@ -82,17 +82,17 @@ public class CrmProductServiceImpl implements CrmProductService { @@ -82,17 +82,17 @@ public class CrmProductServiceImpl implements CrmProductService {
82 success = CRM_PRODUCT_UPDATE_SUCCESS) 82 success = CRM_PRODUCT_UPDATE_SUCCESS)
83 @CrmPermission(bizType = CrmBizTypeEnum.CRM_PRODUCT, bizId = "#updateReqVO.id", level = CrmPermissionLevelEnum.WRITE) 83 @CrmPermission(bizType = CrmBizTypeEnum.CRM_PRODUCT, bizId = "#updateReqVO.id", level = CrmPermissionLevelEnum.WRITE)
84 public void updateProduct(CrmProductSaveReqVO updateReqVO) { 84 public void updateProduct(CrmProductSaveReqVO updateReqVO) {
85 - // 校验产品 85 + // 1. 校验产品
86 updateReqVO.setOwnerUserId(null); // 不修改负责人 86 updateReqVO.setOwnerUserId(null); // 不修改负责人
87 CrmProductDO crmProductDO = validateProductExists(updateReqVO.getId()); 87 CrmProductDO crmProductDO = validateProductExists(updateReqVO.getId());
88 validateProductNoDuplicate(updateReqVO.getId(), updateReqVO.getNo()); 88 validateProductNoDuplicate(updateReqVO.getId(), updateReqVO.getNo());
89 validateProductCategoryExists(updateReqVO.getCategoryId()); 89 validateProductCategoryExists(updateReqVO.getCategoryId());
90 90
91 - // 更新产品 91 + // 2. 更新产品
92 CrmProductDO updateObj = BeanUtils.toBean(updateReqVO, CrmProductDO.class); 92 CrmProductDO updateObj = BeanUtils.toBean(updateReqVO, CrmProductDO.class);
93 productMapper.updateById(updateObj); 93 productMapper.updateById(updateObj);
94 94
95 - // 记录操作日志上下文 95 + // 3. 记录操作日志上下文
96 LogRecordContext.putVariable(DiffParseFunction.OLD_OBJECT, BeanUtils.toBean(crmProductDO,CrmProductSaveReqVO.class)); 96 LogRecordContext.putVariable(DiffParseFunction.OLD_OBJECT, BeanUtils.toBean(crmProductDO,CrmProductSaveReqVO.class));
97 } 97 }
98 98
@@ -145,6 +145,7 @@ public class CrmProductServiceImpl implements CrmProductService { @@ -145,6 +145,7 @@ public class CrmProductServiceImpl implements CrmProductService {
145 return productMapper.selectBatchIds(ids); 145 return productMapper.selectBatchIds(ids);
146 } 146 }
147 147
  148 + // TODO @anhaohao:可以接入数据权限,参考 CrmCustomerService 的 getCustomerPage
148 @Override 149 @Override
149 public PageResult<CrmProductDO> getProductPage(CrmProductPageReqVO pageReqVO) { 150 public PageResult<CrmProductDO> getProductPage(CrmProductPageReqVO pageReqVO) {
150 return productMapper.selectPage(pageReqVO); 151 return productMapper.selectPage(pageReqVO);