package com.aegis.resource.dashboard.mapper;

import java.util.List;
import java.util.Map;
import org.apache.ibatis.annotations.Param;
import com.aegis.resource.dashboard.vo.InventoryAlertVO;

/**
 * 资源看板Mapper接口
 * 
 * @author aegis
 */
public interface ResourceDashboardMapper {
    
    /**
     * 统计队伍各状态数量
     * 
     * @return 状态统计Map（key为状态，value为数量，可能是Long或Integer）
     */
    Map<String, Object> countTeamByStatus();
    
    /**
     * 统计车辆各状态数量
     * 
     * @return 状态统计Map
     */
    Map<String, Object> countVehicleByStatus();
    
    /**
     * 统计专家各状态数量
     * 
     * @return 状态统计Map
     */
    Map<String, Object> countExpertByStatus();
    
    /**
     * 统计装备各状态数量
     * 
     * @return 状态统计Map
     */
    Map<String, Object> countEquipmentByStatus();
    
    /**
     * 统计物资分类总数
     * 
     * @return 分类总数
     */
    Integer countMaterialCategory();
    
    /**
     * 统计物资总数
     * 
     * @return 物资总数
     */
    Integer countMaterial();
    
    /**
     * 统计采购各状态数量
     * 
     * @return 状态统计Map
     */
    Map<String, Object> countProcurementByStatus();
    
    /**
     * 统计征用各状态数量
     * 
     * @return 状态统计Map
     */
    Map<String, Object> countRequisitionByStatus();
    
    /**
     * 查询库存预警列表（低于阈值的物资）
     * 
     * @return 库存预警列表
     */
    List<InventoryAlertVO> selectInventoryAlerts();
    
    /**
     * 统计资源使用趋势（物资消耗）
     * 
     * @param days 统计天数（默认7天）
     * @return 每日消耗数量列表
     */
    List<Map<String, Object>> selectMaterialConsumeTrend(@Param("days") Integer days);
    
    /**
     * 统计资源使用趋势（物资归还）
     * 
     * @param days 统计天数（默认7天）
     * @return 每日归还数量列表
     */
    List<Map<String, Object>> selectMaterialReturnTrend(@Param("days") Integer days);
    
    /**
     * 统计资源使用趋势（装备分配）
     * 
     * @param days 统计天数（默认7天）
     * @return 每日分配数量列表
     */
    List<Map<String, Object>> selectEquipmentAssignTrend(@Param("days") Integer days);
    
    /**
     * 统计资源使用趋势（装备释放）
     * 
     * @param days 统计天数（默认7天）
     * @return 每日释放数量列表
     */
    List<Map<String, Object>> selectEquipmentReleaseTrend(@Param("days") Integer days);
}