package com.sw.mes.plan.service;

import com.sw.mes.core.base.BaseService;
import com.sw.mes.core.dto.FbDeviceSchedule;
import com.sw.mes.core.dto.FbDeviceScheduleParam;
import com.sw.mes.core.dto.RankResultDto;
import com.sw.mes.plan.dto.BatchSchedulingDto;
import com.sw.mes.plan.dto.ProductionOrderCountDto;
import com.sw.mes.plan.dto.SchedulingInfoDto;
import com.sw.mes.plan.entity.FbProductionOrder;
import com.sw.mes.plan.entity.FbProductionSchedule;

import java.util.List;
import java.util.Map;

/**
 * @Author
 * @Description：
 * @Date:
 * @Modified By:
 */
public interface FbProductionScheduleService extends BaseService<FbProductionSchedule> {
    void batchScheduling(BatchSchedulingDto dto);

    Map<Long, ProductionOrderCountDto> getProductionScheduleData();

    /**
     * 自动排程：截断机、开方磨削机
     */
    void autoScheduling();

    /**
     * 自动关闭排程：截断机、开方磨削机
     */
    void autoCloseScheduling();

    /**
     * 截断 自动排程
     */
    void cutAutoScheduling();

    /**
     * 开方磨削 自动排程
     */
    void trimAutoScheduling();

    List<SchedulingInfoDto> getSchedulingInfo();

    /**
     * 圆棒匹配方棒加工订单
     *
     * @param specs          规格
     * @param conductiveType 导电型号
     * @param dopant         掺杂剂
     * @param productLevel   产品等级
     * @return 方棒订单号
     */
    String findProductionScheduleCode(String specs, String conductiveType, String dopant, String productLevel);

    FbDeviceSchedule findFbDeviceSchedule(FbDeviceScheduleParam fbDeviceScheduleParam);

    String findProductionScheduleCodePro(RankResultDto rankResultDto);

    FbProductionSchedule findByDeviceNoAndStatus(String deviceNo, Integer status);

    /**
     * 修改订单状态
     * @param order
     * @param state
     */
    void setOrderSchedule(FbProductionOrder order, int state);
}
