package com.pusong.business.service;

import com.pusong.business.domain.PsCustomCallback;
import com.pusong.business.domain.PsCustomInfo;
import com.pusong.business.domain.bo.PsCustomCallbackBo;
import com.pusong.business.domain.bo.PsCustomPriceBo;
import com.pusong.business.domain.bo.PsCustomRecordQueryBo;
import com.pusong.business.domain.vo.PsCustomInfoVo;
import com.pusong.business.domain.bo.PsCustomInfoBo;
import com.pusong.business.domain.vo.PsCustomerRecordVo;
import com.pusong.common.mybatis.core.page.TableDataInfo;
import com.pusong.common.mybatis.core.page.PageQuery;

import java.util.Collection;
import java.util.List;
import java.util.Map;

/**
 * 客户基本信息Service接口
 *
 * @author Lion Li
 * @date 2024-07-25
 */
public interface IPsCustomInfoService {
    /**
     * 根据id查询客户
     * @return 客户id和姓名
     */
    PsCustomInfo listById(Long id);
    /**
     * 查询登陆人下所有的客户名称和id
     * @return 客户id和姓名
     */
    List<Map<String,Object>> listByLoginUser(String name);
    /**
     * 分页查询客户基本信息列表
     *
     * @param bo        查询条件
     * @param pageQuery 分页参数
     * @return 客户基本信息分页列表
     */
    TableDataInfo<PsCustomInfoVo> queryPageList(PsCustomInfoBo bo, PageQuery pageQuery);

    /**
     * 查询符合条件的客户基本信息列表
     *
     * @param bo 查询条件
     * @return 客户基本信息列表
     */
    List<PsCustomInfoVo> queryList(PsCustomInfoBo bo);

    /**
     * 新增客户基本信息
     *
     * @param bo 客户基本信息
     * @return 是否新增成功
     */
    Long insertByBo(PsCustomInfoBo bo);

    /**
     * 修改客户基本信息
     *
     * @param bo 客户基本信息
     * @return 是否修改成功
     */
    Boolean updateByBo(PsCustomInfoBo bo);

    /**
     * 校验并批量删除客户基本信息信息
     *
     * @param id     主键id
     * @param type 操作类型
     * @param desc 备注
     * @return 是否删除成功
     */
    Boolean updateCustomerStatus(Long id, Integer type,String desc);


    /**
     * 新增客户报价信息
     *
     * @param bos 客户报价信息
     * @return 是否新增成功
     */
    Boolean insertPiceByBo(List<PsCustomPriceBo> bos);

    /**
     * 新增客户回访记录
     *
     * @param bos 客户回访记录
     * @return 是否新增成功
     */
    Boolean insertCallbackByBo(List<PsCustomCallbackBo> bos);

    /**
     * 已完成客户
     * @param queryBo
     * @return
     */
    TableDataInfo<PsCustomerRecordVo> getCustomerRecordList(PsCustomRecordQueryBo queryBo, PageQuery pageQuery);

    /**
     * 移除黑名单
     * @param customerId 客户id
     */
    void removeblack(Long customerId);
    /**
     * 删除
     * @param customerId 客户id
     */
    void delete(Long customerId);
    /**
     * 中止合作
     * @param customerId 客户id
     */
    void stop(Long customerId);

    /**
     * 主动认领
     * @param customerId 客户id
     */
    void claim(Long customerId);
    /**
     *  指派
     * @param customerId 客户id
     * @param userId 被指派者
     */
    void assign(Long customerId,Long userId);
}
