using langguanApi.Common.Redis; using langguanApi.Common; using langguanApi.Extensions.AutoDI; using langguanApi.Model; using System.Linq.Expressions; using langguanApi.Common.Proxy; using langguanApi.Model.Dto; namespace langguanApi.Service { /// /// HomeService /// [ServiceInjection(InjectionType.Singleton)] public class HomeService { private DeviceService _deviceService; private Hj212Service _hj212Service; private readonly IConfiguration _configuration; private CacheManager _cacheManager; private readonly WeatherService _weatherService; private readonly AlertService _alertService; private readonly DetectionService _detectionService; private HttpProxy _httpProxy; /// /// HomeService /// /// /// public HomeService(DeviceService device, Hj212Service hj212Service, IConfiguration configuration, CacheManager cacheManager, WeatherService weatherService, AlertService alertService, DetectionService detectionService, HttpProxy httpProxy) { _deviceService = device; _hj212Service = hj212Service; _configuration = configuration; _cacheManager = cacheManager; _weatherService = weatherService; _alertService = alertService; _detectionService = detectionService; _httpProxy = httpProxy; } /// /// view /// /// public async Task View() { var devices = await _deviceService.GetAsync(); var cleanData = new { Yesterday = 0.8, LastWeek = 0.6, }; // 首页热力图 var hotmap = new { }; // 首页设备报警数据 var alerts = await _alertService.IndexData(); // 首页设备检测数据 var detections = await _detectionService.GetIndexData(); // 获取天气信息,缓存1小时,如果不存在,则调用WeatherService获取 Func> getWeatherFunc = async () => await _weatherService.GetWeather(); var weather = await _cacheManager.GetConvertVale(RedisKeylist.Weather, getWeatherFunc, 60 * 60); // 获取空气质量,缓存2小时,如果不存在,则调用WeatherService获取 Func> getAriQualityFunc = async () => await _weatherService.GetAirQuality(); var ariQuality = await _cacheManager.GetConvertVale(RedisKeylist.AriQuality, getAriQualityFunc, 60 * 120); Func> getTrendFunc = async () => await _hj212Service.GetIndexData(); var trend = await _cacheManager.GetConvertVale(RedisKeylist.Trend, getTrendFunc, 60 * new Random().Next(70)); // 获取远程接口污染物排放率 var rateResp = await _httpProxy.Get>>(null, _configuration.GetValue("Apis:RateUrl")); var rate = rateResp.data.ToList().Take(6); var AlermResp = await _httpProxy.Get>(null, _configuration.GetValue("Apis:AlertUrl")); // alerts += await _httpProxy.Get(null, _configuration.GetValue("Apis:AlertUrl")); // alerts += await _httpProxy.Get(null, _configuration.GetValue("Apis:RateUrl")); //首页清洁运输比例 var cleaData = new { yesterday = 0.8, lastWeek = 0.6 }; var d1 = await _hj212Service.GetTodayData(); Func> getTodayFunc = async () => await _hj212Service.GetTodayData(); var today = await _cacheManager.GetConvertVale(RedisKeylist.Today, getTodayFunc, 60 * 30); return new ApiResult { code = 0, data = new { home = new { center = new { lon = _configuration.GetValue("Home:Center:Lon"), lat = _configuration.GetValue("Home:Center:Lat"), }, title = _configuration.GetValue("Home:Title"), }, devices, hotmap, weather, ariQuality, rate, trend, alerts= AlermResp.data.List, cleanData, today, getViewTop = "", detections } }; } } }