Ejemplo n.º 1
0
        /// <summary>
        /// 处理采集数据块
        /// </summary>
        /// <param name="collectDataBlock"></param>
        public static XResponseMessage ProcessCollectData(CollectDataBlock collectDataBlock)
        {
            if (collectDataBlock == null)
            {
                throw new ArgumentNullException("collectDataBlock");
            }

            if (collectDataBlock.SensorDatas != null && collectDataBlock.SensorDatas.Any())
            {
                var result = CollectDataProcessor.ProcessSensorData(collectDataBlock.SensorDatas);
                if (result != null && result.Success != ErrorType.NoError)
                {
                    return(result);
                }
            }
            if (collectDataBlock.MediaDatas != null && collectDataBlock.MediaDatas.Any())
            {
                var result = CollectDataProcessor.ProcessMediaData(collectDataBlock.MediaDatas);
                if (result != null && result.Success != ErrorType.NoError)
                {
                    return(result);
                }
            }
            if (collectDataBlock.PictureDatas != null && collectDataBlock.PictureDatas.Any())
            {
                var result = CollectDataProcessor.ProcessPictureData(collectDataBlock.PictureDatas);
                if (result != null && result.Success != ErrorType.NoError)
                {
                    return(result);
                }
            }
            //return null;
            return(ResultHelper.CreateMessage("", ErrorType.NoError));
        }
Ejemplo n.º 2
0
        //public bool UploadDeviceData(AwEntity entity, IApiTransport transport, List<DeviceModel> devices)
        //{
        //    if (transport == null) throw new ArgumentNullException("transport");
        //    Guard(entity);
        //    if (devices == null || !devices.Any()) return false;

        //    entity.Description = "上传设备数据";
        //    var sds = devices.Select(dev => new SensorData
        //    {
        //        //FacilityCode = dev.FacilitySerialnum,
        //        DeviceCode = dev.Serialnum,
        //        //DeviceType = dev.DeviceTypeSerialnum,
        //        Value = dev.ProcessedValue,
        //        ShowValue = dev.ShowValue,
        //        //Unit = dev.Unit,
        //        Time = dev.UpdateTime
        //    });
        //    entity.DataBlockObject.DataContentRequest.CollectDataBlock = new CollectDataBlock
        //    {
        //        SensorDatas = sds.ToList()
        //    };

        //    var response = transport.Process(entity);
        //    return response.Success == ErrorType.NoError;
        //}

        /// <summary>
        /// 上传采集、控制、摄像机设备数据
        /// </summary>
        /// <param name="entity"></param>
        /// <param name="transport"></param>
        /// <param name="collectData"></param>
        /// <returns></returns>
        public bool UploadDeviceData(AwEntity entity, IApiTransport transport, CollectDataBlock collectData)
        {
            if (transport == null)
            {
                throw new ArgumentNullException(nameof(transport));
            }
            if (collectData == null)
            {
                throw new ArgumentNullException(nameof(collectData));
            }
            Guard(entity);

            entity.Description = "上传设备数据";
            entity.DataBlockObject.DataContentRequest.CollectDataBlock = new CollectDataBlock()
            {
                SensorDatas = collectData.SensorDatas,
                MediaDatas  = collectData.MediaDatas
            };
            var response = transport.Process(entity);

            return(response.Success == ErrorType.NoError);
        }
Ejemplo n.º 3
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;
        }