Pārlūkot izejas kodu

📖 CRM:code review 合同逻辑

YunaiV 1 gadu atpakaļ
vecāks
revīzija
0fba56cda8
11 mainītis faili ar 33 papildinājumiem un 21 dzēšanām
  1. 2 1
      yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/business/vo/business/CrmBusinessSaveReqVO.java
  2. 2 1
      yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/contract/CrmContractController.java
  3. 1 0
      yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/contract/vo/CrmContractRespVO.java
  4. 2 3
      yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/convert/contract/CrmContractConvert.java
  5. 2 0
      yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/dataobject/contract/CrmContractProductDO.java
  6. 6 4
      yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/mysql/business/CrmBusinessProductMapper.java
  7. 1 0
      yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/mysql/contract/CrmContractProductMapper.java
  8. 7 6
      yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/business/CrmBusinessServiceImpl.java
  9. 1 0
      yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/business/bo/CrmBusinessUpdateProductReqBO.java
  10. 7 4
      yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/contract/CrmContractServiceImpl.java
  11. 2 2
      yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/customer/CrmCustomerServiceImpl.java

+ 2 - 1
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/business/vo/business/CrmBusinessSaveReqVO.java

@@ -77,6 +77,7 @@ public class CrmBusinessSaveReqVO {
     @Schema(description = "联系人编号", example = "110")
     @Schema(description = "联系人编号", example = "110")
     private Long contactId; // 使用场景,在【联系人详情】添加商机时,如果需要关联两者,需要传递 contactId 字段
     private Long contactId; // 使用场景,在【联系人详情】添加商机时,如果需要关联两者,需要传递 contactId 字段
 
 
+    // TODO @puhui999:传递 items 就行啦;
     @Schema(description = "产品列表")
     @Schema(description = "产品列表")
     private List<CrmBusinessProductItem> productItems;
     private List<CrmBusinessProductItem> productItems;
 
 
@@ -86,7 +87,7 @@ public class CrmBusinessSaveReqVO {
     @AllArgsConstructor
     @AllArgsConstructor
     public static class CrmBusinessProductItem {
     public static class CrmBusinessProductItem {
 
 
-        @Schema(description = "产品编号", example = "20529")
+        @Schema(description = "产品编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "20529")
         @NotNull(message = "产品编号不能为空")
         @NotNull(message = "产品编号不能为空")
         private Long id;
         private Long id;
 
 

+ 2 - 1
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/contract/CrmContractController.java

@@ -46,6 +46,7 @@ import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
 import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.*;
 import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.*;
 import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.EXPORT;
 import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.EXPORT;
 import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId;
 import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId;
+import static java.util.Collections.singletonList;
 
 
 @Tag(name = "管理后台 - CRM 合同")
 @Tag(name = "管理后台 - CRM 合同")
 @RestController
 @RestController
@@ -102,7 +103,7 @@ public class CrmContractController {
         }
         }
 
 
         // 2. 拼接合同信息
         // 2. 拼接合同信息
-        List<CrmContractRespVO> respVOList = buildContractDetailList(Collections.singletonList(contract));
+        List<CrmContractRespVO> respVOList = buildContractDetailList(singletonList(contract));
         return success(respVOList.get(0));
         return success(respVOList.get(0));
     }
     }
 
 

+ 1 - 0
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/contract/vo/CrmContractRespVO.java

@@ -132,6 +132,7 @@ public class CrmContractRespVO {
     @Schema(description = "产品列表")
     @Schema(description = "产品列表")
     private List<CrmContractProductItemRespVO> productItems;
     private List<CrmContractProductItemRespVO> productItems;
 
 
+    // TODO @puhui999:可以直接叫 Item
     @Schema(description = "产品列表")
     @Schema(description = "产品列表")
     @Data
     @Data
     @NoArgsConstructor
     @NoArgsConstructor

+ 2 - 3
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/convert/contract/CrmContractConvert.java

@@ -61,9 +61,8 @@ public interface CrmContractConvert {
                                                List<CrmProductDO> productList) {
                                                List<CrmProductDO> productList) {
         respVO.setProductItems(CollectionUtils.convertList(productList, product -> {
         respVO.setProductItems(CollectionUtils.convertList(productList, product -> {
             CrmContractRespVO.CrmContractProductItemRespVO productItemRespVO = BeanUtils.toBean(product, CrmContractRespVO.CrmContractProductItemRespVO.class);
             CrmContractRespVO.CrmContractProductItemRespVO productItemRespVO = BeanUtils.toBean(product, CrmContractRespVO.CrmContractProductItemRespVO.class);
-            findAndThen(contractProductMap, product.getId(), contractProduct -> {
-                productItemRespVO.setCount(contractProduct.getCount()).setDiscountPercent(contractProduct.getDiscountPercent());
-            });
+            findAndThen(contractProductMap, product.getId(), contractProduct ->
+                    productItemRespVO.setCount(contractProduct.getCount()).setDiscountPercent(contractProduct.getDiscountPercent()));
             return productItemRespVO;
             return productItemRespVO;
         }));
         }));
     }
     }

+ 2 - 0
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/dataobject/contract/CrmContractProductDO.java

@@ -57,6 +57,8 @@ public class CrmContractProductDO extends BaseDO {
     private Integer discountPercent;
     private Integer discountPercent;
     /**
     /**
      * 总计价格(折扣后价格)
      * 总计价格(折扣后价格)
+     *
+     * TODO @puhui999:可以写下计算公式哈;
      */
      */
     private Integer totalPrice;
     private Integer totalPrice;
 
 

+ 6 - 4
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/mysql/business/CrmBusinessProductMapper.java

@@ -16,15 +16,17 @@ import java.util.List;
 @Mapper
 @Mapper
 public interface CrmBusinessProductMapper extends BaseMapperX<CrmBusinessProductDO> {
 public interface CrmBusinessProductMapper extends BaseMapperX<CrmBusinessProductDO> {
 
 
-    default void deleteByBusinessId(Long id) { // TODO @lzxhqs:第一个方法,和类之间最好空一行;
-        delete(CrmBusinessProductDO::getBusinessId, id);
+    // TODO @puhui999:用不到的方法,看看是不是删除哈
+    default void deleteByBusinessId(Long getBusinessId) { // TODO @lzxhqs:第一个方法,和类之间最好空一行;
+        delete(CrmBusinessProductDO::getBusinessId, getBusinessId);
     }
     }
 
 
-    default CrmBusinessProductDO selectByBusinessId(Long id) {
-        return selectOne(CrmBusinessProductDO::getBusinessId, id);
+    default CrmBusinessProductDO selectByBusinessId(Long getBusinessId) {
+        return selectOne(CrmBusinessProductDO::getBusinessId, getBusinessId);
     }
     }
 
 
     default List<CrmBusinessProductDO> selectListByBusinessId(Long businessId) {
     default List<CrmBusinessProductDO> selectListByBusinessId(Long businessId) {
+        // TODO @puhui999:可以简化,selectList(CrmBusinessProductDO::getBusinessId, businessId)
         return selectList(new LambdaQueryWrapperX<CrmBusinessProductDO>().eq(CrmBusinessProductDO::getBusinessId, businessId));
         return selectList(new LambdaQueryWrapperX<CrmBusinessProductDO>().eq(CrmBusinessProductDO::getBusinessId, businessId));
     }
     }
 
 

+ 1 - 0
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/mysql/contract/CrmContractProductMapper.java

@@ -16,6 +16,7 @@ import java.util.List;
 @Mapper
 @Mapper
 public interface CrmContractProductMapper extends BaseMapperX<CrmContractProductDO> {
 public interface CrmContractProductMapper extends BaseMapperX<CrmContractProductDO> {
 
 
+    // TODO @puhui999:用不到的方法,看看是不是删除哈
     default void deleteByContractId(Long contractId) { // TODO @lzxhqs:第一个方法,和类之间最好空一行;
     default void deleteByContractId(Long contractId) { // TODO @lzxhqs:第一个方法,和类之间最好空一行;
         delete(CrmContractProductDO::getContractId, contractId);
         delete(CrmContractProductDO::getContractId, contractId);
     }
     }

+ 7 - 6
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/business/CrmBusinessServiceImpl.java

@@ -81,13 +81,13 @@ public class CrmBusinessServiceImpl implements CrmBusinessService {
         businessMapper.insert(business);
         businessMapper.insert(business);
         // 1.2 插入商机关联商品
         // 1.2 插入商机关联商品
         if (CollUtil.isNotEmpty(createReqVO.getProductItems())) { // 如果有的话
         if (CollUtil.isNotEmpty(createReqVO.getProductItems())) { // 如果有的话
-            List<CrmBusinessProductDO> productList = convertBusinessProductList(createReqVO.getProductItems(), business.getId());
+            List<CrmBusinessProductDO> productList = buildBusinessProductList(createReqVO.getProductItems(), business.getId());
             businessProductMapper.insertBatch(productList);
             businessProductMapper.insertBatch(productList);
             // 更新合同商品总金额
             // 更新合同商品总金额
             businessMapper.updateById(new CrmBusinessDO().setId(business.getId()).setProductPrice(
             businessMapper.updateById(new CrmBusinessDO().setId(business.getId()).setProductPrice(
                     getSumValue(productList, CrmBusinessProductDO::getTotalPrice, Integer::sum)));
                     getSumValue(productList, CrmBusinessProductDO::getTotalPrice, Integer::sum)));
         }
         }
-        // TODO 商机待定:在联系人的详情页,如果直接【新建商机】,则需要关联下。这里要搞个 CrmContactBusinessDO 表
+        // TODO @puhui999:在联系人的详情页,如果直接【新建商机】,则需要关联下。这里要搞个 CrmContactBusinessDO 表
         createContactBusiness(business.getId(), createReqVO.getContactId());
         createContactBusiness(business.getId(), createReqVO.getContactId());
 
 
         // 2. 创建数据权限
         // 2. 创建数据权限
@@ -95,7 +95,7 @@ public class CrmBusinessServiceImpl implements CrmBusinessService {
         permissionService.createPermission(new CrmPermissionCreateReqBO().setBizType(CrmBizTypeEnum.CRM_BUSINESS.getType())
         permissionService.createPermission(new CrmPermissionCreateReqBO().setBizType(CrmBizTypeEnum.CRM_BUSINESS.getType())
                 .setBizId(business.getId()).setUserId(userId).setLevel(CrmPermissionLevelEnum.OWNER.getLevel()));
                 .setBizId(business.getId()).setUserId(userId).setLevel(CrmPermissionLevelEnum.OWNER.getLevel()));
 
 
-        // 4. 记录操作日志上下文
+        // 3. 记录操作日志上下文
         LogRecordContext.putVariable("business", business);
         LogRecordContext.putVariable("business", business);
         return business.getId();
         return business.getId();
     }
     }
@@ -121,7 +121,7 @@ public class CrmBusinessServiceImpl implements CrmBusinessService {
         CrmBusinessDO updateObj = BeanUtils.toBean(updateReqVO, CrmBusinessDO.class);
         CrmBusinessDO updateObj = BeanUtils.toBean(updateReqVO, CrmBusinessDO.class);
         businessMapper.updateById(updateObj);
         businessMapper.updateById(updateObj);
         // 2.2 更新商机关联商品
         // 2.2 更新商机关联商品
-        List<CrmBusinessProductDO> productList = convertBusinessProductList(updateReqVO.getProductItems(), updateObj.getId());
+        List<CrmBusinessProductDO> productList = buildBusinessProductList(updateReqVO.getProductItems(), updateObj.getId());
         updateBusinessProduct(productList, updateObj.getId());
         updateBusinessProduct(productList, updateObj.getId());
 
 
         // TODO @商机待定:如果状态发生变化,插入商机状态变更记录表
         // TODO @商机待定:如果状态发生变化,插入商机状态变更记录表
@@ -175,7 +175,8 @@ public class CrmBusinessServiceImpl implements CrmBusinessService {
         }
         }
     }
     }
 
 
-    private List<CrmBusinessProductDO> convertBusinessProductList(List<CrmBusinessSaveReqVO.CrmBusinessProductItem> productItems, Long businessId) {
+    private List<CrmBusinessProductDO> buildBusinessProductList(List<CrmBusinessSaveReqVO.CrmBusinessProductItem> productItems,
+                                                                Long businessId) {
         // 校验商品存在
         // 校验商品存在
         Set<Long> productIds = convertSet(productItems, CrmBusinessSaveReqVO.CrmBusinessProductItem::getId);
         Set<Long> productIds = convertSet(productItems, CrmBusinessSaveReqVO.CrmBusinessProductItem::getId);
         List<CrmProductDO> productList = productService.getProductList(productIds);
         List<CrmProductDO> productList = productService.getProductList(productIds);
@@ -235,7 +236,7 @@ public class CrmBusinessServiceImpl implements CrmBusinessService {
     @Override
     @Override
     public void updateBusinessProduct(CrmBusinessUpdateProductReqBO updateProductReqBO) {
     public void updateBusinessProduct(CrmBusinessUpdateProductReqBO updateProductReqBO) {
         // 更新商机关联商品
         // 更新商机关联商品
-        List<CrmBusinessProductDO> productList = convertBusinessProductList(
+        List<CrmBusinessProductDO> productList = buildBusinessProductList(
                 BeanUtils.toBean(updateProductReqBO.getProductItems(), CrmBusinessSaveReqVO.CrmBusinessProductItem.class), updateProductReqBO.getId());
                 BeanUtils.toBean(updateProductReqBO.getProductItems(), CrmBusinessSaveReqVO.CrmBusinessProductItem.class), updateProductReqBO.getId());
         updateBusinessProduct(productList, updateProductReqBO.getId());
         updateBusinessProduct(productList, updateProductReqBO.getId());
     }
     }

+ 1 - 0
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/business/bo/CrmBusinessUpdateProductReqBO.java

@@ -23,6 +23,7 @@ public class CrmBusinessUpdateProductReqBO {
     @NotNull(message = "商机编号不能为空")
     @NotNull(message = "商机编号不能为空")
     private Long id;
     private Long id;
 
 
+    // TODO @芋艿:再想想
     @NotEmpty(message = "产品列表不能为空")
     @NotEmpty(message = "产品列表不能为空")
     private List<CrmBusinessProductItem> productItems;
     private List<CrmBusinessProductItem> productItems;
 
 

+ 7 - 4
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/contract/CrmContractServiceImpl.java

@@ -61,7 +61,10 @@ import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.USER_NOT_E
 @Validated
 @Validated
 public class CrmContractServiceImpl implements CrmContractService {
 public class CrmContractServiceImpl implements CrmContractService {
 
 
-    public static final String CONTRACT_APPROVE = "contract-approve"; // 合同审批流程标识
+    /**
+     * BPM 合同审批流程标识
+     */
+    public static final String CONTRACT_APPROVE = "contract-approve";
 
 
     @Resource
     @Resource
     private CrmContractMapper contractMapper;
     private CrmContractMapper contractMapper;
@@ -149,11 +152,11 @@ public class CrmContractServiceImpl implements CrmContractService {
         List<CrmContractProductDO> newProductList = convertContractProductList(updateReqVO, contractId);
         List<CrmContractProductDO> newProductList = convertContractProductList(updateReqVO, contractId);
         List<CrmContractProductDO> oldProductList = contractProductMapper.selectListByContractId(contractId);
         List<CrmContractProductDO> oldProductList = contractProductMapper.selectListByContractId(contractId);
         List<List<CrmContractProductDO>> diffList = diffList(oldProductList, newProductList, (oldObj, newObj) -> {
         List<List<CrmContractProductDO>> diffList = diffList(oldProductList, newProductList, (oldObj, newObj) -> {
-            boolean equal = ObjUtil.equal(oldObj.getProductId(), newObj.getProductId());
-            if (equal) {
+            boolean match = ObjUtil.equal(oldObj.getProductId(), newObj.getProductId());
+            if (match) {
                 newObj.setId(oldObj.getId()); // 设置一下老的编号更新时需要使用
                 newObj.setId(oldObj.getId()); // 设置一下老的编号更新时需要使用
             }
             }
-            return equal;
+            return match;
         });
         });
         if (CollUtil.isNotEmpty(diffList.get(0))) {
         if (CollUtil.isNotEmpty(diffList.get(0))) {
             contractProductMapper.insertBatch(diffList.get(0));
             contractProductMapper.insertBatch(diffList.get(0));

+ 2 - 2
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/customer/CrmCustomerServiceImpl.java

@@ -266,10 +266,10 @@ public class CrmCustomerServiceImpl implements CrmCustomerService {
                 CrmCustomerDO customer = initCustomer(importCustomer, importReqVO.getOwnerUserId());
                 CrmCustomerDO customer = initCustomer(importCustomer, importReqVO.getOwnerUserId());
                 customerMapper.insert(customer);
                 customerMapper.insert(customer);
                 respVO.getCreateCustomerNames().add(importCustomer.getName());
                 respVO.getCreateCustomerNames().add(importCustomer.getName());
+                // 1.2 创建数据权限
                 if (importReqVO.getOwnerUserId() != null) {
                 if (importReqVO.getOwnerUserId() != null) {
-                    // 1.2 创建数据权限
                     permissionService.createPermission(new CrmPermissionCreateReqBO().setBizType(CrmBizTypeEnum.CRM_CUSTOMER.getType())
                     permissionService.createPermission(new CrmPermissionCreateReqBO().setBizType(CrmBizTypeEnum.CRM_CUSTOMER.getType())
-                            .setBizId(customer.getId()).setUserId(importReqVO.getOwnerUserId()).setLevel(CrmPermissionLevelEnum.OWNER.getLevel())); // 设置当前操作的人为负责人
+                            .setBizId(customer.getId()).setUserId(importReqVO.getOwnerUserId()).setLevel(CrmPermissionLevelEnum.OWNER.getLevel()));
                 }
                 }
                 // 1.3 记录操作日志
                 // 1.3 记录操作日志
                 getSelf().importCustomerLog(customer, false);
                 getSelf().importCustomerLog(customer, false);