package com.xisc.pm.domain.repository;

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.QdToPoLineCombVO;
import com.xisc.pm.domain.vo.QdToPoOrderVO1;
import org.hzero.mybatis.base.BaseRepository;

import java.util.List;
import java.util.Set;

/**
 * MES合同主档(QdToPoOrder)资源库
 *
 * @author 蒋雨航 yuhang.jiang02@hand-china.com
 * @since 2024-08-14 15:44:31
 */
public interface PmQdToPoOrderRepository extends BaseRepository<QdToPoOrderVO1> {
    /**
     * 查询
     *
     * @param qdToPoOrderVO1 查询条件
     * @return 返回值
     */
    List<QdToPoOrderVO1> selectList(QdToPoOrderVO1 qdToPoOrderVO1);

    /**
     * 根据合同收池条件，查询合同信息
     *
     * @param
     * @return
     */
    List<PmProContPoolResposeDTO> selectByOrderNoList(PmProContPoolRequestDTO request);

    /**
     * 根据主键查询（可关联表）
     *
     * @param pomId 主键
     * @return 返回值
     */
    QdToPoOrderVO1 selectByPrimary(Long pomId);

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

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

    /**
     * 查询试样标记合同
     *
     * @param orderNoList
     * @param tenantId
     * @return
     */
    Set<String> qdToLineupResultSampleOrderList(List<String> orderNoList, Long tenantId);
    
    /**
     * 查询试样标记合同（不包含指定状态）
     * 
     * @param orderNoList
     * @param tenantId
     * @return
     */
    Set<String> qdToLineupResultSampleAllOrderList(List<String> orderNoList, Long tenantId);

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


    /**
     * 通过合同号查询合同信息
     * @param orderNo
     * @param tenantId
     * @return
     */
    QdToPoOrderVO1 selectByOrderNo(String orderNo, Long tenantId);

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

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

    /**
     * 根据合同产线查询
     *
     * @param orderNoList
     * @param mscLineNo
     * @param tenantId
     * @return
     */
    List<QdToPoLineCombVO> selectQdToPoLineCombList(List<String> orderNoList, List<String> mscLineNo, Long tenantId);

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