diff --git a/Model/Helper/AESHelper.cs b/Model/Helper/AESHelper.cs
index a09092e..8b1adc0 100644
--- a/Model/Helper/AESHelper.cs
+++ b/Model/Helper/AESHelper.cs
@@ -113,4 +113,24 @@ public class AESHelper
}
}
}
+ public static string DecryptFile(string inputFile, string password)
+ {
+ var aes = Aes.Create();
+ var pdb = new Rfc2898DeriveBytes(password, new byte[] { 0x49, 0x76, 0x61, 0x6e, 0x20, 0x4d, 0x65, 0x64, 0x76, 0x65, 0x64, 0x65, 0x76 });
+ aes.Key = pdb.GetBytes(32);
+ aes.IV = pdb.GetBytes(16);
+ StringBuilder sb = new StringBuilder();
+ using (var fs = new FileStream(inputFile, FileMode.Open, FileAccess.Read))
+ {
+ using (var cs = new CryptoStream(fs, aes.CreateDecryptor(), CryptoStreamMode.Read))
+ {
+ StreamReader sr = new StreamReader(cs);
+ while (!sr.EndOfStream)
+ {
+ sb.Append(sr.ReadLine());
+ }
+ }
+ }
+ return sb.ToString();
+ }
}
\ No newline at end of file
diff --git a/SparkDB.db b/SparkDB.db
index 6cd0537..b04de82 100644
Binary files a/SparkDB.db and b/SparkDB.db differ
diff --git a/ViewModel/Configuration/ConfigMenuPageVM.cs b/ViewModel/Configuration/ConfigMenuPageVM.cs
index f0ea75f..bcc0b9f 100644
--- a/ViewModel/Configuration/ConfigMenuPageVM.cs
+++ b/ViewModel/Configuration/ConfigMenuPageVM.cs
@@ -32,7 +32,8 @@ public class ConfigMenuPageVM : BaseViewModel
///
public void LevelConfig(object parameter)
{
- BaseControlVM vm = new BaseControlVM(new LevelConfigVM(), MultilingualHelper.getString("LevelConfig"));
+ BaseControlVM vm = new BaseControlVM(new LevelConfigVM(null), MultilingualHelper.getString("LevelConfig"));
+ vm.ShowFunctionButton = System.Windows.Visibility.Hidden;
WindowManager.mainViewModel.Content = vm;
WindowManager.openContent.Add(vm);
}
diff --git a/ViewModel/Configuration/LevelConfigVM.cs b/ViewModel/Configuration/LevelConfigVM.cs
index 27a0810..5ec3eb3 100644
--- a/ViewModel/Configuration/LevelConfigVM.cs
+++ b/ViewModel/Configuration/LevelConfigVM.cs
@@ -1,13 +1,56 @@
-namespace SparkClient.ViewModel.Configuration;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Converters;
+using SparkClient.Model.Helper;
+using System.Data;
+using System.IO;
+using System.Windows.Controls;
+using System.Windows.Data;
+using System.Windows.Input;
-public class LevelConfigVM: BaseViewModel
+namespace SparkClient.ViewModel.Configuration;
+
+public class LevelConfigVM : BaseViewModel
{
-
- public List _levels;
- public List Levels { get { return _levels; } set { _levels = value; OnPropertyChanged("Levels"); } }
- public LevelConfigVM()
+ public ICommand ChangeShapeModelCommand { get; }
+ public ICommand ChangeInstituteModelCommand { get; }
+ public ICommand LoadLevelConfigCommand { get; }
+ public ICommand DelLevelConfigCommand { get; }
+ public ICommand SaveLevelConfigCommand { get; }
+
+ private DataTable _institutes;
+ public DataTable Institutes { get { return _institutes; } set { _institutes = value; OnPropertyChanged("Institutes"); } }
+ private DataTable _shapes;
+ public DataTable Shapes { get { return _shapes; } set { _shapes = value; OnPropertyChanged("Shapes"); } }
+
+ private string _instituteId;
+ public string InstituteId { get { return _instituteId; } set { _instituteId = value; OnPropertyChanged("InstituteId"); } }
+
+ private string _shapeId;
+ public string ShapeId { get { return _shapeId; } set { _shapeId = value; OnPropertyChanged("ShapeId"); } }
+
+ 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"); } }
+ private bool _shapesEnabled = true;
+ public bool ShapesEnabled { get { return _shapesEnabled; } set { _shapesEnabled = value; OnPropertyChanged("ShapesEnabled"); } }
+ public LevelConfigVM(DataGrid dataGrid)
{
- _levels = new List(){"12314", "3455623", "4567894"};
+ 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);
}
///
@@ -16,9 +59,112 @@ public class LevelConfigVM: BaseViewModel
///
public void InitLevelConfig(object param)
{
-
+ 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);
+ }
+ }
+ 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();
}
+ private void setDataGrid(string shapeId, string instituteId)
+ {
+ string gradeSql = $"SELECT * FROM GRADE WHERE SHAPE_ID = '{shapeId}' AND INSTITUTE_ID = '{instituteId}' ORDER BY GRADE_ORDER;";
+ DataTable columnInfos = DataBaseHelper.ExecuteQuery(gradeSql);
+
+ string standardSql = $"SELECT * FROM STANDARD WHERE SHAPE_ID = '{shapeId}' AND INSTITUTE_ID = '{instituteId}' ORDER BY SORT, GRADE_ID;";
+ DataTable rowInfos = DataBaseHelper.ExecuteQuery(standardSql);
+ setStandardList(columnInfos, rowInfos);
+ }
+
+ private void setStandardList(DataTable gradeList, DataTable standardList)
+ {
+ 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()) });
+ }
+ 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") });
+ 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") });
+ }
+ }
+ columns.Insert(0, new DataColumn("title"));
+ this.dataGrid.Columns.Insert(0, new DataGridTextColumn() { Header = "参数 \\ 切工等级", Binding = new Binding("title") });
+ StandardList.Columns.AddRange(columns.ToArray());
+ // 以标准名分组表示每一行
+ if (standardList != null)
+ {
+ var standards = standardList.AsEnumerable().GroupBy(r => r[STANDARD_NAME].ToString());
+ foreach (var standard in standards)
+ {
+ List rowInfo = new List();
+ foreach (DataRow columnInfo in gradeList.Rows)
+ {
+ if (rowInfo.Count == 0)
+ {
+ // 每一行单元格内数据
+ var row = standard.Where(s => s["GRADE_ID"].ToString() == columnInfo["GRADE_ID"].ToString()).FirstOrDefault();
+ rowInfo.Add(
+ row["MIN_PREFIX"].ToString() +
+ row["STANDARD_MIN"].ToString() + row["UNIT"].ToString() + "-"
+ + row["STANDARD_MAX"].ToString() + row["UNIT"].ToString()
+ + row["MIN_SUFFIX"].ToString()
+ );
+ }
+ else
+ {
+ // 每一行单元格内数据
+ 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());
+ }
+ else
+ {
+ rowInfo.Insert(0, row["MIN_PREFIX"].ToString() + row["STANDARD_MIN"].ToString() + row["UNIT"].ToString() + row["MIN_SUFFIX"].ToString());
+ }
+ if (row["STANDARD_MAX"] == null || row["STANDARD_MAX"].ToString() == "")
+ {
+ rowInfo.Add(row["MAX_PREFIX"].ToString() +
+ row["MAX_NULL_REPALCE"].ToString()
+ + row["MAX_SUFFIX"].ToString());
+ }
+ else
+ {
+ rowInfo.Add(row["MAX_PREFIX"].ToString() +
+ row["STANDARD_MAX"].ToString() + row["UNIT"].ToString()
+ + row["MAX_SUFFIX"].ToString());
+ }
+ }
+ }
+ rowInfo.Insert(0, standard.Key);
+ var showRow = StandardList.NewRow();
+ showRow.ItemArray = rowInfo.ToArray();
+ StandardList.Rows.Add(showRow);
+ }
+ }
+ }
+ }
///
/// 更新保存响应
///
@@ -33,6 +179,7 @@ public class LevelConfigVM: BaseViewModel
///
public void DelLevelConfig(object param)
{
+
}
///
@@ -41,14 +188,130 @@ public class LevelConfigVM: BaseViewModel
///
public void LoadLevelConfig(object param)
{
-
+ 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)
+ {
+ string filename = openFileDialog.FileName;
+ string content = "";
+ if (File.Exists(filename))
+ {
+ content = AESHelper.DecryptFile(filename, "000000");
+ info = JsonConvert.DeserializeObject(content);
+ }
+
+ }
+ if (info != null)
+ {
+ // 形状列表重新生成
+ string shapeSql = $"SELECT * FROM SHAPE WHERE SHAPE_NAME = '{info.SHAPE_NAME}';";
+ DataTable shapes = DataBaseHelper.ExecuteQuery(shapeSql);
+ if (shapes == null || shapes.Rows.Count == 0)
+ {
+ shapes = new DataTable();
+ shapes.Columns.Add("SHAPE_NAME");
+ shapes.Columns.Add("SHAPE_EN_NAME");
+ shapes.Columns.Add("SHAPE_ID");
+ shapes.Rows.Add(info.SHAPE_NAME, info.SHAPE_EN_NAME, "");
+ Shapes = shapes;
+ ShapeId = "";
+ }
+ else
+ {
+ ShapeId = shapes.AsEnumerable().FirstOrDefault()["SHAPE_ID"].ToString();
+ }
+
+ // 机构列表重新生成
+ string instituteSql = $"SELECT * FROM INSTITUTE WHERE INSTITUTE_NAME = '{info.INSTITUTE_NAME}';";
+ DataTable institute = DataBaseHelper.ExecuteQuery(instituteSql);
+ if (institute == null || institute.Rows.Count == 0)
+ {
+ institute = new DataTable();
+ institute.Columns.Add("INSTITUTE_NAME");
+ institute.Columns.Add("INSTITUTE_EN_NAME");
+ institute.Columns.Add("INSTITUTE_ID");
+ institute.Rows.Add(info.INSTITUTE_NAME, info.INSTITUTE_EN_NAME, "");
+ Institutes = institute;
+ InstituteId = "";
+ }
+ else
+ {
+ InstituteId = institute.AsEnumerable().FirstOrDefault()["INSTITUTE_ID"].ToString();
+ }
+ // 表格内容重新生成
+ string gradeInfosJson = JsonConvert.SerializeObject(info.gradeInfos);
+ DataTable gradeInfos = Common.JsonToDataTable(gradeInfosJson);
+ string standardInfosJson = JsonConvert.SerializeObject(info.standardInfos);
+ DataTable standardInfos = Common.JsonToDataTable(standardInfosJson);
+
+ setStandardList(gradeInfos, standardInfos);
+
+
+ }
}
///
- /// 切换定级响应
+ /// 切换规则响应
///
///
- public void ChangeLevelModel(object param)
+ public void ChangeInstituteModel(object param)
+ {
+ dataGrid.Columns.Clear();
+ setDataGrid(ShapeId, InstituteId);
+ }
+
+ ///
+ /// 切换形状响应
+ ///
+ ///
+ public void ChangeShapeModel(object param)
+ {
+ setInstitutes(ShapeId);
+ }
+
+ class Info
+ {
+ public string SHAPE_NAME { get; set; }
+
+ public string SHAPE_EN_NAME { get; set; }
+
+ public string INSTITUTE_NAME { get; set; }
+
+ public string INSTITUTE_EN_NAME { get; set; }
+
+ public List gradeInfos { get; set; }
+
+ public List standardInfos { get; set; }
+ }
+ class GradeInfo
+ {
+ public int GRADE_ID { get; set; }
+ public string GRADE_NAME { get; set; }
+ public string GRADE_EN_NAME { get; set; }
+ public string GRADE_EN_S_NAME { get; set; }
+ public int GRADE_ORDER { get; set; }
+ }
+
+ class StandardInfo
{
+ public int GRADE_ID { get; set; }
+ 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 string IS_MIN_EXIST { get; set; } = "0";
+ public string IS_MAX_EXIST { get; set; } = "0";
+ public string UNIT { get; set; }
+ public string MIN_PREFIX { get; set; }
+ public string MIN_SUFFIX { get; set; }
+ public string MAX_PREFIX { get; set; }
+ public string MAX_SUFFIX { get; set; }
+ public string MIN_NULL_REPALCE { get; set; } = "←";
+ public string MAX_NULL_REPALCE { get; set; } = "→";
+ public int SORT { get; set; }
}
}
\ No newline at end of file
diff --git a/Views/Configuration/LevelConfigPage.xaml b/Views/Configuration/LevelConfigPage.xaml
index e7b942b..41b6649 100644
--- a/Views/Configuration/LevelConfigPage.xaml
+++ b/Views/Configuration/LevelConfigPage.xaml
@@ -5,30 +5,41 @@
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:SparkClient.Views"
xmlns:hc="https://handyorg.github.io/handycontrol"
- mc:Ignorable="d" >
+ mc:Ignorable="d">
-
+
-
-
-
-
-
+
+
+
+
+
+
-
-
-
-
+
+
+
+
+
-
-
-
-
+
+
+
\ No newline at end of file
diff --git a/Views/Configuration/LevelConfigPage.xaml.cs b/Views/Configuration/LevelConfigPage.xaml.cs
index 9f0195e..b7e8f65 100644
--- a/Views/Configuration/LevelConfigPage.xaml.cs
+++ b/Views/Configuration/LevelConfigPage.xaml.cs
@@ -8,6 +8,21 @@ public partial class LevelConfigPage
public LevelConfigPage()
{
InitializeComponent();
- DataContext = new LevelConfigVM();
+ DataContext = new LevelConfigVM(DataGrid1);
+ }
+
+ private void ChangeInstitutes(object sender, SelectionChangedEventArgs e)
+ {
+ (DataContext as LevelConfigVM).ChangeInstituteModel(null);
+ }
+
+ private void ChangeShapes(object sender, SelectionChangedEventArgs e)
+ {
+ (DataContext as LevelConfigVM).ChangeShapeModel(null);
+ }
+
+ private void ImportFlie(object sender, System.Windows.RoutedEventArgs e)
+ {
+ (DataContext as LevelConfigVM).LoadLevelConfig(null);
}
}
\ No newline at end of file