package com.zcloud.safetyDutyList.domain.gateway.tasklist;

import com.zcloud.safetyDutyList.domain.model.tasklist.FeedbackExceptionE;

import java.util.List;

/**
 * 反馈异常网关接口
 * <p>
 * 定义反馈异常领域模型的持久化操作，包括增删改查等基础操作，
 * 以及按清单ID和任务详情ID查询异常记录的方法。
 */
public interface FeedbackExceptionGateway {

    /**
     * 新增反馈异常记录
     *
     * @param feedbackExceptionE 反馈异常领域模型
     * @return 操作结果，true-成功
     */
    Boolean add(FeedbackExceptionE feedbackExceptionE);

    /**
     * 更新反馈异常记录
     *
     * @param feedbackExceptionE 反馈异常领域模型（需包含id）
     * @return 操作结果，true-成功
     */
    Boolean update(FeedbackExceptionE feedbackExceptionE);

    /**
     * 根据主键ID删除反馈异常记录
     *
     * @param id 主键ID
     * @return 操作结果，true-成功
     */
    Boolean deleteById(Long id);

    /**
     * 根据反馈异常业务ID查询反馈异常记录
     *
     * @param feedbackExceptionId 反馈异常业务ID
     * @return 反馈异常领域模型，不存在返回null
     */
    FeedbackExceptionE getByFeedbackExceptionId(String feedbackExceptionId);

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

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

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