From af023ddd4c6821011169504104d103e8dae7de84 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 10:54:07 +0800 Subject: [PATCH 1/3] =?UTF-8?q?1.=20=E6=B7=BB=E5=8A=A0=E6=B5=8B=E8=AF=95?= =?UTF-8?q?=E6=96=B9=E6=B3=95=202.=20bugfix:=E4=BB=A3=E7=A0=81=E9=87=8D?= =?UTF-8?q?=E6=9E=84=E5=90=8E=EF=BC=8Celse=20if=20=E4=BD=8D=E7=BD=AE?= =?UTF-8?q?=E9=94=99=E8=AF=AF=EF=BC=88=E5=AF=BC=E8=87=B4ppk=E4=B8=8D?= =?UTF-8?q?=E8=83=BD=E4=BF=9D=E5=AD=98=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- OpenAuth.App/ServiceApp/ManageApp.cs | 289 +++++++++++++++++- .../ServiceApp/Subscribe/ConfigSubscribe.cs | 55 +--- .../ServiceControllers/ManageController.cs | 7 + 3 files changed, 311 insertions(+), 40 deletions(-) diff --git a/OpenAuth.App/ServiceApp/ManageApp.cs b/OpenAuth.App/ServiceApp/ManageApp.cs index fd21a71..aa1e1cd 100644 --- a/OpenAuth.App/ServiceApp/ManageApp.cs +++ b/OpenAuth.App/ServiceApp/ManageApp.cs @@ -1,12 +1,18 @@ using System.Drawing; using System.Dynamic; +using System.Net; using System.Text; using Infrastructure; +using Infrastructure.CloudSdk; using Infrastructure.CloudSdk.minio; using Infrastructure.CloudSdk.wayline; +using Infrastructure.Extensions; using Infrastructure.Helpers; +using MetadataExtractor; +using MetadataExtractor.Formats.Exif; using Microsoft.AspNetCore.Http; using Microsoft.IdentityModel.Tokens; +using Microsoft.Net.Http.Headers; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using OpenAuth.App.BaseApp.Base; @@ -22,6 +28,8 @@ using OpenAuth.Repository.Domain; using OpenAuth.WebApi; using OpenAuth.WebApi.CloudSdk; using SqlSugar; +using Directory = System.IO.Directory; +using RangeHeaderValue = System.Net.Http.Headers.RangeHeaderValue; namespace OpenAuth.App.ServiceApp { @@ -969,7 +977,8 @@ namespace OpenAuth.App.ServiceApp ?.Value(); // {"0":"无雨","1":"小雨","2":"中雨","3":"大雨"} // 如果没有天气阻飞? - if (windSpeedThreshold <= windSpeed || rainThreshold <= rainfall || weatherWindSpeedThreshold <= weatherWindSpeed) + if (windSpeedThreshold <= windSpeed || rainThreshold <= rainfall || + weatherWindSpeedThreshold <= weatherWindSpeed) { // 不让起飞 // 更新失败原因 @@ -1871,5 +1880,283 @@ namespace OpenAuth.App.ServiceApp Result = true }; } + + public async Task> Test1111(string msg) + { + var sn = "8UUXN5400A079H"; + var result = JsonConvert.DeserializeObject>(msg); + var method = result.method; + var data = result.data; + int flightType = data.flight_task.flight_type; + string flightId = data.file.ext.flight_id; + var taskAssign = GetTaskAssignByFlightId(flightId); + var taskId = taskAssign.TaskId; + var executeTask = await Repository.AsSugarClient() + .Queryable() + .SingleAsync(a => a.Id == taskId); + string objectKey = data.file.object_key; + var folderKey = ((string)data.file.object_key).Split("/"); + var parentKey = folderKey[2]; + var isExist = await Repository.AsSugarClient() + .Queryable() + .Where(x => x.Id.Equals(parentKey)).CountAsync(); + if (isExist == 0) + { + var date = DateTime.Now; + var timeStr = date.ToString("yyyy-MM-dd HH:mm:ss"); + var parent1 = new LasaMediaFile() + { + Id = folderKey[2], + FlightId = flightId, + TaskId = taskId, + ParentKey = "0", + Name = string.IsNullOrEmpty(executeTask.TaskName) + ? timeStr + : $"{executeTask.TaskName} {timeStr}", + WorkspaceId = executeTask.WorkspaceId, + CreateTime = date, + }; + await Repository.AsSugarClient().Insertable(parent1).ExecuteCommandAsync(); + } + + // 重复检测 + var mediaFile = await Repository.AsSugarClient() + .Queryable() + .Where(a => a.FlightId.Equals(flightId)) + .Where(a => a.ObjectKey.Equals(objectKey)).SingleAsync(); + if (mediaFile == null) + { + var type = 0; + var preSize = 5; + // todo 判断是不是图片 + if (objectKey.EndsWith(".jpeg")) // todo 是否有其它类型的图片,待确定 + { + preSize = 65535; + var fileName = Path.GetFileNameWithoutExtension(objectKey); + var fileNameParts = fileName.Split("_"); + var suffix = fileNameParts[^1]; + type = suffix switch + { + // 0 未知 1 可见光 2 红外 3 变焦 4.广角 5 视频 + "V" => 1, + "T" => 2, + "Z" => 3, // 变焦 + "W" => 4, // 广角 + _ => type + }; + } + else if (objectKey.EndsWith(".mp4")) + { + type = 5; + } + + string suoluokey = ""; + long? fileSize = 0; + int width = 0, height = 0, focalLength = 0; + int offset = 0, length = 0; + string model = ""; + + var fileUrl = "http://" + _minioService.endPoint + "/" + _minioService._bucketName + + "/" + objectKey; + using (var httpClient = new HttpClient()) + { + suoluokey = "minipic/" + data.file.name.ToString(); + // 目前读取64KB + // 添加Range请求头 + httpClient.DefaultRequestHeaders.Range = + new RangeHeaderValue(0, preSize); + try + { + var response = httpClient + .GetAsync(fileUrl, HttpCompletionOption.ResponseHeadersRead).Result; + if (response.StatusCode == HttpStatusCode.PartialContent) + { + //Focal Length 35: 24 mm + //Exif Image Width: 4032 pixels : Exif SubIFD + //Exif Image Height: 3024 pixels : Exif SubIFD + // 3.1 解析Content-Range头(格式:bytes start-end/total) + var contentRange = response.Content.Headers.ContentRange; + if (contentRange != null) + { + fileSize = contentRange.Length.Value; + Console.WriteLine( + $"获取范围:{contentRange.From}-{contentRange.To}/{contentRange.Length}"); + } + + if (objectKey.ToLower().EndsWith("jpeg")) + { + // 成功获取部分内容 + var y = response.Content.ReadAsByteArrayAsync().Result; + MemoryStream ms = new MemoryStream(y); + var directories = ImageMetadataReader.ReadMetadata(ms); + foreach (var directory in directories) + { + if (directory is ExifDirectoryBase) + { + if (directory.Name.Equals("Exif IFD0")) + { + foreach (var tag in directory.Tags) + { + if (tag.Name.Equals("Model")) + { + model = tag.Description; + } + } + } + + if (directory.Name.Equals("Exif SubIFD")) + { + foreach (var tag in directory.Tags) + { + if (tag.Name.Equals("Exif Image Width")) + { + width = int.Parse(tag.Description.Replace("pixels", "") + .Trim()); + } + + if (tag.Name.Equals("Exif Image Height")) + { + height = int.Parse(tag.Description.Replace("pixels", "") + .Trim()); + } + + if (tag.Name.Equals("Focal Length 35")) + { + focalLength = int.Parse(tag.Description + .Replace("mm", "") + .Trim()); + } + } + } + + //Console.WriteLine(directory.Name); + if (directory.Name.Equals("Exif Thumbnail")) + { + foreach (var tag in directory.Tags) + { + if (tag.Name.Equals("Thumbnail Offset")) + { + offset = int.Parse(tag.Description.Replace("bytes", "") + .Trim()); + } + + if (tag.Name.Equals("Thumbnail Length")) + { + length = int.Parse(tag.Description.Replace("bytes", "") + .Trim()); + } + } + } + } + } + + ms.Seek(offset + 6, SeekOrigin.Begin); + byte[] buffer = new byte[length]; + int bytesRead = ms.Read(buffer, 0, length); + // 上传缩略图到MinIO + await _minioService.PutObjectAsync("", data.file.name.ToString(), suoluokey, + new MemoryStream(buffer)); + } + } + else if (response.StatusCode == HttpStatusCode.OK) + { + // 服务器不支持Range请求,返回完整内容 + throw new InvalidOperationException("服务器不支持Range请求"); + } + else + { + throw new HttpRequestException($"请求失败: {response.StatusCode}"); + } + } + catch (Exception ex) + { + throw new Exception($"执行错误: {ex.Message}", ex); + } + } + + var createdTimeStr = (string)data.file.metadata.created_time; + var createTime = string.IsNullOrEmpty(createdTimeStr) + ? DateTime.Now + : createdTimeStr.ToDateTime(); + var fileUpload = new LasaMediaFile() + { + Id = Guid.NewGuid().ToString(), + FlightId = flightId, // 计划id + TaskId = taskAssign.TaskId, // 任务id + DroneModelKey = data.file.ext.drone_model_key, // 无人机型号 + PayloadModelKey = data.file.ext.payload_model_key, //这应该可以标明是什么设置 + IsOriginal = data.file.ext.is_original, + MediaIndex = data.file.ext.media_index, + AbsoluteAltitude = data.file.metadata.absolute_altitude, // 拍摄绝对高度 + GimbalYawDegree = data.file.metadata.gimbal_yaw_degree, //云台偏航角度 + RelativeAltitude = data.file.metadata.relative_altitude, // 拍摄相对高度 + Lat = data.file.metadata.shoot_position.lat, + Lng = data.file.metadata.shoot_position.lng, + Name = data.file.name, + ObjectKey = data.file.object_key, + Path = data.file.path, // 目前这个好像没有值 + CreateTime = createTime, + WorkspaceId = executeTask.WorkspaceId, + ParentKey = folderKey[2], + Tid = result.tid, + Bid = result.bid, + FlightType = flightType, + Width = width, + Height = height, + minipic = suoluokey, + Size = fileSize, + ShowOnMap = 1, + display = 1, + FocalLength = focalLength, + PayloadModelName = model, + Type = type + }; + // todo 添加事务 + await Repository.AsSugarClient().Insertable(fileUpload).ExecuteCommandAsync(); + } + + if (result.need_reply.Equals(1)) + { + var fileUploadCallbackEventReply = new FileUploadCallbackEventReply() + { + bid = result.bid, + tid = result.tid, + method = "file_upload_callback", + gateway = sn, + data = new + { + result = 0 + }, + timestamp = DateTimeOffset.Now.ToUnixTimeMilliseconds(), + }; + _ = _mqttClientManager.PublishAsync($"thing/product/{sn}/events_reply", + JsonConvert.SerializeObject(fileUploadCallbackEventReply)); + } + + var expectFileCount = data.flight_task.expected_file_count; + var uploadedFileCount = data.flight_task.uploaded_file_count; + + var taskRecord = new LasaTask() + { + Id = taskId, + ExpectedFileCount = expectFileCount, // 期望文件数量 + UploadedFileCount = uploadedFileCount // 已上传文件数量 + }; + // 当expectFileCount 等于uploadedFileCount时,则表示航线执行完成 + /* + if (uploadedFileCount.Equals(expectFileCount)) + { + taskRecord.Status = 5; // 成功状态 + } + */ + + await Repository.AsSugarClient().Updateable(taskRecord) + .IgnoreNullColumns().ExecuteCommandAsync(); + + return new Response() + { + Result = true + }; + } } } \ No newline at end of file diff --git a/OpenAuth.App/ServiceApp/Subscribe/ConfigSubscribe.cs b/OpenAuth.App/ServiceApp/Subscribe/ConfigSubscribe.cs index af6c5cd..f5fc5b6 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.LogInformation($"主题:{topic}\n消息:{message}"); + _logger.LogDebug($"主题:{topic}\n消息:{message}"); long code = 0; switch (tempStr) { @@ -205,12 +205,9 @@ public class ConfigSubscribe : IJob switch (method) { case "file_upload_callback": - // todo 非图片文件添加文件大小 - // todo 添加媒体文件类型 - // // 文件上传 - _logger.LogInformation("进入文件上传处理"); - _logger.LogInformation($"文件上传处理:{message}"); + _logger.LogDebug("进入文件上传处理"); + _logger.LogDebug($"文件上传处理:{message}"); int flightType = data.flight_task.flight_type; string flightId = data.file.ext.flight_id; var taskAssign = _manageApp.GetTaskAssignByFlightId(flightId); @@ -226,27 +223,6 @@ public class ConfigSubscribe : IJob .Where(x => x.Id.Equals(parentKey)).CountAsync(); if (isExist == 0) { - /*var parents = new List(3); - var parent1 = new LasaMediaFile() - { - Id = folderKey[0], - FlightId = flightId, - TaskId = taskId, - ParentKey = "0", - Name = folderKey[0], - WorkspaceId = executeTask.WorkspaceId, - }; - parents.Add(parent1); - parent1 = new LasaMediaFile() - { - Id = folderKey[1], - FlightId = flightId, - TaskId = taskId, - ParentKey = folderKey[0], - Name = folderKey[1], - WorkspaceId = executeTask.WorkspaceId, - }; - parents.Add(parent1);*/ var date = DateTime.Now; var timeStr = date.ToString("yyyy-MM-dd HH:mm:ss"); var parent1 = new LasaMediaFile() @@ -272,7 +248,7 @@ public class ConfigSubscribe : IJob if (mediaFile == null) { var type = 0; - var preSize = 512; + var preSize = 1; // todo 判断是不是图片 if (objectKey.EndsWith(".jpeg")) // todo 是否有其它类型的图片,待确定 { @@ -324,7 +300,7 @@ public class ConfigSubscribe : IJob if (contentRange != null) { fileSize = contentRange.Length.Value; - Console.WriteLine( + _logger.LogDebug( $"获取范围:{contentRange.From}-{contentRange.To}/{contentRange.Length}"); } @@ -402,20 +378,20 @@ public class ConfigSubscribe : IJob await _minioService.PutObjectAsync("", data.file.name.ToString(), suoluokey, new MemoryStream(buffer)); } - else if (response.StatusCode == HttpStatusCode.OK) - { - // 服务器不支持Range请求,返回完整内容 - throw new InvalidOperationException("服务器不支持Range请求"); - } - else - { - throw new HttpRequestException($"请求失败: {response.StatusCode}"); - } + } + else if (response.StatusCode == HttpStatusCode.OK) + { + // 服务器不支持Range请求,返回完整内容 + throw new InvalidOperationException("服务器不支持Range请求"); + } + else + { + throw new HttpRequestException($"请求失败: {response.StatusCode}"); } } catch (Exception ex) { - throw new Exception($"下载Range数据失败: {ex.Message}", ex); + throw new Exception($"执行错误: {ex.Message}", ex); } } @@ -423,6 +399,7 @@ public class ConfigSubscribe : IJob var createTime = string.IsNullOrEmpty(createdTimeStr) ? DateTime.Now : createdTimeStr.ToDateTime(); + _logger.LogDebug("执行到保存媒体文件之前"); var fileUpload = new LasaMediaFile() { Id = Guid.NewGuid().ToString(), diff --git a/OpenAuth.WebApi/Controllers/ServiceControllers/ManageController.cs b/OpenAuth.WebApi/Controllers/ServiceControllers/ManageController.cs index 600c552..0240230 100644 --- a/OpenAuth.WebApi/Controllers/ServiceControllers/ManageController.cs +++ b/OpenAuth.WebApi/Controllers/ServiceControllers/ManageController.cs @@ -843,5 +843,12 @@ namespace OpenAuth.WebApi.Controllers.ServiceControllers return await _app.CreateMediaFolder(name,parentKey); } #endregion + + [HttpPost] + [AllowAnonymous] + public async Task> Test1111(string msg) + { + return await _app.Test1111(msg); + } } } \ No newline at end of file From 7cf81133400a514ee82ac3c5ed51b7195dcfbd4d 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 13:48:29 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E7=B1=BB=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- OpenAuth.App/ServiceApp/AirportMaintenanceApp.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/OpenAuth.App/ServiceApp/AirportMaintenanceApp.cs b/OpenAuth.App/ServiceApp/AirportMaintenanceApp.cs index d85f7b3..86d2c78 100644 --- a/OpenAuth.App/ServiceApp/AirportMaintenanceApp.cs +++ b/OpenAuth.App/ServiceApp/AirportMaintenanceApp.cs @@ -457,7 +457,8 @@ namespace OpenAuth.App.ServiceApp AirLineName = b.TaskAirLineName, GimbalYawDegree = x.GimbalYawDegree, RelativeAltitude = x.RelativeAltitude, - PayloadModelName = x.PayloadModelName + PayloadModelName = x.PayloadModelName, + Type = x.Type }) .ToPageListAsync(page, limit, totalCount); return new Response>> From b62b398b69c7c2d4ad666c6c8cfe377132e451b2 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 13:49:54 +0800 Subject: [PATCH 3/3] =?UTF-8?q?=E6=B7=BB=E5=8A=A0type=E8=BF=87=E6=BB=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ServiceApp/AirportMaintenanceApp.cs | 3 +- .../AirportMaintenanceController.cs | 103 +++++++++++------- 2 files changed, 64 insertions(+), 42 deletions(-) diff --git a/OpenAuth.App/ServiceApp/AirportMaintenanceApp.cs b/OpenAuth.App/ServiceApp/AirportMaintenanceApp.cs index 86d2c78..e8b8231 100644 --- a/OpenAuth.App/ServiceApp/AirportMaintenanceApp.cs +++ b/OpenAuth.App/ServiceApp/AirportMaintenanceApp.cs @@ -409,7 +409,7 @@ namespace OpenAuth.App.ServiceApp #endregion public async Task>>> GetMediaFile(string taskId, string airId,string device, - string picname, DateTime? startTime, DateTime? endTime, int page, int limit, string parentKey,int? objectKeyExist) + int? type, string picname, DateTime? startTime, DateTime? endTime, int page, int limit, string parentKey,int? objectKeyExist) { RefAsync totalCount = 0; using (var db = UnitWork.CreateContext()) @@ -426,6 +426,7 @@ namespace OpenAuth.App.ServiceApp .WhereIF(!"0001/1/1 0:00:00".Equal(endTime.ToString()), (x, b) => x.CreateTime <= endTime) .WhereIF(!string.IsNullOrEmpty(parentKey), (x, b) => x.ParentKey == parentKey) .WhereIF(!string.IsNullOrEmpty(taskId), (x, b) => x.TaskId == taskId) + .WhereIF(type != null, (x, b) => x.Type == type) .OrderBy((x, b) => x.CreateTime, OrderByType.Desc) .Select((x,b) => new LasaMediaFile { diff --git a/OpenAuth.WebApi/Controllers/ServiceControllers/AirportMaintenanceController.cs b/OpenAuth.WebApi/Controllers/ServiceControllers/AirportMaintenanceController.cs index 88fe25d..e95844f 100644 --- a/OpenAuth.WebApi/Controllers/ServiceControllers/AirportMaintenanceController.cs +++ b/OpenAuth.WebApi/Controllers/ServiceControllers/AirportMaintenanceController.cs @@ -36,7 +36,8 @@ namespace OpenAuth.WebApi.Controllers.ServiceControllers private readonly HttpClient _httpClient; private readonly MinioService _minioService; - public AirportMaintenanceController(AirportMaintenanceApp app, MqttClientManager mqttClientManager, MqttMessageCenter mqttCenter, RedisCacheContext cache, HttpClient httpClient,MinioService minioService) + public AirportMaintenanceController(AirportMaintenanceApp app, MqttClientManager mqttClientManager, + MqttMessageCenter mqttCenter, RedisCacheContext cache, HttpClient httpClient, MinioService minioService) { _app = app; _mqttClientManager = mqttClientManager; @@ -45,6 +46,7 @@ namespace OpenAuth.WebApi.Controllers.ServiceControllers _httpClient = httpClient; _minioService = minioService; } + /// /// 机场注册 注册码生成 /// @@ -75,7 +77,6 @@ namespace OpenAuth.WebApi.Controllers.ServiceControllers { device_binding_code = result.Result.DeviceBindingCode, organization_id = result.Result.OrgId - } } } @@ -83,7 +84,6 @@ namespace OpenAuth.WebApi.Controllers.ServiceControllers string payload = JsonSerializer.Serialize(requestData); await _mqttClientManager.PublishAsync(topicRequest, payload); //在这个地方在接收一下? - } } catch (Exception ex) @@ -94,6 +94,7 @@ namespace OpenAuth.WebApi.Controllers.ServiceControllers return result; } + /// /// 机场注册 注册码生成 /// @@ -125,6 +126,7 @@ namespace OpenAuth.WebApi.Controllers.ServiceControllers return result; } + /// /// 获取网关列表 /// @@ -149,6 +151,7 @@ namespace OpenAuth.WebApi.Controllers.ServiceControllers } #region 固件版本管理 + /// /// 添加固件版本 /// @@ -168,8 +171,10 @@ namespace OpenAuth.WebApi.Controllers.ServiceControllers result.Code = 500; result.Message = ex.Message; } + return result; } + /// /// 修改无人机或机场版本 /// @@ -189,8 +194,10 @@ namespace OpenAuth.WebApi.Controllers.ServiceControllers result.Code = 500; result.Message = ex.Message; } + return result; } + /// /// 上传固件文件 /// @@ -205,6 +212,7 @@ namespace OpenAuth.WebApi.Controllers.ServiceControllers var path = await _app.UploadFile(xmlFile); return Ok(new { message = "上传成功", path }); } + #endregion /// @@ -244,19 +252,18 @@ namespace OpenAuth.WebApi.Controllers.ServiceControllers await Task.CompletedTask; }); response.Result = 0; - } catch (Exception ex) { response.Code = 500; response.Message = ex.Message; } - return response; ; + return response; + ; } - /// /// 设置直播镜头 /// @@ -267,7 +274,6 @@ namespace OpenAuth.WebApi.Controllers.ServiceControllers Response response = new Response(); try { - var videoids = zhiboReq.videoId.Split("/"); var topicRequest = $"thing/product/" + videoids[0] + "/services"; var requestData = new @@ -296,15 +302,14 @@ namespace OpenAuth.WebApi.Controllers.ServiceControllers }); response.Result = 0; - } catch (Exception ex) { response.Code = 500; response.Message = ex.Message; } - return response; + return response; } @@ -346,15 +351,14 @@ namespace OpenAuth.WebApi.Controllers.ServiceControllers }); response.Result = 0; - } catch (Exception ex) { response.Code = 500; response.Message = ex.Message; } - return response; + return response; } @@ -378,7 +382,6 @@ namespace OpenAuth.WebApi.Controllers.ServiceControllers timestamp = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds(), data = new { - video_id = zhiboReq.videoId } }; @@ -396,17 +399,14 @@ namespace OpenAuth.WebApi.Controllers.ServiceControllers }); response.Result = 0; - - - } catch (Exception ex) { response.Code = 500; response.Message = ex.Message; } - return response; + return response; } @@ -439,13 +439,11 @@ namespace OpenAuth.WebApi.Controllers.ServiceControllers access_key_secret = "minioadmin", expire = 3600, security_token = "security_token" - }, endpoint = "175.27.168.120:6013", object_key_prefix = "", provider = "ali", region = "hz" - }, result = 0 } @@ -453,21 +451,17 @@ namespace OpenAuth.WebApi.Controllers.ServiceControllers response.Result = 0; - - - } catch (Exception ex) { response.Code = 500; response.Message = ex.Message; } - return response; + return response; } - /// /// 开始直播 /// @@ -507,21 +501,19 @@ namespace OpenAuth.WebApi.Controllers.ServiceControllers }); response.Result = 0; - - - } catch (Exception ex) { response.Code = 500; response.Message = ex.Message; } - return response; + return response; } #region redis 多用户控制 + /// /// 添加修改mqtt客户端信息 /// @@ -570,6 +562,7 @@ namespace OpenAuth.WebApi.Controllers.ServiceControllers { await _cache.SetRemoveAsync(lockSetKey, info.UserId); } + result.Result = true; } catch (Exception ex) @@ -577,8 +570,10 @@ namespace OpenAuth.WebApi.Controllers.ServiceControllers result.Code = 500; result.Message = ex.Message; } + return result; } + /// /// 获取当前用户mqtt客户端信息 /// @@ -597,8 +592,10 @@ namespace OpenAuth.WebApi.Controllers.ServiceControllers result.Code = 500; result.Message = ex.Message; } + return result; } + private MqttClientResp ParseClient(HashEntry[] entries) { if (entries == null || entries.Length == 0) @@ -613,6 +610,7 @@ namespace OpenAuth.WebApi.Controllers.ServiceControllers IsLock = bool.Parse(dict["IsLock"]) }; } + /// /// 获取所有锁定的用户客户端信息 /// @@ -630,11 +628,14 @@ namespace OpenAuth.WebApi.Controllers.ServiceControllers if (entries.Length > 0) result.Add(ParseClient(entries)); } + return result; } + #endregion #region 获取告警信息 + /// /// 获取告警信息 /// @@ -646,12 +647,14 @@ namespace OpenAuth.WebApi.Controllers.ServiceControllers /// /// [HttpGet] - public async Task>>> GetManageDeviceHmsList(int level, int model, DateTime startTime, DateTime endTime, int page, int limit, string message,string getway) + public async Task>>> GetManageDeviceHmsList(int level, int model, + DateTime startTime, DateTime endTime, int page, int limit, string message, string getway) { var result = new Response>>(); try { - result = await _app.GetManageDeviceHmsList(level, model, startTime, endTime, page, limit, message, getway); + result = await _app.GetManageDeviceHmsList(level, model, startTime, endTime, page, limit, message, + getway); } catch (Exception ex) { @@ -661,9 +664,11 @@ namespace OpenAuth.WebApi.Controllers.ServiceControllers return result; } + #endregion #region 日志信息 + /// /// 根据设备sn读取实时数据 /// @@ -674,7 +679,8 @@ namespace OpenAuth.WebApi.Controllers.ServiceControllers /// /// [HttpGet] - public async Task>>> GetLogList(string sn, DateTime startTime, DateTime endTime, int page, int limit) + public async Task>>> GetLogList(string sn, DateTime startTime, DateTime endTime, + int page, int limit) { var result = new Response>>(); try @@ -686,42 +692,50 @@ namespace OpenAuth.WebApi.Controllers.ServiceControllers result.Code = 500; result.Message = ex.Message; } + return result; } + #endregion [HttpGet] - public async Task>>> GetMediaFile(string taskId,string airId,string device,string picname, DateTime startTime, DateTime endTime, int page, int limit,string parentKey,int? objectKeyExist) + public async Task>>> GetMediaFile(string taskId, string airId, + string device, int? type, string picname, DateTime startTime, DateTime endTime, int page, int limit, + string parentKey, int? objectKeyExist) { var result = new Response>>(); try { - result = await _app.GetMediaFile(taskId,airId,device, picname,startTime, endTime, page, limit,parentKey,objectKeyExist); + result = await _app.GetMediaFile(taskId, airId, device,type, picname, startTime, endTime, page, limit, + parentKey, objectKeyExist); } catch (Exception ex) { result.Code = 500; result.Message = ex.Message; } + return result; } [HttpGet] [AllowAnonymous] - public async Task> UpdatePicStatus(string id, int showOnMap,int display,string fileTags,string graffitiJson) + public async Task> UpdatePicStatus(string id, int showOnMap, int display, string fileTags, + string graffitiJson) { var result = new Response(); try { - result = await _app.UpdatePicStatus(id, showOnMap, display,fileTags,graffitiJson); + result = await _app.UpdatePicStatus(id, showOnMap, display, fileTags, graffitiJson); } catch (Exception ex) { result.Code = 500; result.Message = ex.Message; } + return result; } @@ -739,6 +753,7 @@ namespace OpenAuth.WebApi.Controllers.ServiceControllers result.Code = 500; result.Message = ex.Message; } + return result; } @@ -756,6 +771,7 @@ namespace OpenAuth.WebApi.Controllers.ServiceControllers result.Code = 500; result.Message = ex.Message; } + return result; } @@ -774,8 +790,10 @@ namespace OpenAuth.WebApi.Controllers.ServiceControllers result.Code = 500; result.Message = ex.Message; } + return result; } + [HttpGet] [AllowAnonymous] public async Task> getMiniPic() @@ -783,9 +801,10 @@ namespace OpenAuth.WebApi.Controllers.ServiceControllers var result = new Response(); try { - // string presignedUrl = "http://175.27.168.120:6014/test/44fc8b4b-9448-4e79-a71d-536d094b8598/ad854032-d4b7-42dc-8ac0-d1faef0ebc1e/DJI_202507231000_002_ad854032-d4b7-42dc-8ac0-d1faef0ebc1e/DJI_20250723100110_0001_V.jpeg"; - var imageStream = _minioService.GetObjectAsStream("test", "44fc8b4b-9448-4e79-a71d-536d094b8598/ad854032-d4b7-42dc-8ac0-d1faef0ebc1e/DJI_202507231000_002_ad854032-d4b7-42dc-8ac0-d1faef0ebc1e/DJI_20250723100110_0001_V.jpeg"); - // var imageStream = await _httpClient.GetStreamAsync(presignedUrl); + // string presignedUrl = "http://175.27.168.120:6014/test/44fc8b4b-9448-4e79-a71d-536d094b8598/ad854032-d4b7-42dc-8ac0-d1faef0ebc1e/DJI_202507231000_002_ad854032-d4b7-42dc-8ac0-d1faef0ebc1e/DJI_20250723100110_0001_V.jpeg"; + var imageStream = _minioService.GetObjectAsStream("test", + "44fc8b4b-9448-4e79-a71d-536d094b8598/ad854032-d4b7-42dc-8ac0-d1faef0ebc1e/DJI_202507231000_002_ad854032-d4b7-42dc-8ac0-d1faef0ebc1e/DJI_20250723100110_0001_V.jpeg"); + // var imageStream = await _httpClient.GetStreamAsync(presignedUrl); using (var image = Image.Load(imageStream.Result)) { @@ -803,18 +822,20 @@ namespace OpenAuth.WebApi.Controllers.ServiceControllers { thumbnail.SaveAsJpeg(memoryStream); // 可以根据需要选择不同的格式,如Png, Bmp等。 memoryStream.Position = 0; // 重置流的位置到开始处 - + // 上传缩略图到MinIO - await _minioService.PutObjectAsync("test" , "suolue_DJI_20250723100110_0001_V.jpeg", "abc/suolue_DJI_20250723100110_0001_V.jpeg", memoryStream); // 根据实际格式修改Content-Type + await _minioService.PutObjectAsync("test", "suolue_DJI_20250723100110_0001_V.jpeg", + "abc/suolue_DJI_20250723100110_0001_V.jpeg", memoryStream); // 根据实际格式修改Content-Type } } - } + } catch (Exception ex) { result.Code = 500; result.Message = ex.Message; } + return result; } } -} +} \ No newline at end of file