diff --git a/StartServerWPF.Models/JsonParser.cs b/StartServerWPF.Models/JsonParser.cs index fbf039b..59d221e 100644 --- a/StartServerWPF.Models/JsonParser.cs +++ b/StartServerWPF.Models/JsonParser.cs @@ -4,6 +4,7 @@ using System.Threading.Tasks; using Newtonsoft.Json.Linq; using Newtonsoft.Json; using System.IO; +using System.Runtime.Serialization.Formatters.Binary; namespace StartServerWPF.Models { @@ -14,7 +15,7 @@ namespace StartServerWPF.Models public static string serverVision = "20230517"; public const string workareaPath = "serverprogram\\workarea"; - public SystemConfigModel ReadSystemJsonFile(string jsonFile) + public SystemConfigModel ReadSystemJsonFile(string jsonFile) { //try { @@ -115,7 +116,7 @@ namespace StartServerWPF.Models saveStr = saveStr.Replace(strs2, $"\"{savePath}\""); reader.Close(); File.WriteAllText(apmsJsonPath, saveStr); - } + } } public static void UpdateRecvJson(string recvJsonPath, string savePath) { @@ -142,24 +143,33 @@ namespace StartServerWPF.Models return moniSp; } - - public static ApmsModel ReadApmsJson(string apmsJsonPath) + public static T DeepCopy(T obj) { - ApmsModel model = new ApmsModel(); - using (StreamReader sr = File.OpenText(apmsJsonPath)) + object retval; + using (MemoryStream ms = new MemoryStream()) { - JsonTextReader reader = new JsonTextReader(sr); - JObject jobj = (JObject)JToken.ReadFrom(reader); - model.station = jobj["station"].ToString(); - // model.ttime2d = jobj["ttime2d"].ToString(); - model.savepath = jobj["Main.savepath"].ToString(); - model.push2wx = jobj["push2wx"].ToString(); - var jor = jobj["channels"].First; - JObject jordb = JObject.Parse(jor.ToString()); - string sta = jordb["station"].ToString(); - // model.channels = JsonConvert.DeserializeObject(jor.ToString()); + BinaryFormatter bf = new BinaryFormatter(); + //序列化成流 + bf.Serialize(ms, obj); + ms.Seek(0, SeekOrigin.Begin); + //反序列化成对象 + retval = bf.Deserialize(ms); + ms.Close(); } - return model; + return (T)retval; } + //public static T DeepCopy(T obj) + //{ + // object retval; + // using (MemoryStream ms = new MemoryStream()) + // { + // DataContractSerializer ser = new DataContractSerializer(typeof(T)); + // ser.WriteObject(ms, obj); + // ms.Seek(0, SeekOrigin.Begin); + // retval = ser.ReadObject(ms); + // ms.Close(); + // } + // return (T)retval; + //} } } diff --git a/StartServerWPF.Modules.Main/ViewModels/AddWorkAreaDialogViewModel.cs b/StartServerWPF.Modules.Main/ViewModels/AddWorkAreaDialogViewModel.cs index 43abd66..4b9a6ba 100644 --- a/StartServerWPF.Modules.Main/ViewModels/AddWorkAreaDialogViewModel.cs +++ b/StartServerWPF.Modules.Main/ViewModels/AddWorkAreaDialogViewModel.cs @@ -1,4 +1,5 @@ -using Prism.Commands; +using Newtonsoft.Json; +using Prism.Commands; using Prism.Mvvm; using Prism.Services.Dialogs; using StartServerWPF.Models; @@ -78,13 +79,19 @@ namespace StartServerWPF.Modules.Main.ViewModels MessageBox.Show("工区名称和目录不能为空", "提示", MessageBoxButton.OK); return; } - if (MessageBox.Show("确认修改?", "参数设置", MessageBoxButton.OKCancel, + if (MessageBox.Show("确认添加?", "提示", MessageBoxButton.OKCancel, MessageBoxImage.Exclamation) == MessageBoxResult.OK) { + string str = File.ReadAllText(Path.Combine(JsonParser.workareaPath, "Workarea.json")); + WorkareaModel workareaModel = JsonConvert.DeserializeObject(str); var dialog = new DialogResult(ButtonResult.OK); Workareas workareas = new Workareas(); workareas.workareaname = WorkAreaName; workareas.filepath = WorkAreaPath; + workareaModel.savepath = WorkAreaPath; + workareaModel.workareaname = WorkAreaName; + //生成工区默认配置文件 + File.WriteAllText(Path.Combine(WorkAreaPath, Path.GetFileName(WorkAreaPath) + ".json"), JsonConvert.SerializeObject(workareaModel)); dialog.Parameters.Add("param1", workareas); RequestClose?.Invoke( dialog); } diff --git a/StartServerWPF.Modules.Main/ViewModels/DataProcessViewModel.cs b/StartServerWPF.Modules.Main/ViewModels/DataProcessViewModel.cs index f2612b4..8921fa5 100644 --- a/StartServerWPF.Modules.Main/ViewModels/DataProcessViewModel.cs +++ b/StartServerWPF.Modules.Main/ViewModels/DataProcessViewModel.cs @@ -188,9 +188,12 @@ namespace StartServerWPF.Modules.Main.ViewModels string str = process.ProParams.Substring(0, index) + "-wave"; process.ProParams = $"{str} {temPath}"; - //dataProtools配置更新 - ApmsModel tools = _workareaModel.apmModel; + //dataProtools 配置更新 + var area = JsonParser.DeepCopy(_workareaModel); + ApmsModel tools = area.apmModel; tools.savepath = SavePath; + tools.station = Path.GetFullPath(Path.Combine(area.savepath, area.apmModel.station)).Replace("\\", "/"); + tools.ttime[0].ttime2d = Path.GetFullPath(Path.Combine(area.savepath, area.apmModel.ttime[0].ttime2d)).Replace("\\", "/"); JsonParser.WriteSystemConfigFile(Path.Combine(_systemConfig.dataProTools.ProPath, "apms.json"), tools); var mfile = new DirectoryInfo(temPath).EnumerateFiles("*.mseed"); diff --git a/StartServerWPF.Modules.Main/ViewModels/SetParamViewModel.cs b/StartServerWPF.Modules.Main/ViewModels/SetParamViewModel.cs index d08d196..a1e32b2 100644 --- a/StartServerWPF.Modules.Main/ViewModels/SetParamViewModel.cs +++ b/StartServerWPF.Modules.Main/ViewModels/SetParamViewModel.cs @@ -1,4 +1,5 @@ -using Newtonsoft.Json; +using Google.Protobuf.WellKnownTypes; +using Newtonsoft.Json; using Prism.Commands; using Prism.Ioc; using Prism.Mvvm; @@ -56,13 +57,17 @@ namespace StartServerWPF.Modules.Main.ViewModels set { if (value >= 0) { - string file = Path.Combine(_workareasModelArray.workarea[value].filepath, "workarea.json"); - if (!File.Exists(file)) + try { - JsonParser.WriteSystemConfigFile(file, WareaModel); + var area = _workareasModelArray.workarea[value]; + string file = Path.Combine(area.filepath, Path.GetFileName(area.filepath) + ".json"); + string json = File.ReadAllText(file); + WareaModel = JsonConvert.DeserializeObject(json); + } + catch (Exception ex) + { + MessageBox.Show("当前工区目录配置文件不存在," + ex.Message); } - string json = File.ReadAllText(file); - WareaModel = JsonConvert.DeserializeObject(json); _workareasModelArray.selectIndex = value; } SetProperty(ref _wareaSelectedIndex, value); @@ -92,6 +97,7 @@ namespace StartServerWPF.Modules.Main.ViewModels { apmStationFile = string.Empty; apmttime2dFile = string.Empty; + // WareaModel.apmModel = ; }); public DelegateCommand AddItemCommand => new(() => @@ -106,17 +112,38 @@ namespace StartServerWPF.Modules.Main.ViewModels if (result != null && result.Result == ButtonResult.OK) { var area = result.Parameters.GetValue("param1"); - WareaModel.savepath = area.filepath; - var file = _workareasModelArray.workarea.Where(f => f.filepath == area.filepath).FirstOrDefault(); + var file = _workareasModelArray.workarea.Where(f => f.workareaname == area.workareaname).FirstOrDefault(); if (file == null) { _workareasModelArray.workarea.Add(area); WorkareaNameSource.Add(area.workareaname); + WareaSelectedIndex= WorkareaNameSource.Count()-1; + } + else + { + //更新当前工区目录 + file.filepath = area.filepath; + WareaSelectedIndex = _workareasModelArray.selectIndex; } } })); }); + public DelegateCommand DeleteItemCommand => new(() => + { + if (MessageBox.Show($"删除{WareaModel.workareaname}工区所有文件?", "提示", MessageBoxButton.OKCancel, + MessageBoxImage.Exclamation) == MessageBoxResult.OK) + { + if (Directory.Exists(WareaModel.savepath)) + { + Directory.Delete(WareaModel.savepath, true); + } + var area= _workareasModelArray.workarea.Where(a => a.workareaname == WareaModel.workareaname).FirstOrDefault(); + WorkareaNameSource.Remove(WareaModel.workareaname); + _workareasModelArray.workarea.Remove(area); + WareaSelectedIndex =0; + } + }); public DelegateCommand SelectFileCommand => new((obj) => { string para = obj.ToString(); @@ -183,7 +210,6 @@ namespace StartServerWPF.Modules.Main.ViewModels if (MessageBox.Show("确认修改?", "参数设置", MessageBoxButton.OKCancel, MessageBoxImage.Exclamation) == MessageBoxResult.OK) { - //1 Workarea配置更新,选择的索引 JsonParser.WriteSystemConfigFile(Path.Combine(JsonParser.workareaPath, "Workareas.json"), _workareasModelArray); _wareaModel.apmModel.channels = new List @@ -197,8 +223,8 @@ namespace StartServerWPF.Modules.Main.ViewModels } }; JsonParser.WriteSystemConfigFile(Path.Combine(_wareaModel.savepath, "Workarea.json"), _wareaModel); - string wareaJson = JsonConvert.SerializeObject(_wareaModel); - var curWorkarea = JsonConvert.DeserializeObject(wareaJson); + + var curWorkarea = JsonParser.DeepCopy(_wareaModel); if (!string.IsNullOrEmpty(apmStationFile)) { string destFileName = Path.GetFullPath(Path.Combine(curWorkarea.savepath, curWorkarea.apmModel.station)); diff --git a/StartServerWPF.Modules.Main/Views/SetParamView.xaml b/StartServerWPF.Modules.Main/Views/SetParamView.xaml index 7ff142c..103f15d 100644 --- a/StartServerWPF.Modules.Main/Views/SetParamView.xaml +++ b/StartServerWPF.Modules.Main/Views/SetParamView.xaml @@ -200,6 +200,7 @@