空气质量

This commit is contained in:
yanghongwei 2024-06-13 00:47:19 +08:00
parent 649c2be62d
commit f71dac2ac2
6 changed files with 274 additions and 3 deletions

View File

@ -29,6 +29,11 @@
缓存天气信息
</summary>
</member>
<member name="F:langguanApi.Common.Redis.RedisKeylist.AriQuality">
<summary>
缓存ARI数据
</summary>
</member>
<member name="F:langguanApi.Common.Redis.RedisKeylist.CleanData">
<summary>
缓存清洁数据
@ -2228,6 +2233,67 @@
</summary>
<returns></returns>
</member>
<member name="M:langguanApi.Service.WeatherService.GetAirQuality">
<summary>
爬空气质量数据
</summary>
<returns></returns>
</member>
<member name="P:langguanApi.Service.WeatherService.Quality.key">
<summary>
空气质量key
</summary>
</member>
<member name="P:langguanApi.Service.WeatherService.Quality.val">
<summary>
空气质量指数数值
</summary>
</member>
<member name="P:langguanApi.Service.WeatherService.Quality.level">
<summary>
空气质量指数级别
</summary>
</member>
<member name="P:langguanApi.Service.WeatherService.Quality.standard">
<summary>
空气质量指数标准
</summary>
</member>
<member name="T:langguanApi.Service.WeatherService.AirQuality">
<summary>
空气质量数据
</summary>
</member>
<member name="P:langguanApi.Service.WeatherService.AirQuality.CO">
<summary>
一氧化碳
</summary>
</member>
<member name="P:langguanApi.Service.WeatherService.AirQuality.NO2">
<summary>
二氧化氮
</summary>
</member>
<member name="P:langguanApi.Service.WeatherService.AirQuality.O3">
<summary>
臭氧
</summary>
</member>
<member name="P:langguanApi.Service.WeatherService.AirQuality.PM10">
<summary>
PM10
</summary>
</member>
<member name="P:langguanApi.Service.WeatherService.AirQuality.PM2_5">
<summary>
PM25
</summary>
</member>
<member name="P:langguanApi.Service.WeatherService.AirQuality.SO2">
<summary>
二氧化硫
</summary>
</member>
<member name="P:langguanApi.Service.WeatherService.Location.id">
<summary>
54511

View File

@ -8,6 +8,10 @@
/// </summary>
public static string Weather = "weather";
/// <summary>
/// 缓存ARI数据
/// </summary>
public static string AriQuality = "arqulaty";
/// <summary>
/// 缓存清洁数据
/// </summary>
public static string CleanData = "cleandata";

View File

@ -40,7 +40,7 @@ namespace langguanApi.Service
/// </summary>
/// <param name="hours"></param>
/// <returns></returns>
public async Task<List<Model.HJ212>> GetViewTop(int hours = -10)
public async Task<List<Model.HJ212>> GetViewTop(int hours = -5)
{
var date = DateTime.Now.AddHours(-8).AddHours(hours);
Expression<Func<Model.HJ212, bool>> exp = filter => filter.CreateDateTime >= date;

View File

@ -41,7 +41,6 @@ namespace langguanApi.Service
public async Task<ApiResult> View()
{
var devices = await _deviceService.GetAsync();
var ariQuality = "";
var cleanData = new
{
Yesterday = 0.8,
@ -55,6 +54,8 @@ namespace langguanApi.Service
// 获取天气信息缓存1小时如果不存在则调用WeatherService获取
Func<Task<object>> getWeatherFunc = async () => await _weatherService.GetWeather();
var weather = await _cacheManager.GetConvertVale(RedisKeylist.Weather, getWeatherFunc, 60 * 60);
Func<Task<object>> getAriQualityFunc= async () => await _weatherService.GetAirQuality();
var ariQuality = await _cacheManager.GetConvertVale(RedisKeylist.AriQuality, getAriQualityFunc, 60 * 120);
return new ApiResult
{
code = 0,

View File

@ -1,5 +1,7 @@
using langguanApi.Extensions.AutoDI;
using Newtonsoft.Json;
using NPOI.SS.Formula.Functions;
using System.Reflection;
namespace langguanApi.Service
{
@ -50,6 +52,203 @@ namespace langguanApi.Service
}
return null;
}
/// <summary>
/// 爬空气质量数据
/// </summary>
/// <returns></returns>
public async Task<object> 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<AirQuality>(data);
return Convert2QualityList(air);
}
return null;
}
private List<Quality> Convert2QualityList(AirQuality airQuality)
{
Type modelType = typeof(AirQuality);
List<Quality> qualityList = new List<Quality>();
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<string, string, string> 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<string, string, string>(keyword, standard, level);
}
public class Quality
{
/// <summary>
/// 空气质量key
/// </summary>
public string key { get; set; }
/// <summary>
/// 空气质量指数数值
/// </summary>
public string val { get; set; }
/// <summary>
/// 空气质量指数级别
/// </summary>
public string level { get; set; }
/// <summary>
/// 空气质量指数标准
/// </summary>
public string standard { get; set; }
}
/// <summary>
/// 空气质量数据
/// </summary>
public class AirQuality
{
// public string Area { get; set; }
// public int CityCode { get; set; }
/// <summary>
/// 一氧化碳
/// </summary>
public string CO { get; set; }
/// <summary>
/// 二氧化氮
/// </summary>
public string NO2 { get; set; }
/// <summary>
/// 臭氧
/// </summary>
public string O3 { get; set; }
/// <summary>
/// PM10
/// </summary>
public string PM10 { get; set; }
/// <summary>
/// PM25
/// </summary>
public string PM2_5 { get; set; }
/// <summary>
/// 二氧化硫
/// </summary>
public string SO2 { get; set; }
}
public class Location
{
/// <summary>

View File

@ -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": {