475 lines
14 KiB
C#
475 lines
14 KiB
C#
using System.Text;
|
||
using Infrastructure;
|
||
using Infrastructure.CloudSdk.wayline;
|
||
using Infrastructure.Extensions;
|
||
using Infrastructure.Helpers;
|
||
using Microsoft.AspNetCore.Authorization;
|
||
using Microsoft.AspNetCore.Mvc;
|
||
using Newtonsoft.Json;
|
||
using OpenAuth.App.ServiceApp;
|
||
using OpenAuth.App.ServiceApp.Request;
|
||
using OpenAuth.App.ServiceApp.Response;
|
||
using OpenAuth.Repository.Domain;
|
||
|
||
namespace OpenAuth.WebApi.Controllers.ServiceControllers
|
||
{
|
||
/// <summary>
|
||
/// 后台管理模块
|
||
/// </summary>
|
||
[Route("api/[controller]/[action]")]
|
||
[ApiController]
|
||
public class ManageController : ControllerBase
|
||
{
|
||
private readonly ManageApp _app;
|
||
private readonly MqttClientManager _mqttClientManager;
|
||
|
||
public ManageController(ManageApp app, MqttClientManager mqttClientManager)
|
||
{
|
||
_app = app;
|
||
_mqttClientManager = mqttClientManager;
|
||
}
|
||
|
||
#region 机场管理
|
||
|
||
/// <summary>
|
||
/// 获取机场列表
|
||
/// </summary>
|
||
/// <param name="page"></param>
|
||
/// <param name="limit"></param>
|
||
/// <param name="key"></param>
|
||
/// <returns></returns>
|
||
[HttpGet]
|
||
[AllowAnonymous]
|
||
public async Task<Response<PageInfo<List<LasaDronePort>>>> GetDataList(int page, int limit, string key)
|
||
{
|
||
var result = new Response<PageInfo<List<LasaDronePort>>>();
|
||
try
|
||
{
|
||
result = await _app.GetPageList(page, limit, key);
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
result.Code = 500;
|
||
result.Message = ex.Message;
|
||
}
|
||
|
||
return result;
|
||
}
|
||
|
||
/// <summary>
|
||
/// 编辑机场
|
||
/// </summary>
|
||
/// <returns></returns>
|
||
[HttpPost]
|
||
public async Task<Response<bool>> EditDronePort(LasaDronePort info)
|
||
{
|
||
return await _app.EditDronePort(info);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 删除机场
|
||
/// </summary>
|
||
/// <returns></returns>
|
||
[HttpPost]
|
||
public async Task<Response<bool>> DeleteDronePort(string id)
|
||
{
|
||
return await _app.DeleteDronePort(id);
|
||
}
|
||
|
||
#endregion
|
||
|
||
#region 无人机管理
|
||
|
||
/// <summary>
|
||
/// 获取无人机列表
|
||
/// </summary>
|
||
/// <param name="pageIndex"></param>
|
||
/// <param name="pageSize"></param>
|
||
/// <param name="key"></param>
|
||
/// <returns></returns>
|
||
[HttpGet]
|
||
[AllowAnonymous]
|
||
public async Task<Response<PageInfo<List<LasaUav>>>> GetUavPageList(int page, int limit, string key)
|
||
{
|
||
var result = new Response<PageInfo<List<LasaUav>>>();
|
||
try
|
||
{
|
||
result = await _app.GetUavPageList(page, limit, key);
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
result.Code = 500;
|
||
result.Message = ex.Message;
|
||
}
|
||
|
||
return result;
|
||
}
|
||
|
||
/// <summary>
|
||
/// 编辑无人机
|
||
/// </summary>
|
||
/// <returns></returns>
|
||
[HttpPost]
|
||
public async Task<Response<bool>> EditUav(LasaUav info)
|
||
{
|
||
return await _app.EditUav(info);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 删除无人机
|
||
/// </summary>
|
||
/// <returns></returns>
|
||
[HttpPost]
|
||
public async Task<Response<bool>> DeleteUav(string id)
|
||
{
|
||
return await _app.DeleteUav(id);
|
||
}
|
||
|
||
#endregion
|
||
|
||
#region 任务管理
|
||
|
||
/// <summary>
|
||
/// 获取任务列表
|
||
/// </summary>
|
||
/// <param name="page"></param>
|
||
/// <param name="limit"></param>
|
||
/// <param name="key"></param>
|
||
/// <returns></returns>
|
||
[HttpGet]
|
||
public async Task<Response<PageInfo<List<LasaTask>>>> GetTaskPageList(int page, int limit, string key)
|
||
{
|
||
var result = new Response<PageInfo<List<LasaTask>>>();
|
||
try
|
||
{
|
||
result = await _app.GetTaskPageList(page, limit, key);
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
result.Code = 500;
|
||
result.Message = ex.Message;
|
||
}
|
||
|
||
return result;
|
||
}
|
||
|
||
/// <summary>
|
||
/// 添加任务
|
||
/// </summary>
|
||
/// <returns></returns>
|
||
[HttpPost]
|
||
public async Task<Response<bool>> AddTask(LasaTask info)
|
||
{
|
||
return await _app.AddTask(info);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 编辑任务
|
||
/// </summary>
|
||
/// <returns></returns>
|
||
[HttpPost]
|
||
public async Task<Response<bool>> EditTask(LasaTask info)
|
||
{
|
||
return await _app.EditTask(info);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 删除任务
|
||
/// </summary>
|
||
/// <returns></returns>
|
||
[HttpPost]
|
||
public async Task<Response<bool>> DeleteTask(string id)
|
||
{
|
||
return await _app.DeleteTask(id);
|
||
}
|
||
|
||
#endregion
|
||
|
||
#region 航线管理
|
||
|
||
/// <summary>
|
||
/// 获取航线列表
|
||
/// </summary>
|
||
/// <param name="page"></param>
|
||
/// <param name="limit"></param>
|
||
/// <param name="key"></param>
|
||
/// <returns></returns>
|
||
[HttpGet]
|
||
public async Task<Response<PageInfo<List<LasaAirLine>>>> GetAirLineList(int page, int limit, string key)
|
||
{
|
||
var result = new Response<PageInfo<List<LasaAirLine>>>();
|
||
try
|
||
{
|
||
result = await _app.GetAirLinePageList(page, limit, key);
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
result.Code = 500;
|
||
result.Message = ex.Message;
|
||
}
|
||
|
||
return result;
|
||
}
|
||
|
||
/// <summary>
|
||
/// 添加航线
|
||
/// </summary>
|
||
/// <returns></returns>
|
||
[HttpPost]
|
||
public async Task<Response<bool>> AddAirLine(LasaAirLine info)
|
||
{
|
||
return await _app.AddAirLine(info);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 编辑航线
|
||
/// </summary>
|
||
/// <returns></returns>
|
||
[HttpPost]
|
||
public async Task<Response<bool>> EditAirLine(LasaAirLine info)
|
||
{
|
||
return await _app.EditAirLine(info);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 删除航线
|
||
/// </summary>
|
||
/// <returns></returns>
|
||
[HttpPost]
|
||
public async Task<Response<bool>> DeleteAirLine(string id)
|
||
{
|
||
return await _app.DeleteAirLine(id);
|
||
}
|
||
|
||
// todo 已有的文件如何处理?
|
||
/// <summary>
|
||
/// 上传航线文件
|
||
/// </summary>
|
||
/// <param name="xmlFile"></param>
|
||
/// <returns></returns>
|
||
[HttpPost("upload")]
|
||
[AllowAnonymous]
|
||
public async Task<IActionResult> UploadXmlFile(IFormFile xmlFile)
|
||
{
|
||
if (xmlFile == null || xmlFile.Length == 0)
|
||
return BadRequest("文件为空");
|
||
|
||
var path = await _app.UploadFile(xmlFile);
|
||
return Ok(new { message = "上传成功", path });
|
||
}
|
||
/*/// <summary>
|
||
/// 更新航线文件
|
||
/// </summary>
|
||
/// <param name="xmlFile"></param>
|
||
/// <param name="id"></param>
|
||
/// <returns></returns>
|
||
[HttpPost("uploadwpmlfile")]
|
||
[AllowAnonymous]
|
||
public async Task<IActionResult> UploadWpmlFile(IFormFile xmlFile, string id)
|
||
{
|
||
if (xmlFile == null || xmlFile.Length == 0)
|
||
return BadRequest("文件为空");
|
||
string baseFolder = "Waylines/" + (string.IsNullOrEmpty(id) ? Guid.NewGuid().ToString() : id);
|
||
var uploadsFolder = Path.Combine(Directory.GetCurrentDirectory(), baseFolder);
|
||
if (!Directory.Exists(uploadsFolder))
|
||
Directory.CreateDirectory(uploadsFolder);
|
||
|
||
// todo 这里只有一个文件,是否得改
|
||
var filePath = Path.Combine(uploadsFolder, "waylines.wpml");
|
||
|
||
using (var stream = new FileStream(filePath, FileMode.Create))
|
||
{
|
||
await xmlFile.CopyToAsync(stream);
|
||
}
|
||
|
||
return Ok(new { message = "上传成功", path = filePath });
|
||
}*/
|
||
|
||
#endregion
|
||
|
||
#region 项目管理
|
||
|
||
/// <summary>
|
||
/// 获取项目列表
|
||
/// </summary>
|
||
/// <param name="isjoin">是否是已加入的项目(0全部,1加入,2未加入)</param>
|
||
/// <param name="key">项目名称筛选</param>
|
||
/// <param name="state">状态(0全部,1进行中,2已归档)</param>
|
||
/// <param name="order">排序</param>
|
||
/// <returns></returns>
|
||
[HttpGet]
|
||
public async Task<Response<List<dynamic>>> GetWorkspaceList(int isjoin, string key, int state,
|
||
string order = "\"CreateTime\" desc")
|
||
{
|
||
var result = new Response<List<dynamic>>();
|
||
try
|
||
{
|
||
result = await _app.GetWorkspaceList(isjoin, key, state, order);
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
result.Code = 500;
|
||
result.Message = ex.Message;
|
||
}
|
||
|
||
return result;
|
||
}
|
||
|
||
/// <summary>
|
||
/// 添加项目
|
||
/// </summary>
|
||
/// <returns></returns>
|
||
[HttpPost]
|
||
public async Task<Response<bool>> AddWorkspace(WorkSpace info)
|
||
{
|
||
return await _app.AddWorkspace(info);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 编辑项目
|
||
/// </summary>
|
||
/// <returns></returns>
|
||
[HttpPost]
|
||
public async Task<Response<bool>> EditWorkspace(WorkSpace info)
|
||
{
|
||
return await _app.EditWorkspace(info);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 删除项目
|
||
/// </summary>
|
||
/// <returns></returns>
|
||
[HttpPost]
|
||
public async Task<Response<bool>> DeleteWorkspace(string id)
|
||
{
|
||
return await _app.DeleteWorkspace(id);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 归档项目
|
||
/// </summary>
|
||
/// <returns></returns>
|
||
[HttpPost]
|
||
public async Task<Response<bool>> CompleteWorkspace(string id)
|
||
{
|
||
return await _app.CompleteWorkspace(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
|
||
|
||
// 航线任务在云端的 共享查看、下发执行、取消以及进度上报等功能。
|
||
/// <summary>
|
||
/// 解除挂起(执行任务) todo 需不需要加时间限制判断?
|
||
/// </summary>
|
||
/// <param name="taskId"></param>
|
||
[HttpPost]
|
||
public async Task ExecuteFlyTask(string taskId)
|
||
{
|
||
await _app.ExecuteFlyTask(taskId);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 挂起任务
|
||
/// </summary>
|
||
/// <param name="taskId"></param>
|
||
[HttpPost]
|
||
public async Task PendingFlyTask(string taskId)
|
||
{
|
||
await _app.PendingFlyTask(taskId);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 测试
|
||
/// </summary>
|
||
[HttpGet]
|
||
[AllowAnonymous]
|
||
public async Task Test()
|
||
{
|
||
await _mqttClientManager.SubscribeAsync("thing/product/8UUXN5400A079H/osd", async (args) =>
|
||
{
|
||
var payload = args.ApplicationMessage.Payload;
|
||
var message = Encoding.UTF8.GetString(payload);
|
||
Console.WriteLine($"收到主题 [{args.ApplicationMessage.Topic}] 的消息: {message}");
|
||
await Task.CompletedTask; // 可选:实际逻辑中可执行更多异步操作
|
||
});
|
||
}
|
||
|
||
/// <summary>
|
||
/// 测试序列化,是否符合要求
|
||
/// </summary>
|
||
/// <returns></returns>
|
||
[HttpGet]
|
||
[AllowAnonymous]
|
||
public string TestJsonRequest()
|
||
{
|
||
var request = new TopicServicesRequest<object>()
|
||
.SetTid("tid")
|
||
.SetBid("bid")
|
||
.SetTimestamp(DateTime.Now.Ticks)
|
||
.SetData(new { name = "张三" });
|
||
return JsonConvert.SerializeObject(request);
|
||
}
|
||
|
||
[HttpGet]
|
||
[AllowAnonymous]
|
||
public string TestGetDevJson()
|
||
{
|
||
var builder = new ConfigurationBuilder()
|
||
.SetBasePath(Directory.GetCurrentDirectory())
|
||
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
|
||
.AddJsonFile(
|
||
$"appsettings.{Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") ?? "Development"}.json",
|
||
optional: true)
|
||
.AddEnvironmentVariables();
|
||
// 构建配置
|
||
var configuration = builder.Build();
|
||
// 读取连接字符串
|
||
var dir = configuration["WpmlDir"];
|
||
return dir;
|
||
}
|
||
}
|
||
} |