main
洁 任 2 months ago
commit 01b87dbbf2

@ -408,7 +408,7 @@ namespace OpenAuth.App.ServiceApp
#endregion
public async Task<Response<PageInfo<List<LasaMediaFile>>>> GetMediaFile(string taskId, string airId, string device,
public async Task<Response<PageInfo<List<LasaMediaFile>>>> GetMediaFile(string flightId,string taskId, string airId, string device,
int? type, string picname, DateTime? startTime, DateTime? endTime, int page, int limit, string parentKey, int? objectKeyExist)
{
RefAsync<int> totalCount = 0;
@ -417,6 +417,7 @@ namespace OpenAuth.App.ServiceApp
Console.WriteLine(startTime.ToString());
var list = await db.LasaMediaFile.AsQueryable()
.LeftJoin<LasaTask>((x, b) => x.FlightId == b.FlightId)
.WhereIF(!string.IsNullOrEmpty(flightId), (x, b) => x.FlightId == flightId)
.WhereIF(!string.IsNullOrEmpty(device), (x, b) => x.DroneModelKey == device)
.WhereIF(!string.IsNullOrEmpty(picname), (x, b) => x.Name.Contains(picname))
.WhereIF(!string.IsNullOrEmpty(airId), (x, b) => b.AirLineId == airId)

@ -1,7 +1,11 @@
using Infrastructure;
using DocumentFormat.OpenXml.Bibliography;
using DocumentFormat.OpenXml.EMMA;
using Infrastructure;
using Infrastructure.CloudSdk.minio;
using Infrastructure.Extensions;
using Infrastructure.Helpers;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Logging.Log4Net.AspNetCore.Entities;
using Minio;
using Newtonsoft.Json;
using OpenAuth.App.BaseApp.Base;
@ -18,6 +22,7 @@ using System.Drawing.Drawing2D;
using System.Drawing.Imaging;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Text;
using System.Text.Json.Nodes;
using System.Threading.Tasks;
@ -27,6 +32,9 @@ namespace OpenAuth.App.ServiceApp.Algo
public class DaHuaAiApp : SqlSugarBaseApp<LasaAlgorithmsRepository, SugarDbContext>
{
// 8192坐标系
private const float STANDARD_WIDTH = 8192f;
private const float STANDARD_HEIGHT = 8192f;
public MinioService _minioService;
private readonly ILogger<DaHuaAiApp> _logger;
public DaHuaAiApp(ISugarUnitOfWork<SugarDbContext> unitWork, MinioService minioService, ILogger<DaHuaAiApp> logger,
@ -344,12 +352,161 @@ namespace OpenAuth.App.ServiceApp.Algo
}
#endregion
#region 烟雾报警
private static readonly HttpClient httpClient = new HttpClient();
public async Task<Response<bool>> AddDaHuaSmokeDetectionImg(string info)
{
Console.WriteLine(info);
_logger.LogError("烟雾报警数据;" + info);
var config = ConfigHelper.GetConfigRoot();
var ImgUrlIp = config["DaHua:ImgUrl"];
using (var db = UnitWork.CreateContext())
{
var data = JsonConvert.DeserializeObject<dynamic>(info);
var imageList = data.imageList;
foreach (var img in imageList)
{
//var uploadedUrl = await DrawRectanglesOnImageAsync(img.imgUrl.ToString().Replace("\\", ""), img.objectRect);
var uploadedUrl = await DrawRectanglesOnImageAsync(ImgUrlIp + img.imgUrl.ToString().Replace("\\", ""), img.objectRect);
Console.WriteLine($"已处理图片 {uploadedUrl}");
LasaAiAchievement lasaAiAchievement = new LasaAiAchievement();
lasaAiAchievement.Id = Guid.NewGuid().ToString();
lasaAiAchievement.CreateTime = DateTime.Now;
lasaAiAchievement.TaskId = "10";
lasaAiAchievement.AiModel = "DaHuaSmokeDetection";
lasaAiAchievement.Tag = "";
lasaAiAchievement.AlgoId = "";
lasaAiAchievement.Title = "烟雾报警";
//var confidence = tag.Select(r => r.confidence).Max();
//var confidence = item.confidence;
//if (confidence < 0.3)
//{
// break;
//}
//lasaAiAchievement.ConfidenceLevel = (float)Math.Round(confidence, 2) * 100;
//插入详情
LasaAiAchievementDetail lasaAiAchievementDetail = new LasaAiAchievementDetail()
{
Id = Guid.NewGuid().ToString(),
Image = uploadedUrl,
AiAchievementId = lasaAiAchievement.Id,
//Lat = lat,
//Lng = lng
};
lasaAiAchievement.Cover = uploadedUrl;
//lasaAiAchievement.Lat = (float)lat;
//lasaAiAchievement.Lng = (float)lng;
await db.LasaAiAchievement.InsertAsync(lasaAiAchievement);
await db.LasaAiAchievementDetail.InsertAsync(lasaAiAchievementDetail);
}
if (db.Commit())
return new Response<bool>
{
Result = true,
Message = "添加成功"
};
else
return new Response<bool>
{
Result = false,
Message = "添加失败"
};
}
}
/// <summary>
/// 从 URL 下载图片并画框
/// </summary>
public async Task<string> DrawRectanglesOnImageAsync(string url, dynamic rects)
{
try
{
// 下载图片
//url = "http://123.132.248.154:6015/DroneEnforcement/2025/20250514/localStorage.jpg";
using var stream = await httpClient.GetStreamAsync(url);
using var image = Image.FromStream(stream);
using var g = Graphics.FromImage(image);
using var pen = new Pen(Color.Red, 5); // 红色粗线
float scaleX = image.Width / STANDARD_WIDTH;
float scaleY = image.Height / STANDARD_HEIGHT;
// 画框
foreach (var rect in rects)
{
int x = (int)(rect.objLeft * scaleX);
int y = (int)(rect.objTop * scaleY);
int width = (int)((rect.objRight - rect.objLeft) * scaleX);
int height = (int)((rect.objBottom - rect.objTop) * scaleY);
if (x < image.Width && y < image.Height && width > 0 && height > 0)
{
g.DrawRectangle(pen, x, y, width, height);
}
}
// 保存到内存流再上传
using var outputStream = new MemoryStream();
image.Save(outputStream, ImageFormat.Png);
outputStream.Position = 0;
string fileName = Path.GetFileName(new Uri(url).AbsolutePath);
// 上传到 MinIO
string uploadedUrl = await _minioService.UploadStreamFile(outputStream, fileName, "test", "yanwubaojing");
Console.WriteLine("返回 imgurl" + uploadedUrl);
return uploadedUrl;
}
catch (Exception ex)
{
Console.WriteLine($"处理图片失败: {url}, 错误: {ex.Message}");
return string.Empty;
}
}
// 定义矩形对象
public class ObjectRect
{
public int objBottom { get; set; }
public int objLeft { get; set; }
public int objRight { get; set; }
public int objTop { get; set; }
}
// 定义 imageList 里的结构
public class ImageInfo
{
public int imgHeight { get; set; }
public int imgWidth { get; set; }
public string imgUrl { get; set; }
public List<ObjectRect> objectRect { get; set; }
}
public class Root
{
public List<ImageInfo> imageList { get; set; }
}
#endregion
#region 本地模型
/// <summary>
///
/// </summary>
/// <param name="taskid">任务id</param>
/// <param name="path">图片地址</param>
/// <param name="aiid">算法id</param>
/// <param name="drone_info">无人机信息</param>
/// <param name="tag">标签信息</param>
/// <returns></returns>
public async Task<Response<bool>> AddImg(string taskid, string path, string aiid, dynamic drone_info, List<TagItem> tag)
{
using (var db = UnitWork.CreateContext())
{
_logger.LogError("标签信息:" + JsonConvert.SerializeObject(tag));
_logger.LogError("aiid" + aiid);
var config = ConfigHelper.GetConfigRoot();
var Ip = "http://" + config["Minio:Endpoint"] + "/" + config["Minio:BucketName"] + "/";
foreach (var item in tag)
{
var info = await db.LasaAiAchievement.GetFirstAsync(r => r.TaskId == taskid && r.Tag == item.class_id.ToString());
@ -395,12 +552,14 @@ namespace OpenAuth.App.ServiceApp.Algo
LasaAiAchievementDetail lasaAiAchievementDetail = new LasaAiAchievementDetail()
{
Id = Guid.NewGuid().ToString(),
Image = "http://175.27.168.120:6013/test/" + path,
//Image = "http://175.27.168.120:6013/test/" + path,
Image = Ip + path,
AiAchievementId = lasaAiAchievement.Id,
Lat = lat,
Lng = lng
};
lasaAiAchievement.Cover = "http://175.27.168.120:6013/test/" + path;
//lasaAiAchievement.Cover = "http://175.27.168.120:6013/test/" + path;
lasaAiAchievement.Cover = Ip + path;
lasaAiAchievement.Lat = (float)lat;
lasaAiAchievement.Lng = (float)lng;
await db.LasaAiAchievement.InsertAsync(lasaAiAchievement);
@ -412,7 +571,7 @@ namespace OpenAuth.App.ServiceApp.Algo
LasaAiAchievementDetail lasaAiAchievementDetail = new LasaAiAchievementDetail()
{
Id = Guid.NewGuid().ToString(),
Image = "http://175.27.168.120:6013/test/" + path,
Image = Ip + path,
AiAchievementId = info.Id,
Lat = lat,
Lng = lng

@ -0,0 +1,105 @@
using Infrastructure;
using OpenAuth.App.BaseApp.Base;
using OpenAuth.App.Interface;
using OpenAuth.Repository;
using OpenAuth.Repository.Domain;
using SqlSugar;
namespace OpenAuth.App.ServiceApp;
public class LasaAircraftServiceApp : SqlSugarBaseApp<LasaAircraft, SugarDbContext>
{
public LasaAircraftServiceApp(ISugarUnitOfWork<SugarDbContext> unitWork,
ISimpleClient<LasaAircraft> repository, IAuth auth) : base(unitWork, repository, auth)
{
}
public async Task<Response<bool>> AddLasaAircraft(LasaAircraft info)
{
info.Id = Guid.NewGuid().ToString();
info.CreateTime = DateTime.Now;
if (await Repository.InsertAsync(info))
{
return new Response<bool>
{
Result = true,
Message = "添加成功"
};
}
return new Response<bool>
{
Result = false,
Message = "添加失败"
};
}
public async Task<Response<bool>> DeleteLasaAircraft(string id)
{
if (await Repository.DeleteByIdAsync(id))
{
return new Response<bool>
{
Result = true,
Message = "删除成功"
};
}
return new Response<bool>
{
Result = false,
Message = "删除失败"
};
}
public async Task<Response<bool>> UpdateLasaAircraft(LasaAircraft info)
{
info.UpdateTime = DateTime.Now;
// 使用Updateable方法来避免空值更新问题
using (var db = Repository.AsSugarClient())
{
var result = await Repository.AsSugarClient().Updateable(info).IgnoreNullColumns().ExecuteCommandAsync();
if (result > 0)
{
return new Response<bool>
{
Result = true,
Message = "修改成功"
};
}
}
return new Response<bool>
{
Result = false,
Message = "修改失败"
};
}
public async Task<Response<PageInfo<IEnumerable<LasaAircraft>>>> GetLasaAircraftList(string key, int page,
int limit)
{
RefAsync<int> totalCount = 0;
var pageList = await Repository.AsQueryable()
.WhereIF(!string.IsNullOrEmpty(key), x => x.Name.Contains(key) || x.Sn.Contains(key))
.ToPageListAsync(page, limit, totalCount);
return new Response<PageInfo<IEnumerable<LasaAircraft>>>
{
Result = new PageInfo<IEnumerable<LasaAircraft>>
{
Items = pageList,
Total = totalCount
}
};
}
public async Task<Response<LasaAircraft>> GetLasaAircraft(string id)
{
return new Response<LasaAircraft>
{
Result = await Repository.GetByIdAsync(id)
};
}
}

@ -429,6 +429,7 @@ namespace OpenAuth.App.ServiceApp
task.FlightTaskType = 0; //
task.PlanExecuteDuration = airLine.ScheduleTime;
task.ExpectedFileCount = airLine.PictureTotal;
task.FlyNumber = 0;
var flag = await db.LasaTask.InsertAsync(task);
if (!string.IsNullOrEmpty(task.AIInspection))
{
@ -905,7 +906,7 @@ namespace OpenAuth.App.ServiceApp
#endregion
public async Task ExecuteFlyTask(string taskId)
public async Task<Response<bool>> ExecuteFlyTask(string taskId)
{
// 任务信息
var task = await Repository.ChangeRepository<SugarRepositiry<LasaTask>>().GetByIdAsync(taskId);
@ -1056,7 +1057,10 @@ namespace OpenAuth.App.ServiceApp
.AsUpdateable(taskUpdate)
.IgnoreNullColumns()
.ExecuteCommandAsync();
return;
return new Response<bool>()
{
Result = false
};
}
// 航线文件信息
@ -1202,6 +1206,32 @@ namespace OpenAuth.App.ServiceApp
Wpml = wpml
};
await Repository.ChangeRepository<SugarRepositiry<LasaTaskAssign>>().InsertAsync(taskAssign);
// 添加任务历史
await Repository.ChangeRepository<SugarRepositiry<LasaTaskHistory>>()
.InsertAsync(new LasaTaskHistory
{
Id = Guid.NewGuid().ToString(),
TaskName = task.TaskName,
Status = 0,
TaskId = taskId,
ExecuteTime = DateTime.Now,
FlightId = data.flight_id,
ExternalTaskId = task.ExternalTaskId
});
var taskUpdate1 = new LasaTask
{
Id = taskId,
//任务因挂起失败
Status = 0,
};
await Repository
.ChangeRepository<SugarRepositiry<LasaTask>>()
.AsUpdateable(taskUpdate1)
.IgnoreNullColumns()
.ExecuteCommandAsync();
return new Response<bool>(){Result = true};
}
public async Task PendingFlyTask(string taskId)
@ -2786,5 +2816,30 @@ namespace OpenAuth.App.ServiceApp
Message = "无相关信息"
};
}
public async Task<Response<dynamic>> GetTaskHistoryList(string taskId, string date)
{
DateTime start = DateTime.MinValue, end = DateTime.MaxValue;
if (!string.IsNullOrEmpty(date))
{
var array = date.Split("-");
int year = int.Parse(array[0]);
int month = int.Parse(array[1]);
start = new DateTime(year, month, 1);
end = start.AddMonths(1).AddMilliseconds(-1);;
}
var taskHistoryList = await Repository.ChangeRepository<SugarRepositiry<LasaTaskHistory>>()
.AsQueryable()
.WhereIF(!string.IsNullOrEmpty(date),
r => r.ExecuteTime >= start && r.ExecuteTime <= end)
.Where(r => r.TaskId == taskId)
.OrderByDescending(r => r.ExecuteTime)
.ToListAsync();
return new Response<dynamic>
{
Result = taskHistoryList
};
}
}
}

@ -95,6 +95,8 @@ public class ConfigSubscribe : IJob
long code = 0;
// rtmp://175.27.168.120:6019/live/
//var rtmp = "rtmp://box.wisestcity.com:1935/live/7";
// 机场推流地址地址
var rtmp = "rtmp://175.27.168.120:6019/live/7";
switch (tempStr)
{
@ -105,12 +107,6 @@ public class ConfigSubscribe : IJob
// 临时凭证上传
case "storage_config_get":
_logger.LogInformation($"进入临时凭证获取处理");
// {"bid":"afc5c13e-da1c-4a15-aec1-a765aac34c57",
// "data":{"module":0},
// "method":"storage_config_get",
// "need_reply":0,"tid":"50e8102c-da72-42b1-a899-a82a519456d9",
// "timestamp":1750575776430,
// "gateway":"8UUXN5400A079H"}
// 配置中读取minio配置
var storageConfigRequest = new TopicServicesRequest<object>()
{
@ -243,7 +239,7 @@ public class ConfigSubscribe : IJob
var isExist = await _sqlSugarClient
.Queryable<LasaMediaFile>()
.Where(x => x.Id.Equals(parentKey)).CountAsync();
if (isExist == 0)
if (isExist == 0) //
{
var date = DateTime.Now;
var timeStr = date.ToString("yyyy-MM-dd HH:mm:ss");
@ -578,14 +574,32 @@ public class ConfigSubscribe : IJob
await _sqlSugarClient.Updateable(taskRecord1)
.IgnoreNullColumns().ExecuteCommandAsync();
// todo 关于断点原因为773(电量低),处置
var taskHistory = await _sqlSugarClient
.Queryable<LasaTaskHistory>()
.Where(x => x.FlightId == flightId1)
.FirstAsync();
var taskHistoryUpdate = new LasaTaskHistory()
{
Id = taskHistory.Id,
Status = 2, //
Reason = $"{DateTime.Now:yyyy-MM-dd HH:mm:ss} {ErrorMap[code]}(错误码: {code}"
};
await _sqlSugarClient.Updateable(taskHistoryUpdate)
.IgnoreNullColumns().ExecuteCommandAsync();
}
else
{
// 航线成功
if (waylineMissionState.Equals(9)) // 航结结束,更新任务状态
{
var isHandle = IsDuplicate(Md5.Encrypt($"{result.bid}{flightId1}"));
if (isHandle)
{
break;
}
var task = await _sqlSugarClient.Queryable<LasaTask>()
.FirstAsync(y => y.Id == taskAssign1.TaskId);
// 如果开启了智能巡检
if (!string.IsNullOrEmpty(task.AIInspection) && task.AIInspection.Equals("true") &&
!string.IsNullOrEmpty(task.PushUrl))
{
@ -610,9 +624,25 @@ public class ConfigSubscribe : IJob
var record = new LasaTask()
{
Id = taskAssign1.TaskId,
Status = 5
Status = 5,
CompletedTime = DateTime.Now,
FlyNumber = task.FlyNumber + 1
};
_logger.LogDebug($"要更新的任务信息:{JsonConvert.SerializeObject(record)}");
await _sqlSugarClient.Updateable(record).IgnoreNullColumns().ExecuteCommandAsync();
var taskHistory = await _sqlSugarClient
.Queryable<LasaTaskHistory>()
.Where(x => x.FlightId == flightId1)
.FirstAsync();
var taskHistoryUpdate = new LasaTaskHistory()
{
Id = taskHistory.Id,
Status = 5,
CompletedTime = DateTime.Now,
//ActualExecuteDuration =(((DateTimeOffset)DateTime.Now).ToUnixTimeSeconds() - (DateTimeOffset)taskHistory.ExecuteTime);
};
await _sqlSugarClient.Updateable(taskHistoryUpdate)
.IgnoreNullColumns().ExecuteCommandAsync();
}
var step = (int)data.output.progress.current_step;
@ -753,14 +783,15 @@ public class ConfigSubscribe : IJob
};
_sqlSugarClient.Updateable(taskAssignRecord).IgnoreNullColumns()
.ExecuteCommand();
var taskRecord = new LasaTask()
/*
var taskRecord = new LasaTask()
{
Id = taskAssign.TaskId,
FlightId = flightId,
};
_sqlSugarClient.Updateable(taskRecord).IgnoreNullColumns()
.ExecuteCommand();
// todo 锁定这个机场 ,不再执行其它任务
// todo 锁定这个机场 ,不再执行其它任务*/
}
else
{
@ -780,6 +811,18 @@ public class ConfigSubscribe : IJob
Reason = $"{DateTime.Now:yyyy-MM-dd HH:mm:ss} {errorMsg}(错误码: {code}"
};
_sqlSugarClient.Updateable(taskUpdate).IgnoreNullColumns().ExecuteCommand();
var taskHistory1 = _sqlSugarClient
.Queryable<LasaTaskHistory>()
.Where(x => x.TaskId == taskAssign.FlightId)
.First();
var taskHistoryUpdate1 = new LasaTaskHistory()
{
Id = taskHistory1.Id,
Status = 2,
Reason = $"{DateTime.Now:yyyy-MM-dd HH:mm:ss} {errorMsg}(错误码: {code}"
};
_sqlSugarClient.Updateable(taskHistoryUpdate1).IgnoreNullColumns().ExecuteCommand();
}
}
@ -791,6 +834,17 @@ public class ConfigSubscribe : IJob
{
Id = taskAssignExecute.TaskId,
};
var taskHistory = await _sqlSugarClient
.Queryable<LasaTaskHistory>()
.Where(x => x.TaskId == taskAssignExecute.FlightId)
.FirstAsync();
var taskHistoryUpdate = new LasaTaskHistory()
{
Id = taskHistory.Id
};
var flyTask = await _sqlSugarClient.Queryable<LasaTask>()
.Where(x => x.Id == taskAssignExecute.TaskId)
.FirstAsync();
@ -802,11 +856,15 @@ public class ConfigSubscribe : IJob
// TOdo 和航线进度方法中返回的错误有没有区别
taskRecordExecute.Status = 2;
taskRecordExecute.Reason = $"{DateTime.Now:yyyy-MM-dd HH:mm:ss} {errorMsg}(错误码: {code}";
taskHistoryUpdate.Reason = $"{DateTime.Now:yyyy-MM-dd HH:mm:ss} {errorMsg}(错误码: {code}";
taskHistoryUpdate.Status = 2;
}
else
{
// 任务开始执行
taskRecordExecute.Status = 1; // 任务执行中
//taskRecordExecute.FlyNumber = flyTask.FlyNumber + 1;
taskHistoryUpdate.Status = 1;
Console.WriteLine($"任务执行响应 {code} {message}");
}
@ -819,12 +877,13 @@ public class ConfigSubscribe : IJob
{
var droneTask = new DroneDocktask()
{
id = detail.taskid,
id = detail.taskid, // 这里的id是部级任务表的id
state = 1
};
await _sqlSugarClient.Updateable(droneTask).IgnoreNullColumns().ExecuteCommandAsync();
}
await _sqlSugarClient.Updateable(taskHistoryUpdate).IgnoreNullColumns().ExecuteCommandAsync();
await _sqlSugarClient.Updateable(taskRecordExecute).IgnoreNullColumns().ExecuteCommandAsync();
break;
}

@ -0,0 +1,64 @@
using SqlSugar;
using System;
namespace OpenAuth.Repository.Domain
{
/// <summary>
/// 大飞机信息
/// </summary>
[SugarTable("lasa_aircraft")]
public class LasaAircraft
{
/// <summary>
/// 主键
/// </summary>
[SugarColumn(IsPrimaryKey = true, ColumnName = "Id")]
public string Id { get; set; }
/// <summary>
/// 无人机名称
/// </summary>
public string Name { get; set; }
/// <summary>
/// 固件版本
/// </summary>
public string FirmwareVersion { get; set; }
/// <summary>
/// 状态
/// </summary>
public int? Status { get; set; }
/// <summary>
/// 更新时间
/// </summary>
public DateTime? UpdateTime { get; set; }
/// <summary>
/// sn码
/// </summary>
public string Sn { get; set; }
/// <summary>
/// 图片
/// </summary>
public string DevicePicUrl { get; set; }
/// <summary>
/// 是否删除
/// </summary>
[SugarColumn(DefaultValue = "false")]
public bool IsDelete { get; set; } = false;
/// <summary>
/// 项目id
/// </summary>
public string WorkSpaceId { get; set; }
/// <summary>
/// 创建时间
/// </summary>
public DateTime? CreateTime { get; set; }
}
}

@ -155,6 +155,8 @@ namespace OpenAuth.Repository.Domain
public string BreakPoint { get; set; }
public string PushUrl { get; set; }
public int? FlyNumber { get; set; }
[SugarColumn(IsIgnore = true)] public string AlgoInstanceId { get; set; }
[SugarColumn(IsIgnore = true)] public string WarningTitle { get; set; }

@ -0,0 +1,77 @@
using SqlSugar;
namespace OpenAuth.Repository.Domain
{
/// <summary>
/// 任务历史记录实体类
/// </summary>
[SugarTable("lasa_task_history")]
public class LasaTaskHistory
{
/// <summary>
/// 主键ID
/// </summary>
[SugarColumn(IsPrimaryKey = true, ColumnName = "Id")]
public string Id { get; set; }
/// <summary>
/// 任务名称
/// </summary>
public string TaskName { get; set; }
/// <summary>
/// 任务状态 0-待执行任务 1-任务执行中 2-任务执行失败 5-任务成功
/// </summary>
public short? Status { get; set; }
/// <summary>
/// 任务id
/// </summary>
public string TaskId { get; set; }
/// <summary>
/// 任务执行时间
/// </summary>
public System.DateTime? ExecuteTime { get; set; }
/// <summary>
/// 任务完成时间
/// </summary>
public System.DateTime? CompletedTime { get; set; }
/// <summary>
/// 执行时长(秒)
/// </summary>
public long? ActualExecuteDuration { get; set; }
/// <summary>
/// 期望文件数量
/// </summary>
public int? ExpectedFileCount { get; set; }
/// <summary>
/// 已上传文件数量
/// </summary>
public int? UploadedFileCount { get; set; }
/// <summary>
/// 失败原因
/// </summary>
public string Reason { get; set; }
/// <summary>
/// 任务id 大疆使用
/// </summary>
public string FlightId { get; set; }
/// <summary>
/// 部级任务id
/// </summary>
public string ExternalTaskId { get; set; }
/// <summary>
/// 断点信息
/// </summary>
public string BreakPoint { get; set; }
}
}

@ -11,6 +11,7 @@ using Infrastructure.Helpers;
using SqlSugar;
using Infrastructure.Extensions;
using Infrastructure.Utilities;
using NPOI.POIFS.Properties;
using Infrastructure.Auth;
namespace OpenAuth.WebApi.Controllers
@ -193,7 +194,7 @@ namespace OpenAuth.WebApi.Controllers
foreach (var module in modules)
{
if (string.IsNullOrEmpty(module.ParentId) ||module.ParentId == "0")
if (string.IsNullOrEmpty(module.ParentId) || module.ParentId == "0")
{
rootNodes.Add(modulesMap[module.Id]);
}
@ -202,10 +203,13 @@ namespace OpenAuth.WebApi.Controllers
parentNode.Children.Add(modulesMap[module.Id]);
}
}
foreach (var moduleView in rootNodes)
{
moduleView.Children.Sort((a, b) => a.SortNo.CompareTo(b.SortNo));
}
return rootNodes.OrderBy(a => a.SortNo);
}
[HttpGet]
public Response<IEnumerable<ModuleView>> GetModulesTree(string typeid)
{
@ -289,7 +293,9 @@ namespace OpenAuth.WebApi.Controllers
var result = new Response<IEnumerable<TreeItem<ModuleView>>>();
try
{
result.Result = _authStrategyContext.Modules.WhereIF(!string.IsNullOrEmpty(typeid), a => a.ModuleTypeId == typeid).OrderBy(a => a.SortNo).GenerateTree(u => u.Id, u => u.ParentId, "0");
result.Result = _authStrategyContext.Modules
.WhereIF(!string.IsNullOrEmpty(typeid), a => a.ModuleTypeId == typeid).OrderBy(a => a.SortNo)
.GenerateTree(u => u.Id, u => u.ParentId, "0");
}
catch (CommonException ex)
{

@ -700,14 +700,14 @@ namespace OpenAuth.WebApi.Controllers.ServiceControllers
[HttpGet]
public async Task<Response<PageInfo<List<LasaMediaFile>>>> GetMediaFile(string taskId, string airId,
public async Task<Response<PageInfo<List<LasaMediaFile>>>> GetMediaFile(string flightId,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<PageInfo<List<LasaMediaFile>>>();
try
{
result = await _app.GetMediaFile(taskId, airId, device,type, picname, startTime, endTime, page, limit,
result = await _app.GetMediaFile(flightId,taskId, airId, device,type, picname, startTime, endTime, page, limit,
parentKey, objectKeyExist);
}
catch (Exception ex)

@ -240,6 +240,19 @@ namespace OpenAuth.WebApi.Controllers.ServiceControllers
Result = "执行成功"
};
}
/// <summary>
/// 测试大华
/// </summary>
/// <param name="info"></param>
/// <param name="detectRegionJson"></param>
[HttpPost]
[AllowAnonymous]
public async void AddDaHuaSmokeDetectionImg(string info)
{
await _app.AddDaHuaSmokeDetectionImg(info);
}
///// <summary>
///// 测试大华
///// </summary>

@ -0,0 +1,79 @@
using Infrastructure;
using Microsoft.AspNetCore.Mvc;
using OpenAuth.App.ServiceApp;
using OpenAuth.Repository.Domain;
namespace OpenAuth.WebApi.Controllers.ServiceControllers;
/// <summary>
/// 大飞机信息
/// </summary>
[Route("api/[controller]/[action]")]
[ApiController]
public class LasaAircraftController : ControllerBase
{
private readonly LasaAircraftServiceApp _app;
public LasaAircraftController(LasaAircraftServiceApp app)
{
_app = app;
}
/// <summary>
/// 添加大飞机信息
/// </summary>
/// <param name="info"></param>
/// <returns></returns>
[HttpPost]
public async Task<Response<bool>> AddLasaAircraft(LasaAircraft info)
{
return await _app.AddLasaAircraft(info);
}
/// <summary>
/// 删除大飞机信息
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
[HttpPost]
public async Task<Response<bool>> DeleteLasaAircraft(string id)
{
return await _app.DeleteLasaAircraft(id);
}
/// <summary>
/// 修改大飞机信息
/// </summary>
/// <param name="info"></param>
/// <returns></returns>
[HttpPost]
public async Task<Response<bool>> UpdateLasaAircraft(LasaAircraft info)
{
return await _app.UpdateLasaAircraft(info);
}
/// <summary>
/// 获取大飞机信息列表
/// </summary>
/// <param name="key"></param>
/// <param name="page"></param>
/// <param name="limit"></param>
/// <returns></returns>
[HttpGet]
public async Task<Response<PageInfo<IEnumerable<LasaAircraft>>>> GetLasaAircraftList(
[FromQuery] string key, [FromQuery] int page = 1, [FromQuery] int limit = 10)
{
return await _app.GetLasaAircraftList(key, page, limit);
}
/// <summary>
/// 获取大飞机信息详情
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
[HttpGet]
public async Task<Response<LasaAircraft>> GetLasaAircraft(string id)
{
return await _app.GetLasaAircraft(id);
}
}

@ -231,12 +231,12 @@ namespace OpenAuth.WebApi.Controllers.ServiceControllers
/// <returns></returns>
[HttpGet]
public async Task<Response<PageInfo<List<LasaTask>>>> GetTaskPageList(int page, int limit, string key,
int? status,string airLineId)
int? status, string airLineId)
{
var result = new Response<PageInfo<List<LasaTask>>>();
try
{
result = await _app.GetTaskPageList(page, limit, key, status,airLineId);
result = await _app.GetTaskPageList(page, limit, key, status, airLineId);
}
catch (Exception ex)
{
@ -557,15 +557,14 @@ namespace OpenAuth.WebApi.Controllers.ServiceControllers
// 航线任务在云端的 共享查看、下发执行、取消以及进度上报等功能。
/// <summary>
/// 解除挂起(执行任务) todo 需不需要加时间限制判断?
/// 解除挂起(执行任务)
/// </summary>
/// <param name="taskId"></param>
[HttpPost]
[AllowAnonymous]
// todo 根据项目设置的起飞条件设置是否起飞
public async Task ExecuteFlyTask(string taskId)
public async Task<Response<bool>> ExecuteFlyTask(string taskId)
{
await _app.ExecuteFlyTask(taskId);
return await _app.ExecuteFlyTask(taskId);
}
/// <summary>
@ -895,7 +894,7 @@ namespace OpenAuth.WebApi.Controllers.ServiceControllers
{
return await _app.EndAiInspection(taskid);
}
/// <summary>
/// 结束手飞任务
/// </summary>
@ -906,6 +905,7 @@ namespace OpenAuth.WebApi.Controllers.ServiceControllers
{
return await _app.EndHandFlyTask(taskid);
}
[HttpPost]
[AllowAnonymous]
public async Task<Response<bool>> TestZhiBao(string message)
@ -919,12 +919,13 @@ namespace OpenAuth.WebApi.Controllers.ServiceControllers
{
_app.CloseZhibo(videoId);
}
[HttpGet]
public async Task<Response<dynamic>> GetLastHandFlyTask()
{
return await _app.GetLastHandFlyTask();
}
/// <summary>
/// 获取无人机 dock 信息
/// </summary>
@ -936,5 +937,24 @@ namespace OpenAuth.WebApi.Controllers.ServiceControllers
{
return await _app.GetDockInfoByUavSn(uavSn);
}
/// <summary>
/// 飞行记录
/// </summary>
/// <param name="taskId"></param>
/// <returns></returns>
[HttpGet]
public async Task<Response<dynamic>> GetTaskHistoryList(string taskId,string date)
{
if (string.IsNullOrEmpty(taskId))
{
return new Response<dynamic>()
{
Code = 500,
Message = "参数缺失"
};
}
return await _app.GetTaskHistoryList(taskId,date);
}
}
}

@ -58,6 +58,7 @@ namespace OpenAuth.WebApi.Model.RabbitMQService
autoDelete: true);
//await _channel.QueueBindAsync(queueOk.QueueName, "processing_event", "event.eventNotAlarm.picture.1.#");
await _channel.QueueBindAsync(queueOk.QueueName, "processing_event", "event.behaviorAlarm.picture.1.#");
await _channel.QueueBindAsync(queueOk.QueueName, "storage_event", "event.trafficEvent.1.#");
var consumer = new AsyncEventingBasicConsumer(_channel);
consumer.ReceivedAsync += async (sender, ea) =>
{
@ -71,8 +72,8 @@ namespace OpenAuth.WebApi.Model.RabbitMQService
case "processing_event":
await _app.AddDaHuaImg(message);
break;
case "thing_event":
Console.WriteLine($"[thing_event] {message}");
case "storage_event":
await _app.AddDaHuaSmokeDetectionImg(message);
break;
default:
Console.WriteLine($"[Other:{ea.RoutingKey}] {message}");

@ -25,7 +25,7 @@ namespace OpenAuth.WebApi.Model.mqtt
public async Task HandleAsync(string topic, string payload)
{
_logger.LogError($"[Service] Topic={topic}, Payload={payload}");
//_logger.LogError($"[Service] Topic={topic}, Payload={payload}");
Console.WriteLine($"[Service] Topic={topic}, Payload={payload}");
if (payload.Contains("update_topo"))

@ -28,6 +28,7 @@
<None Update="Sqlite.db">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Remove="license.lic" />
</ItemGroup>
<ItemGroup>

@ -57,7 +57,7 @@ public class DelayedExecutionService : BackgroundService
{
_logger.LogError(ex, "ReportDroneStatus 方法执行失败");
}
} // 4. 子作用域释放AppService 及内部资源(如数据库连接)自动释放
}
await Task.CompletedTask;
}

@ -89,6 +89,9 @@
},
"AIModelApi": {
"Url": "http://192.168.10.131:9025",
"PushUrl":"rtmp://192.168.3.17:1935/live/11"
"PushUrl": "rtmp://192.168.3.17:1935/live/11"
},
"DaHua": {
"ImgUrl": "http://123.132.248.154:9585"
}
}

Loading…
Cancel
Save