示例#1
0
        /// <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);//加入到缓存中去
        }
示例#4
0
        /// <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;
            }
        }