Commit d604e76d16ab1a05e5ca0aa33713100ba9027827
1 parent
b0def8b5
✨ CRM:完善合同的跟进记录实现
Showing
6 changed files
with
21 additions
and
49 deletions
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 | -} |