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 | 95 | String CRM_BUSINESS_FOLLOW_UP_SUCCESS = "商机跟进【{{#businessName}}】"; |
| 96 | 96 | String CRM_BUSINESS_UPDATE_STATUS_SUB_TYPE = "更新商机状态"; |
| 97 | 97 | String CRM_BUSINESS_UPDATE_STATUS_SUCCESS = "更新了商机【{{#businessName}}】的状态从【{{#oldStatusName}}】变更为了【{{#newStatusName}}】"; |
| 98 | -// String CRM_BUSINESS_UPDATE_STATUS_SUCCESS = "阿巴阿巴"; | |
| 99 | 98 | |
| 100 | 99 | // ======================= CRM_CONTRACT 合同 ======================= |
| 101 | 100 | |
| ... | ... | @@ -110,6 +109,8 @@ public interface LogRecordConstants { |
| 110 | 109 | String CRM_CONTRACT_TRANSFER_SUCCESS = "将合同【{{#contract.name}}】的负责人从【{getAdminUserById{#contract.ownerUserId}}】变更为了【{getAdminUserById{#reqVO.newOwnerUserId}}】"; |
| 111 | 110 | String CRM_CONTRACT_SUBMIT_SUB_TYPE = "提交合同审批"; |
| 112 | 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 | 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 | 19 | import cn.iocoder.yudao.module.crm.service.customer.bo.CrmCustomerCreateReqBO; |
| 20 | 20 | import cn.iocoder.yudao.module.crm.service.followup.CrmFollowUpRecordService; |
| 21 | 21 | import cn.iocoder.yudao.module.crm.service.followup.bo.CrmFollowUpCreateReqBO; |
| 22 | -import cn.iocoder.yudao.module.crm.service.followup.bo.CrmUpdateFollowUpReqBO; | |
| 23 | 22 | import cn.iocoder.yudao.module.crm.service.permission.CrmPermissionService; |
| 24 | 23 | import cn.iocoder.yudao.module.crm.service.permission.bo.CrmPermissionCreateReqBO; |
| 25 | 24 | import cn.iocoder.yudao.module.crm.service.permission.bo.CrmPermissionTransferReqBO; |
| ... | ... | @@ -133,7 +132,6 @@ public class CrmClueServiceImpl implements CrmClueService { |
| 133 | 132 | .setContactLastTime(LocalDateTime.now()).setContactLastContent(contactLastContent)); |
| 134 | 133 | |
| 135 | 134 | // 3. 记录操作日志上下文 |
| 136 | - LogRecordContext.putVariable(DiffParseFunction.OLD_OBJECT, BeanUtils.toBean(oldClue, CrmUpdateFollowUpReqBO.class)); | |
| 137 | 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 | 8 | import cn.iocoder.yudao.module.crm.dal.dataobject.contract.CrmContractDO; |
| 9 | 9 | import cn.iocoder.yudao.module.crm.dal.dataobject.contract.CrmContractProductDO; |
| 10 | 10 | import cn.iocoder.yudao.module.crm.dal.dataobject.customer.CrmCustomerDO; |
| 11 | -import cn.iocoder.yudao.module.crm.service.followup.bo.CrmUpdateFollowUpReqBO; | |
| 12 | 11 | import jakarta.validation.Valid; |
| 13 | 12 | |
| 13 | +import java.time.LocalDateTime; | |
| 14 | 14 | import java.util.Collection; |
| 15 | 15 | import java.util.List; |
| 16 | 16 | |
| ... | ... | @@ -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 | 26 | import cn.iocoder.yudao.module.crm.service.business.CrmBusinessService; |
| 27 | 27 | import cn.iocoder.yudao.module.crm.service.contact.CrmContactService; |
| 28 | 28 | import cn.iocoder.yudao.module.crm.service.customer.CrmCustomerService; |
| 29 | -import cn.iocoder.yudao.module.crm.service.followup.bo.CrmUpdateFollowUpReqBO; | |
| 30 | 29 | import cn.iocoder.yudao.module.crm.service.permission.CrmPermissionService; |
| 31 | 30 | import cn.iocoder.yudao.module.crm.service.permission.bo.CrmPermissionCreateReqBO; |
| 32 | 31 | import cn.iocoder.yudao.module.crm.service.permission.bo.CrmPermissionTransferReqBO; |
| ... | ... | @@ -41,6 +40,7 @@ import org.springframework.transaction.annotation.Transactional; |
| 41 | 40 | import org.springframework.validation.annotation.Validated; |
| 42 | 41 | |
| 43 | 42 | import java.math.BigDecimal; |
| 43 | +import java.time.LocalDateTime; | |
| 44 | 44 | import java.util.Collection; |
| 45 | 45 | import java.util.List; |
| 46 | 46 | |
| ... | ... | @@ -253,8 +253,18 @@ public class CrmContractServiceImpl implements CrmContractService { |
| 253 | 253 | } |
| 254 | 254 | |
| 255 | 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 | 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 | 17 | import cn.iocoder.yudao.module.crm.service.contract.CrmContractService; |
| 18 | 18 | import cn.iocoder.yudao.module.crm.service.customer.CrmCustomerService; |
| 19 | 19 | import cn.iocoder.yudao.module.crm.service.followup.bo.CrmFollowUpCreateReqBO; |
| 20 | -import cn.iocoder.yudao.module.crm.service.followup.bo.CrmUpdateFollowUpReqBO; | |
| 21 | 20 | import cn.iocoder.yudao.module.crm.service.permission.CrmPermissionService; |
| 22 | 21 | import jakarta.annotation.Resource; |
| 23 | 22 | import org.springframework.context.annotation.Lazy; |
| 24 | 23 | import org.springframework.stereotype.Service; |
| 25 | 24 | import org.springframework.validation.annotation.Validated; |
| 26 | 25 | |
| 27 | -import java.time.LocalDateTime; | |
| 28 | 26 | import java.util.Collection; |
| 29 | 27 | import java.util.List; |
| 30 | 28 | |
| ... | ... | @@ -71,9 +69,6 @@ public class CrmFollowUpRecordServiceImpl implements CrmFollowUpRecordService { |
| 71 | 69 | crmFollowUpRecordMapper.insert(record); |
| 72 | 70 | |
| 73 | 71 | // 2. 更新 bizId 对应的记录 |
| 74 | - CrmUpdateFollowUpReqBO updateFollowUpReqBO = new CrmUpdateFollowUpReqBO().setBizId(record.getBizId()) | |
| 75 | - .setContactLastTime(LocalDateTime.now()) | |
| 76 | - .setContactNextTime(record.getNextTime()).setContactLastContent(record.getContent()); | |
| 77 | 72 | if (ObjUtil.equal(CrmBizTypeEnum.CRM_BUSINESS.getType(), record.getBizType())) { // 更新商机跟进信息 |
| 78 | 73 | businessService.updateBusinessFollowUp(record.getBizId(), record.getNextTime(), record.getContent()); |
| 79 | 74 | } |
| ... | ... | @@ -84,7 +79,7 @@ public class CrmFollowUpRecordServiceImpl implements CrmFollowUpRecordService { |
| 84 | 79 | contactService.updateContactFollowUp(record.getBizId(), record.getNextTime(), record.getContent()); |
| 85 | 80 | } |
| 86 | 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 | 84 | if (ObjUtil.equal(CrmBizTypeEnum.CRM_CUSTOMER.getType(), record.getBizType())) { // 更新客户跟进信息 |
| 90 | 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 | -} |