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;