package com.ghy.order.mapper;

import com.ghy.order.domain.AfterServiceRecord;

import java.util.List;

/**
 * 售后记录Mapper接口
 *
 * @author clunt
 * @date 2022-09-25
 */
public interface AfterServiceRecordMapper {
    /**
     * 查询售后记录
     *
     * @param id 售后记录主键
     * @return 售后记录
     */
    AfterServiceRecord selectAfterServiceRecordById(String id);

    /**
     * 查询售后记录列表
     *
     * @param afterServiceRecord 售后记录
     * @return 售后记录集合
     */
    List<AfterServiceRecord> selectAfterServiceRecordList(AfterServiceRecord afterServiceRecord);

    /**
     * 新增售后记录
     *
     * @param afterServiceRecord 售后记录
     * @return 结果
     */
    int insertAfterServiceRecord(AfterServiceRecord afterServiceRecord);

    /**
     * 修改售后记录
     *
     * @param afterServiceRecord 售后记录
     * @return 结果
     */
    int updateAfterServiceRecord(AfterServiceRecord afterServiceRecord);

    /**
     * 删除售后记录
     *
     * @param id 售后记录主键
     * @return 结果
     */
    int deleteAfterServiceRecordById(String id);

    /**
     * 批量删除售后记录
     *
     * @param ids 需要删除的数据主键集合
     * @return 结果
     */
    int deleteAfterServiceRecordByIds(String[] ids);

    /**
     * 查询未完成的售后记录 customer_final_check IS NULL
     *
     * @return 未完成的售后记录
     */
    AfterServiceRecord unfinished(Long orderDetailId);

    /**
     * 查询师傅反馈超时的售后记录
     * 倒计时1：客户发起后，师傅24小时不操作任何反馈
     *
     * @return 超时的售后记录列表
     */
    List<AfterServiceRecord> selectWorkerFeedbackTimeoutRecords();

    /**
     * 查询客户确认超时的售后记录
     * 倒计时2：师傅重做完成后客户36小时不操作
     * 倒计时3：师傅拒绝后客户36小时不操作
     *
     * @return 超时的售后记录列表
     */
    List<AfterServiceRecord> selectCustomerConfirmTimeoutRecords();

    /**
     * 查询师傅重发补发超时的售后记录
     * 倒计时4：师傅重发补发后，客户6天（快递/物流）或24小时（非快递）不操作
     *
     * @return 超时的售后记录列表
     */
    List<AfterServiceRecord> selectWorkerResendTimeoutRecords();

    /**
     * 查询退货发货超时的售后记录
     * 查询退货发货时间超过6天且师傅未确认收货的售后记录
     *
     * @return 超时的售后记录列表
     */
    List<AfterServiceRecord> selectReturnShipTimeoutRecords();

    /**
     * 批量更新售后状态：当客户最终确认为1时，将售后状态设置为1
     *
     * @return 更新的记录数
     */
    int updateAfterServiceStatusByCustomerFinalCheck();
}
