天气阻飞

main
zhangbin 2025-11-29 14:23:03 +08:00
parent 674ce9f564
commit 2e2badf277
4 changed files with 85 additions and 45 deletions

View File

@ -1,10 +1,12 @@
using DocumentFormat.OpenXml.EMMA;
using DocumentFormat.OpenXml.Math;
using Infrastructure;
using Infrastructure.Cache;
using Infrastructure.CloudSdk.minio;
using Infrastructure.Extensions;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Configuration;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using NPOI.SS.Formula.Functions;
using OpenAuth.App.BaseApp.Base;
@ -26,14 +28,16 @@ namespace OpenAuth.App.ServiceApp
private readonly IConfiguration _configuration;
private readonly ISqlSugarClient _client;
private readonly MinioService _minioService;
private readonly RedisCacheContext _redisCacheContext;
public AirportMaintenanceApp(MinioService minioService, ISqlSugarClient client,
public AirportMaintenanceApp(MinioService minioService, ISqlSugarClient client, RedisCacheContext redisCacheContext,
ISugarUnitOfWork<SugarDbContext> unitWork, IConfiguration configuration,
ISimpleClient<LasaDronePort> repository, IAuth auth) : base(unitWork, repository, auth)
{
_configuration = configuration;
_client = client;
_minioService = minioService;
_redisCacheContext = redisCacheContext;
}
//获取设备绑定码
@ -553,43 +557,58 @@ namespace OpenAuth.App.ServiceApp
#region 天气阻飞
//天气预报和是否有人在操作
//public async Task<Response<bool>> IsCanFly(string sn, string dock, string address = "兰山")
//{
// var rainThreshforecast = 3; // 天气预报雨量
// var windSpeedThresh = 12;// 机场设定雨量
// double weatherWindSpeedforecast = 0; // 天气预报风速
// double weatherWindSpeedThre = 12;// 机场设定风速
// switch (dock)
// {
// case "Dock":
// weatherWindSpeedThre = 12;
// break;
// case "Dock 2":
// weatherWindSpeedThre = 8;
// break;
// case "Dock 3":
// weatherWindSpeedThre = 8;
// break;
// }
// using (var httpClient = new HttpClient())
// {
// var response = await httpClient.GetAsync(
// $"http://v1.yiketianqi.com/api?unescape=1&version=v61&appid=84261622&appsecret=k0WPY4Cx&city={address}");
// if (response.IsSuccessStatusCode)
// {
// var content = await response.Content.ReadAsStringAsync();
// var weather = Newtonsoft.Json.JsonConvert.DeserializeObject<Newtonsoft.Json.Linq.JObject>(content);
// var winMeterStr =
// weather.GetValue("win_meter")?.Value<string>(); //风速
// if (!string.IsNullOrEmpty(winMeterStr))
// {
// weatherWindSpeedforecast = int.Parse(winMeterStr.Replace("km/h", "")) / 3.6;
// }
// }
// }
public async Task<Response<bool>> IsCanFly(string sn, string dock, string address = "兰山")
{
var rainThreshforecast = 3; // 天气预报雨量
var windSpeedThresh = 12;// 机场设定雨量
double weatherWindSpeedforecast = 0; // 天气预报风速
double weatherWindSpeedThre = 12;// 机场设定风速
switch (dock)
{
case "Dock":
weatherWindSpeedThre = 12;
break;
case "Dock 2":
weatherWindSpeedThre = 8;
break;
case "Dock 3":
weatherWindSpeedThre = 8;
break;
}
using (var httpClient = new HttpClient())
{
var response = await httpClient.GetAsync($"http://v1.yiketianqi.com/api?unescape=1&version=v61&appid=84261622&appsecret=k0WPY4Cx&city={address}");
if (response.IsSuccessStatusCode)
{
var content = await response.Content.ReadAsStringAsync();
var weather = Newtonsoft.Json.JsonConvert.DeserializeObject<Newtonsoft.Json.Linq.JObject>(content);
var winMeterStr =
weather.GetValue("win_meter")?.Value<string>(); //风速
if (!string.IsNullOrEmpty(winMeterStr))
{
weatherWindSpeedforecast = int.Parse(winMeterStr.Replace("km/h", "")) / 3.6;
}
}
}
//解析osd的雨量和风速数据
var info = _redisCacheContext.Get<string>(sn + "_osd");
if (!string.IsNullOrEmpty(info))
{
var dataObject = JsonConvert.DeserializeObject<JObject>(info);
var windSpeed = dataObject["data"]?["wind_speed"]?.Value<float>(); // m/s
var rainfall = dataObject["data"]?["rainfall"]?.Value<int>();
if (windSpeedThresh <= windSpeed || rainThreshforecast <= rainfall || weatherWindSpeedThre <= weatherWindSpeedforecast)
{
return new Response<bool> { Result = false,Message= "当前天气条件不允许起飞" };
}
else
{
return new Response<bool> { Result = true, Message = "当前天气条件允许起飞" };
}
}
return new Response<bool> { Result = true, Message = "当前天气条件允许起飞" };
//}
}
#endregion
}
}

View File

@ -736,11 +736,29 @@ namespace OpenAuth.WebApi.Controllers.ServiceControllers
return result;
}
//只有天气阻飞
//public async Task<Response<bool>> IsCanFly(string address,string sn,string dock)
//{
//}
/// <summary>
/// 天气阻飞
/// </summary>
/// <param name="address">机场所在的地址,比如兰山</param>
/// <param name="sn">机场sn</param>
/// <param name="dock">机场类型Dock 1Dock 2Dock 3</param>
/// <returns></returns>
[HttpGet]
[AllowAnonymous]
public async Task<Response<bool>> IsCanFly(string address, string sn, string dock)
{
var result = new Response<bool>();
try
{
result = await _app.IsCanFly(sn, dock, address);
}
catch (Exception ex)
{
result.Code = 500;
result.Message = ex.Message;
}
return result;
}
#endregion
#region 获取告警信息

View File

@ -29,9 +29,12 @@ namespace OpenAuth.WebApi.Model.mqtt
TaskId = root["TaskId"]?.ToString() ?? "",
CreateTime = DateTime.Now,
CreateId = long.Parse((root["CreateId"]?.ToString() ?? "0")),
Data = root["Data"]?.ToString() ?? "",
Data = Newtonsoft.Json.JsonConvert.SerializeObject(root["Data"]),
});
//var info = Newtonsoft.Json.JsonConvert.DeserializeObject<LasaControlOperation>(payload);
//info.Id = Guid.NewGuid().ToString();
//info.CreateTime = DateTime.Now;
//await _app.AddOperationLog(info);
// 自定义处理逻辑
//return Task.CompletedTask;
}