feat:定级配置画面

master
sunhonglei 8 months ago
parent deb0e9844c
commit ca334fc494
  1. 20
      Model/Helper/AESHelper.cs
  2. BIN
      SparkDB.db
  3. 3
      ViewModel/Configuration/ConfigMenuPageVM.cs
  4. 277
      ViewModel/Configuration/LevelConfigVM.cs
  5. 23
      Views/Configuration/LevelConfigPage.xaml
  6. 17
      Views/Configuration/LevelConfigPage.xaml.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();
}
} }

Binary file not shown.

@ -32,7 +32,8 @@ public class ConfigMenuPageVM : BaseViewModel
/// <param name="parameter"></param> /// <param name="parameter"></param>
public void LevelConfig(object parameter) 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.mainViewModel.Content = vm;
WindowManager.openContent.Add(vm); WindowManager.openContent.Add(vm);
} }

@ -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;
namespace SparkClient.ViewModel.Configuration;
public class LevelConfigVM : BaseViewModel public class LevelConfigVM : BaseViewModel
{ {
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;
public List<String> _levels; private string STANDARD_NAME = string.Empty;
public List<String> Levels { get { return _levels; } set { _levels = value; OnPropertyChanged("Levels"); } }
public LevelConfigVM() 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<string>(){"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);
} }
/// <summary> /// <summary>
@ -16,9 +59,112 @@ public class LevelConfigVM: BaseViewModel
/// <param name="param"></param> /// <param name="param"></param>
public void InitLevelConfig(object param) 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<DataColumn> columns = new List<DataColumn>();
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<string> rowInfo = new List<string>();
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);
}
}
}
}
/// <summary> /// <summary>
/// 更新保存响应 /// 更新保存响应
/// </summary> /// </summary>
@ -33,6 +179,7 @@ public class LevelConfigVM: BaseViewModel
/// <param name="param"></param> /// <param name="param"></param>
public void DelLevelConfig(object param) public void DelLevelConfig(object param)
{ {
} }
/// <summary> /// <summary>
@ -41,14 +188,130 @@ public class LevelConfigVM: BaseViewModel
/// <param name="param"></param> /// <param name="param"></param>
public void LoadLevelConfig(object param) 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<Info>(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);
}
} }
/// <summary> /// <summary>
/// 切换定级响应 /// 切换规则响应
/// </summary> /// </summary>
/// <param name="param"></param> /// <param name="param"></param>
public void ChangeLevelModel(object param) public void ChangeInstituteModel(object param)
{
dataGrid.Columns.Clear();
setDataGrid(ShapeId, InstituteId);
}
/// <summary>
/// 切换形状响应
/// </summary>
/// <param name="param"></param>
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<GradeInfo> gradeInfos { get; set; }
public List<StandardInfo> 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; }
} }
} }

@ -17,17 +17,28 @@
<ColumnDefinition Width="Auto" /> <ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" /> <ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" /> <ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" /> <ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" /> <ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions> </Grid.ColumnDefinitions>
<ComboBox Grid.Column="0" Width="140" hc:DropDownElement.ConsistentWidth="False" SelectedIndex="0" ItemsSource="{Binding Levels}" Margin="10 0" /> <ComboBox Grid.Column="0" Width="140" hc:DropDownElement.ConsistentWidth="False" SelectedIndex="0"
<Button Grid.Column="1" Content="{DynamicResource Save}" Margin="10 0"/> ItemsSource="{Binding Institutes, Mode=TwoWay}" Margin="10 0" DisplayMemberPath="INSTITUTE_NAME" SelectedValuePath="INSTITUTE_ID"
<Button Grid.Column="2" Content="{DynamicResource DeleteConfig}" Margin="10 0"/> SelectedValue="{Binding InstituteId, Mode=TwoWay}"
<Button Grid.Column="4" Content="{DynamicResource ImportConfig}" Margin="10 0" HorizontalAlignment="Right"/> SelectionChanged="ChangeInstitutes"
IsEnabled="{Binding InstitutesEnabled,Mode=TwoWay}"/>
<ComboBox Grid.Column="1" Width="140" hc:DropDownElement.ConsistentWidth="False" SelectedIndex="0"
ItemsSource="{Binding Shapes, Mode=TwoWay}" Margin="10 0" DisplayMemberPath="SHAPE_NAME" SelectedValuePath="SHAPE_ID"
SelectedValue="{Binding ShapeId, Mode=TwoWay}"
SelectionChanged="ChangeShapes"
IsEnabled="{Binding ShapesEnabled,Mode=TwoWay}"/>
<Button Grid.Column="2" Content="{DynamicResource Save}" Margin="10 0" />
<Button Grid.Column="3" Content="{DynamicResource DeleteConfig}" Margin="10 0" />
<Button Grid.Column="5" Content="{DynamicResource ImportConfig}" Margin="10 0" HorizontalAlignment="Right" Command="{Binding LoadLevelConfigCommand}"
/>
</Grid> </Grid>
<DataGrid Grid.Row="1" HeadersVisibility="All" RowHeaderWidth="60" AutoGenerateColumns="False" ItemsSource="{Binding DataList}"> <DataGrid Grid.Row="1" x:Name="DataGrid1" HeadersVisibility="All" RowHeaderWidth="60" AutoGenerateColumns="False" IsReadOnly="True"
ItemsSource="{Binding StandardList}" >
</DataGrid> </DataGrid>
</Grid> </Grid>

@ -8,6 +8,21 @@ public partial class LevelConfigPage
public LevelConfigPage() public LevelConfigPage()
{ {
InitializeComponent(); 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);
} }
} }
Loading…
Cancel
Save