package com.jwipc.inquiry.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.jwipc.inquiry.entity.Inquiry;
import com.jwipc.inquiry.entity.PriceInfo;
import com.baomidou.mybatisplus.extension.service.IService;
import com.jwipc.inquiry.model.po.CreatePriceInfoPO;
import com.jwipc.inquiry.model.po.HistoryPriceInfoPO;
import com.jwipc.inquiry.model.po.InquiryMaterialPO;
import com.jwipc.inquiry.model.po.PriceInfoPO;
import com.jwipc.inquiry.model.query.PriceInfoQuery;

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

/**
 * <p>
 * 价格信息记录主表 服务类
 * </p>
 *
 * @author shenyang.ou
 * @since 2024-02-28
 */
public interface IPriceInfoService extends IService<PriceInfo> {

    /**
     * 根据询价id组装价格信息记录数据
     * @param inquiryId 询价id
     * @return 价格信息记录数据
     */
    List<CreatePriceInfoPO> getByInquiryId(Long inquiryId);

    List<PriceInfoPO> findPageByQuery(Page<Inquiry> dbPage, PriceInfoQuery query);

    /**
     * 根据调价id组装价格信息记录
     *
     * @param id 调价id
     * @return 价格信息记录
     */
    List<CreatePriceInfoPO> getByAuditId(Long id);

    /**
     * 根据物料编码和工厂获取历史最低价
     *
     * @param materialCode 物料编码
     * @param factoryCode 工厂编码
     * @return 历史最低价
     */
    HistoryPriceInfoPO getHistoryLowPrice(String materialCode, String factoryCode);

    /**
     * 根据物料编码和工厂获取上次中标价
     *
     * @param materialCode 物料编码
     * @param factoryCode 工厂编码
     * @return 上次中标价
     */
    HistoryPriceInfoPO getLastBidPrice(String materialCode, String factoryCode);

    /**
     * 根据供应商编码和物料编码和工厂获取上次中标价
     *
     * @param supplierCode 供应商编码
     * @param materialCode 物料编码
     * @param factoryCode 工厂编码
     * @return 上次中标价
     */
    PriceInfoPO getSupplierLastBidPrice(String supplierCode, String materialCode, String factoryCode);

    /**
     * 组装转询价物料列表
     *
     * @param priceInfoIdList 价格信息记录ids
     * @return 询价物料列表
     */
    List<InquiryMaterialPO> makeInquiryMaterial(List<String> priceInfoIdList);

    PriceInfoPO getLastPrice(String materialCode, String factoryCode, String supplierCode);

    List<PriceInfo> getEffectiveMinPrice(List<String> materialCodes, Date date);
}
