You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1606 lines
64 KiB
1606 lines
64 KiB
using System.Configuration; |
|
using System.Data; |
|
using System.IO; |
|
using System.IO.Ports; |
|
using System.Reflection; |
|
using System.Windows.Forms; |
|
using System.Windows.Input; |
|
using Newtonsoft.Json; |
|
using BrilliantSightClient.Model.Entity.ApiEntity; |
|
using BrilliantSightClient.Model.Helper; |
|
using BrilliantSightClient.Views.UserControl.ViewportData; |
|
using SaveFileDialog = Microsoft.Win32.SaveFileDialog; |
|
using NPOI.SS.UserModel; |
|
using NPOI.XSSF.UserModel; |
|
using BrilliantSightClient.Views.Dialog; |
|
using Application = System.Windows.Application; |
|
using MessageBox = BrilliantSightClient.Views.Dialog.MessageBox; |
|
using System.Windows; |
|
using BrilliantSightClient.Views.UserControl.ViewportData.Entity; |
|
using BrilliantSightClient.ViewModel.Configuration.SettingsPages; |
|
using BrilliantSightClient.Views.UserControl.ViewportData.Helper; |
|
using log4net; |
|
using NPOI.SS.Util; |
|
using BrilliantSightClient.Model.Attributes; |
|
using BrilliantSightClient.Model.Extension; |
|
using BrilliantSightClient.Model.GradeResult.Entity; |
|
using BrilliantSightClient.Model.GradeResult.Entity.Enums; |
|
using BrilliantSightClient.Model.GradeResult.Helper; |
|
using SparkDotNetCore.DetectCore.Entity; |
|
using Exception = System.Exception; |
|
|
|
|
|
namespace BrilliantSightClient.ViewModel.Grading; |
|
/// <summary> |
|
/// 检测结果画面VM |
|
/// </summary> |
|
public class GradingResultVM : BaseViewModel |
|
{ |
|
private static readonly ILog Logger = LogManager.GetLogger(typeof(GradingResultVM)); |
|
/// <summary> |
|
/// 钻石编码 |
|
/// </summary> |
|
private string DiamondCode { get; set; } |
|
private List<DataInfo> _dtResults; |
|
// ViewportData |
|
private DataTable _dsList; |
|
private DataTable _gradeList; |
|
private ViewportData _viewportData; |
|
|
|
private string _standard; |
|
private string _shape; |
|
private string _crownType; |
|
private string _pavType; |
|
private string _wight; |
|
private string _cutLevelTotal; |
|
private string _symLevelTotal; |
|
private string _ds; |
|
private RowDetail _selRowDataDetail; |
|
private bool _isEnabled; |
|
|
|
public bool _isSaveCsv = false; |
|
/// <summary> |
|
/// 保存按钮状态 |
|
/// </summary> |
|
public bool isSaved = false; |
|
|
|
public ICommand SaveFileCommand { get; } |
|
public ICommand SaveAsCommand { get; } |
|
// 热敏标签打印 |
|
public ICommand ThermalPrintCommand { get; } |
|
private SerialPort _serialPort; |
|
|
|
/// <summary> |
|
/// 左侧计算结果展示数据 |
|
/// </summary> |
|
public List<DataInfo> DtResults { get { return _dtResults; } set { _dtResults = value; OnPropertyChanged(nameof(DtResults)); } } |
|
/// <summary> |
|
/// 右侧钻石3D模型展示控件 |
|
/// </summary> |
|
public ViewportData ViewportData { get { return _viewportData; } set { _viewportData = value; OnPropertyChanged(nameof(ViewportData)); } } |
|
/// <summary> |
|
/// 画面上方定级标准 |
|
/// </summary> |
|
public string Standard { get { return _standard; } set { _standard = value; OnPropertyChanged(nameof(Standard)); } } |
|
/// <summary> |
|
/// 形状 |
|
/// </summary> |
|
public string Shape { get { return _shape; } set { _shape = value; OnPropertyChanged(nameof(Shape)); } } |
|
/// <summary> |
|
/// 冠面类型 |
|
/// </summary> |
|
public string CrownType { get { return _crownType; } set { _crownType = value; OnPropertyChanged(nameof(CrownType)); } } |
|
/// <summary> |
|
/// 亭面类型 |
|
/// </summary> |
|
public string PavType { get { return _pavType; } set { _pavType = value; OnPropertyChanged(nameof(PavType)); } } |
|
/// <summary> |
|
/// 画面明细展示数据 |
|
/// </summary> |
|
public RowDetail SelRowDataDetail { get { return _selRowDataDetail; } set { _selRowDataDetail = value; OnPropertyChanged(nameof(SelRowDataDetail)); } } |
|
/// <summary> |
|
/// 重量 |
|
/// </summary> |
|
public string Wight { get { return _wight; } set { _wight = value; OnPropertyChanged(nameof(Wight)); } } |
|
/// <summary> |
|
/// 切工等级(整体 画面上部显示) |
|
/// </summary> |
|
public string CutLevelTotal { get { return _cutLevelTotal; } set { _cutLevelTotal = value; OnPropertyChanged(nameof(CutLevelTotal)); } } |
|
|
|
/// <summary> |
|
/// 对称性等级(整体 画面上部显示) |
|
/// </summary> |
|
public string SymLevelTotal |
|
{ |
|
get { return _symLevelTotal; } |
|
set |
|
{ |
|
_symLevelTotal = value; |
|
OnPropertyChanged(nameof(SymLevelTotal)); |
|
if (!value.IsNullOrEmpty()) SaveToCsv(); |
|
} |
|
} |
|
/// <summary> |
|
/// 下拉列表DS |
|
/// </summary> |
|
public DataTable DSList { get { return _dsList; } set { _dsList = value; OnPropertyChanged(nameof(DSList)); } } |
|
/// <summary> |
|
/// 下拉列表DS 选择的值 |
|
/// </summary> |
|
public string DS { get { return _ds; } set { _ds = value; OnPropertyChanged(nameof(DS)); |
|
saveTempDS(value); |
|
} } |
|
/// <summary> |
|
/// 定级下拉列表 |
|
/// </summary> |
|
public DataTable GradeList { get { return _gradeList; } set { _gradeList = value; OnPropertyChanged(nameof(GradeList)); } } |
|
/// <summary> |
|
/// 保存和导出的按钮可用性 |
|
/// </summary> |
|
public bool IsEnabled { get{ return _isEnabled; } set { _isEnabled = value; OnPropertyChanged(nameof(IsEnabled)); } } |
|
|
|
|
|
|
|
/// <summary> |
|
/// 切工总等级(辅助计算用) |
|
/// </summary> |
|
private int totalCutGrade = 0; |
|
/// <summary> |
|
/// 对称行总等级(辅助计算用) |
|
/// </summary> |
|
private decimal totalSymGrade = 0; |
|
/// <summary> |
|
/// 计算数据 |
|
/// </summary> |
|
private AlgorithmResultEntity algorithmResult; |
|
/// <summary> |
|
/// 用户名 |
|
/// </summary> |
|
private string username = ""; |
|
/// <summary> |
|
/// 机器号 |
|
/// </summary> |
|
private string machine = ""; |
|
/// <summary> |
|
/// 形状id |
|
/// </summary> |
|
private string shapeId = string.Empty; |
|
/// <summary> |
|
/// 规则id |
|
/// </summary> |
|
private string ruleId = string.Empty; |
|
/// <summary> |
|
/// 构造 |
|
/// </summary> |
|
/// <param name="result">检测结果</param> |
|
public GradingResultVM(object? result) |
|
{ |
|
try |
|
{ |
|
SaveAsCommand = new RelayCommand(SaveAs); |
|
SaveFileCommand = new RelayCommand(SaveFile); |
|
// 热敏标签打印 |
|
ThermalPrintCommand = new RelayCommand(ExecuteThermalPrint); |
|
// 初始化 SerialPort |
|
// InitializeSerialPort(); |
|
|
|
if (result != null) |
|
{ |
|
algorithmResult = result as AlgorithmResultEntity?? new AlgorithmResultEntity(); |
|
// ViewDataInfoHelper.GenerateDataInfos(algorithmResult); |
|
InitView(algorithmResult); |
|
machine = algorithmResult.DeviceId; |
|
username = Settings.SelectValueById("PERMISSIONS"); |
|
|
|
IsEnabled = true; |
|
if (algorithmResult.Status.Equals(StatusCodes.Recheck)) IsEnabled = false; |
|
|
|
} |
|
|
|
DS = ConfigurationHelper.ReadConfigValue("DSSet"); |
|
|
|
if (shapeId.Equals("ROUND")) |
|
{ |
|
if (IsEnabled) |
|
{ |
|
AutoSave(); |
|
} |
|
SaveTestResult(SaveStatus.AutoSave); |
|
SaveToCsv(); |
|
} |
|
}catch(IOException) |
|
{ |
|
throw; |
|
} |
|
catch (Exception ex) |
|
{ |
|
Logger.Error($"全局异常捕获:{ex.Message}", ex); |
|
throw ex; |
|
} |
|
} |
|
|
|
#region 画面初始化相关操作 |
|
[Log] |
|
private void InitCombobox() |
|
{ |
|
// DS下拉列表初始化 |
|
InitDSlist(); |
|
|
|
// string sql = $"SELECT GRADE_NAME AS NAME, GRADE_EN_S_NAME AS EN_NAME, GRADE_EN_NAME AS EN_ALL_NAME, GRADE_ORDER FROM GRADE WHERE SHAPE_ID = '{shapeId}' AND RULE_ID LIKE '{ruleId}%' GROUP BY GRADE_NAME,GRADE_EN_NAME,GRADE_ORDER ORDER BY GRADE_ORDER; "; |
|
// GradeList = DataBaseHelper.ExecuteQuery(sql); |
|
|
|
DataTable dt = new DataTable(); |
|
dt.TableName = "GRADE"; |
|
dt.Columns.Add("NAME"); |
|
dt.Columns.Add("EN_NAME"); |
|
dt.Columns.Add("EN_ALL_NAME"); |
|
dt.Columns.Add("GRADE_ORDER"); |
|
if (ViewDataInfoHelper.levelCalculator != null && ViewDataInfoHelper.levelCalculator.IsInitialized) |
|
{ |
|
foreach (var gradeSet in ViewDataInfoHelper.levelCalculator.GradeLevelSymSets) |
|
{ |
|
DataRow dr = dt.NewRow(); |
|
dr["NAME"] = gradeSet.Name; |
|
dr["EN_NAME"] = gradeSet.AName; |
|
dr["EN_ALL_NAME"] = gradeSet.EName; |
|
dr["GRADE_ORDER"] = gradeSet.Short; |
|
dt.Rows.Add(dr); |
|
} |
|
} |
|
|
|
GradeList = dt; |
|
|
|
} |
|
[Log] |
|
private void InitViewportData(AlgorithmResultEntity result) |
|
{ |
|
Dictionary<string,string> colorProperty = new Dictionary<string,string>(); |
|
colorProperty.Add("FACET_COLOR", "MainFacetColor"); |
|
colorProperty.Add("BORDER_COLOR", "MainBorderColor"); |
|
colorProperty.Add("SELECTED_FACET_COLOR", "SelFacetColor"); |
|
colorProperty.Add("SELECTED BORDER COLOR", "SelBorderColor"); |
|
colorProperty.Add("SELECTED_TYPE_COLOR", "SelTypeColor"); |
|
colorProperty.Add("SELECTED_FONT_COLOR", "SelFontColor"); |
|
colorProperty.Add("RULER_COLOR", "SelLineColor"); |
|
colorProperty.Add("ARROW_COLOR", "SelFrontColor"); |
|
colorProperty.Add("BLEMISH_FACET_COLOR", "ErrFacetColor"); |
|
colorProperty.Add("TABLE_FACET_COLOR", "TableFacetColor"); |
|
colorProperty.Add("UPPER_MAIN_FACET_COLOR", "UpperMainFacetColor"); |
|
colorProperty.Add("STAR_FACET_COLOR", "StarFacetColor"); |
|
colorProperty.Add("UPPER_GIRDLE_FACET_COLOR", "UpperGirdleFacetColor"); |
|
colorProperty.Add("GIRDLE_FACET_COLOR", "GirdleFacetColor"); |
|
colorProperty.Add("PAVILION_MAIN_FACET_COLOR", "PavilionFacetColor"); |
|
colorProperty.Add("LOWER_GIRDLE_FACET_COLOR", "LowerGirdleFacetColor"); |
|
colorProperty.Add("CULET_COLOR", "CuletFacetColor"); |
|
|
|
ColorConfigEntity colorConfigEntity = new ColorConfigEntity(); |
|
Type type = colorConfigEntity.GetType(); |
|
foreach (var property in colorProperty) |
|
{ |
|
var value = Settings.SelectValueById(property.Key); |
|
PropertyInfo? p = type.GetProperty(property.Value); |
|
if (p != null && !string.IsNullOrEmpty(value)) |
|
{ |
|
p.SetValue(colorConfigEntity, CommonHelper.HexToColor4(value)); |
|
} |
|
} |
|
string data = JsonConvert.SerializeObject(result); |
|
ViewportData = new ViewportData(result.DiamondCode, data,colorConfigEntity); |
|
ViewportData.LoadData(); |
|
|
|
} |
|
[Log] |
|
private void InitDSlist() |
|
{ |
|
DSList = new DataTable(); |
|
DSList.Columns.Add("Key"); |
|
DSList.Columns.Add("Value"); |
|
DSList.Rows.Add("N/A", "NA"); |
|
DSList.Rows.Add("pass", "pass"); |
|
DSList.Rows.Add("refer", "refer"); |
|
} |
|
[Log] |
|
public void SaveToCsv() |
|
{ |
|
try |
|
{ |
|
if (_isSaveCsv) |
|
{ |
|
return; |
|
} |
|
|
|
string strBaseUrl = AppDomain.CurrentDomain.BaseDirectory; |
|
string filePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "csv", "histroy.csv"); |
|
var info = algorithmResult.Measurements; |
|
string line = |
|
$"{DiamondCode}," + |
|
$"{Wight}," + |
|
$"{DoubleDataFormatHelper.FormatDouble_A2(info.M1)}," + |
|
$"{DoubleDataFormatHelper.FormatDouble_A2(info.M2)}," + |
|
$"{DoubleDataFormatHelper.FormatDouble_A2(info.M3)}," + |
|
$"{DoubleDataFormatHelper.FormatDouble_P2(info.TABLE)}," + |
|
$"{DoubleDataFormatHelper.FormatDouble_P2(info.CROWN_HEIGHT)}," + |
|
$"{DoubleDataFormatHelper.FormatDouble_P2(info.PAV_DEPTH)}," + |
|
$"{DoubleDataFormatHelper.FormatDouble_P2(info.TOTAL_DEPTH)}," + |
|
$"{DoubleDataFormatHelper.FormatDouble_A2(info.CROWN_ANGLE)}," + |
|
$"{DoubleDataFormatHelper.FormatDouble_A2(info.PAV_ANGLE)}," + |
|
$"{DoubleDataFormatHelper.FormatDouble_A2(info.CULET_SIZE)}," + |
|
$"{DoubleDataFormatHelper.FormatDouble_P2(info.GIRDLE)}," + |
|
$"{calGirdleName(info)}," + |
|
$"," + |
|
$"{GetGradeEnName(GetGradeOrder(SymLevelTotal))}," + |
|
$"{GetGradeEnName(GetGradeOrder(CutLevelTotal))}"; |
|
if (File.Exists(filePath)) |
|
{ |
|
using (var writer = new StreamWriter(filePath, true)) |
|
{ |
|
|
|
writer.WriteLine(line); |
|
} |
|
} |
|
else |
|
{ |
|
File.Create(filePath).Close(); |
|
string header = string.Empty; |
|
if ("en".Equals(MultilingualHelper.getLangType())) |
|
{ |
|
header = "Diamond Code,Wight(ct),Measurement1(mm), Measurement2(mm), Measurement3(mm), Table(%), Crown Height(%),Pavilion Depth(%), Total Depth(%),Crown Angle(°), Pavilion Angle(°),Culet Size(mm), Girdle Percent(%),Girdle Name, POL or Pol/ Sym,SYM,CUT - PROP"; |
|
} |
|
else |
|
{ |
|
header = "钻石编码,预估重量(克拉),长(毫米), 宽(毫米), 高(毫米), 台宽比(%), 冠高比(%),亭深比(%), 全深比(%),冠角(°), 亭角(°),底尖偏心(mm), 腰厚比(%),腰厚分级, 修饰度,对称性,切工比例"; |
|
} |
|
// string header = |
|
// "Diamond Code,Wight,Measurement1, Measurement2, Measurement3, Table, Crown Height,Pavilion Depth, Total Depth,Crown Angle, Pavilion Angle,Culet Size, Girdle Percent,Girdle Name, POL or Pol/ Sym,SYM,CUT - PROP"; |
|
using (var writer = new StreamWriter(filePath, true)) |
|
{ |
|
|
|
writer.WriteLine(header); |
|
writer.WriteLine(line); |
|
} |
|
} |
|
|
|
_isSaveCsv = true; |
|
} |
|
catch (Exception ex) |
|
{ |
|
Logger.Error($"Auto Save Error: {ex.Message}"); |
|
} |
|
} |
|
[Log] |
|
private void saveTempDS(string selValue) |
|
{ |
|
ConfigurationHelper.SetConfigValue("DSSet",selValue); |
|
|
|
} |
|
|
|
[Log] |
|
private void InitView(AlgorithmResultEntity result) |
|
{ |
|
try |
|
{ |
|
InitViewportData(result); |
|
totalCutGrade = 0; |
|
totalSymGrade = 0; |
|
ruleId = getRuleId(); |
|
Standard = result.Standard; |
|
shapeId = result.Shape; |
|
|
|
Shape = GetName(result.Shape); |
|
CrownType = result.CrownType; |
|
PavType = result.PavType; |
|
DiamondCode = result.DiamondCode; |
|
CalWight(result); |
|
if (shapeId.Equals("ROUND")) |
|
{ |
|
var data = ViewDataInfoHelper.GenerateDataInfos(result); |
|
|
|
InitCombobox(); |
|
DtResults = data; |
|
// CutLevelTotal = GetGradeName(totalCutGrade); |
|
var totalCutLevel = ViewDataInfoHelper.levelCalculator.GetCutTotalGradeLevelSet(data); |
|
CutLevelTotal = ViewDataInfoHelper.MultilingualLevelSet(totalCutLevel); |
|
}else if (shapeId.Equals("OVAL")) |
|
{ |
|
var data = ViewDataInfoHelper.GenerateDataInfos(result); |
|
InitDSlist(); |
|
DtResults = data; |
|
} |
|
|
|
|
|
} |
|
catch (Exception ex) |
|
{ |
|
new MessageBox().Show($"{MultilingualHelper.getString("ApplicationError")}{ex.Message}"); |
|
Logger.Error($"全局异常捕获:{ex.Message}", ex); |
|
} |
|
} |
|
[Log] |
|
private string getRuleId() |
|
{ |
|
return Settings.SelectValueById("RuleId"); |
|
} |
|
#endregion |
|
|
|
#region 定级计算 |
|
[Log] |
|
private string getActualRuleId() |
|
{ |
|
string ruleIdForSelect = ""; |
|
if (ruleId.StartsWith("IGI")) |
|
{ |
|
ruleIdForSelect = ruleId; |
|
} |
|
else if (ruleId.StartsWith("GB")) |
|
{ |
|
double ta = algorithmResult.Measurements.TABLE * 100; |
|
ta = (DoubleDataFormatHelper.RoundFiveDownSixUp(ta * 2) / 2); |
|
if (ta < 49) |
|
{ |
|
ruleIdForSelect = ruleId + "_TA_49"; |
|
} |
|
else if (ta > 71) |
|
{ |
|
ruleIdForSelect = ruleId + "_TA_71"; |
|
} |
|
else |
|
{ |
|
ruleIdForSelect = ruleId + "_TA_" + Math.Floor(ta); |
|
} |
|
} |
|
else |
|
{ |
|
ruleIdForSelect = ruleId; |
|
} |
|
return ruleIdForSelect; |
|
} |
|
[Log] |
|
private List<CalGradeInfo> GetCalGradeInfos(string item) |
|
{ |
|
string ruleIdForSelect = getActualRuleId(); |
|
string sql = $"Select GRADE_ORDER as gradeOrder,CAST(STANDARD_MIN AS NUMERIC) Min, CAST(STANDARD_MAX AS NUMERIC) Max,IS_MAX_EXIST as isMaxExist,IS_MIN_EXIST as isMinExist from STANDARD where TEST_ITEM_ID = '{item}' AND SHAPE_ID = UPPER('{shapeId}') AND RULE_ID = '{ruleIdForSelect}' "; |
|
List<CalGradeInfo> calGrades = DataBaseHelper.ExecuteQuery<CalGradeInfo>(sql); |
|
return calGrades; |
|
} |
|
[Log] |
|
private List<CalGradeInfo> GetCalGradeInfos_SYM(string item) |
|
{ |
|
string ruleIdForSelect = getActualRuleId(); |
|
string sql = $"Select GRADE_ORDER as gradeOrder,CAST(STANDARD_MIN AS NUMERIC) Min, CAST(STANDARD_MAX AS NUMERIC) Max,IS_MAX_EXIST as isMaxExist,IS_MIN_EXIST as isMinExist from SYM_STANDARD where TEST_ITEM_ID = '{item}' AND SHAPE_ID = UPPER('{shapeId}') AND RULE_ID = '{ruleIdForSelect}' "; |
|
List<CalGradeInfo> calGrades = DataBaseHelper.ExecuteQuery<CalGradeInfo>(sql); |
|
return calGrades; |
|
} |
|
|
|
|
|
#endregion |
|
[Log] |
|
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; |
|
var VOLUME = result.Measurements.VOLUME; |
|
var wight = VOLUME/57; |
|
Wight = wight.ToString("f3"); |
|
return wight; |
|
} |
|
|
|
|
|
[Log] |
|
private void AutoSave() |
|
{ |
|
if (!Directory.Exists(getFilePath())) |
|
{ |
|
//new MessageBox().Show(MultilingualHelper.getString("SavePathIsnotExists")); |
|
//return; |
|
throw new DirectoryNotFoundException(getFilePath()); |
|
} |
|
string fullPath = Path.Combine(getFilePath(), string.IsNullOrEmpty(DiamondCode)?"temp":DiamondCode); |
|
if (FileSaveEnabled("Txt")) |
|
{ |
|
TxtFile(fullPath); |
|
} |
|
if (FileSaveEnabled("Excel")) |
|
{ |
|
ExcelFile(fullPath); |
|
} |
|
|
|
} |
|
[Log] |
|
public void SaveFile(object param) |
|
{ |
|
if (string.IsNullOrEmpty(DiamondCode)) |
|
{ |
|
MessageBox messageBox = new MessageBox(); |
|
MessageBoxResult boxResult = messageBox.ShowInput(MultilingualHelper.getString("UpdateDiamondCode"), out string inputStr, |
|
MultilingualHelper.getString("ok"), |
|
MultilingualHelper.getString("Cancel") |
|
); |
|
if (boxResult == MessageBoxResult.OK && inputStr.Length > 0) |
|
{ |
|
this.DiamondCode = inputStr; |
|
} |
|
else |
|
{ |
|
return; |
|
} |
|
} |
|
if (!Directory.Exists(getFilePath())) |
|
{ |
|
new MessageBox().Show(MultilingualHelper.getString("FilePathNotExists")); |
|
return; |
|
} |
|
string fullPath = Path.Combine(getFilePath(), this.DiamondCode); |
|
ExportFile(fullPath); |
|
SaveTestResult(SaveStatus.Save); |
|
isSaved = true; |
|
} |
|
[Log] |
|
private string getFilePath() |
|
{ |
|
string defultFilePath = ""; |
|
string sql = $"SELECT SETTING_P FROM SETTING WHERE SETTING_ID = 'FilePath'"; |
|
DataTable data = DataBaseHelper.ExecuteQuery(sql); |
|
if (data!= null && data.Rows.Count>0) |
|
{ |
|
defultFilePath = data.Rows[0]["SETTING_P"].ToString(); |
|
} |
|
if(File.Exists(defultFilePath)){ |
|
return defultFilePath; |
|
} |
|
else |
|
{ |
|
try { |
|
Directory.CreateDirectory(defultFilePath); |
|
} |
|
catch (Exception ex) |
|
{ |
|
Logger.Error($"全局异常捕获:{ex.Message}", ex); |
|
} |
|
return defultFilePath; |
|
} |
|
} |
|
#region 文件导出相关 |
|
[Log] |
|
public void SaveAs(object param) |
|
{ |
|
try |
|
{ |
|
if (string.IsNullOrEmpty(DiamondCode)) |
|
{ |
|
MessageBox messageBox = new MessageBox(); |
|
MessageBoxResult boxResult = messageBox.ShowInput(MultilingualHelper.getString("UpdateDiamondCode"), out string inputStr, |
|
MultilingualHelper.getString("ok"), |
|
MultilingualHelper.getString("Cancel") |
|
); |
|
|
|
if (boxResult == MessageBoxResult.OK && inputStr.Length > 0) |
|
{ |
|
this.DiamondCode = inputStr; |
|
} |
|
else |
|
{ |
|
return; |
|
} |
|
} |
|
using (var folderBrowserDlg = new FolderBrowserDialog()) |
|
{ |
|
// 创建SaveFileDialog实例 |
|
SaveFileDialog saveFileDialog = new() |
|
{ |
|
Filter = "所有文件 (*.*)|*.*", // 文件类型过滤器 |
|
FileName = this.DiamondCode // 默认文件名 |
|
}; |
|
|
|
// 显示对话框并检查结果 |
|
bool? result = saveFileDialog.ShowDialog(); |
|
if (result == true) |
|
{ |
|
// 获取用户选择的文件路径 |
|
string filePath = saveFileDialog.FileName; |
|
if (!saveFileDialog.CheckPathExists) |
|
{ |
|
new MessageBox().Show(MultilingualHelper.getString("FilePathNotExists")); |
|
return; |
|
} |
|
//ExportFile(filePath); |
|
if (filePath.ToLower().EndsWith(".txt")) |
|
{ |
|
filePath = filePath.Substring(0,filePath.Length-4); |
|
} |
|
TxtFile(filePath); |
|
} |
|
} |
|
SaveTestResult(SaveStatus.SaveAs); |
|
//PrintLabel(); |
|
} |
|
catch (Exception ex) |
|
{ |
|
new MessageBox().Show($"{MultilingualHelper.getString("ApplicationError")}{ex.Message}"); |
|
Logger.Error($"全局异常捕获:{ex.Message}", ex); |
|
} |
|
} |
|
[Log] |
|
private async void ExportFile(string filePath) |
|
{ |
|
ExportDialog exportDialog = new ExportDialog(); |
|
try { |
|
var tcs = new TaskCompletionSource<bool>(); |
|
var progressTask = Task.Run(() => Application.Current.Dispatcher.Invoke(() => { |
|
exportDialog.Closed += (s, e) => tcs.SetResult(true); |
|
exportDialog.ShowDialog(); |
|
} |
|
)); |
|
await Task.Run(async () => |
|
{ |
|
int count = saveFileCount(); |
|
int index = 1; |
|
if (FileSaveEnabled("Txt")) { |
|
exportDialog.Dispatcher.Invoke(() => |
|
{ |
|
exportDialog.setValue($"Txt File({index++}/{count})"); |
|
}); |
|
TxtFile(filePath); |
|
} |
|
if (FileSaveEnabled("Excel")) |
|
{ |
|
exportDialog.Dispatcher.Invoke(() => |
|
{ |
|
exportDialog.setValue($"Excel File({index++}/{count})"); |
|
}); |
|
ExcelFile(filePath); |
|
} |
|
if (FileSaveEnabled("Stl")) |
|
{ |
|
exportDialog.Dispatcher.Invoke(() => |
|
{ |
|
exportDialog.setValue($"STL File({index++}/{count})"); |
|
}); |
|
await Task.Delay(100); |
|
STLFile(filePath); |
|
} |
|
if (FileSaveEnabled("Dat")) |
|
{ |
|
exportDialog.Dispatcher.Invoke(() => |
|
{ |
|
exportDialog.setValue($"DAT File({index++}/{count})"); |
|
}); |
|
await DatFile(filePath); |
|
} |
|
exportDialog.Dispatcher.Invoke(() => |
|
{ |
|
exportDialog.setValue("Success"); |
|
}); |
|
//DataConver(filePath); |
|
// exportDialog.Dispatcher.Invoke(() => |
|
// { |
|
// exportDialog.setValue("Success"); |
|
// }); |
|
}); |
|
await Task.Delay(500); |
|
|
|
} |
|
catch (IOException ex) |
|
{ |
|
new MessageBox().Show($"{MultilingualHelper.getString("FileOpened")}:{ex.Message}"); |
|
} |
|
catch(Exception ex) |
|
{ |
|
new MessageBox().Show($"{MultilingualHelper.getString("ApplicationError")}{ex.Message}"); |
|
Logger.Error($"全局异常捕获:{ex.Message}", ex); |
|
} |
|
finally |
|
{ |
|
exportDialog.Close(); |
|
} |
|
} |
|
[Log] |
|
private bool FileSaveEnabled(string Key) |
|
{ |
|
bool result = false; |
|
string sql = $"SELECT SETTING_P FROM SETTING WHERE SETTING_ID = '{Key}FileChecked'"; |
|
DataTable data = DataBaseHelper.ExecuteQuery(sql); |
|
if (data != null && data.Rows.Count>0) |
|
{ |
|
bool.TryParse(data.Rows[0]["SETTING_P"].ToString(),out result); |
|
} |
|
return result; |
|
} |
|
[Log] |
|
private int saveFileCount() |
|
{ |
|
int result = 0; |
|
string sql = $"SELECT SETTING_P FROM SETTING WHERE SETTING_ID LIKE '%FileChecked'"; |
|
DataTable data = DataBaseHelper.ExecuteQuery(sql); |
|
if (data != null) |
|
{ |
|
result = data.Rows.Count; |
|
} |
|
return result; |
|
} |
|
/// <summary> |
|
/// txt文件导出 |
|
/// </summary> |
|
/// <param name="filePath"></param> |
|
[Log] |
|
private void TxtFile(string filePath) |
|
{ |
|
try |
|
{ |
|
string fileName = filePath + ".txt"; |
|
|
|
using (var file = File.Create(fileName)) |
|
{ |
|
Measurements info = algorithmResult.Measurements; |
|
StreamWriter stream = new StreamWriter(file); |
|
stream.WriteLine($"IGI REPORT NUMBER={DiamondCode}"); |
|
stream.WriteLine($"SARIN WEIGHT={Double.Parse(Wight).ToString("f3")}"); |
|
stream.WriteLine($"M1={info.M1.ToString("f2")}"); |
|
stream.WriteLine($"M2={info.M2.ToString("f2")}"); |
|
stream.WriteLine($"M3={info.M3.ToString("f2")}"); |
|
stream.WriteLine($"TABLE={(info.TABLE * 100).ToString("F1")}"); |
|
stream.WriteLine($"TABLE MIN={(info.TABLE_MIN * 100).ToString("F1")}"); |
|
stream.WriteLine($"TABLE MAX={(info.TABLE_MAX * 100).ToString("F1")}"); |
|
stream.WriteLine($"CROWN HEIGHT={(info.CROWN_HEIGHT * 100).ToString("F1")}"); |
|
stream.WriteLine($"CROWN H MIN={(info.CROWN_H_MIN * 100).ToString("F1")}"); |
|
stream.WriteLine($"CROWN H MAX={(info.CROWN_H_MAX * 100).ToString("F1")}"); |
|
stream.WriteLine($"CROWN ANGLE={(info.CROWN_ANGLE).ToString("F1")}"); |
|
stream.WriteLine($"CROWN ANGLE MIN={(info.CROWN_ANGLE_MIN).ToString("F1")}"); |
|
stream.WriteLine($"CROWN ANGLE MAX={(info.CROWN_ANGLE_MAX).ToString("F1")}"); |
|
stream.WriteLine($"PAV DEPTH={(info.PAV_DEPTH * 100).ToString("F1")}"); |
|
stream.WriteLine($"PAV DEPTH MIN={(info.PAV_DEPTH_MIN * 100).ToString("F1")}"); |
|
stream.WriteLine($"PAV DEPTH MAX={(info.PAV_DEPTH_MAX * 100).ToString("F1")}"); |
|
stream.WriteLine($"PAV ANGLE={(info.PAV_ANGLE).ToString("F1")}"); |
|
stream.WriteLine($"PAV ANGLE MIN={(info.PAV_ANGLE_MIN).ToString("F1")}"); |
|
stream.WriteLine($"PAV ANGLE MAX={(info.PAV_ANGLE_MAX).ToString("F1")}"); |
|
//部署值修改 |
|
stream.WriteLine($"GIRDLE={(info.GIRDLE_BEZEL * 100).ToString("F1")}"); |
|
stream.WriteLine($"GIRDLE MIN={(info.GIRDLE_BEZEL_MIN * 100).ToString("F1")}"); |
|
stream.WriteLine($"GIRDLE MAX={(info.GIRDLE_BEZEL_MAX * 100).ToString("F1")}"); |
|
stream.WriteLine($"TOTAL DEPTH={(info.TOTAL_DEPTH * 100).ToString("F1")}"); |
|
stream.WriteLine($"CULET={(info.CULET*100).ToString("F1")}"); |
|
stream.WriteLine($"MACHINE={machine}"); |
|
stream.WriteLine($"CUTGRADE={GetGradeEnName(totalCutGrade.ToString())}"); |
|
stream.WriteLine($"LW RATIO={info.LW_RATIO}"); |
|
stream.WriteLine($"DS={DS}"); |
|
stream.WriteLine($"COC={(info.COC * 100).ToString("F1")}"); |
|
stream.WriteLine($"USER={username}"); |
|
string TABLE_GRADE = DtResults.Where(x => "TABLE".Equals(x.TestItemId)).Select(x=>x.CutLevel).First()??""; |
|
stream.WriteLine($"TABLE GRADE={GetGradeEnName(GetGradeOrder(TABLE_GRADE))}"); |
|
string CROWN_H_GRADE = DtResults.Where(x => "CROWN_HEIGHT".Equals(x.TestItemId)).Select(x => x.CutLevel).First() ?? ""; |
|
stream.WriteLine($"CROWN H GRADE={GetGradeEnName(GetGradeOrder(CROWN_H_GRADE))}"); |
|
string CROWN_ANGLE_GRADE = DtResults.Where(x => "CROWN_ANGLE".Equals(x.TestItemId)).Select(x => x.CutLevel).First() ?? ""; |
|
stream.WriteLine($"CROWN ANGLE GRADE={GetGradeEnName(GetGradeOrder(CROWN_ANGLE_GRADE))}"); |
|
string PAV_DEPTH_GRADE = DtResults.Where(x => "PAV_DEPTH".Equals(x.TestItemId)).Select(x => x.CutLevel).First() ?? ""; |
|
stream.WriteLine($"PAV DEPTH GRADE={GetGradeEnName(GetGradeOrder(PAV_DEPTH_GRADE))}"); |
|
string PAV_ANGLE_GRADE = DtResults.Where(x => "PAV_ANGLE".Equals(x.TestItemId)).Select(x => x.CutLevel).First() ?? ""; |
|
stream.WriteLine($"PAV ANGLE GRADE={GetGradeEnName(GetGradeOrder(PAV_ANGLE_GRADE))}"); |
|
string TD_GRADE = DtResults.Where(x => "TOTAL_DEPTH".Equals(x.TestItemId)).Select(x => x.CutLevel).First() ?? ""; |
|
stream.WriteLine($"TD GRADE={GetGradeEnName(GetGradeOrder(TD_GRADE))}"); |
|
stream.WriteLine($"TA={info.TA.ToString("F1")}"); |
|
stream.WriteLine($"LGF={(info.LGF * 100).ToString("F1")}"); |
|
stream.WriteLine($"STAR={(info.STAR * 100).ToString("F1")}"); |
|
stream.Close(); |
|
} |
|
} |
|
catch (Exception ex) |
|
{ |
|
new MessageBox().Show($"{MultilingualHelper.getString("ApplicationError")}{ex.Message}"); |
|
Logger.Error($"全局异常捕获:{ex.Message}", ex); |
|
} |
|
} |
|
/// <summary> |
|
/// excel文件导出 |
|
/// </summary> |
|
/// <param name="filePath"></param> |
|
[Log] |
|
private void ExcelFile(string filePath) |
|
{ |
|
string fileName = filePath + ".xlsx"; |
|
try |
|
{ |
|
IWorkbook workbook = new XSSFWorkbook(); |
|
ISheet sheet = workbook.CreateSheet("Sheet1"); |
|
|
|
int col = 0; |
|
int row = 0; |
|
var dataRow = sheet.CreateRow(row); |
|
dataRow.CreateCell(col++).SetCellValue("Measurement1"); |
|
dataRow.CreateCell(col++).SetCellValue("Measurement2"); |
|
dataRow.CreateCell(col++).SetCellValue("Measurement3"); |
|
dataRow.CreateCell(col++).SetCellValue("Table"); |
|
dataRow.CreateCell(col++).SetCellValue("Crown Height"); |
|
dataRow.CreateCell(col++).SetCellValue("Pavilion Depth"); |
|
dataRow.CreateCell(col++).SetCellValue("Total Depth"); |
|
dataRow.CreateCell(col++).SetCellValue("Crown Angle"); |
|
dataRow.CreateCell(col++).SetCellValue("Pavilion Angle"); |
|
dataRow.CreateCell(col++).SetCellValue("Culet Size"); |
|
dataRow.CreateCell(col++).SetCellValue("Girdle Percent"); |
|
dataRow.CreateCell(col++).SetCellValue("Girdle Name"); |
|
dataRow.CreateCell(col++).SetCellValue("POL or Pol/Sym"); |
|
dataRow.CreateCell(col++).SetCellValue("SYM"); |
|
dataRow.CreateCell(col++).SetCellValue("CUT-PROP"); |
|
row++; |
|
col = 0; |
|
dataRow = sheet.CreateRow(row); |
|
Measurements info = algorithmResult.Measurements; |
|
dataRow.CreateCell(col++).SetCellValue($"{DoubleDataFormatHelper.FormatDouble_A2(info.M1)}(mm)"); |
|
dataRow.CreateCell(col++).SetCellValue($"{DoubleDataFormatHelper.FormatDouble_A2(info.M2)}(mm)"); |
|
dataRow.CreateCell(col++).SetCellValue($"{DoubleDataFormatHelper.FormatDouble_A2(info.M3)}(mm)"); |
|
dataRow.CreateCell(col++).SetCellValue($"{DoubleDataFormatHelper.FormatDouble_P2(info.TABLE)}%"); |
|
dataRow.CreateCell(col++).SetCellValue($"{DoubleDataFormatHelper.FormatDouble_P2(info.CROWN_HEIGHT)}%"); |
|
dataRow.CreateCell(col++).SetCellValue($"{DoubleDataFormatHelper.FormatDouble_P2(info.PAV_DEPTH)}%"); |
|
dataRow.CreateCell(col++).SetCellValue($"{DoubleDataFormatHelper.FormatDouble_P2(info.TOTAL_DEPTH)}%"); |
|
dataRow.CreateCell(col++).SetCellValue($"{DoubleDataFormatHelper.FormatDouble_A2(info.CROWN_ANGLE)}°"); |
|
dataRow.CreateCell(col++).SetCellValue($"{DoubleDataFormatHelper.FormatDouble_A2(info.PAV_ANGLE)}°"); |
|
dataRow.CreateCell(col++).SetCellValue($"{DoubleDataFormatHelper.FormatDouble_A2(info.CULET_SIZE)}(mm)"); |
|
dataRow.CreateCell(col++).SetCellValue($"{DoubleDataFormatHelper.FormatDouble_P2(info.GIRDLE)}%"); |
|
// 腰部厚度英文 |
|
dataRow.CreateCell(col++).SetCellValue($"{calGirdleName(info)}"); |
|
dataRow.CreateCell(col++).SetCellValue($""); |
|
string sysmlevel = ""; |
|
if (!string.IsNullOrEmpty(SymLevelTotal)) |
|
{ |
|
sysmlevel = GetGradeEnName(GetGradeOrder(SymLevelTotal ?? "")); |
|
} |
|
dataRow.CreateCell(col++).SetCellValue($"{sysmlevel}"); |
|
dataRow.CreateCell(col++).SetCellValue($"{GetGradeEnNameByAName(CutLevelTotal)}"); |
|
|
|
// 保存Excel文件 |
|
using (FileStream stream = new FileStream(fileName, FileMode.Create, FileAccess.Write)) |
|
{ |
|
workbook.Write(stream); |
|
} |
|
} |
|
catch (IOException) |
|
{ |
|
throw new IOException($"{fileName}"); |
|
} |
|
catch (Exception ex) |
|
{ |
|
Logger.Error($"全局异常捕获:{ex.Message}", ex); |
|
throw; |
|
} |
|
} |
|
|
|
[Log] |
|
private string calGirdleName(Measurements info) |
|
{ |
|
string girdleName = ""; |
|
// 有问题 问题1 1.6时为thin to slight thick,那么 thin为什么时刻出现 |
|
// 问题2 假如最小值为very thin,最大值为thick时用哪个 |
|
decimal min = Convert.ToDecimal(info.GIRDLE_MIN * 100); |
|
girdleName += calGirdleName(min,true); |
|
girdleName += " to "; |
|
decimal max = Convert.ToDecimal(info.GIRDLE_MAX * 100); |
|
girdleName += calGirdleName(max,false); |
|
return girdleName; |
|
} |
|
[Log] |
|
private string calGirdleName(decimal cValue,bool isMin) |
|
{ |
|
string girdleName = ""; |
|
List<CalGradeInfo> calGrades = GetCalGradeInfos("GIRDLE"); |
|
int order = 1; |
|
bool isthin = false; |
|
bool isthick = false; |
|
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 |
|
{ |
|
isthick = true; |
|
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 |
|
{ |
|
isthin = true; |
|
isThisGrade = false; |
|
} |
|
} |
|
if (isThisGrade) |
|
{ |
|
break; |
|
} |
|
else |
|
{ |
|
order++; |
|
} |
|
} |
|
Dictionary<int, string> thinDic = new Dictionary<int, string>(); |
|
thinDic.Add(1, "Thin"); |
|
thinDic.Add(2,"Thin"); |
|
thinDic.Add(3, "Very Thin"); |
|
thinDic.Add(4, "Extremely Thin"); |
|
Dictionary<int, string> thickDic = new Dictionary<int, string>(); |
|
thickDic.Add(1, "Slightly Thick"); |
|
thickDic.Add(2, "Slightly Thick"); |
|
thickDic.Add(3, "Thick"); |
|
thickDic.Add(4, "VeryThick"); |
|
if (order == 1) |
|
{ |
|
if (isMin) |
|
{ |
|
girdleName = thinDic[order]; |
|
} |
|
else |
|
{ |
|
girdleName = thickDic[order]; |
|
} |
|
} |
|
else if (isthin) |
|
{ |
|
if (order > 4) { |
|
girdleName = "Extremely Thin"; |
|
} |
|
else |
|
{ |
|
girdleName = thinDic[order]; |
|
} |
|
} |
|
else if (isthick) |
|
{ |
|
if (order > 4) |
|
{ |
|
girdleName = "VeryThick"; |
|
} |
|
else |
|
{ |
|
girdleName = thickDic[order]; |
|
} |
|
} |
|
return girdleName; |
|
} |
|
|
|
[Log] |
|
private async Task DatFile(string filePath) |
|
{ |
|
//File.Create(filePath + ".dat").Close(); |
|
await ViewportData.SaveAsToVedioFile(filePath + ".mp4"); |
|
} |
|
[Log] |
|
private async Task STLFile(string filePath) |
|
{ |
|
//File.Create(filePath + ".stl").Close(); |
|
await ViewportData.SaveAsToStlFile(filePath + ".stl"); |
|
} |
|
[Log] |
|
private void DataConver(string filePath) |
|
{ |
|
//File.Create(filePath + ".stl").Close(); |
|
ViewportData.ConvertMp4ToDat(filePath + ".mp4",filePath + ".dat"); |
|
} |
|
#endregion |
|
|
|
#region 各类名称取得 |
|
[Log] |
|
private string GetName(string id) |
|
{ |
|
return Name.getNameById(id).Trim(); |
|
} |
|
[Log] |
|
private string GetGradeName(decimal order) |
|
{ |
|
|
|
string name = GradeList.AsEnumerable().Where(x => order.ToString().Equals(x["GRADE_ORDER"].ToString())) |
|
.Select(x=>x[MultilingualHelper.getString("NameType")].ToString()).FirstOrDefault(""); |
|
// DB没关联 |
|
// Dictionary<int, string> dictionary = new(); |
|
// dictionary.Add(0, ""); |
|
// dictionary.Add(1,"极好"); |
|
// dictionary.Add(2, "很好"); |
|
// dictionary.Add(3, "好"); |
|
// dictionary.Add(4, "一般"); |
|
// dictionary.Add(5, "差"); |
|
// return dictionary[order]; |
|
return name; |
|
} |
|
[Log] |
|
private string GetGradeOrder(string Grade) |
|
{ |
|
string order = GradeList.AsEnumerable().Where(x => Grade.Equals(x[MultilingualHelper.getString("NameType")].ToString())) |
|
.Select(x=>x["GRADE_ORDER"].ToString()).FirstOrDefault(""); |
|
// DB没关联 |
|
// Dictionary<string, int> dictionary = new(); |
|
// dictionary.Add("极好", 1); |
|
// dictionary.Add("很好", 2); |
|
// dictionary.Add("好", 3); |
|
// dictionary.Add("一般", 4); |
|
// dictionary.Add("差", 5); |
|
// return dictionary[Grade]; |
|
return order; |
|
} |
|
[Log] |
|
private string GetGradeEnName(string order) |
|
{ |
|
try |
|
{ |
|
string name = GradeList.AsEnumerable().Where(x => order.Equals(x["GRADE_ORDER"].ToString())) |
|
.Select(x => x["EN_ALL_NAME"].ToString()).FirstOrDefault(""); |
|
return name ?? string.Empty; |
|
} |
|
catch (Exception ex) |
|
{ |
|
return string.Empty; |
|
} |
|
} |
|
|
|
private string GetGradeEnNameByAName(string order) |
|
{ |
|
var data = ViewDataInfoHelper.levelCalculator.GradeLevelCutSets.FirstOrDefault(x => x.AName.Equals(order)); |
|
if(data==null) data = ViewDataInfoHelper.levelCalculator.GradeLevelCutSets.FirstOrDefault(x => x.Name.Equals(order)); |
|
return data==null?string.Empty:data.EName; |
|
} |
|
|
|
#endregion |
|
|
|
/// <summary> |
|
/// 修改对称性等级 |
|
/// </summary> |
|
/// <param name="norm"></param> |
|
[Log] |
|
public void ChangeSym(object norm) |
|
{ |
|
//&& x.TestItemId != "GIRDLE_BEZEL" && x.TestItemId != "GIRDLE_BONE" && x.TestItemId != "GIRDLE" |
|
try |
|
{ |
|
decimal? order = this.DtResults.Where(x => |
|
x.TestItemId != "TWIST" && x.TestItemId != "GIRDLE_BEZEL" && |
|
x.TestItemId != "GIRDLE_BONE" && x.TestItemId != "GIRDLE") |
|
.Select(x => x.SymLevel).Max(); |
|
if (order.HasValue) |
|
{ |
|
totalSymGrade = order.Value; |
|
SymLevelTotal = GetGradeName((decimal)order.Value); |
|
} |
|
else |
|
{ |
|
SymLevelTotal = string.Empty; |
|
} |
|
} |
|
catch (Exception ex) |
|
{ |
|
SymLevelTotal = string.Empty; |
|
} |
|
} |
|
|
|
[Log] |
|
public RowDetail getSelectData(string testItemId) |
|
{ |
|
try |
|
{ |
|
RowDetail row = new RowDetail(); |
|
row.itemName = GetName(testItemId); |
|
ViewportData.mockSel(testItemId); |
|
var data = DtResults.Where(x => x.TestItemId == testItemId).FirstOrDefault(); |
|
row.Avg = data != null ? data.Avg : ""; |
|
row.Dev = data != null ? data.Dev : ""; |
|
row.Max = data != null ? data.Max : ""; |
|
row.Min = data != null ? data.Min : ""; |
|
row.CutLevel = data != null ? data.CutLevel : ""; |
|
row.SymLevel = GetGradeName(data != null ? data.SymLevel ?? 0 : 0); |
|
setDetailItems(row, testItemId); |
|
this.SelRowDataDetail = row; |
|
return row; |
|
} |
|
catch (Exception ex) |
|
{ |
|
Logger.Error($"虾集霸点:{ex.Message}"); |
|
return null; |
|
} |
|
} |
|
[Log] |
|
private void setDetailItems(RowDetail row,string TestItemId) |
|
{ |
|
if ("DIAMETER".Equals(TestItemId)) |
|
{ |
|
setDIAMETER_DETAIL(row); |
|
} |
|
else if ("TABLE".Equals(TestItemId)) |
|
{ |
|
setTABLE_DETAIL(row); |
|
} |
|
else if ("CROWN_HEIGHT".Equals(TestItemId)) |
|
{ |
|
setCROWN_HEIGHT_DETAIL(row); |
|
} |
|
else if ("CROWN_ANGLE".Equals(TestItemId)) |
|
{ |
|
setCROWN_ANGLE_DETAIL(row); |
|
} |
|
else if ("PAV_DEPTH".Equals(TestItemId)) |
|
{ |
|
setPAV_DEPTH_DETAIL(row); |
|
} |
|
else if ("PAV_ANGLE".Equals(TestItemId)) |
|
{ |
|
setPAV_ANGLE_DETAIL(row); |
|
} |
|
else if ("GIRDLE_BEZEL".Equals(TestItemId)) |
|
{ |
|
setGIRDLE_BEZEL_DETAIL(row); |
|
} |
|
else if ("GIRDLE_BONE".Equals(TestItemId)) |
|
{ |
|
setGIRDLE_BONE_DETAIL(row); |
|
} |
|
else if ("GIRDLE".Equals(TestItemId)) |
|
{ |
|
setGIRDLE_VALLEY_DETAIL(row); |
|
} |
|
else if ("STAR".Equals(TestItemId)) |
|
{ |
|
setSTAR_DETAIL(row); |
|
} |
|
else if ("LOWER_HALVES_RATIO".Equals(TestItemId)) |
|
{ |
|
setLOWER_HALVES_RATIO_DETAIL(row); |
|
} |
|
else if ("TWIST".Equals(TestItemId)) |
|
{ |
|
setTWIST_DETAIL(row); |
|
} |
|
} |
|
[Log] |
|
private void calIndex(RowDetail row) |
|
{ |
|
// 最大值的Index计算 |
|
if (row.Max.Equals(row.item1)) |
|
{ |
|
row.MaxIndex = 0; |
|
} |
|
else if(row.Max.Equals(row.item2)) |
|
{ |
|
row.MaxIndex = 1; |
|
} |
|
else if (row.Max.Equals(row.item3)) |
|
{ |
|
row.MaxIndex = 2; |
|
} |
|
else if (row.Max.Equals(row.item4)) |
|
{ |
|
row.MaxIndex = 3; |
|
} |
|
else if (row.Max.Equals(row.item5)) |
|
{ |
|
row.MaxIndex = 4; |
|
} |
|
else if (row.Max.Equals(row.item6)) |
|
{ |
|
row.MaxIndex = 5; |
|
} |
|
else if (row.Max.Equals(row.item7)) |
|
{ |
|
row.MaxIndex = 6; |
|
} |
|
else if (row.Max.Equals(row.item8)) |
|
{ |
|
row.MaxIndex = 7; |
|
} |
|
// 最小值的Index计算 |
|
if (row.Min.Equals(row.item1)) |
|
{ |
|
row.MinIndex = 0; |
|
} |
|
else if (row.Min.Equals(row.item2)) |
|
{ |
|
row.MinIndex = 1; |
|
} |
|
else if (row.Min.Equals(row.item3)) |
|
{ |
|
row.MinIndex = 2; |
|
} |
|
else if (row.Min.Equals(row.item4)) |
|
{ |
|
row.MinIndex = 3; |
|
} |
|
else if (row.Min.Equals(row.item5)) |
|
{ |
|
row.MinIndex = 4; |
|
} |
|
else if (row.Min.Equals(row.item6)) |
|
{ |
|
row.MinIndex = 5; |
|
} |
|
else if (row.Min.Equals(row.item7)) |
|
{ |
|
row.MinIndex = 6; |
|
} |
|
else if (row.Min.Equals(row.item8)) |
|
{ |
|
row.MinIndex = 7; |
|
} |
|
} |
|
[Log] |
|
private void setDIAMETER_DETAIL(RowDetail row) |
|
{ |
|
DiameterDetail diameterDetail = algorithmResult.Measurements.DIAMETER_DETAIL; |
|
row.item1 = DoubleDataFormatHelper. FormatDouble_D(diameterDetail.DIAMETER_1); |
|
row.item2 = DoubleDataFormatHelper. FormatDouble_D(diameterDetail.DIAMETER_2); |
|
row.item3 = DoubleDataFormatHelper. FormatDouble_D(diameterDetail.DIAMETER_3); |
|
row.item4 = DoubleDataFormatHelper. FormatDouble_D(diameterDetail.DIAMETER_4); |
|
row.item5 = DoubleDataFormatHelper. FormatDouble_D(diameterDetail.DIAMETER_5); |
|
row.item6 = DoubleDataFormatHelper. FormatDouble_D(diameterDetail.DIAMETER_6); |
|
row.item7 = DoubleDataFormatHelper. FormatDouble_D(diameterDetail.DIAMETER_7); |
|
row.item8 = DoubleDataFormatHelper. FormatDouble_D(diameterDetail.DIAMETER_8); |
|
calIndex(row); |
|
} |
|
[Log] |
|
private void setTABLE_DETAIL(RowDetail row) |
|
{ |
|
TableDetail diameterDetail = algorithmResult.Measurements.TABLE_DETAIL; |
|
row.item1 = DoubleDataFormatHelper.FormatDouble_P(diameterDetail.TABLE_1); |
|
row.item2 = DoubleDataFormatHelper.FormatDouble_P(diameterDetail.TABLE_2); |
|
row.item3 = DoubleDataFormatHelper.FormatDouble_P(diameterDetail.TABLE_3); |
|
row.item4 = DoubleDataFormatHelper.FormatDouble_P(diameterDetail.TABLE_4); |
|
calIndex(row); |
|
} |
|
[Log] |
|
private void setCROWN_HEIGHT_DETAIL(RowDetail row) |
|
{ |
|
CrownHeightDetail crownHeightDetail = algorithmResult.Measurements.CROWN_HEIGHT_DETAIL; |
|
row.item1 = DoubleDataFormatHelper.FormatDouble_P(crownHeightDetail.CROWN_HEIGHT_1); |
|
row.item2 = DoubleDataFormatHelper.FormatDouble_P(crownHeightDetail.CROWN_HEIGHT_2); |
|
row.item3 = DoubleDataFormatHelper.FormatDouble_P(crownHeightDetail.CROWN_HEIGHT_3); |
|
row.item4 = DoubleDataFormatHelper.FormatDouble_P(crownHeightDetail.CROWN_HEIGHT_4); |
|
row.item5 = DoubleDataFormatHelper.FormatDouble_P(crownHeightDetail.CROWN_HEIGHT_5); |
|
row.item6 = DoubleDataFormatHelper.FormatDouble_P(crownHeightDetail.CROWN_HEIGHT_6); |
|
row.item7 = DoubleDataFormatHelper.FormatDouble_P(crownHeightDetail.CROWN_HEIGHT_7); |
|
row.item8 = DoubleDataFormatHelper.FormatDouble_P(crownHeightDetail.CROWN_HEIGHT_8); |
|
calIndex(row); |
|
} |
|
[Log] |
|
private void setCROWN_ANGLE_DETAIL(RowDetail row) |
|
{ |
|
CrownAngleDetail crownAngleDetail = algorithmResult.Measurements.CROWN_ANGLE_DETAIL; |
|
row.item1 = DoubleDataFormatHelper.FormatDouble_A(crownAngleDetail.CROWN_ANGLE_1); |
|
row.item2 = DoubleDataFormatHelper.FormatDouble_A(crownAngleDetail.CROWN_ANGLE_2); |
|
row.item3 = DoubleDataFormatHelper.FormatDouble_A(crownAngleDetail.CROWN_ANGLE_3); |
|
row.item4 = DoubleDataFormatHelper.FormatDouble_A(crownAngleDetail.CROWN_ANGLE_4); |
|
row.item5 = DoubleDataFormatHelper.FormatDouble_A(crownAngleDetail.CROWN_ANGLE_5); |
|
row.item6 = DoubleDataFormatHelper.FormatDouble_A(crownAngleDetail.CROWN_ANGLE_6); |
|
row.item7 = DoubleDataFormatHelper.FormatDouble_A(crownAngleDetail.CROWN_ANGLE_7); |
|
row.item8 = DoubleDataFormatHelper.FormatDouble_A(crownAngleDetail.CROWN_ANGLE_8); |
|
calIndex(row); |
|
} |
|
[Log] |
|
private void setPAV_DEPTH_DETAIL(RowDetail row) |
|
{ |
|
PavDepthDetail pavDepthDetail = algorithmResult.Measurements.PAV_DEPTH_DETAIL; |
|
row.item1 = DoubleDataFormatHelper.FormatDouble_P(pavDepthDetail.PAV_DEPTH_1); |
|
row.item2 = DoubleDataFormatHelper.FormatDouble_P(pavDepthDetail.PAV_DEPTH_2); |
|
row.item3 = DoubleDataFormatHelper.FormatDouble_P(pavDepthDetail.PAV_DEPTH_3); |
|
row.item4 = DoubleDataFormatHelper.FormatDouble_P(pavDepthDetail.PAV_DEPTH_4); |
|
row.item5 = DoubleDataFormatHelper.FormatDouble_P(pavDepthDetail.PAV_DEPTH_5); |
|
row.item6 = DoubleDataFormatHelper.FormatDouble_P(pavDepthDetail.PAV_DEPTH_6); |
|
row.item7 = DoubleDataFormatHelper.FormatDouble_P(pavDepthDetail.PAV_DEPTH_7); |
|
row.item8 = DoubleDataFormatHelper.FormatDouble_P(pavDepthDetail.PAV_DEPTH_8); |
|
calIndex(row); |
|
} |
|
[Log] |
|
private void setPAV_ANGLE_DETAIL(RowDetail row) |
|
{ |
|
PavAngleDetail pavAngleDetail = algorithmResult.Measurements.PAV_ANGLE_DETAIL; |
|
row.item1 = DoubleDataFormatHelper.FormatDouble_A(pavAngleDetail.PAV_ANGLE_1); |
|
row.item2 = DoubleDataFormatHelper.FormatDouble_A(pavAngleDetail.PAV_ANGLE_2); |
|
row.item3 = DoubleDataFormatHelper.FormatDouble_A(pavAngleDetail.PAV_ANGLE_3); |
|
row.item4 = DoubleDataFormatHelper.FormatDouble_A(pavAngleDetail.PAV_ANGLE_4); |
|
row.item5 = DoubleDataFormatHelper.FormatDouble_A(pavAngleDetail.PAV_ANGLE_5); |
|
row.item6 = DoubleDataFormatHelper.FormatDouble_A(pavAngleDetail.PAV_ANGLE_6); |
|
row.item7 = DoubleDataFormatHelper.FormatDouble_A(pavAngleDetail.PAV_ANGLE_7); |
|
row.item8 = DoubleDataFormatHelper.FormatDouble_A(pavAngleDetail.PAV_ANGLE_8); |
|
calIndex(row); |
|
} |
|
[Log] |
|
private void setGIRDLE_BEZEL_DETAIL(RowDetail row) |
|
{ |
|
GirdleBezelDetail girdleBezelDetail = algorithmResult.Measurements.GIRDLE_BEZEL_DETAIL; |
|
row.item1 = DoubleDataFormatHelper.FormatDouble_P(girdleBezelDetail.GIRDLE_BEZEL_1); |
|
row.item2 = DoubleDataFormatHelper.FormatDouble_P(girdleBezelDetail.GIRDLE_BEZEL_2); |
|
row.item3 = DoubleDataFormatHelper.FormatDouble_P(girdleBezelDetail.GIRDLE_BEZEL_3); |
|
row.item4 = DoubleDataFormatHelper.FormatDouble_P(girdleBezelDetail.GIRDLE_BEZEL_4); |
|
row.item5 = DoubleDataFormatHelper.FormatDouble_P(girdleBezelDetail.GIRDLE_BEZEL_5); |
|
row.item6 = DoubleDataFormatHelper.FormatDouble_P(girdleBezelDetail.GIRDLE_BEZEL_6); |
|
row.item7 = DoubleDataFormatHelper.FormatDouble_P(girdleBezelDetail.GIRDLE_BEZEL_7); |
|
row.item8 = DoubleDataFormatHelper.FormatDouble_P(girdleBezelDetail.GIRDLE_BEZEL_8); |
|
calIndex(row); |
|
} |
|
[Log] |
|
private void setGIRDLE_BONE_DETAIL(RowDetail row) |
|
{ |
|
GirdleBoneDetail girdleBoneDetail = algorithmResult.Measurements.GIRDLE_BONE_DETAIL; |
|
row.item1 = DoubleDataFormatHelper.FormatDouble_P(girdleBoneDetail.GIRDLE_BONE_1); |
|
row.item2 = DoubleDataFormatHelper.FormatDouble_P(girdleBoneDetail.GIRDLE_BONE_2); |
|
row.item3 = DoubleDataFormatHelper.FormatDouble_P(girdleBoneDetail.GIRDLE_BONE_3); |
|
row.item4 = DoubleDataFormatHelper.FormatDouble_P(girdleBoneDetail.GIRDLE_BONE_4); |
|
row.item5 = DoubleDataFormatHelper.FormatDouble_P(girdleBoneDetail.GIRDLE_BONE_5); |
|
row.item6 = DoubleDataFormatHelper.FormatDouble_P(girdleBoneDetail.GIRDLE_BONE_6); |
|
row.item7 = DoubleDataFormatHelper.FormatDouble_P(girdleBoneDetail.GIRDLE_BONE_7); |
|
row.item8 = DoubleDataFormatHelper.FormatDouble_P(girdleBoneDetail.GIRDLE_BONE_8); |
|
calIndex(row); |
|
} |
|
|
|
[Log] |
|
private void setGIRDLE_VALLEY_DETAIL(RowDetail row) |
|
{ |
|
GirdleValleyDetail girdleValleyDetail = algorithmResult.Measurements.GIRDLE_VALLEY_DETAIL; |
|
List<double> doubles = new List<double>(); |
|
doubles.Add(girdleValleyDetail.GIRDLE_VALLEY_1); |
|
doubles.Add(girdleValleyDetail.GIRDLE_VALLEY_2); |
|
doubles.Add(girdleValleyDetail.GIRDLE_VALLEY_3); |
|
doubles.Add(girdleValleyDetail.GIRDLE_VALLEY_4); |
|
doubles.Add(girdleValleyDetail.GIRDLE_VALLEY_5); |
|
doubles.Add(girdleValleyDetail.GIRDLE_VALLEY_6); |
|
doubles.Add(girdleValleyDetail.GIRDLE_VALLEY_7); |
|
doubles.Add(girdleValleyDetail.GIRDLE_VALLEY_8); |
|
doubles.Add(girdleValleyDetail.GIRDLE_VALLEY_9); |
|
doubles.Add(girdleValleyDetail.GIRDLE_VALLEY_10); |
|
doubles.Add(girdleValleyDetail.GIRDLE_VALLEY_11); |
|
doubles.Add(girdleValleyDetail.GIRDLE_VALLEY_12); |
|
doubles.Add(girdleValleyDetail.GIRDLE_VALLEY_13); |
|
doubles.Add(girdleValleyDetail.GIRDLE_VALLEY_14); |
|
doubles.Add(girdleValleyDetail.GIRDLE_VALLEY_15); |
|
doubles.Add(girdleValleyDetail.GIRDLE_VALLEY_16); |
|
doubles.Sort(); |
|
row.item1 = DoubleDataFormatHelper.FormatDouble_P2(doubles[0]); |
|
row.item2 = DoubleDataFormatHelper.FormatDouble_P2(doubles[1]); |
|
row.item3 = DoubleDataFormatHelper.FormatDouble_P2(doubles[2]); |
|
row.item4 = DoubleDataFormatHelper.FormatDouble_P2(doubles[3]); |
|
row.item5 = DoubleDataFormatHelper.FormatDouble_P2(doubles[12]); |
|
row.item6 = DoubleDataFormatHelper.FormatDouble_P2(doubles[13]); |
|
row.item7 = DoubleDataFormatHelper.FormatDouble_P2(doubles[14]); |
|
row.item8 = DoubleDataFormatHelper.FormatDouble_P2(doubles[15]); |
|
calIndex(row); |
|
} |
|
[Log] |
|
private void setSTAR_DETAIL(RowDetail row) |
|
{ |
|
StarDetail starDetail = algorithmResult.Measurements.STAR_DETAIL; |
|
row.item1 = DoubleDataFormatHelper.FormatDouble_P(starDetail.STAR_1); |
|
row.item2 = DoubleDataFormatHelper.FormatDouble_P(starDetail.STAR_2); |
|
row.item3 = DoubleDataFormatHelper.FormatDouble_P(starDetail.STAR_3); |
|
row.item4 = DoubleDataFormatHelper.FormatDouble_P(starDetail.STAR_4); |
|
row.item5 = DoubleDataFormatHelper.FormatDouble_P(starDetail.STAR_5); |
|
row.item6 = DoubleDataFormatHelper.FormatDouble_P(starDetail.STAR_6); |
|
row.item7 = DoubleDataFormatHelper.FormatDouble_P(starDetail.STAR_7); |
|
row.item8 = DoubleDataFormatHelper.FormatDouble_P(starDetail.STAR_8); |
|
calIndex(row); |
|
} |
|
[Log] |
|
private void setLOWER_HALVES_RATIO_DETAIL(RowDetail row) |
|
{ |
|
LowerHalvesRatioDetail lowerHalvesRatioDetail = algorithmResult.Measurements.LOWER_HALVES_RATIO_DETAIL; |
|
row.item1 = DoubleDataFormatHelper.FormatDouble_P(lowerHalvesRatioDetail.LOWER_HALVES_RATIO_1); |
|
row.item2 = DoubleDataFormatHelper.FormatDouble_P(lowerHalvesRatioDetail.LOWER_HALVES_RATIO_2); |
|
row.item3 = DoubleDataFormatHelper.FormatDouble_P(lowerHalvesRatioDetail.LOWER_HALVES_RATIO_3); |
|
row.item4 = DoubleDataFormatHelper.FormatDouble_P(lowerHalvesRatioDetail.LOWER_HALVES_RATIO_4); |
|
row.item5 = DoubleDataFormatHelper.FormatDouble_P(lowerHalvesRatioDetail.LOWER_HALVES_RATIO_5); |
|
row.item6 = DoubleDataFormatHelper.FormatDouble_P(lowerHalvesRatioDetail.LOWER_HALVES_RATIO_6); |
|
row.item7 = DoubleDataFormatHelper.FormatDouble_P(lowerHalvesRatioDetail.LOWER_HALVES_RATIO_7); |
|
row.item8 = DoubleDataFormatHelper.FormatDouble_P(lowerHalvesRatioDetail.LOWER_HALVES_RATIO_8); |
|
calIndex(row); |
|
} |
|
[Log] |
|
private void setTWIST_DETAIL(RowDetail row) |
|
{ |
|
TwistDetail twistDetail = algorithmResult.Measurements.TWIST_DETAIL; |
|
row.item1 = DoubleDataFormatHelper.FormatDouble_A(twistDetail.TWIST_1); |
|
row.item2 = DoubleDataFormatHelper.FormatDouble_A(twistDetail.TWIST_2); |
|
row.item3 = DoubleDataFormatHelper.FormatDouble_A(twistDetail.TWIST_3); |
|
row.item4 = DoubleDataFormatHelper.FormatDouble_A(twistDetail.TWIST_4); |
|
row.item5 = DoubleDataFormatHelper.FormatDouble_A(twistDetail.TWIST_5); |
|
row.item6 = DoubleDataFormatHelper.FormatDouble_A(twistDetail.TWIST_6); |
|
row.item7 = DoubleDataFormatHelper.FormatDouble_A(twistDetail.TWIST_7); |
|
row.item8 = DoubleDataFormatHelper.FormatDouble_A(twistDetail.TWIST_8); |
|
calIndex(row); |
|
} |
|
|
|
#region 履历保存 |
|
[Log] |
|
private void SaveTestResult(SaveStatus saveStatus) |
|
{ |
|
string ALGORITHM_RESULT = JsonConvert.SerializeObject(algorithmResult); |
|
string DATA_RESULT = JsonConvert.SerializeObject(DtResults); |
|
string STATUS = saveStatus.ToString(); |
|
string STONE_ID = DiamondCode; |
|
string TIMESTAMPVALUE = DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss:fff"); |
|
string sql = $"INSERT INTO TEST_RESULT (GUID,ALGORITHM_RESULT,DATA_RESULT,STATUS,STONE_ID,TIMESTAMPVALUE)VALUES" + |
|
$"('{Guid.NewGuid()}','{ALGORITHM_RESULT}','{DATA_RESULT}','{STATUS}','{STONE_ID}','{TIMESTAMPVALUE}');"; |
|
DataBaseHelper.ExecuteNonQuery(sql); |
|
} |
|
#endregion |
|
|
|
// 执行热敏打印的方法 |
|
[Log] |
|
private void ExecuteThermalPrint(object parameter) |
|
{ |
|
if (Common.RunMode == 1) |
|
{ |
|
new MessageBox().Show("打印功能不可用"); |
|
return; |
|
} |
|
|
|
Microsoft.Office.Interop.Excel.Application excelApp = null; |
|
string tempFilePath = string.Empty; |
|
try |
|
{ |
|
MessageBox messageBox = new MessageBox(); |
|
MessageBoxResult boxResult = messageBox.ShowAsk(MultilingualHelper.getString("YesOrNo")); |
|
if (boxResult != MessageBoxResult.OK) |
|
{ |
|
return; |
|
} |
|
|
|
// 步骤2:加载模板并填充数据 |
|
tempFilePath = GenerateTempExcelFile(); |
|
|
|
// 步骤3:使用Excel Interop静默打印 |
|
excelApp = new Microsoft.Office.Interop.Excel.Application(); |
|
excelApp.Visible = false; // 不显示Excel窗口 |
|
excelApp.DisplayAlerts = false; // 禁用警告提示 |
|
|
|
Microsoft.Office.Interop.Excel.Workbook workbook = excelApp.Workbooks.Open(tempFilePath); |
|
|
|
string printName = ConfigurationHelper.ReadConfigValue("PrintName"); |
|
string? targetPrinter = System.Drawing.Printing.PrinterSettings.InstalledPrinters |
|
.Cast<string>() |
|
.FirstOrDefault(p => p.Contains(printName)); |
|
if (targetPrinter == null) |
|
{ |
|
throw new Exception($"未找到打印机{printName}"); |
|
} |
|
|
|
// 打印配置 |
|
workbook.PrintOut( |
|
Copies: 1, |
|
Preview: false, |
|
ActivePrinter: targetPrinter |
|
); |
|
|
|
// 关闭工作簿(不保存修改) |
|
workbook.Close(SaveChanges: false); |
|
} |
|
catch (Exception ex) |
|
{ |
|
new MessageBox().Show($"打印失败: {ex.Message}"); |
|
} |
|
finally |
|
{ |
|
// 步骤4:清理资源 |
|
if (excelApp != null) |
|
{ |
|
excelApp.Quit(); |
|
System.Runtime.InteropServices.Marshal.ReleaseComObject(excelApp); |
|
} |
|
|
|
// 删除临时文件 |
|
if (File.Exists(tempFilePath)) |
|
{ |
|
File.Delete(tempFilePath); |
|
} |
|
} |
|
} |
|
|
|
[Log] |
|
private string GenerateTempExcelFile() |
|
{ |
|
try |
|
{ |
|
string TemplatePath = @"Resource\ResultReport.xlsx"; |
|
using (FileStream templateStream = new FileStream(TemplatePath, FileMode.Open, FileAccess.Read)) |
|
{ |
|
IWorkbook workbook = new XSSFWorkbook(templateStream); |
|
ISheet sheet = workbook.GetSheetAt(0); |
|
|
|
//Row 1 |
|
SetCellValue(sheet, "A1", $"{MultilingualHelper.getString("Organization")}:{Standard}"); |
|
SetCellValue(sheet, "B1", $"{MultilingualHelper.getString("DiamondResultShape")}:{Shape}"); |
|
SetCellValue(sheet, "C1", $"{MultilingualHelper.getString("Code")}:{DiamondCode}"); |
|
SetCellValue(sheet, "E1", $"{MultilingualHelper.getString("Wight")}:{Wight}ct."); |
|
//Row 2 |
|
SetCellValue(sheet, "A2", $"{MultilingualHelper.getString("Parameters")}"); |
|
SetCellValue(sheet, "B2", $"{MultilingualHelper.getString("DiamondResultGridAvgValue")}"); |
|
SetCellValue(sheet, "C2", $"{MultilingualHelper.getString("Interval")}(Min~Max)"); |
|
SetCellValue(sheet, "D2", $"{MultilingualHelper.getString("DiamondResultGridCutLevel")}"); |
|
SetCellValue(sheet, "E2", $"{MultilingualHelper.getString("DiamondResultSymmetryGrade")}"); |
|
//Row 3 |
|
var row3 = getSelectData("DIAMETER"); |
|
SetCellValue(sheet, "A3", $"{GetName("DIAMETER")}(mm)"); |
|
SetCellValue(sheet, "B3", $"{row3.Avg}"); |
|
SetCellValue(sheet, "C3", $"({row3.Min}~{row3.Max})"); |
|
SetCellValue(sheet, "D3", "--"); |
|
SetCellValue(sheet, "E3", $"{row3.SymLevel}"); |
|
//Row 4 |
|
var row4 = getSelectData("TOTAL_DEPTH"); |
|
SetCellValue(sheet, "A4", $"{GetName("TOTAL_DEPTH")}(%)"); |
|
SetCellValue(sheet, "B4", $"{row4.Avg}"); |
|
SetCellValue(sheet, "C4", "--"); |
|
SetCellValue(sheet, "D4", $"{row4.CutLevel}"); |
|
SetCellValue(sheet, "E4", "--"); |
|
// Row 5 |
|
var row5 = getSelectData("TABLE"); |
|
SetCellValue(sheet, "A5", $"{GetName("TABLE")}(%)"); |
|
SetCellValue(sheet, "B5", $"{row5.Avg}"); |
|
SetCellValue(sheet, "C5", $"({row5.Min}~{row5.Max})"); |
|
SetCellValue(sheet, "D5", $"{row5.CutLevel}"); |
|
SetCellValue(sheet, "E5", "--"); |
|
var row6 = getSelectData("CROWN_ANGLE"); |
|
SetCellValue(sheet, "A6", $"{GetName("CROWN_ANGLE")}(°)"); |
|
SetCellValue(sheet, "B6", $"{row6.Avg}"); |
|
SetCellValue(sheet, "C6", $"({row6.Min}~{row6.Max})"); |
|
SetCellValue(sheet, "D6", $"{row6.CutLevel}"); |
|
SetCellValue(sheet, "E6", $"{row6.SymLevel}"); |
|
var row7 = getSelectData("CROWN_HEIGHT"); |
|
SetCellValue(sheet, "A7", $"{GetName("CROWN_HEIGHT")}(%)"); |
|
SetCellValue(sheet, "B7", $"{row7.Avg}"); |
|
SetCellValue(sheet, "C7", $"({row7.Min}~{row7.Max})"); |
|
SetCellValue(sheet, "D7", $"{row7.CutLevel}"); |
|
SetCellValue(sheet, "E7", $"{row7.SymLevel}"); |
|
var row8 = getSelectData("GIRDLE"); |
|
SetCellValue(sheet, "A8", $"{GetName("GIRDLE")}(%)"); |
|
SetCellValue(sheet, "B8", $"{row8.Avg}"); |
|
SetCellValue(sheet, "C8", $"({row8.Min}~{row8.Max})"); |
|
SetCellValue(sheet, "D8", $"{row8.CutLevel}"); |
|
SetCellValue(sheet, "E8", $"{row8.SymLevel}"); |
|
var row9 = getSelectData("PAV_DEPTH"); |
|
SetCellValue(sheet, "A9", $"{GetName("PAV_DEPTH")}(%)"); |
|
SetCellValue(sheet, "B9", $"{row9.Avg}"); |
|
SetCellValue(sheet, "C9", $"({row9.Min}~{row9.Max})"); |
|
SetCellValue(sheet, "D9", $"{row9.CutLevel}"); |
|
SetCellValue(sheet, "E9", $"{row9.SymLevel}"); |
|
//row 10 |
|
//Row 11 |
|
SetCellValue(sheet, "A11", $"{MultilingualHelper.getString("CuttingGrade")}"); |
|
SetCellValue(sheet, "B11", $"{CutLevelTotal}"); |
|
//Row 12 |
|
SetCellValue(sheet, "A12", $"{MultilingualHelper.getString("SymmetryLevel")}"); |
|
SetCellValue(sheet, "B12", $"{SymLevelTotal}"); |
|
SetCellValue(sheet, "C12", $"{MultilingualHelper.getString("DateOfIssue")}: {DateTime.Now:yyyy/M/d}"); |
|
// 生成临时文件路径 |
|
string tempFile = Path.Combine( |
|
Path.GetTempPath(), |
|
$"DiamondReport_{DateTime.Now:yyyyMMddHHmmss}.xlsx"); |
|
|
|
using (FileStream fs = new FileStream(tempFile, FileMode.Create)) |
|
{ |
|
workbook.Write(fs); |
|
} |
|
|
|
return tempFile; |
|
} |
|
} |
|
catch (Exception e) |
|
{ |
|
throw e; |
|
} |
|
} |
|
|
|
[Log] |
|
private void SetCellValue(ISheet sheet, string cellAddress, object value) |
|
{ |
|
var cellRef = new CellReference(cellAddress); |
|
IRow row = sheet.GetRow(cellRef.Row) ?? sheet.CreateRow(cellRef.Row); |
|
ICell cell = row.GetCell(cellRef.Col) ?? row.CreateCell(cellRef.Col); |
|
cell.SetCellValue(value?.ToString() ?? ""); |
|
} |
|
} |
|
|
|
|