package com.xisc.pm.app.service;

import com.xisc.pm.api.dto.PmCastInfoResDTO;
import com.xisc.pm.api.dto.PmPonoWtInfoResDTO;
import com.xisc.pm.api.dto.PmSlabEstaPlanDissoDTO;
import com.xisc.pm.api.dto.PmSlabEstaPlanReqParamDTO;
import com.xisc.pm.api.dto.ctevent.PmSlabPreCastingDTO;
import com.xisc.pm.domain.entity.PmSlabEstaPlan;
import com.xisc.pm.domain.entity.PmSlabMerge;
import com.xisc.pm.domain.entity.PmSlabPoolIn;
import com.xisc.pm.domain.entity.PmSmallPltPos;
import io.choerodon.core.domain.Page;
import io.choerodon.mybatis.pagehelper.domain.PageRequest;

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

/**
 * 组炉编制表(PmSlabEstaPlan)应用服务
 *
 * @author 纪文桃 wentao.ji01@hand-china.com
 * @since 2024-08-09 16:31:17
 */
public interface PmSlabEstaPlanService {

    /**
     * 查询数据
     *
     * @param pageRequest     分页参数
     * @param pmSlabEstaPlans 查询条件
     * @return 返回值
     */
    Page<PmSlabEstaPlan> selectList(PageRequest pageRequest, PmSlabEstaPlan pmSlabEstaPlans);

    /**
     * 组炉命定浇次信息查询
     *
     * @param dto      查询参数
     * @param tenantId 租户
     * @return
     */
    List<PmCastInfoResDTO> listCast(PmSlabEstaPlanReqParamDTO dto, Long tenantId);

    /**
     * 组炉命定炉次信息查询
     *
     * @param precCastLotNo 预定CAST_LOT号
     * @param tenantId      租户
     * @return
     */
    List<PmPonoWtInfoResDTO> list(String precCastLotNo, Long tenantId);

    /**
     * 组炉命定炉内板坯信息查询
     *
     * @param precPono 预定castLot号
     * @param tenantId 租户
     * @return
     */
    List<PmSlabEstaPlan> listLine(String precPono, Long tenantId);

    /**
     * 命定提交
     *
     * @param precCastLotNoList 预定castLot号集合
     * @param tenantId          租户
     */
    void commit(List<String> precCastLotNoList, Long tenantId);

    /**
     * 命令确认
     *
     * @param pmSlabEstaPlanList 组炉编制数据
     * @param tenantId           租户
     */
    List<PmSlabPreCastingDTO> comfirm(List<PmSlabEstaPlan> pmSlabEstaPlanList, Long tenantId);

    /**
     * 命令收回
     *
     * @param castLotNoList castLot号集合
     * @param tenantId      租户
     */
    void recover(List<String> castLotNoList, Long tenantId);

    /**
     * 解散到组矩、解散到组板
     *
     * @param dto      入参
     * @param tenantId 租户
     */
    void dissolution(PmSlabEstaPlanDissoDTO dto, Long tenantId, boolean flag);

    /**
     * 组炉完成
     * @param precCastLotNoList castLot号集合
     * @param tenantId 租户
     */
    void complete(List<String> precCastLotNoList, Long tenantId);

    /**
     * 抛合同
     *
     * @param pmSlabEstaPlanList
     * @param mergePmSlabMap
     * @param pmcCcSlabMap
     * @param pmSmallPltPosMap
     * @param poolInMap
     * @param pdMatStatus
     * @param csPrecPlanStatus
     * @param procCd
     * @param wholeBacklogCode
     * @return
     */
    List<PmSlabPreCastingDTO> commandAbandonContract(List<PmSlabEstaPlan> pmSlabEstaPlanList, Map<String, List<PmSlabMerge>> mergePmSlabMap,
                                                            Map<String, String> pmcCcSlabMap, Map<String, List<PmSmallPltPos>> pmSmallPltPosMap,
                                                            Map<String, PmSlabPoolIn> poolInMap, String pdMatStatus,
                                                            String csPrecPlanStatus, String procCd, String wholeBacklogCode);
}

