package com.ruoyi.project.business.mapper;

import java.time.LocalDateTime;
import java.util.List;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.project.business.domain.TcAccount;
import com.ruoyi.project.business.domain.TcAccountForRelated;
import com.ruoyi.project.business.domain.vo.account.AgentAddAccount;
import com.ruoyi.project.business.domain.vo.account.AgentAddProject;
import com.ruoyi.project.business.domain.vo.account.GetAccountByAgentDto;
import com.ruoyi.project.business.domain.vo.selectParam.AccountParam;
import org.apache.ibatis.annotations.Param;

/**
 * 客户管理Mapper接口
 *
 * @author ruoyi
 * @date 2024-04-10
 */
public interface TcAccountMapper extends BaseMapper<TcAccount> {

    /**
     * 查询客户管理
     *
     * @param accountId 客户管理主键
     * @return 客户管理
     */
    public TcAccount selectTcAccountByAccountId(Long accountId);

    /**
     * 查询关联客户
     *
     * @param loginId 用户ID
     * @return 客户管理集合
     */
    public List<TcAccountForRelated> selectAccountListByLoginId(Long loginId);
    public List<TcAccountForRelated> selectAccountListByAccountId(TcAccount tcAccount);
    public List<TcAccountForRelated> selectAccountListByQuery(TcAccount tcAccount);

    /**
     * 查询客户管理列表
     *
     * @param tcAccount 客户管理
     * @return 客户管理集合
     */
    public List<TcAccount> selectTcAccountList(AccountParam tcAccount);

    public List<AgentAddAccount> selectAgentAddAccount(AccountParam tcAccount);

    public List<AgentAddProject> selectAgentAddProject(AccountParam tcAccount);

    public List<TcAccount> selectTcAccountListExport(AccountParam tcAccount);

    /**
     * 新增客户管理
     * 
     * @param tcAccount 客户管理
     * @return 结果
     */
    public int insertTcAccount(TcAccount tcAccount);

    /**
     * 修改客户管理
     * 
     * @param tcAccount 客户管理
     * @return 结果
     */
    public int updateTcAccount(TcAccount tcAccount);

    /**
     * 删除客户管理
     * 
     * @param accountId 客户管理主键
     * @return 结果
     */
    public int deleteTcAccountByAccountId(Long accountId);

    /**
     * 批量删除客户管理
     * 
     * @param accountIds 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteTcAccountByAccountIds(Long[] accountIds);

    /**
     * 根据客户名称查询客户数量
     *
     * @param accountName 客户名称
     * @param permissionChar 权限字符
     * @param accountId 客户id
     * @return 客户数量
     */
    int selectCountByAccountName(String accountName, String permissionChar, Long accountId);

    /**
     * 查询简单属性客户列表
     *
     */
    List<TcAccount> selectSimpleByCreateTime(@Param("startDate") LocalDateTime startDate, @Param("endDate") LocalDateTime endDate, @Param("permissionChar") String permissionCharSea);

    int batchInsertTcAccount(List<TcAccount> tcAccountList);

    int selectCountByCountryIds(Long[] countryIds);

    int selectCountByAreaIds(Long[] areaIds);

    List<TcAccount> selectByPermissionChar(String permissionCharIns);

    List<TcAccount> listRemote(String query, String permissionChar, Long userId);

    Integer existUserByAgentIds(Long[] agentIds);

    List<Long> selectCountriesByCurUser(String permissionCharIns);

    List<GetAccountByAgentDto> getAccountByAgent(@Param("ownerAgent") Long ownerAgent);

    List<Long> selectAreasByCurUser(String permissionCharIns);

    List<TcAccount> listByAccountNameList(@Param("accountNameList") List<String> accountNameList,
        @Param("permissionChar") String permissionChar);
}
