diff --git a/Model/Extension/CommonExtension.cs b/Model/Extension/CommonExtension.cs index d8260a1..d892ed9 100644 --- a/Model/Extension/CommonExtension.cs +++ b/Model/Extension/CommonExtension.cs @@ -1,4 +1,6 @@ +using System.Collections.Concurrent; using System.Globalization; +using Newtonsoft.Json; using Newtonsoft.Json.Linq; namespace SparkClient.Model.Extension; @@ -21,6 +23,31 @@ public static class CommonExtension return obj.ToString(); } } + // 缓存类型是否重写ToString的检查结果(提升性能) + private static readonly ConcurrentDictionary _toStringOverriddenCache = new(); + + /// + /// 增强版安全ToString(自动处理未重写ToString的情况) + /// + public static string ToSafeAbundantString(this object obj) + { + if (obj == null) return ""; + + var type = obj.GetType(); + + // 判断是否重写了ToString方法 + var hasCustomToString = _toStringOverriddenCache.GetOrAdd(type, t => + { + var toStringMethod = t.GetMethod("ToString", Type.EmptyTypes); + return toStringMethod?.DeclaringType != typeof(object); + }); + + return hasCustomToString + ? obj.ToString() // 使用自定义的ToString + : JsonConvert.SerializeObject(obj); // 未重写时序列化为JSON + } + + /// /// 简单的判断字符串是否为Null或空白 /// diff --git a/Model/Services/SOCClientService.cs b/Model/Services/SOCClientService.cs index cecc375..e0fbe0d 100644 --- a/Model/Services/SOCClientService.cs +++ b/Model/Services/SOCClientService.cs @@ -389,6 +389,7 @@ namespace SparkClient.Model.Services public async Task OpenPump(bool isOpen) { // if(GenImage) return StatusCodes.DeviceNotFound; + Logger.Info($"气泵开关请求发起{isOpen}"); int param = isOpen ? 1 : 0 ; string url = $"{_baseUrl}/set_pump?on={param}"; Logger.Debug(url); @@ -403,7 +404,7 @@ namespace SparkClient.Model.Services Logger.Debug(result.Status); return result.Status; } - + Logger.Info($"气泵开关请求发起完毕"); return StatusCodes.DeviceNotFound; } catch (Exception e) diff --git a/ViewModel/Grading/DiamondSelectVM.cs b/ViewModel/Grading/DiamondSelectVM.cs index 85e2e71..fe4f4fb 100644 --- a/ViewModel/Grading/DiamondSelectVM.cs +++ b/ViewModel/Grading/DiamondSelectVM.cs @@ -21,6 +21,7 @@ using SparkClient.Model.Common; using Color = System.Windows.Media.Color; using MessageBox = SparkClient.Views.Dialog.MessageBox; using SparkClient.Model.Attributes; +using SparkClient.Model.Extension; namespace SparkClient.ViewModel.Grading; @@ -185,6 +186,7 @@ public class DiamondSelectVM : BaseViewModel //json模式 { + Logger.Info($"当前运行JSON模式:{runModel}"); var loadingView = new GradingLoadingVM(param.ToString(), DiamondCode); BaseControlVM vm = new BaseControlVM(loadingView, MultilingualHelper.getString("wait")); vm.WindowTitle = string.IsNullOrWhiteSpace(DiamondCode) ? vm.WindowTitle : $"{vm.WindowTitle} - {DiamondCode}"; @@ -209,6 +211,7 @@ public class DiamondSelectVM : BaseViewModel else if ("1".Equals(runModel)) { //Image模式 + Logger.Info($"当前运行Image模式:{runModel}"); var loadingView = new GradingLoadingVM(param.ToString(), DiamondCode); BaseControlVM vm = new BaseControlVM(loadingView, MultilingualHelper.getString("wait")); vm.WindowTitle = string.IsNullOrWhiteSpace(DiamondCode) ? vm.WindowTitle : $"{vm.WindowTitle} - {DiamondCode}"; @@ -235,7 +238,7 @@ public class DiamondSelectVM : BaseViewModel else { //正常模式 - + Logger.Info($"当前运行正常模式:{runModel}"); var loadingView = new GradingLoadingVM(param.ToString(), DiamondCode); BaseControlVM vm = new BaseControlVM(loadingView, MultilingualHelper.getString("wait")); vm.WindowTitle = string.IsNullOrWhiteSpace(DiamondCode) ? vm.WindowTitle : $"{vm.WindowTitle} - {DiamondCode}"; @@ -665,6 +668,7 @@ public class DiamondSelectVM : BaseViewModel try { //WindowManager.mainViewModel.Content = WindowManager.PreviousVM(); + Logger.Info($"检测完毕,跳转至结果页面:{param.ToSafeAbundantString()}"); BaseControlVM vm = new BaseControlVM(new GradingResultVM(param), MultilingualHelper.getString("DetectionResult")); var ct = param.measurements.VOLUME / 57; vm.WindowTitle = string.IsNullOrWhiteSpace(param.DiamondCode) ? vm.WindowTitle : $"{vm.WindowTitle} - {param.DiamondCode}({ct.ToString("F3")}ct)"; diff --git a/ViewModel/Grading/GradingLoadingVM.cs b/ViewModel/Grading/GradingLoadingVM.cs index a3cf6d9..8777520 100644 --- a/ViewModel/Grading/GradingLoadingVM.cs +++ b/ViewModel/Grading/GradingLoadingVM.cs @@ -154,7 +154,7 @@ public class GradingLoadingVM : BaseViewModel,IDisposable string fileName = jsonImport.FilePath.Text; string[] lines = File.ReadAllLines(fileName); StringBuilder stringBuilder = new StringBuilder(); - + Logger.Info($"Json模式,文件路径:{fileName}"); foreach (var line in lines) { stringBuilder.Append(line); @@ -171,6 +171,7 @@ public class GradingLoadingVM : BaseViewModel,IDisposable Parameter.CrownType = _diamnondType.Split(" ")[1]; Parameter.PavType = _diamnondType.Split(" ")[2]; Parameter.error_msg = _diamnondType; + await CompleteProgressQuicklyAsync(); return 0; } @@ -219,6 +220,7 @@ public class GradingLoadingVM : BaseViewModel,IDisposable { mnFiles.Add(name.Replace("%d", i.ToString())); } + Logger.Info($"Image模式,图片路径:{strImageModeImagePath}"); LoadImages(mnFiles); } else @@ -280,9 +282,10 @@ public class GradingLoadingVM : BaseViewModel,IDisposable new JProperty("algorithm_log_path", algorithm_log_path), new JProperty("algo_config", JObject.Parse(algo_config)) ); + Logger.Info($"算法启动,输入参数:{jsonData.ToString()}"); _scanner = new Scanner(diamond); var detectTask = _scanner.DetectAsyncByJsonStr(jsonData.ToString()); - + Logger.Info($"开始等待算法结果"); await detectTask; if (detectTask.Status == TaskStatus.RanToCompletion) { @@ -310,6 +313,8 @@ public class GradingLoadingVM : BaseViewModel,IDisposable private async Task ReslutGen(Task detectTask) { bool hasErr = false; + Logger.Info($"算法运行完毕:{detectTask.Status}"); + Logger.Info($"算法运行结果:{detectTask.Result.ToSafeAbundantString()}"); try { CompleteProgressQuicklyAsync(); @@ -357,6 +362,7 @@ public class GradingLoadingVM : BaseViewModel,IDisposable try { + Logger.Info($"算法结果Json单独保存至log/result"); string parameterJson = JsonConvert.SerializeObject(parameter); parameterJson = JToken.Parse(parameterJson).ToString(); string outputPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "logs", "result"); @@ -368,6 +374,7 @@ public class GradingLoadingVM : BaseViewModel,IDisposable { stream.Write(parameterJson); } + Logger.Info($"算法结果Json单独保存至log/result 完毕!"); } catch (Exception ex) {