package cn.iocoder.yudao.module.smartfactory.service.screendata;

import cn.iocoder.yudao.module.smartfactory.controller.admin.screendata.factory.vo.*;

import java.util.List;

/**
 * 大屏数据 Service 接口
 *
 * @author 姚君
 */
public interface ScreenDataService {

    /**
     * 大屏全局省份/省/市工厂数据
     * adcode是null，就查询全部省份数据
     *
     * @param code 省/市/区编码
     * @return 显示数据
     */
    List<ProvincesDataRespVO> getProvincesData(String code);


    /**
     * 查询员工数据
     * factoryId是null，查询所有工厂员工数据
     *
     * @param factoryId 工厂ID ，
     * @return
     */
    StaffDataRespVO getStaffData(Long factoryId);

    /**
     * 查询资产数据
     *
     * @param factoryId factoryId是null，查询所有工厂资产数据
     * @return
     */
    PropertyDataRespVO getPropertyData(Long factoryId);


    /**
     * 查询工厂运营数据
     *
     * @param factoryId factoryId是null，查询所有工厂运营数据
     * @return
     */
    OperateDataRespVO getFactoryOperateData(Long factoryId);

    /**
     * 大屏工厂滚屏数据查询
     *
     * @return
     */
    List<FactoryRollDataRespVO> getFactoryRollData();

    /**
     * 获取工厂监控设备集合
     *
     * @param factoryId
     * @return
     */
    List<FactoryCameraDataRespVO> getFactoryCamerasData(Long factoryId);

    /**
     * 获取工厂对应城市的天气数据
     *
     * @param factoryId
     * @return
     */
    FactoryWeatherDataRespVO getFactoryWeatherInfo(Long factoryId);

    /**
     * 根据类型获取工厂打包线数据
     *
     * @param factoryId
     * @return
     */
    List<FactoryPackLineInfoVO> getFactoryPackLineInfo(Long factoryId);

    /**
     * 获取阿里云地区
     *
     * @param code
     * @param type
     * @return
     */
    String getAliYunGeo(String code, Integer type);

    /**
     * 获取大屏数据总揽
     *
     * @return
     */
    DataOverviewVO getDataOverview();

    /**
     * 获取大屏出入库
     *
     * @return
     */
    List<InboundAndOutboundOverviewVO> getInboundAndOutboundOverview();

    /**
     * 优等率排行
     *
     * @return
     */
    List<ExcellentRateRankingVO> excellentRateRanking();

    /**
     * 节能减排
     *
     * @return
     */
    List<EnergyConservationVO> energyConservation(Long factoryId);

    /**
     * 获取工厂出入库情况
     *
     * @param factoryId
     * @return
     */
    ObtainFactoryInboundAndOutboundStatusVO getObtainFactoryInboundAndOutboundStatus(Long factoryId);
}