package com.zd.airbottle.mapper;

import java.util.List;

import com.zd.airbottle.domain.QpUseRecord;
import com.zd.airbottle.domain.vo.QpAirGoodsConfigRelationVo;
import com.zd.airbottle.domain.vo.QpUseRecordVo;
import com.zd.airbottle.domain.vo.report.AirAmount;
import org.apache.ibatis.annotations.Param;

/**
 * 使用记录Mapper接口
 */
public interface QpUseRecordMapper {
    /**
     * 查询使用记录
     *
     * @param id 使用记录主键
     * @return 使用记录
     */
    QpUseRecord selectQpUseRecordById(Long id);

    /**
     * 查询使用记录列表
     *
     * @param qpUseRecord 使用记录
     * @return 使用记录集合
     */
    List<QpUseRecord> selectQpUseRecordList(QpUseRecord qpUseRecord);

    /**
     * 新增使用记录
     *
     * @param qpUseRecord 使用记录
     * @return 结果
     */
    int insertQpUseRecord(QpUseRecord qpUseRecord);

    /**
     * 修改使用记录
     *
     * @param qpUseRecord 使用记录
     * @return 结果
     */
    int updateQpUseRecord(QpUseRecord qpUseRecord);

    /**
     * 删除使用记录
     *
     * @param id 使用记录主键
     * @return 结果
     */
    int deleteQpUseRecordById(Long id);

    /**
     * 批量删除使用记录
     *
     * @param ids 需要删除的数据主键集合
     * @return 结果
     */
    int deleteQpUseRecordByIds(Long[] ids);

    /**
     * 根据气瓶ID查询尚未归还的记录
     *
     * @param storageId 气瓶ID
     * @return 未归还数量
     */
    Integer isUse(@Param("storageId") Long storageId);

    /**
     * 用气量统计
     *
     * @param airName 气体名称
     * @return 数据集合
     */
    List<AirAmount> calcRepertory(@Param("airName") String airName);

    /**
     * 用气量信息统计
     *
     * @param airName 气体名称
     * @return 数据集合
     */
    List<AirAmount> calcAmount(String airName);

    /**
     * 气瓶申请统计
     * @param airName 气体名称
     * @return 数据集合
     */
    List<AirAmount> calcApply(String airName);

    /***
     * 根据入库id查询使用记录
     */
    List<QpUseRecordVo> getUseDetailsList(QpUseRecord qpUseRecord);

    /***
     * 当前登录人 申请并入库的气瓶使用记录
     */
    List<QpUseRecordVo> getUseDetailsListByUserId(QpUseRecord qpUseRecord);

    /***
     *当前登录人 气瓶使用记录-带规格
     */
    List<QpAirGoodsConfigRelationVo> getUseRecordSpecsList(QpAirGoodsConfigRelationVo vo);

    /**
     * 气瓶使用记录查询
     */
    List<QpUseRecordVo> getUseDetailsListByStorageId(QpUseRecordVo useRecordVo);

    /**
     * 信息统计查询使用记录列表
     * @param storageId 库存主ID
     * @return 集合对象
     */
    List<QpUseRecordVo> getBottleInfoByStorageId(@Param("storageId") Long storageId);

    /**
     * 根据业务数据ID获取使用记录
     * @param masterIds 业务数据主键（气瓶入库主键）
     * @return 结果
     */
    List<QpUseRecord> getInUseByStorageIds(List<Long> masterIds);

    /***
     * 根据入库id查询气瓶最后一条使用记录
     * @param storageId
     * @return
     */
    QpUseRecord selectQpUseRecordByIdstorageId(Long storageId);
}
