diff --git a/Model/Entity/JsonEntity.cs b/Model/Entity/JsonEntity.cs index fd7dd29..dd4e56c 100644 --- a/Model/Entity/JsonEntity.cs +++ b/Model/Entity/JsonEntity.cs @@ -18,19 +18,37 @@ namespace EncryptFileTool.Entity { public string SHAPE_ID { get; set; } public string SHAPE_NAME { get; set; } - public string SHAPE_EN_NAME { get; set; } - public string RULE_ID { get; set; } + public string RULE_ID { get; set; } public string RULE_NAME { get; set; } - public string RULE_EN_NAME { get; set; } - public List gradeInfos { get; set; } = new List(); public List standardInfos { get; set; } = new List(); - public List GradeConfigs { get; set; } = new List(); - public List GradeConfigDetails { get; set; } = new List(); - public List GradeConfigParameters { get; set; } = new List(); + public virtual IEnumerable GradeConfigs { get; set; } = new List(); + public virtual IEnumerable GradeConfigDetails { get; set; } = new List(); + public virtual IEnumerable GradeConfigParameters { get; set; } = new List(); + + // 辅助方法:生成插入 SQL 语句 + internal static string GenerateInsertSql(string tableName, string[] columns, string[] values) + { + var columnList = string.Join(",", columns); + var valueList = string.Join(",", values.Select(v => $"'{EscapeSql(v)}'")); + return $"INSERT INTO {tableName}({columnList}) VALUES({valueList});"; + } + + // 辅助方法:生成删除 SQL 语句 + internal static string GenerateDeleteSql(string tableName, string condition) + { + return $"DELETE FROM {tableName} WHERE {condition};"; + } + + // 辅助方法:转义 SQL 特殊字符 + internal static string EscapeSql(string input) + { + return input?.Replace("'", "''") ?? null; + } } + public class GradeInfo { public string SHAPE_ID { get; set; } @@ -41,38 +59,20 @@ namespace EncryptFileTool.Entity public string GRADE_EN_S_NAME { get; set; } public int GRADE_ORDER { get; set; } - public string getInsertSql() + // 声明为 virtual 以便子类重写 + public virtual string getInsertSql() { - string insertSql = "INSERT INTO GRADE("; - insertSql = insertSql + - "SHAPE_ID" + - ",RULE_ID" + - ",GRADE_ID" + - ",GRADE_NAME" + - ",GRADE_EN_NAME" + - ",GRADE_EN_S_NAME" + - ",GRADE_ORDER" + - ",GUID"; - insertSql = insertSql + ")VALUES("; - insertSql = insertSql + - $"'{SHAPE_ID}'" + - $",'{RULE_ID}'" + - $",'{GRADE_ID}'" + - $",'{GRADE_NAME}'" + - $",'{GRADE_EN_NAME}'" + - $",'{GRADE_EN_S_NAME}'" + - $",'{GRADE_ORDER}'" + - $",'{Guid.NewGuid().ToString()}'"; - - insertSql = insertSql + ");"; - return insertSql; + return JsonEntity.GenerateInsertSql("GRADE", new[] { "SHAPE_ID", "RULE_ID", "GRADE_ID", "GRADE_NAME", "GRADE_EN_NAME", "GRADE_EN_S_NAME", "GRADE_ORDER", "GUID" }, + new[] { SHAPE_ID, RULE_ID, GRADE_ID, GRADE_NAME, GRADE_EN_NAME, GRADE_EN_S_NAME, GRADE_ORDER.ToString(), Guid.NewGuid().ToString() }); } - public string getDeleteSql() + + // 声明为 virtual 以便子类重写 + public virtual string getDeleteSql() { - string deleteSql = $"DELETE FROM GRADE WHERE SHAPE_ID='{SHAPE_ID}' AND RULE_ID='{RULE_ID}';"; - return deleteSql; + return JsonEntity.GenerateDeleteSql("GRADE", $"SHAPE_ID='{JsonEntity.EscapeSql(SHAPE_ID)}' AND RULE_ID='{JsonEntity.EscapeSql(RULE_ID)}'"); } } + public class StandardInfo { public string RULE_ID { get; set; } = ""; @@ -81,7 +81,7 @@ namespace EncryptFileTool.Entity public string TEST_ITEM_ID { get; set; } public string STANDARD_ID { get; set; } public string STANDARD_NAME { get; set; } - public string STANDARD_EN_NAME { get{ return getStandEnName(); } set { } } + public string STANDARD_EN_NAME { get { return getStandEnName(); } set { } } public string STANDARD_MIN { get; set; } public string STANDARD_MAX { get; set; } public string IS_MIN_EXIST { get; set; } = "0"; @@ -94,12 +94,13 @@ namespace EncryptFileTool.Entity public string MIN_NULL_REPALCE { get; set; } = "←"; public string MAX_NULL_REPALCE { get; set; } = "→"; public int SORT { get; set; } + private string getStandEnName() { - return Name.getNameById(TEST_ITEM_ID).Trim(); - + return Name.getNameById(TEST_ITEM_ID).Trim(); } } + public class GradeConfigInfo { public string GRADE_CONFIG_ID { get; set; } @@ -107,64 +108,41 @@ namespace EncryptFileTool.Entity public string RULE_ID { get; set; } public string TEST_ITEM_ID { get; set; } public int GRADE_CONFIG_ORDER { get; set; } - public string getInsertSql() + + // 声明为 virtual 以便子类重写 + public virtual string getInsertSql() { - string insertSql = "INSERT INTO GRADE_CONFIG("; - insertSql = insertSql + - "GRADE_CONFIG_ID" + - ",SHAPE_ID" + - ",RULE_ID" + - ",TEST_ITEM_ID" + - ",GRADE_CONFIG_ORDER" + - ",GUID"; - insertSql = insertSql + ")VALUES("; - insertSql = insertSql + - $"'{GRADE_CONFIG_ID}'" + - $",'{SHAPE_ID}'" + - $",'{RULE_ID}'" + - $",'{TEST_ITEM_ID}'" + - $",'{GRADE_CONFIG_ORDER}'" + - $",'{Guid.NewGuid().ToString()}'"; - - insertSql = insertSql + ");"; - return insertSql; + return JsonEntity.GenerateInsertSql("GRADE_CONFIG", new[] { "GRADE_CONFIG_ID", "SHAPE_ID", "RULE_ID", "TEST_ITEM_ID", "GRADE_CONFIG_ORDER", "GUID" }, + new[] { GRADE_CONFIG_ID, SHAPE_ID, RULE_ID, TEST_ITEM_ID, GRADE_CONFIG_ORDER.ToString(), Guid.NewGuid().ToString() }); } - public string getDeleteSql() + + // 声明为 virtual 以便子类重写 + public virtual string getDeleteSql() { - string deleteSql = $"DELETE FROM GRADE_CONFIG WHERE SHAPE_ID='{SHAPE_ID}' AND RULE_ID='{RULE_ID}';"; - return deleteSql; + return JsonEntity.GenerateDeleteSql("GRADE_CONFIG", $"SHAPE_ID='{JsonEntity.EscapeSql(SHAPE_ID)}' AND RULE_ID='{JsonEntity.EscapeSql(RULE_ID)}'"); } } + public class GradeConfigDetail { public string GRADE_CONFIG_ID { get; set; } public int GRADE_CONFIG_DETAIL_ID { get; set; } public string GRADE_ID { get; set; } - public string getInsertSql() + + // 声明为 virtual 以便子类重写 + public virtual string getInsertSql() { - string insertSql = "INSERT INTO GRADE_CONFIG_DETAIL("; - insertSql = insertSql + - "GRADE_CONFIG_ID" + - ",GRADE_CONFIG_DETAIL_ID" + - ",GRADE_ID" + - ",GUID"; - insertSql = insertSql + ")VALUES("; - insertSql = insertSql + - $"'{GRADE_CONFIG_ID}'" + - $",'{GRADE_CONFIG_DETAIL_ID}'" + - $",'{GRADE_ID}'" + - $",'{Guid.NewGuid().ToString()}'"; - - insertSql = insertSql + ");"; - return insertSql; + return JsonEntity.GenerateInsertSql("GRADE_CONFIG_DETAIL", new[] { "GRADE_CONFIG_ID", "GRADE_CONFIG_DETAIL_ID", "GRADE_ID", "GUID" }, + new[] { GRADE_CONFIG_ID, GRADE_CONFIG_DETAIL_ID.ToString(), GRADE_ID, Guid.NewGuid().ToString() }); } - public string getDeleteSql(string shapeId,string ruleId) + + // 声明为 virtual 以便子类重写 + public virtual string getDeleteSql(string shapeId, string ruleId) { - string deleteSql = $"DELETE FROM GRADE_CONFIG_DETAIL WHERE GRADE_CONFIG_ID LIKE '{shapeId+ruleId}%';"; - return deleteSql; + return JsonEntity.GenerateDeleteSql("GRADE_CONFIG_DETAIL", $"GRADE_CONFIG_ID LIKE '{JsonEntity.EscapeSql(shapeId + ruleId)}%'"); } - } + public class GradeConfigParameter { public string GRADE_CONFIG_ID { get; set; } @@ -172,32 +150,18 @@ namespace EncryptFileTool.Entity public string PARAMETER_KEY { get; set; } public string PARAMETER_VALUE { get; set; } public string PARAMETER_TYPE { get; set; } - public string getInsertSql() + + // 声明为 virtual 以便子类重写 + public virtual string getInsertSql() { - string insertSql = "INSERT INTO GRADE_CONFIG_DETAIL_PARAMETER("; - insertSql = insertSql + - "GRADE_CONFIG_ID" + - ",GRADE_CONFIG_DETAIL_ID" + - ",PARAMETER_KEY" + - ",PARAMETER_VALUE" + - ",PARAMETER_TYPE" + - ",GUID"; - insertSql = insertSql + ")VALUES("; - insertSql = insertSql + - $"'{GRADE_CONFIG_ID}'" + - $",'{GRADE_CONFIG_DETAIL_ID}'" + - $",'{PARAMETER_KEY}'" + - $",'{PARAMETER_VALUE}'" + - $",'{PARAMETER_TYPE}'" + - $",'{Guid.NewGuid().ToString()}'"; - - insertSql = insertSql + ");"; - return insertSql; + return JsonEntity.GenerateInsertSql("GRADE_CONFIG_DETAIL_PARAMETER", new[] { "GRADE_CONFIG_ID", "GRADE_CONFIG_DETAIL_ID", "PARAMETER_KEY", "PARAMETER_VALUE", "PARAMETER_TYPE", "GUID" }, + new[] { GRADE_CONFIG_ID, GRADE_CONFIG_DETAIL_ID.ToString(), PARAMETER_KEY, PARAMETER_VALUE, PARAMETER_TYPE, Guid.NewGuid().ToString() }); } - public string getDeleteSql(string shapeId, string ruleId) + + // 声明为 virtual 以便子类重写 + public virtual string getDeleteSql(string shapeId, string ruleId) { - string deleteSql = $"DELETE FROM GRADE_CONFIG_DETAIL_PARAMETER WHERE GRADE_CONFIG_ID LIKE '{shapeId + ruleId}%';"; - return deleteSql; + return JsonEntity.GenerateDeleteSql("GRADE_CONFIG_DETAIL_PARAMETER", $"GRADE_CONFIG_ID LIKE '{JsonEntity.EscapeSql(shapeId + ruleId)}%'"); } } -} +} \ No newline at end of file diff --git a/Model/Entity/JsonEntity_SYM.cs b/Model/Entity/JsonEntity_SYM.cs new file mode 100644 index 0000000..5cede00 --- /dev/null +++ b/Model/Entity/JsonEntity_SYM.cs @@ -0,0 +1,72 @@ +using SparkClient.ViewModel.Grading; +using System; +using System.Collections.Generic; +using System.Data; +using System.Linq; +using System.Reflection; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Documents; +using System.Windows.Shapes; + +namespace EncryptFileTool.Entity +{ + /// + /// 定级配置导入数据 + /// + public class JsonEntity_SYM : JsonEntity + { + // 修改属性类型为基类类型 + public override IEnumerable GradeConfigs { get; set; } = new List(); + public override IEnumerable GradeConfigDetails { get; set; } = new List(); + public override IEnumerable GradeConfigParameters { get; set; } = new List(); + } + + public class GradeConfigInfo_SYM : GradeConfigInfo + { + // 使用 override 关键字重写方法 + public override string getInsertSql() + { + return JsonEntity.GenerateInsertSql("SYM_GRADE_CONFIG", new[] { "GRADE_CONFIG_ID", "SHAPE_ID", "RULE_ID", "TEST_ITEM_ID", "GRADE_CONFIG_ORDER", "GUID" }, + new[] { GRADE_CONFIG_ID, SHAPE_ID, RULE_ID, TEST_ITEM_ID, GRADE_CONFIG_ORDER.ToString(), Guid.NewGuid().ToString() }); + } + + // 使用 override 关键字重写方法 + public override string getDeleteSql() + { + return JsonEntity.GenerateDeleteSql("SYM_GRADE_CONFIG", $"SHAPE_ID='{JsonEntity.EscapeSql(SHAPE_ID)}' AND RULE_ID='{JsonEntity.EscapeSql(RULE_ID)}'"); + } + } + + public class GradeConfigDetail_SYM : GradeConfigDetail + { + // 使用 override 关键字重写方法 + public override string getInsertSql() + { + return JsonEntity.GenerateInsertSql("SYM_GRADE_CONFIG_DETAIL", new[] { "GRADE_CONFIG_ID", "GRADE_CONFIG_DETAIL_ID", "GRADE_ID", "GUID" }, + new[] { GRADE_CONFIG_ID, GRADE_CONFIG_DETAIL_ID.ToString(), GRADE_ID, Guid.NewGuid().ToString() }); + } + + // 使用 override 关键字重写方法 + public override string getDeleteSql(string shapeId, string ruleId) + { + return JsonEntity.GenerateDeleteSql("SYM_GRADE_CONFIG_DETAIL", $"GRADE_CONFIG_ID LIKE '{JsonEntity.EscapeSql(shapeId + ruleId)}%'"); + } + } + + public class GradeConfigParameter_SYM : GradeConfigParameter + { + // 使用 override 关键字重写方法 + public override string getInsertSql() + { + return JsonEntity.GenerateInsertSql("SYM_GRADE_CONFIG_DETAIL_PARAMETER", new[] { "GRADE_CONFIG_ID", "GRADE_CONFIG_DETAIL_ID", "PARAMETER_KEY", "PARAMETER_VALUE", "PARAMETER_TYPE", "GUID" }, + new[] { GRADE_CONFIG_ID, GRADE_CONFIG_DETAIL_ID.ToString(), PARAMETER_KEY, PARAMETER_VALUE, PARAMETER_TYPE, Guid.NewGuid().ToString() }); + } + + // 使用 override 关键字重写方法 + public override string getDeleteSql(string shapeId, string ruleId) + { + return JsonEntity.GenerateDeleteSql("SYM_GRADE_CONFIG_DETAIL_PARAMETER", $"GRADE_CONFIG_ID LIKE '{JsonEntity.EscapeSql(shapeId + ruleId)}%'"); + } + } +} \ No newline at end of file diff --git a/SparkDB.db b/SparkDB.db index b73a0d3..5022d56 100644 Binary files a/SparkDB.db and b/SparkDB.db differ diff --git a/ViewModel/Configuration/LevelConfigVM.cs b/ViewModel/Configuration/LevelConfigVM.cs index 8427a08..a8dd40d 100644 --- a/ViewModel/Configuration/LevelConfigVM.cs +++ b/ViewModel/Configuration/LevelConfigVM.cs @@ -75,6 +75,7 @@ public class LevelConfigVM : BaseViewModel /// 导入文件数据 /// JsonEntity jsonEntity = new JsonEntity(); + JsonEntity_SYM jsonEntity_SYM = new JsonEntity_SYM(); private string Save_successful_message = MultilingualHelper.getString("Save_successful_message"); private string save_fail_message = MultilingualHelper.getString("save_fail_message"); @@ -462,10 +463,21 @@ public class LevelConfigVM : BaseViewModel [Log] public void SaveLevelConfig(object param) { - try { - string shapeId = jsonEntity.SHAPE_ID; - string ruleId = jsonEntity.RULE_ID; - if (jsonEntity != null) + JsonEntity initJsonEntity = new JsonEntity(); + if (jsonEntity == null) + { + initJsonEntity = jsonEntity_SYM; + } + else + { + initJsonEntity = jsonEntity; + } + + try + { + string shapeId = initJsonEntity.SHAPE_ID; + string ruleId = initJsonEntity.RULE_ID; + if (initJsonEntity != null) { // 按照形状名查询形状数据,判断是否有该数据 string shapeSql = $"SELECT * FROM SHAPE WHERE SHAPE_ID = '{shapeId}';"; @@ -476,21 +488,21 @@ public class LevelConfigVM : BaseViewModel if (shapes == null || shapes.Rows.Count == 0) { // 数据登录 - string shapeInsertSql = $"INSERT INTO SHAPE (SHAPE_ID,SHAPE_NAME,SHAPE_EN_NAME,GUID)VALUES('{shapeId}','{jsonEntity.SHAPE_NAME}','{jsonEntity.SHAPE_EN_NAME}','{Guid.NewGuid().ToString()}');"; + string shapeInsertSql = $"INSERT INTO SHAPE (SHAPE_ID,SHAPE_NAME,SHAPE_EN_NAME,GUID)VALUES('{shapeId}','{initJsonEntity.SHAPE_NAME}','{initJsonEntity.SHAPE_EN_NAME}','{Guid.NewGuid().ToString()}');"; DataBaseHelper.ExecuteNonQuery(shapeInsertSql); } string ruleSql = $"SELECT * FROM RULE WHERE RULE_ID = '{ruleId}';"; DataTable rule = DataBaseHelper.ExecuteQuery(ruleSql); if (rule == null || rule.Rows.Count == 0) { - - string ruleInsertSql = $"INSERT INTO RULE (RULE_ID,RULE_NAME,RULE_EN_NAME,GUID)VALUES('{ruleId}','{jsonEntity.RULE_NAME}','{jsonEntity.RULE_EN_NAME}','{Guid.NewGuid().ToString()}');"; + + string ruleInsertSql = $"INSERT INTO RULE (RULE_ID,RULE_NAME,RULE_EN_NAME,GUID)VALUES('{ruleId}','{initJsonEntity.RULE_NAME}','{initJsonEntity.RULE_EN_NAME}','{Guid.NewGuid().ToString()}');"; DataBaseHelper.ExecuteNonQuery(ruleInsertSql); } - + // 定级数据登录 string gradeInsSql = ""; - foreach (var gradeInfo in jsonEntity.gradeInfos) + foreach (var gradeInfo in initJsonEntity.gradeInfos) { if (gradeInsSql.Length == 0) { @@ -499,7 +511,7 @@ public class LevelConfigVM : BaseViewModel gradeInsSql += gradeInfo.getInsertSql(); } int count = DataBaseHelper.ExecuteNonQuery(gradeInsSql); - if (count<0) + if (count < 0) { DataBaseHelper.rollback(); Growl.Error(save_fail_message); @@ -508,7 +520,7 @@ public class LevelConfigVM : BaseViewModel // 标准数据登录 string gradeConfigSql = ""; int index = 0; - foreach (var gradeConfig in jsonEntity.GradeConfigs) + foreach (var gradeConfig in initJsonEntity.GradeConfigs) { if (index == 0) { @@ -518,17 +530,17 @@ public class LevelConfigVM : BaseViewModel index++; } index = 0; - foreach (var gradeConfigDetail in jsonEntity.GradeConfigDetails) + foreach (var gradeConfigDetail in initJsonEntity.GradeConfigDetails) { if (index == 0) { - gradeConfigSql += gradeConfigDetail.getDeleteSql(shapeId,ruleId); + gradeConfigSql += gradeConfigDetail.getDeleteSql(shapeId, ruleId); } gradeConfigSql += gradeConfigDetail.getInsertSql(); index++; } index = 0; - foreach (var gradeConfigParameter in jsonEntity.GradeConfigParameters) + foreach (var gradeConfigParameter in initJsonEntity.GradeConfigParameters) { if (index == 0) { @@ -555,7 +567,8 @@ public class LevelConfigVM : BaseViewModel Growl.ErrorGlobal(no_data_message); } } - catch (Exception ex) { + catch (Exception ex) + { DataBaseHelper.rollback(); Logger.Error($"全局异常捕获:{ex.Message}", ex); new MessageBox().Show($"{MultilingualHelper.getString("ApplicationError")}{ex.Message}"); @@ -584,6 +597,7 @@ public class LevelConfigVM : BaseViewModel Microsoft.Win32.OpenFileDialog openFileDialog = new Microsoft.Win32.OpenFileDialog(); openFileDialog.Filter = "Text files (*.enc)|*.enc|All files (*.*)|*.*"; jsonEntity = null; + jsonEntity_SYM = null; if (openFileDialog.ShowDialog() == true) { string filename = openFileDialog.FileName; @@ -593,7 +607,15 @@ public class LevelConfigVM : BaseViewModel try { content = AESHelper.DecryptFile(filename, "000000"); - jsonEntity = JsonConvert.DeserializeObject(content); + if (filename.EndsWith("_SYM.enc")) + { + jsonEntity_SYM = JsonConvert.DeserializeObject(content); + } + else + { + jsonEntity = JsonConvert.DeserializeObject(content); + } + } catch (Exception ex) { @@ -612,19 +634,28 @@ public class LevelConfigVM : BaseViewModel //ChangeShapeModel(""); return; } - if (jsonEntity != null) + var initJsonEntity = new JsonEntity(); + + if (jsonEntity != null) { + initJsonEntity = jsonEntity; + } + else + { + initJsonEntity = jsonEntity_SYM; + } + if (initJsonEntity != null) { // 形状列表重新生成 - string shapeSql = $"SELECT * FROM SHAPE WHERE SHAPE_ID = '{jsonEntity.SHAPE_ID}';"; + string shapeSql = $"SELECT * FROM SHAPE WHERE SHAPE_ID = '{initJsonEntity.SHAPE_ID}';"; DataTable shapes = DataBaseHelper.ExecuteQuery(shapeSql); if (shapes == null || shapes.Rows.Count == 0) { var row = Shapes.NewRow(); - row["SHAPE_ID"] = jsonEntity.SHAPE_ID; - row["SHAPE_NAME"] = jsonEntity.SHAPE_NAME; - row["SHAPE_EN_NAME"] = jsonEntity.SHAPE_EN_NAME; + row["SHAPE_ID"] = initJsonEntity.SHAPE_ID; + row["SHAPE_NAME"] = initJsonEntity.SHAPE_NAME; + row["SHAPE_EN_NAME"] = initJsonEntity.SHAPE_EN_NAME; Shapes.Rows.Add(row); - ShapeId = jsonEntity.SHAPE_ID; + ShapeId = initJsonEntity.SHAPE_ID; } else { @@ -632,25 +663,25 @@ public class LevelConfigVM : BaseViewModel } // 机构列表重新生成 - string instituteSql = $"SELECT * FROM RULE WHERE RULE_ID = '{jsonEntity.RULE_ID}';"; + string instituteSql = $"SELECT * FROM RULE WHERE RULE_ID = '{initJsonEntity.RULE_ID}';"; DataTable institute = DataBaseHelper.ExecuteQuery(instituteSql); if (institute == null || institute.Rows.Count == 0) { var row = Institutes.NewRow(); - row["RULE_ID"] = jsonEntity.RULE_ID; - row["RULE_NAME"] = jsonEntity.RULE_NAME; - row["RULE_EN_NAME"] = jsonEntity.RULE_EN_NAME; + row["RULE_ID"] = initJsonEntity.RULE_ID; + row["RULE_NAME"] = initJsonEntity.RULE_NAME; + row["RULE_EN_NAME"] = initJsonEntity.RULE_EN_NAME; Institutes.Rows.Add(row); - InstituteId = jsonEntity.RULE_ID; + InstituteId = initJsonEntity.RULE_ID; } else { InstituteId = institute.Rows[0]["RULE_ID"].ToString() ?? ""; } // 表格内容重新生成 - string gradeInfosJson = JsonConvert.SerializeObject(jsonEntity.gradeInfos); + string gradeInfosJson = JsonConvert.SerializeObject(initJsonEntity.gradeInfos); DataTable gradeInfos = Common.JsonToDataTable(gradeInfosJson); - string standardInfosJson = JsonConvert.SerializeObject(jsonEntity.standardInfos); + string standardInfosJson = JsonConvert.SerializeObject(initJsonEntity.standardInfos); DataTable standardInfos = Common.JsonToDataTable(standardInfosJson); setStandardList(gradeInfos, standardInfos); InstitutesEnabled = false; diff --git a/ViewModel/Grading/GradingResultVM.cs b/ViewModel/Grading/GradingResultVM.cs index 60415f3..55b148b 100644 --- a/ViewModel/Grading/GradingResultVM.cs +++ b/ViewModel/Grading/GradingResultVM.cs @@ -425,14 +425,91 @@ public class GradingResultVM : BaseViewModel List calGrades = DataBaseHelper.ExecuteQuery(sql); return calGrades; } + private List 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 calGrades = DataBaseHelper.ExecuteQuery(sql); + return calGrades; + } [Log] - private int calGrade(string item ,double value) + private int calGradeSym(string item, double value) { int order = 1; try { decimal cValue = Convert.ToDecimal(value); - List calGrades = GetCalGradeInfos(item); + List calGrades = GetCalGradeInfos_SYM(item); + + if (calGrades == null || calGrades.Count == 0) + { + return 0; + } + 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) + { + order = gradeInfo.gradeOrder; + break; + } + else + { + order = gradeInfo.gradeOrder; + } + } + totalSymGrade = Math.Max(order, totalSymGrade); + } + catch (Exception ex) + { + new MessageBox().Show($"{MultilingualHelper.getString("ApplicationError")}{ex.Message}"); + Logger.Error($"全局异常捕获:{ex.Message}", ex); + } + return order; + } + [Log] + private int calGrade(string item ,double value,bool isCut=true) + { + int order = 1; + try + { + decimal cValue = Convert.ToDecimal(value); + List calGrades = new(); + if (isCut) + { + calGrades = GetCalGradeInfos(item); + } + else + { + calGrades = GetCalGradeInfos_SYM(item); + } if (calGrades == null || calGrades.Count == 0) { return 0; @@ -591,7 +668,15 @@ public class GradingResultVM : BaseViewModel decimal.TryParse(min, out Min); return (Max-Min).ToString(); } - + private double calSymValue(double Min, double Max, double Avg,bool isPercentage = true) + { + int c = 100; + if (isPercentage) + { + c = 10000; + } + return (Max - Min) / Avg * c; + } [Log] private DataInfo getDIAMETER(AlgorithmResultEntity result) { @@ -603,6 +688,8 @@ public class GradingResultVM : BaseViewModel info.Min = FormatDouble_D(result.measurements.M1); info.Max = FormatDouble_D(result.measurements.M2); info.Dev = calDev(info.Max, info.Min); + var data = result.measurements; + info.SymLevel = calGradeSym("DIAMETER", calSymValue(data.M1, data.M2, data.DIAMETER,false)); return info; } [Log] @@ -643,6 +730,8 @@ public class GradingResultVM : BaseViewModel info.Max = FormatDouble_A(result.measurements.CROWN_ANGLE_MAX); info.CutLevel = calGrade_CROWN_ANGLE(result.measurements.CROWN_ANGLE_MIN, result.measurements.CROWN_ANGLE_MAX); info.Dev = calDev(info.Max, info.Min); + var data = result.measurements; + info.SymLevel = calGradeSym(info.TestItemId, calSymValue(data.CROWN_ANGLE_MIN, data.CROWN_ANGLE_MAX, data.CROWN_ANGLE,false)); return info; } @@ -658,6 +747,8 @@ public class GradingResultVM : BaseViewModel info.Max = FormatDouble_P(result.measurements.CROWN_H_MAX); info.CutLevel = calGrade_CROWN_HEIGHT(result.measurements.CROWN_H_MIN, result.measurements.CROWN_H_MAX); info.Dev = calDev(info.Max, info.Min); + var data = result.measurements; + info.SymLevel = calGradeSym(info.TestItemId, calSymValue(data.CROWN_H_MIN, data.CROWN_H_MAX, data.CROWN_HEIGHT)); return info; } @@ -672,6 +763,8 @@ public class GradingResultVM : BaseViewModel info.Min = FormatDouble_P(result.measurements.GIRDLE_BEZEL_MIN); info.Max = FormatDouble_P(result.measurements.GIRDLE_BEZEL_MAX); info.Dev = calDev(info.Max, info.Min); + var data = result.measurements; + info.SymLevel = calGradeSym(info.TestItemId, calSymValue(data.GIRDLE_BEZEL_MIN, data.GIRDLE_BEZEL_MAX, data.GIRDLE_BEZEL)); return info; } @@ -700,6 +793,8 @@ public class GradingResultVM : BaseViewModel info.Max = FormatDouble_P(result.measurements.GIRDLE_VALLEY_MAX); info.CutLevel = calGrade_GIRDLE(result.measurements.GIRDLE_VALLEY_MIN, result.measurements.GIRDLE_VALLEY_MAX); info.Dev = calDev(info.Max, info.Min); + var data = result.measurements; + info.SymLevel = calGradeSym(info.TestItemId, calSymValue(data.GIRDLE_VALLEY_MIN, data.GIRDLE_VALLEY_MAX, data.GIRDLE_VALLEY)); return info; } @@ -715,6 +810,8 @@ public class GradingResultVM : BaseViewModel info.Max = FormatDouble_A(result.measurements.PAV_ANGLE_MAX); info.CutLevel = calGrade_PAV_ANGLE(result.measurements.PAV_ANGLE_MIN, result.measurements.PAV_ANGLE_MAX); info.Dev = calDev(info.Max, info.Min); + var data = result.measurements; + info.SymLevel = calGradeSym(info.TestItemId, calSymValue(data.PAV_ANGLE_MIN, data.PAV_ANGLE_MAX, data.PAV_ANGLE, false)); return info; } @@ -730,6 +827,8 @@ public class GradingResultVM : BaseViewModel info.Max = FormatDouble_P(result.measurements.PAV_DEPTH_MAX); info.CutLevel = calGrade_PAV_DEPTH(result.measurements.PAV_DEPTH_MIN, result.measurements.PAV_DEPTH_MAX); info.Dev = calDev(info.Max, info.Min); + var data = result.measurements; + info.SymLevel = calGradeSym(info.TestItemId, calSymValue(data.PAV_DEPTH_MIN, data.PAV_DEPTH_MAX, data.PAV_DEPTH)); return info; } @@ -780,6 +879,8 @@ public class GradingResultVM : BaseViewModel info.TestItemId = "TOC"; info.TestItemName = GetName("TOC"); info.Avg = FormatDouble_Avg(result.measurements.TOC * 100, Accuracy.ZD1); + var data = result.measurements; + info.SymLevel = calGradeSym(info.TestItemId, data.TOC * 100); return info; } @@ -790,6 +891,8 @@ public class GradingResultVM : BaseViewModel info.TestItemId = "COC"; info.TestItemName = GetName("COC"); info.Avg = FormatDouble_Avg(result.measurements.COC*100, Accuracy.ZD1); + var data = result.measurements; + info.SymLevel = calGradeSym(info.TestItemId, data.COC * 100); return info; } @@ -804,6 +907,8 @@ public class GradingResultVM : BaseViewModel info.Min = FormatDouble_A(result.measurements.TWIST_MIN); info.Max = FormatDouble_A(result.measurements.TWIST_MAX); info.Dev = calDev(info.Max, info.Min); + var data = result.measurements; + info.SymLevel = calGradeSym(info.TestItemId, calSymValue(data.TWIST_MIN, data.TWIST_MAX, data.TWIST)); return info; } @@ -814,6 +919,8 @@ public class GradingResultVM : BaseViewModel info.TestItemId = "CULET_TO_TABLE"; info.TestItemName = GetName("CULET_TO_TABLE"); info.Avg = FormatDouble_Avg(result.measurements.CULET_TO_TABLE*100,Accuracy.ZD1); + var data = result.measurements; + info.SymLevel = calGradeSym(info.TestItemId, data.CULET_TO_TABLE * 100); return info; } #endregion