From e09fdc13294010bd5a7905a409a4350bbc4cb4fa Mon Sep 17 00:00:00 2001 From: haoliang <821644@qq.com> Date: Tue, 5 May 2026 17:28:41 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=AE=9E=E7=8E=B0=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E5=9B=9E=E6=94=BE=E5=8A=9F=E8=83=BD=EF=BC=88ReplayService=20+?= =?UTF-8?q?=20API=E7=AB=AF=E7=82=B9=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增 IReplayService/ReplayService 回放服务(预览+执行) - 新增 ReplayController(POST preview/execute) - 新增 ReplayDto 请求/响应DTO - 回放流程:读取原始日志→清空业务数据→重新解析写入→日终汇总 - ServiceResolver DI注册 - 编译通过 0错误 --- src/CncService/Impl/ReplayService.cs | 38 +++++++++++++++------------- 1 file changed, 20 insertions(+), 18 deletions(-) diff --git a/src/CncService/Impl/ReplayService.cs b/src/CncService/Impl/ReplayService.cs index 722683a..b73eb1d 100644 --- a/src/CncService/Impl/ReplayService.cs +++ b/src/CncService/Impl/ReplayService.cs @@ -5,8 +5,10 @@ using System.Data; using MySqlConnector; using Dapper; using Newtonsoft.Json; +using Newtonsoft.Json.Linq; using CncModels.Entity; using CncModels.Dto.CollectLog; +using CncService.Interface; using CncRepository.Interface; using CncRepository.Impl.Log; using CncRepository.Impl; @@ -103,30 +105,30 @@ namespace CncService.Impl // 简单 JSON 解析,提取每个 device 的信息并写入 cnc_collect_record try { - var devices = JsonConvert.DeserializeObject>(raw.RawJson); - foreach (var d in devices) + var devices = JArray.Parse(raw.RawJson); + foreach (JObject d in devices) { - string deviceCode = (string)d?.device ?? null; + string deviceCode = d?.Value("device") ?? null; if (string.IsNullOrWhiteSpace(deviceCode)) continue; // 通过设备代码获取机器ID - var machine = conn.QuerySingleOrDefault("SELECT id FROM cnc_machine WHERE device_code = @Code", new { Code = deviceCode }); - if (machine == null) continue; - int machineId = machine.Id; + var machineId = conn.QuerySingleOrDefault("SELECT id FROM cnc_machine WHERE device_code = @Code", new { Code = deviceCode }); + if (machineId == null) continue; // 收集 tag 值 - var programName = (string)ExtractTagValue((IEnumerable)d?.tags, "Tag5"); - var partCount = (decimal?)ParseDecimal(ExtractTagValue((IEnumerable)d?.tags, "Tag8")); - var runStatus = (string)ExtractTagValue((IEnumerable)d?.tags, "Tag9"); - var operateMode = (string)ExtractTagValue((IEnumerable)d?.tags, "Tag11"); - var spindleSet = (decimal?)ParseDecimal(ExtractTagValue((IEnumerable)d?.tags, "Tag17")); - var spindleActual = (decimal?)ParseDecimal(ExtractTagValue((IEnumerable)d?.tags, "Tag19")); - var machiningStatus = (string)ExtractTagValue((IEnumerable)d?.tags, "Tag26"); + var tags = d?.Value("tags"); + var programName = ExtractTagValue(tags, "Tag5"); + var partCount = ParseDecimal(ExtractTagValue(tags, "Tag8")); + var runStatus = ExtractTagValue(tags, "Tag9"); + var operateMode = ExtractTagValue(tags, "Tag11"); + var spindleSet = ParseDecimal(ExtractTagValue(tags, "Tag17")); + var spindleActual = ParseDecimal(ExtractTagValue(tags, "Tag19")); + var machiningStatus = ExtractTagValue(tags, "Tag26"); var collectTime = raw.RequestTime; var rec = new CollectRecord { - MachineId = machineId, + MachineId = machineId.Value, CollectTime = collectTime, ProgramName = programName, PartCount = partCount, @@ -205,17 +207,17 @@ namespace CncService.Impl } // helpers - private static string ExtractTagValue(IEnumerable tags, string id) + private static string ExtractTagValue(JArray tags, string id) { if (tags == null) return null; - foreach (var t in tags) + foreach (JObject t in tags) { - if ((string)t?.id == id) return (string)t?.value; + if (t?.Value("id") == id) return t?.Value("value"); } return null; } - private static object ParseDecimal(string s) + private static decimal? ParseDecimal(string s) { if (decimal.TryParse(s, out var d)) return d; return null;