package com.zd.airbottle.service;

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

import com.zd.airbottle.domain.QpAirGoodsConfig;
import com.zd.airbottle.domain.vo.QpAirGoodsConfigRelationVo;
import com.zd.airbottle.domain.vo.QpAirGoodsConfigVo;

/**
 * 货物配置Service接口
 *
 * @author zd
 * @date 2022-05-17
 */
public interface IQpAirGoodsConfigService {
    /**
     * 查询货物配置
     *
     * @param id 货物配置主键
     * @return 货物配置
     */
    QpAirGoodsConfig selectQpAirGoodsConfigById(Long id);

    /**
     * 查询货物配置列表
     *
     * @param qpAirGoodsConfig 货物配置
     * @return 货物配置集合
     */
    List<QpAirGoodsConfig> selectQpAirGoodsConfigList(QpAirGoodsConfig qpAirGoodsConfig);

    /**
     * 新增货物配置
     *
     * @param qpAirGoodsConfig 货物配置
     * @return 结果
     */
    int insertQpAirGoodsConfig(QpAirGoodsConfig qpAirGoodsConfig);

    /**
     * 修改货物配置
     *
     * @param qpAirGoodsConfig 货物配置
     * @return 结果
     */
    int updateQpAirGoodsConfig(QpAirGoodsConfig qpAirGoodsConfig);

    /**
     * 批量删除货物配置
     *
     * @param ids 需要删除的货物配置主键集合
     * @return 结果
     */
    int deleteQpAirGoodsConfigByIds(Long[] ids);

    /**
     * 批量删除货物配置
     *
     * @param ids 需要删除的货品主键集合
     * @return 结果
     */
    int deleteByGoogsIds(Long[] ids);

    /**
     * 根据货品ID集合查询货品配置
     *
     * @param googsIds 货品ID集合
     * @return 货品配置集合
     */
    List<QpAirGoodsConfig> getListByGoogsIds(List<Long> googsIds);

    /**
     * 根据配置ID查找其所有上级及其本身，此处待优化，尚未想到合理的方式可以根据配置ID集合批量逆向查询其所有上级
     *
     * @param configIds 配置ID集合
     * @return 以配置ID为key的map集合
     */
    Map<Long, QpAirGoodsConfigVo> getInfoByConfigIds(List<Long> configIds);

    /***
     * 查询供应商配置的气瓶
     */
    List<QpAirGoodsConfigRelationVo> selectQpAirGoodsConfigRelationList(QpAirGoodsConfigRelationVo relationVo);

    /**
     * 获取货物配置信息
     *
     * @param goodsId 货物ID
     * @return 货物配置
     */
    List<QpAirGoodsConfigVo> getGoodsInfo(Long goodsId);

    /**
     * 根据ID集合查询货品配置
     *
     * @param ids 货品ID集合
     * @return 货品配置集合
     */
    List<QpAirGoodsConfigVo> getByIds(List<Long> ids);
}
