package org.xyzh.crontab.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.xyzh.common.core.page.PageParam;
import org.xyzh.common.dto.crontab.TbDataCollectionItem;
import org.xyzh.common.vo.DataCollectionItemVO;

import java.util.List;

/**
 * @description 数据采集项数据访问层
 * @filename DataCollectionItemMapper.java
 * @author yslg
 * @copyright xyzh
 * @since 2025-11-08
 */
@Mapper
public interface DataCollectionItemMapper extends BaseMapper<TbDataCollectionItem> {

    /**
     * @description 根据来源URL查询采集项（用于去重）
     * @param sourceUrl 来源URL
     * @return TbDataCollectionItem 采集项
     * @author yslg
     * @since 2025-11-08
     */
    TbDataCollectionItem selectBySourceUrl(@Param("sourceUrl") String sourceUrl);

    /**
     * @description 根据任务ID查询采集项列表
     * @param taskId 任务ID
     * @return List<TbDataCollectionItem> 采集项列表
     * @author yslg
     * @since 2025-11-08
     */
    List<TbDataCollectionItem> selectByTaskId(@Param("taskId") String taskId);

    /**
     * @description 查询采集项列表
     * @param filter 过滤条件
     * @return List<TbDataCollectionItem> 采集项列表
     * @author yslg
     * @since 2025-11-08
     */
    List<TbDataCollectionItem> selectItemList(TbDataCollectionItem filter);

    /**
     * @description 分页查询采集项列表
     * @param filter 过滤条件
     * @param pageParam 分页参数
     * @return List<TbDataCollectionItem> 采集项列表
     * @author yslg
     * @since 2025-11-08
     */
    List<TbDataCollectionItem> selectItemPage(@Param("filter") TbDataCollectionItem filter, @Param("pageParam") PageParam pageParam);

    /**
     * @description 统计采集项总数
     * @param filter 过滤条件
     * @return long 总数
     * @author yslg
     * @since 2025-11-08
     */
    long countItems(@Param("filter") TbDataCollectionItem filter);

    /**
     * @description 批量插入采集项
     * @param itemList 采集项列表
     * @return int 影响行数
     * @author yslg
     * @since 2025-11-08
     */
    int batchInsertItems(@Param("itemList") List<TbDataCollectionItem> itemList);

    /**
     * @description 根据状态统计数量
     * @param taskId 任务ID（可选）
     * @param status 状态
     * @return long 数量
     * @author yslg
     * @since 2025-11-08
     */
    long countByStatus(@Param("taskId") String taskId, @Param("status") Integer status);

    /**
     * @description 更新采集项状态
     * @param itemId 采集项ID
     * @param status 状态
     * @return int 影响行数
     * @author yslg
     * @since 2025-11-08
     */
    int updateItemStatus(@Param("itemId") String itemId, @Param("status") Integer status);

    // ==================== VO查询方法(使用JOIN返回完整VO) ====================

    /**
     * @description 根据ID查询采集项VO（包含关联的任务和日志信息）
     * @param itemId 采集项ID
     * @return DataCollectionItemVO 采集项VO
     * @author yslg
     * @since 2025-11-08
     */
    DataCollectionItemVO selectVOById(@Param("itemId") String itemId);

    /**
     * @description 查询采集项VO列表（包含关联的任务和日志信息）
     * @param filter 过滤条件
     * @return List<DataCollectionItemVO> 采集项VO列表
     * @author yslg
     * @since 2025-11-08
     */
    List<DataCollectionItemVO> selectVOList(TbDataCollectionItem filter);

    /**
     * @description 分页查询采集项VO列表（包含关联的任务和日志信息）
     * @param filter 过滤条件
     * @param pageParam 分页参数
     * @return List<DataCollectionItemVO> 采集项VO列表
     * @author yslg
     * @since 2025-11-08
     */
    List<DataCollectionItemVO> selectVOPage(@Param("filter") TbDataCollectionItem filter, @Param("pageParam") PageParam pageParam);

    /**
     * @description 根据任务ID查询采集项VO列表（包含关联的任务和日志信息）
     * @param taskId 任务ID
     * @return List<DataCollectionItemVO> 采集项VO列表
     * @author yslg
     * @since 2025-11-08
     */
    List<DataCollectionItemVO> selectVOByTaskId(@Param("taskId") String taskId);
}


