You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
165 lines
5.7 KiB
165 lines
5.7 KiB
using EC.Util.CameraSDK;
|
|
using EC.Util.Common;
|
|
using Flurl.Http;
|
|
using Newtonsoft.Json.Linq;
|
|
|
|
namespace JiLinApp.Docking.Military;
|
|
|
|
public class MilitaryService
|
|
{
|
|
#region Fields
|
|
|
|
private MilitaryConfig Config { get; }
|
|
|
|
private string Token { get; set; }
|
|
|
|
#endregion Fields
|
|
|
|
public MilitaryService(MilitaryConfig config)
|
|
{
|
|
Config = config;
|
|
Token = Login();
|
|
}
|
|
|
|
#region Base
|
|
|
|
private string GetUrl()
|
|
{
|
|
return Config.Url;
|
|
}
|
|
|
|
private IFlurlRequest WithToken(string url)
|
|
{
|
|
return url.WithHeader("X-Access-Token", Token);
|
|
}
|
|
|
|
#endregion Base
|
|
|
|
#region Cmd
|
|
|
|
public string Login()
|
|
{
|
|
string url = $"{GetUrl()}/sys/login";
|
|
object data = new
|
|
{
|
|
username = Config.UserName,
|
|
password = Config.Password,
|
|
};
|
|
JObject response = new();
|
|
for (int i = 0; i < Config.RequestTryTime; i++)
|
|
{
|
|
response = WithToken(url).PostJsonAsync(data).ReceiveJson<JObject>().Result;
|
|
bool success = response["success"].ToBoolean();
|
|
if (!success)
|
|
{
|
|
Thread.Sleep(Config.RequestTryInterval);
|
|
continue;
|
|
}
|
|
string? token = response["result"]?["token"]?.ToString();
|
|
return token ?? string.Empty;
|
|
}
|
|
string? message = response["message"]?.ToString();
|
|
throw new Exception(message);
|
|
}
|
|
|
|
public List<CameraInfo> GetCameraList()
|
|
{
|
|
string url = $"{GetUrl()}/camera/setting/list";
|
|
JObject response = new();
|
|
for (int i = 0; i < Config.RequestTryTime; i++)
|
|
{
|
|
response = WithToken(url).GetAsync().ReceiveJson<JObject>().Result;
|
|
bool success = response["success"].ToBoolean();
|
|
if (!success)
|
|
{
|
|
Thread.Sleep(Config.RequestTryInterval);
|
|
continue;
|
|
}
|
|
JToken records = response?["result"]?["records"] ?? new JObject();
|
|
List<CameraInfo> list = new();
|
|
foreach (var item in records)
|
|
{
|
|
CameraManufactor manufactor;
|
|
string factory = item?["factory_dictText"]?.ToString() ?? string.Empty;
|
|
if (factory.Contains("海康威视")) manufactor = CameraManufactor.HiK;
|
|
else if (factory.Contains("大华")) manufactor = CameraManufactor.DaHua;
|
|
else if (factory.Contains("宇视")) manufactor = CameraManufactor.YuShi;
|
|
else continue;
|
|
string id = item?["id"]?.ToString() ?? string.Empty;
|
|
string ip = item?["ip"]?.ToString() ?? string.Empty;
|
|
string username = item?["user"]?.ToString() ?? string.Empty;
|
|
string password = item?["password"]?.ToString() ?? string.Empty;
|
|
string name = $"{item?["siteName"]?.ToString()}-{item?["cameraName"]?.ToString()}-{ip}";
|
|
if (VerifyUtil.IsEmpty(id) || !VerifyUtil.IsIp(ip) || VerifyUtil.IsEmpty(username) || VerifyUtil.IsEmpty(password)) continue;
|
|
CameraInfo info = CameraInfo.New(manufactor, ip, username, password);
|
|
info.Id = id;
|
|
info.Name = name;
|
|
list.Add(info);
|
|
}
|
|
return list;
|
|
}
|
|
string? message = response["message"]?.ToString();
|
|
throw new Exception(message);
|
|
}
|
|
|
|
public List<object> GetFencesInfoList()
|
|
{
|
|
string url = $"{GetUrl()}/msFencesInfo/list";
|
|
JObject response = new();
|
|
for (int i = 0; i < Config.RequestTryTime; i++)
|
|
{
|
|
response = WithToken(url).GetAsync().ReceiveJson<JObject>().Result;
|
|
bool success = response["success"].ToBoolean();
|
|
if (!success)
|
|
{
|
|
Thread.Sleep(Config.RequestTryInterval);
|
|
continue;
|
|
}
|
|
return new List<object>();
|
|
}
|
|
string? message = response["message"]?.ToString();
|
|
throw new Exception(message);
|
|
}
|
|
|
|
public List<CameraLinkageInfo> GetCameraLinkageList()
|
|
{
|
|
string url = $"{GetUrl()}/military/MsCameraLinkage/list";
|
|
JObject response = new();
|
|
for (int i = 0; i < Config.RequestTryTime; i++)
|
|
{
|
|
response = WithToken(url).GetAsync().ReceiveJson<JObject>().Result;
|
|
bool success = response["success"].ToBoolean();
|
|
if (!success)
|
|
{
|
|
Thread.Sleep(Config.RequestTryInterval);
|
|
continue;
|
|
}
|
|
JToken records = response?["result"]?["records"] ?? new JObject();
|
|
List<CameraLinkageInfo> list = new();
|
|
foreach (var item in records)
|
|
{
|
|
string id = item?["id"]?.ToString() ?? string.Empty;
|
|
//string deviceId = item?["deviceId"]?.ToString() ?? string.Empty;
|
|
string deviceId = "0";
|
|
string sensorId = item?["objCode"]?.ToString() ?? string.Empty;
|
|
string cameraId = item?["cameraId"]?.ToString() ?? string.Empty;
|
|
string placements = item?["placements"]?.ToString() ?? string.Empty;
|
|
int[] presetIds = Array.ConvertAll(placements.Split(","), int.Parse);
|
|
if (VerifyUtil.IsEmpty(id) || VerifyUtil.IsEmpty(sensorId) || VerifyUtil.IsEmpty(cameraId)) continue;
|
|
list.Add(new()
|
|
{
|
|
Id = id,
|
|
DeviceId = deviceId,
|
|
SensorId = sensorId,
|
|
CameraId = cameraId,
|
|
PresetIds = presetIds
|
|
});
|
|
}
|
|
return list;
|
|
}
|
|
string? message = response["message"]?.ToString();
|
|
throw new Exception(message);
|
|
}
|
|
|
|
#endregion Cmd
|
|
}
|