LASAPlatform/OpenAuth.WebApi/Controllers/ServiceControllers/ManageController.cs

599 lines
18 KiB
C#
Raw Normal View History

using System.Text;
using Infrastructure;
2025-06-13 08:56:22 +08:00
using Infrastructure.CloudSdk.wayline;
2025-05-12 16:53:24 +08:00
using Infrastructure.Extensions;
using Infrastructure.Helpers;
2025-05-16 15:14:08 +08:00
using Microsoft.AspNetCore.Authorization;
2025-05-12 16:53:24 +08:00
using Microsoft.AspNetCore.Mvc;
2025-06-13 08:56:22 +08:00
using Newtonsoft.Json;
2025-05-12 16:53:24 +08:00
using OpenAuth.App.ServiceApp;
2025-06-11 14:42:36 +08:00
using OpenAuth.App.ServiceApp.Request;
2025-06-12 11:26:59 +08:00
using OpenAuth.App.ServiceApp.Response;
2025-05-12 16:53:24 +08:00
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)
2025-05-12 16:53:24 +08:00
{
_app = app;
_mqttClientManager = mqttClientManager;
2025-05-12 16:53:24 +08:00
}
2025-05-12 16:53:24 +08:00
#region 机场管理
2025-05-12 16:53:24 +08:00
/// <summary>
/// 获取机场列表
/// </summary>
/// <param name="page"></param>
/// <param name="limit"></param>
/// <param name="key"></param>
/// <returns></returns>
[HttpGet]
2025-05-20 15:47:41 +08:00
public async Task<Response<PageInfo<List<LasaDronePort>>>> GetDataList(int page, int limit, string key)
2025-05-12 16:53:24 +08:00
{
2025-05-20 15:47:41 +08:00
var result = new Response<PageInfo<List<LasaDronePort>>>();
2025-05-12 16:53:24 +08:00
try
{
result = await _app.GetPageList(page, limit, key);
}
catch (Exception ex)
{
result.Code = 500;
result.Message = ex.Message;
}
2025-05-12 16:53:24 +08:00
return result;
}
2025-06-12 16:16:59 +08:00
/// <summary>
/// 编辑机场
/// </summary>
/// <returns></returns>
[HttpPost]
public async Task<Response<bool>> EditDronePort(LasaDronePort info)
{
return await _app.EditDronePort(info);
}
2025-06-24 10:47:51 +08:00
/// <summary>
/// 修改机场固件信息
/// </summary>
/// <param name="id">机场id</param>
/// <param name="firmwareVersion">机场版本</param>
/// <returns></returns>
[HttpPost]
public async Task<Response<bool>> EditDronePortFirmware(string id, string firmwareVersion)
{
return await _app.EditDronePortFirmware(id, firmwareVersion);
}
2025-06-12 16:16:59 +08:00
/// <summary>
/// 删除机场
/// </summary>
/// <returns></returns>
[HttpPost]
public async Task<Response<bool>> DeleteDronePort(string id)
{
return await _app.DeleteDronePort(id);
}
2025-05-12 16:53:24 +08:00
#endregion
#region 无人机管理
2025-05-12 16:53:24 +08:00
/// <summary>
/// 获取无人机列表
/// </summary>
/// <param name="pageIndex"></param>
/// <param name="pageSize"></param>
/// <param name="key"></param>
/// <returns></returns>
[HttpGet]
2025-06-23 17:29:22 +08:00
public async Task<Response<PageInfo<List<dynamic>>>> GetUavPageList(int page, int limit, string key)
2025-05-12 16:53:24 +08:00
{
2025-06-23 17:29:22 +08:00
var result = new Response<PageInfo<List<dynamic>>>();
2025-05-12 16:53:24 +08:00
try
{
result = await _app.GetUavPageList(page, limit, key);
}
catch (Exception ex)
{
result.Code = 500;
result.Message = ex.Message;
}
2025-05-12 16:53:24 +08:00
return result;
}
2025-06-12 16:16:59 +08:00
/// <summary>
/// 编辑无人机
/// </summary>
/// <returns></returns>
[HttpPost]
public async Task<Response<bool>> EditUav(LasaUav info)
{
return await _app.EditUav(info);
}
2025-06-24 10:47:51 +08:00
/// <summary>
/// 修改无人机固件信息
/// </summary>
/// <param name="id">无人机id</param>
/// <param name="firmwareVersion">机场版本</param>
/// <returns></returns>
[HttpPost]
public async Task<Response<bool>> EditUavFirmware(string id, string firmwareVersion)
{
return await _app.EditUavFirmware(id, firmwareVersion);
}
2025-06-12 16:16:59 +08:00
/// <summary>
/// 删除无人机
/// </summary>
/// <returns></returns>
[HttpPost]
public async Task<Response<bool>> DeleteUav(string id)
{
return await _app.DeleteUav(id);
}
2025-05-12 16:53:24 +08:00
#endregion
#region 任务管理
2025-05-12 16:53:24 +08:00
/// <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;
}
2025-05-12 16:53:24 +08:00
return result;
}
/// <summary>
/// 添加任务
/// </summary>
/// <returns></returns>
[HttpPost]
public async Task<Response<bool>> AddTask(LasaTask info)
{
return await _app.AddTask(info);
}
2025-05-12 16:53:24 +08:00
/// <summary>
/// 编辑任务
/// </summary>
/// <returns></returns>
[HttpPost]
public async Task<Response<bool>> EditTask(LasaTask info)
{
return await _app.EditTask(info);
}
2025-05-12 16:53:24 +08:00
/// <summary>
/// 删除任务
/// </summary>
/// <returns></returns>
[HttpPost]
public async Task<Response<bool>> DeleteTask(string id)
{
return await _app.DeleteTask(id);
}
2025-05-12 16:53:24 +08:00
#endregion
#region 航线管理
2025-05-12 16:53:24 +08:00
/// <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;
}
2025-05-12 16:53:24 +08:00
return result;
}
/// <summary>
/// 航线详情
/// </summary>
/// <param name="airLineId"></param>
/// <returns></returns>
[HttpGet]
public async Task<Response<LasaAirLine>> GetAirLine(string airLineId)
{
return await _app.GetAirLine(airLineId);
}
2025-05-12 16:53:24 +08:00
/// <summary>
/// 添加航线
/// </summary>
/// <returns></returns>
[HttpPost]
public async Task<Response<bool>> AddAirLine(LasaAirLine info)
{
return await _app.AddAirLine(info);
}
2025-05-12 16:53:24 +08:00
/// <summary>
/// 编辑航线
/// </summary>
/// <returns></returns>
[HttpPost]
2025-05-16 15:14:08 +08:00
public async Task<Response<bool>> EditAirLine(LasaAirLine info)
2025-05-12 16:53:24 +08:00
{
return await _app.EditAirLine(info);
}
2025-05-12 16:53:24 +08:00
/// <summary>
/// 删除航线
/// </summary>
/// <returns></returns>
[HttpPost]
public async Task<Response<bool>> DeleteAirLine(string id)
{
return await _app.DeleteAirLine(id);
}
2025-06-16 16:39:26 +08:00
// todo 已有的文件如何处理?
2025-05-16 15:14:08 +08:00
/// <summary>
/// 上传航线文件
/// </summary>
/// <param name="xmlFile"></param>
/// <returns></returns>
[HttpPost("upload")]
[AllowAnonymous]
2025-05-16 15:14:08 +08:00
public async Task<IActionResult> UploadXmlFile(IFormFile xmlFile)
{
if (xmlFile == null || xmlFile.Length == 0)
return BadRequest("文件为空");
2025-06-16 16:39:26 +08:00
var path = await _app.UploadFile(xmlFile);
return Ok(new { message = "上传成功", path });
2025-05-16 15:14:08 +08:00
}
/*/// <summary>
/// 更新航线文件
/// </summary>
/// <param name="xmlFile"></param>
/// <param name="id"></param>
/// <returns></returns>
2025-05-16 15:14:08 +08:00
[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 这里只有一个文件,是否得改
2025-05-16 15:14:08 +08:00
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 });
}*/
2025-05-16 15:14:08 +08:00
#endregion
#region 项目管理
2025-05-16 15:14:08 +08:00
/// <summary>
/// 获取项目列表
/// </summary>
/// <param name="isjoin">是否是已加入的项目0全部1加入2未加入</param>
/// <param name="key">项目名称筛选</param>
/// <param name="state">状态0全部1进行中2已归档</param>
/// <param name="order">排序</param>
2025-05-16 15:14:08 +08:00
/// <returns></returns>
[HttpGet]
public async Task<Response<List<dynamic>>> GetWorkspaceList(int isjoin, string key, int state,
string order = "\"CreateTime\" desc")
2025-05-16 15:14:08 +08:00
{
2025-06-12 11:26:59 +08:00
var result = new Response<List<dynamic>>();
2025-05-16 15:14:08 +08:00
try
{
result = await _app.GetWorkspaceList(isjoin, key, state, order);
2025-05-16 15:14:08 +08:00
}
catch (Exception ex)
{
result.Code = 500;
result.Message = ex.Message;
}
2025-05-16 15:14:08 +08:00
return result;
}
/// <summary>
/// 添加项目
/// </summary>
/// <returns></returns>
[HttpPost]
2025-06-11 14:42:36 +08:00
public async Task<Response<bool>> AddWorkspace(WorkSpace info)
2025-05-16 15:14:08 +08:00
{
return await _app.AddWorkspace(info);
}
2025-05-16 15:14:08 +08:00
/// <summary>
/// 编辑项目
/// </summary>
/// <returns></returns>
[HttpPost]
2025-06-11 14:42:36 +08:00
public async Task<Response<bool>> EditWorkspace(WorkSpace info)
2025-05-16 15:14:08 +08:00
{
return await _app.EditWorkspace(info);
}
2025-05-16 15:14:08 +08:00
/// <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);
}
2025-06-12 11:26:59 +08:00
/// <summary>
2025-06-12 14:06:42 +08:00
/// 获取机场列表,添加项目使用
2025-06-12 11:26:59 +08:00
/// </summary>
/// <param name="key"></param>
/// <returns></returns>
[HttpGet]
2025-06-12 14:06:42 +08:00
public async Task<Response<List<LasaDronePort>>> GetUavList()
2025-06-12 11:26:59 +08:00
{
2025-06-12 14:06:42 +08:00
var result = new Response<List<LasaDronePort>>();
2025-06-12 11:26:59 +08:00
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;
}
2025-05-12 16:53:24 +08:00
#endregion
// 航线任务在云端的 共享查看、下发执行、取消以及进度上报等功能。
/// <summary>
/// 解除挂起(执行任务) todo 需不需要加时间限制判断?
/// </summary>
/// <param name="taskId"></param>
2025-06-10 16:51:31 +08:00
[HttpPost]
[AllowAnonymous]
2025-06-30 09:11:36 +08:00
// todo 根据项目设置的起飞条件设置是否起飞
public async Task ExecuteFlyTask(string taskId)
2025-06-10 16:51:31 +08:00
{
await _app.ExecuteFlyTask(taskId);
2025-06-10 16:51:31 +08:00
}
/// <summary>
/// 挂起任务
/// </summary>
/// <param name="taskId"></param>
[HttpPost]
public async Task PendingFlyTask(string taskId)
{
2025-06-30 09:11:36 +08:00
// todo 先只针对立即任务实现
await _app.PendingFlyTask(taskId);
}
[HttpPost]
[AllowAnonymous]
public async Task<string> TestExecuteFlyTask(string flightid)
{
2025-06-24 10:47:51 +08:00
return await _app.TestExecuteFlyTask(flightid);
}
2025-06-10 16:51:31 +08:00
/// <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; // 可选:实际逻辑中可执行更多异步操作
});
}
2025-06-13 08:56:22 +08:00
/// <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;
}
2025-06-17 17:30:19 +08:00
#region 添加地图作业区域
2025-06-17 17:30:19 +08:00
/// <summary>
/// 添加地图作业区域
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
[HttpPost]
public async Task<Response<string>> AddWorkArea([FromBody] LasaShpData model)
{
var res = new Response<string>();
try
{
return await _app.AddWorkArea(model);
}
catch (Exception ex)
{
res.Code = 500;
res.Message = ex.InnerException?.Message ?? ex.Message;
}
2025-06-17 17:30:19 +08:00
return res;
}
/// <summary>
/// 更新地图作业区域
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
[HttpPost]
public async Task<Response<string>> UpdateWorkArea([FromBody] LasaShpData model)
{
var res = new Response<string>();
try
{
return await _app.UpdateWorkArea(model);
}
catch (Exception ex)
{
res.Code = 500;
res.Message = ex.InnerException?.Message ?? ex.Message;
}
2025-06-17 17:30:19 +08:00
return res;
}
/// <summary>
/// 删除地图作业区域
/// </summary>
/// <param name="id">地图作业区域id</param>
/// <returns></returns>
[HttpPost]
public async Task<Response<bool>> DeleteWorkArea(string id)
{
return await _app.DeleteWorkArea(id);
}
/// <summary>
/// 获取地图作业区域列表
/// </summary>
/// <param name="workspaceid">项目id</param>
/// <param name="state">项目状态0已启用1已禁用null全部</param>
/// <param name="type">区域类型(作业区,限飞区等)</param>
/// <returns></returns>
[HttpGet]
2025-06-24 10:47:51 +08:00
public async Task<Response<List<LasaShpData>>> GetWorkAreaList(string workspaceid, int? state, string type)
2025-06-17 17:30:19 +08:00
{
var result = new Response<List<LasaShpData>>();
try
{
2025-06-24 10:47:51 +08:00
result = await _app.GetWorkAreaList(workspaceid, state, type);
2025-06-17 17:30:19 +08:00
}
catch (Exception ex)
{
result.Code = 500;
result.Message = ex.Message;
}
return result;
}
2025-06-17 17:30:19 +08:00
#endregion
2025-05-12 16:53:24 +08:00
}
}