You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

565 lines
19 KiB
C#

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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
{
/// <summary>
/// 对接
/// </summary>
[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;
}
/// <summary>
/// 无人机机场接口注册/更新
/// </summary>
/// <returns></returns>
[HttpPost]
[AllowAnonymous]
public async Task<Response<string>> RegistService([FromBody] AirPortRegistReq req)
{
var result = new Response<string>();
try
{
result = await _app.RegistService(req);
}
catch (Exception ex)
{
result.Code = 500;
result.Message = ex.Message;
}
return result;
}
/// <summary>
/// 无人机机场设备注册/更新
/// </summary>
/// <returns></returns>
[HttpPost]
[AllowAnonymous]
public async Task<Response<string>> AddDevice([FromBody] AddDeviceReq req)
{
var result = new Response<string>();
try
{
result = await _app.AddDevice(req);
}
catch (Exception ex)
{
result.Code = 500;
result.Message = ex.Message;
}
return result;
}
/// <summary>
/// 无人机机场设备授权
/// </summary>
/// <param name="req"></param>
/// <returns></returns>
[HttpPost]
[AllowAnonymous]
public async Task<Response<string>> Authorization([FromBody] AuthorizationReq req)
{
var result = new Response<string>();
try
{
result = await _app.Authorization(req);
}
catch (Exception ex)
{
result.Code = 500;
result.Message = ex.Message;
}
return result;
}
[HttpPost]
[AllowAnonymous]
public async Task<Response<string>> Test(AirPortTaskReq req)
{
var result = new Response<string>();
try
{
result = await _app.Test(req);
}
catch (Exception ex)
{
result.Code = 500;
result.Message = ex.Message;
}
return result;
}
/// <summary>
/// 无人机任务添加
/// </summary>
/// <param name="req"></param>
/// <returns></returns>
[Route("/zhcfzx/droneAirport/AddTask")]
[HttpPost]
[AllowAnonymous]
public async Task<ReciveData<string>> AddTask(string recivedata)
{
var result = new ReciveData<string>();
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 = 500;
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");
}
}
/// <summary>
/// 无人机任务更新
/// </summary>
/// <param name="req"></param>
/// <returns></returns>
[Route("/zhcfzx/droneAirport/updateTask")]
[HttpPost]
[AllowAnonymous]
public async Task<ReciveData<string>> updateTask(string recivedata)
{
var result = new ReciveData<string>();
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");
}
}
/// <summary>
/// 取消无人机任务
/// </summary>
/// <param name="req"></param>
/// <returns></returns>
[Route("/zhcfzx/droneAirport/cancelTask")]
[HttpGet]
[AllowAnonymous]
public async Task<ReciveData<string>> cancelTask(string taskid)
{
var result = new ReciveData<string>();
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");
}
}
/// <summary>
/// 省任务获取无人机状态信息
/// </summary>
/// <param name="deviceid"></param>
/// <returns></returns>
/// <exception cref="Exception"></exception>
[HttpGet]
[AllowAnonymous]
[Route("/zhcfzx/droneAirport/getDroneStatus")]
public async Task<ReciveData<string>> GetDroneStatus(string deviceid)
{
var result = new ReciveData<string>();
if (Request.Headers.TryGetValue("x-lc-token", out var tokenValue))
{
var tokenflag = _helper.Verify(tokenValue);
//var tokenflag = true;
if (tokenflag)
{
try
{
var data = await _app.GetDroneStatus(deviceid);
result.data = data.Result;
result.code = data.Code;
result.message = data.Message;
result.traceid = Guid.NewGuid().ToString();
Response.Headers.Add("x-lc-secret", data.Secret);
}
catch (Exception ex)
{
result.code = 200;
result.message = "error";
result.traceid = Guid.NewGuid().ToString();
}
return result;
}
else
{
throw new Exception("unauthorized");
}
}
else
{
throw new Exception("Missing required header: x-lc-token");
}
}
/// <summary>
/// 无人机任务进度查询
/// </summary>
/// <param name="req"></param>
/// <returns></returns>
[Route("/zhcfzx/droneAirport/queryTaskStatus")]
[HttpPost]
[AllowAnonymous]
public async Task<ReciveData<string>> queryTaskStatus(string taskid)
{
var result = new ReciveData<string>();
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");
}
}
/// <summary>
/// 校验token
/// </summary>
/// <param name="token"></param>
/// <returns></returns>
[HttpGet]
[AllowAnonymous]
public Response<bool> VerifyToken(string token)
{
Response<bool> result= new Response<bool>();
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;
}
}
/// <summary>
/// 获取省对接任务列表
/// </summary>
/// <param name="keyWord">名称筛选</param>
/// <param name="page"></param>
/// <param name="limit"></param>
/// <returns></returns>
[HttpGet]
[AllowAnonymous]
public async Task<Response<PageInfo<List<DroneDockRes>>>> GetDroneDockInfos(string keyWord, int page, int limit)
{
return await _app.GetDroneDockInfos(keyWord, page, limit);
}
/// <summary>
/// 前端任务获取
/// </summary>
/// <param name="taskid">执行任务id</param>
/// <returns></returns>
[HttpGet]
[AllowAnonymous]
public async Task<Response<DroneDockflightRes>> GetDroneDockflightInfos(string taskid)
{
return await _app.GetDroneDockflightInfos(taskid);
}
/// <summary>
/// 获取临时上传地址
/// </summary>
/// <returns></returns>
[HttpPost]
[AllowAnonymous]
public async Task<Response<string>> getUploadFilePath([FromBody] AirPortUploadReq req)
{
var result = new Response<string>();
try
{
result = await _app.getUploadFilePath(req);
}
catch (Exception ex)
{
result.Code = 500;
result.Message = ex.Message;
}
return result;
}
[HttpPost]
[AllowAnonymous]
public async Task<Response<string>> UploadFile(AirPortUploadDbReq req) {
var result = new Response<string>();
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<ReciveData<string>> getResult(string taskid)
{
var result = new ReciveData<string>();
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<ReciveData<string>> dbupload (string taskid)
{
var result = new ReciveData<string>();
_app.InsertDb(taskid);
result.code = 200;
result.message = "success";
return result;
}
}
}