Commit 6b426fcd01523ab5eb8318cb0eef8f3beb05db40

Authored by puhui999
1 parent ad4044f9

CRM: 修复一下差异

yudao-module-crm/yudao-module-crm-api/pom.xml
@@ -28,6 +28,12 @@ @@ -28,6 +28,12 @@
28 <artifactId>spring-boot-starter-validation</artifactId> 28 <artifactId>spring-boot-starter-validation</artifactId>
29 <optional>true</optional> 29 <optional>true</optional>
30 </dependency> 30 </dependency>
  31 + <dependency>
  32 + <groupId>cn.iocoder.boot</groupId>
  33 + <artifactId>yudao-module-system-api</artifactId>
  34 + <version>${revision}</version>
  35 + <optional>true</optional>
  36 + </dependency>
31 </dependencies> 37 </dependencies>
32 38
33 </project> 39 </project>
yudao-module-crm/yudao-module-crm-api/src/main/java/cn/iocoder/yudao/module/crm/enums/LogRecordConstants.java
1 package cn.iocoder.yudao.module.crm.enums; 1 package cn.iocoder.yudao.module.crm.enums;
2 2
3 import static cn.iocoder.yudao.module.crm.enums.operatelog.CrmParseFunctionNameConstants.GET_CONTRACT_BY_ID; 3 import static cn.iocoder.yudao.module.crm.enums.operatelog.CrmParseFunctionNameConstants.GET_CONTRACT_BY_ID;
  4 +import static cn.iocoder.yudao.module.system.enums.operatelog.SysParseFunctionNameConstants.GET_ADMIN_USER_BY_ID;
4 5
5 /** 6 /**
6 * CRM 操作日志枚举 7 * CRM 操作日志枚举
@@ -24,7 +25,7 @@ public interface LogRecordConstants { @@ -24,7 +25,7 @@ public interface LogRecordConstants {
24 String CRM_CUSTOMER_DELETE_SUB_TYPE = "删除客户"; 25 String CRM_CUSTOMER_DELETE_SUB_TYPE = "删除客户";
25 String CRM_CUSTOMER_DELETE_SUCCESS = "删除了客户【{{#customerName}}】"; 26 String CRM_CUSTOMER_DELETE_SUCCESS = "删除了客户【{{#customerName}}】";
26 String CRM_CUSTOMER_TRANSFER_SUB_TYPE = "转移客户"; 27 String CRM_CUSTOMER_TRANSFER_SUB_TYPE = "转移客户";
27 - String CRM_CUSTOMER_TRANSFER_SUCCESS = "将客户【{{#customer.name}}】的负责人从【{getAdminUserById{#customer.ownerUserId}}】变更为了【{getAdminUserById{#reqVO.newOwnerUserId}}】"; 28 + String CRM_CUSTOMER_TRANSFER_SUCCESS = "将客户【{{#customer.name}}】的负责人从【{" + GET_ADMIN_USER_BY_ID + "{#customer.ownerUserId}}】变更为了【{" + GET_ADMIN_USER_BY_ID + "{#reqVO.newOwnerUserId}}】";
28 String CRM_CUSTOMER_LOCK_SUB_TYPE = "{{#customer.lockStatus ? '解锁客户' : '锁定客户'}}"; 29 String CRM_CUSTOMER_LOCK_SUB_TYPE = "{{#customer.lockStatus ? '解锁客户' : '锁定客户'}}";
29 String CRM_CUSTOMER_LOCK_SUCCESS = "{{#customer.lockStatus ? '将客户【' + #customer.name + '】解锁' : '将客户【' + #customer.name + '】锁定'}}"; 30 String CRM_CUSTOMER_LOCK_SUCCESS = "{{#customer.lockStatus ? '将客户【' + #customer.name + '】解锁' : '将客户【' + #customer.name + '】锁定'}}";
30 String CRM_CUSTOMER_POOL_SUB_TYPE = "客户放入公海"; 31 String CRM_CUSTOMER_POOL_SUB_TYPE = "客户放入公海";
@@ -58,8 +59,7 @@ public interface LogRecordConstants { @@ -58,8 +59,7 @@ public interface LogRecordConstants {
58 String CRM_CONTACT_DELETE_SUB_TYPE = "删除联系人"; 59 String CRM_CONTACT_DELETE_SUB_TYPE = "删除联系人";
59 String CRM_CONTACT_DELETE_SUCCESS = "删除了联系人【{{#contactName}}】"; 60 String CRM_CONTACT_DELETE_SUCCESS = "删除了联系人【{{#contactName}}】";
60 String CRM_CONTACT_TRANSFER_SUB_TYPE = "转移联系人"; 61 String CRM_CONTACT_TRANSFER_SUB_TYPE = "转移联系人";
61 - String CRM_CONTACT_TRANSFER_SUCCESS = "将联系人【{{#contact.name}}】的负责人从【{getAdminUserById{#contact.ownerUserId}}】变更为了【{getAdminUserById{#reqVO.newOwnerUserId}}】";  
62 - 62 + String CRM_CONTACT_TRANSFER_SUCCESS = "将联系人【{{#contact.name}}】的负责人从【{" + GET_ADMIN_USER_BY_ID + "{#contact.ownerUserId}}】变更为了【{" + GET_ADMIN_USER_BY_ID + "{#reqVO.newOwnerUserId}}】";
63 63
64 // ======================= CRM_BUSINESS 商机 ======================= 64 // ======================= CRM_BUSINESS 商机 =======================
65 65
@@ -71,7 +71,7 @@ public interface LogRecordConstants { @@ -71,7 +71,7 @@ public interface LogRecordConstants {
71 String CRM_BUSINESS_DELETE_SUB_TYPE = "删除商机"; 71 String CRM_BUSINESS_DELETE_SUB_TYPE = "删除商机";
72 String CRM_BUSINESS_DELETE_SUCCESS = "删除了商机【{{#businessName}}】"; 72 String CRM_BUSINESS_DELETE_SUCCESS = "删除了商机【{{#businessName}}】";
73 String CRM_BUSINESS_TRANSFER_SUB_TYPE = "转移商机"; 73 String CRM_BUSINESS_TRANSFER_SUB_TYPE = "转移商机";
74 - String CRM_BUSINESS_TRANSFER_SUCCESS = "将商机【{{#business.name}}】的负责人从【{getAdminUserById{#business.ownerUserId}}】变更为了【{getAdminUserById{#reqVO.newOwnerUserId}}】"; 74 + String CRM_BUSINESS_TRANSFER_SUCCESS = "将商机【{{#business.name}}】的负责人从【{" + GET_ADMIN_USER_BY_ID + "{#business.ownerUserId}}】变更为了【{" + GET_ADMIN_USER_BY_ID + "{#reqVO.newOwnerUserId}}】";
75 75
76 // ======================= CRM_CONTRACT 合同 ======================= 76 // ======================= CRM_CONTRACT 合同 =======================
77 77
@@ -83,8 +83,7 @@ public interface LogRecordConstants { @@ -83,8 +83,7 @@ public interface LogRecordConstants {
83 String CRM_CONTRACT_DELETE_SUB_TYPE = "删除合同"; 83 String CRM_CONTRACT_DELETE_SUB_TYPE = "删除合同";
84 String CRM_CONTRACT_DELETE_SUCCESS = "删除了合同【{{#contractName}}】"; 84 String CRM_CONTRACT_DELETE_SUCCESS = "删除了合同【{{#contractName}}】";
85 String CRM_CONTRACT_TRANSFER_SUB_TYPE = "转移合同"; 85 String CRM_CONTRACT_TRANSFER_SUB_TYPE = "转移合同";
86 - String CRM_CONTRACT_TRANSFER_SUCCESS = "将合同【{{#contract.name}}】的负责人从【{getAdminUserById{#contract.ownerUserId}}】变更为了【{getAdminUserById{#reqVO.newOwnerUserId}}】";  
87 - 86 + String CRM_CONTRACT_TRANSFER_SUCCESS = "将合同【{{#contract.name}}】的负责人从【{" + GET_ADMIN_USER_BY_ID + "{#contract.ownerUserId}}】变更为了【{" + GET_ADMIN_USER_BY_ID + "{#reqVO.newOwnerUserId}}】";
88 87
89 // ======================= CRM_PRODUCT 产品 ======================= 88 // ======================= CRM_PRODUCT 产品 =======================
90 89
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/convert/customer/CrmCustomerConvert.java
@@ -4,9 +4,6 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult; @@ -4,9 +4,6 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult;
4 import cn.iocoder.yudao.framework.ip.core.utils.AreaUtils; 4 import cn.iocoder.yudao.framework.ip.core.utils.AreaUtils;
5 import cn.iocoder.yudao.module.crm.controller.admin.customer.vo.CrmCustomerRespVO; 5 import cn.iocoder.yudao.module.crm.controller.admin.customer.vo.CrmCustomerRespVO;
6 import cn.iocoder.yudao.module.crm.controller.admin.customer.vo.CrmCustomerTransferReqVO; 6 import cn.iocoder.yudao.module.crm.controller.admin.customer.vo.CrmCustomerTransferReqVO;
7 -import cn.iocoder.yudao.module.crm.controller.admin.customer.vo.poolconfig.CrmCustomerPoolConfigRespVO;  
8 -import cn.iocoder.yudao.module.crm.controller.admin.customer.vo.poolconfig.CrmCustomerPoolConfigSaveReqVO;  
9 -import cn.iocoder.yudao.module.crm.dal.dataobject.clue.CrmClueDO;  
10 import cn.iocoder.yudao.module.crm.dal.dataobject.customer.CrmCustomerDO; 7 import cn.iocoder.yudao.module.crm.dal.dataobject.customer.CrmCustomerDO;
11 import cn.iocoder.yudao.module.crm.service.permission.bo.CrmPermissionTransferReqBO; 8 import cn.iocoder.yudao.module.crm.service.permission.bo.CrmPermissionTransferReqBO;
12 import cn.iocoder.yudao.module.system.api.dept.dto.DeptRespDTO; 9 import cn.iocoder.yudao.module.system.api.dept.dto.DeptRespDTO;
@@ -69,12 +66,4 @@ public interface CrmCustomerConvert { @@ -69,12 +66,4 @@ public interface CrmCustomerConvert {
69 return result; 66 return result;
70 } 67 }
71 68
72 - CrmCustomerPoolConfigRespVO convert(CrmCustomerPoolConfigDO customerPoolConfig);  
73 -  
74 - CrmCustomerPoolConfigDO convert(CrmCustomerPoolConfigSaveReqVO updateReqVO);  
75 -  
76 - // TODO @min:使用 BeanUtils 拷贝哈。我们慢慢简单的对象,不再直接基于 convert 做啦。  
77 - @Mapping(ignore = true, target = "id")  
78 - CrmCustomerSaveReqVO convert(CrmClueDO bean);  
79 -  
80 } 69 }
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/framework/operatelog/core/CrmContractParseFunction.java 0 → 100644
  1 +package cn.iocoder.yudao.module.crm.framework.operatelog.core;
  2 +
  3 +import cn.hutool.core.util.StrUtil;
  4 +import cn.iocoder.yudao.module.crm.dal.dataobject.contract.CrmContractDO;
  5 +import cn.iocoder.yudao.module.crm.service.contract.CrmContractService;
  6 +import com.mzt.logapi.service.IParseFunction;
  7 +import jakarta.annotation.Resource;
  8 +import lombok.extern.slf4j.Slf4j;
  9 +import org.springframework.stereotype.Component;
  10 +
  11 +import static cn.iocoder.yudao.module.crm.enums.operatelog.CrmParseFunctionNameConstants.GET_CONTRACT_BY_ID;
  12 +
  13 +/**
  14 + * CRM 合同的 {@link IParseFunction} 实现类
  15 + *
  16 + * @author HUIHUI
  17 + */
  18 +@Component
  19 +@Slf4j
  20 +public class CrmContractParseFunction implements IParseFunction {
  21 +
  22 + @Resource
  23 + private CrmContractService contractService;
  24 +
  25 + @Override
  26 + public boolean executeBefore() {
  27 + return true; // 先转换值后对比
  28 + }
  29 +
  30 + @Override
  31 + public String functionName() {
  32 + return GET_CONTRACT_BY_ID;
  33 + }
  34 +
  35 + @Override
  36 + public String apply(Object value) {
  37 + if (StrUtil.isEmptyIfStr(value)) {
  38 + return "";
  39 + }
  40 + CrmContractDO contract = contractService.getContract(Long.parseLong(value.toString()));
  41 + return contract == null ? "" : contract.getName();
  42 + }
  43 +
  44 +}
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/clue/CrmClueServiceImpl.java
@@ -3,12 +3,13 @@ package cn.iocoder.yudao.module.crm.service.clue; @@ -3,12 +3,13 @@ package cn.iocoder.yudao.module.crm.service.clue;
3 import cn.hutool.core.collection.CollUtil; 3 import cn.hutool.core.collection.CollUtil;
4 import cn.hutool.core.collection.ListUtil; 4 import cn.hutool.core.collection.ListUtil;
5 import cn.iocoder.yudao.framework.common.pojo.PageResult; 5 import cn.iocoder.yudao.framework.common.pojo.PageResult;
  6 +import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
6 import cn.iocoder.yudao.module.crm.controller.admin.clue.vo.CrmCluePageReqVO; 7 import cn.iocoder.yudao.module.crm.controller.admin.clue.vo.CrmCluePageReqVO;
7 import cn.iocoder.yudao.module.crm.controller.admin.clue.vo.CrmClueSaveReqVO; 8 import cn.iocoder.yudao.module.crm.controller.admin.clue.vo.CrmClueSaveReqVO;
8 import cn.iocoder.yudao.module.crm.controller.admin.clue.vo.CrmClueTransferReqVO; 9 import cn.iocoder.yudao.module.crm.controller.admin.clue.vo.CrmClueTransferReqVO;
9 import cn.iocoder.yudao.module.crm.controller.admin.clue.vo.CrmClueTransformReqVO; 10 import cn.iocoder.yudao.module.crm.controller.admin.clue.vo.CrmClueTransformReqVO;
  11 +import cn.iocoder.yudao.module.crm.controller.admin.customer.vo.CrmCustomerSaveReqVO;
10 import cn.iocoder.yudao.module.crm.convert.clue.CrmClueConvert; 12 import cn.iocoder.yudao.module.crm.convert.clue.CrmClueConvert;
11 -import cn.iocoder.yudao.module.crm.convert.customer.CrmCustomerConvert;  
12 import cn.iocoder.yudao.module.crm.dal.dataobject.clue.CrmClueDO; 13 import cn.iocoder.yudao.module.crm.dal.dataobject.clue.CrmClueDO;
13 import cn.iocoder.yudao.module.crm.dal.mysql.clue.CrmClueMapper; 14 import cn.iocoder.yudao.module.crm.dal.mysql.clue.CrmClueMapper;
14 import cn.iocoder.yudao.module.crm.enums.common.CrmBizTypeEnum; 15 import cn.iocoder.yudao.module.crm.enums.common.CrmBizTypeEnum;
@@ -139,8 +140,9 @@ public class CrmClueServiceImpl implements CrmClueService { @@ -139,8 +140,9 @@ public class CrmClueServiceImpl implements CrmClueService {
139 140
140 // 遍历线索,创建对应的客户 141 // 遍历线索,创建对应的客户
141 clues.forEach(clue -> { 142 clues.forEach(clue -> {
  143 + clue.setId(null);
142 // 创建客户 144 // 创建客户
143 - customerService.createCustomer(CrmCustomerConvert.INSTANCE.convert(clue), userId); 145 + customerService.createCustomer(BeanUtils.toBean(clue, CrmCustomerSaveReqVO.class), userId);
144 // 更新线索状态 146 // 更新线索状态
145 // TODO @min:新建一个 CrmClueDO 去更新。尽量规避直接用原本的对象去更新。因为这样万一并发更新,会存在覆盖的问题。 147 // TODO @min:新建一个 CrmClueDO 去更新。尽量规避直接用原本的对象去更新。因为这样万一并发更新,会存在覆盖的问题。
146 // TODO @puhui999:如果有跟进记录,需要一起转过去; 148 // TODO @puhui999:如果有跟进记录,需要一起转过去;