yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/dal/mysql/quotation/CrmSaleQuotationMapper.java
@@ -5,6 +5,7 @@ import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; import cn.iocoder.yudao.framework.mybatis.core.query.MPJLambdaWrapperX; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import cn.iocoder.yudao.module.crm.controller.admin.quotation.vo.CrmSaleQuotationPageReqVO; import cn.iocoder.yudao.module.crm.dal.dataobject.quotation.CrmSaleQuotationDO; import cn.iocoder.yudao.module.crm.enums.common.CrmBizTypeEnum; @@ -95,4 +96,17 @@ return selectCount(CrmSaleQuotationDO::getCustomerId, customerId); } /** * 清除报价单的合同关联(删除合同时调用) * * @param quotationId 报价单编号 */ default void clearContractReference(Long quotationId) { update(new LambdaUpdateWrapper<CrmSaleQuotationDO>() .eq(CrmSaleQuotationDO::getId, quotationId) .set(CrmSaleQuotationDO::getContractId, null) .set(CrmSaleQuotationDO::getStatus,0) .set(CrmSaleQuotationDO::getContractNo, null)); } } yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/service/contract/CrmContractServiceImpl.java
@@ -19,6 +19,8 @@ import cn.iocoder.yudao.module.crm.dal.dataobject.contract.CrmContractConfigDO; import cn.iocoder.yudao.module.crm.dal.dataobject.contract.CrmContractDO; import cn.iocoder.yudao.module.crm.dal.dataobject.contract.CrmContractProductDO; import cn.iocoder.yudao.module.crm.dal.dataobject.quotation.CrmSaleQuotationDO; import cn.iocoder.yudao.module.crm.dal.dataobject.quotation.CrmSaleQuotationProductDO; import cn.iocoder.yudao.module.crm.dal.mysql.contract.CrmContractMapper; import cn.iocoder.yudao.module.crm.dal.mysql.contract.CrmContractProductMapper; import cn.iocoder.yudao.module.crm.dal.redis.no.CrmNoRedisDAO; @@ -33,6 +35,7 @@ import cn.iocoder.yudao.module.crm.service.permission.CrmPermissionService; import cn.iocoder.yudao.module.crm.service.permission.bo.CrmPermissionCreateReqBO; import cn.iocoder.yudao.module.crm.service.permission.bo.CrmPermissionTransferReqBO; import cn.iocoder.yudao.module.crm.service.quotation.CrmSaleQuotationService; import cn.iocoder.yudao.module.crm.service.receivable.CrmReceivableService; import cn.iocoder.yudao.module.erp.api.sale.ErpSaleOrderApi; import cn.iocoder.yudao.module.erp.api.sale.dto.ErpSaleOrderCreateReqDTO; @@ -123,6 +126,9 @@ private ErpSaleOrderApi saleOrderApi; @Resource private MdmItemApi mdmItemApi; @Resource @Lazy // 延迟加载,避免循环依赖(quotation 内部引用了 contractService) private CrmSaleQuotationService crmSaleQuotationService; @Override @Transactional(rollbackFor = Exception.class) @@ -274,6 +280,11 @@ // 2.1 删除合同 contractMapper.deleteById(id); // 2.2 删除合同时,解除关联的报价单引用 CrmSaleQuotationDO quotation = crmSaleQuotationService.getByContractId(id); if (quotation != null) { crmSaleQuotationService.clearContractReference(quotation.getId()); } // 2.2 删除数据权限 crmPermissionService.deletePermission(CrmBizTypeEnum.CRM_CONTRACT.getType(), id); yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/service/quotation/CrmSaleQuotationService.java
@@ -97,4 +97,12 @@ */ Long convertToContract(Long id, Long userId); CrmSaleQuotationDO getByContractId(Long id); /** * 清除报价单的合同关联(删除合同时调用) * * @param quotationId 报价单编号 */ void clearContractReference(Long quotationId); } yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/service/quotation/CrmSaleQuotationServiceImpl.java
@@ -26,6 +26,7 @@ import cn.iocoder.yudao.module.system.api.storage.StorageAttachmentApi; import cn.iocoder.yudao.module.mdm.api.item.MdmItemApi; import cn.iocoder.yudao.module.mdm.api.item.dto.MdmItemRespDTO; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import jakarta.annotation.Resource; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; @@ -318,4 +319,14 @@ return contractId; } @Override public CrmSaleQuotationDO getByContractId(Long id) { return saleQuotationMapper.selectOne(new LambdaQueryWrapper<CrmSaleQuotationDO>().eq(CrmSaleQuotationDO::getContractId,id)); } @Override public void clearContractReference(Long quotationId) { saleQuotationMapper.clearContractReference(quotationId); } }