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 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)
{
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);
}
///
/// 加载顶级配置的数据
///
///
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);
}
}
}
}
///
/// 更新保存响应
///
///
public void SaveLevelConfig(object param)
{
}
///
/// 删除配置响应
///
///
public void DelLevelConfig(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(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 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; }
}
}