From b0aa86b1dca0a31db123931826f426df0dbb0945 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E4=BC=9F?= <421281095@qq.com> Date: Fri, 15 Aug 2025 16:39:08 +0800 Subject: [PATCH 1/2] =?UTF-8?q?1.=20=E8=AE=A2=E9=98=85=E6=97=A5=E5=BF=97?= =?UTF-8?q?=E7=B1=BB=E5=9E=8B=E4=BF=AE=E6=94=B9=202.=20bugfix:=20Jsonb=20?= =?UTF-8?q?=E5=8C=B9=E9=85=8D=E6=9D=A1=E4=BB=B6=E4=BF=AE=E6=94=B9=203.=20?= =?UTF-8?q?=E4=BC=98=E5=8C=96=E5=8F=98=E9=87=8F=E5=8A=A8=E6=80=81=E8=B5=8B?= =?UTF-8?q?=E5=80=BC=E6=9D=A1=E4=BB=B6=E6=94=B9=E4=B8=BA=E5=8F=98=E9=87=8F?= =?UTF-8?q?=E6=8F=90=E5=89=8D=E8=B5=8B=E5=80=BC=204.=20lasa=5Flog=20?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=97=B6=E9=97=B4=E7=B4=A2=E5=BC=95=EF=BC=8C?= =?UTF-8?q?=E6=9C=89=E6=95=88=E6=8F=90=E9=AB=98=E6=9F=A5=E8=AF=A2=E9=80=9F?= =?UTF-8?q?=E5=BA=A6=205.=20jsonb=E5=AD=97=E7=AC=A6=E4=B8=B2=E5=BC=82?= =?UTF-8?q?=E5=B8=B8=E8=A7=A3=E6=9E=90=206.=20bugfix:jsonObject=E5=8F=96?= =?UTF-8?q?=E5=80=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- OpenAuth.App/ServiceApp/ManageApp.cs | 164 ++++++++++++++++-- .../ServiceApp/Subscribe/ConfigSubscribe.cs | 2 +- .../ServiceControllers/ManageController.cs | 15 +- 3 files changed, 158 insertions(+), 23 deletions(-) diff --git a/OpenAuth.App/ServiceApp/ManageApp.cs b/OpenAuth.App/ServiceApp/ManageApp.cs index aa1e1cd..58adede 100644 --- a/OpenAuth.App/ServiceApp/ManageApp.cs +++ b/OpenAuth.App/ServiceApp/ManageApp.cs @@ -1,3 +1,4 @@ +using System.Diagnostics; using System.Drawing; using System.Dynamic; using System.Net; @@ -959,22 +960,24 @@ namespace OpenAuth.App.ServiceApp // 取得当前风速及天气 // 当前时间减5秒,然后取最新一条数据 // 取得机场序列号 + var topicCondition = $"thing/product/{serialNo}/osd"; + var time = DateTime.Now.AddSeconds(-5); var log = await Repository .ChangeRepository>() .AsQueryable() + .Where(r => r.Topic == topicCondition) + .Where(r => r.CreateTime > time) + .Where(r => SqlFunc.JsonLike(r.Data, "wind_speed")) .OrderByDescending(r => r.CreateTime) - .Where(r => r.Data.Contains("wind_speed")) - .Where(r => r.Topic == $"thing/product/{serialNo}/osd" && - r.CreateTime > DateTime.Now.AddSeconds(-5)) .FirstAsync(); //不太可能为空 if (log != null) { - var dataObject = JsonConvert.DeserializeObject(log.Data); - var windSpeed = dataObject.GetValue("wind_speed")?.Value(); // m/s + var dataObject = + JsonConvert.DeserializeObject(JsonConvert.DeserializeObject(log.Data)); + var windSpeed = dataObject["data"]?["wind_speed"]?.Value(); // m/s var rainfall = - dataObject.GetValue("rainfall") - ?.Value(); // {"0":"无雨","1":"小雨","2":"中雨","3":"大雨"} + dataObject["data"]?["rainfall"]?.Value(); // {"0":"无雨","1":"小雨","2":"中雨","3":"大雨"} // 如果没有天气阻飞? if (windSpeedThreshold <= windSpeed || rainThreshold <= rainfall || @@ -1499,19 +1502,142 @@ namespace OpenAuth.App.ServiceApp #endregion - public async Task TestExecuteFlyTask(string flightid) + public async Task TestPreventFlyTask(string taskId) { - // flighttask_prepare method - /// thing/product/{gateway_sn}/services 主题 - // todo 执行下发任务 - var request = new TopicServicesRequest(); - dynamic data = new ExpandoObject(); - data.flight_id = flightid; - request.SetMethod("flighttask_execute") - .SetTid(flightid) - .SetBid(Guid.NewGuid().ToString()) - .SetData(data); - return JsonConvert.SerializeObject(request); +// 任务信息 + var task = await Repository.ChangeRepository>().GetByIdAsync(taskId); + var dronePort = await Repository.ChangeRepository>() + .GetByIdAsync(task.TaskDronePort); + if (dronePort == null) + { + throw new Exception("指定机场不存在"); + } + + // 取值 Dock 3 + var dockTypeId = dronePort.TypeId; + var serialNo = dronePort.Sn; + if (!string.IsNullOrEmpty(task.WorkspaceId)) + { + var workspace = await Repository.ChangeRepository>() + .GetByIdAsync(task.WorkspaceId); + if (workspace != null) + { + // 机场天气信息 阀值(自定义和) 雨量阀值 风速阀值 + // 赋值默认阀值 + var rainThreshold = 3; // 大雨 + var windSpeedThreshold = 12; + double weatherWindSpeed = 0; // 天气预报风速 + double weatherWindSpeedThreshold = 0; + switch (dockTypeId) + { + case "Dock": + rainThreshold = 3; // 大雨 + windSpeedThreshold = 12; + break; + case "Dock 2": + rainThreshold = 3; // 大雨 + windSpeedThreshold = 8; + break; + case "Dock 3": + rainThreshold = 3; // 大雨 + windSpeedThreshold = 8; + break; + } + + // 1. 云端阻飞开启天气阻飞未开启 2. 云端阻飞未开启 3. 云端阻飞开启,天气阻飞开启 + if (workspace.IsCloudBlockFlight) + { + var type = dockTypeId switch + { + "Dock" => "大疆机场", + "Dock 2" => "大疆机场2", + "Dock 3" => "大疆机场3", + _ => "大疆机场" + }; + + var spaceLockFly = await Repository + .ChangeRepository>() + .GetSingleAsync(r => r.WorkSpaceId == task.WorkspaceId && r.Name == type); + if (spaceLockFly != null) + { + rainThreshold = Convert.ToInt32(spaceLockFly.RainFall); + windSpeedThreshold = spaceLockFly.WindSpeed; + weatherWindSpeedThreshold = spaceLockFly.WeatherWindSpeed; + } + } + + if (workspace.IsWeatherBlockFlight) + { + using (var httpClient = new HttpClient()) + { + // todo 目前地理位置是写死的兰山 + var response = await httpClient.GetAsync( + "http://v1.yiketianqi.com/api?unescape=1&version=v61&appid=84261622&appsecret=k0WPY4Cx&city=兰山"); + if (response.IsSuccessStatusCode) + { + var content = await response.Content.ReadAsStringAsync(); + var weather = JsonConvert.DeserializeObject(content); + var winMeterStr = + weather.GetValue("win_meter")?.Value(); //风速 + if (!string.IsNullOrEmpty(winMeterStr)) + { + weatherWindSpeed = int.Parse(winMeterStr.Replace("km/h", "")) / 3.6; + } + } + } + } + + Stopwatch x = new Stopwatch(); + x.Start(); + // 取得当前风速及天气 + // 当前时间减5秒,然后取最新一条数据 + // 取得机场序列号 + var topic = $"thing/product/{serialNo}/osd"; + var time = DateTime.Now.AddSeconds(-5); + var log = await Repository + .ChangeRepository>() + .AsQueryable() + .Where(r => r.Topic == topic) + .Where(r => r.CreateTime > time) + .Where(r => SqlFunc.JsonLike(r.Data, "wind_speed")) + .OrderByDescending(r => r.CreateTime) + .FirstAsync(); + x.Stop(); + Console.WriteLine("耗时:" + x.ElapsedMilliseconds / 1000); + //不太可能为空 + if (log != null) + { + var dataObject = + JsonConvert.DeserializeObject(JsonConvert.DeserializeObject(log.Data)); + var windSpeed = dataObject["data"]?["wind_speed"]?.Value(); // m/s + var rainfall = + dataObject["data"]?["rainfall"]?.Value(); // {"0":"无雨","1":"小雨","2":"中雨","3":"大雨"} + + // 如果没有天气阻飞? + if (windSpeedThreshold <= windSpeed || rainThreshold <= rainfall || + weatherWindSpeedThreshold <= weatherWindSpeed) + { + return "fail"; + // 不让起飞 + // 更新失败原因 + var failTask = new LasaTask() + { + Id = taskId, + Status = 2, + Reason = "当前天气条件不允许起飞" + }; + await Repository + .ChangeRepository>() + .AsUpdateable(failTask) + .IgnoreNullColumns() + .ExecuteCommandAsync(); + throw new Exception("当前天气条件不允许起飞"); + } + } + } + } + + return "ok"; } public LasaDronePort GetDroneDockBySn(string gatewaySn) diff --git a/OpenAuth.App/ServiceApp/Subscribe/ConfigSubscribe.cs b/OpenAuth.App/ServiceApp/Subscribe/ConfigSubscribe.cs index f5fc5b6..127753b 100644 --- a/OpenAuth.App/ServiceApp/Subscribe/ConfigSubscribe.cs +++ b/OpenAuth.App/ServiceApp/Subscribe/ConfigSubscribe.cs @@ -96,7 +96,7 @@ public class ConfigSubscribe : IJob var result = JsonConvert.DeserializeObject>(message); var method = result.method; var data = result.data; - _logger.LogDebug($"主题:{topic}\n消息:{message}"); + _logger.LogInformation($"主题:{topic}\n消息:{message}"); long code = 0; switch (tempStr) { diff --git a/OpenAuth.WebApi/Controllers/ServiceControllers/ManageController.cs b/OpenAuth.WebApi/Controllers/ServiceControllers/ManageController.cs index 0240230..966e9ab 100644 --- a/OpenAuth.WebApi/Controllers/ServiceControllers/ManageController.cs +++ b/OpenAuth.WebApi/Controllers/ServiceControllers/ManageController.cs @@ -613,11 +613,16 @@ namespace OpenAuth.WebApi.Controllers.ServiceControllers return await _app.StopDronePortLive(streamUrl); } + /// + /// 阻飞模拟测试 + /// + /// + /// [HttpPost] [AllowAnonymous] - public async Task TestExecuteFlyTask(string flightid) + public async Task TestPreventFlyTask(string taskId) { - return await _app.TestExecuteFlyTask(flightid); + return await _app.TestPreventFlyTask(taskId); } @@ -844,8 +849,12 @@ namespace OpenAuth.WebApi.Controllers.ServiceControllers } #endregion + /// + /// 媒体保存测试 + /// + /// + /// [HttpPost] - [AllowAnonymous] public async Task> Test1111(string msg) { return await _app.Test1111(msg); From ee8b45ed4b945b9ccc5cecd293b1c5b1d9adfcd2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E4=BC=9F?= <421281095@qq.com> Date: Fri, 15 Aug 2025 16:42:51 +0800 Subject: [PATCH 2/2] =?UTF-8?q?163=E6=95=B0=E6=8D=AE=E5=BA=93=E5=88=87?= =?UTF-8?q?=E6=8D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- OpenAuth.WebApi/appsettings.Production.json | 2 +- OpenAuth.WebApi/appsettings.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/OpenAuth.WebApi/appsettings.Production.json b/OpenAuth.WebApi/appsettings.Production.json index 6367e51..0f48263 100644 --- a/OpenAuth.WebApi/appsettings.Production.json +++ b/OpenAuth.WebApi/appsettings.Production.json @@ -7,7 +7,7 @@ "AllowedHosts": "*", "DataProtection": "temp-keys/", "ConnectionStrings": { - "OpenAuthDBContext": "PORT=5432;Database=LASAPlatform;HOST=192.168.10.163;PASSWORD=123456;USER ID=postgres;" + "OpenAuthDBContext": "PORT=5432;Database=LASAPlatformNew;HOST=192.168.10.163;PASSWORD=123456;USER ID=postgres;" //"OpenAuthDBContext": "PORT=5432;Database=unattended1;HOST=192.168.10.115;PASSWORD=123456;USER ID=postgres;Pooling=False" //PostgreSQL }, "AppSetting": { diff --git a/OpenAuth.WebApi/appsettings.json b/OpenAuth.WebApi/appsettings.json index e8f371d..7287275 100644 --- a/OpenAuth.WebApi/appsettings.json +++ b/OpenAuth.WebApi/appsettings.json @@ -8,7 +8,7 @@ "DataProtection": "temp-keys/", "ConnectionStrings": { //"OpenAuthDBContext": "PORT=5432;Database=hopetrycore;HOST=192.168.10.124;PASSWORD=123456;USER ID=postgres;", - "OpenAuthDBContext": "PORT=5432;Database=LASAPlatform;HOST=192.168.10.163;PASSWORD=123456;USER ID=postgres;Pooling=true" + "OpenAuthDBContext": "PORT=5432;Database=LASAPlatformNew;HOST=192.168.10.163;PASSWORD=123456;USER ID=postgres;Pooling=true" //"OpenAuthDBContext": "PORT=5432;Database=;HOST=192.168.10.131;PASSWORD=123456;USER ID=postgres;" }, "AppSetting": {