Commit 4afff6185e2ac4a453df60e2c6fa45d4888daa30

Authored by anhaohao
1 parent 2d1e5755

新增:CRM 产品分类和产品,接入操作日志,数据权限控制

yudao-module-crm/yudao-module-crm-api/src/main/java/cn/iocoder/yudao/module/crm/enums/LogRecordConstants.java
... ... @@ -61,6 +61,19 @@ public interface LogRecordConstants {
61 61 // ======================= CRM_PRODUCT 产品 =======================
62 62  
63 63 String CRM_PRODUCT_TYPE = "CRM 产品";
  64 + String CRM_PRODUCT_CREATE_SUB_TYPE = "创建产品";
  65 + String CRM_PRODUCT_CREATE_SUCCESS = "创建了产品【{{#createReqVO.name}}】";
  66 + String CRM_PRODUCT_UPDATE_SUB_TYPE = "更新产品";
  67 + String CRM_PRODUCT_UPDATE_SUCCESS = "更新了产品【{{#updateReqVO.name}}】: {_DIFF{#updateReqVO}}";
  68 + String CRM_PRODUCT_DELETE_SUB_TYPE = "删除产品";
  69 + String CRM_PRODUCT_DELETE_SUCCESS = "删除了产品【{{#product.name}}】";
  70 + String CRM_PRODUCT_CATEGORY_TYPE = "CRM 产品分类";
  71 + String CRM_PRODUCT_CATEGORY_CREATE_SUB_TYPE = "创建产品分类";
  72 + String CRM_PRODUCT_CATEGORY_CREATE_SUCCESS = "创建了产品分类【{{#createReqVO.name}}】";
  73 + String CRM_PRODUCT_CATEGORY_UPDATE_SUB_TYPE = "更新产品分类";
  74 + String CRM_PRODUCT_CATEGORY_UPDATE_SUCCESS = "更新了产品分类【{{#updateReqVO.name}}】: {_DIFF{#updateReqVO}}";
  75 + String CRM_PRODUCT_CATEGORY_DELETE_SUB_TYPE = "删除产品分类";
  76 + String CRM_PRODUCT_CATEGORY_DELETE_SUCCESS = "删除了产品分类【{{#productCategory.name}}】";
64 77  
65 78 // ======================= CRM_RECEIVABLE 回款 =======================
66 79  
... ...
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/product/CrmProductCategoryServiceImpl.java
... ... @@ -5,6 +5,10 @@ import cn.iocoder.yudao.module.crm.controller.admin.product.vo.category.CrmProdu
5 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 cn.iocoder.yudao.module.crm.dal.mysql.product.CrmProductCategoryMapper;
  8 +import cn.iocoder.yudao.module.crm.enums.common.CrmBizTypeEnum;
  9 +import cn.iocoder.yudao.module.crm.enums.permission.CrmPermissionLevelEnum;
  10 +import cn.iocoder.yudao.module.crm.framework.permission.core.annotations.CrmPermission;
  11 +import com.mzt.logapi.starter.annotation.LogRecord;
8 12 import org.springframework.context.annotation.Lazy;
9 13 import org.springframework.stereotype.Service;
10 14 import org.springframework.validation.annotation.Validated;
... ... @@ -17,6 +21,7 @@ import java.util.Objects;
17 21 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
18 22 import static cn.iocoder.yudao.module.crm.dal.dataobject.product.CrmProductCategoryDO.PARENT_ID_NULL;
19 23 import static cn.iocoder.yudao.module.crm.enums.ErrorCodeConstants.*;
  24 +import static cn.iocoder.yudao.module.crm.enums.LogRecordConstants.*;
20 25  
21 26 /**
22 27 * CRM 产品分类 Service 实现类
... ... @@ -35,7 +40,9 @@ public class CrmProductCategoryServiceImpl implements CrmProductCategoryService
35 40 private CrmProductService crmProductService;
36 41  
37 42 @Override
38   - // TODO @puhui999:操作日志
  43 + @LogRecord(type = CRM_PRODUCT_CATEGORY_TYPE, subType = CRM_PRODUCT_CATEGORY_CREATE_SUB_TYPE, bizNo = "{{#createReqVO.id}}",
  44 + success = CRM_PRODUCT_CATEGORY_CREATE_SUCCESS)
  45 + @CrmPermission(bizType = CrmBizTypeEnum.CRM_PRODUCT, bizId = "#createReqVO.id", level = CrmPermissionLevelEnum.WRITE)
39 46 public Long createProductCategory(CrmProductCategoryCreateReqVO createReqVO) {
40 47 // 1.1 校验父分类存在
41 48 validateParentProductCategory(createReqVO.getParentId());
... ... @@ -48,7 +55,9 @@ public class CrmProductCategoryServiceImpl implements CrmProductCategoryService
48 55 }
49 56  
50 57 @Override
51   - // TODO @puhui999:操作日志
  58 + @LogRecord(type = CRM_PRODUCT_CATEGORY_TYPE, subType = CRM_PRODUCT_CATEGORY_UPDATE_SUB_TYPE, bizNo = "{{#updateReqVO.id}}",
  59 + success = CRM_PRODUCT_CATEGORY_UPDATE_SUCCESS)
  60 + @CrmPermission(bizType = CrmBizTypeEnum.CRM_PRODUCT, bizId = "#updateReqVO.id", level = CrmPermissionLevelEnum.WRITE)
52 61 public void updateProductCategory(CrmProductCategoryCreateReqVO updateReqVO) {
53 62 // 1.1 校验存在
54 63 validateProductCategoryExists(updateReqVO.getId());
... ... @@ -93,7 +102,9 @@ public class CrmProductCategoryServiceImpl implements CrmProductCategoryService
93 102 }
94 103  
95 104 @Override
96   - // TODO @puhui999:操作日志
  105 + @LogRecord(type = CRM_PRODUCT_CATEGORY_TYPE, subType = CRM_PRODUCT_CATEGORY_DELETE_SUB_TYPE, bizNo = "{{#id}}",
  106 + success = CRM_PRODUCT_CATEGORY_DELETE_SUCCESS)
  107 + @CrmPermission(bizType = CrmBizTypeEnum.CRM_PRODUCT, bizId = "#id", level = CrmPermissionLevelEnum.OWNER)
97 108 public void deleteProductCategory(Long id) {
98 109 // 1.1 校验存在
99 110 validateProductCategoryExists(id);
... ... @@ -110,16 +121,19 @@ public class CrmProductCategoryServiceImpl implements CrmProductCategoryService
110 121 }
111 122  
112 123 @Override
  124 + @CrmPermission(bizType = CrmBizTypeEnum.CRM_PRODUCT, bizId = "#id", level = CrmPermissionLevelEnum.READ)
113 125 public CrmProductCategoryDO getProductCategory(Long id) {
114 126 return productCategoryMapper.selectById(id);
115 127 }
116 128  
117 129 @Override
  130 + @CrmPermission(bizType = CrmBizTypeEnum.CRM_PRODUCT, bizId = "#listReqVO.id", level = CrmPermissionLevelEnum.READ)
118 131 public List<CrmProductCategoryDO> getProductCategoryList(CrmProductCategoryListReqVO listReqVO) {
119 132 return productCategoryMapper.selectList(listReqVO);
120 133 }
121 134  
122 135 @Override
  136 + @CrmPermission(bizType = CrmBizTypeEnum.CRM_PRODUCT, bizId = "#listReqVO.id", level = CrmPermissionLevelEnum.READ)
123 137 public List<CrmProductCategoryDO> getProductCategoryList(Collection<Long> ids) {
124 138 return productCategoryMapper.selectBatchIds(ids);
125 139 }
... ...
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/product/CrmProductServiceImpl.java
... ... @@ -11,22 +11,26 @@ import cn.iocoder.yudao.module.crm.dal.dataobject.product.CrmProductDO;
11 11 import cn.iocoder.yudao.module.crm.dal.mysql.product.CrmProductMapper;
12 12 import cn.iocoder.yudao.module.crm.enums.common.CrmBizTypeEnum;
13 13 import cn.iocoder.yudao.module.crm.enums.permission.CrmPermissionLevelEnum;
  14 +import cn.iocoder.yudao.module.crm.framework.permission.core.annotations.CrmPermission;
14 15 import cn.iocoder.yudao.module.crm.service.permission.CrmPermissionService;
15 16 import cn.iocoder.yudao.module.crm.service.permission.bo.CrmPermissionCreateReqBO;
16 17 import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
17 18 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  19 +import com.mzt.logapi.starter.annotation.LogRecord;
  20 +import jakarta.annotation.Resource;
18 21 import org.springframework.stereotype.Service;
  22 +import org.springframework.transaction.annotation.Transactional;
19 23 import org.springframework.validation.annotation.Validated;
20 24  
21   -import jakarta.annotation.Resource;
22 25 import java.util.Collection;
23 26 import java.util.Collections;
24 27 import java.util.List;
25 28  
26 29 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
27 30 import static cn.iocoder.yudao.module.crm.enums.ErrorCodeConstants.*;
  31 +import static cn.iocoder.yudao.module.crm.enums.LogRecordConstants.*;
  32 +
28 33  
29   -// TODO 芋艿:数据权限
30 34 /**
31 35 * CRM 产品 Service 实现类
32 36 *
... ... @@ -48,7 +52,10 @@ public class CrmProductServiceImpl implements CrmProductService {
48 52 private AdminUserApi adminUserApi;
49 53  
50 54 @Override
51   - // TODO @puhui999:操作日志
  55 + @Transactional(rollbackFor = Exception.class)
  56 + @LogRecord(type = CRM_PRODUCT_TYPE, subType = CRM_PRODUCT_CREATE_SUB_TYPE, bizNo = "{{#createReqVO.id}}",
  57 + success = CRM_PRODUCT_CREATE_SUCCESS)
  58 + @CrmPermission(bizType = CrmBizTypeEnum.CRM_PRODUCT, bizId = "#createReqVO.id", level = CrmPermissionLevelEnum.WRITE)
52 59 public Long createProduct(CrmProductSaveReqVO createReqVO) {
53 60 // 校验产品
54 61 adminUserApi.validateUserList(Collections.singleton(createReqVO.getOwnerUserId()));
... ... @@ -67,7 +74,9 @@ public class CrmProductServiceImpl implements CrmProductService {
67 74 }
68 75  
69 76 @Override
70   - // TODO @puhui999:操作日志
  77 + @LogRecord(type = CRM_PRODUCT_TYPE, subType = CRM_PRODUCT_UPDATE_SUB_TYPE, bizNo = "{{#updateReqVO.id}}",
  78 + success = CRM_PRODUCT_UPDATE_SUCCESS)
  79 + @CrmPermission(bizType = CrmBizTypeEnum.CRM_PRODUCT, bizId = "#updateReqVO.id", level = CrmPermissionLevelEnum.WRITE)
71 80 public void updateProduct(CrmProductSaveReqVO updateReqVO) {
72 81 // 校验产品
73 82 updateReqVO.setOwnerUserId(null); // 不修改负责人
... ... @@ -90,7 +99,7 @@ public class CrmProductServiceImpl implements CrmProductService {
90 99 private void validateProductNoDuplicate(Long id, String no) {
91 100 CrmProductDO product = productMapper.selectByNo(no);
92 101 if (product == null
93   - || product.getId().equals(id)) {
  102 + || product.getId().equals(id)) {
94 103 return;
95 104 }
96 105 throw exception(PRODUCT_NO_EXISTS);
... ... @@ -104,7 +113,9 @@ public class CrmProductServiceImpl implements CrmProductService {
104 113 }
105 114  
106 115 @Override
107   - // TODO @puhui999:操作日志
  116 + @LogRecord(type = CRM_PRODUCT_TYPE, subType = CRM_PRODUCT_DELETE_SUB_TYPE, bizNo = "{{#id}}",
  117 + success = CRM_PRODUCT_DELETE_SUCCESS)
  118 + @CrmPermission(bizType = CrmBizTypeEnum.CRM_PRODUCT, bizId = "#id", level = CrmPermissionLevelEnum.OWNER)
108 119 public void deleteProduct(Long id) {
109 120 // 校验存在
110 121 validateProductExists(id);
... ... @@ -113,6 +124,7 @@ public class CrmProductServiceImpl implements CrmProductService {
113 124 }
114 125  
115 126 @Override
  127 + @CrmPermission(bizType = CrmBizTypeEnum.CRM_PRODUCT, bizId = "#id", level = CrmPermissionLevelEnum.READ)
116 128 public CrmProductDO getProduct(Long id) {
117 129 return productMapper.selectById(id);
118 130 }
... ... @@ -126,6 +138,7 @@ public class CrmProductServiceImpl implements CrmProductService {
126 138 }
127 139  
128 140 @Override
  141 + @CrmPermission(bizType = CrmBizTypeEnum.CRM_PRODUCT, bizId = "#pageReqVO.id", level = CrmPermissionLevelEnum.READ)
129 142 public PageResult<CrmProductDO> getProductPage(CrmProductPageReqVO pageReqVO) {
130 143 return productMapper.selectPage(pageReqVO);
131 144 }
... ...