package com.jkcredit.invoice.mapper.customer;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.jkcredit.invoice.model.entity.customer.CustomerRec;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * 企业信息维护接口
 * @author mumuxigua
 */
@Repository
public interface CustomerRecMapper extends BaseMapper<CustomerRec> {

    /**
     * 根据id删除企业备案信息
     * @param id
     * @return
     */
    int deleteByPrimaryKey(Integer id);

    /**
     * 插入企业备案信息
     * @param record
     * @return
     */
    @Override
    int insert(CustomerRec record);

    /**
     * 更新企业备案信息
     * @param customerRec
     * @return
     */
    int updateByCompany(CustomerRec customerRec);

    /**
     * 按照条件插入企业备案信息
     * @param record
     * @return
     */
    int insertSelective(CustomerRec record);

    /**
     * 按照id查询企业备案信息
     * @param id
     * @return
     */
    CustomerRec selectByPrimaryKey(String id);

    /**
     * 按照id查询企业备案信息 包含base64流
     * @param id
     * @return
     */
    CustomerRec selectByPrimaryKeyHasBase64(Integer id);

    /**
     * 按照id查询企业备案信息 不包含base64流
     * @param id
     * @return
     */
    CustomerRec selectByPrimaryKeyHasNoLocalBase64(Integer id);

    /**
     * 根据customerName 查询企业备案列表 返回成功的
     * @param customerName
     * @return
     */
    List<CustomerRec> selectByCustomerName(String customerName);

    /**
     * 根据customerName 查询企业备案列表 返回所有
     * @param customerName
     * @return
     */
    List<CustomerRec> selectByCustomerNameAll(String customerName);

    /**
     * 跟前客户名称模糊查询企业备案列表
     * @param record
     * @return
     */
    List<CustomerRec> selectByCustomerNameCpAll(@Param("customerRec") CustomerRec record);

    /**
     * 根据客户名称和公司名称 查询企业备案信息
     * @param record
     * @return
     */
    CustomerRec selectByCustomerNameAndCompany(CustomerRec record);

    /**
     * 根据客户名称和企业联系人 查询企业备案信息
     * @param record
     * @return
     */
    CustomerRec selectByCustomerNameAndCompanyConcat(CustomerRec record);

    /**
     * 根据客户名称 和企业税号查询 企业备案信息，只查询成功的
     * @param record
     * @return
     */
    CustomerRec selectByCustomerNameAndCompanyReference(CustomerRec record);

    /**
     * 根据客户名称 和企业税号查询 企业备案信息，查询所有
     * @param record
     * @return
     */
    CustomerRec selectByCustomerNameAndCompanyReferenceAll(CustomerRec record);

    /**
     * 根据企业税号查询企业备案列表
     * @param companyReference
     * @return
     */
    List<CustomerRec> selectByCompanyReference(String companyReference);

    /**
     * 根据公司名称查询企业备案列表
     * @param companyName
     * @return
     */
    List<CustomerRec> selectByCompanyName(String companyName);

    /**
     * 根据客户名称和 企业编码查询唯一数据
     * @param record
     * @return
     */
    CustomerRec selectByCustomerNameAndCompanyNum(CustomerRec record);


    /**
     * 根据客户名称和 企业编码查询唯一税号
     * @param record
     * @return
     */
    int selectContractStatusByCustomerNameAndCompanyNum(CustomerRec record);

    /**
     * 根据企业编码查询企业备案列表
     * @param record
     * @return
     */
    List<CustomerRec> selectByCompanyNum(CustomerRec record);

    /**
     * 更新企业备案信息 按照条件
     *
     * @param record
     * @return
     */
    int updateByPrimaryKeySelective(CustomerRec record);

    /**
     * 更新企业备案邮箱 按照条件
     *
     * @param record
     * @return
     */
    int updateInvoiceMail(CustomerRec record);

    /**
     * 按照id更新企业备案信息
     *
     * @param record
     * @return
     */
    int updateByPrimaryKeySelectiveUpload(CustomerRec record);

    /**
     * 更新企业备案信息
     * @param record
     * @return
     */
    int updateByPrimaryKey(CustomerRec record);

    int updatePromiseInfo(CustomerRec record);

    /**
     * 分页查询下企业备案信息
     * @param page
     * @param customerRec
     * @return
     */
    IPage<List<CustomerRec>> selectAllByPage(Page page, @Param("customerRec") CustomerRec customerRec);


    /**
     * 分页查询企业备案信息，结束时间不为空
     * @param page
     * @param customerRec
     * @return
     */
    IPage<List<CustomerRec>> selectAllByPageWarning(Page page, @Param("customerRec") CustomerRec customerRec);

    /**
     * 查询企业备案信息 导出使用
     * @param customerRec
     * @return
     */
    List<CustomerRec> selectAllByPageExport(@Param("customerRec") CustomerRec customerRec);

    /**
     * 查询所有无车 企业的企业备案信息
     * @return
     */
    List<CustomerRec> selectAllNoCarComapany();

    /**
     * 根据id和协议上传状态更新企业备案信息
     *
     * @param customerRec
     * @return
     */
    int updateContractStatus(CustomerRec customerRec);

    /**
     * 查询有效的客户备案信息
     *
     * @param
     * @return java.util.List<com.jkcredit.invoice.model.entity.customer.CustomerRec>
     * @throws
     * @createDate 2024/4/4 上午11:21
     * @author mashengyi
     */
    List<CustomerRec> selectAllCustomeRecQueryList();
}