fix:定级配置

master
sunhonglei 5 months ago
parent d2fef49b29
commit 8fe9cc19c6
  1. 2
      Model/Entity/JsonEntity.cs
  2. 221
      ViewModel/Configuration/LevelConfigVM.cs
  3. 2
      ViewModel/Configuration/SettingsPages/SettingsVM.cs
  4. 78
      ViewModel/Grading/GradingResultVM.cs

@ -71,7 +71,9 @@ namespace EncryptFileTool.Entity
}
public class StandardInfo
{
public string RULE_ID { get; set; } = "";
public string GRADE_ID { get; set; }
public string GRADE_ORDER { get { return GRADE_ID.Substring(GRADE_ID.Length - 1); } set { } }
public string TEST_ITEM_ID { get; set; }
public string STANDARD_ID { get; set; }
public string STANDARD_NAME { get; set; }

@ -2,6 +2,7 @@
using HandyControl.Controls;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using NPOI.SS.Formula.Functions;
using SharpDX;
using SparkClient.Model.Helper;
using System;
@ -90,17 +91,17 @@ public class LevelConfigVM : BaseViewModel
}
private string setInstitutes(string id)
{
string insituteSql = $"SELECT * FROM RULE;";
string insituteSql = $"SELECT RULE_ID,RULE_NAME,RULE_EN_NAME FROM RULE WHERE RULE_ID NOT LIKE '%_TA_%';";
Institutes = DataBaseHelper.ExecuteQuery(insituteSql);
return Institutes.AsEnumerable().FirstOrDefault()["RULE_ID"].ToString();
}
private void setDataGrid(string shapeId, string ruleId)
{
string gradeSql = $"SELECT * FROM GRADE WHERE SHAPE_ID = '{shapeId}' AND RULE_ID = '{ruleId}' ORDER BY GRADE_ORDER;";
string gradeSql = $"SELECT GRADE_NAME,GRADE_EN_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;";
DataTable columnInfos = DataBaseHelper.ExecuteQuery(gradeSql);
string standardSql = $"SELECT * FROM STANDARD WHERE SHAPE_ID = '{shapeId}' AND RULE_ID = '{ruleId}' ORDER BY SUBSTR(0 || SORT, - 2), GRADE_ORDER;";
string standardSql = $"SELECT * FROM STANDARD WHERE SHAPE_ID = '{shapeId}' AND RULE_ID like '{ruleId}%' ORDER BY RULE_ID, SUBSTR(0 || SORT, - 2), GRADE_ORDER;";
DataTable rowInfos = DataBaseHelper.ExecuteQuery(standardSql);
setStandardList(columnInfos, rowInfos);
}
@ -119,7 +120,7 @@ public class LevelConfigVM : BaseViewModel
List<DataColumn> columns = new List<DataColumn>();
foreach (DataRow columnInfo in gradeList.Rows)
{
if (columns.Count == 0)
if ("1".Equals(columnInfo["GRADE_ORDER"].ToString()))
{
columns.Add(new DataColumn(columnInfo["GRADE_EN_NAME"].ToString()));
columns.Add(new DataColumn(columnInfo["GRADE_EN_NAME"].ToString()+"_"+1));
@ -144,79 +145,63 @@ public class LevelConfigVM : BaseViewModel
// 以标准名分组表示每一行
if (standardList != null)
{
var standards = standardList.AsEnumerable().GroupBy(r => r[STANDARD_NAME].ToString());
foreach (var standard in standards)
{
List<string> rowInfo = new List<string>();
foreach (DataRow columnInfo in gradeList.Rows)
var standardRules = standardList.AsEnumerable().GroupBy(r => r["RULE_ID"].ToString());
foreach (var ruleStandardList in standardRules) {
var standards = ruleStandardList.AsEnumerable().GroupBy(r => r[STANDARD_NAME].ToString());
foreach (var standard in standards)
{
// 每一行单元格内数据
var row = standard.Where(s => s["GRADE_ID"].ToString() == columnInfo["GRADE_ID"].ToString()).FirstOrDefault();
string value = "";
if (rowInfo.Count == 0)
{
value =
getFix(row, "MIN_PREFIX") +
row["STANDARD_MIN"].ToString() + row["UNIT"].ToString() + "-"
+ row["STANDARD_MAX"].ToString() + row["UNIT"].ToString()
+ getFix(row, "MIN_SUFFIX")
;
var arr = value.Split("\r\n",2);
rowInfo.Add(arr[0]);
if (arr.Length > 1) {
rowInfo.Add(arr[1]);
}
else
{
rowInfo.Add("");
}
}
else
List<string> rowInfo = new List<string>();
foreach (DataRow columnInfo in gradeList.Rows)
{
// 每一行单元格内数据
if (row["STANDARD_MIN"] == null || row["STANDARD_MIN"].ToString() == "")
var row = standard.Where(s => s["GRADE_ORDER"].ToString() == columnInfo["GRADE_ORDER"].ToString()).FirstOrDefault();
string value = "";
if (row == null )
{
value = getFix(row, "MIN_PREFIX")
+ row["MIN_NULL_REPALCE"].ToString()
+ getFix(row, "MIN_SUFFIX");
var arr = value.Split("\r\n", 2);
rowInfo.Insert(0, arr[0]);
if (arr.Length > 1)
if ("1".Equals(columnInfo["GRADE_ORDER"].ToString()))
{
rowInfo.Insert(0, arr[1]);
rowInfo.Add("-");
rowInfo.Add("");
}
else
{
rowInfo.Insert(0, "-");
rowInfo.Insert(0, "");
rowInfo.Add("-");
rowInfo.Add("");
}
continue;
}
else
if ("1".Equals(row["GRADE_ORDER"].ToString()))
{
value = getFix(row, "MIN_PREFIX")
+ row["STANDARD_MIN"].ToString()
+ row["UNIT"].ToString()
+ getFix(row, "MIN_SUFFIX");
var arr = value.Split("\r\n", 2);
rowInfo.Insert(0, arr[0]);
if (arr.Length > 1)
string Min = row["STANDARD_MIN"].ToString();
string Max = row["STANDARD_MAX"].ToString();
if (!string.IsNullOrEmpty(Min) && !string.IsNullOrEmpty(Max))
{
rowInfo.Insert(0, arr[1]);
value = getFix(row, "MIN_PREFIX") +
Min + row["UNIT"].ToString() + "-"
+ Max + row["UNIT"].ToString()
+ getFix(row, "MIN_SUFFIX")
;
}
else
else if (!string.IsNullOrEmpty(Min))
{
rowInfo.Insert(0, "");
value = getFix(row, "MIN_PREFIX") +
Min + row["UNIT"].ToString()
+ getFix(row, "MIN_SUFFIX")
;
}
}
if (row["STANDARD_MAX"] == null || row["STANDARD_MAX"].ToString() == "")
{
value = getFix(row, "MAX_PREFIX") +
row["MAX_NULL_REPALCE"].ToString()
+ getFix(row, "MAX_SUFFIX");
else if (!string.IsNullOrEmpty(Max))
{
value = getFix(row, "MIN_PREFIX") +
Max + row["UNIT"].ToString()
+ getFix(row, "MIN_SUFFIX")
;
}
var arr = value.Split("\r\n", 2);
rowInfo.Add(arr[0]);
if (arr.Length > 1)
{
if (arr.Length > 1) {
rowInfo.Add(arr[1]);
}
else
@ -226,27 +211,99 @@ public class LevelConfigVM : BaseViewModel
}
else
{
value = getFix(row, "MAX_PREFIX") +
row["STANDARD_MAX"].ToString() + row["UNIT"].ToString()
+ getFix(row, "MAX_SUFFIX");
var arr = value.Split("\r\n", 2);
rowInfo.Add(arr[0]);
if (arr.Length > 1)
// 每一行单元格内数据
if (row["STANDARD_MIN"] == null || row["STANDARD_MIN"].ToString() == "")
{
rowInfo.Add(arr[1]);
value = getFix(row, "MIN_PREFIX")
+ row["MIN_NULL_REPALCE"].ToString()
+ getFix(row, "MIN_SUFFIX");
var arr = value.Split("\r\n", 2);
rowInfo.Insert(0, arr[0]);
if (arr.Length > 1)
{
rowInfo.Insert(0, arr[1]);
}
else
{
rowInfo.Insert(0, "");
}
}
else
{
rowInfo.Add("");
value = getFix(row, "MIN_PREFIX")
+ row["STANDARD_MIN"].ToString()
+ row["UNIT"].ToString()
+ getFix(row, "MIN_SUFFIX");
var arr = value.Split("\r\n", 2);
rowInfo.Insert(0, arr[0]);
if (arr.Length > 1)
{
rowInfo.Insert(0, arr[1]);
}
else
{
rowInfo.Insert(0, "");
}
}
if (row["STANDARD_MAX"] == null || row["STANDARD_MAX"].ToString() == "")
{
value = getFix(row, "MAX_PREFIX") +
row["MAX_NULL_REPALCE"].ToString()
+ 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
{
value = getFix(row, "MAX_PREFIX") +
row["STANDARD_MAX"].ToString() + row["UNIT"].ToString()
+ 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("");
}
}
}
}
string ruleId = ruleStandardList.Key;
string prefix = "";
string ta = ruleId.Substring(ruleId.Length - 2);
if (ruleId.StartsWith("GB"))
{
if ("49".Equals(ta))
{
prefix = "[台宽比<" + ruleId.Substring(ruleId.Length - 2) + "] ";
}
else if ("71".Equals(ta))
{
prefix = "[台宽比>" + ruleId.Substring(ruleId.Length - 2) + "] ";
}
else
{
prefix = "[台宽比=" + ruleId.Substring(ruleId.Length - 2) + "] ";
}
}
rowInfo.Insert(0, prefix + standard.Key);
var showRow = StandardList.NewRow();
showRow.ItemArray = rowInfo.ToArray();
StandardList.Rows.Add(showRow);
}
rowInfo.Insert(0, standard.Key);
var showRow = StandardList.NewRow();
showRow.ItemArray = rowInfo.ToArray();
StandardList.Rows.Add(showRow);
}
}
}
@ -343,35 +400,42 @@ public class LevelConfigVM : BaseViewModel
// 标准数据登录
string gradeConfigSql = "";
int index = 0;
foreach (var gradeConfig in jsonEntity.GradeConfigs)
{
if (gradeConfigSql.Length == 0)
if (index == 0)
{
gradeConfigSql += gradeConfig.getDeleteSql();
}
gradeConfigSql += gradeConfig.getInsertSql();
index++;
}
index = 0;
foreach (var gradeConfigDetail in jsonEntity.GradeConfigDetails)
{
if (gradeConfigSql.Length == 0)
if (index == 0)
{
gradeConfigSql += gradeConfigDetail.getDeleteSql(shapeId,ruleId);
}
gradeConfigSql += gradeConfigDetail.getInsertSql();
index++;
}
index = 0;
foreach (var gradeConfigParameter in jsonEntity.GradeConfigParameters)
{
if (gradeConfigSql.Length == 0)
if (index == 0)
{
gradeConfigSql += gradeConfigParameter.getDeleteSql(shapeId, ruleId);
}
gradeConfigSql += gradeConfigParameter.getInsertSql();
index++;
}
count = DataBaseHelper.ExecuteNonQuery(gradeConfigSql);
if (count < 0)
{
DataBaseHelper.rollback();
Growl.Error(save_fail_message);
return;
}
DataBaseHelper.commit();
Growl.Info(Save_successful_message);
@ -408,6 +472,7 @@ public class LevelConfigVM : BaseViewModel
ShapesEnabled = false;
Microsoft.Win32.OpenFileDialog openFileDialog = new Microsoft.Win32.OpenFileDialog();
openFileDialog.Filter = "Text files (*.enc)|*.enc|All files (*.*)|*.*";
jsonEntity = null;
if (openFileDialog.ShowDialog() == true)
{
string filename = openFileDialog.FileName;
@ -418,6 +483,12 @@ public class LevelConfigVM : BaseViewModel
jsonEntity = JsonConvert.DeserializeObject<JsonEntity>(content);
}
}
else
{
InstitutesEnabled = true;
ShapesEnabled = true;
return;
}
if (jsonEntity != null)
{
// 形状列表重新生成

@ -81,7 +81,7 @@ namespace SparkClient.ViewModel.Configuration.SettingsPages
Rules = new DataTable();
Rules.Columns.Add("Key");
Rules.Columns.Add("Value");
string sql = $"SELECT * FROM RULE;";
string sql = $"SELECT * FROM RULE NOT LIKE '%_TA_%';";
DataTable db = DataBaseHelper.ExecuteQuery(sql);
foreach (DataRow row in db.Rows)
{

@ -64,8 +64,8 @@ public class GradingResultVM : BaseViewModel
private int totalCutGrade = 0;
private decimal totalSymGrade = 0;
private AlgorithmResultEntity algorithmResult;
private string username = "Lavanda";
private string machine = "71953";
private string username = "";
private string machine = "";
private string shapeId = string.Empty;
private string ruleId = string.Empty;
/// <summary>
@ -82,6 +82,7 @@ public class GradingResultVM : BaseViewModel
algorithmResult = result as AlgorithmResultEntity?? new AlgorithmResultEntity();
InitView(algorithmResult);
machine = algorithmResult.DeviceId;
username = Settings.SelectValueByName("PERMISSIONS");
}
DS = "NA";
AutoSave();
@ -93,7 +94,7 @@ public class GradingResultVM : BaseViewModel
// 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 = '{ruleId}'; ";
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);
}
private void InitViewportData(AlgorithmResultEntity result)
@ -137,7 +138,7 @@ public class GradingResultVM : BaseViewModel
DSList = new DataTable();
DSList.Columns.Add("Key");
DSList.Columns.Add("Value");
DSList.Rows.Add("NA", "NA");
DSList.Rows.Add("N/A", "NA");
DSList.Rows.Add("pass", "pass");
DSList.Rows.Add("refer", "refer");
}
@ -178,7 +179,7 @@ public class GradingResultVM : BaseViewModel
}
private string getRuleId()
{
return "IGI2023";
return Settings.SelectValueByName("RuleId");
}
#endregion
/// <summary>
@ -209,17 +210,52 @@ public class GradingResultVM : BaseViewModel
return list;
}
#region 定级计算
private string getActualRuleId()
{
string ruleIdForSelect = "";
if (ruleId.StartsWith("IGI"))
{
ruleIdForSelect = ruleId;
}
else if (ruleId.StartsWith("GB"))
{
double ta = algorithmResult.measurements.TABLE * 100;
ta = (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;
}
private List<CalGradeInfo> GetCalGradeInfos(string item)
{
string sql = $"Select GRADE_ORDER as gradeOrder,STANDARD_MIN Min, STANDARD_MAX 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 = '{ruleId}' ";
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;
}
private int calGrade(string item ,double value)
{
int order = 1;
decimal cValue = Convert.ToDecimal(value);
List<CalGradeInfo> calGrades = GetCalGradeInfos(item);
if (calGrades == null || calGrades.Count == 0)
{
return 0;
}
int order = 1;
foreach (CalGradeInfo gradeInfo in calGrades)
{
bool isThisGrade = true;
@ -321,6 +357,31 @@ public class GradingResultVM : BaseViewModel
result = GetGradeName(order);
return result;
}
private string calGrade_CULET(double avg)
{
string result = "";
int order = calGrade("CULET", avg * 100);
result = GetGradeName(order);
return result;
}
private string calGrade_STAR(double min, double max)
{
string result = "";
int order1 = calGrade("STAR", min * 100);
int order2 = calGrade("STAR", max * 100);
int order = Math.Max(order1, order2);
result = GetGradeName(order);
return result;
}
private string calGrade_LOWER_HALVES_RATIO(double min, double max)
{
string result = "";
int order1 = calGrade("LOWER_HALVES_RATIO", min * 100);
int order2 = calGrade("LOWER_HALVES_RATIO", max * 100);
int order = Math.Max(order1, order2);
result = GetGradeName(order);
return result;
}
#endregion
#region 参数列表行编辑
private DataInfo getDIAMETER(AlgorithmResultEntity result)
@ -455,6 +516,7 @@ public class GradingResultVM : BaseViewModel
info.Avg = FormatDouble_Avg(result.measurements.STAR*100, Accuracy.Z5);
info.Min = FormatDouble_P(result.measurements.STAR_MIN);
info.Max = FormatDouble_P(result.measurements.STAR_MAX);
info.CutLevel = calGrade_STAR(result.measurements.STAR_MIN, result.measurements.STAR_MAX);
info.isEnabled = false;
return info;
}
@ -467,6 +529,7 @@ public class GradingResultVM : BaseViewModel
info.Avg = FormatDouble_Avg(result.measurements.LOWER_HALVES_RATIO*100, Accuracy.Z5);
info.Min = FormatDouble_P(result.measurements.LOWER_HALVES_RATIO_MIN);
info.Max = FormatDouble_P(result.measurements.LOWER_HALVES_RATIO_MAX);
info.CutLevel = calGrade_LOWER_HALVES_RATIO(result.measurements.LOWER_HALVES_RATIO_MIN, result.measurements.LOWER_HALVES_RATIO_MAX);
info.isEnabled = false;
return info;
}
@ -477,6 +540,7 @@ public class GradingResultVM : BaseViewModel
info.TestItemId = "CULET";
info.TestItemName = GetName("CULET");
info.Avg = FormatDouble_Avg(result.measurements.CULET * 100, Accuracy.ZD1);
info.CutLevel = calGrade_CULET(result.measurements.CULET);
info.isEnabled = false;
return info;
}

Loading…
Cancel
Save