diff --git a/Language/zh_CN.xaml b/Language/zh_CN.xaml index 19ce6a7..a974480 100644 --- a/Language/zh_CN.xaml +++ b/Language/zh_CN.xaml @@ -37,6 +37,7 @@ 平均 圆度 深度 + 偏差值 最小值 最大值 SYM等级 diff --git a/Model/Entity/ApiEntity/AlgorithmResultEntity.cs b/Model/Entity/ApiEntity/AlgorithmResultEntity.cs index 2c521cf..b75b266 100644 --- a/Model/Entity/ApiEntity/AlgorithmResultEntity.cs +++ b/Model/Entity/ApiEntity/AlgorithmResultEntity.cs @@ -1,4 +1,5 @@ -using System.Collections.Generic; +using HandyControl.Expression.Shapes; +using System.Collections.Generic; namespace SparkClient.Model.Entity.ApiEntity { @@ -77,5 +78,11 @@ namespace SparkClient.Model.Entity.ApiEntity { public List facets { get; set; } public Measurements measurements { get; set; } + + public string Standard { get; set; } + public string Shape { get; set; } + public string CrownType { get; set; } + public string PavType { get; set; } + public string DiamondCode { get; set; } } } diff --git a/Model/Helper/DataBaseHelper.cs b/Model/Helper/DataBaseHelper.cs index db31753..4f9eefa 100644 --- a/Model/Helper/DataBaseHelper.cs +++ b/Model/Helper/DataBaseHelper.cs @@ -1,5 +1,6 @@ using System.Data; using System.IO; +using System.Reflection; using log4net; using log4net.Repository.Hierarchy; using Microsoft.Data.Sqlite; @@ -149,4 +150,59 @@ public class DataBaseHelper } return null; } + + public static List ExecuteQuery(String sql, SqliteParameter[] sqlParameters = null) where T : new() + { + List table = new List(); ; + try + { + SqliteCommand cmd = new SqliteCommand(); + cmd.Connection = connection; + cmd.CommandText = sql; + if (sqliteTransaction != null) + { + cmd.Transaction = sqliteTransaction; + } + if (sqlParameters != null) + { + cmd.Parameters.AddRange(sqlParameters); + } + SqliteDataReader reader = cmd.ExecuteReader(); + // 获取实体类的属性信息 + PropertyInfo[] properties = typeof(T).GetProperties(); + while (reader.Read()) + { + T item = new T(); + + for (int i = 0; i < reader.FieldCount; i++) + { + // 获取列名 + string columnName = reader.GetName(i); + + // 查找与列名匹配的属性(不区分大小写) + PropertyInfo property = properties.FirstOrDefault(p => p.Name.Equals(columnName, StringComparison.OrdinalIgnoreCase)); + + if (property != null && reader[i] != DBNull.Value) + { + // 使用反射将列值赋给属性 + // 这里需要处理不同类型的列值,这里只处理了基本类型 + if (property.PropertyType == typeof(int?) || property.PropertyType == typeof(int)) + property.SetValue(item, reader.GetInt32(i)); + else if (property.PropertyType == typeof(string)) + property.SetValue(item, reader.GetString(i)); + else if (property.PropertyType == typeof(decimal?) || property.PropertyType == typeof(decimal)) + property.SetValue(item, reader.GetDecimal(i)); + } + } + table.Add(item); + } + return table; + } + catch (Exception ex) + { + Logger.Error($"全局异常捕获:{ex.Message}", ex); + System.Windows.MessageBox.Show($"应用程序出现错误:{ex.Message}"); + } + return null; + } } \ No newline at end of file diff --git a/SparkDB.db b/SparkDB.db index 88e7081..2ed827c 100644 Binary files a/SparkDB.db and b/SparkDB.db differ diff --git a/ViewModel/Configuration/LevelConfigVM.cs b/ViewModel/Configuration/LevelConfigVM.cs index c2cd9e8..8dde5ab 100644 --- a/ViewModel/Configuration/LevelConfigVM.cs +++ b/ViewModel/Configuration/LevelConfigVM.cs @@ -3,6 +3,7 @@ using Newtonsoft.Json; using Newtonsoft.Json.Converters; using SharpDX; using SparkClient.Model.Helper; +using System; using System.Data; using System.Drawing; using System.IO; @@ -120,14 +121,20 @@ public class LevelConfigVM : BaseViewModel if (columns.Count == 0) { columns.Add(new DataColumn(columnInfo["GRADE_EN_NAME"].ToString())); - this.dataGrid.Columns.Add(new DataGridTextColumn() { Header = columnInfo[GRADE_NAME].ToString(), Binding = new Binding(columnInfo["GRADE_EN_NAME"].ToString()),ElementStyle = cellStyle }); + columns.Add(new DataColumn(columnInfo["GRADE_EN_NAME"].ToString()+"_"+1)); + //this.dataGrid.Columns.Add(new DataGridTextColumn() { Header = columnInfo[GRADE_NAME].ToString(), Binding = new Binding(columnInfo["GRADE_EN_NAME"].ToString()),ElementStyle = cellStyle }); + this.dataGrid.Columns.Add(GetDataGridColumn(columnInfo[GRADE_NAME].ToString()??"", columnInfo["GRADE_EN_NAME"].ToString() ?? "")); } else { + //this.dataGrid.Columns.Insert(0, new DataGridTextColumn() { Header = columnInfo[GRADE_NAME].ToString(), Binding = new Binding(columnInfo["GRADE_EN_NAME"].ToString() + "_MIN"), ElementStyle = cellStyle }); + //this.dataGrid.Columns.Add(new DataGridTextColumn() { Header = columnInfo[GRADE_NAME].ToString(), Binding = new Binding(columnInfo["GRADE_EN_NAME"].ToString() + "_MAX"), ElementStyle = cellStyle }); + this.dataGrid.Columns.Insert(0, GetDataGridColumn(columnInfo[GRADE_NAME].ToString() ?? "", (columnInfo["GRADE_EN_NAME"].ToString() ?? "") + "_MIN")); + this.dataGrid.Columns.Add(GetDataGridColumn(columnInfo[GRADE_NAME].ToString() ?? "", (columnInfo["GRADE_EN_NAME"].ToString() ?? "") + "_MAX")); columns.Insert(0, new DataColumn(columnInfo["GRADE_EN_NAME"].ToString() + "_MIN")); - this.dataGrid.Columns.Insert(0, new DataGridTextColumn() { Header = columnInfo[GRADE_NAME].ToString(), Binding = new Binding(columnInfo["GRADE_EN_NAME"].ToString() + "_MIN"), ElementStyle = cellStyle }); + columns.Insert(0, new DataColumn(columnInfo["GRADE_EN_NAME"].ToString() + "_MIN" + "_" + 1)); columns.Add(new DataColumn(columnInfo["GRADE_EN_NAME"].ToString() + "_MAX")); - this.dataGrid.Columns.Add(new DataGridTextColumn() { Header = columnInfo[GRADE_NAME].ToString(), Binding = new Binding(columnInfo["GRADE_EN_NAME"].ToString() + "_MAX"), ElementStyle = cellStyle }); + columns.Add(new DataColumn(columnInfo["GRADE_EN_NAME"].ToString() + "_MAX" + "_" + 1)); } } columns.Insert(0, new DataColumn("title")); @@ -142,47 +149,98 @@ public class LevelConfigVM : BaseViewModel List rowInfo = new List(); foreach (DataRow columnInfo in gradeList.Rows) { + // 每一行单元格内数据 + var row = standard.Where(s => s["GRADE_ID"].ToString() == columnInfo["GRADE_ID"].ToString()).FirstOrDefault(); + string value = ""; if (rowInfo.Count == 0) { - // 每一行单元格内数据 - var row = standard.Where(s => s["GRADE_ID"].ToString() == columnInfo["GRADE_ID"].ToString()).FirstOrDefault(); - rowInfo.Add( - getFix(row, "MIN_PREFIX") + + value = + getFix(row, "MIN_PREFIX") + row["STANDARD_MIN"].ToString() + row["UNIT"].ToString() + "-" + row["STANDARD_MAX"].ToString() + row["UNIT"].ToString() + getFix(row, "MIN_SUFFIX") - ); + ; + var arr = value.Split("\r\n",2); + rowInfo.Add(arr[0]); + if (arr.Length > 1) { + rowInfo.Add(arr[1]); + } + else + { + rowInfo.Add(""); + } } else { // 每一行单元格内数据 - var row = standard.Where(s => s["GRADE_ID"].ToString() == columnInfo["GRADE_ID"].ToString()).FirstOrDefault(); if (row["STANDARD_MIN"] == null || row["STANDARD_MIN"].ToString() == "") { - rowInfo.Insert(0, getFix(row, "MIN_PREFIX") - + row["MIN_NULL_REPALCE"].ToString() - + getFix(row, "MIN_SUFFIX")); + value = getFix(row, "MIN_PREFIX") + + row["MIN_NULL_REPALCE"].ToString() + + getFix(row, "MIN_SUFFIX"); + var arr = value.Split("\r\n", 2); + rowInfo.Insert(0, arr[0]); + if (arr.Length > 1) + { + rowInfo.Insert(0, arr[1]); + } + else + { + rowInfo.Insert(0, ""); + } + } else { - rowInfo.Insert(0, getFix(row, "MIN_PREFIX") - + row["STANDARD_MIN"].ToString() - + row["UNIT"].ToString() - + getFix(row, "MIN_SUFFIX")); + value = getFix(row, "MIN_PREFIX") + + row["STANDARD_MIN"].ToString() + + row["UNIT"].ToString() + + getFix(row, "MIN_SUFFIX"); + var arr = value.Split("\r\n", 2); + rowInfo.Insert(0, arr[0]); + if (arr.Length > 1) + { + rowInfo.Insert(0, arr[1]); + } + else + { + rowInfo.Insert(0, ""); + } } if (row["STANDARD_MAX"] == null || row["STANDARD_MAX"].ToString() == "") { - rowInfo.Add(getFix(row, "MAX_PREFIX") + + value = getFix(row, "MAX_PREFIX") + row["MAX_NULL_REPALCE"].ToString() - + getFix(row, "MAX_SUFFIX")); + + getFix(row, "MAX_SUFFIX"); + var arr = value.Split("\r\n", 2); + rowInfo.Add(arr[0]); + if (arr.Length > 1) + { + rowInfo.Add(arr[1]); + } + else + { + rowInfo.Add(""); + } } else { - rowInfo.Add(getFix(row, "MAX_PREFIX") + + value = getFix(row, "MAX_PREFIX") + row["STANDARD_MAX"].ToString() + row["UNIT"].ToString() - + getFix(row, "MAX_SUFFIX")); + + getFix(row, "MAX_SUFFIX"); + var arr = value.Split("\r\n", 2); + rowInfo.Add(arr[0]); + if (arr.Length > 1) + { + rowInfo.Add(arr[1]); + } + else + { + rowInfo.Add(""); + } } } + } rowInfo.Insert(0, standard.Key); var showRow = StandardList.NewRow(); @@ -192,6 +250,42 @@ public class LevelConfigVM : BaseViewModel } } } + private DataGridColumn GetDataGridColumn(string Header,string Binding,int lineCount = 2) + { + //Style cellStyle = new Style(typeof(TextBlock)); + //Setter setSellStyle = new Setter(TextBlock.HorizontalAlignmentProperty, HorizontalAlignment.Center); + //cellStyle.Setters.Add(setSellStyle); + //Setter setSellStyle1 = new Setter(TextBlock.VerticalAlignmentProperty, VerticalAlignment.Center); + //cellStyle.Setters.Add(setSellStyle1); + + DataGridTemplateColumn column = new DataGridTemplateColumn() { Header = Header}; + //column.CellTemplate + FrameworkElementFactory stackPanelFactory = new FrameworkElementFactory(typeof(StackPanel)); + stackPanelFactory.SetValue(StackPanel.OrientationProperty, Orientation.Vertical); + stackPanelFactory.SetValue(StackPanel.VerticalAlignmentProperty, VerticalAlignment.Center); + for (int i = 0; i < lineCount; i++) { + FrameworkElementFactory TextBlockFactory = new FrameworkElementFactory(typeof(TextBlock)); + if (i == 0) { + TextBlockFactory.SetBinding(TextBlock.TextProperty, new Binding(Binding)); + //TextBlockFactory.SetValue(TextBlock.TextProperty, "123456"); + + } + else + { + TextBlockFactory.SetBinding(TextBlock.TextProperty, new Binding(Binding + "_" + i)); + //TextBlockFactory.SetValue(TextBlock.TextProperty, "1"); + TextBlockFactory.SetValue(TextBlock.VisibilityProperty, Visibility.Visible); + } + TextBlockFactory.SetValue(TextBlock.HorizontalAlignmentProperty, HorizontalAlignment.Center); + TextBlockFactory.SetValue(TextBlock.VerticalAlignmentProperty, VerticalAlignment.Center); + stackPanelFactory.AppendChild(TextBlockFactory); + } + var template = new DataTemplate(typeof(DataRow)); + template.VisualTree = stackPanelFactory; + column.CellTemplate = template; + return column; + } + private string getFix(DataRow row,string fix){ string result = ""; result = row[fix].ToString().Replace("\\n","\r\n"); diff --git a/ViewModel/Grading/DiamondSelectVM.cs b/ViewModel/Grading/DiamondSelectVM.cs index 83e9c67..b98dd1c 100644 --- a/ViewModel/Grading/DiamondSelectVM.cs +++ b/ViewModel/Grading/DiamondSelectVM.cs @@ -1,8 +1,12 @@ +using Newtonsoft.Json; +using SparkClient.Model.Entity.ApiEntity; using SparkClient.Model.Helper; using SparkClient.ViewModel.BaseWindow; using SparkClient.Views.Dialog; using System; +using System.Diagnostics.Metrics; using System.DirectoryServices.ActiveDirectory; +using System.Reflection.Metadata; using System.Windows; using System.Windows.Input; using System.Windows.Media.Imaging; @@ -87,7 +91,7 @@ public class DiamondSelectVM : BaseViewModel }; List tempButtons2 = new List(); var bitmap = new BitmapImage(new Uri("pack://application:,,,/Resource/Images/round_P8-P8.png", UriKind.RelativeOrAbsolute)); - ButtonViewModel button = new ButtonViewModel() { Text = "P8-P8", ImageSource = bitmap, Type = "round", Command = StartGradingCommand }; + ButtonViewModel button = new ButtonViewModel() { Text = "P8-P8", ImageSource = bitmap, Type = "round P8 P8", Command = StartGradingCommand }; tempButtons2.Add(button); Buttons2 = tempButtons2; } @@ -117,7 +121,18 @@ public class DiamondSelectVM : BaseViewModel }); } - GradingResult(null); + AlgorithmResultEntity parameter = new AlgorithmResultEntity(); + parameter = DoSoc(); + parameter.Standard = "IGI 2024"; + string value = param.ToString()??""; + if (value!= null && value.Split(" ").Length==3) + { + parameter.Shape = value.Split(" ")[0]; + parameter.CrownType = value.Split(" ")[1]; + parameter.PavType = value.Split(" ")[2]; + } + parameter.DiamondCode = DiamondCode; + GradingResult(parameter); }); await Task.Delay(5); loading.Close(); @@ -128,14 +143,23 @@ public class DiamondSelectVM : BaseViewModel /// 跳转至检测结果 /// /// - public void GradingResult(object param) + public void GradingResult(AlgorithmResultEntity param) { + WindowManager.mainViewModel.Content = WindowManager.PreviousVM(); - BaseControlVM vm = new BaseControlVM(new GradingResultVM(null), MultilingualHelper.getString("DetectionResult")); + BaseControlVM vm = new BaseControlVM(new GradingResultVM(param), MultilingualHelper.getString("DetectionResult")); vm.ShowFunctionButton = System.Windows.Visibility.Hidden; WindowManager.mainViewModel.Content = vm; WindowManager.openContent.Add(vm); } + + private AlgorithmResultEntity DoSoc() + { + AlgorithmResultEntity param = new AlgorithmResultEntity(); + string json = $"{{\"status\": \"ok\",\r\n \"facets\": [\r\n {{\r\n \"coords\": [\r\n {{\r\n \"x\": 0.03402838855981827,\r\n \"y\": -0.11212713271379471,\r\n \"z\": 5.701290607452393\r\n }},\r\n {{\r\n \"x\": 0.46919262409210205,\r\n \"y\": 0.058160409331321716,\r\n \"z\": 5.289202690124512\r\n }},\r\n {{\r\n \"x\": 0.1256149709224701,\r\n \"y\": 0.3005124032497406,\r\n \"z\": 5.330680847167969\r\n }}\r\n ],\r\n \"facet_id\": \"21_0\",\r\n \"facet_type\": 21\r\n }},\r\n {{\r\n \"coords\": [\r\n {{\r\n \"x\": 2.9093382358551025,\r\n \"y\": 3.4028751850128174,\r\n \"z\": 1.724348783493042\r\n }},\r\n {{\r\n \"x\": 0.46919262409210205,\r\n \"y\": 0.058160409331321716,\r\n \"z\": 5.289202690124512\r\n }},\r\n {{\r\n \"x\": 0.1256149709224701,\r\n \"y\": 0.3005124032497406,\r\n \"z\": 5.330680847167969\r\n }}\r\n ],\r\n \"facet_id\": \"21_1\",\r\n \"facet_type\": 21\r\n }}\r\n ],\r\n \"measurements\": {{\r\n \"DIAMETER\": 6.43,\r\n \"DIAMETER_DEV\": 1.2,\r\n \"M1\": 6.409999847412109,\r\n \"M2\": 6.46999979019165,\r\n \"M3\": 3.9700000286102295,\r\n \"TABLE\": 58.0,\r\n \"TABLE_MIN\": 57.5,\r\n \"TABLE_MAX\": 58.6,\r\n \"CROWN_HEIGHT\": 11.5,\r\n \"CROWN_H_DEV\": 1.4,\r\n \"CROWN_H_MIN\": 10.7,\r\n \"CROWN_H_MAX\": 12.1,\r\n \"CROWN_ANGLE\": 30.5,\r\n \"CROWN_ANGLE_DEV\": 0.9,\r\n \"CROWN_ANGLE_MIN\": 30.2,\r\n \"CROWN_ANGLE_MAX\": 31.1,\r\n \"PAV_DEPTH\": 35.0,\r\n \"PAV_DEPTH_DEV\": 0.8,\r\n \"PAV_DEPTH_MIN\": 34.5,\r\n \"PAV_DEPTH_MAX\": 35.3,\r\n \"PAV_ANGLE\": 35.1,\r\n \"PAV_ANGLE_DEV\": 0.8,\r\n \"PAV_ANGLE_MIN\": 34.7,\r\n \"PAV_ANGLE_MAX\": 35.5,\r\n \"GIRDLE_BEZEL\": 7.1,\r\n \"GIRDLE_BEZEL_DEV\": 1.8,\r\n \"GIRDLE_BEZEL_MIN\": 6.8,\r\n \"GIRDLE_BEZEL_MAX\": 7.5,\r\n \"GIRDLE_BONE\": 7.8,\r\n \"GIRDLE_BONE_MIN\": 7.3,\r\n \"GIRDLE_BONE_MAX\": 8.3,\r\n \"GIRDLE\": 6.3,\r\n \"GIRDLE_DEV\": 3.3,\r\n \"GIRDLE_MIN\": 4.2,\r\n \"GIRDLE_MAX\": 7.5,\r\n \"TOTAL_DEPTH\": 53.5,\r\n \"CULET\": 1.8,\r\n \"LW_RATIO\": 1.0,\r\n \"TOC\": 1.4,\r\n \"COC\": 0.5,\r\n \"TA\": 3.81,\r\n \"LGF\": 75,\r\n \"STAR\": 65,\r\n \"STAR_MIN\": 61.1,\r\n \"STAR_MAX\": 65.4,\r\n \"LOWER_HALVES_RATIO\": 75,\r\n \"LOWER_HALVES_RATIO_MIN\": 73.3,\r\n \"LOWER_HALVES_RATIO_MAX\": 78.1,\r\n \"TWIST\": 1.3,\r\n \"TWIST_DEV\": 2.4,\r\n \"TWIST_MIN\": -0.2,\r\n \"TWIST_MAX\": -2.4,\r\n \"CULET_TO_TABLE\": 1.4\r\n }}\r\n}}\r\n"; + param = JsonConvert.DeserializeObject(json); + return param; + } } public class ButtonInfo { diff --git a/ViewModel/Grading/GradingResultVM.cs b/ViewModel/Grading/GradingResultVM.cs index 7c4e4a0..9fda292 100644 --- a/ViewModel/Grading/GradingResultVM.cs +++ b/ViewModel/Grading/GradingResultVM.cs @@ -1,18 +1,24 @@ using System.Data; +using System.IO; +using System.Reflection; using System.Windows.Input; +using System.Windows.Shapes; using HandyControl.Controls; +using log4net.Appender; +using SparkClient.Model.Entity.ApiEntity; +using SparkClient.Model.Helper; using static System.Windows.Forms.VisualStyles.VisualStyleElement.ToolTip; namespace SparkClient.ViewModel.Grading; public class GradingResultVM : BaseViewModel { - - private DataTable _dtResults; + private string DiamondCode { get; set; } + private List _dtResults; - private DataTable _info; private DataTable _dsList; private DataTable _gradeList; + private string _standard; private string _shape; private string _crownType; @@ -21,8 +27,7 @@ public class GradingResultVM : BaseViewModel private string _cutLevelTotal; private string _symLevelTotal; public ICommand ChangeNormCommand { get; } - public DataTable DtResults{ get { return _dtResults; } set { _dtResults = value; OnPropertyChanged(nameof(DtResults)); } } - public DataTable Info { get { return _info; } set { _info = value; OnPropertyChanged(nameof(Info)); } } + public List DtResults { get { return _dtResults; } set { _dtResults = value; OnPropertyChanged(nameof(DtResults)); } } public string Standard { get { return _standard; } set { _standard = value; OnPropertyChanged(nameof(Standard)); } } public string Shape { get { return _shape; } set { _shape = value; OnPropertyChanged(nameof(Shape)); } } public string CrownType { get { return _crownType; } set { _crownType = value; OnPropertyChanged(nameof(CrownType)); } } @@ -32,6 +37,11 @@ public class GradingResultVM : BaseViewModel public string SymLevelTotal { get { return _symLevelTotal; } set { _symLevelTotal = value; OnPropertyChanged(nameof(SymLevelTotal)); } } public DataTable DSList { get { return _dsList; } set { _dsList = value; OnPropertyChanged(nameof(DSList)); } } public DataTable GradeList { get { return _gradeList; } set { _gradeList = value; OnPropertyChanged(nameof(GradeList)); } } + + private readonly static string digitsFormat = "f1"; + + private int totalCutGrade = 0; + private int totalSymGrade = 0; /// /// 构造 /// @@ -39,10 +49,405 @@ public class GradingResultVM : BaseViewModel public GradingResultVM(object result) { ChangeNormCommand = new RelayCommand(ChangeNorm); - _dtResults = new DataTable(); + if (result != null) + { + InitView(result as AlgorithmResultEntity); + } InitCombobox(); } + private void InitView(AlgorithmResultEntity result) + { + totalCutGrade = 0; + totalSymGrade = 0; + Standard = result.Standard; + Shape = result.Shape; + CrownType = result.CrownType; + PavType = result.PavType; + DiamondCode = result.DiamondCode; + CalWight(result); + DtResults = new List(); + var testItemList = GetTestItemList(); + Type type = this.GetType(); + foreach (var testItem in testItemList) + { + string methodName = "get" + testItem; + MethodInfo? methodInfo = type.GetMethod(methodName, BindingFlags.Instance | BindingFlags.NonPublic); + if (methodInfo != null) + { + object[] parameters = new object[] { result }; + DataInfo? dataInfo = methodInfo.Invoke(this, parameters) as DataInfo; + if (dataInfo != null) + { + DtResults.Add(dataInfo); + } + } + } + CutLevelTotal = GetGradeName(totalCutGrade); + } + /// + /// 参数列表测试内容获取 + /// + /// + private List GetTestItemList() + { + // DB 没关联 + List list = new List(); + list.Add("DIAMETER"); + list.Add("TOTAL_DEPTH"); + list.Add("TABLE"); + list.Add("CROWN_ANGLE"); + list.Add("CROWN_HEIGHT"); + list.Add("GIRDLE_BEZEL"); + list.Add("GIRDLE_BONE"); + list.Add("GIRDLE"); + list.Add("PAV_ANGLE"); + list.Add("PAV_DEPTH"); + list.Add("STAR"); + list.Add("LOWER_HALVES_RATIO"); + list.Add("CULET"); + list.Add("TOC"); + list.Add("COC"); + list.Add("TWIST"); + list.Add("CULET_TO_TABLE"); + return list; + } + #region 定级计算 + private List GetCalGradeInfos(string item) + { + // TODO DB要改 + string sql = $"Select GRADE_ID as gradeOrder,STANDARD_MIN Min, STANDARD_MAX Max,IS_MAX_EXIST as isMaxExist,IS_MIN_EXIST as isMinExist from STANDARD where STANDARD_ID = '{item}'"; + List calGrades = DataBaseHelper.ExecuteQuery(sql); + return calGrades; + } + private int calGrade(string item ,double value) + { + int order = 1; + decimal cValue = Convert.ToDecimal(value); + List calGrades = GetCalGradeInfos(item); + foreach (CalGradeInfo gradeInfo in calGrades) + { + bool isThisGrade = true; + + if (gradeInfo.Max!= null) { + if ( gradeInfo.isMaxExist == 1 && cValue.CompareTo(gradeInfo.Max)<=0) + { + }else if(gradeInfo.isMaxExist == 0 && cValue.CompareTo(gradeInfo.Max) < 0) + { + } + else + { + isThisGrade = false; + } + } + if (gradeInfo.Min != null) + { + if (gradeInfo.isMinExist == 1 && cValue.CompareTo(gradeInfo.Min) >= 0) + { + } + else if (gradeInfo.isMinExist == 0 && cValue.CompareTo(gradeInfo.Min) > 0) + { + } + else + { + isThisGrade = false; + } + } + if (isThisGrade) + { + break; + } + else + { + order++; + } + } + totalCutGrade = Math.Max(order, totalCutGrade); + return order; + } + private string calGrade_TOTAL_DEPTH(double avg) + { + string result = ""; + int order = calGrade("TOTAL_DEPTH", avg); + result = GetGradeName(order); + return result; + } + private string calGrade_TABLE(double min,double max) + { + string result = ""; + int order1 = calGrade("TABLE", min); + int order2 = calGrade("TABLE", max); + int order = Math.Max(order1, order2); + result = GetGradeName(order); + return result; + } + private string calGrade_CROWN_ANGLE(double min, double max) + { + string result = ""; + int order1 = calGrade("CROWN_ANGLE", min); + int order2 = calGrade("CROWN_ANGLE", max); + int order = Math.Max(order1, order2); + result = GetGradeName(order); + return result; + } + private string calGrade_CROWN_HEIGHT(double min, double max) + { + string result = ""; + int order1 = calGrade("CROWN_HEIGHT", min); + int order2 = calGrade("CROWN_HEIGHT", max); + int order = Math.Max(order1, order2); + result = GetGradeName(order); + return result; + } + private string calGrade_GIRDLE(double min, double max) + { + string result = ""; + int order1 = calGrade("GIRDLE", min); + int order2 = calGrade("GIRDLE", max); + int order = Math.Max(order1, order2); + result = GetGradeName(order); + return result; + } + private string calGrade_PAV_ANGLE(double min, double max) + { + string result = ""; + int order1 = calGrade("PAV_ANGLE", min); + int order2 = calGrade("PAV_ANGLE", max); + int order = Math.Max(order1, order2); + result = GetGradeName(order); + return result; + } + private string calGrade_PAV_DEPTH(double min, double max) + { + string result = ""; + int order1 = calGrade("PAV_DEPTH", min); + int order2 = calGrade("PAV_DEPTH", max); + int order = Math.Max(order1, order2); + result = GetGradeName(order); + return result; + } + #endregion + #region 参数列表行编辑 + private DataInfo getDIAMETER(AlgorithmResultEntity result) + { + DataInfo info = new DataInfo(); + info.TestItemId = "DIAMETER"; + info.TestItemName = GetName("DIAMETER"); + info.Avg = result.measurements.DIAMETER.ToString(digitsFormat); + info.Dev = result.measurements.DIAMETER_DEV.ToString(digitsFormat); + info.Min = result.measurements.M1.ToString(digitsFormat); + info.Max = result.measurements.M2.ToString(digitsFormat); + return info; + } + private DataInfo getTOTAL_DEPTH(AlgorithmResultEntity result) + { + DataInfo info = new DataInfo(); + info.TestItemId = "TOTAL_DEPTH"; + info.TestItemName = GetName("TOTAL_DEPTH"); + info.Avg = result.measurements.TOTAL_DEPTH.ToString(digitsFormat); + info.CutLevel = calGrade_TOTAL_DEPTH(result.measurements.TOTAL_DEPTH); + return info; + } + + private DataInfo getTABLE(AlgorithmResultEntity result) + { + DataInfo info = new DataInfo(); + info.TestItemId = "TABLE"; + info.TestItemName = GetName("TABLE"); + info.Avg = result.measurements.TABLE.ToString(digitsFormat); + info.Min = result.measurements.TABLE_MIN.ToString(digitsFormat); + info.Max = result.measurements.TABLE_MAX.ToString(digitsFormat); + info.CutLevel = calGrade_TABLE(result.measurements.TABLE_MIN, result.measurements.TABLE_MAX); + return info; + } + + private DataInfo getCROWN_ANGLE(AlgorithmResultEntity result) + { + DataInfo info = new DataInfo(); + info.TestItemId = "CROWN_ANGLE"; + info.TestItemName = GetName("CROWN_ANGLE"); + info.Avg = result.measurements.CROWN_ANGLE.ToString(digitsFormat); + info.Dev = result.measurements.CROWN_ANGLE_DEV.ToString(digitsFormat); + info.Min = result.measurements.CROWN_ANGLE_MIN.ToString(digitsFormat); + info.Max = result.measurements.CROWN_ANGLE_MAX.ToString(digitsFormat); + info.CutLevel = calGrade_CROWN_ANGLE(result.measurements.CROWN_ANGLE_MIN, result.measurements.CROWN_ANGLE_MAX); + return info; + } + + private DataInfo getCROWN_HEIGHT(AlgorithmResultEntity result) + { + DataInfo info = new DataInfo(); + info.TestItemId = "CROWN_HEIGHT"; + info.TestItemName = GetName("CROWN_HEIGHT"); + info.Avg = result.measurements.CROWN_HEIGHT.ToString(digitsFormat); + info.Dev = result.measurements.CROWN_H_DEV.ToString(digitsFormat); + info.Min = result.measurements.CROWN_H_MIN.ToString(digitsFormat); + info.Max = result.measurements.CROWN_H_MAX.ToString(digitsFormat); + info.CutLevel = calGrade_CROWN_HEIGHT(result.measurements.CROWN_H_MIN, result.measurements.CROWN_H_MAX); + return info; + } + + private DataInfo getGIRDLE_BEZEL(AlgorithmResultEntity result) + { + DataInfo info = new DataInfo(); + info.TestItemId = "GIRDLE_BEZEL"; + info.TestItemName = GetName("GIRDLE_BEZEL"); + info.Avg = result.measurements.GIRDLE_BEZEL.ToString(digitsFormat); + info.Dev = result.measurements.GIRDLE_BEZEL_DEV.ToString(digitsFormat); + info.Min = result.measurements.GIRDLE_BEZEL_MIN.ToString(digitsFormat); + info.Max = result.measurements.GIRDLE_BEZEL_MAX.ToString(digitsFormat); + return info; + } + + private DataInfo getGIRDLE_BONE(AlgorithmResultEntity result) + { + DataInfo info = new DataInfo(); + info.TestItemId = "GIRDLE_BONE"; + info.TestItemName = GetName("GIRDLE_BONE"); + info.Avg = result.measurements.GIRDLE_BONE.ToString(digitsFormat); + info.Min = result.measurements.GIRDLE_BONE_MIN.ToString(digitsFormat); + info.Max = result.measurements.GIRDLE_BONE_MAX.ToString(digitsFormat); + return info; + } + + private DataInfo getGIRDLE(AlgorithmResultEntity result) + { + DataInfo info = new DataInfo(); + info.TestItemId = "GIRDLE"; + info.TestItemName = GetName("GIRDLE"); + info.Avg = result.measurements.GIRDLE.ToString(digitsFormat); + info.Dev = result.measurements.GIRDLE_DEV.ToString(digitsFormat); + info.Min = result.measurements.GIRDLE_MIN.ToString(digitsFormat); + info.Max = result.measurements.GIRDLE_MAX.ToString(digitsFormat); + info.CutLevel = calGrade_GIRDLE(result.measurements.GIRDLE_MIN, result.measurements.GIRDLE_MAX); + return info; + } + + private DataInfo getPAV_ANGLE(AlgorithmResultEntity result) + { + DataInfo info = new DataInfo(); + info.TestItemId = "PAV_ANGLE"; + info.TestItemName = GetName("PAV_ANGLE"); + info.Avg = result.measurements.PAV_ANGLE.ToString(digitsFormat); + info.Dev = result.measurements.PAV_ANGLE_DEV.ToString(digitsFormat); + info.Min = result.measurements.PAV_ANGLE_MIN.ToString(digitsFormat); + info.Max = result.measurements.PAV_ANGLE_MAX.ToString(digitsFormat); + info.CutLevel = calGrade_PAV_ANGLE(result.measurements.PAV_ANGLE_MIN, result.measurements.PAV_ANGLE_MAX); + return info; + } + + private DataInfo getPAV_DEPTH(AlgorithmResultEntity result) + { + DataInfo info = new DataInfo(); + info.TestItemId = "PAV_DEPTH"; + info.TestItemName = GetName("PAV_DEPTH"); + info.Avg = result.measurements.PAV_DEPTH.ToString(digitsFormat); + info.Dev = result.measurements.PAV_DEPTH_DEV.ToString(digitsFormat); + info.Min = result.measurements.PAV_DEPTH_MIN.ToString(digitsFormat); + info.Max = result.measurements.PAV_DEPTH_MAX.ToString(digitsFormat); + info.CutLevel = calGrade_PAV_DEPTH(result.measurements.PAV_DEPTH_MIN, result.measurements.PAV_DEPTH_MAX); + return info; + } + + private DataInfo getSTAR(AlgorithmResultEntity result) + { + DataInfo info = new DataInfo(); + info.TestItemId = "STAR"; + info.TestItemName = GetName("STAR"); + info.Avg = result.measurements.STAR.ToString(digitsFormat); + info.Min = result.measurements.STAR_MIN.ToString(digitsFormat); + info.Max = result.measurements.STAR_MAX.ToString(digitsFormat); + return info; + } + + private DataInfo getLOWER_HALVES_RATIO(AlgorithmResultEntity result) + { + DataInfo info = new DataInfo(); + info.TestItemId = "LOWER_HALVES_RATIO"; + info.TestItemName = GetName("LOWER_HALVES_RATIO"); + info.Avg = result.measurements.LOWER_HALVES_RATIO.ToString(digitsFormat); + info.Min = result.measurements.LOWER_HALVES_RATIO_MIN.ToString(digitsFormat); + info.Max = result.measurements.LOWER_HALVES_RATIO_MAX.ToString(digitsFormat); + return info; + } + + private DataInfo getCULET(AlgorithmResultEntity result) + { + DataInfo info = new DataInfo(); + info.TestItemId = "CULET"; + info.TestItemName = GetName("CULET"); + info.Avg = result.measurements.CULET.ToString(digitsFormat); + return info; + } + private DataInfo getTOC(AlgorithmResultEntity result) + { + DataInfo info = new DataInfo(); + info.TestItemId = "TOC"; + info.TestItemName = GetName("TOC"); + info.Avg = result.measurements.TOC.ToString(digitsFormat); + return info; + } + + private DataInfo getCOC(AlgorithmResultEntity result) + { + DataInfo info = new DataInfo(); + info.TestItemId = "COC"; + info.TestItemName = GetName("COC"); + info.Avg = result.measurements.COC.ToString(digitsFormat); + return info; + } + + private DataInfo getTWIST(AlgorithmResultEntity result) + { + DataInfo info = new DataInfo(); + info.TestItemId = "TWIST"; + info.TestItemName = GetName("TWIST"); + info.Avg = result.measurements.TWIST.ToString(digitsFormat); + info.Dev = result.measurements.TWIST_DEV.ToString(digitsFormat); + info.Min = result.measurements.TWIST_MIN.ToString(digitsFormat); + info.Max = result.measurements.TWIST_MAX.ToString(digitsFormat); + return info; + } + + private DataInfo getCULET_TO_TABLE(AlgorithmResultEntity result) + { + DataInfo info = new DataInfo(); + info.TestItemId = "CULET_TO_TABLE"; + info.TestItemName = GetName("CULET_TO_TABLE"); + info.Avg = result.measurements.CULET_TO_TABLE.ToString(digitsFormat); + return info; + } +#endregion + private double CalWight(AlgorithmResultEntity result) + { + var M1 = result.measurements.M1; + var M2 = result.measurements.M2; + var M3 = result.measurements.M3; + var wight = Square((M1+M2)/2)*M3*0.0061; + Wight = wight.ToString("f3"); + return wight; + } + + private double Square(double m) + { + return m*m; + } + private string GetName(string id) + { + // TODO DB没关联 + return id; + } + private string GetGradeName(int order) + { + // TODO DB没关联 + Dictionary dictionary = new(); + dictionary.Add(1,"极好"); + dictionary.Add(2, "很好"); + dictionary.Add(3, "好"); + dictionary.Add(4, "一般"); + dictionary.Add(5, "差"); + return dictionary[order]; + } /// /// 修改检测标准 /// @@ -83,4 +488,35 @@ public class GradingResultVM : BaseViewModel //部分代码(直接操作控件)需要在xaml.cs里边写 //涉及到计算部分,这里做一个中转 #endregion +} +public class CalGradeInfo{ + public int gradeOrder { get; set; } + public decimal? Min { get; set; } + public decimal? Max { get; set; } + public int isMaxExist { get; set; } + public int isMinExist { get; set; } +} +public class DataInfo() +{ + public string? TestItemId { get; set; } + public string? TestItemName { get; set; } + public string? Avg { get; set; } + public string? Dev { get; set; } + public string? Min { get; set; } + public string? Max { get; set; } + public string? CutLevel { get; set; } + public string? SymLevel { get; set; } + public DataTable GradeList { get { + // TODO DB没关联 + DataTable GradeList = new DataTable(); + GradeList.Columns.Add("Key"); + GradeList.Columns.Add("Value"); + GradeList.Rows.Add("极好", "1"); + GradeList.Rows.Add("很好", "2"); + GradeList.Rows.Add("好", "3"); + GradeList.Rows.Add("一般", "4"); + GradeList.Rows.Add("差", "5"); + return GradeList; + } + } } \ No newline at end of file diff --git a/Views/Configuration/LevelConfigPage.xaml b/Views/Configuration/LevelConfigPage.xaml index 4b77e2b..13a645e 100644 --- a/Views/Configuration/LevelConfigPage.xaml +++ b/Views/Configuration/LevelConfigPage.xaml @@ -38,7 +38,7 @@ + ItemsSource="{Binding StandardList}" CanUserResizeColumns="False" CanUserResizeRows="False">