package com.ruoyi.ibs.list.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.ibs.customerselect.domain.CustBaseInfo;
import com.ruoyi.ibs.customerselect.domain.CustInfoDeleteFromAnchor;
import com.ruoyi.ibs.customerselect.domain.CustInfoUpdateFromAnchor;
import com.ruoyi.ibs.customerselect.domain.CustTagDTO;
import com.ruoyi.ibs.grid.domain.dto.CustManageInfo;
import com.ruoyi.ibs.grid.domain.dto.CustRetailAndBusiness;
import com.ruoyi.ibs.list.domain.*;
import org.apache.ibatis.annotations.CacheNamespace;
import org.apache.ibatis.annotations.Param;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 对私客户信息Mapper接口
 * 
 * @author ruoyi
 * @date 2024-09-19
 */
@CacheNamespace
public interface CustInfoRetailMapper extends BaseMapper<CustInfoRetail>
{
    /**
     * 查询对私客户信息
     * 
     * @param id 对私客户信息主键
     * @return 对私客户信息
     */
    public CustInfoRetail selectCustInfoRetailById(Long id);

    /**
     * 查询对私客户信息
     *
     * @param id 对私客户信息主键
     * @return 对私客户信息
     */
    public CustInfoRetail selectCustInfoRetailBycustIdc(@Param("custIdc") String custIdc);


    /**
     * 查询对私客户信息列表
     * 
     * @param custInfoRetail 对私客户信息
     * @return 对私客户信息集合
     */
    public List<CustInfoRetail> selectCustInfoRetailList(CustInfoRetail custInfoRetail);
    /**
     * 查询对私客户信息列表
     *
     * @param keyword 关键词
     * @return 对私客户信息集合
     */
    public List<CustInfoRetail> selectCustInfoRetailListByKeyword(@Param("keyword") String keyword,@Param("start")Long start,@Param("size")Long size);

    /**
     * 支行管理员查询对私客户信息列表
     *
     * @param keyword 关键词
     * @return 对私客户信息集合
     */
    public List<CustInfoRetail> selectCustInfoRetailListByKeywordBranchAndManager(@Param("keyword") String keyword,@Param("deptId")Long deptId,@Param("outletsId")Long outletsId,@Param("userId")Long user,@Param("opsDept") String opsDept,@Param("start")Long start,@Param("size")Long size);


    /**
     * 新增对私客户信息
     * 
     * @param custInfoRetail 对私客户信息
     * @return 结果
     */
    public int insertCustInfoRetail(CustInfoRetail custInfoRetail);

    /**
     * 修改对私客户信息
     * 
     * @param custInfoRetail 对私客户信息
     * @return 结果
     */
    public int updateCustInfoRetail(CustInfoRetail custInfoRetail);

    public int updateCustInfoRetailLabel(CustInfoRetail custInfoRetail);//修改标签

    /**
     * 删除对私客户信息
     * 
     * @param id 对私客户信息主键
     * @return 结果
     */
    public int deleteCustInfoRetailById(Long id);

    /**
     * 批量删除对私客户信息
     * 
     * @param ids 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteCustInfoRetailByIds(Long[] ids);

    public CustInfoRetail selectCustInfoRetailByCustId(String custId);

    public CustInfoRetail selectCustInfoRetailByCustIdc(String custIdc);


        /**
         * 查询企业客户基本信息列表
         *
         * @param sysCustomerBasedata 企业客户基本信息
         * @return 客户基本信息集合
         */
    public List<CustInfoRetail> selectMyCustInfoRetailList(CustBaseInfo sysCustomerBasedata);

    public List<CustInfoRetail> selectMyCustInfoRetailListHead(CustBaseInfo sysCustomerBasedata);

    public List<CustInfoRetail> selectMyCustInfoRetailListOps(CustBaseInfo sysCustomerBasedata);

        /**
         * 使用行政区划查询客户信息列表
         *
         * @param custManageInfo 企业客户基本信息
         * @return 客户基本信息集合
         */
    public List<CustInfoRetail> selectCustInfoRetailByAdminList(CustManageInfo custManageInfo);

    /**
     * 使用行政区划查询未分配客户信息列表
     *
     * @param custManageInfo 企业客户基本信息
     * @return 客户基本信息集合
     */
    public List<CustInfoRetail> selectunDisRetailByAdminList(CustManageInfo custManageInfo);

    /**
     * 使用查询虚拟网格客户信息列表
     *
     * @param custManageInfo 企业客户基本信息
     * @return 客户基本信息集合
     */
    public List<CustInfoRetail> selectCustInfoRetailByVirtualList(CustManageInfo custManageInfo);

    /**
     * 使用查询虚拟网格未分配客户信息列表
     *
     * @param custManageInfo 企业客户基本信息
     * @return 客户基本信息集合
     */
    public List<CustInfoRetail> selectunDisRetailByVirtualList(CustManageInfo custManageInfo);

        /**
         * 使用行政区划查询客户数量
         *
         * @param gridId 企业客户基本信息
         * @return 客户基本信息集合
         */
    public Long selectCustNumByAdmin(@Param("gridId")Long gridId, @Param("userDept")Long userDept);


        /**
         * 使用机构id查询客户数量
         *
         * @param headDeptId 企业客户基本信息
         * @return 客户基本信息集合
         */
    public Long getRetailNumByDeptId(Long headDeptId);

    /**
     * 使用经理id查询客户数量
     *
     * @param UserId 企业客户基本信息
     * @return 客户基本信息集合
     */
    public Long getRetailNumByUserId(String UserId);

    /**
     * 使用行政区划查询对公对私客户信息列表
     *
     * @param custManageInfo 企业客户基本信息
     * @return 客户基本信息集合
     */
    public List<CustRetailAndBusiness> selectunDisByAdminList(CustManageInfo custManageInfo);

    /**
     * 使用行政区划查询对公对私未分配客户信息列表
     *
     * @param custManageInfo 企业客户基本信息
     * @return 客户基本信息集合
     */
    public List<CustRetailAndBusiness> selectCustInfoByAdminList(CustManageInfo custManageInfo);

    /**
     * 使用证件号查询客户数量
     *
     * @param LegalId 企业客户基本信息
     * @return 客户基本信息集合
     */
    public Long getRetailNumByLegalId(String LegalId);

    /**
     * 锚点更新客户信息
     *
     * @param custInfoUpdateFromAnchor 管户信息
     * @return 结果
     */
    public int updateRetailByAnchor(CustInfoUpdateFromAnchor custInfoUpdateFromAnchor);

    /**
     * 锚点新增客户信息
     *
     * @param custInfoUpdateFromAnchor 客户信息
     * @return 结果
     */
    public int insertRetailByAnchor(CustInfoUpdateFromAnchor custInfoUpdateFromAnchor);

    /**
     * 锚点删除客户信息
     *
     * @param custInfoDeleteFromAnchor 客户信息
     * @return 结果
     */
    public int deleteRetailByAnchor(CustInfoDeleteFromAnchor custInfoDeleteFromAnchor);

    /**
     * 根据客户号以及归属机构，归属柜员号，查询客户经理昵称
     *
     * @param custManageInfo 企业客户基本信息
     * @return 客户基本信息集合
     */
    public List<String> selectNickName(@Param("custId") String custId,@Param("deptId")Long deptId,@Param("userName")String userName);

    public List<GridInfo> selectGridInfo(@Param("custId") String custId, @Param("deptId")Long deptId, @Param("userName")String userName);

    /**
     * 使用客户号查询客户证件号
     *
     * @param custId 企业客户基本信息
     * @return 客户基本信息集合
     */
    public String getRetailIdcByCustId(String custId);

    /**
     * 使用查询行政网格客户信息列表
     *
     * @param custManageInfo 企业客户基本信息
     * @return 客户基本信息集合
     */
    public List<CustManageInfo> selectRetailInfoByManage(CustManageInfo custManageInfo);

    Long countByCode(@Param("code") String code, @Param("deptCode") String deptCode);

    List<String> selectCmpmNickName(@Param("custId") String custId,@Param("deptId")Long deptId,@Param("userName")String userName);

    List<CmpmUserList> selectCmpmNickName2(@Param("custId") String custId,@Param("deptId")Long deptId,@Param("userName")String userName);

    /**
     * 根据客户号查询五级行政区名称
     *
     * @param id 对私客户信息主键
     * @return 对私客户信息
     */
    public String selectCommunityBycustId(String custId);

    public int insertCustomersToRetailByCustId(List<SysGroupCustomer> sysGroupCustomers);

    public List<String> selectCustInfoRetailBycustIdcList(List<String> idcConditionList);


    public List<HashMap<String,String>> selectCustEnumByCustId(Map<String,String> params);


    public int deleteCustTagByCustId(String custId);

    public int insertCustTag(CustTagDTO custTagDTO);

    List<CustInfoRetail> selectRecord(String custIdc);

    int countByCustTagName(Map<String,String> params);

    int insertCustTagNemu(Map<String,String> params);

    int insertCustManualTag(CustManualTagDTO custManualTagDTO);

    int insertManualTag(@Param("list") List<CustManualTag> newManualTags);

    int updateManualTag(@Param("list") List<CustManualTag> updateManualTags);

    int selectManualTagByParentIdAndName(@Param("parentId") Long parentId, @Param("custTagName") String custTagName);

    int deleteCustManualTagByCustId(String custId);
}
