package com.xisc.pm.infra.mapper;

import com.xisc.pm.api.dto.PmCompositeSlaParamDTO;
import com.xisc.pm.api.dto.PmCompositeSlabPdDTO;
import com.xisc.pm.api.dto.PmCompositeSlabReqDTO;
import com.xisc.pm.domain.entity.PmCompositeSlab;
import com.xisc.pm.domain.vo.CtDetVO;
import com.xisc.pm.domain.vo.MmPlateVO;
import com.xisc.pm.domain.vo.MmSlabVO;
import com.xisc.pm.domain.vo.QdToPoOrderVO;
import com.xisc.pm.domain.vo.WmInStockVO;
import com.xisc.pm.domain.vo.WmMatSigleVO;
import com.xisc.pm.domain.vo.WmStockInfoVO;
import io.choerodon.mybatis.common.BaseMapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 复合/叠轧坯基本信息表(PmCompositeSlab)应用服务
 *
 * @author 纪文桃 wentao.ji01@hand-china.com
 * @since 2024-08-01 15:46:26
 */
public interface PmCompositeSlabMapper extends BaseMapper<PmCompositeSlab> {
    /**
     * 基础查询
     *
     * @param pmCompositeSlab 查询条件
     * @return 返回值
     */
    List<PmCompositeSlab> selectList(PmCompositeSlab pmCompositeSlab);

    /**
     * 查询
     *
     * @param dto      查询参数
     * @param tenantId 租户
     * @return
     */
    List<PmCompositeSlab> selectSlabIds(@Param("dto") PmCompositeSlabReqDTO dto, @Param("tenantId") Long tenantId);

    /**
     * 查询待组板基材
     * @param dto
     * @return
     */
    List<PmCompositeSlabPdDTO> compositePdList(@Param("dto") PmCompositeSlaParamDTO dto);

    /**
     * 根据材料号查询厚度
     *
     * @param matSigleIdList 材料号集合
     * @param tenantId  租户
     * @return
     */
    List<WmMatSigleVO> selectMatSigleByMatNo(@Param("matSigleIdList") List<Long> matSigleIdList, @Param("tenantId") Long tenantId);

    /**
     *  查询轧钢基材信息
     * @param baseMatIdList 基材id
     * @param tenantId 租户
     * @return
     */
    List<MmPlateVO> selectBaseMatDataByIds(@Param("baseMatIdList")List<Long> baseMatIdList, @Param("tenantId")Long tenantId);

    /**
     * 获取当前用户部门代码
     * @param tenantId 租户
     * @param userId 用户id
     * @return
     */
    List<String> getCurrentUserUintCode(@Param("tenantId")Long tenantId, @Param("userId")Long userId);

    /**
     * 查询库区信息
     *
     * @param stockIdList 库区id
     * @param tenantId    租户
     * @return
     */
    List<WmStockInfoVO> getStockLineById(@Param("stockIdList")List<Long> stockIdList, @Param("tenantId")Long tenantId, @Param("userId")Long userId);

    /**
     * 根据合同查询合约号
     *
     * @param orderNoList 合同号
     * @param tenantId    租户
     * @return
     */
    List<QdToPoOrderVO> selectContractNum(@Param("orderNoList") List<String> orderNoList, @Param("tenantId") Long tenantId);

    /**
     * 根据复合坯号查询进程状态码
     *
     * @param tenantId      租户
     * @param slabNo
     * @return
     */
    List<MmSlabVO> getProcCdByMmSlan(@Param("tenantId") Long tenantId, @Param("slabNo") String slabNo);

    /**
     * 根据基材号查询
     *
     * @param baseMatNoList
     * @param tenantId
     * @return
     */
    List<MmPlateVO> selectPlateByBaseMatNo(@Param("baseMatNoList")List<String> baseMatNoList, @Param("tenantId")Long tenantId);

    /**
     * 根据合同号查询
     *
     * @param orderNoList
     * @param tenantId
     * @return
     */
    List<CtDetVO> selectCtDetByOrderList(@Param("orderNoList")List<String> orderNoList, @Param("tenantId")Long tenantId);

    /**
     * 根据材料号查询
     *
     * @param baseMatNoList
     * @param tenantId
     * @return
     */
    List<WmInStockVO> selectMatPileByMatNo(@Param("baseMatNoList")List<String> baseMatNoList, @Param("tenantId")Long tenantId);
}

