/// <summary> /// 上传控制指令 /// </summary> /// <param name="entity"></param> /// <param name="transport"></param> /// <param name="facilitySerialnum"></param> /// <returns></returns> public dynamic UploadControlResult(AwEntity entity, IApiTransport transport, ControlResult controlResult) { if (transport == null) { throw new ArgumentNullException(nameof(transport)); } //if (controlResult.FacilityCode.IsNullOrWhiteSpace()) throw new ArgumentNullException("facilitySerialnum"); Guard(entity); entity.Description = "上传控制指令"; entity.DataBlockObject.DataContentRequest.ControlDataBlock = new ControlDataBlock() { ControlResults = new[] { new ControlResult() { Serialnum = controlResult.Serialnum, Result = controlResult.Result, Time = controlResult.Time } }.ToList() }; var response = transport.Process(entity); //if (response.Success == ErrorType.NoError) //{ // if (response.Data != null && response.Data != null) // return response.Data; //} //return null; return(response.Success == ErrorType.NoError); }
public static XResponseMessage Process(AwEntity entity) { if (entity == null) { throw new ArgumentNullException(nameof(entity)); } return(null); }
/// <summary> /// 删除设备 /// </summary> /// <param name="entity"></param> /// <param name="transport"></param> /// <returns></returns> public bool DeleteDevice(AwEntity entity, IApiTransport transport) { if (transport == null) { throw new ArgumentNullException(nameof(transport)); } Guard(entity); throw new NotImplementedException("DeleteDevice"); }
/// <summary> /// 解析对象 /// </summary> /// <param name="awEntity"></param> /// <returns></returns> private async Task <XResponseMessage> ProcessEntity(AwEntity awEntity) { #if DEBUG Stopwatch sw = new Stopwatch(); sw.Start(); #endif //var result = await AwEntityProcessor.Process(awEntity); #if DEBUG sw.Stop(); LogHelper.Debug("ProcessEntity:{0} \t{1} ms", awEntity.Description, sw.ElapsedMilliseconds); #endif //return result; return(null); }
/// <summary> /// 解析对象 /// </summary> /// <param name="awEntity"></param> /// <returns></returns> private static async Task <XResponseMessage> ProcessEntity(AwEntity awEntity) { #if DEBUG Stopwatch sw = new Stopwatch(); sw.Start(); #endif var result = await AwEntityProcessor.Process(awEntity); #if DEBUG sw.Stop(); ServiceLogger.Current.WriteDebugLog("ProcessEntity:{0} \t{1} ms", awEntity.Description, sw.ElapsedMilliseconds); #endif return(result); }
protected void Guard(AwEntity entity) { if (entity == null) { throw new ArgumentNullException(nameof(entity)); } if (entity.DataBlockObject == null) { throw new NullReferenceException("entity.DO"); } if (entity.DataBlockObject.DataContentRequest == null) { throw new NullReferenceException("entity.DO.DataContent"); } }
public bool UploadFarmStatus(AwEntity entity, IApiTransport transport, FarmStatus fs) { if (transport == null) { throw new ArgumentNullException(nameof(transport)); } Guard(entity); entity.Description = "上传基地运行记录"; entity.DataBlockObject.DataContentRequest.RuntimeDataBlock = new RuntimeDataBlock() { UploadFarmStatus = fs }; var response = transport.Process(entity); return(response.Success == ErrorType.NoError); }
/// <summary> /// 获取控制指令 /// </summary> /// <param name="entity"></param> /// <param name="transport"></param> /// <param name="facilitySerialnum"></param> /// <returns></returns> public IEnumerable <ControlCmd> GetControlCommand(AwEntity entity, IApiTransport transport, string facilitySerialnum) { if (transport == null) { throw new ArgumentNullException(nameof(transport)); } if (facilitySerialnum.IsNullOrWhiteSpace()) { throw new ArgumentNullException(nameof(facilitySerialnum)); } Guard(entity); entity.Description = "获取控制设备指令"; entity.DataBlockObject.DataContentRequest.ControlDataBlock = new ControlDataBlock() { ControlQueries = new[] { new ControlQuery() { FacilityCode = facilitySerialnum, Time = DateTime.Now } }.ToList() }; ; //使用ControlData基础数据块 var response = transport.Process(entity); if (response.Success == ErrorType.NoError && response.Data != null) { string str = response.Data.ToString(); var cmd = ObjectContainer.Current.Resolve <FormatterBase>(DataProtocalType.Json.ToString()) .Deserialize <IEnumerable <ControlCmd> >(str); return(cmd); } else { return(Enumerable.Empty <ControlCmd>()); } }
/// <summary> /// 获取基地下所有设施 /// </summary> /// <param name="entity"></param> /// <param name="transport"></param> /// <returns></returns> public IEnumerable <FacilityModel> GetFacilities(AwEntity entity, IApiTransport transport) { if (transport == null) { throw new ArgumentNullException(nameof(transport)); } Guard(entity); //entity.Description = "获取所有设施类型"; entity.Description = "获取所有设施"; entity.DataBlockObject.DataContentRequest.QueryDataBlock = new QueryDataBlock() { FarmCode = new QueryFacilitys() { Farm = entity.DataBlockObject.Source.FarmCode } }; var response = transport.Process(entity); if (response.Success != ErrorType.NoError) { return(new List <FacilityModel>()); } if (response.Data == null || response.Data.QueryFacilitys == null) { return(new List <FacilityModel>()); } try { string str = response.Data.QueryFacilitys.ToString(); var ie = ObjectContainer.Current.Resolve <FormatterBase>(DataProtocalType.Json.ToString()) .Deserialize <IEnumerable <FacilityModel> >(str); return(ie); } catch (Exception ex) { XTrace.WriteException(ex); } return(new List <FacilityModel>()); }
/// <summary> /// 添加设施信息 /// </summary> /// <param name="entity"></param> /// <param name="transport"></param> /// <param name="addData"></param> /// <returns></returns> public bool AddFacility(AwEntity entity, IApiTransport transport, FacilityModel addData) { if (transport == null) { throw new ArgumentNullException(nameof(transport)); } if (addData == null) { throw new ArgumentNullException(nameof(addData)); } Guard(entity); entity.Description = "添加设施信息"; entity.DataBlockObject.DataContentRequest.ManageDataBlock = new ManageDataBlock() { FacilityAdd = addData }; var response = transport.Process(entity); return(response.Success == ErrorType.NoError); }
/// <summary> /// 检验实体 /// </summary> /// <param name="entity"></param> /// <returns></returns> private bool ProcessEntity() { if (RequestWrapper.Data.IsNullOrWhiteSpace()) { ResponseWrapper = ResultHelper.CreateMessage("请提供有效的数据", ErrorType.NotSupportedProtocalType); Response(); return(false); } BeginProcessEntity?.Invoke(this, RequestWrapper.Data); //检测协议格式 var entity = AwEntityHelper.GetAwEntity(RequestWrapper.Data); if (entity == null) { LogHelper.Error("[数据格式] {0}", RequestWrapper.Data); ResponseWrapper = ResultHelper.CreateMessage("数据格式错误", ErrorType.CanNotProcessRequestData); Response(); return(false); } //数据包描述信息 LogHelper.Trace(entity.Description); //检测版本号 if (!AwEntityHelper.CheckVersion(entity.Version)) { LogHelper.Error("[协议版本] {0}错误", entity.Version); ResponseWrapper = ResultHelper.CreateMessage("协议版本错误", ErrorType.VersionError); } EndProcessEntity?.Invoke(this, RequestWrapper.Data); if (ResponseWrapper != null) { Response(); return(false); } _awEntity = entity; return(true); }
/// <summary> /// 查询设备(采集、控制)信息 /// </summary> /// <param name="entity"></param> /// <param name="transport"></param> /// <param name="deviceCode"></param> /// <returns></returns> public XResponseMessage QueryDevice(AwEntity entity, IApiTransport transport, string deviceCode) { if (transport == null) { throw new ArgumentNullException(nameof(transport)); } if (deviceCode == null) { throw new ArgumentNullException(nameof(deviceCode)); } Guard(entity); entity.Description = "查询设备信息"; entity.DataBlockObject.DataContentRequest.QueryDataBlock = new QueryDataBlock() { DeviceCode = deviceCode }; var response = transport.Process(entity); return(response); }
/// <summary> /// 添加设备(多媒体设备)信息 /// </summary> /// <param name="entity"></param> /// <param name="transport"></param> /// <param name="addDevice"></param> /// <returns></returns> public bool AddMedia(AwEntity entity, IApiTransport transport, MediaData addDevice) { if (transport == null) { throw new ArgumentNullException(nameof(transport)); } if (addDevice == null) { throw new ArgumentNullException(nameof(addDevice)); } Guard(entity); entity.Description = "添加多媒体设备信息"; entity.DataBlockObject.DataContentRequest.ManageDataBlock = new ManageDataBlock() { MediaAdd = addDevice }; var response = transport.Process(entity); return(response.Success == ErrorType.NoError); }
//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); }
/// <summary> /// 更新设备(采集、控制)信息 /// </summary> /// <param name="entity"></param> /// <param name="transport"></param> /// <param name="updateDevice"></param> /// <returns></returns> public bool UpdateDevice(AwEntity entity, IApiTransport transport, DeviceModel updateDevice) { if (transport == null) { throw new ArgumentNullException(nameof(transport)); } if (updateDevice == null) { throw new ArgumentNullException(nameof(updateDevice)); } Guard(entity); entity.Description = "更新设备信息"; entity.DataBlockObject.DataContentRequest.ManageDataBlock = new ManageDataBlock() { DeviceUpdate = updateDevice }; var response = transport.Process(entity); return(response.Success == ErrorType.NoError); }
/// <summary> /// 获取所有设施类型 /// </summary> /// <param name="entity"></param> /// /// <param name="transport"></param> /// <returns></returns> /// <summary> /// 获取设施下所有设备 /// </summary> /// <param name="entity"></param> /// <param name="transport"></param> /// <param name="facilitySerialnum"></param> /// <returns></returns> public dynamic GetFacilityDevices(AwEntity entity, IApiTransport transport, string facilitySerialnum) { if (transport == null) { throw new ArgumentNullException(nameof(transport)); } if (facilitySerialnum.IsNullOrWhiteSpace()) { throw new ArgumentNullException(nameof(facilitySerialnum)); } Guard(entity); entity.Description = "获取设施下所有设备"; entity.DataBlockObject.DataContentRequest.QueryDataBlock = new QueryDataBlock() { Facility = new QueryFacilityDevices() { Facility = facilitySerialnum } }; var sw = new Stopwatch(); sw.Start(); var response = transport.Process(entity); sw.Stop(); var time = sw.ElapsedMilliseconds; if (response.Success != ErrorType.NoError) { return(null); } if (response.Data != null && response.Data.QueryFacilityDevices != null) { return(response.Data.QueryFacilityDevices); } return(null); }
/// <summary> /// 构建AwEntity /// </summary> /// <returns></returns> public static AwEntity GetEntity(string farmcode, string description = null) { var entity = new AwEntity { Description = description, DataBlockObject = new DataBlockObject { Source = new Source { FarmCode = farmcode, FarmName = "", FarmKey = Farm.FindByCode1(farmcode).Remark, Lontitude = 106.72M, Latitude = 26.57M }, CreateTime = DateTime.Now, DataContentRequest = new DataContentRequest() { //CommonData = new CommonData(), //CollectData = new Api.Protocal.Meta.CollectData(), //ControlData = new ControlData() } }, ValidationBlock = new ValidationBlock() { Encrypt = new Encrypt() { Way = EncryptWay._3DES, Content = "" }, Verify = new Verify() { Key = "CRC16", Content = "" } } }; return(entity); }
/// <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 }
public static async Task <XResponseMessage> Process(AwEntity awEntity) { if (awEntity.Version == 2013) { //数据校验 var authorize = ProcessValidation(awEntity.ValidationBlock); if (authorize) { if (awEntity.DataBlockObject == null) { return(ResultHelper.CreateMessage("数据块对象错误", ErrorType.NotSupportedProtocalType)); } else { var dataContent = awEntity.DataBlockObject.DataContentRequest; if (dataContent == null) { return(ResultHelper.CreateMessage("数据内容错误", ErrorType.NotSupportedProtocalType)); } else { #region 处理一般数据 var commonData = dataContent.CommonDataBlock; if (commonData != null) { try { var result = DataObjectProcessor.ProcessCommonData(commonData); //if (result != null && result.Success != ErrorType.NoError) // return result; return(result); } catch (Exception ex) { ServiceLogger.Current.WriteException(ex); return(ResultHelper.CreateExceptionMessage(ex)); } } #endregion #region 处理采集数据 var collectData = dataContent.CollectDataBlock; if (collectData != null) { try { var result = DataObjectProcessor.ProcessCollectData(collectData); if (result != null && result.Success != ErrorType.NoError) { return(result); } } catch (Exception ex) { ServiceLogger.Current.WriteException(ex); return(ResultHelper.CreateExceptionMessage(ex)); } } #endregion #region 处理控制数据 var controlData = dataContent.ControlDataBlock; if (controlData != null) { try { var result = DataObjectProcessor.ProcessControlData(controlData); if (result != null && result.Success == ErrorType.NoError) { return(result); } } catch (Exception ex) { ServiceLogger.Current.WriteException(ex); return(ResultHelper.CreateExceptionMessage(ex)); } } #endregion #region 处理查询数据 var queryData = dataContent.QueryDataBlock; if (queryData != null) { try { var result = await DataObjectProcessor.ProcessQueryData(queryData); //if (result != null && result.Success != ErrorType.NoError) // return result; return(result); } catch (Exception ex) { ServiceLogger.Current.WriteException(ex); return(ResultHelper.CreateExceptionMessage(ex)); } } #endregion #region 处理管理数据 var manageData = dataContent.ManageDataBlock; if (manageData != null) { try { var result = await DataObjectProcessor.ProcessManageData(manageData); //if (result != null && result.Success != ErrorType.NoError) // return result; return(result); } catch (Exception ex) { ServiceLogger.Current.WriteException(ex); return(ResultHelper.CreateExceptionMessage(ex)); } } #endregion #region 处理运行数据 var runtimeData = dataContent.RuntimeDataBlock; if (runtimeData != null) { try { var result = DataObjectProcessor.ProcessRuntimeData(runtimeData); //if (result != null && result.Success != ErrorType.NoError) // return result; return(result); } catch (Exception ex) { ServiceLogger.Current.WriteException(ex); return(ResultHelper.CreateExceptionMessage(ex)); } } #endregion } } return(ResultHelper.CreateMessage("无需要处理数据", ErrorType.NoError)); } else { return(ResultHelper.CreateMessage("权限验证失败", ErrorType.AuthorizeFailed)); } } else { //协议版本错误 return(ResultHelper.CreateMessage("协议版本错误", ErrorType.VersionError)); } }