package com.ruoyi.web.v1.mapper;

import java.util.Date;
import java.util.List;

import cn.hutool.core.date.DateTime;
import com.ruoyi.web.v1.DTO.*;
import com.ruoyi.web.v1.model.EntranceBatch;
import com.ruoyi.web.v1.model.request.ProductTraceParam;
import com.ruoyi.web.v1.model.request.ReqEntranceBatchList;
import com.ruoyi.web.v1.model.request.ReqEntranceReport;
import com.ruoyi.web.v1.model.request.TimeRangeParam;
import org.apache.ibatis.annotations.Param;

/**
 * 入场批次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 req 入场批次
     * @return 入场批次集合
     */
    public List<EntranceBatch> selectEntranceBatchList(ReqEntranceBatchList req);

    /*查询当天是否有完结报告*/
    public List<EntranceBatch> selectEntranceBatchList1(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);

    /**
     *根据检疫证号查找入场批次
     *
     */
    public EntranceBatch selectByAnimalNo(String anNo);

    /**
     *
     * 获取所有的列表
     * */
    public List<EntranceBatch> getAll(@Param("startTime") String startTime,@Param("endTime")String endTime,@Param("animalCertNo")String animalCertNo
            ,@Param("cargoOwner") String cargoOwner);


    /*生猪屠宰情况日汇总*/


    /*
    * 查询当天是否有完结报告，如果有完结报告则不展示入场批次，如果无则展示当天
    * */

    public JsReportDto selectByTime();

    //获取所有可用批次
    List<EntranceBatch> getAllValidEntrance();

    Integer getOne(@Param("dateTime") Date dateTime);


    List<EntranceBatch> listAll();


}
