package com.ruoyi.app.mapper;

import java.util.List;

import com.ruoyi.app.DTO.*;
import com.ruoyi.app.model.Purchaser;
import com.ruoyi.app.model.request.ReqPurchaser;
import com.ruoyi.app.model.request.TimeRangeParam;

/**
 * 肉商Mapper接口
 * 
 * @author coede
 * @date 2025-03-19
 */
public interface PurchaserMapper 
{
    /**
     * 查询肉商
     * 
     * @param id 肉商主键
     * @return 肉商
     */
    public Purchaser selectPurchaserById(Long id);

    /**
     * 查询肉商列表
     * 
     * @param purchaser 肉商
     * @return 肉商集合
     */
    public List<Purchaser> selectPurchaserList(ReqPurchaser purchaser);

    /**
     * 校验肉商名称是否唯一
     *
     * @param purchaserName 肉商名称
     * @return 结果
     */
    public Purchaser checkPurchaserNameUnique(String purchaserName);

    /**
     * 校验肉商身份证号是否唯一
     *
     * @param idNumber 身份证号
     * @return 结果
     */
    public Purchaser checkIDNumberUnique(String idNumber);

    /**
     * 校验肉商编号是否唯一
     *
     * @param purchaserNo 肉商编号
     * @return 结果
     */
    public Purchaser checkPurchaserNoUnique(String purchaserNo);

    /**
     * 查询全部肉商列表
     *
     *
     * @return 肉商集合
     */
    public List<Purchaser> selectPurchaserAll();

    /**
     * 新增肉商
     * 
     * @param purchaser 肉商
     * @return 结果
     */
    public int insertPurchaser(Purchaser purchaser);

    /**
     * 修改肉商
     * 
     * @param purchaser 肉商
     * @return 结果
     */
    public int updatePurchaser(Purchaser purchaser);

    /**
     * 删除肉商
     * 
     * @param id 肉商主键
     * @return 结果
     */
    public int deletePurchaserById(Long id);

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

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

    /**
     * 根据时间范围获取肉商接收数量前五排名
     *
     * @param timeRangeParam 时间
     * @return 结果
     */
    public List<PurchaserAmountRankDTO> selectAmountRankByTime(TimeRangeParam timeRangeParam);

    /**
     * 根据时间范围获取不同产地肉商接收数量
     *
     * @param timeRangeParam 时间
     * @return 结果
     */
    public List<PurchaserSaleAmountDTO> selectSaleAmountByTime(TimeRangeParam timeRangeParam);


    public Purchaser getOnePurchaser(String purchaserName);

    public AncimalDTO getOneAnimal(String purchaserName);
}
