package com.zd.airbottle.service;

import com.zd.airbottle.domain.QpUseRecord;
import com.zd.airbottle.domain.dto.QpUseRecordDto;
import com.zd.airbottle.domain.vo.QpAirGoodsConfigRelationVo;
import com.zd.airbottle.domain.vo.QpUseRecordVo;
import com.zd.airbottle.domain.vo.report.AirAmount;
import com.zd.airbottle.domain.vo.report.WebUseRecordVo;

import java.util.List;

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

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

    /**
     * 新增使用记录
     *
     * @param recordDto 使用记录
     * @return 结果
     */
    Integer insertQpUseRecord(QpUseRecordDto recordDto);

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

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

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

    /**
     * 查询使用记录拓展列表
     *
     * @param list 使用记录
     * @return 使用记录集合
     */
    List<QpUseRecordVo> getListVo(List<QpUseRecord> list);

    /**
     * 出入库信息统计
     * @param airName 气体名称
     * @return 数据集合
     */
    List<AirAmount> calcRepertory(String airName);

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

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

    /**
     * 管理端端获取使用记录详细信息
     * @param id 记录ID
     * @return 组合数据
     */
    WebUseRecordVo getBottleInfo(Long id);

    /***
     * 根据入库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(Long storageId);

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

    WebUseRecordVo getBottleRecord(Long storageId);

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