From f7f3711008f54b662b28224608349c280cd0b907 Mon Sep 17 00:00:00 2001 From: haoliang <821644@qq.com> Date: Thu, 14 May 2026 22:16:24 +0800 Subject: [PATCH] =?UTF-8?q?=E9=80=82=E9=85=8DProductionTracker=E6=96=B0?= =?UTF-8?q?=E5=9B=9B=E5=8F=82=E6=95=B0=E7=AD=BE=E5=90=8D=E5=B9=B6=E5=86=99?= =?UTF-8?q?=E5=85=A5=E5=88=86=E6=9E=90=E6=97=A5=E5=BF=97=E5=88=B0log=5Fcol?= =?UTF-8?q?lect=5Fraw?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus --- src/CncCollector/Core/CollectRecordWriter.cs | 9 +++++--- src/CncCollector/Core/CollectWorker.cs | 23 ++++++++++++++++++-- 2 files changed, 27 insertions(+), 5 deletions(-) diff --git a/src/CncCollector/Core/CollectRecordWriter.cs b/src/CncCollector/Core/CollectRecordWriter.cs index fcbd9d1..98e34b2 100644 --- a/src/CncCollector/Core/CollectRecordWriter.cs +++ b/src/CncCollector/Core/CollectRecordWriter.cs @@ -28,9 +28,11 @@ namespace CncCollector.Core /// 响应耗时(毫秒) /// 是否采集成功 /// 错误信息(失败时) + /// 产量分析日志摘要(成功时写入) public static long WriteBatch(string businessConnStr, string logConnStr, List records, string rawJson, int collectAddressId, - DateTime requestTime, long? responseDurationMs, bool isSuccess, string errorMessage, int? statusCode = null) + DateTime requestTime, long? responseDurationMs, bool isSuccess, string errorMessage, int? statusCode = null, + string analysisSummary = null) { var now = DateTime.Now; long lastRawLogId = 0; @@ -41,8 +43,8 @@ namespace CncCollector.Core using (var conn = new MySqlConnection(logConnStr)) { conn.Open(); - conn.Execute(@"INSERT INTO log_collect_raw (collect_address_id, request_time, response_time, response_duration, is_success, status_code, raw_json, error_message, created_at) - VALUES (@CollectAddressId, @RequestTime, @ResponseTime, @ResponseDuration, @IsSuccess, @StatusCode, @RawJson, @ErrorMessage, @CreatedAt)", + conn.Execute(@"INSERT INTO log_collect_raw (collect_address_id, request_time, response_time, response_duration, is_success, status_code, raw_json, error_message, analysis_summary, created_at) + VALUES (@CollectAddressId, @RequestTime, @ResponseTime, @ResponseDuration, @IsSuccess, @StatusCode, @RawJson, @ErrorMessage, @AnalysisSummary, @CreatedAt)", new { CollectAddressId = collectAddressId, @@ -53,6 +55,7 @@ namespace CncCollector.Core StatusCode = statusCode ?? (isSuccess ? (int?)200 : null), RawJson = rawJson ?? "", ErrorMessage = errorMessage ?? (string)null, + AnalysisSummary = analysisSummary ?? (string)null, CreatedAt = now }); // 记录刚插入的 raw_log 的自增ID diff --git a/src/CncCollector/Core/CollectWorker.cs b/src/CncCollector/Core/CollectWorker.cs index 66748c6..0f3002d 100644 --- a/src/CncCollector/Core/CollectWorker.cs +++ b/src/CncCollector/Core/CollectWorker.cs @@ -419,6 +419,14 @@ namespace CncCollector.Core var records = new List(); + // 分析日志收集 + var analysisLogs = new List(); + analysisLogs.Add("========== CNC采集产量分析日志 =========="); + analysisLogs.Add("采集时间:" + collectTime.ToString("yyyy-MM-dd HH:mm:ss")); + analysisLogs.Add("采集地址:" + _address.Name); + analysisLogs.Add("本次共采集" + devices.Count + "台机床数据,分析结果如下:"); + analysisLogs.Add(""); + foreach (var deviceToken in devices) { var deviceObj = deviceToken as JObject; @@ -473,12 +481,23 @@ namespace CncCollector.Core records.Add(record); // 产量跟踪(program_name为空时不触发分段逻辑) - _tracker.Track(machine.Id, record.ProgramName, record.PartCount, collectTime); + var (logText, changed, todayTotal) = _tracker.Track( + machine.Id, record.ProgramName, record.TotalPartCount, collectTime); + analysisLogs.Add("---机床:" + machine.Name + "---"); + analysisLogs.Add("采集到:程序名=" + (record.ProgramName ?? "(空)") + ",加工零件总数=" + (record.TotalPartCount?.ToString() ?? "(空)")); + analysisLogs.Add("处理结果:" + logText); + analysisLogs.Add("当日该机床累计产量:" + todayTotal.ToString("F0") + "个"); + analysisLogs.Add(""); } + // 拼接分析日志 + analysisLogs.Add("---本日产量汇总---"); + analysisLogs.Add("=========================================="); + var analysisText = string.Join("\n", analysisLogs); + // 4. 批量写入 long rawLogId = CollectRecordWriter.WriteBatch(_businessConnStr, _logConnStr, records, rawJson, - _address.Id, requestTime, durationMs, true, null, statusCode); + _address.Id, requestTime, durationMs, true, null, statusCode, analysisText); // 采集分析:将分析任务委托给 AnalysisEngine if (rawLogId > 0 && records != null && records.Count > 0 && _analysisEngine != null)