package com.sw.mes.plan.service;

import com.sw.mes.core.base.BaseService;
import com.sw.mes.core.annotation.ServiceLogs;
import com.sw.mes.base.factory.product.entity.FbProductModel;
import com.sw.mes.core.dto.erp.ErpOrderDto;
import com.sw.mes.core.response.Result;
import com.sw.mes.plan.dto.MatchOrderInfo;
import com.sw.mes.plan.entity.FbProductionOrder;

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

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

    FbProductionOrder findByAufnr(String code);

    /**
     * 方棒匹配入库订单号
     *
     * @param grade           圆棒产品等级（如果有圆棒最终评级就传最终，没有就传圆棒产品等级）
     * @param specifications  规格
     * @param conductiveType  导电型号
     * @param dopant          掺杂剂
     * @param sticksCount     拼数
     * @param wareHouseLength 长度（拼棒则传总长）
     * @param orderType       订单类型
     * @param checkoutName    检验类型
     * @param productLevelFb  方棒评级
     * @param sectionType     晶段类型
     * @return 匹配到的订单信息
     */
    @ServiceLogs(description = "方棒匹配报工料号和订单")
    MatchOrderInfo matchOrder(String sn, String grade, String specifications, String conductiveType, String dopant, Integer sticksCount,
                              BigDecimal wareHouseLength, String orderType, String checkoutName, String productLevelFb, String sectionType, String sideLengthRange);

    @ServiceLogs(description = "方棒匹配报工料号")
//录入方棒检验/评级
    FbProductModel matchOrderProductModel(String sn, String grade, String specifications, String conductiveType, String dopant, String productLevelFb, String sectionType, String sideLengthRange);

    @ServiceLogs(description = "方棒匹配报工订单")
//发起入库
    MatchOrderInfo matchOrder(String sn, String productNo, String orderType);

    @ServiceLogs(description = "方棒匹配报工订单")
//方棒录入/评级/发起入库
    MatchOrderInfo getMatchOrderInfo(String sectionNo, String orderType, FbProductModel fbProductModel, String sideLengthRange);

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

    Result handleErpOrder(List<ErpOrderDto> fbErpOrderDto);

    List<FbProductionOrder> findByGstrpAndGltrpAndStatusAndAuart(List<String> list, String status);
}
