package com.jwipc.inquiry.logic;

import com.jwipc.inquiry.dto.*;
import com.jwipc.inquiry.model.po.CreatePriceInfoPO;
import com.jwipc.inquiry.model.query.PriceInfoQuery;
import com.jwipc.page.PageView;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletResponse;
import java.io.Serializable;
import java.util.Collection;
import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * @author shenyang.ou
 * @date 2024/2/28 11:06
 * @desc
 */
public interface PriceInfoLogic {

    /**
     * 生成价格信息记录
     * @param list 信息记录
     * @return 结果
     */
    void createPriceInfo(List<CreatePriceInfoDTO> list);

    PageView findByPage(PriceInfoQuery query);
    List<PriceInfoDTO> listAll(PriceInfoQuery query);

    /**
     * 更新状态
     * @param id 价格记录id
     * @param optType 操作类型；0-生效；1-失效；2-关闭
     */
    void updateStatus(Long id, Integer optType,String invalidRemark);

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

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

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

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

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

    String importData(MultipartFile file);

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

    List<PriceInfoDTO> getList(Collection<? extends Serializable> idList);

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

    Map<String, String> getSupplierInfoList(List<String> cods);
}
