diff --git a/Language/en_US.xaml b/Language/en_US.xaml index 710dc07..04e1ddd 100644 --- a/Language/en_US.xaml +++ b/Language/en_US.xaml @@ -22,7 +22,11 @@ Do you want to exit the application? Exit Confirmation - + GRADE_EN_NAME + STANDARD_EN_NAME + SHAPE_EN_NAME + INSTITUTE_EN_NAME + Average diff --git a/Language/zh_CN.xaml b/Language/zh_CN.xaml index 8a69a87..e608003 100644 --- a/Language/zh_CN.xaml +++ b/Language/zh_CN.xaml @@ -40,7 +40,14 @@ 取消 确认 - + 数据保存成功 + 数据保存失败 + 没有导入数据 + 参数 \\ 切工等级 + GRADE_NAME + STANDARD_NAME + SHAPE_NAME + INSTITUTE_NAME 平均 diff --git a/Model/Helper/DataBaseHelper.cs b/Model/Helper/DataBaseHelper.cs index 8324d62..e68c52f 100644 --- a/Model/Helper/DataBaseHelper.cs +++ b/Model/Helper/DataBaseHelper.cs @@ -120,6 +120,10 @@ public class DataBaseHelper SqliteCommand cmd = new SqliteCommand(); cmd.Connection = connection; cmd.CommandText = sql; + if(sqliteTransaction != null) + { + cmd.Transaction = sqliteTransaction; + } if (sqlParameters != null) { cmd.Parameters.AddRange(sqlParameters); diff --git a/ViewModel/Configuration/LevelConfigVM.cs b/ViewModel/Configuration/LevelConfigVM.cs index 5ec3eb3..c2cd9e8 100644 --- a/ViewModel/Configuration/LevelConfigVM.cs +++ b/ViewModel/Configuration/LevelConfigVM.cs @@ -1,9 +1,15 @@ -using Newtonsoft.Json; +using HandyControl.Controls; +using Newtonsoft.Json; using Newtonsoft.Json.Converters; +using SharpDX; using SparkClient.Model.Helper; using System.Data; +using System.Drawing; using System.IO; +using System.Linq.Expressions; +using System.Windows; using System.Windows.Controls; +using System.Windows.Controls.Primitives; using System.Windows.Data; using System.Windows.Input; @@ -31,26 +37,30 @@ public class LevelConfigVM : BaseViewModel private DataTable _standardList; public DataTable StandardList { get { return _standardList; } set { _standardList = value; OnPropertyChanged("StandardList"); } } DataGrid dataGrid; - private string GRADE_NAME = string.Empty; - - private string STANDARD_NAME = string.Empty; - private bool _institutesEnabled = true; - public bool InstitutesEnabled { get { return _institutesEnabled; } set { _institutesEnabled = value; OnPropertyChanged("InstitutesEnabled"); } } + public bool InstitutesEnabled { get { return _institutesEnabled; } set { _institutesEnabled = value; OnPropertyChanged("InstitutesEnabled"); } } private bool _shapesEnabled = true; - public bool ShapesEnabled { get { return _shapesEnabled; } set { _shapesEnabled = value; OnPropertyChanged("ShapesEnabled"); } } + public bool ShapesEnabled { get { return _shapesEnabled; } set { _shapesEnabled = value; OnPropertyChanged("ShapesEnabled"); } } + + Info info = new Info(); + + private string Save_successful_message = MultilingualHelper.getString("Save_successful_message"); + private string save_fail_message = MultilingualHelper.getString("save_fail_message"); + private string no_data_message = MultilingualHelper.getString("no_data_message"); + private string grade_config_left_top = MultilingualHelper.getString("grade_config_left_top"); + private string GRADE_NAME = MultilingualHelper.getString("GRADE_NAME"); + private string STANDARD_NAME = MultilingualHelper.getString("STANDARD_NAME"); public LevelConfigVM(DataGrid dataGrid) { if (dataGrid == null) return; this.dataGrid = dataGrid; - GRADE_NAME = "GRADE_NAME"; - STANDARD_NAME = "STANDARD_NAME"; ChangeShapeModelCommand = new RelayCommand(ChangeShapeModel); ChangeInstituteModelCommand = new RelayCommand(ChangeInstituteModel); LoadLevelConfigCommand = new RelayCommand(LoadLevelConfig); DelLevelConfigCommand = new RelayCommand(DelLevelConfig); SaveLevelConfigCommand = new RelayCommand(SaveLevelConfig); InitLevelConfig(null); + InitData(); } /// @@ -58,21 +68,29 @@ public class LevelConfigVM : BaseViewModel /// /// public void InitLevelConfig(object param) + { + Save_successful_message = MultilingualHelper.getString("Save_successful_message"); + save_fail_message = MultilingualHelper.getString("save_fail_message"); + no_data_message = MultilingualHelper.getString("no_data_message"); + grade_config_left_top = MultilingualHelper.getString("grade_config_left_top"); + GRADE_NAME = MultilingualHelper.getString("GRADE_NAME"); + STANDARD_NAME = MultilingualHelper.getString("STANDARD_NAME"); + } + private void InitData() { dataGrid.Columns.Clear(); string shapeSql = @"SELECT * FROM SHAPE;"; - _shapes = DataBaseHelper.ExecuteQuery(shapeSql); - if (_shapes!= null) { - _shapeId = _shapes.AsEnumerable().FirstOrDefault()["SHAPE_ID"].ToString(); - _instituteId = setInstitutes(_shapeId); - setDataGrid(_shapeId, _instituteId); + Shapes = DataBaseHelper.ExecuteQuery(shapeSql); + if (Shapes != null) + { + ShapeId = Shapes.AsEnumerable().FirstOrDefault()["SHAPE_ID"].ToString(); } } private string setInstitutes(string id) { - string insituteSql = @"SELECT * FROM INSTITUTE WHERE SHAPE_ID = " + id+";"; - _institutes = DataBaseHelper.ExecuteQuery(insituteSql); - return _institutes.AsEnumerable().FirstOrDefault()["INSTITUTE_ID"].ToString(); + string insituteSql = @"SELECT * FROM INSTITUTE WHERE SHAPE_ID = " + id + ";"; + Institutes = DataBaseHelper.ExecuteQuery(insituteSql); + return Institutes.AsEnumerable().FirstOrDefault()["INSTITUTE_ID"].ToString(); } private void setDataGrid(string shapeId, string instituteId) @@ -87,29 +105,33 @@ public class LevelConfigVM : BaseViewModel private void setStandardList(DataTable gradeList, DataTable standardList) { + Style cellStyle = new Style(typeof(TextBlock)); + Setter setSellStyle = new Setter(TextBlock.HorizontalAlignmentProperty, HorizontalAlignment.Center); + cellStyle.Setters.Add(setSellStyle); + Setter setSellStyle1 = new Setter(TextBlock.VerticalAlignmentProperty, VerticalAlignment.Center); + cellStyle.Setters.Add(setSellStyle1); dataGrid.Columns.Clear(); if (gradeList != null) { StandardList = new DataTable(); - List columns = new List(); foreach (DataRow columnInfo in gradeList.Rows) { if (columns.Count == 0) { columns.Add(new DataColumn(columnInfo["GRADE_EN_NAME"].ToString())); - this.dataGrid.Columns.Add(new DataGridTextColumn() { Header = columnInfo[GRADE_NAME].ToString(), Binding = new Binding(columnInfo["GRADE_EN_NAME"].ToString()) }); + this.dataGrid.Columns.Add(new DataGridTextColumn() { Header = columnInfo[GRADE_NAME].ToString(), Binding = new Binding(columnInfo["GRADE_EN_NAME"].ToString()),ElementStyle = cellStyle }); } else { columns.Insert(0, new DataColumn(columnInfo["GRADE_EN_NAME"].ToString() + "_MIN")); - this.dataGrid.Columns.Insert(0, new DataGridTextColumn() { Header = columnInfo[GRADE_NAME].ToString(), Binding = new Binding(columnInfo["GRADE_EN_NAME"].ToString() + "_MIN") }); + this.dataGrid.Columns.Insert(0, new DataGridTextColumn() { Header = columnInfo[GRADE_NAME].ToString(), Binding = new Binding(columnInfo["GRADE_EN_NAME"].ToString() + "_MIN"), ElementStyle = cellStyle }); columns.Add(new DataColumn(columnInfo["GRADE_EN_NAME"].ToString() + "_MAX")); - this.dataGrid.Columns.Add(new DataGridTextColumn() { Header = columnInfo[GRADE_NAME].ToString(), Binding = new Binding(columnInfo["GRADE_EN_NAME"].ToString() + "_MAX") }); + this.dataGrid.Columns.Add(new DataGridTextColumn() { Header = columnInfo[GRADE_NAME].ToString(), Binding = new Binding(columnInfo["GRADE_EN_NAME"].ToString() + "_MAX"), ElementStyle = cellStyle }); } } - columns.Insert(0, new DataColumn("title")); - this.dataGrid.Columns.Insert(0, new DataGridTextColumn() { Header = "参数 \\ 切工等级", Binding = new Binding("title") }); + columns.Insert(0, new DataColumn("title")); + this.dataGrid.Columns.Insert(0, new DataGridTextColumn() { Header = grade_config_left_top, Binding = new Binding("title"), ElementStyle = cellStyle }); StandardList.Columns.AddRange(columns.ToArray()); // 以标准名分组表示每一行 if (standardList != null) @@ -125,10 +147,10 @@ public class LevelConfigVM : BaseViewModel // 每一行单元格内数据 var row = standard.Where(s => s["GRADE_ID"].ToString() == columnInfo["GRADE_ID"].ToString()).FirstOrDefault(); rowInfo.Add( - row["MIN_PREFIX"].ToString() + + getFix(row, "MIN_PREFIX") + row["STANDARD_MIN"].ToString() + row["UNIT"].ToString() + "-" + row["STANDARD_MAX"].ToString() + row["UNIT"].ToString() - + row["MIN_SUFFIX"].ToString() + + getFix(row, "MIN_SUFFIX") ); } else @@ -137,23 +159,28 @@ public class LevelConfigVM : BaseViewModel var row = standard.Where(s => s["GRADE_ID"].ToString() == columnInfo["GRADE_ID"].ToString()).FirstOrDefault(); if (row["STANDARD_MIN"] == null || row["STANDARD_MIN"].ToString() == "") { - rowInfo.Insert(0, row["MIN_PREFIX"].ToString() + row["MIN_NULL_REPALCE"].ToString() + row["MIN_SUFFIX"].ToString()); + rowInfo.Insert(0, getFix(row, "MIN_PREFIX") + + row["MIN_NULL_REPALCE"].ToString() + + getFix(row, "MIN_SUFFIX")); } else { - rowInfo.Insert(0, row["MIN_PREFIX"].ToString() + row["STANDARD_MIN"].ToString() + row["UNIT"].ToString() + row["MIN_SUFFIX"].ToString()); + rowInfo.Insert(0, getFix(row, "MIN_PREFIX") + + row["STANDARD_MIN"].ToString() + + row["UNIT"].ToString() + + getFix(row, "MIN_SUFFIX")); } if (row["STANDARD_MAX"] == null || row["STANDARD_MAX"].ToString() == "") { - rowInfo.Add(row["MAX_PREFIX"].ToString() + + rowInfo.Add(getFix(row, "MAX_PREFIX") + row["MAX_NULL_REPALCE"].ToString() - + row["MAX_SUFFIX"].ToString()); + + getFix(row, "MAX_SUFFIX")); } else { - rowInfo.Add(row["MAX_PREFIX"].ToString() + + rowInfo.Add(getFix(row, "MAX_PREFIX") + row["STANDARD_MAX"].ToString() + row["UNIT"].ToString() - + row["MAX_SUFFIX"].ToString()); + + getFix(row, "MAX_SUFFIX")); } } } @@ -165,13 +192,122 @@ public class LevelConfigVM : BaseViewModel } } } + private string getFix(DataRow row,string fix){ + string result = ""; + result = row[fix].ToString().Replace("\\n","\r\n"); + return result; + } /// /// 更新保存响应 /// /// public void SaveLevelConfig(object param) { - + try { + string shapeId = ""; + string instituteId = ""; + if (info != null) + { + // 按照形状名查询形状数据,判断是否有该数据 + string shapeSql = $"SELECT * FROM SHAPE WHERE SHAPE_NAME = '{info.SHAPE_NAME}';"; + DataTable shapes = DataBaseHelper.ExecuteQuery(shapeSql); + + // 现存db最大形状id取得 + string shapeAllSql = $"SELECT * FROM SHAPE;"; + DataTable shapeAllInfo = DataBaseHelper.ExecuteQuery(shapeAllSql); + DataBaseHelper.BeginTransaction(); + // 形状表判断是否有数据 + if (shapes == null || shapes.Rows.Count == 0) + { + var id = shapeAllInfo.AsEnumerable().Max(r => r["SHAPE_ID"]); + string maxShapeId = "0"; + // 数据登录 + if (id != null) + { + maxShapeId = id.ToString(); + } + // 数据登录 + int.TryParse(maxShapeId, out int result); + shapeId = string.Concat(result + 1); + string shapeInsertSql = $"INSERT INTO SHAPE (SHAPE_ID,SHAPE_NAME,SHAPE_EN_NAME,GUID)VALUES('{shapeId}','{info.SHAPE_NAME}','{info.SHAPE_EN_NAME}','{Guid.NewGuid().ToString()}');"; + DataBaseHelper.ExecuteNonQuery(shapeInsertSql); + } + else + { + // 形状id取得 + shapeId = shapes.Rows[0]["SHAPE_ID"].ToString(); + } + // 按照机构名名查询机构数据,判断是否有该数据 + string instituteSql = $"SELECT * FROM INSTITUTE WHERE INSTITUTE_NAME = '{info.INSTITUTE_NAME}' AND SHAPE_ID = '{shapeId}';"; + DataTable institute = DataBaseHelper.ExecuteQuery(instituteSql); + // 现存db最大机构ID取得 + string instituteAllSql = $"SELECT * FROM INSTITUTE WHERE SHAPE_ID = '{shapeId}';"; + DataTable instituteAllInfo = DataBaseHelper.ExecuteQuery(instituteAllSql); + // 机构表判断是否有数据 + if (institute == null || institute.Rows.Count == 0) + { + var id = instituteAllInfo.AsEnumerable().Max(r => r["INSTITUTE_ID"]); + string maxInstituteId = "0"; + // 数据登录 + if (id != null) { + maxInstituteId = id.ToString(); + } + int.TryParse(maxInstituteId, out int result); + instituteId = string.Concat(result + 1); + string shapeInsertSql = $"INSERT INTO INSTITUTE (INSTITUTE_ID,SHAPE_ID,INSTITUTE_NAME,INSTITUTE_EN_NAME,GUID)VALUES('{instituteId}','{shapeId}','{info.INSTITUTE_NAME}','{info.INSTITUTE_EN_NAME}','{Guid.NewGuid().ToString()}');"; + DataBaseHelper.ExecuteNonQuery(shapeInsertSql); + } + else + { + // 机构ID取得 + instituteId = _instituteId; + } + // 定级数据登录 + string gradeInsSql = ""; + foreach (var gradeInfo in info.gradeInfos) + { + if (gradeInsSql.Length == 0) + { + gradeInsSql += gradeInfo.getDeleteSql(shapeId, instituteId); + } + gradeInsSql += gradeInfo.getInsertSql(shapeId, instituteId); + } + int count = DataBaseHelper.ExecuteNonQuery(gradeInsSql); + if (count<0) + { + DataBaseHelper.rollback(); + Growl.Error(save_fail_message); + } + + // 标准数据登录 + string standardSql = ""; + foreach (var standardInfo in info.standardInfos) + { + if (standardSql.Length == 0) + { + standardSql += standardInfo.getDeleteSql(shapeId, instituteId); + } + standardSql += standardInfo.getInsertSql(shapeId, instituteId); + } + count = DataBaseHelper.ExecuteNonQuery(standardSql); + if (count < 0) + { + DataBaseHelper.rollback(); + Growl.Error(save_fail_message); + } + DataBaseHelper.commit(); + Growl.Info(Save_successful_message); + } + else + { + Growl.Info(no_data_message); + } + } + catch (Exception ex) { + DataBaseHelper.rollback(); + Console.WriteLine(ex.Message); + Growl.Error(save_fail_message); + } } /// /// 删除配置响应 @@ -190,7 +326,6 @@ public class LevelConfigVM : BaseViewModel { InstitutesEnabled = false; ShapesEnabled = false; - Info info = null; Microsoft.Win32.OpenFileDialog openFileDialog = new Microsoft.Win32.OpenFileDialog(); openFileDialog.Filter = "Text files (*.enc)|*.enc|All files (*.*)|*.*"; if (openFileDialog.ShowDialog() == true) @@ -202,7 +337,6 @@ public class LevelConfigVM : BaseViewModel content = AESHelper.DecryptFile(filename, "000000"); info = JsonConvert.DeserializeObject(content); } - } if (info != null) { @@ -248,8 +382,6 @@ public class LevelConfigVM : BaseViewModel DataTable standardInfos = Common.JsonToDataTable(standardInfosJson); setStandardList(gradeInfos, standardInfos); - - } } @@ -259,8 +391,11 @@ public class LevelConfigVM : BaseViewModel /// public void ChangeInstituteModel(object param) { - dataGrid.Columns.Clear(); - setDataGrid(ShapeId, InstituteId); + if (InstituteId != null && InstituteId != string.Empty) + { + dataGrid.Columns.Clear(); + setDataGrid(ShapeId, InstituteId); + } } /// @@ -269,7 +404,9 @@ public class LevelConfigVM : BaseViewModel /// public void ChangeShapeModel(object param) { - setInstitutes(ShapeId); + if (ShapeId!= null && ShapeId != string.Empty) { + setInstitutes(ShapeId); + } } class Info @@ -293,6 +430,39 @@ public class LevelConfigVM : BaseViewModel public string GRADE_EN_NAME { get; set; } public string GRADE_EN_S_NAME { get; set; } public int GRADE_ORDER { get; set; } + + public string getInsertSql(string shapeId,string instituteId) + { + string insertSql = "INSERT INTO GRADE("; + insertSql = insertSql + + "SHAPE_ID" + + ",INSTITUTE_ID" + + ",GRADE_ID" + + ",GRADE_NAME" + + ",GRADE_EN_NAME" + + ",GRADE_EN_S_NAME" + + ",GRADE_ORDER" + + ",GUID"; + insertSql = insertSql + ")VALUES("; + insertSql = insertSql + + $"'{shapeId}'" + + $",'{instituteId}'" + + $",'{GRADE_ID}'" + + $",'{GRADE_NAME}'" + + $",'{GRADE_EN_NAME}'" + + $",'{GRADE_EN_S_NAME}'" + + $",'{GRADE_ORDER}'" + + $",'{Guid.NewGuid().ToString()}'"; + + insertSql = insertSql + ");"; + return insertSql; + } + public string getDeleteSql(string shapeId, string instituteId) + { + string deleteSql = $"DELETE FROM GRADE WHERE SHAPE_ID='{shapeId}' AND INSTITUTE_ID='{instituteId}';"; + return deleteSql; + } + } class StandardInfo @@ -301,8 +471,8 @@ public class LevelConfigVM : BaseViewModel public int STANDARD_ID { get; set; } public string STANDARD_NAME { get; set; } public string STANDARD_EN_NAME { get; set; } - public string STANDARD_MIN { get; set; } - public string STANDARD_MAX { get; set; } + public decimal? STANDARD_MIN { get; set; } + public decimal? STANDARD_MAX { get; set; } public string IS_MIN_EXIST { get; set; } = "0"; public string IS_MAX_EXIST { get; set; } = "0"; public string UNIT { get; set; } @@ -313,5 +483,59 @@ public class LevelConfigVM : BaseViewModel public string MIN_NULL_REPALCE { get; set; } = "←"; public string MAX_NULL_REPALCE { get; set; } = "→"; public int SORT { get; set; } + public string getInsertSql(string shapeId, string instituteId) + { + string insertSql = "INSERT INTO STANDARD("; + insertSql = insertSql + + "STANDARD_ID " + + ",SHAPE_ID " + + ",GRADE_ID " + + ",INSTITUTE_ID " + + ",STANDARD_NAME " + + ",STANDARD_EN_NAME " + + ",STANDARD_MIN " + + ",STANDARD_MAX " + + ",IS_MIN_EXIST " + + ",IS_MAX_EXIST " + + ",SORT " + + ",UNIT " + + ",MAX_NULL_REPALCE " + + ",MIN_PREFIX " + + ",MIN_SUFFIX " + + ",MAX_PREFIX " + + ",MAX_SUFFIX " + + ",MIN_NULL_REPALCE " + + ",GUID " ; + insertSql = insertSql + ")VALUES("; + insertSql = insertSql + + $"'{STANDARD_ID}'" + + $",'{shapeId}'" + + $",'{GRADE_ID}'" + + $",'{instituteId}'" + + $",'{STANDARD_NAME}'" + + $",'{STANDARD_EN_NAME}'" + + $",{(STANDARD_MIN != null ? STANDARD_MIN.ToString() : "null")}" + + $",{(STANDARD_MAX != null ? STANDARD_MAX.ToString() : "null")}" + + $",'{IS_MIN_EXIST}'" + + $",'{IS_MAX_EXIST}'" + + $",'{SORT}'" + + $",'{UNIT}'" + + $",'{MAX_NULL_REPALCE}'" + + $",'{MIN_PREFIX}'" + + $",'{MIN_SUFFIX}'" + + $",'{MAX_PREFIX}'" + + $",'{MAX_SUFFIX}'" + + $",'{MIN_NULL_REPALCE}'" + + $",'{Guid.NewGuid().ToString()}'"; + + insertSql = insertSql + ");"; + return insertSql; + } + + public string getDeleteSql(string shapeId, string instituteId) + { + string deleteSql = $"DELETE FROM STANDARD WHERE SHAPE_ID='{shapeId}' AND INSTITUTE_ID='{instituteId}';"; + return deleteSql; + } } } \ No newline at end of file diff --git a/Views/Configuration/LevelConfigPage.xaml b/Views/Configuration/LevelConfigPage.xaml index 41b6649..4b77e2b 100644 --- a/Views/Configuration/LevelConfigPage.xaml +++ b/Views/Configuration/LevelConfigPage.xaml @@ -22,24 +22,42 @@ -