代码合并

main
lgd 2 months ago
parent 49c0f3aa5e
commit 202cfbe72f

@ -11,6 +11,7 @@ using OpenAuth.App.ServiceApp.Response;
using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Configuration;
using OpenAuth.App.ServiceApp.DroneDocking.Request; using OpenAuth.App.ServiceApp.DroneDocking.Request;
using DocumentFormat.OpenXml.Office.CustomUI; using DocumentFormat.OpenXml.Office.CustomUI;
using DocumentFormat.OpenXml.EMMA;
namespace OpenAuth.App.ServiceApp.DroneDocking namespace OpenAuth.App.ServiceApp.DroneDocking
@ -614,6 +615,140 @@ namespace OpenAuth.App.ServiceApp.DroneDocking
} }
} }
/// <summary>
/// 无人机状态获取
/// </summary>
/// <param name="req"></param>
/// <returns></returns>
public async Task<ResData> getDroneStatus(string deviceid)
{
ResData Response = new ResData();
string data = "{\r\n\"code\": 200,\r\n\"data\": {\r\n\"mode_code\":0,\r\n\"longitude\":122.45,\r\n\"latitude\":30.45,\r\n\"height\":80,\r\n\"elevation\":50,\r\n\"gimbal_pitch\":-45,\r\n\"gimbal_yaw\":23,\r\n\"battery_capacity_percent\":35,\r\n\"gps_state\":2,\r\n},\r\n\"message\": \"获取无人机机场状态成功!\",\r\n\"traceid\": \"xxx\"\r\n}";
//todo deviceid
if (true)
{
string x_lc_secret = _helper.getxseret();
// 转换为字节数组
byte[] bytes = Encoding.UTF8.GetBytes(data);
var encryptedResData = _helper.Encrypt(bytes);
Response.Result = encryptedResData;
Response.Message = "获取无人机机场状态成功!";
Response.Code = 200;
Response.Secret = x_lc_secret;
return Response;
}
else
{
string x_lc_secret = _helper.getxseret();
// 转换为字节数组
byte[] bytes = Encoding.UTF8.GetBytes(" ");
var encryptedResData = _helper.Encrypt(bytes);
Response.Result = encryptedResData;
Response.Message = "获取无人机机场状态失败!";
Response.Code = 500;
Response.Secret = x_lc_secret;
return Response;
}
}
/// <summary>
/// 无人机任务查询
/// </summary>
/// <param name="req"></param>
/// <returns></returns>
public async Task<ResData> queryTaskStatus(string req, string secret)
{
ResData Response = new ResData();
//解密数据
byte[] secretbyte = Convert.FromBase64String(secret); //x-lc-secret
byte[] reqbyte = Convert.FromBase64String(req); //返回数据
string data = _helper.Decrypt(secretbyte, reqbyte);
//序列化返回数据并处理
var task = JsonSerializer.Deserialize<AirPortTaskReq>(data);
string sql = "select * from drone_docktask where taskid=" + data;
string x_lc_secret = _helper.getxseret();
// 转换为字节数组
byte[] bytes = Encoding.UTF8.GetBytes(sql);
var encryptedResData = _helper.Encrypt(bytes);
Response.Result = encryptedResData;
Response.Message = "查询无人机机场任务状态成功!";
Response.Code = 200;
Response.Secret = x_lc_secret;
return Response;
}
/// <summary>
/// 无人机机场设备注册/更新
/// </summary>
/// <param name="req"></param>
/// <returns></returns>
public async Task<Response<string>> reportDroneStatus(List<AirPortStatusApply> req)
{
Response<string> Response = new Response<string>();
var handler = new HttpClientHandler();
// 如果需要忽略服务器证书错误(仅测试环境)
handler.ServerCertificateCustomValidationCallback = (sender, cert, chain, sslPolicyErrors) => true;
using (var client = new HttpClient())
{
try
{
string url = configuration.GetSection("DroneDocking:Url").Value + "/droneAirport/reportDroneStatus";
string x_lc_secret = _helper.getxseret();
string centercode = "UAV32_LJY2FPMYDE6UDES3P3ZD7V3IKQ";
string x_token = _helper.GetToken(centercode);
// 序列化为 JSON 字符串
string json = JsonSerializer.Serialize(req);
// 转换为字节数组
byte[] bytes = Encoding.UTF8.GetBytes(json);
var encryptedData = _helper.Encrypt(bytes);
// 创建请求体
var httpContent = new StringContent(encryptedData, Encoding.UTF8, "application/json");
// 添加请求头
client.DefaultRequestHeaders.Add("x-lc-secret", x_lc_secret);
client.DefaultRequestHeaders.Add("x-lc-token", x_token);
//发送请求
HttpResponseMessage response = await client.PostAsync(url, httpContent);
response.EnsureSuccessStatusCode();
// 获取响应头中的 x_cl_screte 参数
string resx_cl_screte = GetHeaderValue(response, "x-lc-secret");
// 读取响应内容并反序列化
string responseBody = await response.Content.ReadAsStringAsync();
var result = JsonSerializer.Deserialize<ReciveData<string>>(responseBody);
//解密数据
byte[] resbytesx = Convert.FromBase64String(resx_cl_screte);
byte[] resdatabytes = Convert.FromBase64String(result?.data);
string data = _helper.Decrypt(resbytesx, resdatabytes);
Response.Result = data;
Response.Message = result.message;
Response.Code = result.code;
}
catch (HttpRequestException e)
{
Console.WriteLine("\nException Caught!");
Console.WriteLine("Message :{0} ", e.Message);
Response.Result = "连接错误";
}
}
return Response;
}
// 安全获取响应头值的方法 // 安全获取响应头值的方法
private static string GetHeaderValue(HttpResponseMessage response, string headerName) private static string GetHeaderValue(HttpResponseMessage response, string headerName)
{ {

@ -0,0 +1,33 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace OpenAuth.App.ServiceApp.DroneDocking.Request
{
public class AirPortStatusApply
{
public string deviceid { get; set; }
public string onlinestate { get; set; }
public double longitude { get; set; }
public double latitude { get; set; }
public double height { get; set; }
public double elevation { get; set; }
public double gimbal_pitch { get; set; }
public double gimbal_ya { get; set; }
public int battery_capacity_percent { get; set; }
public int gps_state { get; set; }
}
}

@ -279,5 +279,129 @@ namespace OpenAuth.WebApi.Controllers.ServiceControllers
} }
} }
[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);
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");
}
}
/// <summary>
/// 无人机状态上报
/// </summary>
/// <returns></returns>
[HttpPost]
[AllowAnonymous]
public async Task<Response<string>> reportDroneStatus([FromBody] List<AirPortStatusApply> req)
{
var result = new Response<string>();
try
{
result = await _app.reportDroneStatus(req);
}
catch (Exception ex)
{
result.Code = 500;
result.Message = ex.Message;
}
return result;
}
/// <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;
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");
}
}
} }
} }

Loading…
Cancel
Save