package com.xisc.pm.infra.mapper;

import com.xisc.pm.api.dto.ObtainWitnessPointDTO;
import com.xisc.pm.api.dto.PmProContPoolRequestDTO;
import com.xisc.pm.api.dto.PmProContPoolResposeDTO;
import com.xisc.pm.domain.vo.CtDetVO;
import com.xisc.pm.domain.vo.QdToPoLineCombVO;
import com.xisc.pm.domain.vo.QdToPoOrderVO1;
import io.choerodon.mybatis.common.BaseMapper;
import org.apache.ibatis.annotations.Param;

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

/**
 * MES合同主档(QdToPoOrder)应用服务
 *
 * @author 蒋雨航 yuhang.jiang02@hand-china.com
 * @since 2024-08-14 15:44:31
 */
public interface QdToPoOrderMapper extends BaseMapper<QdToPoOrderVO1> {
    /**
     * 基础查询
     *
     * @param qdToPoOrderVO1 查询条件
     * @return 返回值
     */
    List<QdToPoOrderVO1> selectList(QdToPoOrderVO1 qdToPoOrderVO1);

    /**
     * 合同信息查询
     *
     * @param qdToPoOrderVO1
     * @return
     */
    List<QdToPoOrderVO1> orderList(QdToPoOrderVO1 qdToPoOrderVO1);

    /**
     * 余材板坯充当目标合同查询
     *
     * @return
     */
    List<QdToPoOrderVO1> surplusSlabOrderList(QdToPoOrderVO1 qdToPoOrde);

    /**
     * 查询合同信息
     *
     * @param request
     * @return
     */
    List<PmProContPoolResposeDTO> selectQdToPoOrder(PmProContPoolRequestDTO request);

    /**
     * @param orderNoList
     * @param tenantId
     * @return
     */
    List<String> qdToLineupResultSampleOrderList(@Param("orderNoList") List<String> orderNoList,@Param("tenantId") Long tenantId);

    /**
     * 查询所有，不包含状态
     * @param orderNoList
     * @param tenantId
     * @return
     */
    List<String> qdToLineupResultSampleAllOrderList(@Param("orderNoList") List<String> orderNoList,@Param("tenantId") Long tenantId);

    /**
     * 通过基材合同，查询关联的成品合同
     * @param baseOrderNo
     * @param tenantId
     * @return
     */
    List<String> selectFhbOrderNoByBaseOrderNo(@Param("baseOrderNo") String baseOrderNo,@Param("tenantId") Long tenantId,
                                               @Param("slabType")  String slabType,@Param("qfhQueryFlag") String qfhQueryFlag,
                                               @Param("lovHavingComList")List<String> lovHavingComList,
                                               @Param("lovNotHavingComList")List<String> lovNotHavingComList,
                                               @Param("lovNotHavingComEList")List<String> lovNotHavingComEList);

    /**
     * 获取开始轧制温度
     * @param orderNo
     * @param mscLineNo
     * @param tenantId
     * @return
     */
    BigDecimal queryBeginRollTempByMscLine(@Param("orderNo") String orderNo, @Param("mscLineNo") String mscLineNo , @Param("tenantId") Long tenantId,@Param("slabThk") BigDecimal slabThk);

    /**
     * 中间坯厚度目标MID_SLAB_THK_AIM
     * @param orderNo
     * @param mscLineNo
     * @param tenantId
     * @return
     */
    BigDecimal queryMidSLabThkAim(@Param("orderNo") String orderNo, @Param("mscLineNo") String mscLineNo , @Param("tenantId") Long tenantId);

    /**
     * 根据合同号查询qd_to_po_order信息
     * @param orderNoList
     * @param tenantId
     * @return
     */
    List<QdToPoOrderVO1> selectQdOrderList(@Param("orderNoList") List<String> orderNoList,  @Param("tenantId")Long tenantId);

    /**
     * 根据合同查询在库数-计划数大于0
     * @param orderNoList
     * @param organizationId
     * @return
     */
    List<CtDetVO> selectCtDetByOrderList(@Param("orderNoList") List<String> orderNoList,  @Param("tenantId")Long organizationId);

    /**
     * 获取见证点状态
     *
     * @param orderNoList
     * @param witnessPointList
     * @param tenantId
     * @return
     */
    List<ObtainWitnessPointDTO> selectWitnessOrderPass(@Param("orderNoList")List<String> orderNoList, @Param("witnessPointList")List<String> witnessPointList,
                                                       @Param("tenantId")Long tenantId);

    List<QdToPoLineCombVO> selectQdToPoLineCombList(@Param("orderNoList")List<String> orderNoList, @Param("mscLineNoList")List<String> mscLineNoList,
                                                    @Param("tenantId")Long tenantId);

    /**
     * 查询质量合同产线数据
     *
     * @param orderNoList
     * @param mscLineNoList
     * @param tenantId
     * @return
     */
    List<QdToPoLineCombVO> selectByOrderAndMscLineList(@Param("orderNoList")List<String> orderNoList, @Param("mscLineNoList")List<String> mscLineNoList,
                                                       @Param("tenantId")Long tenantId);
}

