diff --git a/protocols/JiShe.CollectBus.Protocol.T6452007/T6452007ProtocolPlugin.cs b/protocols/JiShe.CollectBus.Protocol.T6452007/T6452007ProtocolPlugin.cs index c6554a4..7e3b620 100644 --- a/protocols/JiShe.CollectBus.Protocol.T6452007/T6452007ProtocolPlugin.cs +++ b/protocols/JiShe.CollectBus.Protocol.T6452007/T6452007ProtocolPlugin.cs @@ -1,4 +1,5 @@ -using JiShe.CollectBus.Common.Enums; +using JiShe.CollectBus.Common.Consts; +using JiShe.CollectBus.Common.Enums; using JiShe.CollectBus.Common.Extensions; using JiShe.CollectBus.Common.Models; using JiShe.CollectBus.IotSystems.Protocols; @@ -89,8 +90,8 @@ namespace JiShe.CollectBus.Protocol.T6452007 Telemetry3761PacketResponse builderResponse = null; List dataUnit = new List(); - //数据转发场景 10H_F1_1CH - if (aFNStr == "10" && request.SubProtocolRequest != null && string.IsNullOrWhiteSpace(request.SubProtocolRequest.ItemCode) == false) + //数据转发场景 10H_F1 + if (request.ItemCode == T37612012PacketItemCodeConst.AFN10HFN01H && request.SubProtocolRequest != null && string.IsNullOrWhiteSpace(request.SubProtocolRequest.ItemCode) == false) { var t645PacketHandlerName = $"C{request.SubProtocolRequest.ItemCode}_Send"; Telemetry6452007PacketResponse t645PacketResponse = null; diff --git a/services/JiShe.CollectBus.Application.Contracts/ScheduledMeterReading/IScheduledMeterReadingService.cs b/services/JiShe.CollectBus.Application.Contracts/ScheduledMeterReading/IScheduledMeterReadingService.cs index 9d64747..5650a57 100644 --- a/services/JiShe.CollectBus.Application.Contracts/ScheduledMeterReading/IScheduledMeterReadingService.cs +++ b/services/JiShe.CollectBus.Application.Contracts/ScheduledMeterReading/IScheduledMeterReadingService.cs @@ -80,8 +80,7 @@ namespace JiShe.CollectBus.ScheduledMeterReading /// Task AmmeterScheduledAutomaticVerificationTime(int timeDensity, AmmeterInfo ammeterInfo, int groupIndex, DateTime timestamps); - #endregion - + #endregion #region 水表采集处理 /// @@ -103,7 +102,30 @@ namespace JiShe.CollectBus.ScheduledMeterReading /// /// Task WatermeterScheduledMeterAutoReading(); - + + #endregion + + #region 集中器处理 + + /// + /// 自动获取终端版 + /// + /// 采集频率 + /// 电表信息 + /// 集中器所在分组 + /// 采集频率对应的时间戳 + /// + Task ConcentratorScheduledAutomaticGetTerminalVersion(int timeDensity, AmmeterInfo ammeterInfo, int groupIndex, DateTime timestamps); + + /// + /// 自动获取远程通信模块(SIM)版本信息 + /// + /// 采集频率 + /// 电表信息 + /// 集中器所在分组 + /// 采集频率对应的时间戳 + /// + Task ConcentratorScheduledAutomaticGetTelematicsModule(int timeDensity, AmmeterInfo ammeterInfo, int groupIndex, DateTime timestamps); #endregion diff --git a/services/JiShe.CollectBus.Application/ScheduledMeterReading/BasicScheduledMeterReadingService.cs b/services/JiShe.CollectBus.Application/ScheduledMeterReading/BasicScheduledMeterReadingService.cs index 4b62649..a159326 100644 --- a/services/JiShe.CollectBus.Application/ScheduledMeterReading/BasicScheduledMeterReadingService.cs +++ b/services/JiShe.CollectBus.Application/ScheduledMeterReading/BasicScheduledMeterReadingService.cs @@ -135,22 +135,45 @@ namespace JiShe.CollectBus.ScheduledMeterReading //电表定时广播校时,一天一次。 string currentTimeStr = $"{currentTime:HH:mm:00}"; - //判断是否是自动校时时间 - if (!string.Equals(currentTimeStr, _applicationOptions.AutomaticVerificationTime, StringComparison.CurrentCultureIgnoreCase)) + if (string.Equals(currentTimeStr, _applicationOptions.AutomaticVerificationTime, StringComparison.CurrentCultureIgnoreCase))//自动校时 { - _logger.LogInformation($"{nameof(AmmeterScheduledAutomaticVerificationTime)} 电表自动校时,非自动校时时间"); - return; + //_logger.LogInformation($"{nameof(AmmeterScheduledAutomaticVerificationTime)} 电表自动校时,非自动校时时间"); + //return; + + _ = CreateMeterPublishTask( + timeDensity: timeDensity, + nextTaskTime: currentTime, + meterType: MeterTypeEnum.Ammeter, + taskCreateAction: async (timeDensity, data, groupIndex, timestamps) => + { + await AmmeterScheduledAutomaticVerificationTime(timeDensity, data, groupIndex, timestamps); + }); + } + else if (string.Equals(currentTimeStr, _applicationOptions.AutomaticGetTerminalVersionTime, StringComparison.CurrentCultureIgnoreCase))//集中器版本号读取 + { + _ = CreateMeterPublishTask( + timeDensity: timeDensity, + nextTaskTime: currentTime, + meterType: MeterTypeEnum.Ammeter, + taskCreateAction: async (timeDensity, data, groupIndex, timestamps) => + { + await ConcentratorScheduledAutomaticGetTerminalVersion(timeDensity, data, groupIndex, timestamps); + }); + } + else if (string.Equals(currentTimeStr, _applicationOptions.AutomaticGetTelematicsModuleTime, StringComparison.CurrentCultureIgnoreCase))//SIM卡读取 + { + _ = CreateMeterPublishTask( + timeDensity: timeDensity, + nextTaskTime: currentTime, + meterType: MeterTypeEnum.Ammeter, + taskCreateAction: async (timeDensity, data, groupIndex, timestamps) => + { + await ConcentratorScheduledAutomaticGetTelematicsModule(timeDensity, data, groupIndex, timestamps); + }); } else { - _ = CreateMeterPublishTask( - timeDensity: timeDensity, - nextTaskTime: currentTime, - meterType: MeterTypeEnum.Ammeter, - taskCreateAction: async (timeDensity, data, groupIndex, timestamps) => - { - await AmmeterScheduledAutomaticVerificationTime(timeDensity, data, groupIndex, timestamps); - }); + _logger.LogInformation($"{nameof(CreateToBeIssueTasks)} 不是自动校时、采集终端信息等时间,继续处理其他"); } //检查任务时间节点,由于定时任务10秒钟运行一次,需要判定当前时间是否在任务时间节点内,不在则跳过 @@ -736,7 +759,8 @@ namespace JiShe.CollectBus.ScheduledMeterReading List taskList = new List(); var metadata = await _dbProvider.GetMetadata(); - var temCode = "10_01"; + var itemCode = T37612012PacketItemCodeConst.AFN10HFN01H; + var subItemCode = T6452007PacketItemCodeConst.C08; //根据电表型号获取协议插件 var protocolPlugin = await _protocolService.GetProtocolServiceAsync(ammeterInfo.BrandType); @@ -750,12 +774,12 @@ namespace JiShe.CollectBus.ScheduledMeterReading { FocusAddress = ammeterInfo.FocusAddress, Pn = ammeterInfo.MeteringCode, - ItemCode = temCode, + ItemCode = itemCode, SubProtocolRequest = new SubProtocolBuildRequest() { MeterAddress = ammeterInfo.AmmerterAddress, Password = ammeterInfo.Password, - ItemCode = T6452007PacketItemCodeConst.C08, + ItemCode = subItemCode, } }); @@ -775,7 +799,8 @@ namespace JiShe.CollectBus.ScheduledMeterReading Fn = builderResponse.Fn, Seq = builderResponse.Seq, MSA = builderResponse.MSA, - ItemCode = temCode, + ItemCode = itemCode, + SubItemCode = subItemCode, TaskMark = taskMark, IsSend = false, ManualOrNot = false, @@ -814,7 +839,7 @@ namespace JiShe.CollectBus.ScheduledMeterReading throw; } } - + #endregion @@ -997,38 +1022,7 @@ namespace JiShe.CollectBus.ScheduledMeterReading List taskList = new List(); - List tempCodes = new List() { "10_1" }; - - //todo 后续从协议池获取 - if (watermeter.MeterTypeName.Equals("水表") && (watermeter.Protocol.Equals((int)MeterLinkProtocol.CJT_188_2018) || watermeter.Protocol.Equals((int)MeterLinkProtocol.DLT_645_1997) || watermeter.Protocol.Equals((int)MeterLinkProtocol.DLT_645_2007)))//水表且(CJT_188_2018或DLT_645_1997)都采用0C_129 - { - if (watermeter.MeterBrand.Contains("炬华有线")) - { - tempCodes = new List() { "0C_188" }; - } - else - { - tempCodes = new List() { "0C_129" }; - } - } - - else if (typeName.Trim().Equals("西恩超声波流量计")) - { - tempCodes = new List() { "10_1" }; - } - else if (typeName.Trim().Equals("江苏华海涡街流量计积算仪")) - { - tempCodes = new List() { "10_1" }; - } - else if (typeName.Trim().Equals("V880BR涡街流量计")) - { - tempCodes = new List() { "10_1" }; - } - else if (typeName.Trim().Equals("拓思特涡街流量计H880BR")) - { - tempCodes = new List() { "10_1" }; - } - + //根据表型号获取协议插件 var protocolPlugin = await _protocolService.GetProtocolServiceAsync(watermeter.Code); if (protocolPlugin == null) @@ -1037,105 +1031,273 @@ namespace JiShe.CollectBus.ScheduledMeterReading //return; } - foreach (var tempItem in tempCodes) + string itemCode = T37612012PacketItemCodeConst.AFN10HFN01H; + string subItemCode = T1882018PacketItemCodeConst.CTR0190; + + ProtocolBuildResponse builderResponse = await protocolPlugin.BuildAsync(new ProtocolBuildRequest() { - //排除已发送日冻结和月冻结采集项配置 - if (DayFreezeCodes.Contains(tempItem)) + FocusAddress = watermeter.FocusAddress, + Pn = watermeter.MeteringCode, + ItemCode = itemCode, + SubProtocolRequest = new SubProtocolBuildRequest() { - continue; - } - - if (MonthFreezeCodes.Contains(tempItem)) - { - continue; - } - - //var itemCodeArr = tempItem.Split('_'); - //var aFNStr = itemCodeArr[0]; - //var aFN = (AFN)aFNStr.HexToDec(); - //var fn = int.Parse(itemCodeArr[1]); - //TelemetryPacketResponse builderResponse = null; - - //string methonCode = $"AFN{aFNStr}_Fn_Send"; - ////特殊表暂不处理 - //if (handlerPacketBuilder != null && handlerPacketBuilder.TryGetValue(methonCode - // , out var handler)) - //{ - // builderResponse = handler(new TelemetryPacketRequest() - // { - // FocusAddress = watermeter.FocusAddress, - // Fn = fn, - // Pn = watermeter.MeteringCode, - // DataUnit = Build188SendData.Build188WaterMeterReadingSendDataUnit(watermeter.Address), - // }); - //} - //else - //{ - // _logger.LogWarning($"{nameof(WatermeterCreatePublishTaskAction)} 集中器{watermeter.FocusAddress}的水表{watermeter.Name}采集项{tempItem}无效编码。"); - // continue; - //} - - ProtocolBuildResponse builderResponse = await protocolPlugin.BuildAsync(new ProtocolBuildRequest() - { - FocusAddress = watermeter.FocusAddress, - Pn = watermeter.MeteringCode, - ItemCode = tempItem, - SubProtocolRequest = new SubProtocolBuildRequest() - { - MeterAddress = watermeter.MeterAddress, - Password = watermeter.Password, - ItemCode = tempItem, - } - }); - if (builderResponse == null || builderResponse.Data.Length <= 0) - { - //_logger.LogWarning($"{nameof(AmmerterCreatePublishTask)} 集中器{ammeterInfo.FocusAddress}的电表{ammeterInfo.Name}采集项{tempItem}未能正确获取报文。"); - continue; - } - - if (builderResponse == null || builderResponse.Data.Length <= 0) - { - _logger.LogWarning($"{nameof(WatermeterCreatePublishTaskAction)} 集中器{watermeter.FocusAddress}的水表{watermeter.Name}采集项{tempItem}未能正确获取报文。"); - continue; - } - - - string taskMark = CommonHelper.GetTaskMark(builderResponse.AFn, builderResponse.Fn, watermeter.MeteringCode, builderResponse.MSA, builderResponse.Seq); - var meterReadingRecords = new MeterReadingTelemetryPacketInfo() - { - SystemName = SystemType, - ProjectId = $"{watermeter.ProjectID}", - DeviceType = $"{MeterTypeEnum.Ammeter}", - DeviceId = $"{watermeter.MeterId}", - Timestamps = DateTimeOffset.Now.ToUnixTimeNanoseconds(), - DatabaseBusiID = watermeter.DatabaseBusiID, - PendingCopyReadTime = timestamps, - CreationTime = currentTime, MeterAddress = watermeter.MeterAddress, - AFN = builderResponse.AFn, - Fn = builderResponse.Fn, - Seq = builderResponse.Seq, - MSA = builderResponse.MSA, - ItemCode = tempItem, - TaskMark = taskMark, - IsSend = false, - ManualOrNot = false, - Pn = watermeter.MeteringCode, - IssuedMessageId = GuidGenerator.Create().ToString(), - IssuedMessageHexString = Convert.ToHexString(builderResponse.Data), - IsReceived = false, - ScoreValue = $"{watermeter.FocusAddress}.{taskMark}".Md5Fun(), - }; - - taskList.Add(meterReadingRecords); + Password = watermeter.Password, + ItemCode = subItemCode, + } + }); + if (builderResponse == null || builderResponse.Data.Length <= 0) + { + //_logger.LogWarning($"{nameof(AmmerterCreatePublishTask)} 集中器{ammeterInfo.FocusAddress}的电表{ammeterInfo.Name}采集项{tempItem}未能正确获取报文。"); + return null; } + if (builderResponse == null || builderResponse.Data.Length <= 0) + { + _logger.LogWarning($"{nameof(WatermeterCreatePublishTaskAction)} 集中器{watermeter.FocusAddress}的水表{watermeter.Name}采集项{itemCode}未能正确获取报文。"); + return null; + } + + + string taskMark = CommonHelper.GetTaskMark(builderResponse.AFn, builderResponse.Fn, watermeter.MeteringCode, builderResponse.MSA, builderResponse.Seq); + var meterReadingRecords = new MeterReadingTelemetryPacketInfo() + { + SystemName = SystemType, + ProjectId = $"{watermeter.ProjectID}", + DeviceType = $"{MeterTypeEnum.Ammeter}", + DeviceId = $"{watermeter.MeterId}", + Timestamps = DateTimeOffset.Now.ToUnixTimeNanoseconds(), + DatabaseBusiID = watermeter.DatabaseBusiID, + PendingCopyReadTime = timestamps, + CreationTime = currentTime, + MeterAddress = watermeter.MeterAddress, + AFN = builderResponse.AFn, + Fn = builderResponse.Fn, + Seq = builderResponse.Seq, + MSA = builderResponse.MSA, + ItemCode = itemCode, + SubItemCode = subItemCode, + TaskMark = taskMark, + IsSend = false, + ManualOrNot = false, + Pn = watermeter.MeteringCode, + IssuedMessageId = GuidGenerator.Create().ToString(), + IssuedMessageHexString = Convert.ToHexString(builderResponse.Data), + IsReceived = false, + ScoreValue = $"{watermeter.FocusAddress}.{taskMark}".Md5Fun(), + }; + + taskList.Add(meterReadingRecords); + return taskList; } #endregion + #region 集中器处理 + /// + /// 自动获取终端版 + /// + /// 采集频率 + /// 电表信息 + /// 集中器所在分组 + /// 采集频率对应的时间戳 + /// + public virtual async Task ConcentratorScheduledAutomaticGetTerminalVersion(int timeDensity, AmmeterInfo ammeterInfo, int groupIndex, DateTime timestamps) + { + var currentTime = DateTime.Now; + string currentTimeStr = $"{currentTime:HH:mm:00}"; + + try + { + //判断是否是自动获取版本号时间 + if (!string.Equals(currentTimeStr, _applicationOptions.AutomaticGetTerminalVersionTime, StringComparison.CurrentCultureIgnoreCase)) + { + _logger.LogInformation($"{nameof(ConcentratorScheduledAutomaticGetTerminalVersion)} 集中器自动获取版本号,非自动处理时间"); + return; + } + + List taskList = new List(); + var metadata = await _dbProvider.GetMetadata(); + + var itemCode = T37612012PacketItemCodeConst.AFN09HFN01H; + //var subItemCode = T6452007PacketItemCodeConst.C08; + + //根据电表型号获取协议插件 + var protocolPlugin = await _protocolService.GetProtocolServiceAsync(ammeterInfo.BrandType); + if (protocolPlugin == null) + { + _logger.LogError($"{nameof(AmmeterScheduledAutoValveControl)} 集中器自动获取版本号{currentTime}没有找到对应的协议组件,-105"); + return; + } + + ProtocolBuildResponse builderResponse = await protocolPlugin.BuildAsync(new ProtocolBuildRequest() + { + FocusAddress = ammeterInfo.FocusAddress, + Pn = ammeterInfo.MeteringCode, + ItemCode = itemCode, + //SubProtocolRequest = new SubProtocolBuildRequest() + //{ + // MeterAddress = ammeterInfo.AmmerterAddress, + // Password = ammeterInfo.Password, + // ItemCode = subItemCode, + //} + }); + + string taskMark = CommonHelper.GetTaskMark(builderResponse.AFn, builderResponse.Fn, ammeterInfo.MeteringCode, builderResponse.MSA, builderResponse.Seq); + var meterReadingRecords = new MeterReadingTelemetryPacketInfo() + { + SystemName = SystemType, + ProjectId = $"{ammeterInfo.ProjectID}", + DeviceType = $"{MeterTypeEnum.Ammeter}", + DeviceId = $"{ammeterInfo.MeterId}", + Timestamps = currentTime.GetDateTimeOffset().ToUnixTimeNanoseconds(), + DatabaseBusiID = ammeterInfo.DatabaseBusiID, + PendingCopyReadTime = currentTime, + CreationTime = currentTime, + MeterAddress = ammeterInfo.AmmerterAddress, + AFN = builderResponse.AFn, + Fn = builderResponse.Fn, + Seq = builderResponse.Seq, + MSA = builderResponse.MSA, + ItemCode = itemCode, + //SubItemCode = subItemCode, + TaskMark = taskMark, + IsSend = false, + ManualOrNot = false, + Pn = ammeterInfo.MeteringCode, + IssuedMessageId = GuidGenerator.Create().ToString(), + IssuedMessageHexString = Convert.ToHexString(builderResponse.Data), + IsReceived = false, + ScoreValue = $"{ammeterInfo.FocusAddress}.{taskMark}".Md5Fun(), + }; + taskList.Add(meterReadingRecords); + + if (taskList == null || taskList.Count <= 0) + { + _logger.LogError($"{nameof(AmmeterScheduledAutoValveControl)} 定时阀控运行时间{currentTime}没有自动阀控任务生成,-106"); + return; + } + + //任务记录入库 + await _dbProvider.BatchInsertAsync(metadata, taskList); + + //任务信息推送Kafka + _ = DeviceGroupBalanceControl.ProcessWithThrottleAsync( + items: taskList, + deviceIdSelector: data => data.DeviceId, + processor: (data, groupIndex) => + { + _ = KafkaProducerIssuedMessageAction(ProtocolConst.AmmeterSubscriberWorkerOtherIssuedEventName, data, groupIndex); + } + ); + } + catch (Exception) + { + + throw; + } + } + + /// + /// 自动获取远程通信模块(SIM)版本信息 + /// + /// 采集频率 + /// 电表信息 + /// 集中器所在分组 + /// 采集频率对应的时间戳 + /// + public virtual async Task ConcentratorScheduledAutomaticGetTelematicsModule(int timeDensity, AmmeterInfo ammeterInfo, int groupIndex, DateTime timestamps) + { + var currentTime = DateTime.Now; + string currentTimeStr = $"{currentTime:HH:mm:00}"; + + try + { + //判断是否是自动获取版本号时间 + if (!string.Equals(currentTimeStr, _applicationOptions.AutomaticGetTerminalVersionTime, StringComparison.CurrentCultureIgnoreCase)) + { + _logger.LogInformation($"{nameof(ConcentratorScheduledAutomaticGetTelematicsModule)} 自动获取远程通信模块(SIM)版本信息,非自动处理时间"); + return; + } + + List taskList = new List(); + var metadata = await _dbProvider.GetMetadata(); + + var itemCode = T37612012PacketItemCodeConst.AFN09HFN09H; + + //根据电表型号获取协议插件 + var protocolPlugin = await _protocolService.GetProtocolServiceAsync(ammeterInfo.BrandType); + if (protocolPlugin == null) + { + _logger.LogError($"{nameof(ConcentratorScheduledAutomaticGetTelematicsModule)} 自动获取远程通信模块(SIM)版本信息{currentTime}没有找到对应的协议组件,-105"); + return; + } + + ProtocolBuildResponse builderResponse = await protocolPlugin.BuildAsync(new ProtocolBuildRequest() + { + FocusAddress = ammeterInfo.FocusAddress, + Pn = ammeterInfo.MeteringCode, + ItemCode = itemCode, + }); + + string taskMark = CommonHelper.GetTaskMark(builderResponse.AFn, builderResponse.Fn, ammeterInfo.MeteringCode, builderResponse.MSA, builderResponse.Seq); + var meterReadingRecords = new MeterReadingTelemetryPacketInfo() + { + SystemName = SystemType, + ProjectId = $"{ammeterInfo.ProjectID}", + DeviceType = $"{MeterTypeEnum.Ammeter}", + DeviceId = $"{ammeterInfo.MeterId}", + Timestamps = currentTime.GetDateTimeOffset().ToUnixTimeNanoseconds(), + DatabaseBusiID = ammeterInfo.DatabaseBusiID, + PendingCopyReadTime = currentTime, + CreationTime = currentTime, + MeterAddress = ammeterInfo.AmmerterAddress, + AFN = builderResponse.AFn, + Fn = builderResponse.Fn, + Seq = builderResponse.Seq, + MSA = builderResponse.MSA, + ItemCode = itemCode, + //SubItemCode = subItemCode, + TaskMark = taskMark, + IsSend = false, + ManualOrNot = false, + Pn = ammeterInfo.MeteringCode, + IssuedMessageId = GuidGenerator.Create().ToString(), + IssuedMessageHexString = Convert.ToHexString(builderResponse.Data), + IsReceived = false, + ScoreValue = $"{ammeterInfo.FocusAddress}.{taskMark}".Md5Fun(), + }; + taskList.Add(meterReadingRecords); + + if (taskList == null || taskList.Count <= 0) + { + _logger.LogError($"{nameof(AmmeterScheduledAutoValveControl)} 定时阀控运行时间{currentTime}没有自动阀控任务生成,-106"); + return; + } + + //任务记录入库 + await _dbProvider.BatchInsertAsync(metadata, taskList); + + //任务信息推送Kafka + _ = DeviceGroupBalanceControl.ProcessWithThrottleAsync( + items: taskList, + deviceIdSelector: data => data.DeviceId, + processor: (data, groupIndex) => + { + _ = KafkaProducerIssuedMessageAction(ProtocolConst.AmmeterSubscriberWorkerOtherIssuedEventName, data, groupIndex); + } + ); + } + catch (Exception) + { + + throw; + } + } + #endregion + #region 公共处理方法 diff --git a/services/JiShe.CollectBus.Application/ScheduledMeterReading/EnergySystemScheduledMeterReadingService.cs b/services/JiShe.CollectBus.Application/ScheduledMeterReading/EnergySystemScheduledMeterReadingService.cs index 99880af..9dc2fc3 100644 --- a/services/JiShe.CollectBus.Application/ScheduledMeterReading/EnergySystemScheduledMeterReadingService.cs +++ b/services/JiShe.CollectBus.Application/ScheduledMeterReading/EnergySystemScheduledMeterReadingService.cs @@ -227,6 +227,7 @@ namespace JiShe.CollectBus.ScheduledMeterReading //获取对应的缓存电表信息 var ammeterInfo = ammeterInfos.First(); bool tripStateResult = false; + string itemCode = T37612012PacketItemCodeConst.AFN10HFN01H; string subItemCode = string.Empty; if (settingInfo.TripType.Equals("on")) { @@ -250,7 +251,6 @@ namespace JiShe.CollectBus.ScheduledMeterReading continue; } - var temCode = "10_01_"; //根据电表型号获取协议插件 var protocolPlugin = await _protocolService.GetProtocolServiceAsync(ammeterInfo.BrandType); @@ -264,7 +264,7 @@ namespace JiShe.CollectBus.ScheduledMeterReading { FocusAddress = ammeterInfo.FocusAddress, Pn = ammeterInfo.MeteringCode, - ItemCode = temCode, + ItemCode = itemCode, SubProtocolRequest = new SubProtocolBuildRequest() { MeterAddress = ammeterInfo.AmmerterAddress, @@ -289,7 +289,8 @@ namespace JiShe.CollectBus.ScheduledMeterReading Fn = builderResponse.Fn, Seq = builderResponse.Seq, MSA = builderResponse.MSA, - ItemCode = temCode, + ItemCode = itemCode, + SubItemCode = subItemCode, TaskMark = taskMark, IsSend = false, ManualOrNot = false, diff --git a/services/JiShe.CollectBus.Domain/IotSystems/MeterReadingRecords/MeterReadingTelemetryPacketInfo.cs b/services/JiShe.CollectBus.Domain/IotSystems/MeterReadingRecords/MeterReadingTelemetryPacketInfo.cs index e39b2bd..e35d245 100644 --- a/services/JiShe.CollectBus.Domain/IotSystems/MeterReadingRecords/MeterReadingTelemetryPacketInfo.cs +++ b/services/JiShe.CollectBus.Domain/IotSystems/MeterReadingRecords/MeterReadingTelemetryPacketInfo.cs @@ -104,6 +104,13 @@ namespace JiShe.CollectBus.IotSystems.MeterReadingRecords [FIELDColumn] public string ItemCode { get; set; } + + /// + /// 子项编码,一般用于透明转发的编码 + /// + [FIELDColumn] + public string SubItemCode { get; set; } + /// /// 帧序列域 SEQ /// diff --git a/shared/JiShe.CollectBus.Common/Consts/T1882018PacketItemCodeConst.cs b/shared/JiShe.CollectBus.Common/Consts/T1882018PacketItemCodeConst.cs index a51f77f..585d3df 100644 --- a/shared/JiShe.CollectBus.Common/Consts/T1882018PacketItemCodeConst.cs +++ b/shared/JiShe.CollectBus.Common/Consts/T1882018PacketItemCodeConst.cs @@ -7,7 +7,7 @@ using System.Threading.Tasks; namespace JiShe.CollectBus.Common.Consts { /// - /// T188报文项编码 + /// T188-2018报文项编码 /// public class T1882018PacketItemCodeConst { diff --git a/shared/JiShe.CollectBus.Common/Consts/T37612012PacketItemCodeConst.cs b/shared/JiShe.CollectBus.Common/Consts/T37612012PacketItemCodeConst.cs new file mode 100644 index 0000000..6d15e19 --- /dev/null +++ b/shared/JiShe.CollectBus.Common/Consts/T37612012PacketItemCodeConst.cs @@ -0,0 +1,40 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace JiShe.CollectBus.Common.Consts +{ + /// + /// T376.1-2012报文项编码 + /// + public class T37612012PacketItemCodeConst + { + #region 非可配置的,下行报文编码管理,主要是数据库没有配置,但是需要读取的采集项 + + #region 读数据 + /// + /// 透明转发 + /// + public const string AFN10HFN01H = $"10_01"; + + /// + /// 读取终端信息 + /// + public const string AFN09HFN01H = $"09_01"; + + /// + /// 远程通信模块版本信息 + /// + public const string AFN09HFN09H = $"09_09"; + + #endregion + + #region 写数据 + + #endregion + + #endregion + } +} diff --git a/shared/JiShe.CollectBus.Common/Consts/T6452007PacketItemCodeConst.cs b/shared/JiShe.CollectBus.Common/Consts/T6452007PacketItemCodeConst.cs index 8a0834a..92da5ba 100644 --- a/shared/JiShe.CollectBus.Common/Consts/T6452007PacketItemCodeConst.cs +++ b/shared/JiShe.CollectBus.Common/Consts/T6452007PacketItemCodeConst.cs @@ -7,7 +7,7 @@ using System.Threading.Tasks; namespace JiShe.CollectBus.Common.Consts { /// - /// T6452007报文项编码 + /// T645-2007报文项编码 /// public class T6452007PacketItemCodeConst { diff --git a/shared/JiShe.CollectBus.Common/Models/ServerApplicationOptions.cs b/shared/JiShe.CollectBus.Common/Models/ServerApplicationOptions.cs index 6ed9e4a..89ab06e 100644 --- a/shared/JiShe.CollectBus.Common/Models/ServerApplicationOptions.cs +++ b/shared/JiShe.CollectBus.Common/Models/ServerApplicationOptions.cs @@ -19,5 +19,15 @@ /// 自动验证时间 /// public required string AutomaticVerificationTime { get; set;} + + /// + /// 自动获取终端版时间 + /// + public required string AutomaticGetTerminalVersionTime { get; set; } + + /// + /// 自动获取远程通信模块(SIM)版本时间 + /// + public required string AutomaticGetTelematicsModuleTime { get; set; } } } diff --git a/web/JiShe.CollectBus.Host/appsettings.json b/web/JiShe.CollectBus.Host/appsettings.json index 44180c2..2716f53 100644 --- a/web/JiShe.CollectBus.Host/appsettings.json +++ b/web/JiShe.CollectBus.Host/appsettings.json @@ -142,4 +142,12 @@ } }, "PlugInFolder": "C:\\Users\\Dai Zan\\Desktop\\Plugins" + + "ServerApplicationOptions": { + "ServerTagName": "JiSheCollectBus100", + "FirstCollectionTime": "2025-04-22 16:07:00", + "AutomaticVerificationTime": "16:07:00", + "AutomaticGetTerminalVersionTime": "17:07:00", + "AutomaticGetTelematicsModuleTime": "17:30:00" + } } \ No newline at end of file