using OpenAuth.App.BaseApp.Base; using OpenAuth.Repository.Domain; using OpenAuth.Repository; using System.Text; using OpenAuth.App.Interface; using SqlSugar; using Infrastructure; using Infrastructure.Helpers; using System.Text.Json; using OpenAuth.App.ServiceApp.Response; using Microsoft.Extensions.Configuration; using OpenAuth.App.ServiceApp.DroneDocking.Request; using DocumentFormat.OpenXml.Office.CustomUI; namespace OpenAuth.App.ServiceApp.DroneDocking { public class DroneDockApp : SqlSugarBaseApp { private EncryptionHelper _helper; private IConfiguration configuration; public DroneDockApp(EncryptionHelper helper, IConfiguration configuration, ISugarUnitOfWork unitWork, ISimpleClient repository, IAuth auth) : base(unitWork, repository, auth) { _helper = helper; this.configuration = configuration; } /// /// 无人机机场接口注册更新 /// /// /// public async Task> RegistService(AirPortRegistReq req ) { Response Response = new Response(); 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/RegistService"; 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>(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; } /// /// 无人机机场设备注册/更新 /// /// /// public async Task> AddDevice(AddDeviceReq req) { Response Response = new Response(); 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/addDevice"; 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>(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; } /// /// 无人机机场授权 /// /// /// public async Task> Authorization(AuthorizationReq req) { Response Response = new Response(); 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/authorization"; 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>(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; } /// /// 无人机机场授权 /// /// /// public async Task> Test(AirPortTaskReq req) { Response Response = new Response(); var handler = new HttpClientHandler(); // 如果需要忽略服务器证书错误(仅测试环境) handler.ServerCertificateCustomValidationCallback = (sender, cert, chain, sslPolicyErrors) => true; using (var client = new HttpClient()) { try { string url = "http://localhost:10042/zhcfzx/droneAirport/AddTask"; 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>(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; } /// /// 无人机任务添加 /// /// /// public async Task AddTask(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(data); //task数据生成 DroneDocktask dt= new DroneDocktask(); dt.id=Guid.NewGuid().ToString(); dt.deviceid=task.deviceid.ToString(); dt.bizidname=task.bizidname.ToString(); dt.taskid = task.taskid; dt.taskname = task.taskname; dt.datacode= task.datacode; //taskdetail数据生成 List dalist= new List(); if (task.tasklist.Count > 0 ) { foreach(var item in task.tasklist) { DroneDocktaskdetail da= new DroneDocktaskdetail(); da.id = Guid.NewGuid().ToString(); da.taskid = dt.id; da.bz=item.bz; da.dkbh=item.dkbh; da.dkfw=item.dkfw; da.dkmj=item.dkmj; da.dkmc=item.dkmc; da.xzqdm=item.xzqdm; da.zdkbh=item.zdkbh; da.bsm=item.bsm; da.dklx=item.dklx; dalist.Add(da); } } using (var uow = base.UnitWork.CreateContext()) { //本地数据库数据添加 await uow.DroneDocktask.InsertAsync(dt); await uow.DroneDocktaskdetail.InsertRangeAsync(dalist); var flag = uow.Commit(); //返回数据 if (flag) { string x_lc_secret = _helper.getxseret(); // 转换为字节数组 byte[] bytes = Encoding.UTF8.GetBytes(dt.taskid); 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; } } } // 安全获取响应头值的方法 private static string GetHeaderValue(HttpResponseMessage response, string headerName) { if (response.Headers.TryGetValues(headerName, out IEnumerable values)) { return string.Join(", ", values); // 如果多个值则合并 } // 尝试忽略大小写再次查找 foreach (var header in response.Headers) { if (header.Key.Equals(headerName, StringComparison.OrdinalIgnoreCase)) { return string.Join(", ", header.Value); } } return null; // 未找到 } } }