package com.xisc.pm.domain.repository;

import com.xisc.pm.api.dto.PmProContFilterRequestDTO;
import com.xisc.pm.api.dto.PmProContFilterResposeDTO;
import com.xisc.pm.api.dto.PmProContPoolRequestDTO;
import com.xisc.pm.api.dto.PmProContRequestDTO;
import com.xisc.pm.api.dto.PmProContSimpleDTO;
import com.xisc.pm.app.service.autoboard.dto.PmAutoBoardPolicyGroupDTO;
import com.xisc.pm.app.service.autoboard.dto.PmContBoardParam;
import com.xisc.pm.domain.entity.PmProCont;
import com.xisc.pm.domain.vo.CtMainVO;
import com.xisc.pm.domain.vo.QdToLineupResultSteelVO;
import org.hzero.mybatis.base.BaseRepository;

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

/**
 * 生产合同主表资源库
 *
 * @author 曾俊 jun.zeng@hand-china.com 2024-07-29 14:28:16
 */
public interface PmProContRepository extends BaseRepository<PmProCont> {
    
    /**
     * 通过订单编号和租户ID查询生产合同， 生产合同订单标号全表唯一
     * @param orderNo
     * @param tenantId
     * @return
     */
    PmProCont queryByOrderNo(String orderNo , Long tenantId) ;
    
    /**
     * 通过订单编号List和租户ID查询生产合同， 生产合同订单标号全表唯一
     * @param orderNoList
     * @param tenantId
     * @return
     */
    List<PmProCont> queryByOrderNoList(List<String> orderNoList ,  Long tenantId);
    
    /**
     * 通过订单编号List和租户ID查询生产合同， 生产合同订单标号全表唯一
     * @param orderNoList
     * @param tenantId
     * @return
     */
    List<PmProCont> queryByOrderNoList(List<String> orderNoList ,  PmProContRequestDTO pmProContRequest);
    
    /**
     * 通过订单编号List和租户ID删除生产合同， 生产合同订单标号全表唯一
     * @param orderNoList
     * @param tenantId
     * @return 返回删除成功条数
     */
    int deleteByOrderNoList(List<String> orderNoList ,  Long tenantId);

    /**
     * 合同抽取查询
     * @param pmProContFilterRequest
     * @return
     */
    List<PmProContFilterResposeDTO> orderFilterList(PmProContFilterRequestDTO pmProContFilterRequest);
    
    /**
     * 获取合同信息
     * @param orderNoList
     * @param tenantId
     * @param mscLineNo
     * @return
     */
    Map<String ,PmProContFilterResposeDTO> orderFilterMap(List<String> orderNoList ,  Long tenantId , String mscLineNo);

    /**
     * 更加合同跟踪主表数据初步生成生产合同数据
     * @param ctMainVOs
     * @param pmProContPoolRequestDTO
     * @return
     */
    List<PmProCont> createProContList(List<CtMainVO> ctMainVOs, PmProContPoolRequestDTO pmProContPoolRequestDTO , List<String> orderNoList);

    /**
     * 查询合同简要信息
     * @param tenantId
     * @param orderNo
     * @param stNo
     * @return
     */
    List<PmProContSimpleDTO> selectProContSimpleList(Long tenantId, String orderNo, String stNo);
    
    /**
     * 自动组板查询合同信息
     * @param policyGroup
     * @param tenantId
     * @return
     */
    List<PmContBoardParam> selectAutoBoardContList(PmAutoBoardPolicyGroupDTO policyGroup , Long tenantId);

    /**
     * 根据合同产线查询板坯位置代码
     *
     * @param orderNoList
     * @param mscLineNoList
     * @param tenantId
     * @return
     */
    List<QdToLineupResultSteelVO> selectSlabPlaceCode(List<String> orderNoList, List<String> mscLineNoList, Long tenantId);

    /**
     * 根据合同查询对应合约欠量
     * @param splitOrderNoList
     * @param tenantId
     * @return
     */
    List<CtMainVO> queryOrderRemNumByOrderNoList(List<String> splitOrderNoList, Long tenantId);

    /**
     * 根据合同号查询
     *
     * @param orderNoList
     * @param tenantId
     * @return
     */
    List<PmProCont>  selectByOrderList(List<String> orderNoList, Long tenantId);
}
