@ -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 string DiamondCode { get ; set ; }
private List < DataInfo > _d tResults ;
private DataTable _d tResults ;
private DataTable _ info ;
private DataTable _d sList ;
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 _d tResults ; } set { _d tResults = value ; OnPropertyChanged ( nameof ( DtResults ) ) ; } }
public DataTable Info { get { return _ info ; } set { _ info = value ; OnPropertyChanged ( nameof ( Info ) ) ; } }
public List < DataInfo > DtResults { get { return _d tResults ; } set { _d tResults = 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 _d sList ; } set { _d sList = 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 ;
/// <summary>
/// 构造
/// </summary>
@ -39,10 +49,405 @@ public class GradingResultVM : BaseViewModel
public GradingResultVM ( object result )
{
ChangeNormCommand = new RelayCommand ( ChangeNorm ) ;
_d tResults = 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 < 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>
@ -84,3 +489,34 @@ public class GradingResultVM : BaseViewModel
//涉及到计算部分,这里做一个中转
# 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 ;
}
}
}