main
zhangbin 3 months ago
commit 873608fb01

@ -9,13 +9,13 @@ public class GatewayManager
/// <summary>
/// 机场任务准备异常通知 flight_setup_exception_notify
/// </summary>
public string FlightSetupExceptionNotify =
public static string FlightSetupExceptionNotify =
TopicConst.ThingModelPre + TopicConst.Product + "%s" + TopicConst.EventsSuffix;
/// <summary>
/// 下发任务 down(向设备端发布消息) flighttask_prepare(method) thing/product/{gateway_sn}/services(topic)
/// </summary>
public string FlightTaskPrepare = TopicConst.ThingModelPre + TopicConst.Product + "%s" + TopicConst.ServicesSuffix;
public static string FlightTaskPrepare = TopicConst.ThingModelPre + TopicConst.Product + "%s" + TopicConst.ServicesSuffix;
public GatewayManager(string gatewaySn, string droneSn, GatewayType gatewayType)
{

@ -1,5 +1,5 @@
using MQTTnet;
using MQTTnet.Adapter;
using Microsoft.Extensions.Configuration;
using MQTTnet;
using MQTTnet.Client;
using MQTTnet.Protocol;
@ -68,7 +68,7 @@ public class MqttClientManager
/// <param name="message">json</param>
public async Task PublishAsync(string topic, string message)
{
// MqttChannelAdapter
// MqttChannelAdapter
var mqttMsg = new MqttApplicationMessageBuilder()
.WithTopic(topic)
.WithPayload(message)

@ -17,6 +17,7 @@
<PackageReference Include="log4net" Version="2.0.15" />
<PackageReference Include="Microsoft.Extensions.Caching.Memory" Version="6.0.1" />
<PackageReference Include="Microsoft.Extensions.Hosting" Version="6.0.1" />
<PackageReference Include="MQTTnet" Version="4.1.4.563" />
<PackageReference Include="NetTopologySuite" Version="2.5.0" />
<PackageReference Include="NetTopologySuite.IO.Esri.Shapefile" Version="1.0.0" />
<PackageReference Include="NetTopologySuite.IO.ShapeFile" Version="2.1.0" />

@ -512,17 +512,17 @@ namespace OpenAuth.App
{
using (var uow = base.UnitWork.CreateContext())
{
foreach (var item in uow.Db.DbMaintenance.GetTableInfoList().Where(r => r.Name.ToLower().StartsWith("lasa_workspace")))
foreach (var item in uow.Db.DbMaintenance.GetTableInfoList().Where(r => r.Name.ToLower().StartsWith("lasa_spacelockfly")))
{
//string entityName = item.Name.Substring(0, 1).ToUpper() + item.Name.Substring(1, 7).ToLower() + item.Name.Substring(9, 1).ToUpper() + item.Name.Substring(10).ToLower();/*实体名大写*/
string entityName = "LasaWorkspace1";
string entityName = "LasaSpaceLockFly";
uow.Db.MappingTables.Add(entityName, item.Name);
//foreach (var col in db.DbMaintenance.GetColumnInfosByTableName(item.Name))
//{
// db.MappingColumns.Add(col.DbColumnName.ToUpper() /*类的属性大写*/, col.DbColumnName, entityName);
//}
}
uow.Db.DbFirst.Where(r => r.ToLower().StartsWith("lasa_workspace")).IsCreateAttribute().CreateClassFile("E:\\低空态势感知\\code\\OpenAuth.Repository\\Domain", "OpenAuth.Repository.Domain");
uow.Db.DbFirst.Where(r => r.ToLower().StartsWith("lasa_spacelockfly")).IsCreateAttribute().CreateClassFile("E:\\低空态势感知\\code\\OpenAuth.Repository\\Domain", "OpenAuth.Repository.Domain");
uow.Commit();
}
return "更新实体成功";

@ -1,9 +1,12 @@
using Infrastructure;
using DocumentFormat.OpenXml.Wordprocessing;
using Infrastructure;
using OpenAuth.App.BaseApp.Base;
using OpenAuth.App.Interface;
using OpenAuth.App.ServiceApp.Request;
using OpenAuth.App.ServiceApp.Response;
using OpenAuth.Repository;
using OpenAuth.Repository.Domain;
using OpenAuth.WebApi.CloudSdk;
using SqlSugar;
namespace OpenAuth.App.ServiceApp
@ -57,6 +60,7 @@ namespace OpenAuth.App.ServiceApp
};
}
}
/// <summary>
/// 获取任务列表
/// </summary>
@ -187,15 +191,27 @@ namespace OpenAuth.App.ServiceApp
/// </summary>
/// <param name="key"></param>
/// <returns></returns>
public async Task<Response<List<LasaWorkspace>>> GetWorkspaceList(string key)
public async Task<Response<List<dynamic>>> GetWorkspaceList(string key)
{
RefAsync<int> totalCount = 0;
using (var db = UnitWork.CreateContext())
{
var list = await db.LasaWorkspace.AsQueryable()
.WhereIF(!string.IsNullOrEmpty(key), a => a.WorkspaceName.Contains(key))
.LeftJoin<SysUser>((a,u)=>a.CreateId==u.Id)
.Select<dynamic>((a, u) => new
{
a.Id,
a.WorkspaceName,
a.WorkspaceDesc,
a.Sate,
a.CreateTime,
a.CreateId,
u.Account,
u.Name
})
.ToListAsync();
return new Response<List<LasaWorkspace>>
return new Response<List<dynamic>>
{
Result = list
};
@ -228,6 +244,13 @@ namespace OpenAuth.App.ServiceApp
sd.UserId = item;
users.Add(sd);
}
foreach (var item in info.Lockfly)
{
item.Id = Guid.NewGuid().ToString();
item.WorkSpaceId= lasaWorkspace.Id;
await db.LasaSpaceLockFly.InsertAsync(item);
}
await db.LasaWorkspace.InsertAsync(lasaWorkspace);
await db.LasaSpaceDevice.InsertRangeAsync(devices);
await db.LasaSpaceUser.InsertRangeAsync(users);
@ -261,6 +284,20 @@ namespace OpenAuth.App.ServiceApp
sd.UserId = item;
users.Add(sd);
}
foreach (var item in info.Lockfly)
{
if (!string.IsNullOrEmpty(item.Id))
{
await db.LasaSpaceLockFly.UpdateAsync(item);
}
else
{
item.Id = Guid.NewGuid().ToString();
item.WorkSpaceId = lasaWorkspace.Id;
await db.LasaSpaceLockFly.InsertAsync(item);
}
}
await db.LasaSpaceDevice.DeleteAsync(r=>r.WorkSpaceId == lasaWorkspace.Id);
await db.LasaSpaceDevice.InsertRangeAsync(devices);
await db.LasaSpaceUser.DeleteAsync(r=>r.WorkSpaceId==lasaWorkspace.Id);
@ -271,6 +308,56 @@ namespace OpenAuth.App.ServiceApp
return new Response<bool> { Result = false, Message = "编辑失败" };
}
}
//获取无人机信息
public async Task<Response<List<LasaDronePort>>> GetUavList()
{
using (var db = UnitWork.CreateContext())
{
var list=db.LasaSpaceDevice.AsQueryable()?.Select(r=>r.DeviceId).ToList();
var uavlist = await db.LasaDronePort.AsQueryable()
.Where(r=>!list.Contains(r.Id))
.ToListAsync();
return new Response<List<LasaDronePort>>
{
Result=uavlist
};
}
}
/// <summary>
/// 根据项目id获取项目信息
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
public async Task<Response<WorkSpaceRes>> GetWorkSpaceById(string id)
{
using (var db = UnitWork.CreateContext())
{
WorkSpaceRes res=new WorkSpaceRes();
var workspace= await db.LasaWorkspace.AsQueryable().Where(r=>r.Id==id).FirstAsync();
var sysuser = db.User.AsQueryable()
.LeftJoin<LasaSpaceUser>((r, a) => r.Id == a.UserId)
.Where((r, a) => a.WorkSpaceId == id)
.Select((r, a) => r).ToList();
var uav=db.LasaDronePort.AsQueryable()
.LeftJoin<LasaSpaceDevice>((r,a)=>r.Id==a.DeviceId)
.Where((r,a)=>a.WorkSpaceId==id)
.Select((r,a)=>r).ToList();
var lockfly=db.LasaSpaceLockFly.AsQueryable().Where(r=>r.WorkSpaceId==id).ToList();
res.users = sysuser;
res.LasaDronePort = uav;
res.lasaSpaceLockFlies = lockfly;
res.workspace = workspace;
return new Response<WorkSpaceRes>
{
Result = res
};
}
}
//删除项目
public async Task<Response<bool>> DeleteWorkspace(string id)
{
@ -287,5 +374,20 @@ namespace OpenAuth.App.ServiceApp
}
}
#endregion
public async Task ExecuteFlyTask(string taskId)
{
var airLine = await Repository.ChangeRepository<SugarRepositiry<LasaAirLine>>().GetByIdAsync(taskId);
var wpml = airLine.WPML;
// todo 查询sn
var device = await Repository.ChangeRepository<SugarRepositiry<LasaUav>>().GetByIdAsync(airLine.UavId);
var topic = string.Format(GatewayManager.FlightTaskPrepare, airLine.UavId) ;
// todo 1. 下发任务2. 执行任务 3. 改变任务库任务状态
// todo 创建飞行任务
// todo 改变任务状态
// todo
}
}
}

@ -12,5 +12,6 @@ namespace OpenAuth.App.ServiceApp.Request
public LasaWorkspace LasaWorkspace { get; set; }
public List<long> UserIds { get; set; }
public List<string> DeviceIds { get; set; }
public List<LasaSpaceLockFly> Lockfly { get; set; }
}
}

@ -0,0 +1,17 @@
using OpenAuth.Repository.Domain;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace OpenAuth.App.ServiceApp.Response
{
public class WorkSpaceRes
{
public LasaWorkspace workspace { get; set; }
public List<SysUser> users { get; set; }
public List<LasaDronePort> LasaDronePort { get; set; }
public List<LasaSpaceLockFly> lasaSpaceLockFlies { get; set; }
}
}

@ -0,0 +1,63 @@
using System;
using System.Linq;
using System.Text;
using SqlSugar;
namespace OpenAuth.Repository.Domain
{
///<summary>
///项目阻飞参数表
///</summary>
[SugarTable("lasa_spacelockfly")]
public partial class LasaSpaceLockFly
{
public LasaSpaceLockFly(){
WindSpeed = 0;
WeatherWindSpeed=0;
}
/// <summary>
/// Desc:主键
/// Default:
/// Nullable:False
/// </summary>
[SugarColumn(IsPrimaryKey=true)]
public string Id {get;set;}
/// <summary>
/// Desc:名称
/// Default:
/// Nullable:True
/// </summary>
public string Name {get;set;}
/// <summary>
/// Desc:风速
/// Default:
/// Nullable:True
/// </summary>
public int WindSpeed {get;set;}
/// <summary>
/// Desc:天气预报风速
/// Default:
/// Nullable:True
/// </summary>
public int WeatherWindSpeed {get;set;}
/// <summary>
/// Desc:雨量
/// Default:
/// Nullable:True
/// </summary>
public string RainFall {get;set;}
/// <summary>
/// Desc:雨量
/// Default:
/// Nullable:True
/// </summary>
public string WorkSpaceId { get; set; }
}
}

@ -11,171 +11,194 @@ namespace OpenAuth.Repository.Domain
[SugarTable("lasa_workspace")]
public partial class LasaWorkspace
{
public LasaWorkspace(){
}
/// <summary>
/// Desc:标识
/// Default:
/// Nullable:False
/// </summary>
[SugarColumn(IsPrimaryKey=true)]
public string Id {get;set;}
/// <summary>
/// Desc:项目名称
/// Default:
/// Nullable:False
/// </summary>
public string WorkspaceName {get;set;}
/// <summary>
/// Desc:项目描述
/// Default:
/// Nullable:False
/// </summary>
public string WorkspaceDesc {get;set;}
/// <summary>
/// Desc:平台名称
/// Default:
/// Nullable:True
/// </summary>
public string PlatformName {get;set;}
/// <summary>
/// Desc:创建时间
/// Default:
/// Nullable:True
/// </summary>
public DateTime? CreateTime {get;set;}
/// <summary>
/// Desc:创建人
/// Default:
/// Nullable:True
/// </summary>
public long? CreateId {get;set;}
/// <summary>
/// Desc:绑定码
/// Default:
/// Nullable:True
/// </summary>
public string BindCode {get;set;}
/// <summary>
/// Desc:作业中心点经度
/// Default:0
/// Nullable:True
/// </summary>
public decimal? CenterLng {get;set;}
/// <summary>
/// Desc:作业中心点维度
/// Default:
/// Nullable:True
/// </summary>
public decimal? CenterLat {get;set;}
/// <summary>
/// Desc:是否允许申请码加入项目
/// Default:false
/// Nullable:True
/// </summary>
public bool IsAllowRequestCode {get;set;}
/// <summary>
/// Desc:申请码
/// Default:
/// Nullable:True
/// </summary>
public string RequestCode {get;set;}
/// <summary>
/// Desc:申请码截止时间
/// Default:
/// Nullable:True
/// </summary>
public DateTime? RequestCodeCutOffTime {get;set;}
/// <summary>
/// Desc:云端阻飞
/// Default:false
/// Nullable:True
/// </summary>
public bool IsCloudBlockFlight {get;set;}
/// <summary>
/// Desc:天气预报阻飞
/// Default:false
/// Nullable:True
/// </summary>
public bool IsWeatherBlockFlight {get;set;}
/// <summary>
/// Desc:多机安全起降
/// Default:false
/// Nullable:True
/// </summary>
public bool IsMultipleAircraft {get;set;}
/// <summary>
/// Desc:机场自动录制
/// Default:false
/// Nullable:True
/// </summary>
public bool IsAirportRecord {get;set;}
/// <summary>
/// Desc:飞行器自动录制
/// Default:false
/// Nullable:True
/// </summary>
public bool IsAircraftRecord {get;set;}
/// <summary>
/// Desc:直播分享
/// Default:false
/// Nullable:True
/// </summary>
public bool IsLiveShare {get;set;}
/// <summary>
/// Desc:媒体分享
/// Default:false
/// Nullable:True
/// </summary>
public bool IsMediaShare {get;set;}
/// <summary>
/// Desc:设备直传
/// Default:false
/// Nullable:True
/// </summary>
public bool IsDeviceTrans {get;set;}
/// <summary>
/// Desc:设备直传--计划设置
/// Default:false
/// Nullable:True
/// </summary>
public bool IsDeicePlaneTrans {get;set;}
/// <summary>
/// Desc:项目状态0进行中1已归档
/// Default:
/// Nullable:True
/// </summary>
public short Sate {get;set;}
/// <summary>
/// Desc:是否删除
/// Default:false
/// Nullable:True
/// </summary>
public bool IsDelete {get;set;}
public LasaWorkspace()
{
// 初始化所有bool字段为false
IsAllowRequestCode = false;
IsCloudBlockFlight = false;
IsWeatherBlockFlight = false;
IsMultipleAircraft = false;
IsAirportRecord = false;
IsAircraftRecord = false;
IsLiveShare = false;
IsMediaShare = false;
IsDeviceTrans = false;
IsDeicePlaneTrans = false;
IsDelete = false;
}
/// <summary>
/// Desc:标识
/// Default:
/// Nullable:False
/// </summary>
[SugarColumn(IsPrimaryKey = true)]
public string Id { get; set; }
/// <summary>
/// Desc:项目名称
/// Default:
/// Nullable:False
/// </summary>
public string WorkspaceName { get; set; }
/// <summary>
/// Desc:项目描述
/// Default:
/// Nullable:False
/// </summary>
public string WorkspaceDesc { get; set; }
/// <summary>
/// Desc:平台名称
/// Default:
/// Nullable:True
/// </summary>
public string PlatformName { get; set; }
/// <summary>
/// Desc:创建时间
/// Default:
/// Nullable:True
/// </summary>
public DateTime? CreateTime { get; set; }
/// <summary>
/// Desc:创建人
/// Default:
/// Nullable:True
/// </summary>
public long? CreateId { get; set; }
/// <summary>
/// Desc:绑定码
/// Default:
/// Nullable:True
/// </summary>
public string BindCode { get; set; }
/// <summary>
/// Desc:作业中心点经度
/// Default:0
/// Nullable:True
/// </summary>
public decimal? CenterLng { get; set; }
/// <summary>
/// Desc:作业中心点维度
/// Default:
/// Nullable:True
/// </summary>
public decimal? CenterLat { get; set; }
/// <summary>
/// Desc:是否允许申请码加入项目
/// Default:false
/// Nullable:True
/// </summary>
[SugarColumn(DefaultValue = "false")]
public bool IsAllowRequestCode { get; set; }
/// <summary>
/// Desc:申请码
/// Default:
/// Nullable:True
/// </summary>
public string RequestCode { get; set; }
/// <summary>
/// Desc:申请码截止时间
/// Default:
/// Nullable:True
/// </summary>
public DateTime? RequestCodeCutOffTime { get; set; }
/// <summary>
/// Desc:云端阻飞
/// Default:false
/// Nullable:True
/// </summary>
[SugarColumn(DefaultValue = "false")]
public bool IsCloudBlockFlight { get; set; }
/// <summary>
/// Desc:天气预报阻飞
/// Default:false
/// Nullable:True
/// </summary>
[SugarColumn(DefaultValue = "false")]
public bool IsWeatherBlockFlight { get; set; }
/// <summary>
/// Desc:多机安全起降
/// Default:false
/// Nullable:True
/// </summary>
[SugarColumn(DefaultValue = "false")]
public bool IsMultipleAircraft { get; set; }
/// <summary>
/// Desc:机场自动录制
/// Default:false
/// Nullable:True
/// </summary>
[SugarColumn(DefaultValue = "false")]
public bool IsAirportRecord { get; set; }
/// <summary>
/// Desc:飞行器自动录制
/// Default:false
/// Nullable:True
/// </summary>
[SugarColumn(DefaultValue = "false")]
public bool IsAircraftRecord { get; set; }
/// <summary>
/// Desc:直播分享
/// Default:false
/// Nullable:True
/// </summary>
[SugarColumn(DefaultValue = "false")]
public bool IsLiveShare { get; set; }
/// <summary>
/// Desc:媒体分享
/// Default:false
/// Nullable:True
/// </summary>
[SugarColumn(DefaultValue = "false")]
public bool IsMediaShare { get; set; }
/// <summary>
/// Desc:设备直传
/// Default:false
/// Nullable:True
/// </summary>
[SugarColumn(DefaultValue = "false")]
public bool IsDeviceTrans { get; set; }
/// <summary>
/// Desc:设备直传--计划设置
/// Default:false
/// Nullable:True
/// </summary>
[SugarColumn(DefaultValue = "false")]
public bool IsDeicePlaneTrans { get; set; }
/// <summary>
/// Desc:项目状态0进行中1已归档
/// Default:
/// Nullable:True
/// </summary>
public short Sate { get; set; }
/// <summary>
/// Desc:是否删除
/// Default:false
/// Nullable:True
/// </summary>
[SugarColumn(DefaultValue = "false")]
public bool IsDelete { get; set; }
}
}

@ -67,7 +67,6 @@ namespace OpenAuth.Repository
public SugarRepositiry<LasaWorkspace> LasaWorkspace { get; set; }
public SugarRepositiry<LasaSpaceUser> LasaSpaceUser { get; set; }
public SugarRepositiry<LasaSpaceDevice> LasaSpaceDevice { get; set; }
public SugarRepositiry<LasaDeviceBindingCode> LasaDeviceBindingCode { get; set; }
#endregion
}
}

@ -6,6 +6,7 @@ using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using OpenAuth.App.ServiceApp;
using OpenAuth.App.ServiceApp.Request;
using OpenAuth.App.ServiceApp.Response;
using OpenAuth.Repository.Domain;
namespace OpenAuth.WebApi.Controllers.ServiceControllers
@ -258,9 +259,9 @@ namespace OpenAuth.WebApi.Controllers.ServiceControllers
/// <param name="key"></param>
/// <returns></returns>
[HttpGet]
public async Task<Response<List<LasaWorkspace>>> GetWorkspaceList(string key)
public async Task<Response<List<dynamic>>> GetWorkspaceList(string key)
{
var result = new Response<List<LasaWorkspace>>();
var result = new Response<List<dynamic>>();
try
{
result = await _app.GetWorkspaceList(key);
@ -304,6 +305,50 @@ namespace OpenAuth.WebApi.Controllers.ServiceControllers
return await _app.DeleteWorkspace(id);
}
/// <summary>
/// 获取机场列表,添加项目使用
/// </summary>
/// <param name="key"></param>
/// <returns></returns>
[HttpGet]
public async Task<Response<List<LasaDronePort>>> GetUavList()
{
var result = new Response<List<LasaDronePort>>();
try
{
result = await _app.GetUavList();
}
catch (Exception ex)
{
result.Code = 500;
result.Message = ex.Message;
}
return result;
}
/// <summary>
/// 根据项目id获取项目信息编辑项目使用
/// </summary>
/// <param name="id">项目id</param>
/// <returns></returns>
[HttpGet]
public async Task<Response<WorkSpaceRes>> GetWorkSpaceById(string id)
{
var result = new Response<WorkSpaceRes>();
try
{
result = await _app.GetWorkSpaceById(id);
}
catch (Exception ex)
{
result.Code = 500;
result.Message = ex.Message;
}
return result;
}
#endregion
// 航线任务在云端的 共享查看、下发执行、取消以及进度上报等功能。
@ -313,12 +358,10 @@ namespace OpenAuth.WebApi.Controllers.ServiceControllers
/// </summary>
/// <param name="taskId"></param>
[HttpPost]
public async Task ExecuteTask(string taskId)
public async Task ExecuteFlyTask(string taskId)
{
// todo 取得任务信息
// todo 创建飞行任务
// todo 改变任务状态
// todo
await _app.ExecuteFlyTask(taskId);
}
/// <summary>

@ -42,7 +42,6 @@
<PackageReference Include="MiniProfiler.AspNetCore" Version="4.2.22" />
<PackageReference Include="MiniProfiler.AspNetCore.Mvc" Version="4.2.22" />
<PackageReference Include="MiniProfiler.Shared" Version="4.2.22" />
<PackageReference Include="MQTTnet" Version="4.1.4.563" />
<PackageReference Include="Newtonsoft.Json" Version="13.0.2" />
<PackageReference Include="NPOI" Version="2.5.6" />
<PackageReference Include="NUnit" Version="3.13.1" />
@ -80,12 +79,6 @@
</ItemGroup>
<ItemGroup>
<Folder Include="CloudSdk\common\" />
<Folder Include="CloudSdk\config\" />
<Folder Include="CloudSdk\control\" />
<Folder Include="CloudSdk\device\" />
<Folder Include="CloudSdk\meida\" />
<Folder Include="CloudSdk\wayline\" />
<Folder Include="Controllers\BaseControllers\Permission\" />
</ItemGroup>

Loading…
Cancel
Save