Commit d604e76d16ab1a05e5ca0aa33713100ba9027827

Authored by YunaiV
1 parent b0def8b5

✨ CRM:完善合同的跟进记录实现

yudao-module-crm/yudao-module-crm-api/src/main/java/cn/iocoder/yudao/module/crm/enums/LogRecordConstants.java
@@ -95,7 +95,6 @@ public interface LogRecordConstants { @@ -95,7 +95,6 @@ public interface LogRecordConstants {
95 String CRM_BUSINESS_FOLLOW_UP_SUCCESS = "商机跟进【{{#businessName}}】"; 95 String CRM_BUSINESS_FOLLOW_UP_SUCCESS = "商机跟进【{{#businessName}}】";
96 String CRM_BUSINESS_UPDATE_STATUS_SUB_TYPE = "更新商机状态"; 96 String CRM_BUSINESS_UPDATE_STATUS_SUB_TYPE = "更新商机状态";
97 String CRM_BUSINESS_UPDATE_STATUS_SUCCESS = "更新了商机【{{#businessName}}】的状态从【{{#oldStatusName}}】变更为了【{{#newStatusName}}】"; 97 String CRM_BUSINESS_UPDATE_STATUS_SUCCESS = "更新了商机【{{#businessName}}】的状态从【{{#oldStatusName}}】变更为了【{{#newStatusName}}】";
98 -// String CRM_BUSINESS_UPDATE_STATUS_SUCCESS = "阿巴阿巴";  
99 98
100 // ======================= CRM_CONTRACT 合同 ======================= 99 // ======================= CRM_CONTRACT 合同 =======================
101 100
@@ -110,6 +109,8 @@ public interface LogRecordConstants { @@ -110,6 +109,8 @@ public interface LogRecordConstants {
110 String CRM_CONTRACT_TRANSFER_SUCCESS = "将合同【{{#contract.name}}】的负责人从【{getAdminUserById{#contract.ownerUserId}}】变更为了【{getAdminUserById{#reqVO.newOwnerUserId}}】"; 109 String CRM_CONTRACT_TRANSFER_SUCCESS = "将合同【{{#contract.name}}】的负责人从【{getAdminUserById{#contract.ownerUserId}}】变更为了【{getAdminUserById{#reqVO.newOwnerUserId}}】";
111 String CRM_CONTRACT_SUBMIT_SUB_TYPE = "提交合同审批"; 110 String CRM_CONTRACT_SUBMIT_SUB_TYPE = "提交合同审批";
112 String CRM_CONTRACT_SUBMIT_SUCCESS = "提交合同【{{#contractName}}】审批成功"; 111 String CRM_CONTRACT_SUBMIT_SUCCESS = "提交合同【{{#contractName}}】审批成功";
  112 + String CRM_CONTRACT_FOLLOW_UP_SUB_TYPE = "合同跟进";
  113 + String CRM_CONTRACT_FOLLOW_UP_SUCCESS = "合同跟进【{{#contractName}}】";
113 114
114 // ======================= CRM_PRODUCT 产品 ======================= 115 // ======================= CRM_PRODUCT 产品 =======================
115 116
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/clue/CrmClueServiceImpl.java
@@ -19,7 +19,6 @@ import cn.iocoder.yudao.module.crm.service.customer.CrmCustomerService; @@ -19,7 +19,6 @@ import cn.iocoder.yudao.module.crm.service.customer.CrmCustomerService;
19 import cn.iocoder.yudao.module.crm.service.customer.bo.CrmCustomerCreateReqBO; 19 import cn.iocoder.yudao.module.crm.service.customer.bo.CrmCustomerCreateReqBO;
20 import cn.iocoder.yudao.module.crm.service.followup.CrmFollowUpRecordService; 20 import cn.iocoder.yudao.module.crm.service.followup.CrmFollowUpRecordService;
21 import cn.iocoder.yudao.module.crm.service.followup.bo.CrmFollowUpCreateReqBO; 21 import cn.iocoder.yudao.module.crm.service.followup.bo.CrmFollowUpCreateReqBO;
22 -import cn.iocoder.yudao.module.crm.service.followup.bo.CrmUpdateFollowUpReqBO;  
23 import cn.iocoder.yudao.module.crm.service.permission.CrmPermissionService; 22 import cn.iocoder.yudao.module.crm.service.permission.CrmPermissionService;
24 import cn.iocoder.yudao.module.crm.service.permission.bo.CrmPermissionCreateReqBO; 23 import cn.iocoder.yudao.module.crm.service.permission.bo.CrmPermissionCreateReqBO;
25 import cn.iocoder.yudao.module.crm.service.permission.bo.CrmPermissionTransferReqBO; 24 import cn.iocoder.yudao.module.crm.service.permission.bo.CrmPermissionTransferReqBO;
@@ -133,7 +132,6 @@ public class CrmClueServiceImpl implements CrmClueService { @@ -133,7 +132,6 @@ public class CrmClueServiceImpl implements CrmClueService {
133 .setContactLastTime(LocalDateTime.now()).setContactLastContent(contactLastContent)); 132 .setContactLastTime(LocalDateTime.now()).setContactLastContent(contactLastContent));
134 133
135 // 3. 记录操作日志上下文 134 // 3. 记录操作日志上下文
136 - LogRecordContext.putVariable(DiffParseFunction.OLD_OBJECT, BeanUtils.toBean(oldClue, CrmUpdateFollowUpReqBO.class));  
137 LogRecordContext.putVariable("clueName", oldClue.getName()); 135 LogRecordContext.putVariable("clueName", oldClue.getName());
138 } 136 }
139 137
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/contract/CrmContractService.java
@@ -8,9 +8,9 @@ import cn.iocoder.yudao.module.crm.controller.admin.contract.vo.CrmContractTrans @@ -8,9 +8,9 @@ import cn.iocoder.yudao.module.crm.controller.admin.contract.vo.CrmContractTrans
8 import cn.iocoder.yudao.module.crm.dal.dataobject.contract.CrmContractDO; 8 import cn.iocoder.yudao.module.crm.dal.dataobject.contract.CrmContractDO;
9 import cn.iocoder.yudao.module.crm.dal.dataobject.contract.CrmContractProductDO; 9 import cn.iocoder.yudao.module.crm.dal.dataobject.contract.CrmContractProductDO;
10 import cn.iocoder.yudao.module.crm.dal.dataobject.customer.CrmCustomerDO; 10 import cn.iocoder.yudao.module.crm.dal.dataobject.customer.CrmCustomerDO;
11 -import cn.iocoder.yudao.module.crm.service.followup.bo.CrmUpdateFollowUpReqBO;  
12 import jakarta.validation.Valid; 11 import jakarta.validation.Valid;
13 12
  13 +import java.time.LocalDateTime;
14 import java.util.Collection; 14 import java.util.Collection;
15 import java.util.List; 15 import java.util.List;
16 16
@@ -55,9 +55,11 @@ public interface CrmContractService { @@ -55,9 +55,11 @@ public interface CrmContractService {
55 /** 55 /**
56 * 更新合同相关的更进信息 56 * 更新合同相关的更进信息
57 * 57 *
58 - * @param contractUpdateFollowUpReqBO 信息 58 + * @param id 合同编号
  59 + * @param contactNextTime 下次联系时间
  60 + * @param contactLastContent 最后联系内容
59 */ 61 */
60 - void updateContractFollowUp(CrmUpdateFollowUpReqBO contractUpdateFollowUpReqBO); 62 + void updateContractFollowUp(Long id, LocalDateTime contactNextTime, String contactLastContent);
61 63
62 /** 64 /**
63 * 发起合同审批流程 65 * 发起合同审批流程
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/contract/CrmContractServiceImpl.java
@@ -26,7 +26,6 @@ import cn.iocoder.yudao.module.crm.framework.permission.core.annotations.CrmPerm @@ -26,7 +26,6 @@ import cn.iocoder.yudao.module.crm.framework.permission.core.annotations.CrmPerm
26 import cn.iocoder.yudao.module.crm.service.business.CrmBusinessService; 26 import cn.iocoder.yudao.module.crm.service.business.CrmBusinessService;
27 import cn.iocoder.yudao.module.crm.service.contact.CrmContactService; 27 import cn.iocoder.yudao.module.crm.service.contact.CrmContactService;
28 import cn.iocoder.yudao.module.crm.service.customer.CrmCustomerService; 28 import cn.iocoder.yudao.module.crm.service.customer.CrmCustomerService;
29 -import cn.iocoder.yudao.module.crm.service.followup.bo.CrmUpdateFollowUpReqBO;  
30 import cn.iocoder.yudao.module.crm.service.permission.CrmPermissionService; 29 import cn.iocoder.yudao.module.crm.service.permission.CrmPermissionService;
31 import cn.iocoder.yudao.module.crm.service.permission.bo.CrmPermissionCreateReqBO; 30 import cn.iocoder.yudao.module.crm.service.permission.bo.CrmPermissionCreateReqBO;
32 import cn.iocoder.yudao.module.crm.service.permission.bo.CrmPermissionTransferReqBO; 31 import cn.iocoder.yudao.module.crm.service.permission.bo.CrmPermissionTransferReqBO;
@@ -41,6 +40,7 @@ import org.springframework.transaction.annotation.Transactional; @@ -41,6 +40,7 @@ import org.springframework.transaction.annotation.Transactional;
41 import org.springframework.validation.annotation.Validated; 40 import org.springframework.validation.annotation.Validated;
42 41
43 import java.math.BigDecimal; 42 import java.math.BigDecimal;
  43 +import java.time.LocalDateTime;
44 import java.util.Collection; 44 import java.util.Collection;
45 import java.util.List; 45 import java.util.List;
46 46
@@ -253,8 +253,18 @@ public class CrmContractServiceImpl implements CrmContractService { @@ -253,8 +253,18 @@ public class CrmContractServiceImpl implements CrmContractService {
253 } 253 }
254 254
255 @Override 255 @Override
256 - public void updateContractFollowUp(CrmUpdateFollowUpReqBO contractUpdateFollowUpReqBO) {  
257 - contractMapper.updateById(BeanUtils.toBean(contractUpdateFollowUpReqBO, CrmContractDO.class).setId(contractUpdateFollowUpReqBO.getBizId())); 256 + @LogRecord(type = CRM_CONTRACT_TYPE, subType = CRM_CONTRACT_FOLLOW_UP_SUB_TYPE, bizNo = "{{#id}",
  257 + success = CRM_CONTRACT_FOLLOW_UP_SUCCESS)
  258 + @CrmPermission(bizType = CrmBizTypeEnum.CRM_CONTRACT, bizId = "#id", level = CrmPermissionLevelEnum.WRITE)
  259 + public void updateContractFollowUp(Long id, LocalDateTime contactNextTime, String contactLastContent) {
  260 + // 1. 校验存在
  261 + CrmContractDO contract = validateContractExists(id);
  262 +
  263 + // 2. 更新联系人的跟进信息
  264 + contractMapper.updateById(new CrmContractDO().setId(id).setContactLastTime(LocalDateTime.now()));
  265 +
  266 + // 3. 记录操作日志上下文
  267 + LogRecordContext.putVariable("contractName", contract.getName());
258 } 268 }
259 269
260 @Override 270 @Override
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/followup/CrmFollowUpRecordServiceImpl.java
@@ -17,14 +17,12 @@ import cn.iocoder.yudao.module.crm.service.contact.CrmContactService; @@ -17,14 +17,12 @@ import cn.iocoder.yudao.module.crm.service.contact.CrmContactService;
17 import cn.iocoder.yudao.module.crm.service.contract.CrmContractService; 17 import cn.iocoder.yudao.module.crm.service.contract.CrmContractService;
18 import cn.iocoder.yudao.module.crm.service.customer.CrmCustomerService; 18 import cn.iocoder.yudao.module.crm.service.customer.CrmCustomerService;
19 import cn.iocoder.yudao.module.crm.service.followup.bo.CrmFollowUpCreateReqBO; 19 import cn.iocoder.yudao.module.crm.service.followup.bo.CrmFollowUpCreateReqBO;
20 -import cn.iocoder.yudao.module.crm.service.followup.bo.CrmUpdateFollowUpReqBO;  
21 import cn.iocoder.yudao.module.crm.service.permission.CrmPermissionService; 20 import cn.iocoder.yudao.module.crm.service.permission.CrmPermissionService;
22 import jakarta.annotation.Resource; 21 import jakarta.annotation.Resource;
23 import org.springframework.context.annotation.Lazy; 22 import org.springframework.context.annotation.Lazy;
24 import org.springframework.stereotype.Service; 23 import org.springframework.stereotype.Service;
25 import org.springframework.validation.annotation.Validated; 24 import org.springframework.validation.annotation.Validated;
26 25
27 -import java.time.LocalDateTime;  
28 import java.util.Collection; 26 import java.util.Collection;
29 import java.util.List; 27 import java.util.List;
30 28
@@ -71,9 +69,6 @@ public class CrmFollowUpRecordServiceImpl implements CrmFollowUpRecordService { @@ -71,9 +69,6 @@ public class CrmFollowUpRecordServiceImpl implements CrmFollowUpRecordService {
71 crmFollowUpRecordMapper.insert(record); 69 crmFollowUpRecordMapper.insert(record);
72 70
73 // 2. 更新 bizId 对应的记录 71 // 2. 更新 bizId 对应的记录
74 - CrmUpdateFollowUpReqBO updateFollowUpReqBO = new CrmUpdateFollowUpReqBO().setBizId(record.getBizId())  
75 - .setContactLastTime(LocalDateTime.now())  
76 - .setContactNextTime(record.getNextTime()).setContactLastContent(record.getContent());  
77 if (ObjUtil.equal(CrmBizTypeEnum.CRM_BUSINESS.getType(), record.getBizType())) { // 更新商机跟进信息 72 if (ObjUtil.equal(CrmBizTypeEnum.CRM_BUSINESS.getType(), record.getBizType())) { // 更新商机跟进信息
78 businessService.updateBusinessFollowUp(record.getBizId(), record.getNextTime(), record.getContent()); 73 businessService.updateBusinessFollowUp(record.getBizId(), record.getNextTime(), record.getContent());
79 } 74 }
@@ -84,7 +79,7 @@ public class CrmFollowUpRecordServiceImpl implements CrmFollowUpRecordService { @@ -84,7 +79,7 @@ public class CrmFollowUpRecordServiceImpl implements CrmFollowUpRecordService {
84 contactService.updateContactFollowUp(record.getBizId(), record.getNextTime(), record.getContent()); 79 contactService.updateContactFollowUp(record.getBizId(), record.getNextTime(), record.getContent());
85 } 80 }
86 if (ObjUtil.equal(CrmBizTypeEnum.CRM_CONTRACT.getType(), record.getBizType())) { // 更新合同跟进信息 81 if (ObjUtil.equal(CrmBizTypeEnum.CRM_CONTRACT.getType(), record.getBizType())) { // 更新合同跟进信息
87 - contractService.updateContractFollowUp(updateFollowUpReqBO); 82 + contractService.updateContractFollowUp(record.getBizId(), record.getNextTime(), record.getContent());
88 } 83 }
89 if (ObjUtil.equal(CrmBizTypeEnum.CRM_CUSTOMER.getType(), record.getBizType())) { // 更新客户跟进信息 84 if (ObjUtil.equal(CrmBizTypeEnum.CRM_CUSTOMER.getType(), record.getBizType())) { // 更新客户跟进信息
90 customerService.updateCustomerFollowUp(record.getBizId(), record.getNextTime(), record.getContent()); 85 customerService.updateCustomerFollowUp(record.getBizId(), record.getNextTime(), record.getContent());
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/followup/bo/CrmUpdateFollowUpReqBO.java deleted
1 -package cn.iocoder.yudao.module.crm.service.followup.bo;  
2 -  
3 -import com.mzt.logapi.starter.annotation.DiffLogField;  
4 -import io.swagger.v3.oas.annotations.media.Schema;  
5 -import jakarta.validation.constraints.NotNull;  
6 -import lombok.Data;  
7 -  
8 -import java.time.LocalDateTime;  
9 -  
10 -/**  
11 - * 跟进信息 Update Req BO  
12 - *  
13 - * @author HUIHUI  
14 - */  
15 -@Data  
16 -public class CrmUpdateFollowUpReqBO {  
17 -  
18 - @Schema(description = "数据编号", example = "3167")  
19 - @NotNull(message = "数据编号不能为空")  
20 - private Long bizId;  
21 -  
22 - @Schema(description = "最后跟进时间")  
23 - @DiffLogField(name = "最后跟进时间")  
24 - private LocalDateTime contactLastTime;  
25 -  
26 - @Schema(description = "下次联系时间")  
27 - @DiffLogField(name = "下次联系时间")  
28 - private LocalDateTime contactNextTime;  
29 -  
30 - @Schema(description = "最后更进内容")  
31 - @DiffLogField(name = "最后更进内容")  
32 - private String contactLastContent;  
33 -  
34 -}