package com.xisc.pm.app.service.strategy.formplatemode;

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

import org.springframework.beans.factory.InitializingBean;

import com.xisc.pm.api.dto.PmCompositeBoardDTO;
import com.xisc.pm.api.dto.PmCompositeSlabCalcDTO;
import com.xisc.pm.api.dto.PmProContFilterResposeDTO;
import com.xisc.pm.api.dto.PmProContYieldRequestDTO;
import com.xisc.pm.domain.entity.PmProContProdTtr;
import com.xisc.pm.domain.entity.PmSmallPltPos;
import com.xisc.pm.infra.enums.FormPlateMode;

/**
 * 切断策略接口
 * 
 * @author jun.zeng
 *
 */
public interface FormPlateModeStrategy extends InitializingBean {
    
    /**
     * 创建组板信息
     * @param pmSmallPltPoss
     * @param axisPmProContProdTtr
     * @param mscLineNo
     * @param tenantId
     * @return
     */
    PmCompositeBoardDTO buildPmCompositeBoard(FormPlateMode formPlateMode,List<PmSmallPltPos> pmSmallPltPoss , PmProContProdTtr axisPmProContProdTtr , String mscLineNo , Long tenantId);
    
    /**
     * 通过材料号获取母板终点位置数组
     * @param FormPlateMode 组板方式
     * @param matNo 虚拟板坯号
     * @param tenantId 租户Id
     * @param rollLineNo 轧制产线号
     * @param axisPmProContProdTtr 轴合同生产属性
     * @return
     */
    List<BigDecimal> motherableEndPosList(FormPlateMode formPlateMode ,String matNo , Long tenantId, String rollLineNo , PmProContProdTtr axisPmProContProdTtr);

    /**
     * 最大的Block个数
     * 
     * @return
     */
    int maxBlockNum();

    /**
     * 最大的合同数
     * 
     * @return
     */
    int maxOrderNum();

    /**
     * 初始化检验与参数初始化 返回母板长度数组 异宽个数 异宽位置数组 取板方式_长度方向 取板方式_宽度方向 热处理类型
     * 
     * @param filterOrderMap       合同信息
     * @param pmProContYield       组板参数
     * @param axisPmProContProdTtr 轴合同生产属性
     */
    PmCompositeSlabCalcDTO checkAndInitParams(Map<String, PmProContFilterResposeDTO> filterOrderMap,
            PmProContYieldRequestDTO pmProContYield, PmProContProdTtr axisPmProContProdTtr);
    
    /**
     * 汇总所有小板重量
     *
     * @param pmProContProdTtrs
     * @param pmProContYield
     * @return
     */
    BigDecimal getSumPlateWt(Map<String, PmProContProdTtr> pmProContProdTtrs, PmProContYieldRequestDTO pmProContYield);

}
