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; } } }