|
|
|
@ -654,27 +654,9 @@ namespace OpenAuth.App.ServiceApp.DroneDocking
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="req"></param>
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
public async Task<ResData> GetDroneStatus(string deviceid)
|
|
|
|
|
public async Task<dynamic> GetDroneStatus(string deviceid)
|
|
|
|
|
{
|
|
|
|
|
/*string data = @"
|
|
|
|
|
{
|
|
|
|
|
""code"": 200,
|
|
|
|
|
""data"": {
|
|
|
|
|
""mode_code"": 0,
|
|
|
|
|
""longitude"": 122.45,
|
|
|
|
|
""latitude"": 30.45,
|
|
|
|
|
""height"": 80,
|
|
|
|
|
""elevation"": 50,
|
|
|
|
|
""gimbal_pitch"": -45,
|
|
|
|
|
""gimbal_yaw"": 23,
|
|
|
|
|
""battery_capacity_percent"": 35,
|
|
|
|
|
""gps_state"": 2
|
|
|
|
|
},
|
|
|
|
|
""message"": ""获取无人机机场状态成功!"",
|
|
|
|
|
""traceid"": ""xxx""
|
|
|
|
|
}
|
|
|
|
|
";*/
|
|
|
|
|
dynamic data = new ExpandoObject();
|
|
|
|
|
dynamic result = new ExpandoObject();
|
|
|
|
|
var dock = await Repository
|
|
|
|
|
.ChangeRepository<SugarRepositiry<LasaDronePort>>()
|
|
|
|
|
.AsQueryable()
|
|
|
|
@ -682,14 +664,15 @@ namespace OpenAuth.App.ServiceApp.DroneDocking
|
|
|
|
|
.Where((a, b) => b.Sn == deviceid).FirstAsync();
|
|
|
|
|
if (dock == null) // 无人机不在线
|
|
|
|
|
{
|
|
|
|
|
data.code = 200;
|
|
|
|
|
result.code = 200;
|
|
|
|
|
dynamic inData = new ExpandoObject();
|
|
|
|
|
result.data = inData;
|
|
|
|
|
inData.mode_code = 1; // 不在线
|
|
|
|
|
data.message = "获取无人机状态成功";
|
|
|
|
|
result.message = "获取无人机状态成功";
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
data.code = 200;
|
|
|
|
|
result.code = 200;
|
|
|
|
|
var dockOsdTopic = $"thing/product/{dock.Sn}/osd";
|
|
|
|
|
var now = DateTime.Now;
|
|
|
|
|
var time = now.AddSeconds(-5);
|
|
|
|
@ -754,14 +737,14 @@ namespace OpenAuth.App.ServiceApp.DroneDocking
|
|
|
|
|
< 10 => 2, // 高精度
|
|
|
|
|
_ => 3 // rtk定位
|
|
|
|
|
};
|
|
|
|
|
data.data = inData;
|
|
|
|
|
data.message = "获取无人机状态成功!";
|
|
|
|
|
data.traceid = Guid.NewGuid().ToString();
|
|
|
|
|
result.data = inData;
|
|
|
|
|
result.message = "获取无人机状态成功!";
|
|
|
|
|
result.traceid = Guid.NewGuid().ToString();
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
data.code = 502;
|
|
|
|
|
data.message = "获取无人机状态失败";
|
|
|
|
|
result.code = 502;
|
|
|
|
|
result.message = "获取无人机状态失败";
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
@ -786,39 +769,15 @@ namespace OpenAuth.App.ServiceApp.DroneDocking
|
|
|
|
|
< 10 => 2,
|
|
|
|
|
_ => 3
|
|
|
|
|
};
|
|
|
|
|
data.data = inData;
|
|
|
|
|
data.traceid = Guid.NewGuid().ToString();
|
|
|
|
|
data.code = 200;
|
|
|
|
|
data.message = "获取无人机状态成功";
|
|
|
|
|
result.data = inData;
|
|
|
|
|
result.traceid = Guid.NewGuid().ToString();
|
|
|
|
|
result.code = 200;
|
|
|
|
|
result.message = "获取无人机状态成功";
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
} // 设备在线
|
|
|
|
|
|
|
|
|
|
var response = new ResData();
|
|
|
|
|
if (data.code == 200)
|
|
|
|
|
{
|
|
|
|
|
string xLcSecret = _helper.getxseret();
|
|
|
|
|
// 转换为字节数组
|
|
|
|
|
byte[] bytes = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(data));
|
|
|
|
|
var encryptedResData = _helper.Encrypt(bytes);
|
|
|
|
|
response.Result = encryptedResData;
|
|
|
|
|
response.Message = "获取无人机状态成功!";
|
|
|
|
|
response.Code = 200;
|
|
|
|
|
response.Secret = xLcSecret;
|
|
|
|
|
return response;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
string xLcSecret = _helper.getxseret();
|
|
|
|
|
// 转换为字节数组
|
|
|
|
|
byte[] bytes = Encoding.UTF8.GetBytes(" ");
|
|
|
|
|
var encryptedResData = _helper.Encrypt(bytes);
|
|
|
|
|
response.Result = encryptedResData;
|
|
|
|
|
response.Message = "获取无人机状态失败!";
|
|
|
|
|
response.Code = 500;
|
|
|
|
|
response.Secret = xLcSecret;
|
|
|
|
|
return response;
|
|
|
|
|
}
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
@ -852,69 +811,86 @@ namespace OpenAuth.App.ServiceApp.DroneDocking
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 无人机机场设备注册/更新
|
|
|
|
|
/// 无人机状态上报
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="req"></param>
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
public async Task<Response<string>> reportDroneStatus(List<AirPortStatusApply> req)
|
|
|
|
|
public async Task<Response<bool>> ReportDroneStatus()
|
|
|
|
|
{
|
|
|
|
|
Response<string> Response = new Response<string>();
|
|
|
|
|
|
|
|
|
|
var handler = new HttpClientHandler();
|
|
|
|
|
// 如果需要忽略服务器证书错误(仅测试环境)
|
|
|
|
|
handler.ServerCertificateCustomValidationCallback = (sender, cert, chain, sslPolicyErrors) => true;
|
|
|
|
|
using (var client = new HttpClient())
|
|
|
|
|
var droneList = await Repository
|
|
|
|
|
.ChangeRepository<SugarRepositiry<LasaUav>>()
|
|
|
|
|
.AsQueryable()
|
|
|
|
|
.Where(it => it.IsDelete == false)
|
|
|
|
|
.ToListAsync();
|
|
|
|
|
var dataList = new List<dynamic>();
|
|
|
|
|
foreach (var item in droneList)
|
|
|
|
|
{
|
|
|
|
|
try
|
|
|
|
|
var originalData = await GetDroneStatus(item.Sn);
|
|
|
|
|
var inData = originalData.data;
|
|
|
|
|
// 转换状态值 mode_code -> onlinestate
|
|
|
|
|
// 0:在线;1:不在线;2:任务执行中 -> 设备在线状态,00:不在线;10:在线;20:任务执行中
|
|
|
|
|
// 增加设备id deviceid
|
|
|
|
|
inData.deviceid = item.Sn;
|
|
|
|
|
inData.onlinestate = inData.mode_code switch
|
|
|
|
|
{
|
|
|
|
|
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);
|
|
|
|
|
0 => "10",
|
|
|
|
|
1 => "00",
|
|
|
|
|
2 => "20",
|
|
|
|
|
_ => "00"
|
|
|
|
|
};
|
|
|
|
|
dataList.Add(inData);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//解密数据
|
|
|
|
|
byte[] resbytesx = Convert.FromBase64String(resx_cl_screte);
|
|
|
|
|
byte[] resdatabytes = Convert.FromBase64String(result?.data);
|
|
|
|
|
string data = _helper.Decrypt(resbytesx, resdatabytes);
|
|
|
|
|
using var client = new HttpClient();
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
// 无人机状态上报接口
|
|
|
|
|
var url = configuration.GetSection("DroneDocking:Url").Value +
|
|
|
|
|
"/droneAirport/reportDroneStatus";
|
|
|
|
|
var xLcSecret = _helper.getxseret();
|
|
|
|
|
var centerCode = "UAV32_LJY2FPMYDE6UDES3P3ZD7V3IKQ";
|
|
|
|
|
var xToken = _helper.GetToken(centerCode);
|
|
|
|
|
// 序列化为 JSON 字符串
|
|
|
|
|
string json = JsonSerializer.Serialize(dataList);
|
|
|
|
|
// 转换为字节数组
|
|
|
|
|
byte[] bytes = Encoding.UTF8.GetBytes(json);
|
|
|
|
|
|
|
|
|
|
Response.Result = data;
|
|
|
|
|
Response.Message = result.message;
|
|
|
|
|
Response.Code = result.code;
|
|
|
|
|
}
|
|
|
|
|
catch (HttpRequestException e)
|
|
|
|
|
var encryptedData = _helper.Encrypt(bytes);
|
|
|
|
|
// 创建请求体
|
|
|
|
|
var httpContent = new StringContent(encryptedData, Encoding.UTF8, "application/json");
|
|
|
|
|
// 添加请求头
|
|
|
|
|
client.DefaultRequestHeaders.Add("x-lc-secret", xLcSecret);
|
|
|
|
|
client.DefaultRequestHeaders.Add("x-lc-token", xToken);
|
|
|
|
|
|
|
|
|
|
//发送请求
|
|
|
|
|
HttpResponseMessage response = await client.PostAsync(url, httpContent);
|
|
|
|
|
response.EnsureSuccessStatusCode();
|
|
|
|
|
|
|
|
|
|
// 获取响应头中的 x_cl_screte 参数
|
|
|
|
|
var resxClScrete = GetHeaderValue(response, "x-lc-secret");
|
|
|
|
|
|
|
|
|
|
// 读取响应内容并反序列化
|
|
|
|
|
var responseBody = await response.Content.ReadAsStringAsync();
|
|
|
|
|
var result = JsonSerializer.Deserialize<ReciveData<string>>(responseBody);
|
|
|
|
|
//解密数据
|
|
|
|
|
byte[] resbytesx = Convert.FromBase64String(resxClScrete);
|
|
|
|
|
byte[] resdatabytes = Convert.FromBase64String(result?.data);
|
|
|
|
|
string data = _helper.Decrypt(resbytesx, resdatabytes);
|
|
|
|
|
// 结果
|
|
|
|
|
}
|
|
|
|
|
catch (HttpRequestException e)
|
|
|
|
|
{
|
|
|
|
|
return new Response<bool>()
|
|
|
|
|
{
|
|
|
|
|
Console.WriteLine("\nException Caught!");
|
|
|
|
|
Console.WriteLine("Message :{0} ", e.Message);
|
|
|
|
|
Response.Result = "连接错误";
|
|
|
|
|
}
|
|
|
|
|
Result = false,
|
|
|
|
|
Message = e.Message
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return Response;
|
|
|
|
|
return new Response<bool>()
|
|
|
|
|
{
|
|
|
|
|
Result = true,
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -1260,35 +1236,37 @@ namespace OpenAuth.App.ServiceApp.DroneDocking
|
|
|
|
|
{
|
|
|
|
|
RefAsync<int> totalCount = 0;
|
|
|
|
|
var info = await base.Repository.AsQueryable()
|
|
|
|
|
.WhereIF(!string.IsNullOrEmpty(keyWord), t => t.taskname.Contains(keyWord)||t.bizidname.Contains(keyWord))
|
|
|
|
|
.Select(t=>new DroneDockRes
|
|
|
|
|
{
|
|
|
|
|
id= t.id,
|
|
|
|
|
bizidname= t.bizidname,
|
|
|
|
|
taskname= t.taskname,
|
|
|
|
|
createtime= t.createtime,
|
|
|
|
|
state= t.state,
|
|
|
|
|
datacode= t.datacode,
|
|
|
|
|
deviceid= t.deviceid,
|
|
|
|
|
taskid= t.taskid,
|
|
|
|
|
tasklist = SqlFunc.Subqueryable<DroneDocktaskdetail>().Where(r => r.taskid == t.id).LeftJoin<LasaTask>((r, s) => r.flighttaskid == s.FlightId).ToList((r,s)=> new DetailRes
|
|
|
|
|
.WhereIF(!string.IsNullOrEmpty(keyWord),
|
|
|
|
|
t => t.taskname.Contains(keyWord) || t.bizidname.Contains(keyWord))
|
|
|
|
|
.Select(t => new DroneDockRes
|
|
|
|
|
{
|
|
|
|
|
id = r.id,
|
|
|
|
|
bsm=r.bsm,
|
|
|
|
|
Status=s.Status,
|
|
|
|
|
bz=r.bz,
|
|
|
|
|
dkbh=r.dkbh,
|
|
|
|
|
dkfw=r.dkfw,
|
|
|
|
|
dklx=r.dklx,
|
|
|
|
|
dkmc=r.dkmc,
|
|
|
|
|
dkmj=r.dkmj,
|
|
|
|
|
flighttaskid=r.flighttaskid,
|
|
|
|
|
taskid=r.taskid,
|
|
|
|
|
xzqdm=r.xzqdm,
|
|
|
|
|
zdkbh=r.zdkbh
|
|
|
|
|
id = t.id,
|
|
|
|
|
bizidname = t.bizidname,
|
|
|
|
|
taskname = t.taskname,
|
|
|
|
|
createtime = t.createtime,
|
|
|
|
|
state = t.state,
|
|
|
|
|
datacode = t.datacode,
|
|
|
|
|
deviceid = t.deviceid,
|
|
|
|
|
taskid = t.taskid,
|
|
|
|
|
tasklist = SqlFunc.Subqueryable<DroneDocktaskdetail>().Where(r => r.taskid == t.id)
|
|
|
|
|
.LeftJoin<LasaTask>((r, s) => r.flighttaskid == s.FlightId).ToList((r, s) => new DetailRes
|
|
|
|
|
{
|
|
|
|
|
id = r.id,
|
|
|
|
|
bsm = r.bsm,
|
|
|
|
|
Status = s.Status,
|
|
|
|
|
bz = r.bz,
|
|
|
|
|
dkbh = r.dkbh,
|
|
|
|
|
dkfw = r.dkfw,
|
|
|
|
|
dklx = r.dklx,
|
|
|
|
|
dkmc = r.dkmc,
|
|
|
|
|
dkmj = r.dkmj,
|
|
|
|
|
flighttaskid = r.flighttaskid,
|
|
|
|
|
taskid = r.taskid,
|
|
|
|
|
xzqdm = r.xzqdm,
|
|
|
|
|
zdkbh = r.zdkbh
|
|
|
|
|
})
|
|
|
|
|
})
|
|
|
|
|
})
|
|
|
|
|
.ToPageListAsync(page, limit, totalCount);
|
|
|
|
|
.ToPageListAsync(page, limit, totalCount);
|
|
|
|
|
return new Response<PageInfo<List<DroneDockRes>>>
|
|
|
|
|
{
|
|
|
|
|
Result = new PageInfo<List<DroneDockRes>>
|
|
|
|
|