using Infrastructure; using Infrastructure.Cache; using Infrastructure.Helpers; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using OpenAuth.App.ServiceApp.DroneDocking; using OpenAuth.App.ServiceApp.DroneDocking.Request; using OpenAuth.App.ServiceApp.Response; using System.Text; namespace OpenAuth.WebApi.Controllers.ServiceControllers { /// /// 对接 /// [Route("api/[controller]/[action]")] [ApiController] public class DroneDockController: ControllerBase { private readonly DroneDockApp _app; private EncryptionHelper _helper; public DroneDockController(DroneDockApp app,EncryptionHelper helper) { _app = app; _helper = helper; } /// /// 无人机机场接口注册/更新 /// /// [HttpPost] [AllowAnonymous] public async Task> RegistService([FromBody] AirPortRegistReq req) { var result = new Response(); try { result = await _app.RegistService(req); } catch (Exception ex) { result.Code = 500; result.Message = ex.Message; } return result; } /// /// 无人机机场设备注册/更新 /// /// [HttpPost] [AllowAnonymous] public async Task> AddDevice([FromBody] AddDeviceReq req) { var result = new Response(); try { result = await _app.AddDevice(req); } catch (Exception ex) { result.Code = 500; result.Message = ex.Message; } return result; } /// /// 无人机机场设备授权 /// /// /// [HttpPost] [AllowAnonymous] public async Task> Authorization([FromBody] AuthorizationReq req) { var result = new Response(); try { result = await _app.Authorization(req); } catch (Exception ex) { result.Code = 500; result.Message = ex.Message; } return result; } [HttpGet] [AllowAnonymous] public async Task> Test(string taskid) { var result = new Response(); try { result = await _app.Test1(taskid); } catch (Exception ex) { result.Code = 500; result.Message = ex.Message; } return result; } /// /// 无人机任务添加 /// /// /// [Route("/zhcfzx/droneAirport/AddTask")] [HttpPost] [AllowAnonymous] public async Task> AddTask(string recivedata) { var result = new ReciveData(); if(Request.Headers.TryGetValue("x-lc-token", out var tokenValue)) { var tokenflag = _helper.Verify(tokenValue); if (tokenflag) { // 获取请求头中的x-lc-secret if (Request.Headers.TryGetValue("x-lc-secret", out var secretValue)) { string secret = secretValue.ToString(); try { // 1. 从请求体中直接读取原始字符串(即 encryptedData) string req; using (var reader = new StreamReader(Request.Body, Encoding.UTF8)) { req = await reader.ReadToEndAsync(); } var data = await _app.AddTask(req, secret); result.data = data.Result; result.code=data.Code; result.message = data.Message; Request.Headers.TryGetValue("traceid", out var traceid); result.traceid = traceid; Response.Headers.Add("x-lc-secret", data.Secret); } catch (Exception ex) { result.code = 200; result.message = "error"; Request.Headers.TryGetValue("traceid", out var traceid); result.traceid = traceid; } return result; } else { throw new Exception("Missing required header: x-lc-secret"); } } else { throw new Exception("unauthorized"); } } else { throw new Exception("Missing required header: x-lc-token"); } } /// /// 无人机任务更新 /// /// /// [Route("/zhcfzx/droneAirport/updateTask")] [HttpPost] [AllowAnonymous] public async Task> updateTask(string recivedata) { var result = new ReciveData(); if (Request.Headers.TryGetValue("x-lc-token", out var tokenValue)) { var tokenflag = _helper.Verify(tokenValue); if (tokenflag) { // 获取请求头中的x-lc-secret if (Request.Headers.TryGetValue("x-lc-secret", out var secretValue)) { string secret = secretValue.ToString(); try { // 1. 从请求体中直接读取原始字符串(即 encryptedData) string req; using (var reader = new StreamReader(Request.Body, Encoding.UTF8)) { req = await reader.ReadToEndAsync(); } var data = await _app.UpdateTask(req, secret); result.data = data.Result; result.code = data.Code; result.message = data.Message; Request.Headers.TryGetValue("traceid", out var traceid); result.traceid = traceid; Response.Headers.Add("x-lc-secret", data.Secret); } catch (Exception ex) { result.code = 200; result.message = "error"; Request.Headers.TryGetValue("traceid", out var traceid); result.traceid = traceid; } return result; } else { throw new Exception("Missing required header: x-lc-secret"); } } else { throw new Exception("unauthorized"); } } else { throw new Exception("Missing required header: x-lc-token"); } } /// /// 取消无人机任务 /// /// /// [Route("/zhcfzx/droneAirport/cancelTask")] [HttpGet] [AllowAnonymous] public async Task> cancelTask(string taskid) { var result = new ReciveData(); if (Request.Headers.TryGetValue("x-lc-token", out var tokenValue)) { var tokenflag = _helper.Verify(tokenValue); if (tokenflag) { try { var data = await _app.CancelTask(taskid); result.data = data.Result; result.code = data.Code; result.message = data.Message; Request.Headers.TryGetValue("traceid", out var traceid); result.traceid = traceid; Response.Headers.Add("x-lc-secret", data.Secret); } catch (Exception ex) { result.code = 200; result.message = "error"; Request.Headers.TryGetValue("traceid", out var traceid); result.traceid = traceid; } return result; } else { throw new Exception("unauthorized"); } } else { throw new Exception("Missing required header: x-lc-token"); } } [HttpGet] [AllowAnonymous] [Route("/zhcfzx/droneAirport/getDroneStatus")] public async Task> getDroneStatus( string deviceid) { var result = new ReciveData(); if (Request.Headers.TryGetValue("x-lc-token", out var tokenValue)) { var tokenflag = _helper.Verify(tokenValue); if (tokenflag) { try { var data = await _app.getDroneStatus(deviceid); result.data = data.Result; result.code = data.Code; result.message = data.Message; Request.Headers.TryGetValue("traceid", out var traceid); result.traceid = traceid; Response.Headers.Add("x-lc-secret", data.Secret); } catch (Exception ex) { result.code = 200; result.message = "error"; Request.Headers.TryGetValue("traceid", out var traceid); result.traceid = traceid; } return result; } else { throw new Exception("unauthorized"); } } else { throw new Exception("Missing required header: x-lc-token"); } } /// /// 无人机状态上报 /// /// [HttpPost] [AllowAnonymous] public async Task> reportDroneStatus([FromBody] List req) { var result = new Response(); try { result = await _app.reportDroneStatus(req); } catch (Exception ex) { result.Code = 500; result.Message = ex.Message; } return result; } /// /// 无人机任务进度查询 /// /// /// [Route("/zhcfzx/droneAirport/queryTaskStatus")] [HttpPost] [AllowAnonymous] public async Task> queryTaskStatus(string taskid) { var result = new ReciveData(); if (Request.Headers.TryGetValue("x-lc-token", out var tokenValue)) { var tokenflag = _helper.Verify(tokenValue); if (tokenflag) { // 获取请求头中的x-lc-secret if (Request.Headers.TryGetValue("x-lc-secret", out var secretValue)) { string secret = secretValue.ToString(); try { // 1. 从请求体中直接读取原始字符串(即 encryptedData) string req; using (var reader = new StreamReader(Request.Body, Encoding.UTF8)) { req = await reader.ReadToEndAsync(); } var data = await _app.queryTaskStatus(req, secret); result.data = data.Result; result.code = data.Code; result.message = data.Message; Request.Headers.TryGetValue("traceid", out var traceid); result.traceid = traceid; Response.Headers.Add("x-lc-secret", data.Secret); } catch (Exception ex) { result.code = 200; result.message = "error"; Request.Headers.TryGetValue("traceid", out var traceid); result.traceid = traceid; } return result; } else { throw new Exception("Missing required header: x-lc-secret"); } } else { throw new Exception("unauthorized"); } } else { throw new Exception("Missing required header: x-lc-token"); } } } }