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.CustomerCarRec;
import com.jkcredit.invoice.model.vo.CompanyVo;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

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

    /**
     * 客户注册信息新增
     *
     * @param record
     * @return
     */
    @Override
    int insert(CustomerCarRec record);

    /**
     * 客户注册信息按条件新增
     *
     * @param record
     * @return
     */
    int insertSelective(CustomerCarRec record);

    /**
     * 根据Appkey查询客户注册信息列表
     *
     * @param customerName
     * @return
     */
    List<CustomerCarRec> selectByCustName(String customerName);

    /**
     * 根据ect卡号查询客户列表
     *
     * @param etcNum
     * @return
     */
    CustomerCarRec selectByEtc(String etcNum);

    /**
     * 根据ect卡号查询客户列表 （防止事物问题）
     *
     * @param etcNum
     * @return
     */
    CustomerCarRec selectByEtcForLock(String etcNum);

    /**
     * 根据车牌号查询无车客户列表
     *
     * @param carNum
     * @return
     */
    List<CustomerCarRec> selectByCarNum(String carNum);

    /**
     * 根据车牌号查询自有车客户列表 只查询注册成功客户
     *
     * @param carNums
     * @return
     */
    List<CustomerCarRec> selectBySelfCarNum(@Param("carNums") String [] carNums);

    /**
     * 根据车牌号查询自有车客户列表
     *
     * @param carNum
     * @return
     */
    List<CustomerCarRec> selectAllEtcBySelfCarNum(String carNum);

    /**
     * 更新自有车客户信息
     *
     * @param record
     * @return
     */
    int updateByPrimaryKeySelective(CustomerCarRec record);

    /**
     * 更新客户信息
     *
     * @param record
     * @return
     */
    int updateByPrimaryKey(CustomerCarRec record);

    /**
     * 根据etc卡号更新无车客户信息
     *
     * @param record
     * @return
     */
    int updateEtcByPrimaryKeySelective(CustomerCarRec record);

    /**
     * 更新客户信息
     *
     * @param record
     * @return
     */
    int updateEtcByPrimaryKey(CustomerCarRec record);

    /**
     * 根据etc卡号更新成功过的客户信息
     *
     * @param record
     * @return
     */
    int updateWaitEtcStatus(CustomerCarRec record);

    /**
     * 查询所有客户列表
     *
     * @return
     */
    List<CustomerCarRec> selectAllBindEtcNoGetInvoice();

    /**
     * 客户列表分页查询
     *
     * @param page
     * @param customerCarRec
     * @return
     */
    IPage<List<CustomerCarRec>> selectAllByPage(Page page, @Param("query") CustomerCarRec customerCarRec);

    /**
     * 根据企业名称更新客户列表
     *
     * @param companyVo
     * @return
     */
    int upDateCompanySelf(CompanyVo companyVo);

    /**
     * 根据企业编码更新客户列表
     *
     * @param companyVo
     * @return
     */
    int upDateCompanyNo(CompanyVo companyVo);

    /**
     * 根据企业名称查询所有自有车企业列表
     *
     * @param companyName
     * @return
     */
    List<CustomerCarRec> selectAllEtcByCompany(String companyName);

    /**
     * 根据etc卡号删除客户列表
     *
     * @param etcNum
     */
    void deleteByEtcCard(String etcNum);
}