package com.zcloud.safetyDutyList.persistence.repository.impl.tasklist;

import com.alibaba.cola.dto.PageResponse;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.jjb.saas.framework.repository.common.PageHelper;
import com.jjb.saas.framework.repository.repo.impl.BaseRepositoryImpl;
import com.zcloud.gbscommon.utils.Query;
import com.zcloud.safetyDutyList.persistence.dataobject.tasklist.FeedbackExceptionDO;
import com.zcloud.safetyDutyList.persistence.mapper.tasklist.FeedbackExceptionMapper;
import com.zcloud.safetyDutyList.persistence.repository.tasklist.FeedbackExceptionRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;

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

/**
 * 反馈异常仓储实现类
 * <p>
 * 实现反馈异常仓储接口，委托FeedbackExceptionMapper完成实际的SQL操作。
 * 继承BaseRepositoryImpl获得MyBatis-Plus的基础CRUD能力。
 */
@Service
@RequiredArgsConstructor
public class FeedbackExceptionRepositoryImpl extends BaseRepositoryImpl<FeedbackExceptionMapper, FeedbackExceptionDO> implements FeedbackExceptionRepository {

    /** 反馈异常Mapper，用于SQL操作 */
    private final FeedbackExceptionMapper feedbackExceptionMapper;

    /**
     * 分页查询反馈异常记录
     * <p>
     * 构建分页参数后调用Mapper的exceptionPage方法，将结果转换为PageResponse
     */
    @Override
    public PageResponse<FeedbackExceptionDO> exceptionPage(Map<String, Object> params) {
        IPage<FeedbackExceptionDO> iPage = new Query<FeedbackExceptionDO>().getPage(params);
        IPage<FeedbackExceptionDO> result = feedbackExceptionMapper.exceptionPage(iPage, params);
        return PageHelper.pageToResponse(result, result.getRecords());
    }

    /**
     * 根据反馈ID查询反馈异常记录
     */
    @Override
    public List<FeedbackExceptionDO> listByFeedbackId(String feedbackId) {
        return feedbackExceptionMapper.listByFeedbackId(feedbackId);
    }

    /**
     * 根据清单业务ID查询该清单下所有反馈异常记录
     */
    @Override
    public List<FeedbackExceptionDO> listByTaskListId(String taskListId) {
        return feedbackExceptionMapper.listByTaskListId(taskListId);
    }

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

    /**
     * 根据反馈异常业务ID查询反馈异常记录
     */
    @Override
    public FeedbackExceptionDO getByExceptionId(String exceptionId) {
        return feedbackExceptionMapper.getByExceptionId(exceptionId);
    }

    /**
     * 根据任务执行ID和周期标识查询反馈异常记录
     */
    @Override
    public List<FeedbackExceptionDO> listByTaskExecutionIdAndPeriodFlag(String taskExecutionId, String exceptionPeriodFlag) {
        return feedbackExceptionMapper.listByTaskExecutionIdAndPeriodFlag(taskExecutionId, exceptionPeriodFlag);
    }
}
