package com.ruoyi.asset.service;

import java.util.List;

import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.asset.domain.TbAssetBorrowRecord;
import com.ruoyi.asset.domain.dto.TbBorrowRecordDTO;
import com.ruoyi.asset.domain.dto.TbCountAssetDTO;
import com.ruoyi.common.core.domain.AjaxResult;
import org.springframework.transaction.annotation.Transactional;

/**
 * 设备借用记录Service接口
 * 
 * @author 原动力
 * @date 2023-03-27
 */
@Transactional
public interface ITbAssetBorrowRecordService extends IService<TbAssetBorrowRecord>
{
    /**
     * 查询设备借用记录
     * 
     * @param id 设备借用记录主键
     * @return 设备借用记录
     */
    public TbAssetBorrowRecord selectTbAssetBorrowRecordById(Long id);

    /**
     * 查询设备借用记录列表
     * 
     * @param tbAssetBorrowRecord 设备借用记录
     * @return 设备借用记录集合
     */
    public List<TbAssetBorrowRecord> selectTbAssetBorrowRecordList(TbAssetBorrowRecord tbAssetBorrowRecord);

    /**
     * 查询设备借用记录列表
     *
     * @param tbAssetBorrowRecord 设备借用记录
     * @return 设备借用记录集合
     */
    public List<TbBorrowRecordDTO> selectTbAssetBorrowRecordDTOList(TbAssetBorrowRecord tbAssetBorrowRecord);

    /**
     * 新增设备借用记录
     * 
     * @param tbAssetBorrowRecord 设备借用记录
     * @return 结果
     */
    public int insertTbAssetBorrowRecord(TbAssetBorrowRecord tbAssetBorrowRecord);

    /**
     * 修改设备借用记录
     * 
     * @param tbAssetBorrowRecord 设备借用记录
     * @return 结果
     */
    public int updateTbAssetBorrowRecord(TbAssetBorrowRecord tbAssetBorrowRecord);

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

    /**
     * 删除设备借用记录信息
     * 
     * @param id 设备借用记录主键
     * @return 结果
     */
    public int deleteTbAssetBorrowRecordById(Long id);

    /**
     * 新增设备借用记录
     *
     * @param tbAssetBorrowRecord 设备借用记录信息
     * @return 结果
     */
    AjaxResult saveBorrowRecord(TbAssetBorrowRecord tbAssetBorrowRecord);

    /**
     * 修改设备借用记录为归还
     *
     * @param barCode 资产条形码
     * @return 结果
     */
    AjaxResult updateBorrowRecordToReturn(String barCode);

    /**
     * 获取用户自己设备借用记录
     *
     * @param status 借用状态
     * @return 设备借用记录集合
     */
    List<TbAssetBorrowRecord> selectMeTbAssetBorrowRecord(Long status);

    /**
     * 获取用户自己设备借用记录详细信息
     *
     * @param id 借用记录ID
     * @return 设备借用记录信息
     */
    TbBorrowRecordDTO selectMeTbAssetBorrowRecordById(Long id);

    /**
     * 统计用户自己设备借用记录
     *
     * @param status 借用状态
     * @return 统计数量
     */
    AjaxResult countMeTbAssetBorrowRecord(Long status);

    /**
     * 根据分类统计借用次数
     */
    List<TbCountAssetDTO> countAssetDto();

    /**
     * 通知未归还借用人
     */
    void informNotReturnUser();
}
