package com.xisc.pm.app.service;

import com.xisc.pm.api.dto.PmPdCcSlabStoveParamDTO;
import com.xisc.pm.api.dto.PmPdCcSlabStoveResDTO;
import com.xisc.pm.api.dto.PmSlabPoolInDTO;
import com.xisc.pm.api.dto.PmSlabPoolInNoReqDTO;
import com.xisc.pm.api.dto.PmSlabPoolInOrderDTO;
import com.xisc.pm.api.dto.PmSlabPoolInPreDTO;
import com.xisc.pm.api.dto.PmSlabPoolInReqParamDTO;
import com.xisc.pm.api.dto.PmSlabPoolInResDTO;
import com.xisc.pm.api.dto.ctevent.PmMaterialCommandDTO;
import com.xisc.pm.domain.entity.PmSlabEstaPlan;

import java.util.List;

/**
 * 组炉收池表(PmSlabPoolIn)应用服务
 *
 * @author 纪文桃 wentao.ji01@hand-china.com
 * @since 2024-08-07 17:11:27
 */
public interface PmSlabPoolInService {

    /**
     * 组炉查询
     *
     * @param dto      查询参数
     * @param tenantId 租户
     * @return
     */
    List<PmPdCcSlabStoveResDTO> listStoveForui(PmPdCcSlabStoveParamDTO dto, Long tenantId);

    /**
     * 组炉收池
     *
     * @param tenantId          租户
     * @param virtualSlabNoList 虚拟板坯号
     */
    void collectPool(Long tenantId, List<String> virtualSlabNoList);

    /**
     * 组炉编制查询
     *
     * @param dto      查询参数
     * @param tenantId 租户
     * @return
     */
    List<PmSlabPoolInResDTO> listFurnaceForui(PmSlabPoolInReqParamDTO dto, Long tenantId);

    /**
     * 组炉编制退池
     *
     * @param tenantId 租户
     * @param dto      查询对象
     */
    void returnPool(Long tenantId, List<PmSlabPoolInOrderDTO> dtoList);

    /**
     * 组炉编制预组炉
     *
     * @param tenantId 租户
     * @param dto      查询对象
     */
    void preGroup(Long tenantId, PmSlabPoolInPreDTO dto);

    /**
     * 组炉编制无委充炉
     *
     * @param tenantId 租户
     * @param dto      入参
     * @return
     */
    List<PmSlabPoolInResDTO> noCommitFurnace(Long tenantId, PmSlabPoolInNoReqDTO dto);

    /**
     * 临时命令信息生成接口
     *
     * @param pmSlabEstaPlanList   组炉编制数据
     * @param tenantId 租户
     */
    List<PmMaterialCommandDTO> tempCommandGeneratInterface(List<PmSlabEstaPlan> pmSlabEstaPlanList, Long tenantId);

    /**
     * 组炉完成
     *
     * @param tenantId 租户
     * @return
     */
    void furnaceComplete(Long tenantId, PmSlabPoolInDTO dto);

    /**
     * 组炉完成执行二次设计操作
     *
     * @param pmSlabEstaPlanList 组炉编制表数据
     * @param tenantId 租户
     */
    void excuteSecondaryDesign(List<PmSlabEstaPlan> pmSlabEstaPlanList, Long tenantId);

    /**
     * 组炉编制-命令提交
     *
     * @param tenantId 租户
     */
    void commandCommit(Long tenantId);
}

