云
5 天以前 a82d847bbb39e2417d4c9773ebc4fc51fdb0b8fc
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;
@@ -12,13 +13,15 @@
import cn.iocoder.yudao.module.crm.enums.quotation.CrmSaleQuotationStatusEnum;
import cn.iocoder.yudao.module.crm.util.CrmPermissionUtils;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
import java.util.Collection;
import java.util.List;
/**
 * CRM 销售报价单 Mapper
 *
 * @author 芋道源码
 * @author 超级管理员
 */
@Mapper
public interface CrmSaleQuotationMapper extends BaseMapperX<CrmSaleQuotationDO> {
@@ -26,6 +29,13 @@
    default CrmSaleQuotationDO selectByNo(String no) {
        return selectOne(CrmSaleQuotationDO::getNo, no);
    }
    /**
     * 按报价单号查询记录(不过滤逻辑删除,含已删除行)
     * 用于自定义单号的唯一性预校验:uk_no 唯一索引覆盖已删除行,需一起判断才能给出可读提示
     */
    @Select("SELECT * FROM crm_sale_quotation WHERE no = #{no} LIMIT 1")
    CrmSaleQuotationDO selectAnyByNo(String no);
    default PageResult<CrmSaleQuotationDO> selectPage(CrmSaleQuotationPageReqVO pageReqVO, Long userId) {
        return selectPage(pageReqVO, userId, null);
@@ -50,6 +60,7 @@
                .eqIfPresent(CrmSaleQuotationDO::getCustomerId, pageReqVO.getCustomerId())
                .eqIfPresent(CrmSaleQuotationDO::getBusinessId, pageReqVO.getBusinessId())
                .eqIfPresent(CrmSaleQuotationDO::getStatus, pageReqVO.getStatus())
                .likeIfPresent(CrmSaleQuotationDO::getBidBondNo, pageReqVO.getBidBondNo())
                .orderByDesc(CrmSaleQuotationDO::getId);
        // 客户权限过滤
@@ -83,6 +94,14 @@
        return selectList(CrmSaleQuotationDO::getCustomerId, customerId);
    }
    default List<CrmSaleQuotationDO> selectListByCustomerIdAndStatuses(Long customerId,
                                                                      Collection<Integer> statuses) {
        return selectList(new LambdaQueryWrapperX<CrmSaleQuotationDO>()
                .eq(CrmSaleQuotationDO::getCustomerId, customerId)
                .in(CrmSaleQuotationDO::getStatus, statuses)
                .orderByDesc(CrmSaleQuotationDO::getId));
    }
    default List<CrmSaleQuotationDO> selectListByBusinessId(Long businessId) {
        return selectList(CrmSaleQuotationDO::getBusinessId, businessId);
    }
@@ -95,4 +114,37 @@
        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));
    }
    /**
     * 绑定投标;bidBondId 为 null 时表示解绑
     */
    default void bindBidBond(Long quotationId, Long bidBondId, String bidBondNo) {
        update(new LambdaUpdateWrapper<CrmSaleQuotationDO>()
                .eq(CrmSaleQuotationDO::getId, quotationId)
                .set(CrmSaleQuotationDO::getBidBondId, bidBondId)
                .set(CrmSaleQuotationDO::getBidBondNo, bidBondNo));
    }
    /**
     * 重新报价:重置为草稿并清空流程实例
     */
    default void resetToDraft(Long quotationId) {
        update(new LambdaUpdateWrapper<CrmSaleQuotationDO>()
                .eq(CrmSaleQuotationDO::getId, quotationId)
                .set(CrmSaleQuotationDO::getStatus, CrmSaleQuotationStatusEnum.DRAFT.getStatus())
                .set(CrmSaleQuotationDO::getProcessInstanceId, null));
    }
}