package com.zcloud.safetyDutyList.persistence.mapper.tasklist;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.zcloud.safetyDutyList.persistence.dataobject.tasklist.FeedbackExceptionDO;
import org.apache.ibatis.annotations.Mapper;

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

/**
 * 反馈异常Mapper接口
 * <p>
 * 定义反馈异常表的SQL操作方法，继承MyBatis-Plus的BaseMapper获得基础CRUD能力，
 * 自定义方法对应的SQL在FeedbackExceptionMapper.xml中实现。
 */
@Mapper
public interface FeedbackExceptionMapper extends BaseMapper<FeedbackExceptionDO> {

    /**
     * 分页查询反馈异常记录
     * <p>
     * 支持按taskListId、exceptionType、exceptionPeriodFlag等条件筛选
     *
     * @param iPage  分页参数
     * @param params 查询参数
     * @return 分页结果
     */
    IPage<FeedbackExceptionDO> exceptionPage(IPage<FeedbackExceptionDO> iPage, Map<String, Object> params);

    /**
     * 根据反馈ID查询反馈异常记录
     *
     * @param feedbackId 反馈ID
     * @return 反馈异常数据对象列表
     */
    List<FeedbackExceptionDO> listByFeedbackId(String feedbackId);

    /**
     * 根据清单业务ID查询该清单下所有反馈异常记录
     *
     * @param taskListId 清单业务ID
     * @return 反馈异常数据对象列表
     */
    List<FeedbackExceptionDO> listByTaskListId(String taskListId);

    /**
     * 根据任务详情业务ID查询该任务下所有反馈异常记录
     * <p>
     * 用于定时任务2：反馈异常检测时，检查某个任务是否已存在异常记录，避免重复添加
     *
     * @param taskDetailId 任务详情业务ID
     * @return 反馈异常数据对象列表
     */
    List<FeedbackExceptionDO> listByTaskDetailId(String taskDetailId);

    /**
     * 根据反馈异常业务ID查询反馈异常记录
     *
     * @param exceptionId 反馈异常业务ID
     * @return 反馈异常数据对象
     */
    FeedbackExceptionDO getByExceptionId(String exceptionId);

    /**
     * 根据任务执行ID和周期标识查询反馈异常记录
     * <p>
     * 用于定时任务2：反馈异常检测时，检查某个任务在指定周期是否已存在异常记录，避免重复添加
     *
     * @param taskExecutionId     任务执行业务ID
     * @param exceptionPeriodFlag 异常周期标识
     * @return 反馈异常数据对象列表
     */
    List<FeedbackExceptionDO> listByTaskExecutionIdAndPeriodFlag(String taskExecutionId, String exceptionPeriodFlag);
}
