package com.xisc.pm.app.service;

import com.xisc.pm.api.dto.PmCompositeSlabCalcDTO;
import com.xisc.pm.api.dto.PmPdCcSlabLineDTO;
import com.xisc.pm.api.dto.PmPdCcSlabOrderDTO;
import com.xisc.pm.api.dto.PmPdCcSlabReqDetailDTO;
import com.xisc.pm.api.dto.PmPdCcSlabReqParamDTO;
import com.xisc.pm.api.dto.PmPdCcSlabResDTO;
import com.xisc.pm.api.dto.PmPdCcSlabResDetailDTO;
import com.xisc.pm.api.dto.PmProContFilterResposeDTO;
import com.xisc.pm.api.dto.PmProContYieldCopyRequestDTO;
import com.xisc.pm.api.dto.PmProContYieldRequestDTO;
import com.xisc.pm.api.dto.PmProContYieldResposeDTO;
import com.xisc.pm.domain.entity.PmContMscTech;
import com.xisc.pm.domain.entity.PmPdCcSlab;
import com.xisc.pm.domain.entity.PmProContProdTtr;

import io.choerodon.core.domain.Page;
import io.choerodon.mybatis.pagehelper.domain.PageRequest;

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

/**
 * 组板连铸板坯表(PmPdCcSlab)应用服务
 *
 * @author 纪文桃 wentao.ji01@hand-china.com
 * @since 2024-07-31 16:36:58
 */
public interface PmPdCcSlabService {

    /**
     * 查询数据
     *
     * @param dto      查询参数
     * @param tenantId 租户
     * @return
     */
    PmPdCcSlabResDTO selectList(PmPdCcSlabReqParamDTO dto, Long tenantId);

    /**
     * 查询板坯信息
     *
     * @param dto      查询参数
     * @param tenantId 租户
     * @return
     */
    List<PmPdCcSlabLineDTO> listSlabForui(PmPdCcSlabReqParamDTO dto, Long tenantId);

    /**
     * 查询该合同号下的订单信息
     *
     * @param slabNo   虚拟板坯号
     * @param tenantId 租户
     * @return
     */
    List<PmPdCcSlabOrderDTO> listOrderForui(String slabNo, Long tenantId);

    /**
     * 基于收得率结果生产连铸钢组板结果
     *
     * @param pmProContYield        收得率计算参数
     * @param filterOrderMap        合同集合
     * @param pmCompositeSlabCalc   第一阶段收得率计算中间数据
     * @param pmProContYieldRespose 收得率最终计算结果
     * @param axisPmProContProdTtr 
     * @param axisPmContMscTech 
     */
    PmPdCcSlab createPmPdCcSlab(PmProContYieldRequestDTO pmProContYield,
                          Map<String, PmProContFilterResposeDTO> filterOrderMap, PmCompositeSlabCalcDTO pmCompositeSlabCalc,
                          PmProContYieldResposeDTO pmProContYieldRespose, PmContMscTech axisPmContMscTech, PmProContProdTtr axisPmProContProdTtr);

    /**
     * 复制
     *
     * @param pmProContYieldCopy
     */
    void copyPmPdCcSlab(PmProContYieldCopyRequestDTO pmProContYieldCopy);

    /**
     * 出钢材组板材料明细查询
     *
     * @param pageRequest 分页参数
     * @param dto         查询参数
     * @param tenantId    租户
     * @return
     */
    Page<PmPdCcSlab> detaillist(PageRequest pageRequest, PmPdCcSlabReqDetailDTO dto, Long tenantId);

    /**
     * 记录勾选
     *
     * @param virtualSlabNoList 虚拟板坯号集合
     * @param tenantId          租户
     * @return
     */
    PmPdCcSlabResDetailDTO recordCheck(List<PmPdCcSlab> pmPdCcSlabList ,List<String> virtualSlabNoList, Long tenantId);
    
    /**
     * 记录勾选
     *
     * @param virtualSlabNoList 虚拟板坯号集合
     * @param tenantId          租户
     * @return
     */
    List<PmPdCcSlabResDetailDTO> recordCheckGroupByVirtualSlabNo(List<String> virtualSlabNoList, Long tenantId);

    /**
     * 组板解散
     *
     * @param tenantId          租户
     * @param virtualSlabNoList 虚拟板坯号集合
     */
    void disband(Long tenantId, List<String> virtualSlabNoList);
}

