From eaac759a3f79dfb30021d8d60a39767980968654 Mon Sep 17 00:00:00 2001 From: ssss <111@qq.com> Date: Mon, 6 Jul 2026 13:36:52 +0800 Subject: [PATCH] =?UTF-8?q?feat(qfod):=20=E6=B7=BB=E5=8A=A0FieldF=E5=AD=97?= =?UTF-8?q?=E6=AE=B5=E6=94=AF=E6=8C=81=E7=AC=AC6=E4=B8=AA=E6=95=B0?= =?UTF-8?q?=E5=AD=97=E8=A7=A3=E6=9E=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/data-model/entities/Qfod记录.md | 9 ++++++++- .../Data/Configurations/QfodRecordConfiguration.cs | 5 +++++ src/WCTDataMiner.Core/Models/QfodRecord.cs | 1 + src/WCTDataMiner.Core/Parsers/QfodParser.cs | 10 ++++++---- 4 files changed, 20 insertions(+), 5 deletions(-) diff --git a/docs/data-model/entities/Qfod记录.md b/docs/data-model/entities/Qfod记录.md index d8d9804..c131f19 100644 --- a/docs/data-model/entities/Qfod记录.md +++ b/docs/data-model/entities/Qfod记录.md @@ -8,7 +8,7 @@ **表名**:`qfod_record` -**描述**:存储 Qfod 格式解析数据,对应日志格式 `X#:Q A->B C D E` +**描述**:存储 Qfod 格式解析数据,对应日志格式 `X#:Q A->B C D E F` --- @@ -24,6 +24,7 @@ | current_q | FLOAT | NOT NULL | 当前实时 Q值 | | raw_q | FLOAT | NOT NULL | 原始 Q值 | | fod_type | TINYINT | NOT NULL | 异物类型编码 | +| field_f | TINYINT | NOT NULL, DEFAULT 0 | 第6个数字(预留字段,当前取值0,业务含义待确认) | | is_deleted | BOOLEAN | NOT NULL, DEFAULT FALSE | 软删除标记 | | created_at | TIMESTAMP | NOT NULL, DEFAULT NOW() | 创建时间 | @@ -77,6 +78,7 @@ public class QfodRecord public float CurrentQ { get; set; } public float RawQ { get; set; } public byte FodType { get; set; } + public byte FieldF { get; set; } public bool IsDeleted { get; set; } = false; public DateTime CreatedAt { get; set; } = DateTime.UtcNow; @@ -132,6 +134,11 @@ public class QfodRecordConfiguration : IEntityTypeConfiguration .IsRequired() .HasColumnName("fod_type"); + builder.Property(e => e.FieldF) + .IsRequired() + .HasDefaultValue((byte)0) + .HasColumnName("field_f"); + builder.Property(e => e.IsDeleted) .IsRequired() .HasDefaultValue(false) diff --git a/src/WCTDataMiner.Core/Data/Configurations/QfodRecordConfiguration.cs b/src/WCTDataMiner.Core/Data/Configurations/QfodRecordConfiguration.cs index 43a26c4..197a5fa 100644 --- a/src/WCTDataMiner.Core/Data/Configurations/QfodRecordConfiguration.cs +++ b/src/WCTDataMiner.Core/Data/Configurations/QfodRecordConfiguration.cs @@ -45,6 +45,11 @@ public class QfodRecordConfiguration : IEntityTypeConfiguration .IsRequired() .HasColumnName("fod_type"); + builder.Property(e => e.FieldF) + .IsRequired() + .HasDefaultValue((byte)0) + .HasColumnName("field_f"); + builder.Property(e => e.IsDeleted) .IsRequired() .HasDefaultValue(false) diff --git a/src/WCTDataMiner.Core/Models/QfodRecord.cs b/src/WCTDataMiner.Core/Models/QfodRecord.cs index 983b03c..762f6ad 100644 --- a/src/WCTDataMiner.Core/Models/QfodRecord.cs +++ b/src/WCTDataMiner.Core/Models/QfodRecord.cs @@ -13,6 +13,7 @@ public class QfodRecord public float CurrentQ { get; set; } public float RawQ { get; set; } public byte FodType { get; set; } + public byte FieldF { get; set; } public bool IsDeleted { get; set; } = false; public DateTime CreatedAt { get; set; } = DateTime.UtcNow; diff --git a/src/WCTDataMiner.Core/Parsers/QfodParser.cs b/src/WCTDataMiner.Core/Parsers/QfodParser.cs index c85e31c..15cae01 100644 --- a/src/WCTDataMiner.Core/Parsers/QfodParser.cs +++ b/src/WCTDataMiner.Core/Parsers/QfodParser.cs @@ -5,13 +5,14 @@ namespace WCTDataMiner.Core.Parsers; /// /// Qfod日志解析器 -/// 格式: X#:Q A->B C D E -/// 示例: 0#:Q 1->25 45.5 20.5 2 +/// 格式: X#:Q A->B C D E F +/// 字段映射: X=ChargerIndex, A=CoilIndex, B=DeltaQ, C=CurrentQ, D=RawQ, E=FodType, F=FieldF +/// 示例: 0#:Q 1->25 45.5 20.5 2 0 /// public class QfodParser : IParser { private static readonly Regex QfodPattern = new( - @"^(\d)#:Q\s+(\d+)->(-?\d+)\s+([-\d.]+)\s+([-\d.]+)\s+(\d+)$", + @"^(\d)#:Q\s+(\d+)->(-?\d+)\s+([-\d.]+)\s+([-\d.]+)\s+(\d+)\s+(\d+)$", RegexOptions.Compiled ); @@ -38,7 +39,8 @@ public class QfodParser : IParser DeltaQ = int.Parse(match.Groups[3].Value), CurrentQ = float.Parse(match.Groups[4].Value), RawQ = float.Parse(match.Groups[5].Value), - FodType = byte.Parse(match.Groups[6].Value) + FodType = byte.Parse(match.Groups[6].Value), + FieldF = byte.Parse(match.Groups[7].Value) }; return ParseResult.Success(record);