/// <summary> /// 处理视频设备添加数据 /// </summary> /// <param name="media">视频设备添加数据</param> /// <returns></returns> public async Task <XResponseMessage> ProcessAsync(MediaData media) { if (!_facilityCameraService.CheckCode(media.DeviceCode)) { return(ResultHelper.CreateMessage("设备编码规则错误", ErrorType.InternalError)); } if (!await _facilityService.ExistsWithRedisAsync(media.FacilityCode)) { return(ResultHelper.CreateMessage("设施不存在", ErrorType.FacilityNotExists)); } var item = await _facilityCameraService.GetFacilityCameraByIdAsny(media.DeviceCode); //数据库中不存在该设备(有必要吗?) if (item != null) { return(null); } item = new FacilityCameraDto { Serialnum = media.DeviceCode, Name = media.DeviceName, FacilitySerialnum = media.FacilityCode, Channel = media.Channel, UserID = media.User, UserPwd = media.Pwd, IP = media.Url, DataPort = media.ContrPort, HttpPort = media.MediaPort, Sort = 0, Status = true, RtspPort = 54, CreateTime = DateTime.Now, UpdateTime = DateTime.Now }; try { var result = await _facilityCameraService.AddFacilityCamera(item); LogHelper.Info("[视频]视频{0}{1}添加{2}", item.Name, item.Serialnum, result); return(ResultHelper.CreateMessage($"添加视频设备{(result ? "成功" : "失败")}", result ? ErrorType.NoError : ErrorType.InternalError)); } catch (AggregateException ex) { return(ResultHelper.CreateExceptionMessage(ex, "添加视频设备失败")); } }
private void Process(string fileName, FacilityCameraDto cam) { try { var preset = _facilityCameraPresetPoinService.GetByCameraId(cam.Serialnum);//根据摄像机编码获取摄像机预置点信息(一个摄像机只能有一个预置点???) PictureRepDto pic = new PictureRepDto { Serialnum = Guid.NewGuid().ToString(), Type = "Facility", Title = DateTime.Now.ToString(CultureInfo.InvariantCulture), Description = "", Url = Path.Combine(_companyPicsPath, fileName), Href = "company-pics" + fileName.Replace(_companyPicsPath, "").Replace("\\", "/"), CreateTime = DateTime.Now }; //RedisClient.Sadd("PicsRep-LIST", pic,DataType.Protobuf); _pictureRepService.Add(pic); if (preset != null) { FacilityPicsDto fp = new FacilityPicsDto { Serialnum = Guid.NewGuid().ToString(), FacilityCameraPresetSerialnum = preset.Serialnum, FacilitySerialnum = cam.FacilitySerialnum, PicSerialnum = pic.Serialnum, CreateTime = DateTime.Now }; //RedisClient.Sadd("FacilityPics-LIST", fp, DataType.Protobuf); _facilityPicsRepService.Add(fp); } } catch (Exception ex) { throw; } }
/// <summary> /// 添加摄像机 /// </summary> /// <param name="mediaData"></param> public static async Task AddCamera(MediaData mediaData) { var camera = _redis.Smember <FacilityCameraDto>("facilityCamera", DataType.Protobuf).Find(c => c.Serialnum.EqualIgnoreCase(mediaData.DeviceCode)); var camDb = camera != null ? camera : await _facilityCameraService.GetFacilityCameraByIdAsny(mediaData.DeviceCode); //FacilityCamera.FindAllWithCache().ToList().FirstOrDefault(c => c.Serialnum.Equals(mediaData.DeviceCode)); if (camDb == null) { camDb = new FacilityCameraDto { Serialnum = mediaData.DeviceCode, Name = mediaData.DeviceName, FacilitySerialnum = mediaData.FacilityCode, IP = mediaData.Url, HttpPort = mediaData.MediaPort, DataPort = mediaData.ContrPort, UserID = mediaData.User, UserPwd = mediaData.Pwd, Channel = mediaData.Channel }; //await _facilityCameraService.AddFacilityCamera(camDb); ServiceLogger.Current.WriteDebugLog("添加设施摄像机 {0} {1}", camDb.FacilitySerialnum, camDb.IP); } else { camDb.Name = mediaData.DeviceName; camDb.FacilitySerialnum = mediaData.FacilityCode; camDb.IP = mediaData.Url; camDb.HttpPort = mediaData.MediaPort; camDb.DataPort = mediaData.ContrPort; camDb.UserID = mediaData.User; camDb.UserPwd = mediaData.Pwd; camDb.Channel = mediaData.Channel; //await _facilityCameraService.UpdateCamera(camDb); ServiceLogger.Current.WriteDebugLog("更新设施摄像机 {0} {1}", camDb.FacilitySerialnum, camDb.IP); } _redis.Sadd("facilityCamera", camDb, DataType.Protobuf);//加入到缓存中去 }
/// <summary> /// 更新设备数据 /// </summary> /// <param name="update"></param> /// <returns></returns> public static async Task <XResponseMessage> ProcessDeviceUpdate(DeviceUpdateData update) { if (update == null) { throw new ArgumentNullException("update"); } //更新设备 if (update.Devices != null && update.Devices.Any()) { var updateList = new List <DeviceDto>(); var setList = new List <DeviceExceptionSetDto>(); //foreach (var deviceModel in update.Facility.Where(d => d != null)) update.Devices.Where(d => d != null).ForEach(async deviceModel => { var devDb = await _deviceService.GetDeviceByIdAsny(deviceModel.Serialnum); //if (devDb == null) //{ devDb.Serialnum = deviceModel.Serialnum; devDb.Name = deviceModel.Name; devDb.FacilitySerialnum = deviceModel.FacilitySerialnum; devDb.DeviceTypeSerialnum = deviceModel.DeviceTypeSerialnum; devDb.Unit = deviceModel.Unit; devDb.ProcessedValue = deviceModel.ProcessedValue; devDb.ShowValue = deviceModel.ShowValue; devDb.CreateTime = devDb.UpdateTime = deviceModel.UpdateTime; //devDb.Save(); updateList.Add(devDb); var set = await _deviceExceptionSetService.GetDeviceExceptionSetByDeviceIdAsny(devDb.Serialnum) ?? new DeviceExceptionSetDto() { DeviceSerialnum = devDb.Serialnum }; if (deviceModel.Max != null) { set.Max = deviceModel.Max.Value; } if (deviceModel.Min != null) { set.Min = deviceModel.Min.Value; } setList.Add(set); //} }); try { if (updateList.Count() > 0 && updateList != null) { updateList.ForEach(dev => { DeviceDto device = null; if (_redis.Exists("device") == 1) { device = _redis.Smember <DeviceDto>("device", DataType.Protobuf).Find(d => d.Serialnum.EqualIgnoreCase(dev.Serialnum)); } if (device != null) { _redis.Srem("device", dev, DataType.Protobuf); } //await _deviceService.AddDevice(dev);//保存设备 _redis.Sadd("device", dev, DataType.Protobuf); }); } if (setList.Count() > 0 && setList != null) { setList.ForEach(async set => { await _deviceExceptionSetService.AddDeviceExceptionSet(set); //保存设备异常区间 }); } } catch (Exception ex) { return(ResultHelper.CreateMessage("", ErrorType.InternalError, null, ex)); } } //更新音视频设备 //var cameraDb = FacilityCamera.FindAllWithCache().ToList(); if (update.Cameras != null && update.Cameras.Any()) { var cameraDb = new List <FacilityCameraDto>(); update.Cameras.ForEach(async mediaData => { if (mediaData != null) { var cam = await _facilityCameraService.GetFacilityCameraByIdAsny(mediaData.DeviceCode); if (cam != null) { cam.FacilitySerialnum = mediaData.FacilityCode; cam.IP = mediaData.Url; cam.HttpPort = mediaData.MediaPort; cam.DataPort = mediaData.ContrPort; cam.UserID = mediaData.User; cam.UserPwd = mediaData.Pwd; cam.Channel = mediaData.Channel; cameraDb.Add(cam); } } }); try { //保存设施摄像机 cameraDb.ForEach(c => { //await _facilityCameraService.AddFacilityCamera(c); FacilityCameraDto camera = null; if (_redis.Exists("facilityCamera") == 1) { camera = _redis.Smember <FacilityCameraDto>("facilityCamera", DataType.Protobuf).Find(fc => fc.Serialnum.EqualIgnoreCase(c.Serialnum)); } if (camera != null) { _redis.Srem("facilityCamera", camera, DataType.Protobuf); } _redis.Sadd("facilityCamera", camera, DataType.Protobuf); }); } catch (Exception ex) { return(ResultHelper.CreateMessage("", ErrorType.InternalError, null, ex)); } } return(null); }
/// <summary> /// 获取摄像机上配置的预置点 /// </summary> /// <param name="userHandle"></param> /// <param name="camStation"></param> /// <returns></returns> private IEnumerable <FacilityCameraPresetPointDto> GetCameraPresetPoints(int userHandle, FacilityCameraDto facilityCamera) { try { var cameraPreset = new CHCNetSDK.NET_DVR_GET_PRESET_NAMES(); Int32 dwSize = Marshal.SizeOf(typeof(CHCNetSDK.NET_DVR_GET_PRESET_NAMES)); IntPtr ptrNetCfg = Marshal.AllocHGlobal(dwSize); Marshal.StructureToPtr(cameraPreset, ptrNetCfg, false); UInt32 uiOutBufferSize = 0; bool bGetCfg = false; bGetCfg = CHCNetSDK.NET_DVR_GetDVRConfig(userHandle, 3383, 1, ptrNetCfg, dwSize, ref uiOutBufferSize); if (bGetCfg == false) { var errorCode = CHCNetSDK.NET_DVR_GetLastError(); WriteLog("读取预置点失败 错误码{0}", errorCode); return(Enumerable.Empty <FacilityCameraPresetPointDto>()); } else { WriteLog("读取预置点成功"); } cameraPreset = (CHCNetSDK.NET_DVR_GET_PRESET_NAMES)Marshal.PtrToStructure(ptrNetCfg, typeof(CHCNetSDK.NET_DVR_GET_PRESET_NAMES)); //只取前3个 var points = cameraPreset.StructAs.AsEnumerable().Take(5); List <FacilityCameraPresetPointDto> list = new List <FacilityCameraPresetPointDto>(); var netDvrGetPresetNames = points as CHCNetSDK.NET_DVR_GET_PRESET_NAME[] ?? points.ToArray(); for (int i = 0; i < netDvrGetPresetNames.Count(); i++) { var p = netDvrGetPresetNames.ElementAt(i); //var positon = p.wPresetNum; //设备返回的位置,只要不是0,即为处于使用状态 //if (!positon.Equals(0)) //{ var name = Encoding.Default.GetString(p.byName).Trim(); var preset = _facilityCameraPresetPoinService.GetByPointAndId(facilityCamera.Serialnum, i + 1); if (preset == null) { preset = new FacilityCameraPresetPointDto { Serialnum = Guid.NewGuid().ToString(), FacilityCameraSerialnum = facilityCamera.Serialnum, Name = name, PresetPoint = i + 1 }; _facilityCameraPresetPoinService.Add(preset); } else { if (preset.Name.Equals(name)) { preset.Name = name; } _facilityCameraPresetPoinService.Update(preset); } list.Add(preset); //} //else //{ // CameraStationPresetPoint.DeleteByPosition(camStation.Serialnum, i + 1); //} } //释放非托管资源 Marshal.FreeHGlobal(ptrNetCfg); return(list); } catch (Exception ex) { throw; } }