package com.fs.crm.service;

import com.alibaba.fastjson.JSONObject;
import com.fs.common.core.domain.R;
import com.fs.crm.domain.CrmCustomerVisit;
import com.fs.crm.param.CrmCustomerStatisticsParam;
import com.fs.crm.param.CrmCustomerVisitAddParam;
import com.fs.crm.param.CrmCustomerVisitListParam;
import com.fs.crm.param.CrmCustomerVisitListQueryParam;
import com.fs.crm.vo.CrmCustomerVisitExportVO;
import com.fs.crm.vo.CrmCustomerVisitListVO;
import com.fs.crm.vo.CrmCustomerVisitStatisticsVO;

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

/**
 * 跟进Service接口
 *
 * @author fs
 * @date 2022-12-21
 */
public interface ICrmCustomerVisitService
{
    /**
     * 查询跟进
     *
     * @param visitId 跟进ID
     * @return 跟进
     */
    public CrmCustomerVisit selectCrmCustomerVisitById(Long visitId);

    /**
     * 查询跟进列表
     *
     * @param crmCustomerVisit 跟进
     * @return 跟进集合
     */
    public List<CrmCustomerVisit> selectCrmCustomerVisitList(CrmCustomerVisit crmCustomerVisit);

    /**
     * 新增跟进
     *
     * @param crmCustomerVisit 跟进
     * @return 结果
     */
    public int insertCrmCustomerVisit(CrmCustomerVisit crmCustomerVisit);

    /**
     * 修改跟进
     *
     * @param crmCustomerVisit 跟进
     * @return 结果
     */
    public int updateCrmCustomerVisit(CrmCustomerVisit crmCustomerVisit);

    /**
     * 批量删除跟进
     *
     * @param visitIds 需要删除的跟进ID
     * @return 结果
     */
    public int deleteCrmCustomerVisitByIds(Long[] visitIds);

    /**
     * 删除跟进信息
     *
     * @param visitId 跟进ID
     * @return 结果
     */
    public int deleteCrmCustomerVisitById(Long visitId);


    List<CrmCustomerVisitListVO> selectCrmCustomerVisitListVO(CrmCustomerVisitListParam param);

    List<CrmCustomerVisitListVO> selectCrmCustomerVisitListQuery(CrmCustomerVisitListQueryParam param);

    R addVisit(CrmCustomerVisitAddParam param);

    List<CrmCustomerVisitStatisticsVO> selectCrmCustomerVisitStatisticsList(CrmCustomerStatisticsParam param);

    List<JSONObject> selectCrmCustomerVisitCounts(Map<String, Object> toMap);

    List<CrmCustomerVisitExportVO> selectCrmCustomerVisitExportListVO(CrmCustomerVisitListParam param);
}
