using System.Data; using System.Text; using System.Windows.Input; using HandyControl.Controls; using Microsoft.Data.Sqlite; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using SparkClient.Model.Entity; using SparkClient.Model.Helper; namespace SparkClient.ViewModel.Configuration; public class AlgorithmConfigVM : BaseViewModel { public ICommand SaveAlgorithmDataCommand { get; } public ICommand BeautifyJsonCommand { get; } public ICommand UglifyJsonCommand { get; } private string _AlgorithmConfigJson; public string AlgorithmConfigJson { get { return _AlgorithmConfigJson; } set { _AlgorithmConfigJson = value; OnPropertyChanged("AlgorithmConfigJson"); } } public AlgorithmConfigVM() { SaveAlgorithmDataCommand = new RelayCommand(SaveAlgorithmData); BeautifyJsonCommand = new RelayCommand(BeautifyJson); UglifyJsonCommand = new RelayCommand(UglifyJson); InitAlgorithmData(null); } /// /// 初始化算法数据 /// /// public void InitAlgorithmData(object param) { AlgorithmConfigJson = "{}"; string sql = @"SELECT JSON as json FROM ALGORITHM_CONFIG ORDER BY JSON_ORDER"; DataTable dataTable = DataBaseHelper.ExecuteQuery(sql); StringBuilder sb = new StringBuilder(); if (dataTable != null) { foreach (DataRow row in dataTable.Rows) { sb.Append(row["json"].ToString()); } } if(sb.Length>0) { AlgorithmConfigJson = JToken.Parse(sb.ToString()).ToString(); } } /// /// 保存数据 /// /// public void SaveAlgorithmData(object param) { DataBaseHelper.BeginTransaction(); string temp = JsonConvert.SerializeObject(JsonConvert.DeserializeObject(AlgorithmConfigJson)); string deleteSql = @"DELETE FROM ALGORITHM_CONFIG"; DataBaseHelper.ExecuteNonQuery(deleteSql); int order = 0; int insertCount = 0; while (temp.Length>2000) { AlgorithmConfigEntity entity = new AlgorithmConfigEntity() { GUID = Guid.NewGuid(), JsonOrder = order++, Json = temp.Substring(0, 2000), }; temp = temp.Substring(2000); string sql = entity.GenerateInsertSQL(); SqliteParameter[] sqliteParameters = { new SqliteParameter("@Json", entity.Json), new SqliteParameter("@JsonOrder", entity.JsonOrder), new SqliteParameter("@GUID", entity.GUID), }; insertCount += DataBaseHelper.ExecuteNonQuery(sql, sqliteParameters); } if (temp.Length>0) { AlgorithmConfigEntity entity = new AlgorithmConfigEntity() { GUID = Guid.NewGuid(), JsonOrder = order++, Json = temp }; string sql = entity.GenerateInsertSQL(); SqliteParameter[] sqliteParameters = { new SqliteParameter("@Json", entity.Json), new SqliteParameter("@JsonOrder", entity.JsonOrder), new SqliteParameter("@GUID", entity.GUID.ToString()), }; insertCount += DataBaseHelper.ExecuteNonQuery(sql, sqliteParameters); } if (insertCount >= 0) { Growl.Info(MultilingualHelper.getString("SaveSuccess")); DataBaseHelper.commit(); } else { Growl.Error(MultilingualHelper.getString("SaveFail")); DataBaseHelper.rollback(); } } /// /// 美化JSON /// /// public void BeautifyJson(object param) { try { AlgorithmConfigJson = JToken.Parse(AlgorithmConfigJson).ToString(); } catch (Exception ex) { Growl.ErrorGlobal(ex.Message); } } /// /// 压缩JSON /// /// public void UglifyJson(object param) { AlgorithmConfigJson = JsonConvert.SerializeObject(JsonConvert.DeserializeObject(AlgorithmConfigJson)); } }