package cn.iocoder.yudao.module.crm.service.crmcustomer;

import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.crm.controller.admin.crmcustomer.vo.*;
import cn.iocoder.yudao.module.crm.dal.dataobject.crmcustomer.CrmCustomerDO;
import javax.validation.Valid;

import java.util.List;

/**
 * 客户 Service 接口
 *
 * @author yshop
 */
public interface CrmCustomerService {

    /**
     * 创建客户
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createCustomer(@Valid CrmCustomerSaveReqVO createReqVO);

    /**
     * 更新客户
     *
     * @param updateReqVO 更新信息
     */
    void updateCustomer(@Valid CrmCustomerSaveReqVO updateReqVO);

    /**
     * 更新客户成交信息
     *
     * @param updateReqVO 更新信息
     */
    void updateCustomerPurchaseTotal(@Valid CrmCustomerSaveReqVO updateReqVO);

    /**
     * 删除客户
     *
     * @param id 编号
     */
    void deleteCustomer(Long id);

    /**
     * 投入公海
     * @param id
     */
    void openCustomer(Long id);

    /**
     * 领取公海客户
     * @param id
     */
    void receiveCustomer(Long id);

    /**
     * 获得客户
     *
     * @param id 编号
     * @return 客户
     */
    CrmCustomerDO getCustomer(Long id);

    /**
     * 获得客户分页
     *
     * @param pageReqVO 分页查询
     * @return 客户分页
     */
    PageResult<CrmCustomerDO> getCustomerPage(CrmCustomerPageReqVO pageReqVO);

    /**
     * 获得客户分页2
     *
     * @param pageReqVO 分页查询
     * @return 客户分页
     */
    PageResult<CrmCustomerRespVO> getCustomerPage2(CrmCustomerPageReqVO pageReqVO);

    /**
     * 客户导入
     * @param importUsers 导入文件
     * @param adminIds 用户ID
     * @param averageType 导入类型
     * @return
     */
    CustomerImportRespVO importList(List<CrmCustomerImportVO> importUsers, String adminIds, Integer averageType,Integer repeatConfirmationFlag);


    /**
     * 资料回收
     * @param recoverVO
     */
    void recover(CrmCustomerRecoverVO recoverVO);

    /**
     * 转移客户
     * @param transferVO
     */
    void transfer(CrmCustomerTransferVO transferVO);

    /**
     * 发送短信
     * @param sendVO
     * @return
     */
    void sendSms(SmsTemplateSendVO sendVO);

    /**
     * 发送邮件
     * @param sendVO
     * @return
     */
    void sendMail(MailTemplateSendVO sendVO);

}
