using MoYu.RemoteRequest.Extensions; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using SafeCampus.Application.Manager.DeepelephManager; using System.Collections.Generic; namespace SafeCampus.Application.Services.Business.CameraInfoService; public class CameraInfoService:DbRepository, ICameraInfoService { private readonly IDeepelephManager _deepelephManager; private readonly ISimpleCacheService _simpleCacheService; public CameraInfoService(IDeepelephManager deepelephManager, ISimpleCacheService simpleCacheService) { _deepelephManager = deepelephManager; _simpleCacheService = simpleCacheService; } public async Task DataSync() { var appSettings = App.GetOptionsMonitor(); var list = await Context.Queryable().ToListAsync(); var str = await $"{appSettings.SXAPIURL}/device/console/v1/sensor/page_query/brief" .SetBody(new { token = _deepelephManager.GetToken(), tenantCode = appSettings.TenantCode, poiId = appSettings.PoiId, pageNo = 1, pageSize = 1000, }) .SetContentType("application/json") .PostAsAsync(); var model = JsonConvert.DeserializeObject(str); if (!(bool)model["success"]) throw Oops.Oh(model["message"].ToString()); if (model["data"] != null) { foreach (var item in model["data"]["items"]) { var old_model = list.FirstOrDefault(x => x.SensorId == item["sensorId"].ToString()); if (old_model != null) { old_model.DeviceStatus = item["deviceStatus"].ToString() == "online"; old_model.DirectUrlIp = item["directUrlIp"].ToString(); old_model.FieldId = item["fieldId"].ToString(); old_model.FieldName = item["fieldName"].ToString(); old_model.LastTime = DateTime.Now; old_model.ResHeight = (int)item["resHeight"]; old_model.ResWidth = (int)item["resWidth"]; old_model.SensorName = item["sensorName"].ToString(); old_model.SnapshotUrl = item["snapshotUrl"].ToString(); await UpdateAsync(old_model); } else { await InsertAsync(new CameraInfo { DeviceStatus = item["deviceStatus"].ToString()== "online", DirectUrlIp = item["directUrlIp"].ToString(), FieldId = item["fieldId"].ToString(), FieldName = item["fieldName"].ToString(), LastTime = DateTime.Now, ResHeight = (int)item["resHeight"], ResWidth = (int)item["resWidth"], SensorId = item["sensorId"].ToString(), SensorName = item["sensorName"].ToString(), SnapshotUrl = item["snapshotUrl"].ToString(), }); } } return true; } return false; } public async Task> GetPageList(CameraSearch search) { var query = Context.Queryable() .WhereIF(search.DeviceStatus.HasValue, x => x.DeviceStatus == search.DeviceStatus) .WhereIF(!string.IsNullOrEmpty(search.SensorId), x => x.SensorId == search.SensorId) .WhereIF(!string.IsNullOrEmpty(search.SensorName), x => x.SensorName == search.SensorName) .WhereIF(search.GroupId.HasValue, x => (search.GroupId.Value==-1?x.GroupId==null:x.GroupId==search.GroupId.Value)); var list = await query.OrderBy(x => x.LastTime) .ToPagedListAsync(search.PageNum, search.PageSize); return list; } public async Task BatchSetGroup(SetGroupInput input) { if (input.Id==-1) { var result = await Context.Updateable() .SetColumns(x => x.GroupId == null) .Where(x => input.Ids.Contains(x.Id)) .ExecuteCommandAsync(); return result == input.Ids.Count; } else { var result = await Context.Updateable() .SetColumns(x => x.GroupId == input.Id) .Where(x => input.Ids.Contains(x.Id)) .ExecuteCommandAsync(); return result == input.Ids.Count; } } public async Task BatchSetPushPersonByGroup(SetPushPersonGroupInput input) { var result = await Context.Updateable() .SetColumns(x => x.PushUserId == input.UserId) .Where(x =>x.GroupId==input.GroupId) .ExecuteCommandAsync(); return result >0; } public async Task BatchSetPushPerson(SetPushPersonInput input) { var result = await Context.Updateable() .SetColumns(x => x.PushUserId == input.UserId) .Where(x => input.Ids.Contains(x.Id)) .ExecuteCommandAsync(); return result == input.Ids.Count; } public async Task BatchSetPushPersonByWarn(SetPushPersonWarnInput input) { var warn = _simpleCacheService.Get>(SafeCampusConst.WarnGroup); var warnGroupInfo = warn.FirstOrDefault(x => x.Code == input.WarnCode); if (warnGroupInfo != null) { var ids = warnGroupInfo.CameraId; var result = await Context.Updateable() .SetColumns(x => x.PushUserId == input.UserId) .Where(x => ids.Contains(x.SensorId)) .ExecuteCommandAsync(); return result >0; } throw Oops.Oh("分组不存在"); } }