package com.ruoyi.app.mapper;

import java.util.List;

import com.ruoyi.app.DTO.DailyEntranceAmountDTO;
import com.ruoyi.app.DTO.EntranceReportDTO;
import com.ruoyi.app.DTO.TimeAndNumberDTO;
import com.ruoyi.app.domain.EntranceBatch;
import com.ruoyi.app.domain.Supplier;
import com.ruoyi.app.domain.request.ProductTraceParam;
import com.ruoyi.app.domain.request.ReqEntranceReport;
import com.ruoyi.app.domain.request.TimeRangeParam;
import com.ruoyi.app.DTO.ProductTraceDTO;

/**
 * 入场批次Mapper接口
 * 
 * @author coede
 * @date 2025-03-19
 */
public interface EntranceBatchMapper 
{
    /**
     * 查询入场批次
     * 
     * @param id 入场批次主键
     * @return 入场批次
     */
    public EntranceBatch selectEntranceBatchById(Long id);

    /**
     * 查询入场批次
     *
     * @param id 入场批次主键
     * @return 入场批次
     */
    public EntranceBatch selectEntranceBatchDetailById(Long id);

    /**
     * 查询入场批次列表
     * 
     * @param entranceBatch 入场批次
     * @return 入场批次集合
     */
    public List<EntranceBatch> selectEntranceBatchList(EntranceBatch entranceBatch);

    /**
     * 校验检疫证号是否唯一
     *
     * @param animalCertNo 检疫证号
     * @return 结果
     */
    public EntranceBatch checkAnimalCertNoUnique(String animalCertNo);

    /**
     * 新增入场批次
     * 
     * @param entranceBatch 入场批次
     * @return 结果
     */
    public int insertEntranceBatch(EntranceBatch entranceBatch);

    /**
     * 修改入场批次
     * 
     * @param entranceBatch 入场批次
     * @return 结果
     */
    public int updateEntranceBatch(EntranceBatch entranceBatch);

    /**
     * 删除入场批次
     * 
     * @param id 入场批次主键
     * @return 结果
     */
    public int deleteEntranceBatchById(Long id);

    /**
     * 批量删除入场批次
     * 
     * @param ids 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteEntranceBatchByIds(Long[] ids);

    /**
     * 根据时间获取入场次数
     *
     * @param timeRangeParam 时间
     * @return 结果
     */
    public Long selectCountByTime(TimeRangeParam timeRangeParam);

    /**
     * 获取今日入场次数
     *
     * @return 结果
     */
    public Long selectTodayCount();

    /**
     * 获取昨日入场次数
     *
     * @return 结果
     */
    public Long selectYesterdayCount();

    /**
     * 根据时间获取累计计划屠宰
     *
     * @param timeRangeParam 时间
     * @return 结果
     */
    public Long selectAmountByTime(TimeRangeParam timeRangeParam);

    /**
     * 获取今日累计计划屠宰
     *
     * @return 结果
     */
    public DailyEntranceAmountDTO selectTodayAmount();

    /**
     * 获取昨日累计计划屠宰
     *
     * @return 结果
     */
    public DailyEntranceAmountDTO selectYesterdayAmount();

    /**
     * 统计按年全部数据
     *
     * @param timeRangeParam 时间
     * @return 结果
     */
    public List<TimeAndNumberDTO> selectAllYearAmountByTime(TimeRangeParam timeRangeParam);

    /**
     * 根据获取近一年每月累计计划屠宰
     *
     * @param timeRangeParam 时间
     * @return 结果
     */
    public List<TimeAndNumberDTO> selectYearAmountByTime(TimeRangeParam timeRangeParam);

    /**
     * 根据获取近三十天的每日累计计划屠宰
     *
     * @param timeRangeParam 时间
     * @return 结果
     */
    public List<TimeAndNumberDTO> selectMonthAmountByTime(TimeRangeParam timeRangeParam);

    /**
     * 根据获取近七天的每日累计计划屠宰
     *
     * @param timeRangeParam 时间
     * @return 结果
     */
    public List<TimeAndNumberDTO> selectWeekAmountByTime(TimeRangeParam timeRangeParam);

    /**
     * 根据获取每小时累计计划屠宰
     *
     * @param timeRangeParam 时间
     * @return 结果
     */
    public List<TimeAndNumberDTO> selectTodayAmountByTime(TimeRangeParam timeRangeParam);

    /**
     * 根据获取指定时间范围内每日累计计划屠宰
     *
     * @param timeRangeParam 时间
     * @return 结果
     */
    public List<TimeAndNumberDTO> selectRangeAmountByTime(TimeRangeParam timeRangeParam);

    /**
     * 根据获取指定时间范围内每日累计计划屠宰
     *
     * @return 结果
     */
    public List<TimeAndNumberDTO> selectWeekCountByTime();

    /**
     * 产品追溯-根据肉商名称，供应商名称，血码，检疫证号查询
     *@param productTraceParam 查询条件
     * @return 结果
     */
    public List<ProductTraceDTO> selectProductTrace(ProductTraceParam productTraceParam);

    /**
     * 获取最近一条记录
     * @return 结果
     */
    public EntranceBatch selectLatelyEntrance();

    /**
     * 入场统计报表
     * @return 结果
     */
    public List<EntranceReportDTO> selectEntranceReport(ReqEntranceReport reqEntranceReport);

    /**
     * 根据供应商ID统计入场批次数量
     *
     * @param supplierId 供应商ID
     * @return 结果
     */
    public int countBatchBySupplier(Long supplierId);

}
