package com.sw.mes.yb.pc.service;

import com.sw.mes.core.base.BaseService;
import com.sw.mes.yb.pc.dto.StoreMixInfoDto;
import com.sw.mes.yb.pc.entity.StoreMixInfo;

import javax.validation.Valid;
import java.util.List;
import java.util.Map;

public interface StoreMixInfoService extends BaseService<StoreMixInfo> {

    void saveOrUpdate(@Valid StoreMixInfoDto storeMixInfoDto) throws RuntimeException;

    StoreMixInfo findByCode(String code);

    /**
     * 石英坩埚点检完成，修改配料
     * @param code
     */
    void StoreOutput(String code);


    /**
     * 备料明细表
     */
    List<Map<String,Object>> reportPreMaterials(String lotNo, String device, String series, String ggSupplier,
                                                String date1, String date2, Long start, Integer rows);
    List<Map<String,Object>> countPreMaterials(String lotNo, String device, String series, String ggSupplier,
                                               String date1, String date2);

    /**
     * 物料总计使用统计表
     */
    List<Map<String,Object>> materialsUse(String device, String modelName, String date1, String date2, Long start, Integer rows);
    List<Map<String,Object>> countMaterialsUse(String device, String modelName, String date1, String date2);

    void change(@Valid StoreMixInfoDto storeMixInfoDto) throws RuntimeException;

    /**
     * 统计坩埚编号配料数量
     * @param code
     * @return
     */
    Long countByCode(String code);

    /**
     * 统计炉次号配料数量
     * @param lotNo
     * @return
     */
    Long countByLotNo(String lotNo);

    StoreMixInfo findByLotNo(String lotNo);

    void deleteByMainId(Integer id);

    // 根据设备编号 查找 最近的 SAP订单编号
    String findSapOrderNoByDeviceNo(String name);

    /**
     * 对调炉次号
     * @param storeMixInfoOld
     * @param storeMixInfoNew
     */
    void exchange(StoreMixInfo storeMixInfoOld, StoreMixInfo storeMixInfoNew);

    /**
     * 更换设备
     * @param storeMixInfoOld
     * @param newCode
     * @param newDeviceNo
     */
    void  changeDeviceNo(StoreMixInfo storeMixInfoOld, String newCode, String newDeviceNo);

    /**
     * 更换坩埚
     * @param oldCode
     * @param newCode
     */
    void updateCode(String oldCode, String newCode);

    String findLastByDeviceNo(String deviceNo);

}


