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">