package com.xinelu.manage.mapper.phonedialrecord;

import com.xinelu.manage.domain.phonedialrecord.PhoneDialRecord;
import com.xinelu.manage.dto.billinfo.BillInfoDto;
import com.xinelu.manage.dto.phonedialrecord.PhoneDialRecordDto;
import com.xinelu.manage.dto.statistics.FollowUpRateDto;
import com.xinelu.manage.vo.phonedialrecord.BillPhoneDialVo;
import com.xinelu.manage.vo.phonedialrecord.PhoneDialRecordVo;
import com.xinelu.manage.vo.statistics.PushCount;
import org.apache.ibatis.annotations.Param;

import java.time.LocalDateTime;
import java.util.List;

/**
 * 电话拨打记录Mapper接口
 *
 * @author xinelu
 * @date 2024-07-29
 */
public interface PhoneDialRecordMapper {
    /**
     * 查询电话拨打记录
     *
     * @param id 电话拨打记录主键
     * @return 电话拨打记录
     */
    PhoneDialRecord selectPhoneDialRecordById(Long id);

    /**
     * 查询电话拨打记录列表
     *
     * @param phoneDialRecord 电话拨打记录
     * @return 电话拨打记录集合
     */
    List<PhoneDialRecord> selectPhoneDialRecordList(PhoneDialRecord phoneDialRecord);

    /**
     * 查询电话拨打记录列表
     *
     * @param phoneDialRecord 电话拨打记录
     * @return 电话拨打记录集合
     */
    List<BillPhoneDialVo> selectPhoneDialRecords(BillPhoneDialVo phoneDialRecord);

    /**
     * 新增电话拨打记录
     *
     * @param phoneDialRecord 电话拨打记录
     * @return 结果
     */
    int insertPhoneDialRecord(PhoneDialRecord phoneDialRecord);

    /**
     * 修改电话拨打记录
     *
     * @param phoneDialRecord 电话拨打记录
     * @return 结果
     */
    int updatePhoneDialRecord(PhoneDialRecord phoneDialRecord);

    /**
     * 删除电话拨打记录
     *
     * @param id 电话拨打记录主键
     * @return 结果
     */
    int deletePhoneDialRecordById(Long id);

    /**
     * 批量删除电话拨打记录
     *
     * @param ids 需要删除的数据主键集合
     * @return 结果
     */
    int deletePhoneDialRecordByIds(Long[] ids);

	/**
	 * @description 统计页面查询电话拨打记录列表
	 * @Param queryDto 随访成功率查询传输对象
	 * @return 电话拨打记录列表
	 * @Author haown
	 * @Date 2024-11-8 14:44
	*/
	List<PhoneDialRecordVo> getPhoneDialStatistic(FollowUpRateDto queryDto);

	/**
	 * @description 根据任务主键获取最新一次的电话拨打记录
	 * @Param  manageRouteNodeId 任务主键
	 * @return 最新一次的电话拨打记录
	 * @Author haown
	 * @Date 2024-11-8 14:43
	*/
	PhoneDialRecord getLastRecord(Long manageRouteNodeId);

	/**
	 * 查询未获取录音地址的电话拨打记录列表
	 *
	 * @param phoneDialRecordDto 电话拨打记录查询传输对象
	 * @return 电话拨打记录集合
	 */
	List<PhoneDialRecord> getNoVideoList(PhoneDialRecordDto phoneDialRecordDto);

    /**
     * 根据账单id查询电话推送记录
     *
     * @param billId 账单id
     * @return BillInfoDto
     */
    List<BillInfoDto> selectPhoneDialStatisticByBillId(Long billId);

    /**
     * 电话推送统计
     */
    PushCount phoneCount();

    /**
     * 根据时间查询拨打成功的账单
     *
     * @param startMonth 开始时间
     * @param endMonth   结束时间
     * @return PhoneDialRecord
     */
    List<PhoneDialRecord> selectPhoneDialBySendTime(@Param("startMonth") LocalDateTime startMonth, @Param("endMonth") LocalDateTime endMonth);

    /**
     * 根据ids修改账单id
     *
     * @param ids
     * @param billId
     * @return int
     */
    int updatePhoneDialRecordByIds(@Param("ids") List<Long> ids, @Param("billId") Long billId);
}
