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

import com.sw.mes.core.base.BaseService;
import com.sw.mes.core.dto.erp.ErpOrderDto;
import com.sw.mes.yb.plan.entity.ProductionOrder;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Set;


/**
 * @Author
 * @Description：
 * @Date:
 * @Modified By:
 */
public interface ProductionOrderService extends BaseService<ProductionOrder> {
    void close(ProductionOrder sapProductionOrder);

    ProductionOrder findByAufnr(String code);


    /**
     * 匹配圆棒入库料号
     *
     * @param diamDecide     直径判定
     * @param grade          产品等级
     * @param specifications 规格
     * @param conductiveType 导电型号
     * @param dopant         掺杂剂
     * @param sticksCount    拼数
     * @param actualLength   长度（拼棒：就是拼棒总长，非拼棒：长度）
     * @param sectionType    晶段类型
     * @return
     */
    String matchProductModel(String sectionNo, String diamDecide, String grade, String specifications, String conductiveType,
                             String dopant, Integer sticksCount, BigDecimal actualLength, String sectionType);

    /**
     * 匹配圆棒入库订单编号
     *
     * @param planMaterialCode 计划产品料号
     * @param planOrderType    计划订单类型
     * @param orderType        实际订单类型
     * @param planOrderNo      计划订单号
     * @param checkoutName     检验类型名称
     * @return
     */
    String matchOrder(String sectionNo, String planMaterialCode, String planOrderType, String orderType, String planOrderNo, String checkoutName);

    /**
     * 匹配圆棒入库订单编号
     * @param sectionNo 晶段编号
     * @param inspectMap 检验数据map
     * @return
     */
    String matchOrder(String sectionNo, Map<String, Object> inspectMap);

    ProductionOrder changeOrder(ProductionOrder oldProductionOrder, Date gmtCreate, String lotNo);

    List<ProductionOrder> findByMachineCapacityIdAndStatusAndProductionStatusAndGmtCreateTime(Integer machineCapacityId, String status, Boolean productionStatus, Date gmtCreate);

    /**
     * 查询范围时间与料号 是否 存在冲突的订单
     * @param matnr
     * @param gstrp
     * @param gltrp
     * @return
     */
    List<ProductionOrder> findByProductCodeAndTime(String matnr, Date gstrp, Date gltrp);

    List<ProductionOrder> findByWorkTypeAndTimeAndStatus(Integer workType, Date gstrp, Date gltrp, String status);


    void handleErpOrder(List<ErpOrderDto> ybErpOrderDto, List<ErpOrderDto> fbErpOrderDto);

    ProductionOrder findByeErpOrderNo(String orderNo);

    ProductionOrder findByFbOrderNo(String code);

	ProductionOrder findByAufnrAndMatnr(String code,String matnr);

    Map<String, String> getWorkShopValue(String aufnr);

    List<Map<String, Object>> findByWorkOrderMarginMonitor();

    List<ProductionOrder> findByAufnrs(List<String> aufnrs);

    List<ProductionOrder> getListByWorkTypeAndAufnr(String workType,String status,String byProductAufnr );
}
