Пример #1
0
        /// <summary>
        /// 数据同步:调试模式
        /// </summary>
        /// <returns></returns>
        ///

        /* private bool SyncDeviceData(DateTime dataTime)
         * {
         *  var syncResult = false;
         *  string farmCode = null;
         *  var collectData = new CollectDataBlock();
         *  //采集数据
         *  var deviceUnits =
         *      FacilitySensorDeviceUnit.FindAllWithCache()
         *          .ToList()
         *          .Where(c => c.Code1.Substring(13, 1).EqualIgnoreCase("C"));
         *  //分批上传设备数据
         *  const int size = 10;
         *  var facilitySensorDeviceUnits = deviceUnits as FacilitySensorDeviceUnit[] ?? deviceUnits.ToArray();
         *  var count = facilitySensorDeviceUnits.Count()/size;
         *  if (facilitySensorDeviceUnits.Count()%size > 0)
         *      count++;
         *  for (var i = 0; i < count; i++)
         *  {
         *      var list = facilitySensorDeviceUnits.Skip(i*size).Take(size);
         *
         *      var sendDatas = list.Select(fsd =>
         *      {
         *          farmCode = fsd.Facility.Farm.Code1;
         *          var code1 = fsd.Code1;
         *          var sd = new SensorData
         *          {
         *              DeviceCode = code1,
         *              Value = fsd.SensorDeviceUnit.ProcessedValue,
         *              ShowValue = fsd.SensorDeviceUnit.ShowValue
         *          };
         *          //var mediaDatas = list.Select();
         *          //sd.DeviceType = fsd.SensorDeviceUnit.Sensor.DeviceTypeSerialnum;
         *          //sd.FacilityCode = fsd.Facility.Code1;
         *          //sd.Unit = fsd.SensorDeviceUnit.Sensor.Unit;
         *          //#if DEBUG
         *          if (
         *              DateTime.Now.Subtract(fsd.SensorDeviceUnit.UpdateTime)
         *                  .TotalMinutes > 10)
         *          {
         *              var ran = new Random(DateTime.Now.Minute);
         *              var c = ran.Next(10, 100);
         *              sd.Value = fsd.SensorDeviceUnit.ProcessedValue + c*0.01M;
         *              sd.ShowValue = sd.Value + "";
         *          }
         *          sd.Time = dataTime;
         *          //设施编码+更新时间//批次号
         *          sd.BatchNum = fsd.Facility.Code1.Substring(0, 13) + "-" + sd.Time;
         *          //#else
         *          //                            sd.Time = fsd.SensorDeviceUnit.UpdateTime;
         *          //#endif
         *          return sd;
         *      }).ToList();
         *      collectData.SensorDatas = sendDatas;
         *      var entity = AwEntityHelper.GetEntity(farmCode, "上传设备数据");
         #if DEBUG
         *      var sw = new Stopwatch();
         *      sw.Start();
         #endif
         *      var trans = ApiTransportHelper.GetTransport();
         *      var result = _deviceApi.UploadDeviceData(entity, trans, collectData);
         *      trans.Dispose();
         *      syncResult = result;
         *      ServiceLogger.Current.WriteDebugLog("上传设备数据:{0}", result ? "成功" : "失败");
         #if DEBUG
         *      sw.Stop();
         *      var apiAccesslog = new ApiAccessLog
         *      {
         *          ApiName = "上传设备数据",
         *          Result = result,
         *          CreateTime = DateTime.Now,
         *          CostTime = Convert.ToInt32(sw.ElapsedMilliseconds)
         *      };
         *      apiAccesslog.Save();
         *      ServiceLogger.Current.WriteDebugLog("上传设备数据耗时" + sw.ElapsedMilliseconds.ToString() + "ms");
         *  }
         #endif
         *  //return syncResult;
         *  return true;
         * }*/
        private IEnumerable <FacilityModel> GetPlatformFacilitys(Farm farm)
        {
            var entity       = AwEntityHelper.GetEntity(farm.Code1);
            var facsPlatform = _farmApi.GetFacilities(entity, _transport);

            return(facsPlatform);
        }
Пример #2
0
        /// <summary>
        /// 上传控制指令
        /// </summary>
        /// <returns></returns>
        private void UploadControlCommand(ControlResult controlResult, Facility fac)
        {
#if DEBUG
            var sw           = new Stopwatch();
            var accessResult = false;
            sw.Start();
#endif
            try
            {
                var entity = AwEntityHelper.GetEntity(fac.Farm.Code1);
                var result = _facilityApi.UploadControlResult(entity, _transport, controlResult);
                LogHelper.Debug("上传控制结果成功 " + (result ? "成功" : "失败"));
                accessResult = result;
            }
            catch (Exception ex)
            {
                LogHelper.Debug("上传控制结果失败," + ex.Message);
            }
#if DEBUG
            sw.Stop();
            var apiAccesslog = new ApiAccessLog
            {
                ApiName    = "上传控制结果",
                Result     = accessResult,
                CreateTime = DateTime.Now,
                CostTime   = Convert.ToInt32(sw.ElapsedMilliseconds)
            };
            apiAccesslog.Save();
            LogHelper.Debug("控制结果上传耗时:" + sw.ElapsedMilliseconds + "ms");
#endif
            //return true;
        }
Пример #3
0
        /// <summary>
        /// 上传基地状态
        /// </summary>
        private void UploadStatus()
        {
            var proc = Process.GetCurrentProcess();
            var _oPerformanceCounter = new PerformanceCounter("Processor", "% Processor Time", "_Total");
            var cpu = Convert.ToInt32(UsingProcess(proc.ProcessName) / 1);

            _oPerformanceCounter.NextValue();
            var memory = Convert.ToInt32(proc.PrivateMemorySize64);

            var dataTime = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, DateTime.Now.Hour, DateTime.Now.Minute / 15 * 15, 0);

            Farm.FindAll().ForEach(farm =>
            {
                var fs           = new FarmStatus();
                fs.FarmSerialnum = farm.Code1;
                fs.MemoryUsage   = memory / (1024 * 1024); //MB
                fs.CpuUsage      = cpu;                    //第一次取值为0,然后进行第二次取值
                //fs.InfoType = "正常";
                fs.InfoType = FarmLogTypeEnum.Normal;
                fs.Time     = dataTime;

                var entity2 = AwEntityHelper.GetEntity(farm.Code1);
#if DEBUG
                var sw            = new Stopwatch();
                bool accessResult = false;
                sw.Start();
#endif
                try
                {
                    var trans    = ApiTransportHelper.GetTransport();
                    var result   = _farmApi.UploadFarmStatus(entity2, trans, fs);
                    accessResult = result;
                    trans.Dispose();
                    ServiceLogger.Current.WriteDebugLog("上传基地状态:{0}", result ? "成功" : "失败");
                }
                catch (Exception ex)
                {
                    ServiceLogger.Current.WriteException(ex);
                }
#if DEBUG
                sw.Stop();
                ApiAccessLog apiAccesslog = new ApiAccessLog
                {
                    ApiName    = "上传基地状态",
                    Result     = accessResult,
                    CreateTime = DateTime.Now,
                    CostTime   = Convert.ToInt32(sw.ElapsedMilliseconds)
                };
                apiAccesslog.Save();
                ServiceLogger.Current.WriteDebugLog("基地上传耗时:" + sw.ElapsedMilliseconds + "ms");
#endif
            });
        }
Пример #4
0
        /// <summary>
        /// 农业物联网信息服务平台数据交换协议 处理
        /// </summary>
        /// <param name="str"></param>
        public async Task <XResponseMessage> Process(string str)
        {
            // if (str.IsNullOrWhiteSpace()) throw new ArgumentNullException("str");
            Check.NotNull(str, "str");

            AwEntity obj = AwEntityHelper.GetAwEntity(str);

            if (obj == null)
            {
                LogHelper.Error("[数据格式][错误] " + str);
                return(ResultHelper.CreateMessage("数据格式错误", ErrorType.CanNotProcessRequestData));
                // return ResultHelper.CreateExceptionMessage(ex, "数据格式错误", ErrorType.NotSupportedProtocalType);
            }

            #region 协议解析
            try
            {
                var awEntity = obj;
                //ServiceLogger.Current.WriteDebugLog("{0}", awEntity.Description);
                var result = await ProcessEntity(awEntity);

                //ServiceLogger.Current.WriteLine(result.ToString());
                return(result ?? new XResponseMessage()
                {
                    Success = ErrorType.NoError
                });
                //return null;
            }
            catch (Exception ex)
            {
                //ServiceLogger.Current.WriteException(ex);
                LogHelper.Fatal(ex.ToString());
                return(ResultHelper.CreateMessage("协议解析错误", ErrorType.CanNotProcessRequestData, null, ex));
            }
            #endregion
        }
Пример #5
0
        /// <summary>
        /// 获取控制指令
        /// </summary>
        private List <DeviceControlCommand> GetControlCommand()
        {
            var controlDevices = ControlDeviceUnit.FindAllWithCache().ToList();

            if (!controlDevices.Any() && controlDevices == null)
            {
                return(null);
            }
            //查询出Code1不为空的基地
            var farms       = Farm.FindAll().ToList().Where(f => !f.Code1.IsNullOrWhiteSpace());
            var devCommands = new List <DeviceControlCommand>();
            //校验所有编码
            var enumerable = farms as Farm[] ?? farms.ToArray();

            if (!CheckCode(enumerable))
            {
                return(null);
            }
            enumerable.ToList().ForEach(farm =>
            {
                //本地数据库中的设施
                var facilitysInDb = farm.Facilitys;
                ////从接口获存在的设施
                //var facs_platform = GetPlatformFacilitys(farm);
                if (facilitysInDb.Count > 0)
                {
                    facilitysInDb.ToList().ForEach(fInDb =>
                    {
                        var entity = AwEntityHelper.GetEntity(farm.Code1);
#if DEBUG
                        var sw           = new Stopwatch();
                        var accessResult = false;
                        sw.Start();
#endif
                        var cmds = _facilityApi.GetControlCommand(entity, _transport, fInDb.Code1);

                        var controlCmds = cmds as IList <ControlCmd> ?? cmds.ToList();
                        if (controlCmds.Any())
                        {
                            accessResult = true;
                            controlCmds.ToList().ForEach(cmdDb =>
                            {
                                var devCommand = new DeviceControlCommand
                                {
                                    Code1                     = cmdDb.Serialnum,
                                    Command                   = cmdDb.Command.ToString(),
                                    ControlContinueTime       = cmdDb.ContinueTime,
                                    CreateTime                = DateTime.Now,
                                    ControlDeviceUnitGroupNum =
                                        FacilityControlDeviceUnit.FindAllByCode1(cmdDb.DeviceCode)[0]
                                        .ControlDeviceUnitGroupNum
                                };
                                devCommand.Save(); //保存到本地数据库
                                devCommands.Add(devCommand);
                            });
                        }
                        else
                        {
                            accessResult = false;
                            //Debugger.Break();
                        }
                        LogHelper.Debug("{0}获取控制指令{1}条", fInDb.Name, controlCmds.Count());
#if DEBUG
                        sw.Stop();
                        var apiAccesslog = new ApiAccessLog
                        {
                            ApiName    = "获取控制指令",
                            Result     = accessResult,
                            CreateTime = DateTime.Now,
                            CostTime   = Convert.ToInt32(sw.ElapsedMilliseconds)
                        };
                        apiAccesslog.Save();
                        LogHelper.Debug("获取控制指令花费的时间:{0}", sw.ElapsedMilliseconds.ToString());
#endif
                    });
                }
            });
            if (!devCommands.Any())
            {
                return(devCommands);
            }
            var sw1 = new Stopwatch();
            sw1.Start();
            devCommands.ForEach(cmd =>
            {
                LogHelper.Debug("正在执行控制指令");
                Control(
                    FacilityControlDeviceUnit.FindAllByControlDeviceUnitGroupNum(cmd.ControlDeviceUnitGroupNum)[0]
                    .ControlDeviceUnitGroupNum, Convert.ToInt32(cmd.Command));
                Thread.Sleep(50);
            });
            sw1.Stop();
            LogHelper.Debug("执行所有控制指令花费的时间:{0}", sw1.ElapsedMilliseconds.ToString());
            return(devCommands);
        }
Пример #6
0
        /// <summary>
        /// The upload data 2.
        /// </summary>
        /// <param name="totalDatainfoList">
        /// The total datainfo list.
        /// </param>
        /// <returns>
        /// The <see cref="string"/>.
        /// </returns>
        private static bool UploadData(out EntityList<DeviceData> totalDatainfoList)
        {
            var exp = new WhereExpression(DeviceData<DeviceData>._.Upload == false);
            // 所有上传的DataInfo前20条数据记录集合
            List<DeviceData> tempList =
                totalDatainfoList = DeviceData.FindAll(exp, DeviceData<DeviceData>._.CreateTime.Asc(), null, 0, 20);
            var syncResult = false;
            string farmCode = null;
            var collectData = new CollectDataBlock();
            ////采集数据
            //var deviceUnits =
            //    FacilitySensorDeviceUnit.FindAllWithCache()
            //        .ToList()
            //        .Where(c => c.Code1.Substring(13, 1).EqualIgnoreCase("C"));
            //分批上传设备数据
            const int size = 10;
            //var facilitySensorDeviceUnits = deviceUnits as FacilitySensorDeviceUnit[] ?? deviceUnits.ToArray();
            var count = tempList.Count()/size;
            if (tempList.Count()%size > 0)
                count++;
            for (var i = 0; i < count; i++)

            {
                var list = tempList.Skip(i*size).Take(size);

                var sendDatas = list.Select(fsd =>
                {
                    farmCode = fsd.SensorDeviceUnit.FacilitySensorDeviceUnits[0].Facility.Farm.Code1;
                    var code1 = fsd.Code1;
                    var sd = new SensorData
                    {
                        DeviceCode = code1,
                        Value = fsd.SensorDeviceUnit.ProcessedValue,
                        ShowValue = fsd.SensorDeviceUnit.ShowValue
                    };
                    //var mediaDatas = list.Select();
                    //sd.DeviceType = fsd.SensorDeviceUnit.Sensor.DeviceTypeSerialnum;
                    //sd.FacilityCode = fsd.Facility.Code1;
                    //sd.Unit = fsd.SensorDeviceUnit.Sensor.Unit;
                    //#if DEBUG
                    if (
                        DateTime.Now.Subtract(fsd.SensorDeviceUnit.UpdateTime)
                            .TotalMinutes > 10)
                    {
                        var ran = new Random(DateTime.Now.Minute);
                        var c = ran.Next(10, 100);
                        sd.Value = fsd.SensorDeviceUnit.ProcessedValue + c*0.01M;
                        sd.ShowValue = sd.Value + "";
                    }
                    sd.Time = fsd.CreateTime;
                    //设施编码+更新时间//批次号
                    sd.BatchNum = fsd.SensorDeviceUnit.FacilitySensorDeviceUnits[0].Facility.Code1.Substring(0, 13) +
                                  "-" + sd.Time;
                    //#else
                    //                            sd.Time = fsd.SensorDeviceUnit.UpdateTime;
                    //#endif
                    return sd;
                }).ToList();
                collectData.SensorDatas = sendDatas;
                var entity = AwEntityHelper.GetEntity(farmCode, "上传设备数据");
#if DEBUG
                var sw = new Stopwatch();
                sw.Start();
#endif
                var trans = ApiTransportHelper.GetTransport();
                var result = _deviceApi.UploadDeviceData(entity, trans, collectData);
                trans.Dispose();
                syncResult = result;
                LogHelper.Debug("上传设备数据:{0}", result ? "成功" : "失败");
#if DEBUG
                sw.Stop();
                var apiAccesslog = new ApiAccessLog
                {
                    ApiName = "上传设备数据",
                    Result = result,
                    CreateTime = DateTime.Now,
                    CostTime = Convert.ToInt32(sw.ElapsedMilliseconds)
                };
                apiAccesslog.Save();
                LogHelper.Debug("上传设备数据耗时" + sw.ElapsedMilliseconds.ToString() + "ms");
            }
#endif
            //return syncResult;
            return true;
        }
Пример #7
0
        /// <summary>
        /// 同步设施
        /// </summary>
        /// <returns></returns>
        private bool SyncFacility()
        {
            var syncResult = false;
            //查询出Code1不为空的基地
            var farms = Farm.FindAllWithCache().ToList().Where(f => !f.Code1.IsNullOrWhiteSpace());

            //校验所有编码
            if (!CheckCode(farms))
            {
                return(false);
            }

            farms.ToList().ForEach(farm =>
            {
                //本地数据库中的设施
                var facilitysInDb = farm.Facilitys;
                if (facilitysInDb.Count > 0)
                {
                    facilitysInDb.ForEach(fInDb =>
                    {
                        var facility = new FacilityModel
                        {
                            Serialnum    = fInDb.Code1,
                            Name         = fInDb.Name,
                            Farm         = fInDb.Farm.Code1,
                            FacilityType = fInDb.FacilityTypeSerialnum,
                            // Address = fInDb.Address,
                            CreateTime = DateTime.Now
                        };
                        var entity = AwEntityHelper.GetEntity(farm.Code1);
#if DEBUG
                        var sw = new Stopwatch();
                        sw.Start();
#endif
                        try
                        {
                            var trans         = ApiTransportHelper.GetTransport();
                            var queryResponse = _facilityApi.QueryFacility(entity, trans, facility.Serialnum);
                            if (queryResponse.Data != null) //判断远程数据库中是否已经存在该设施
                            {
                                //var entity1 = AwEntityHelper.GetEntity(farm.Code1);
                                //var result = _facilityApi.UpdateFacility(entity1, trans, facility); //设施单个上传
                                //trans.Dispose();
                                //ServiceLogger.Current.WriteDebugLog("更新设施{0}:{1}", facility.Serialnum,
                                //    result ? "成功" : "失败");
                                //syncResult = result;
                            }
                            else
                            {
                                var entity2 = AwEntityHelper.GetEntity(farm.Code1);
                                var result  = _facilityApi.AddFacility(entity2, trans, facility); //设施单个上传
                                trans.Dispose();
                                LogHelper.Debug("添加设施{0}:{1}", facility.Serialnum,
                                                result ? "成功" : "失败");
                                syncResult = result;
                            }
                        }
                        catch (Exception ex)
                        {
                            LogHelper.Fatal(ex.ToString());
                        }
#if DEBUG
                        sw.Stop();
                        var apiAccesslog = new ApiAccessLog
                        {
                            ApiName    = "同步设施",
                            Result     = syncResult,
                            CreateTime = DateTime.Now,
                            CostTime   = Convert.ToInt32(sw.ElapsedMilliseconds)
                        };
                        apiAccesslog.Save();
                        LogHelper.Debug("同步设施耗时" + sw.ElapsedMilliseconds.ToString() + "ms");
#endif
                    });
                }
            });
            //return syncResult;
            return(true);
        }
Пример #8
0
        /// <summary>
        /// 同步摄像机
        /// </summary>
        /// <returns></returns>
        private bool SyncCameraDevices()
        {
            var syncResult = false;

            //摄像机
            var cameraDevices =
                FacilityCamera.FindAllWithCache().ToList().Where(c => c.Code1.Substring(13, 1).EqualIgnoreCase("S"));

            IEnumerable <FacilityCamera> facilityCameras = cameraDevices as FacilityCamera[] ?? cameraDevices.ToArray();

            if (facilityCameras.Any())
            {
                facilityCameras.ToList().ForEach(cd =>
                {
                    #region 构建MediaData

                    var mediaData = new MediaData
                    {
                        DeviceCode   = cd.Code1,
                        DeviceName   = cd.CameraName,
                        FacilityCode = cd.Facility.Code1,
                        Url          = cd.Camera.CameraHost,
                        MediaPort    = cd.Camera.CameraHttpPort,
                        ContrPort    = cd.Camera.CameraDataPort,
                        User         = cd.Camera.UserID,
                        Pwd          = cd.Camera.UserPwd,
                        Channel      = cd.Camera.Channel,
                        CreateTime   = DateTime.Now
                    };

                    #endregion 构建MediaData

                    var entity = AwEntityHelper.GetEntity(cd.Facility.Farm.Code1);
#if DEBUG
                    var sw = new Stopwatch();
                    sw.Start();
#endif
                    try
                    {
                        var trans          = ApiTransportHelper.GetTransport();
                        var responseResult = _deviceApi.QueryMedia(entity, trans, mediaData.DeviceCode);
                        if (responseResult.Data != null)
                        {
                            //var entity1 = AwEntityHelper.GetEntity(cd.Facility.Farm.Code1);
                            //var result = _deviceApi.UpdateMedia(entity1, trans, mediaData);
                            //trans.Dispose();
                            //ServiceLogger.Current.WriteDebugLog("更新视频设备{0}:{1}", mediaData.DeviceCode,
                            //    result ? "成功" : "失败");
                            //syncResult = result;
                        }
                        else
                        {
                            var entity1 = AwEntityHelper.GetEntity(cd.Facility.Farm.Code1);
                            var result  = _deviceApi.AddMedia(entity1, trans, mediaData);
                            trans.Dispose();
                            LogHelper.Debug("添加视频设备{0}:{1}", mediaData.DeviceCode,
                                            result ? "成功" : "失败");
                            syncResult = result;
                        }
                    }
                    catch (Exception ex)
                    {
                        LogHelper.Fatal(ex.ToString());
                    }
#if DEBUG
                    sw.Stop();
                    var apiAccesslog = new ApiAccessLog
                    {
                        ApiName    = "同步视频设备",
                        Result     = syncResult,
                        CreateTime = DateTime.Now,
                        CostTime   = Convert.ToInt32(sw.ElapsedMilliseconds)
                    };
                    apiAccesslog.Save();
                    LogHelper.Debug("同步视频设备耗时" + sw.ElapsedMilliseconds.ToString() + "ms");
#endif
                });
            }
            return(syncResult);
        }
Пример #9
0
        /// <summary>
        /// 同步控制设备
        /// </summary>
        /// <returns></returns>
        private bool SyncControlDevices()
        {
            var syncResult = false;

            //控制设备
            var controlDevices =
                FacilityControlDeviceUnit.FindAllWithCache()
                .ToList()
                .Where(c => c.Code1.Substring(13, 1).EqualIgnoreCase("K"));
            var facilityControlDeviceUnits = controlDevices as FacilityControlDeviceUnit[] ?? controlDevices.ToArray();

            if (facilityControlDeviceUnits.Any())
            {
                //逐个上传
                facilityControlDeviceUnits.ToList().ForEach(cd =>
                {
                    #region 构建DeviceModel

                    var code = cd.Code1;
                    var devs = cd.ControlDeviceUnits; //改设施控制设备所拥有的所有控制设备继电器的集合
                    if (devs != null)
                    {
                        var originalValue  = CalcControlDeviceValue.CalcOriginal(cd);
                        var processedValue = CalcControlDeviceValue.CalcProcessValue(cd);
                        var deviceModel    = new DeviceModel
                        {
                            Serialnum           = code,
                            Name                = cd.Name,
                            DeviceTypeSerialnum = devs[0].DeviceTypeSerialnum,
                            FacilitySerialnum   = cd.Facility.Code1,
                            ProcessedValue      = originalValue,
                            ShowValue           = processedValue,
                            UpdateTime          = DateTime.Now,
                            RelayType           = devs[0].RelayTypeName
                        };

                        #endregion 构建DeviceModel

                        var entity = AwEntityHelper.GetEntity(cd.Facility.Farm.Code1);
#if DEBUG
                        var sw = new Stopwatch();
                        sw.Start();
#endif
                        try
                        {
                            var trans          = ApiTransportHelper.GetTransport();
                            var responseResult = _deviceApi.QueryDevice(entity, trans, deviceModel.Serialnum);
                            if (responseResult.Data != null)
                            {
                                var entity1 = AwEntityHelper.GetEntity(cd.Facility.Farm.Code1);
                                var result  = _deviceApi.UpdateDevice(entity1, trans, deviceModel);
                                trans.Dispose();
                                LogHelper.Debug("更新控制设备{0}:{1}", deviceModel.Serialnum,
                                                result ? "成功" : "失败");
                                syncResult = result;
                            }
                            else
                            {
                                var entity1 = AwEntityHelper.GetEntity(cd.Facility.Farm.Code1);
                                var result  = _deviceApi.AddDevice(entity1, trans, deviceModel);
                                trans.Dispose();
                                LogHelper.Debug("添加控制设备{0}:{1}", deviceModel.Serialnum,
                                                result ? "成功" : "失败");
                                syncResult = result;
                            }
                        }
                        catch (Exception ex)
                        {
                            LogHelper.Fatal(ex.ToString());
                        }
#if DEBUG
                        sw.Stop();
                        var apiAccesslog = new ApiAccessLog
                        {
                            ApiName    = "同步控制设备",
                            Result     = syncResult,
                            CreateTime = DateTime.Now,
                            CostTime   = Convert.ToInt32(sw.ElapsedMilliseconds)
                        };
                        apiAccesslog.Save();
                        LogHelper.Debug("同步控制设备耗时" + sw.ElapsedMilliseconds.ToString() + "ms");
#endif
                    }
                });
            }
            //return syncResult;
            return(true);
        }
Пример #10
0
        /// <summary>
        /// 同步采集设备
        /// </summary>
        /// <returns></returns>
        private bool SyncCollectDevices()
        {
            //System.Threading.Thread.Sleep(50);
            var syncResult = false;

            //采集设备
            var collectDevices =
                FacilitySensorDeviceUnit.FindAllWithCache()
                .ToList()
                .Where(c => c.Code1.Substring(13, 1).EqualIgnoreCase("C"));
            var facilitySensorDeviceUnits = collectDevices as FacilitySensorDeviceUnit[] ?? collectDevices.ToArray();

            if (facilitySensorDeviceUnits.Any())
            {
                //逐个上传设备数据
                facilitySensorDeviceUnits.ToList().ForEach(cd =>
                {
                    var code = cd.Code1;
                    var dev  = cd.SensorDeviceUnit;

                    #region 构建DeviceModel

                    var deviceModel = new DeviceModel
                    {
                        Serialnum           = code,
                        Name                = dev.Name,
                        DeviceTypeSerialnum = dev.Sensor.DeviceTypeSerialnum,
                        FacilitySerialnum   = cd.Facility.Code1,
                        ProcessedValue      = dev.ProcessedValue,
                        ShowValue           = dev.ShowValue,
                        Unit                = dev.Sensor.Unit,
                        Max        = dev.Sensor.ExperienceMax,
                        Min        = dev.Sensor.ExperienceMin,
                        UpdateTime = dev.UpdateTime
                    };

                    #endregion 构建DeviceModel

                    var entity = AwEntityHelper.GetEntity(cd.Facility.Farm.Code1);
#if DEBUG
                    var sw = new Stopwatch();
                    sw.Start();
#endif
                    try
                    {
                        var trans          = ApiTransportHelper.GetTransport();
                        var responseResult = _deviceApi.QueryDevice(entity, trans, deviceModel.Serialnum);
                        if (responseResult.Data != null) //判断远程数据库中是否已经存在该设备
                        {
                            var entity1 = AwEntityHelper.GetEntity(cd.Facility.Farm.Code1);
                            var result  = _deviceApi.UpdateDevice(entity1, trans, deviceModel); //设备单个上传
                            trans.Dispose();
                            LogHelper.Debug("更新设备{0}:{1}", deviceModel.Serialnum,
                                            result ? "成功" : "失败");
                            syncResult = result;
                        }
                        else
                        {
                            var entity1 = AwEntityHelper.GetEntity(cd.Facility.Farm.Code1);
                            var result  = _deviceApi.AddDevice(entity1, trans, deviceModel); //设备单个上传
                            trans.Dispose();
                            LogHelper.Debug("添加设备{0}:{1}", deviceModel.Serialnum,
                                            result ? "成功" : "失败");
                            syncResult = result;
                        }
                    }
                    catch (Exception ex)
                    {
                        LogHelper.Fatal(ex.ToString());
                    }
#if DEBUG
                    sw.Stop();
                    var apiAccesslog = new ApiAccessLog
                    {
                        ApiName    = "同步采集设备",
                        Result     = syncResult,
                        CreateTime = DateTime.Now,
                        CostTime   = Convert.ToInt32(sw.ElapsedMilliseconds)
                    };
                    apiAccesslog.Save();
                    LogHelper.Debug("同步采集设备耗时" + sw.ElapsedMilliseconds.ToString() + "ms");
#endif
                });
            }
            //return syncResult;
            return(true);
        }