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().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 GetCameraList() { string url = $"{GetUrl()}/camera/setting/list"; JObject response = new(); for (int i = 0; i < Config.RequestTryTime; i++) { response = WithToken(url).GetAsync().ReceiveJson().Result; bool success = response["success"].ToBoolean(); if (!success) { Thread.Sleep(Config.RequestTryInterval); continue; } JToken records = response?["result"]?["records"] ?? new JObject(); List 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 GetFencesInfoList() { string url = $"{GetUrl()}/msFencesInfo/list"; JObject response = new(); for (int i = 0; i < Config.RequestTryTime; i++) { response = WithToken(url).GetAsync().ReceiveJson().Result; bool success = response["success"].ToBoolean(); if (!success) { Thread.Sleep(Config.RequestTryInterval); continue; } return new List(); } string? message = response["message"]?.ToString(); throw new Exception(message); } public List GetCameraLinkageList() { string url = $"{GetUrl()}/military/MsCameraLinkage/list"; JObject response = new(); for (int i = 0; i < Config.RequestTryTime; i++) { response = WithToken(url).GetAsync().ReceiveJson().Result; bool success = response["success"].ToBoolean(); if (!success) { Thread.Sleep(Config.RequestTryInterval); continue; } JToken records = response?["result"]?["records"] ?? new JObject(); List 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 }