Infrastructure/OpenAuth.App/ServiceApp/DroneDockManage/AirportMaintenanceApp.cs

132 lines
4.5 KiB
C#

using System.Dynamic;
using System.Net;
using System.Text;
using Infrastructure;
using Infrastructure.Cache;
using Infrastructure.Extensions;
using Infrastructure.Helpers;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using OpenAuth.App.Interface;
namespace OpenAuth.App.ServiceApp.DroneDockManage
{
public class AirportMaintenanceApp
{
private readonly RedisCacheContext _cache;
private readonly HttpClient _httpClient;
private readonly IAuth _auth;
public AirportMaintenanceApp(
RedisCacheContext cache, HttpClient httpClient, IAuth auth)
{
_cache = cache;
_httpClient = httpClient;
_auth = auth;
}
public Response<dynamic> GetdTsgzProjectId()
{
var conf = ConfigHelper.GetConfigRoot();
var projectId = conf["TaiShiGanZhi:ProjectId"];
return new Response<dynamic>()
{
Result = new
{
ProjectId = projectId
}
};
}
public async Task<Response<dynamic>> GetTsgzAccessToken()
{
//using var client = new HttpClient();
var conf = ConfigHelper.GetConfigRoot();
var apiUrl = conf["TaiShiGanZhi:ApiUrl"];
var loginUrl = conf["TaiShiGanZhi:LoginUrl"];
var param = new
{
account = conf["TaiShiGanZhi:Username"],
password = conf["TaiShiGanZhi:Password"]
};
var content = new StringContent(JsonConvert.SerializeObject(param), Encoding.UTF8,
"application/json");
// 执行创建数据存储
var response = await _httpClient.PostAsync(apiUrl + loginUrl, content);
if (response.StatusCode != HttpStatusCode.OK)
{
return new Response<dynamic>()
{
Result = false,
Message = "登录失败"
};
}
var result = await response.Content.ReadAsStringAsync();
var jsonObject = JObject.Parse(result);
if (jsonObject["code"].ToInt() == 200)
{
return new Response<dynamic>()
{
Result = new
{
AccessToken = jsonObject["result"]["token"].ToString()
}
};
}
return new Response<dynamic>()
{
Code = 500,
Message = "获取态势感知token失败"
};
}
public async Task<Response<dynamic>> ApplyDroneControl(string dronePortSn)
{
var conf = ConfigHelper.GetConfigRoot();
var apiUrl = conf["TaiShiGanZhi:ApiUrl"];
var currentUserId = _auth.GetUserId();
string lockSetKey = "locked_users";
dynamic info = new ExpandoObject();
// 查询所有锁定用户
var existingLocked = await _cache.SetMembersAsync(lockSetKey);
// 如果有锁定用户,并且锁定的用户不是当前用户,则拒绝
if (existingLocked.Length > 0)
{
var isCurrentUserLocked = existingLocked.Any(u => u == currentUserId);
if (!isCurrentUserLocked)
{
info.approved = false;
// 已被其他用户锁定
return new Response<dynamic>
{
Code = 400,
Message = "已被其他用户锁定",
Result = info
};
}
}
info.approved = true;
var result = await _httpClient.GetAsync(apiUrl + $"/api/Manage/GetDronePortInfo?dronePortSn={dronePortSn}");
if (result.StatusCode == HttpStatusCode.OK)
{
var json = await result.Content.ReadAsStringAsync();
var jsonObject = JObject.Parse(json);
info.dronePortState = jsonObject["result"]?["modeCode"];
info.droneInDock = jsonObject["result"]?["droneInDock"];
return new Response<dynamic>
{
Result = info
};
}
return new Response<dynamic>
{
Code = 500,
Message = "获取无人机状态失败"
};
}
}
}