package com.ruoyi.cc.mapper;

import java.util.List;
import java.util.Set;

import com.ruoyi.cc.domain.CcExtNum;
import org.apache.ibatis.annotations.Param;

/**
 * 分机信息Mapper接口
 * 
 * @author ruoyi
 * @date 2024-12-22
 */
public interface CcExtNumMapper 
{
    /**
     * 查询分机信息
     * 
     * @param extId 分机信息主键
     * @return 分机信息
     */
    public CcExtNum selectCcExtNumByExtId(Long extId);

    /**
     * 查询分机信息列表
     * 
     * @param ccExtNum 分机信息
     * @return 分机信息集合
     */
    public List<CcExtNum> selectCcExtNumList(CcExtNum ccExtNum);

    /**
     * 新增分机信息
     * 
     * @param ccExtNum 分机信息
     * @return 结果
     */
    public int insertCcExtNum(CcExtNum ccExtNum);

    /**
     * 修改分机信息
     * 
     * @param ccExtNum 分机信息
     * @return 结果
     */
    public int updateCcExtNum(CcExtNum ccExtNum);

    /**
     * 删除分机信息
     * 
     * @param extId 分机信息主键
     * @return 结果
     */
    public int deleteCcExtNumByExtId(Long extId);

    /**
     * 批量删除分机信息
     * 
     * @param extIds 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteCcExtNumByExtIds(String[] extIds);

    /**
     * 获取未分配的分机
     */
    List<CcExtNum> selectUnBindCcExtNumList();

    int cleanCcExtNumByUserCode(String loginName);

    int updateCcExtNumByUserCode(CcExtNum extNum);

    List<CcExtNum> selectUnBindCcExtNumListPage(CcExtNum ccExtNum);

    int updateCompanyBindExtNum(CcExtNum extNum);

    int companyUnbindExtNum(List<String> userCodeList);

    /**
     * 批量新增分机信息
     * 
     * @param extNumList 分机信息列表
     * @return 结果
     */
    int batchInsertCcExtNum(List<CcExtNum> extNumList);

    /**
     * 查询大于指定值的所有分机号（用于批量生成分机号时优化性能）
     * 
     * @param minExtNum 最小分机号（不包含）
     * @return 分机号集合
     */
    List<Long> selectExtNumsGreaterThan(Long minExtNum);

    /**
     * 查询当前最大的分机号
     * 
     * @return 最大分机号，如果没有数据则返回null
     */
    Long selectMaxExtNum();

    int companyBatchUnbindSipExt(@Param("extNums") Set<Long> extNums);
    /**
     * 销售归还公司分机
     */
    int updateUserCodeByLoginName(@Param("companyName") String companyName,@Param("loginName") String loginName);

    /**
     * 根据分机号批量更新绑定工号
     *
     * @param list 分机号与工号集合
     * @return 结果
     */
    int batchUpdateUserCodeByExtNum(@Param("list") List<CcExtNum> list);

    CcExtNum selectCcExtNumByUserCodeTwo(@Param("username") String username);
}
