feat:定级计算

master
sunhonglei 7 months ago
parent 0c83730e2e
commit fc90fc6568
  1. 1
      Language/zh_CN.xaml
  2. 9
      Model/Entity/ApiEntity/AlgorithmResultEntity.cs
  3. 56
      Model/Helper/DataBaseHelper.cs
  4. BIN
      SparkDB.db
  5. 130
      ViewModel/Configuration/LevelConfigVM.cs
  6. 32
      ViewModel/Grading/DiamondSelectVM.cs
  7. 448
      ViewModel/Grading/GradingResultVM.cs
  8. 2
      Views/Configuration/LevelConfigPage.xaml
  9. 19
      Views/Grading/GradingResult.xaml
  10. 2
      Views/Grading/GradingResult.xaml.cs

@ -37,6 +37,7 @@
<sys:String x:Key="resAvg">平均</sys:String> <sys:String x:Key="resAvg">平均</sys:String>
<sys:String x:Key="resYuan">圆度</sys:String> <sys:String x:Key="resYuan">圆度</sys:String>
<sys:String x:Key="resShen">深度</sys:String> <sys:String x:Key="resShen">深度</sys:String>
<sys:String x:Key="resDev">偏差值</sys:String>
<sys:String x:Key="resMin">最小值</sys:String> <sys:String x:Key="resMin">最小值</sys:String>
<sys:String x:Key="resMax">最大值</sys:String> <sys:String x:Key="resMax">最大值</sys:String>
<sys:String x:Key="resLevel">SYM等级</sys:String> <sys:String x:Key="resLevel">SYM等级</sys:String>

@ -1,4 +1,5 @@
using System.Collections.Generic; using HandyControl.Expression.Shapes;
using System.Collections.Generic;
namespace SparkClient.Model.Entity.ApiEntity namespace SparkClient.Model.Entity.ApiEntity
{ {
@ -77,5 +78,11 @@ namespace SparkClient.Model.Entity.ApiEntity
{ {
public List<Facet> facets { get; set; } public List<Facet> facets { get; set; }
public Measurements measurements { 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; }
} }
} }

@ -1,5 +1,6 @@
using System.Data; using System.Data;
using System.IO; using System.IO;
using System.Reflection;
using log4net; using log4net;
using log4net.Repository.Hierarchy; using log4net.Repository.Hierarchy;
using Microsoft.Data.Sqlite; using Microsoft.Data.Sqlite;
@ -149,4 +150,59 @@ public class DataBaseHelper
} }
return null; return null;
} }
public static List<T> ExecuteQuery<T>(String sql, SqliteParameter[] sqlParameters = null) where T : new()
{
List<T> table = new List<T>(); ;
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;
}
} }

Binary file not shown.

@ -3,6 +3,7 @@ using Newtonsoft.Json;
using Newtonsoft.Json.Converters; using Newtonsoft.Json.Converters;
using SharpDX; using SharpDX;
using SparkClient.Model.Helper; using SparkClient.Model.Helper;
using System;
using System.Data; using System.Data;
using System.Drawing; using System.Drawing;
using System.IO; using System.IO;
@ -120,14 +121,20 @@ public class LevelConfigVM : BaseViewModel
if (columns.Count == 0) if (columns.Count == 0)
{ {
columns.Add(new DataColumn(columnInfo["GRADE_EN_NAME"].ToString())); 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 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")); 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")); 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")); columns.Insert(0, new DataColumn("title"));
@ -142,47 +149,98 @@ public class LevelConfigVM : BaseViewModel
List<string> rowInfo = new List<string>(); List<string> rowInfo = new List<string>();
foreach (DataRow columnInfo in gradeList.Rows) 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) if (rowInfo.Count == 0)
{ {
// 每一行单元格内数据 value =
var row = standard.Where(s => s["GRADE_ID"].ToString() == columnInfo["GRADE_ID"].ToString()).FirstOrDefault(); getFix(row, "MIN_PREFIX") +
rowInfo.Add(
getFix(row, "MIN_PREFIX") +
row["STANDARD_MIN"].ToString() + row["UNIT"].ToString() + "-" row["STANDARD_MIN"].ToString() + row["UNIT"].ToString() + "-"
+ row["STANDARD_MAX"].ToString() + row["UNIT"].ToString() + row["STANDARD_MAX"].ToString() + row["UNIT"].ToString()
+ getFix(row, "MIN_SUFFIX") + 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 else
{ {
// 每一行单元格内数据 // 每一行单元格内数据
var row = standard.Where(s => s["GRADE_ID"].ToString() == columnInfo["GRADE_ID"].ToString()).FirstOrDefault();
if (row["STANDARD_MIN"] == null || row["STANDARD_MIN"].ToString() == "") if (row["STANDARD_MIN"] == null || row["STANDARD_MIN"].ToString() == "")
{ {
rowInfo.Insert(0, getFix(row, "MIN_PREFIX") value = getFix(row, "MIN_PREFIX")
+ row["MIN_NULL_REPALCE"].ToString() + row["MIN_NULL_REPALCE"].ToString()
+ getFix(row, "MIN_SUFFIX")); + 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 else
{ {
rowInfo.Insert(0, getFix(row, "MIN_PREFIX") value = getFix(row, "MIN_PREFIX")
+ row["STANDARD_MIN"].ToString() + row["STANDARD_MIN"].ToString()
+ row["UNIT"].ToString() + row["UNIT"].ToString()
+ getFix(row, "MIN_SUFFIX")); + 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() == "") 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() 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 else
{ {
rowInfo.Add(getFix(row, "MAX_PREFIX") + value = getFix(row, "MAX_PREFIX") +
row["STANDARD_MAX"].ToString() + row["UNIT"].ToString() 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); rowInfo.Insert(0, standard.Key);
var showRow = StandardList.NewRow(); 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){ private string getFix(DataRow row,string fix){
string result = ""; string result = "";
result = row[fix].ToString().Replace("\\n","\r\n"); result = row[fix].ToString().Replace("\\n","\r\n");

@ -1,8 +1,12 @@
using Newtonsoft.Json;
using SparkClient.Model.Entity.ApiEntity;
using SparkClient.Model.Helper; using SparkClient.Model.Helper;
using SparkClient.ViewModel.BaseWindow; using SparkClient.ViewModel.BaseWindow;
using SparkClient.Views.Dialog; using SparkClient.Views.Dialog;
using System; using System;
using System.Diagnostics.Metrics;
using System.DirectoryServices.ActiveDirectory; using System.DirectoryServices.ActiveDirectory;
using System.Reflection.Metadata;
using System.Windows; using System.Windows;
using System.Windows.Input; using System.Windows.Input;
using System.Windows.Media.Imaging; using System.Windows.Media.Imaging;
@ -87,7 +91,7 @@ public class DiamondSelectVM : BaseViewModel
}; };
List<ButtonViewModel> tempButtons2 = new List<ButtonViewModel>(); List<ButtonViewModel> tempButtons2 = new List<ButtonViewModel>();
var bitmap = new BitmapImage(new Uri("pack://application:,,,/Resource/Images/round_P8-P8.png", UriKind.RelativeOrAbsolute)); 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); tempButtons2.Add(button);
Buttons2 = tempButtons2; 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); await Task.Delay(5);
loading.Close(); loading.Close();
@ -128,14 +143,23 @@ public class DiamondSelectVM : BaseViewModel
/// 跳转至检测结果 /// 跳转至检测结果
/// </summary> /// </summary>
/// <param name="param"></param> /// <param name="param"></param>
public void GradingResult(object param) public void GradingResult(AlgorithmResultEntity param)
{ {
WindowManager.mainViewModel.Content = WindowManager.PreviousVM(); 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; vm.ShowFunctionButton = System.Windows.Visibility.Hidden;
WindowManager.mainViewModel.Content = vm; WindowManager.mainViewModel.Content = vm;
WindowManager.openContent.Add(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<AlgorithmResultEntity>(json);
return param;
}
} }
public class ButtonInfo public class ButtonInfo
{ {

@ -1,18 +1,24 @@
using System.Data; using System.Data;
using System.IO;
using System.Reflection;
using System.Windows.Input; using System.Windows.Input;
using System.Windows.Shapes;
using HandyControl.Controls; using HandyControl.Controls;
using log4net.Appender;
using SparkClient.Model.Entity.ApiEntity;
using SparkClient.Model.Helper;
using static System.Windows.Forms.VisualStyles.VisualStyleElement.ToolTip; using static System.Windows.Forms.VisualStyles.VisualStyleElement.ToolTip;
namespace SparkClient.ViewModel.Grading; namespace SparkClient.ViewModel.Grading;
public class GradingResultVM : BaseViewModel public class GradingResultVM : BaseViewModel
{ {
private string DiamondCode { get; set; }
private List<DataInfo> _dtResults;
private DataTable _dtResults;
private DataTable _info;
private DataTable _dsList; private DataTable _dsList;
private DataTable _gradeList; private DataTable _gradeList;
private string _standard; private string _standard;
private string _shape; private string _shape;
private string _crownType; private string _crownType;
@ -21,8 +27,7 @@ public class GradingResultVM : BaseViewModel
private string _cutLevelTotal; private string _cutLevelTotal;
private string _symLevelTotal; private string _symLevelTotal;
public ICommand ChangeNormCommand { get; } public ICommand ChangeNormCommand { get; }
public DataTable DtResults{ get { return _dtResults; } set { _dtResults = value; OnPropertyChanged(nameof(DtResults)); } } public List<DataInfo> DtResults { get { return _dtResults; } set { _dtResults = value; OnPropertyChanged(nameof(DtResults)); } }
public DataTable Info { get { return _info; } set { _info = value; OnPropertyChanged(nameof(Info)); } }
public string Standard { get { return _standard; } set { _standard = value; OnPropertyChanged(nameof(Standard)); } } 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 Shape { get { return _shape; } set { _shape = value; OnPropertyChanged(nameof(Shape)); } }
public string CrownType { get { return _crownType; } set { _crownType = value; OnPropertyChanged(nameof(CrownType)); } } 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 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 DSList { get { return _dsList; } set { _dsList = value; OnPropertyChanged(nameof(DSList)); } }
public DataTable GradeList { get { return _gradeList; } set { _gradeList = value; OnPropertyChanged(nameof(GradeList)); } } 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;
/// <summary> /// <summary>
/// 构造 /// 构造
/// </summary> /// </summary>
@ -39,10 +49,405 @@ public class GradingResultVM : BaseViewModel
public GradingResultVM(object result) public GradingResultVM(object result)
{ {
ChangeNormCommand = new RelayCommand(ChangeNorm); ChangeNormCommand = new RelayCommand(ChangeNorm);
_dtResults = new DataTable(); if (result != null)
{
InitView(result as AlgorithmResultEntity);
}
InitCombobox(); 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<DataInfo>();
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);
}
/// <summary>
/// 参数列表测试内容获取
/// </summary>
/// <returns></returns>
private List<string> GetTestItemList()
{
// DB 没关联
List<string> list = new List<string>();
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<CalGradeInfo> 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<CalGradeInfo> calGrades = DataBaseHelper.ExecuteQuery<CalGradeInfo>(sql);
return calGrades;
}
private int calGrade(string item ,double value)
{
int order = 1;
decimal cValue = Convert.ToDecimal(value);
List<CalGradeInfo> 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<int, string> dictionary = new();
dictionary.Add(1,"极好");
dictionary.Add(2, "很好");
dictionary.Add(3, "好");
dictionary.Add(4, "一般");
dictionary.Add(5, "差");
return dictionary[order];
}
/// <summary> /// <summary>
/// 修改检测标准 /// 修改检测标准
/// </summary> /// </summary>
@ -84,3 +489,34 @@ public class GradingResultVM : BaseViewModel
//涉及到计算部分,这里做一个中转 //涉及到计算部分,这里做一个中转
#endregion #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;
}
}
}

@ -38,7 +38,7 @@
</Grid> </Grid>
<DataGrid Grid.Row="1" x:Name="DataGrid1" HeadersVisibility="Column" RowHeaderWidth="60" AutoGenerateColumns="False" IsReadOnly="True" <DataGrid Grid.Row="1" x:Name="DataGrid1" HeadersVisibility="Column" RowHeaderWidth="60" AutoGenerateColumns="False" IsReadOnly="True"
ItemsSource="{Binding StandardList}"> ItemsSource="{Binding StandardList}" CanUserResizeColumns="False" CanUserResizeRows="False">
<DataGrid.ColumnHeaderStyle> <DataGrid.ColumnHeaderStyle>
<Style TargetType="DataGridColumnHeader"> <Style TargetType="DataGridColumnHeader">
<Setter Property="MinWidth" Value="150"/> <Setter Property="MinWidth" Value="150"/>

@ -106,20 +106,19 @@
<Border Grid.Row="1" Grid.Column="0" Background="Aqua"> <Border Grid.Row="1" Grid.Column="0" Background="Aqua">
<DataGrid HeadersVisibility="All" AutoGenerateColumns="False" ItemsSource="{Binding DtResults}" SelectionChanged="DataGrid_SelectionChanged"> <DataGrid HeadersVisibility="All" AutoGenerateColumns="False" ItemsSource="{Binding DtResults}" SelectionChanged="DataGrid_SelectionChanged">
<DataGrid.Columns> <DataGrid.Columns>
<DataGridTextColumn Width="120" IsReadOnly="True" Header="" Binding="{Binding Name}"/> <DataGridTextColumn MinWidth="120" IsReadOnly="True" Header="" Binding="{Binding TestItemName}"/>
<DataGridTextColumn Width="Auto" IsReadOnly="True" Header="{DynamicResource resAvg}" Binding="{Binding Avg}"/> <DataGridTextColumn MinWidth="120" IsReadOnly="True" Header="{DynamicResource resAvg}" Binding="{Binding Avg}"/>
<DataGridTextColumn Width="Auto" IsReadOnly="True" Header="{DynamicResource resYuan}" Binding="{Binding Yuan}" /> <DataGridTextColumn MinWidth="120" IsReadOnly="True" Header="{DynamicResource resDev}" Binding="{Binding Dev}" />
<DataGridTextColumn Width="Auto" IsReadOnly="True" Header="{DynamicResource resShen}" Binding="{Binding Shen}"/> <DataGridTextColumn MinWidth="120" IsReadOnly="True" Header="{DynamicResource resMin}" Binding="{Binding Min}" />
<DataGridTextColumn Width="Auto" IsReadOnly="True" Header="{DynamicResource resMin}" Binding="{Binding Min}" /> <DataGridTextColumn MinWidth="120" IsReadOnly="True" Header="{DynamicResource resMax}" Binding="{Binding Max}"/>
<DataGridTextColumn Width="Auto" IsReadOnly="True" Header="{DynamicResource resMax}" Binding="{Binding Max}"/> <DataGridTextColumn MinWidth="120" IsReadOnly="True" Header="{DynamicResource CutLevel}" Binding="{Binding CutLevel}"/>
<DataGridTextColumn Width="Auto" IsReadOnly="True" Header="{DynamicResource CutLevel}" Binding="{Binding CutLevel}"/> <DataGridTemplateColumn MinWidth="120" Header="{DynamicResource resLevel}">
<DataGridTemplateColumn> <DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate> <DataTemplate>
<ComboBox ItemsSource="{Binding GradeList}" <ComboBox ItemsSource="{Binding GradeList}"
DisplayMemberPath="Key" SelectedValuePath="Value" SelectedValue="{Binding SymLevel, Mode=TwoWay}"/> DisplayMemberPath="Key" SelectedValuePath="Value" SelectedValue="{Binding SymLevel, Mode=TwoWay}"/>
</DataTemplate> </DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate> </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn> </DataGridTemplateColumn>
<!-- <DataGridTemplateColumn Width="Auto" IsReadOnly="True" Header="操作" > --> <!-- <DataGridTemplateColumn Width="Auto" IsReadOnly="True" Header="操作" > -->
<!-- <DataGridTemplateColumn.CellTemplate> --> <!-- <DataGridTemplateColumn.CellTemplate> -->

@ -20,7 +20,7 @@ public partial class GradingResult
{ {
InitializeComponent(); InitializeComponent();
DataContext = new GradingResultVM(null); //DataContext = new GradingResultVM(null);
// this.Viewport3Dx.EffectsManager = new DefaultEffectsManager(); // this.Viewport3Dx.EffectsManager = new DefaultEffectsManager();
// this.Viewport3Dx.Camera = new PerspectiveCamera() // this.Viewport3Dx.Camera = new PerspectiveCamera()

Loading…
Cancel
Save