diff --git a/langguanApi.xml b/langguanApi.xml index e227f9c..a539827 100644 --- a/langguanApi.xml +++ b/langguanApi.xml @@ -29,6 +29,11 @@ 缓存天气信息 + + + 缓存ARI数据 + + 缓存清洁数据 @@ -2228,6 +2233,67 @@ + + + 爬空气质量数据 + + + + + + 空气质量key + + + + + 空气质量指数数值 + + + + + 空气质量指数级别 + + + + + 空气质量指数标准 + + + + + 空气质量数据 + + + + + 一氧化碳 + + + + + 二氧化氮 + + + + + 臭氧 + + + + + PM10 + + + + + PM25 + + + + + 二氧化硫 + + 54511 diff --git a/langguanApi/Common/Redis/RedisKeylist.cs b/langguanApi/Common/Redis/RedisKeylist.cs index e1364a6..a3a3b77 100644 --- a/langguanApi/Common/Redis/RedisKeylist.cs +++ b/langguanApi/Common/Redis/RedisKeylist.cs @@ -8,6 +8,10 @@ /// public static string Weather = "weather"; /// + /// 缓存ARI数据 + /// + public static string AriQuality = "arqulaty"; + /// /// 缓存清洁数据 /// public static string CleanData = "cleandata"; diff --git a/langguanApi/Service/Hj212Service.cs b/langguanApi/Service/Hj212Service.cs index 80cb919..8d00e74 100644 --- a/langguanApi/Service/Hj212Service.cs +++ b/langguanApi/Service/Hj212Service.cs @@ -40,7 +40,7 @@ namespace langguanApi.Service /// /// /// - public async Task> GetViewTop(int hours = -10) + public async Task> GetViewTop(int hours = -5) { var date = DateTime.Now.AddHours(-8).AddHours(hours); Expression> exp = filter => filter.CreateDateTime >= date; diff --git a/langguanApi/Service/HomeService.cs b/langguanApi/Service/HomeService.cs index f95816a..f9550a8 100644 --- a/langguanApi/Service/HomeService.cs +++ b/langguanApi/Service/HomeService.cs @@ -41,7 +41,6 @@ namespace langguanApi.Service public async Task View() { var devices = await _deviceService.GetAsync(); - var ariQuality = ""; var cleanData = new { Yesterday = 0.8, @@ -55,6 +54,8 @@ namespace langguanApi.Service // 获取天气信息,缓存1小时,如果不存在,则调用WeatherService获取 Func> getWeatherFunc = async () => await _weatherService.GetWeather(); var weather = await _cacheManager.GetConvertVale(RedisKeylist.Weather, getWeatherFunc, 60 * 60); + Func> getAriQualityFunc= async () => await _weatherService.GetAirQuality(); + var ariQuality = await _cacheManager.GetConvertVale(RedisKeylist.AriQuality, getAriQualityFunc, 60 * 120); return new ApiResult { code = 0, diff --git a/langguanApi/Service/WeatherService.cs b/langguanApi/Service/WeatherService.cs index f5400aa..d3e0a8f 100644 --- a/langguanApi/Service/WeatherService.cs +++ b/langguanApi/Service/WeatherService.cs @@ -1,5 +1,7 @@ using langguanApi.Extensions.AutoDI; using Newtonsoft.Json; +using NPOI.SS.Formula.Functions; +using System.Reflection; namespace langguanApi.Service { @@ -14,7 +16,7 @@ namespace langguanApi.Service { _httpClientFactory = httpClientFactory; _configuration = configuration; - _logger=logger; + _logger = logger; } /// /// 爬气象局的天气数据% @@ -50,6 +52,203 @@ namespace langguanApi.Service } return null; } + /// + /// 爬空气质量数据 + /// + /// + public async Task GetAirQuality() + { + var client = _httpClientFactory.CreateClient(); + var resp = await client.GetAsync(_configuration.GetSection("AirQuality").Value); + if (resp.IsSuccessStatusCode) + { + var data = await resp.Content.ReadAsStringAsync(); + var air = JsonConvert.DeserializeObject(data); + return Convert2QualityList(air); + } + return null; + } + private List Convert2QualityList(AirQuality airQuality) + { + Type modelType = typeof(AirQuality); + List qualityList = new List(); + PropertyInfo[] PropertyList = modelType.GetProperties(); + foreach (PropertyInfo item in PropertyList) + { + Quality quality = new Quality(); + object value = item.GetValue(airQuality, null); + if (value != null) + { + var tuple = GetStandard(item.Name, value.ToString()); + quality.key = tuple.Item1; + quality.val = value.ToString(); + quality.standard = tuple.Item2; + quality.level = tuple.Item3; + qualityList.Add(quality); + } + } + return qualityList; + } + private Tuple GetStandard(string key, string value) + { + string standard = ""; + string keyword = ""; + string level = ""; + switch (key) + { + case "CO": + keyword = "一氧化碳"; + standard = "0.5μg/m3"; + if (double.Parse(value) >= 0.5) + { + level = "优"; + } + else if (double.Parse(value) >= 0.3) + { + level = "持平"; + } + else + { + level = "差"; + } + break; + case "NO2": + keyword = "二氧化氮"; + standard = "50μg/m3"; + if (double.Parse(value) >= 50) + { + level = "优"; + } + else if (double.Parse(value) >= 150) + { + level = "轻度污染"; + } + else + { + level = "中度污染"; + } + break; + case "O3": + keyword = "臭氧"; + standard = "100μg/m3"; + if (double.Parse(value) >= 100) + { + level = "优"; + } + else if (double.Parse(value) >= 50) + { + level = "持平"; + } + else + { + level = "差"; + } + break; + case "PM10": + keyword = "PM10"; + standard = "50ug/m3"; + if (double.Parse(value) >= 50) + { + level = "优"; + } + else if (double.Parse(value) >= 150) + { + level = "中"; + } + else + { + level = "差"; + } + break; + case "PM2_5": + + keyword = "PM2.5"; + standard = "25ug/m3"; + if (double.Parse(value) >= 25) + { + level = "优"; + } + else if (double.Parse(value) >= 100) + { + level = "中"; + } + else + { + level = "差"; + } + break; + case "SO2": + + keyword = "二氧化硫"; + standard = "15μg/m3"; + if (double.Parse(value) >= 15) + { + level = "优"; + } + else if (double.Parse(value) >= 35) + { + level = "中"; + } + else + { + level = "差"; + } + break; + } + return new Tuple(keyword, standard, level); + } + public class Quality + { + /// + /// 空气质量key + /// + public string key { get; set; } + /// + /// 空气质量指数数值 + /// + public string val { get; set; } + /// + /// 空气质量指数级别 + /// + public string level { get; set; } + /// + /// 空气质量指数标准 + /// + public string standard { get; set; } + } + + /// + /// 空气质量数据 + /// + public class AirQuality + { + // public string Area { get; set; } + // public int CityCode { get; set; } + /// + /// 一氧化碳 + /// + public string CO { get; set; } + /// + /// 二氧化氮 + /// + public string NO2 { get; set; } + /// + /// 臭氧 + /// + public string O3 { get; set; } + /// + /// PM10 + /// + public string PM10 { get; set; } + /// + /// PM25 + /// + public string PM2_5 { get; set; } + /// + /// 二氧化硫 + /// + public string SO2 { get; set; } + } public class Location { /// diff --git a/langguanApi/appsettings.json b/langguanApi/appsettings.json index 26cc5df..8d8d6c5 100644 --- a/langguanApi/appsettings.json +++ b/langguanApi/appsettings.json @@ -16,6 +16,7 @@ "Index": 5 }, "Weather": "https://weather.cma.cn/api/now/54511", //天气预报地址,中国气象 + "AirQuality": "https://air.cnemc.cn:18007/CityData/GetAQIDataPublishLiveInfo?cityCode=110000",//空气质量API地址 "Home": { "Title": "鄂托克旗新航焦化有限公司", "Center": {