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,6 +61,19 @@ public interface LogRecordConstants {
61 // ======================= CRM_PRODUCT 产品 ======================= 61 // ======================= CRM_PRODUCT 产品 =======================
62 62
63 String CRM_PRODUCT_TYPE = "CRM 产品"; 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 // ======================= CRM_RECEIVABLE 回款 ======================= 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,6 +5,10 @@ import cn.iocoder.yudao.module.crm.controller.admin.product.vo.category.CrmProdu
5 import cn.iocoder.yudao.module.crm.controller.admin.product.vo.category.CrmProductCategoryListReqVO; 5 import cn.iocoder.yudao.module.crm.controller.admin.product.vo.category.CrmProductCategoryListReqVO;
6 import cn.iocoder.yudao.module.crm.dal.dataobject.product.CrmProductCategoryDO; 6 import cn.iocoder.yudao.module.crm.dal.dataobject.product.CrmProductCategoryDO;
7 import cn.iocoder.yudao.module.crm.dal.mysql.product.CrmProductCategoryMapper; 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 import org.springframework.context.annotation.Lazy; 12 import org.springframework.context.annotation.Lazy;
9 import org.springframework.stereotype.Service; 13 import org.springframework.stereotype.Service;
10 import org.springframework.validation.annotation.Validated; 14 import org.springframework.validation.annotation.Validated;
@@ -17,6 +21,7 @@ import java.util.Objects; @@ -17,6 +21,7 @@ import java.util.Objects;
17 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; 21 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
18 import static cn.iocoder.yudao.module.crm.dal.dataobject.product.CrmProductCategoryDO.PARENT_ID_NULL; 22 import static cn.iocoder.yudao.module.crm.dal.dataobject.product.CrmProductCategoryDO.PARENT_ID_NULL;
19 import static cn.iocoder.yudao.module.crm.enums.ErrorCodeConstants.*; 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 * CRM 产品分类 Service 实现类 27 * CRM 产品分类 Service 实现类
@@ -35,7 +40,9 @@ public class CrmProductCategoryServiceImpl implements CrmProductCategoryService @@ -35,7 +40,9 @@ public class CrmProductCategoryServiceImpl implements CrmProductCategoryService
35 private CrmProductService crmProductService; 40 private CrmProductService crmProductService;
36 41
37 @Override 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 public Long createProductCategory(CrmProductCategoryCreateReqVO createReqVO) { 46 public Long createProductCategory(CrmProductCategoryCreateReqVO createReqVO) {
40 // 1.1 校验父分类存在 47 // 1.1 校验父分类存在
41 validateParentProductCategory(createReqVO.getParentId()); 48 validateParentProductCategory(createReqVO.getParentId());
@@ -48,7 +55,9 @@ public class CrmProductCategoryServiceImpl implements CrmProductCategoryService @@ -48,7 +55,9 @@ public class CrmProductCategoryServiceImpl implements CrmProductCategoryService
48 } 55 }
49 56
50 @Override 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 public void updateProductCategory(CrmProductCategoryCreateReqVO updateReqVO) { 61 public void updateProductCategory(CrmProductCategoryCreateReqVO updateReqVO) {
53 // 1.1 校验存在 62 // 1.1 校验存在
54 validateProductCategoryExists(updateReqVO.getId()); 63 validateProductCategoryExists(updateReqVO.getId());
@@ -93,7 +102,9 @@ public class CrmProductCategoryServiceImpl implements CrmProductCategoryService @@ -93,7 +102,9 @@ public class CrmProductCategoryServiceImpl implements CrmProductCategoryService
93 } 102 }
94 103
95 @Override 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 public void deleteProductCategory(Long id) { 108 public void deleteProductCategory(Long id) {
98 // 1.1 校验存在 109 // 1.1 校验存在
99 validateProductCategoryExists(id); 110 validateProductCategoryExists(id);
@@ -110,16 +121,19 @@ public class CrmProductCategoryServiceImpl implements CrmProductCategoryService @@ -110,16 +121,19 @@ public class CrmProductCategoryServiceImpl implements CrmProductCategoryService
110 } 121 }
111 122
112 @Override 123 @Override
  124 + @CrmPermission(bizType = CrmBizTypeEnum.CRM_PRODUCT, bizId = "#id", level = CrmPermissionLevelEnum.READ)
113 public CrmProductCategoryDO getProductCategory(Long id) { 125 public CrmProductCategoryDO getProductCategory(Long id) {
114 return productCategoryMapper.selectById(id); 126 return productCategoryMapper.selectById(id);
115 } 127 }
116 128
117 @Override 129 @Override
  130 + @CrmPermission(bizType = CrmBizTypeEnum.CRM_PRODUCT, bizId = "#listReqVO.id", level = CrmPermissionLevelEnum.READ)
118 public List<CrmProductCategoryDO> getProductCategoryList(CrmProductCategoryListReqVO listReqVO) { 131 public List<CrmProductCategoryDO> getProductCategoryList(CrmProductCategoryListReqVO listReqVO) {
119 return productCategoryMapper.selectList(listReqVO); 132 return productCategoryMapper.selectList(listReqVO);
120 } 133 }
121 134
122 @Override 135 @Override
  136 + @CrmPermission(bizType = CrmBizTypeEnum.CRM_PRODUCT, bizId = "#listReqVO.id", level = CrmPermissionLevelEnum.READ)
123 public List<CrmProductCategoryDO> getProductCategoryList(Collection<Long> ids) { 137 public List<CrmProductCategoryDO> getProductCategoryList(Collection<Long> ids) {
124 return productCategoryMapper.selectBatchIds(ids); 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,22 +11,26 @@ import cn.iocoder.yudao.module.crm.dal.dataobject.product.CrmProductDO;
11 import cn.iocoder.yudao.module.crm.dal.mysql.product.CrmProductMapper; 11 import cn.iocoder.yudao.module.crm.dal.mysql.product.CrmProductMapper;
12 import cn.iocoder.yudao.module.crm.enums.common.CrmBizTypeEnum; 12 import cn.iocoder.yudao.module.crm.enums.common.CrmBizTypeEnum;
13 import cn.iocoder.yudao.module.crm.enums.permission.CrmPermissionLevelEnum; 13 import cn.iocoder.yudao.module.crm.enums.permission.CrmPermissionLevelEnum;
  14 +import cn.iocoder.yudao.module.crm.framework.permission.core.annotations.CrmPermission;
14 import cn.iocoder.yudao.module.crm.service.permission.CrmPermissionService; 15 import cn.iocoder.yudao.module.crm.service.permission.CrmPermissionService;
15 import cn.iocoder.yudao.module.crm.service.permission.bo.CrmPermissionCreateReqBO; 16 import cn.iocoder.yudao.module.crm.service.permission.bo.CrmPermissionCreateReqBO;
16 import cn.iocoder.yudao.module.system.api.user.AdminUserApi; 17 import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
17 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; 18 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  19 +import com.mzt.logapi.starter.annotation.LogRecord;
  20 +import jakarta.annotation.Resource;
18 import org.springframework.stereotype.Service; 21 import org.springframework.stereotype.Service;
  22 +import org.springframework.transaction.annotation.Transactional;
19 import org.springframework.validation.annotation.Validated; 23 import org.springframework.validation.annotation.Validated;
20 24
21 -import jakarta.annotation.Resource;  
22 import java.util.Collection; 25 import java.util.Collection;
23 import java.util.Collections; 26 import java.util.Collections;
24 import java.util.List; 27 import java.util.List;
25 28
26 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; 29 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
27 import static cn.iocoder.yudao.module.crm.enums.ErrorCodeConstants.*; 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 * CRM 产品 Service 实现类 35 * CRM 产品 Service 实现类
32 * 36 *
@@ -48,7 +52,10 @@ public class CrmProductServiceImpl implements CrmProductService { @@ -48,7 +52,10 @@ public class CrmProductServiceImpl implements CrmProductService {
48 private AdminUserApi adminUserApi; 52 private AdminUserApi adminUserApi;
49 53
50 @Override 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 public Long createProduct(CrmProductSaveReqVO createReqVO) { 59 public Long createProduct(CrmProductSaveReqVO createReqVO) {
53 // 校验产品 60 // 校验产品
54 adminUserApi.validateUserList(Collections.singleton(createReqVO.getOwnerUserId())); 61 adminUserApi.validateUserList(Collections.singleton(createReqVO.getOwnerUserId()));
@@ -67,7 +74,9 @@ public class CrmProductServiceImpl implements CrmProductService { @@ -67,7 +74,9 @@ public class CrmProductServiceImpl implements CrmProductService {
67 } 74 }
68 75
69 @Override 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 public void updateProduct(CrmProductSaveReqVO updateReqVO) { 80 public void updateProduct(CrmProductSaveReqVO updateReqVO) {
72 // 校验产品 81 // 校验产品
73 updateReqVO.setOwnerUserId(null); // 不修改负责人 82 updateReqVO.setOwnerUserId(null); // 不修改负责人
@@ -90,7 +99,7 @@ public class CrmProductServiceImpl implements CrmProductService { @@ -90,7 +99,7 @@ public class CrmProductServiceImpl implements CrmProductService {
90 private void validateProductNoDuplicate(Long id, String no) { 99 private void validateProductNoDuplicate(Long id, String no) {
91 CrmProductDO product = productMapper.selectByNo(no); 100 CrmProductDO product = productMapper.selectByNo(no);
92 if (product == null 101 if (product == null
93 - || product.getId().equals(id)) { 102 + || product.getId().equals(id)) {
94 return; 103 return;
95 } 104 }
96 throw exception(PRODUCT_NO_EXISTS); 105 throw exception(PRODUCT_NO_EXISTS);
@@ -104,7 +113,9 @@ public class CrmProductServiceImpl implements CrmProductService { @@ -104,7 +113,9 @@ public class CrmProductServiceImpl implements CrmProductService {
104 } 113 }
105 114
106 @Override 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 public void deleteProduct(Long id) { 119 public void deleteProduct(Long id) {
109 // 校验存在 120 // 校验存在
110 validateProductExists(id); 121 validateProductExists(id);
@@ -113,6 +124,7 @@ public class CrmProductServiceImpl implements CrmProductService { @@ -113,6 +124,7 @@ public class CrmProductServiceImpl implements CrmProductService {
113 } 124 }
114 125
115 @Override 126 @Override
  127 + @CrmPermission(bizType = CrmBizTypeEnum.CRM_PRODUCT, bizId = "#id", level = CrmPermissionLevelEnum.READ)
116 public CrmProductDO getProduct(Long id) { 128 public CrmProductDO getProduct(Long id) {
117 return productMapper.selectById(id); 129 return productMapper.selectById(id);
118 } 130 }
@@ -126,6 +138,7 @@ public class CrmProductServiceImpl implements CrmProductService { @@ -126,6 +138,7 @@ public class CrmProductServiceImpl implements CrmProductService {
126 } 138 }
127 139
128 @Override 140 @Override
  141 + @CrmPermission(bizType = CrmBizTypeEnum.CRM_PRODUCT, bizId = "#pageReqVO.id", level = CrmPermissionLevelEnum.READ)
129 public PageResult<CrmProductDO> getProductPage(CrmProductPageReqVO pageReqVO) { 142 public PageResult<CrmProductDO> getProductPage(CrmProductPageReqVO pageReqVO) {
130 return productMapper.selectPage(pageReqVO); 143 return productMapper.selectPage(pageReqVO);
131 } 144 }