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.DroneDocking.Response; using OpenAuth.App.ServiceApp.Response; using OpenAuth.Repository.Domain; using Org.BouncyCastle.Ocsp; 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; } [HttpPost] [AllowAnonymous] public async Task> Test(AirPortTaskReq req) { var result = new Response(); try { result = await _app.Test(req); } 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; result.traceid = Guid.NewGuid().ToString(); 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; result.traceid = Guid.NewGuid().ToString(); } 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; result.traceid = Guid.NewGuid().ToString(); 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; result.traceid = Guid.NewGuid().ToString(); } 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; result.traceid = Guid.NewGuid().ToString(); 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; result.traceid = Guid.NewGuid().ToString(); } 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; result.traceid = Guid.NewGuid().ToString(); 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; result.traceid = Guid.NewGuid().ToString(); } 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; result.traceid = Guid.NewGuid().ToString(); 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; result.traceid = Guid.NewGuid().ToString(); } 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"); } } /// /// 校验token /// /// /// [HttpGet] [AllowAnonymous] public Response VerifyToken(string token) { Response result= new Response(); try { var tokenflag = _helper.Verify(token); if (tokenflag) { result.Message = "校验成功"; result.Result = true; } else { result.Message = "校验失败"; result.Result = false; result.Code = 500; } return result ; } catch (Exception ex) { result.Code = 500; result.Message = "error"; return result; } } /// /// 获取省对接任务列表 /// /// 名称筛选 /// /// /// [HttpGet] [AllowAnonymous] public async Task>>> GetDroneDockInfos(string keyWord, int page, int limit) { return await _app.GetDroneDockInfos(keyWord, page, limit); } /// /// 前端任务获取 /// /// 执行任务id /// [HttpGet] [AllowAnonymous] public async Task> GetDroneDockflightInfos(string taskid) { return await _app.GetDroneDockflightInfos(taskid); } /// /// 获取临时上传地址 /// /// [HttpPost] [AllowAnonymous] public async Task> getUploadFilePath([FromBody] AirPortUploadReq req) { var result = new Response(); try { result = await _app.getUploadFilePath(req); } catch (Exception ex) { result.Code = 500; result.Message = ex.Message; } return result; } [HttpPost] [AllowAnonymous] public async Task> UploadFile(AirPortUploadDbReq req) { var result = new Response(); try { result = await _app.UploadFile(req); } catch (Exception ex) { result.Code = 500; result.Message = ex.Message; } return result; } [HttpGet] [AllowAnonymous] [Route("/zhcfzx/droneAirport/getResult")] public async Task> getResult(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.getResult(taskid); result.data = data.Result; result.code = data.Code; result.message = data.Message; //Request.Headers.TryGetValue("traceid", out var traceid); //result.traceid = traceid; result.traceid = Guid.NewGuid().ToString(); 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; result.traceid = Guid.NewGuid().ToString(); } return result; } else { throw new Exception("unauthorized"); } } else { throw new Exception("Missing required header: x-lc-token"); } } [HttpGet] [AllowAnonymous] public async Task> dbupload (string taskid) { var result = new ReciveData(); _app.InsertDb(taskid); result.code = 200; result.message = "success"; return result; } } }