diff --git a/StartServerWPF.Models/ApmsModel.cs b/StartServerWPF.Models/ApmsModel.cs index 5cf4ea2..51bb84f 100644 --- a/StartServerWPF.Models/ApmsModel.cs +++ b/StartServerWPF.Models/ApmsModel.cs @@ -17,14 +17,14 @@ namespace StartServerWPF.Models private List ttime1; private string push2wx1; private string savepath1; - private string xmin1; - private string xmax1; - private string ymin1; - private string ymax1; - private string zref1; - private string zmin1; - private string zmax1; - private string minstep1; + private float xmin1; + private float xmax1; + private float ymin1; + private float ymax1; + private float zref1; + private float zmin1; + private float zmax1; + private float minstep1; private List channels1; [JsonProperty("station")] @@ -34,19 +34,19 @@ namespace StartServerWPF.Models [JsonProperty("Main.log_level")] public string log_level { get; set; } [JsonProperty("Main.slice_seconds")] - public string slice_seconds { get; set; } + public int slice_seconds { get; set; } [JsonProperty("Main.overlap_seconds")] - public string overlap_seconds { get; set; } + public int overlap_seconds { get; set; } [JsonProperty("Main.is_mag")] public string is_mag { get; set; } [JsonProperty("Main.is_write_slice")] public string is_write_slice { get; set; } [JsonProperty("Main.lon")] - public string lon { get; set; } + public double lon { get; set; } [JsonProperty("Main.lat")] - public string lat { get; set; } + public double lat { get; set; } [JsonProperty("Main.height")] - public string height { get; set; } + public double height { get; set; } [JsonProperty("Main.savepath")] public string savepath { get => savepath1; set => SetProperty(ref savepath1, value); } [JsonProperty("Main.push2wx")] @@ -54,13 +54,13 @@ namespace StartServerWPF.Models [JsonProperty("Main.push_url")] public string push_url { get; set; } [JsonProperty("Main.push_mag")] - public string push_mag { get; set; } + public double push_mag { get; set; } [JsonProperty("Main.message_id")] - public string message_id { get; set; } + public int message_id { get; set; } [JsonProperty("Main.company_id")] - public string company_id { get; set; } + public int company_id { get; set; } [JsonProperty("Main.area_id")] - public string area_id { get; set; } + public int area_id { get; set; } [JsonProperty("Main.content")] public string content { get; set; } [JsonProperty("Main.push_key")] @@ -74,25 +74,25 @@ namespace StartServerWPF.Models [JsonProperty("Locate.work_path")] public string work_path { get; set; } [JsonProperty("Locate.xmin")] - public string xmin { get => xmin1; set => SetProperty(ref xmin1, value); } + public float xmin { get => xmin1; set => SetProperty(ref xmin1, value); } [JsonProperty("Locate.xmax")] - public string xmax { get => xmax1; set => SetProperty(ref xmax1, value); } + public float xmax { get => xmax1; set => SetProperty(ref xmax1, value); } [JsonProperty("Locate.ymin")] - public string ymin { get => ymin1; set => SetProperty(ref ymin1, value); } + public float ymin { get => ymin1; set => SetProperty(ref ymin1, value); } [JsonProperty("Locate.ymax")] - public string ymax { get => ymax1; set => SetProperty(ref ymax1, value); } + public float ymax { get => ymax1; set => SetProperty(ref ymax1, value); } [JsonProperty("Locate.zref")] - public string zref { get => zref1; set => SetProperty(ref zref1, value); } + public float zref { get => zref1; set => SetProperty(ref zref1, value); } [JsonProperty("Locate.zmin")] - public string zmin { get => zmin1; set => SetProperty(ref zmin1, value); } + public float zmin { get => zmin1; set => SetProperty(ref zmin1, value); } [JsonProperty("Locate.zmax")] - public string zmax { get => zmax1; set => SetProperty(ref zmax1, value); } + public float zmax { get => zmax1; set => SetProperty(ref zmax1, value); } [JsonProperty("Locate.minstep")] - public string minstep { get => minstep1; set => SetProperty(ref minstep1, value); } + public float minstep { get => minstep1; set => SetProperty(ref minstep1, value); } [JsonProperty("Locate.method")] public string method { get; set; } [JsonProperty("Locate.clusted_otime")] - public string clusted_otime { get; set; } + public double clusted_otime { get; set; } } diff --git a/StartServerWPF.Models/WorkareaModel.cs b/StartServerWPF.Models/WorkareaModel.cs index e4383ec..420ca1e 100644 --- a/StartServerWPF.Models/WorkareaModel.cs +++ b/StartServerWPF.Models/WorkareaModel.cs @@ -11,48 +11,17 @@ using Prism.Mvvm; namespace StartServerWPF.Models { - - public class WorkareaModelArray + public class WorkareasModelArray { public int selectIndex { get; set; } - public List workarea { get;set;} - - public List CreateStationFromCSV(string fn,string location) - { - if (!File.Exists(fn)) return null; - List stations = new List(); - Aspose.Cells.TxtLoadOptions lo = new TxtLoadOptions(); - //Debug.WriteLine(Encoding.Default.ToString()); - lo.Encoding = Encoding.Default;//设置编码方式 - Workbook workbook = new Workbook(fn, lo); - - //配置读取文件的类型(CSV) - workbook.FileFormat = FileFormatType.Csv;//可在此配置Excel文件类型 - Worksheet worksheet = workbook.Worksheets[0];//默认第一个Sheet页 - - Cells cells = worksheet.Cells; - - //读取到DataTable中 - DataTable dt = cells.ExportDataTableAsString(0, 0, cells.MaxDataRow + 1, cells.MaxColumn + 1, true); - for (int i = 0; i < dt.Rows.Count; i++) - { - DataRow row = dt.Rows[i]; - StationControlModel model = new StationControlModel(); - model.NetWork = row[0].ToString(); - model.Num = row[1].ToString(); - model.Coordinate = new Coordinate3D(double.Parse(row[2].ToString()), double.Parse(row[3].ToString()), double.Parse(row[4].ToString())); - model.Sens = double.Parse(row[5].ToString()); - model.BeginUseTime = DateTime.Parse(row[6].ToString()); - model.StopUseTime = DateTime.Parse(row[7].ToString()); - model.Location = location; - stations.Add(model); - } - //释放资源 - workbook = null; - worksheet = null; - return stations; - } + public List workarea { get; set; } + } + public class Workareas + { + public string workareaname { get; set; } + public string filepath { get; set; } } + public class WorkareaModel : BindableBase { private string workareaname1; @@ -91,7 +60,43 @@ namespace StartServerWPF.Models public ApmsModel apmModel { get => apmModel1; set => SetProperty(ref apmModel1, value); } - public StationConfigModel StationConfig { get; set; } + public StationConfigModel StationConfig { get; set; } + + public List CreateStationFromCSV(string fn, string location) + { + if (!File.Exists(fn)) return null; + List stations = new List(); + Aspose.Cells.TxtLoadOptions lo = new TxtLoadOptions(); + //Debug.WriteLine(Encoding.Default.ToString()); + lo.Encoding = Encoding.Default;//设置编码方式 + Workbook workbook = new Workbook(fn, lo); + + //配置读取文件的类型(CSV) + workbook.FileFormat = FileFormatType.Csv;//可在此配置Excel文件类型 + Worksheet worksheet = workbook.Worksheets[0];//默认第一个Sheet页 + + Cells cells = worksheet.Cells; + + //读取到DataTable中 + DataTable dt = cells.ExportDataTableAsString(0, 0, cells.MaxDataRow + 1, cells.MaxColumn + 1, true); + for (int i = 0; i < dt.Rows.Count; i++) + { + DataRow row = dt.Rows[i]; + StationControlModel model = new StationControlModel(); + model.NetWork = row[0].ToString(); + model.Num = row[1].ToString(); + model.Coordinate = new Coordinate3D(double.Parse(row[2].ToString()), double.Parse(row[3].ToString()), double.Parse(row[4].ToString())); + model.Sens = double.Parse(row[5].ToString()); + model.BeginUseTime = DateTime.Parse(row[6].ToString()); + model.StopUseTime = DateTime.Parse(row[7].ToString()); + model.Location = location; + stations.Add(model); + } + //释放资源 + workbook = null; + worksheet = null; + return stations; + } } public class StationConfigModel: BindableBase diff --git a/StartServerWPF.Modules.Main/MainModule.cs b/StartServerWPF.Modules.Main/MainModule.cs index 5abf6ca..09b9efe 100644 --- a/StartServerWPF.Modules.Main/MainModule.cs +++ b/StartServerWPF.Modules.Main/MainModule.cs @@ -25,7 +25,7 @@ namespace StartServerWPF.Modules.Main containerRegistry.RegisterForNavigation(); containerRegistry.RegisterForNavigation(); - containerRegistry.RegisterDialog(); + containerRegistry.RegisterDialog(); containerRegistry.RegisterDialog(); containerRegistry.RegisterSingleton(); diff --git a/StartServerWPF.Modules.Main/ViewModels/SetParamDialogViewModel.cs b/StartServerWPF.Modules.Main/ViewModels/AddWorkAreaDialogViewModel.cs similarity index 50% rename from StartServerWPF.Modules.Main/ViewModels/SetParamDialogViewModel.cs rename to StartServerWPF.Modules.Main/ViewModels/AddWorkAreaDialogViewModel.cs index 9296d17..43abd66 100644 --- a/StartServerWPF.Modules.Main/ViewModels/SetParamDialogViewModel.cs +++ b/StartServerWPF.Modules.Main/ViewModels/AddWorkAreaDialogViewModel.cs @@ -5,6 +5,7 @@ using StartServerWPF.Models; using StartServerWPF.Modules.Main.Models; using System; using System.Collections.Generic; +using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; @@ -13,12 +14,12 @@ using System.Windows.Input; namespace StartServerWPF.Modules.Main.ViewModels { - public class SetParamDialogViewModel : BindableBase, IDialogAware + public class AddWorkAreaDialogViewModel : BindableBase, IDialogAware { - public SetParamDialogViewModel() + public AddWorkAreaDialogViewModel() { } - private string _title = "参数设置"; + private string _title = "添加工区"; public string Title => _title; public event Action RequestClose; @@ -32,71 +33,60 @@ namespace StartServerWPF.Modules.Main.ViewModels public void OnDialogOpened(IDialogParameters parameters) { - // _title = "编辑" + _title; var _type = parameters.GetValue("type"); - // _title = (_type == 0 ? "新增" : "修改") + _title; - _systemConfig = parameters.GetValue("model"); - MainModel= _systemConfig.vpnInfo; - MoniTime= parameters.GetValue("moniTime"); } - private SystemConfigModel _systemConfig; - private VpnInfo _mainModel = new VpnInfo(); - public VpnInfo MainModel + private string _workAreaName; + public string WorkAreaName { - get => _mainModel; - set { SetProperty(ref _mainModel, value); } + get => _workAreaName; + set { SetProperty(ref _workAreaName, value); } } - private DateTime _moniTime ; - public DateTime MoniTime + private string _workAreaPath; + public string WorkAreaPath { - get => _moniTime; - set { SetProperty(ref _moniTime, value); } + get => _workAreaPath; + set { SetProperty(ref _workAreaPath, value); } } - public DelegateCommand FilePathSaveCommand=> new(()=> { - updateJson = false; System.Windows.Forms.FolderBrowserDialog fbd = new System.Windows.Forms.FolderBrowserDialog(); fbd.ShowNewFolderButton = true; - if (fbd.ShowDialog() == System.Windows.Forms.DialogResult.OK) + if(string.IsNullOrEmpty(WorkAreaName)) { + MessageBox.Show("工区名称不能为空"); + return; } - }); - public DelegateCommand LogPathSaveCommand=> new(() => - { - System.Windows.Forms.FolderBrowserDialog fbd = new System.Windows.Forms.FolderBrowserDialog(); - fbd.SelectedPath = System.Environment.CurrentDirectory + "\\" + MainModel.SystemLogPath; - fbd.ShowNewFolderButton = true; if (fbd.ShowDialog() == System.Windows.Forms.DialogResult.OK) { - //if (fbd.SelectedPath != textBoxLogPath.Text) - //{ - // textBoxLogPath.Text = fbd.SelectedPath; - //} - MainModel.SystemLogPath = fbd.SelectedPath; + string path = Path.Combine(fbd.SelectedPath, WorkAreaName); + if (!Directory.Exists(path)) + { + Directory.CreateDirectory(path); + } + WorkAreaPath = path; } }); - bool updateJson = false; public ICommand ConfirmCommand { get => new DelegateCommand(() => { // 确认操作 // 数据校验(关键字段不能为空、年龄做数字区间的校验、做UserName的唯一检查(自定义特性检查) - if (string.IsNullOrEmpty(MainModel.VpnName) || string.IsNullOrEmpty(MainModel.VpnIP)) + if (string.IsNullOrEmpty(WorkAreaName) || string.IsNullOrEmpty(WorkAreaPath)) { - MessageBox.Show("内容不能为空", "提示", MessageBoxButton.OK); + MessageBox.Show("工区名称和目录不能为空", "提示", MessageBoxButton.OK); return; } if (MessageBox.Show("确认修改?", "参数设置", MessageBoxButton.OKCancel, MessageBoxImage.Exclamation) == MessageBoxResult.OK) { - - - JsonParser.WriteSystemConfigFile(JsonParser.systemConfigPath, _systemConfig); - - RequestClose?.Invoke(new DialogResult(ButtonResult.OK)); + var dialog = new DialogResult(ButtonResult.OK); + Workareas workareas = new Workareas(); + workareas.workareaname = WorkAreaName; + workareas.filepath = WorkAreaPath; + 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 d88fbee..f2612b4 100644 --- a/StartServerWPF.Modules.Main/ViewModels/DataProcessViewModel.cs +++ b/StartServerWPF.Modules.Main/ViewModels/DataProcessViewModel.cs @@ -15,24 +15,26 @@ using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Input; +using System.Windows.Threading; namespace StartServerWPF.Modules.Main.ViewModels { public class DataProcessViewModel : BindableBase { - public DataProcessViewModel(MainViewModel mainViewModel, SystemConfigModel configModel, WorkareaModelArray modelArray) + public DataProcessViewModel(MainViewModel mainViewModel, SystemConfigModel configModel, WorkareaModel workareaModel, WorkareasModelArray workareasModelArray) { this._mainViewModel = mainViewModel; this._systemConfig = configModel; - this.modelArray = modelArray; + this._workareaModel = workareaModel; + this._workareasModelArray = workareasModelArray; } private string _title = "应用列表"; public string Title => _title; private readonly MainViewModel _mainViewModel; private SystemConfigModel _systemConfig; - private readonly WorkareaModelArray modelArray; - private WorkareaModel _workareaModel; + private readonly WorkareaModel _workareaModel; + private readonly WorkareasModelArray _workareasModelArray; private string _dataPath; public string DataPath { @@ -69,7 +71,7 @@ namespace StartServerWPF.Modules.Main.ViewModels { if (value >= 0) { - _workareaModel = modelArray.workarea[value]; + // _workareaModel = modelArray.workarea[value]; } SetProperty(ref _wareaSelectedIndex, value); } @@ -87,15 +89,29 @@ namespace StartServerWPF.Modules.Main.ViewModels get => _apmsEventSource; set => SetProperty(ref _apmsEventSource, value); } + + private ObservableCollection _processSliceSource = new ObservableCollection(); + public ObservableCollection ProcessSliceSource + { + get => _processSliceSource; + set => SetProperty(ref _processSliceSource, value); + } + + private bool _IsBusy = true; + public bool IsBusy + { + get => _IsBusy; + set { SetProperty(ref _IsBusy, value); } + } public DelegateCommand LoadedCommand => new(() => { StartSelectedDate = DateTime.Now; EndSelectedDate = DateTime.Now; - this._workareaModel = modelArray.workarea[modelArray.selectIndex]; + WorkareaNameSource = new ObservableCollection(); - modelArray.workarea.Select(n => n.workareaname).ToList().ForEach(a => WorkareaNameSource.Add(a)); - WareaSelectedIndex = modelArray.selectIndex; + _workareasModelArray.workarea.Select(n => n.workareaname).ToList().ForEach(a => WorkareaNameSource.Add(a)); + WareaSelectedIndex = _workareasModelArray.selectIndex; }); @@ -125,12 +141,13 @@ namespace StartServerWPF.Modules.Main.ViewModels { get => new DelegateCommand(() => { - // 数据校验(关键字段不能为空、年龄做数字区间的校验、做UserName的唯一检查(自定义特性检查) - if (string.IsNullOrEmpty(DataPath) || string.IsNullOrEmpty(SavePath)) - { - MessageBox.Show("内容不能为空", "提示", MessageBoxButton.OK); - return; - } + + // 数据校验(关键字段不能为空、年龄做数字区间的校验、做UserName的唯一检查(自定义特性检查) + if (string.IsNullOrEmpty(DataPath) || string.IsNullOrEmpty(SavePath)) + { + MessageBox.Show("内容不能为空", "提示", MessageBoxButton.OK); + return; + } if (MessageBox.Show("确认修改?", "参数设置", MessageBoxButton.OKCancel, MessageBoxImage.Exclamation) == MessageBoxResult.OK) { @@ -141,53 +158,56 @@ namespace StartServerWPF.Modules.Main.ViewModels return; } DateTime dateTime = StartSelectedDate; - string temPath = Path.GetPathRoot( _workareaModel.savepath) + "temPath"; + string temPath = Path.GetPathRoot(_workareaModel.savepath) + "temPath"; if (!Directory.Exists(temPath)) { Directory.CreateDirectory(temPath); } - while ((EndSelectedDate - dateTime).TotalMinutes >= 1) + Task.Run(() => { - string path = Path.GetFullPath($"{DataPath}\\{dateTime.Month.ToString().PadLeft(2, '0')}\\{dateTime.Day.ToString().PadLeft(2, '0')}\\{dateTime.Hour.ToString().PadLeft(2, '0')}\\{dateTime.Minute.ToString().PadLeft(2, '0')}"); - dateTime= dateTime.AddMinutes(1); - if( !Directory.Exists(path)) + IsBusy = false; + while ((EndSelectedDate - dateTime).TotalMinutes >= 1) { - continue; + string path = Path.GetFullPath($"{DataPath}\\{dateTime.Month.ToString().PadLeft(2, '0')}\\{dateTime.Day.ToString().PadLeft(2, '0')}\\{dateTime.Hour.ToString().PadLeft(2, '0')}\\{dateTime.Minute.ToString().PadLeft(2, '0')}"); + dateTime = dateTime.AddMinutes(1); + if (!Directory.Exists(path)) + { + continue; + } + var mseedFiles = new DirectoryInfo(path).EnumerateFiles("*.mseed"); + // var mseedFiles = files.Where(i => i.Extension == ".mseed"); + Parallel.ForEach(mseedFiles, (item) => + { + Debug.WriteLine($"***************path:{path},{item.FullName}"); + File.Copy(item.FullName, Path.Combine(temPath, item.Name), true); + }); } - var mseedFiles = new DirectoryInfo(path).EnumerateFiles("*.mseed"); - // var mseedFiles = files.Where(i => i.Extension == ".mseed"); - Parallel.ForEach(mseedFiles, (item) => - { - Debug.WriteLine($"***************path:{path},{item.FullName}"); - File.Copy(item.FullName, Path.Combine( temPath, item.Name), true); - }); - } - ProcessInfo process = _systemConfig.dataProTools; - int index = process.ProParams.IndexOf("-wave"); - string str = process.ProParams.Substring(0, index) + "-wave"; - process.ProParams = $"{str} {temPath}"; + ProcessInfo process = _systemConfig.dataProTools; + int index = process.ProParams.IndexOf("-wave"); + string str = process.ProParams.Substring(0, index) + "-wave"; + process.ProParams = $"{str} {temPath}"; - //gw.tools.exe配置更新 - ApmsModel tools = _workareaModel.apmModel; - // tools.savepath = SavePath; // _workareaModel.savepath + "/" +SavePath;; - tools.station = Path.GetFullPath(Path.Combine(JsonParser.workareaPath, _workareaModel.apmModel.station)).Replace("\\", "/"); - tools.ttime[0].ttime2d = Path.GetFullPath(Path.Combine(JsonParser.workareaPath, _workareaModel.apmModel.ttime[0].ttime2d)).Replace("\\", "/"); + //dataProtools配置更新 + ApmsModel tools = _workareaModel.apmModel; + tools.savepath = SavePath; + JsonParser.WriteSystemConfigFile(Path.Combine(_systemConfig.dataProTools.ProPath, "apms.json"), tools); - tools.push2wx = _workareaModel.toolpush2wx ? "YES" : "NO"; - tools.channels = new List + var mfile = new DirectoryInfo(temPath).EnumerateFiles("*.mseed"); + if (mfile.Any()) + { + isStart = true; + if (fileDic.Count != 0) fileDic.Clear(); + this.StartProcess(process); + } + else { - new StationChannelsModel() + Application.Current.Dispatcher.InvokeAsync(() => { - location = _workareaModel.StationConfig.Location, - network = _workareaModel.StationConfig.Network, - channels = _workareaModel.StationConfig.Channels, - station = string.Join(",", _workareaModel.StationConfig.Stations.Where(p => p.IsEnable).Select(n => n.Name)) - } - }; - JsonParser.WriteSystemConfigFile(Path.Combine(_systemConfig.dataProTools.ProPath, "apms.json"), tools); - - this.StartProcess(process); + AddItems(ProcessSliceSource, new ProcessingInformationModel { ProcessMes = "没有需要处理的文件", MonitorTime = DateTime.Now.ToString() }); + }, DispatcherPriority.ApplicationIdle); + } + }); } }); } @@ -207,15 +227,73 @@ namespace StartServerWPF.Modules.Main.ViewModels process.StartInfo.CreateNoWindow = true; //* Set your output and error (asynchronous) handlers + process.OutputDataReceived += new DataReceivedEventHandler(OutputHandler); + process.ErrorDataReceived += new DataReceivedEventHandler(OutputHandler); //* Start process and handlers bool res = process.Start(); - // process.WaitForExit(); + process.BeginOutputReadLine(); + process.BeginErrorReadLine(); return res; } + private void AddItems(ObservableCollection list, T t1) + { + if (list == null) + { + return; + } + list.Add(t1); + if (list.Count > 30) + { + T item = list[0]; + list.RemoveAt(0); + } + } + Dictionary fileDic=new Dictionary(); + bool isStart = false; + void OutputHandler(object sendingProcess, DataReceivedEventArgs outLine) + { + Debug.WriteLine("output*************:{0},{1}", sendingProcess.ToString(), outLine.Data); + if (string.IsNullOrEmpty(outLine.Data)) return; + + var pro = sendingProcess as Process; + if (pro != null && pro.MainModule.ModuleName.Contains(_systemConfig.dataProTools.ProName)) + { + string mes = outLine.Data; + if (outLine.Data.Contains("run time cost=")) + { + int index = mes.IndexOf('['); + string str = mes.Substring(index + 1).Replace("]", ""); + mes = $"处理完成,共耗时{str}"; + } + else if (outLine.Data.Contains("read HA")) + { + int index = mes.IndexOf("read "); + string str = mes.Substring(index + 8).Substring(index, 3); + + fileDic[str] = outLine.Data; + return; + } + else if(isStart && outLine.Data.Contains("ProcessSlice: ")) + { + isStart = false; + Application.Current.Dispatcher.InvokeAsync(() => + { + AddItems(ProcessSliceSource, new ProcessingInformationModel { ProcessMes = $"共载入{fileDic.Keys.Count}组台站数据", MonitorTime = DateTime.Now.ToString() }); + AddItems(ProcessSliceSource, new ProcessingInformationModel { ProcessMes = "开始处理", MonitorTime = DateTime.Now.ToString() }); + }, DispatcherPriority.ApplicationIdle); + } + Application.Current.Dispatcher.InvokeAsync(() => + { + AddItems(ProcessSliceSource, new ProcessingInformationModel { ProcessMes =mes, MonitorTime = DateTime.Now.ToString() }); + }, DispatcherPriority.ApplicationIdle); + } + } + private void Process_Exited(object? sender, EventArgs e) { + IsBusy = true; var fileName = Directory.GetFiles(SavePath, "*.index"); if (!File.Exists( fileName.FirstOrDefault())) { diff --git a/StartServerWPF.Modules.Main/ViewModels/MainViewModel.cs b/StartServerWPF.Modules.Main/ViewModels/MainViewModel.cs index cdfb7f6..4790a6d 100644 --- a/StartServerWPF.Modules.Main/ViewModels/MainViewModel.cs +++ b/StartServerWPF.Modules.Main/ViewModels/MainViewModel.cs @@ -252,7 +252,7 @@ namespace StartServerWPF.Modules.Main.ViewModels set => SetProperty(ref _toolsEventSource, value); } - public static void AddItems(ObservableCollection list, T t1) + private void AddItems(ObservableCollection list, T t1) { if (list == null) { diff --git a/StartServerWPF.Modules.Main/ViewModels/SetParamViewModel.cs b/StartServerWPF.Modules.Main/ViewModels/SetParamViewModel.cs index 34692b9..f35a00d 100644 --- a/StartServerWPF.Modules.Main/ViewModels/SetParamViewModel.cs +++ b/StartServerWPF.Modules.Main/ViewModels/SetParamViewModel.cs @@ -16,29 +16,32 @@ using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Input; +using System.Windows.Media.Animation; namespace StartServerWPF.Modules.Main.ViewModels { public class SetParamViewModel : BindableBase { - public SetParamViewModel(SystemConfigModel configModel, WorkareaModelArray workareaModelArray) + public SetParamViewModel(IDialogService dialogService, SystemConfigModel configModel, + WorkareaModel workareaModel, WorkareasModelArray workareasModelArray) { + this._dialogService = dialogService; _systemConfig = configModel; - this._workareaModelArray = workareaModelArray; + WareaModel = workareaModel; + this._workareasModelArray = workareasModelArray; MainModel = _systemConfig.vpnInfo; WorkareaNameSource = new ObservableCollection(); - _workareaModelArray.workarea.Select(n=>n.workareaname).ToList().ForEach(a=> WorkareaNameSource.Add(a)); - - WareaSelectedIndex = _workareaModelArray.selectIndex; - WareaModel = _workareaModelArray.workarea[WareaSelectedIndex]; + _workareasModelArray.workarea.Select(n=>n.workareaname).ToList().ForEach(a=> WorkareaNameSource.Add(a)); + WareaSelectedIndex = _workareasModelArray.selectIndex; } private string _title = "应用列表"; public string Title => _title; string apmStationFile = string.Empty; string apmttime2dFile = string.Empty; + private readonly IDialogService _dialogService; private SystemConfigModel _systemConfig; - private readonly WorkareaModelArray _workareaModelArray; + private readonly WorkareasModelArray _workareasModelArray; private ObservableCollection _workareaNameSource; public ObservableCollection WorkareaNameSource { @@ -53,7 +56,16 @@ namespace StartServerWPF.Modules.Main.ViewModels set { if (value >= 0) { - WareaModel = _workareaModelArray.workarea[value]; + string file = Path.Combine(_workareasModelArray.workarea[value].filepath, "workarea.json"); + if (!File.Exists(file)) + { + JsonParser.WriteSystemConfigFile(file, WareaModel); + } + string json = File.ReadAllText(file); + WareaModel = JsonConvert.DeserializeObject(json); + WareaModel.apmModel.station = string.Empty; + WareaModel.apmModel.ttime[0].ttime2d = string.Empty; + _workareasModelArray.selectIndex = value; } SetProperty(ref _wareaSelectedIndex, value); } @@ -84,26 +96,27 @@ namespace StartServerWPF.Modules.Main.ViewModels apmttime2dFile = string.Empty; }); - public DelegateCommand AddItemCommand => new(() => { - string strJson= JsonConvert.SerializeObject(WareaModel, Formatting.Indented); - WorkareaModel workarea = JsonConvert.DeserializeObject(strJson); - - workarea.workareaname = AddWorkareaName; - var mod = _workareaModelArray.workarea.Where(w => w.workareaname == _addWorkareaName).FirstOrDefault(); - if (mod != null) - { - MessageBox.Show($"名称:{AddWorkareaName}已存在"); - return; - } - workarea.chartsavepath = "EVT2014"; - workarea.apmsavepath = "NET2014"; - workarea.toolsavepath = "post"; - workarea.StationConfig.Stations.ForEach(w => { w.IsEnable= true; }); - _workareaModelArray.workarea.Add(workarea); - WorkareaNameSource.Add(AddWorkareaName); + DialogParameters param = new DialogParameters(); + // param.Add("type", 1);// 编辑 + _dialogService.ShowDialog("AddWorkAreaDialog", + param, + new Action(result => + { + 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(); + if (file == null) + { + _workareasModelArray.workarea.Add(area); + WorkareaNameSource.Add(area.workareaname); + } + } + })); }); public DelegateCommand SelectFileCommand => new((obj) => @@ -117,7 +130,7 @@ namespace StartServerWPF.Modules.Main.ViewModels switch (para) { case "apmsStation": - WareaModel.apmModel.savepath = fbd.SafeFileName; + WareaModel.apmModel.station = fbd.SafeFileName; apmStationFile = fbd.FileName; break; case "apmsttime2d": @@ -162,18 +175,21 @@ namespace StartServerWPF.Modules.Main.ViewModels get => new DelegateCommand(() => { // 数据校验(关键字段不能为空、年龄做数字区间的校验、做UserName的唯一检查(自定义特性检查) - if (string.IsNullOrEmpty(MainModel.VpnName) || string.IsNullOrEmpty(MainModel.VpnIP)) + if (string.IsNullOrEmpty(WareaModel.savepath) + || string.IsNullOrEmpty(WareaModel.apmModel.station) + || string.IsNullOrEmpty(WareaModel.apmModel.ttime[0].ttime2d)) { - MessageBox.Show("内容不能为空", "提示", MessageBoxButton.OK); + MessageBox.Show("目录内容不能为空", "提示", MessageBoxButton.OK); return; } if (MessageBox.Show("确认修改?", "参数设置", MessageBoxButton.OKCancel, MessageBoxImage.Exclamation) == MessageBoxResult.OK) { - //1 Workarea配置更新 - string wmJson = JsonConvert.SerializeObject(_workareaModelArray, Formatting.Indented); + + //1 Workarea配置更新,选择的索引 + JsonParser.WriteSystemConfigFile(Path.Combine(JsonParser.workareaPath, "Workareas.json"), _workareasModelArray); _wareaModel.apmModel.channels = new List - { + { new StationChannelsModel() { location = _wareaModel.StationConfig.Location, @@ -181,49 +197,65 @@ namespace StartServerWPF.Modules.Main.ViewModels channels = _wareaModel.StationConfig.Channels, station = string.Join(",", _wareaModel.StationConfig.Stations.Where(p => p.IsEnable).Select(n => n.Name)) } - }; - File.WriteAllText(Path.Combine(JsonParser.workareaPath, "Workarea.json"), wmJson); + }; + JsonParser.WriteSystemConfigFile(Path.Combine(_wareaModel.savepath, "Workarea.json"), _wareaModel); + string wareaJson = JsonConvert.SerializeObject(_wareaModel); + var curWorkarea = JsonConvert.DeserializeObject(wareaJson); if (!string.IsNullOrEmpty(apmStationFile)) { - string destFileName = Path.GetFullPath(Path.Combine(JsonParser.workareaPath, WareaModel.apmModel.savepath)); - File.Copy(apmStationFile, destFileName, true); + string destFileName = Path.GetFullPath(Path.Combine(curWorkarea.savepath, curWorkarea.apmModel.station)); + if (destFileName != apmStationFile) + { + File.Copy(apmStationFile, destFileName, true); + } apmStationFile = null; } if(!string.IsNullOrEmpty(apmttime2dFile)) { - string destFileName = Path.GetFullPath(Path.Combine(JsonParser.workareaPath, WareaModel.apmModel.ttime[0].ttime2d)); - File.Copy(apmttime2dFile, destFileName, true); + string destFileName = Path.GetFullPath(Path.Combine(curWorkarea.savepath, curWorkarea.apmModel.ttime[0].ttime2d)); + if (destFileName != apmttime2dFile) + { + File.Copy(apmttime2dFile, destFileName, true); + } apmttime2dFile = null; } //2 gw.apms.exe配置更新 { - ApmsModel apms = _wareaModel.apmModel; - apms.station = Path.GetFullPath(Path.Combine(JsonParser.workareaPath, WareaModel.apmModel.station)).Replace("\\","/"); - apms.ttime[0].ttime2d= Path.GetFullPath(Path.Combine(JsonParser.workareaPath, WareaModel.apmModel.ttime[0].ttime2d)).Replace("\\", "/"); ; - apms.savepath = _wareaModel.savepath + "/" + _wareaModel.apmsavepath; - apms.push2wx = _wareaModel.apmpush2wx ? "YES" : "NO"; + ApmsModel apms = curWorkarea.apmModel; + apms.station = Path.GetFullPath(Path.Combine(curWorkarea.savepath, curWorkarea.apmModel.station)).Replace("\\", "/"); + apms.ttime[0].ttime2d = Path.GetFullPath(Path.Combine(curWorkarea.savepath, curWorkarea.apmModel.ttime[0].ttime2d)).Replace("\\", "/"); + apms.savepath = Path.Combine(curWorkarea.savepath, curWorkarea.apmsavepath); + apms.push2wx = curWorkarea.apmpush2wx ? "YES" : "NO"; JsonParser.WriteSystemConfigFile(Path.Combine(_systemConfig.proApms.ProPath, "apms.json"), apms); } //3 gw.tools.exe配置更新 { - ApmsModel tools = _wareaModel.apmModel; - tools.station = Path.GetFullPath(Path.Combine(JsonParser.workareaPath, WareaModel.apmModel.station)).Replace("\\", "/"); - tools.ttime[0].ttime2d = Path.GetFullPath(Path.Combine(JsonParser.workareaPath, WareaModel.apmModel.ttime[0].ttime2d)).Replace("\\", "/"); ; - tools.savepath = _wareaModel.savepath+"/"+ _wareaModel.toolsavepath; - tools.push2wx = _wareaModel.toolpush2wx ? "YES" : "NO"; ; + ApmsModel tools = curWorkarea.apmModel; + tools.station = Path.GetFullPath(Path.Combine(curWorkarea.savepath, curWorkarea.apmModel.station)).Replace("\\", "/"); + tools.ttime[0].ttime2d = Path.GetFullPath(Path.Combine(curWorkarea.savepath, curWorkarea.apmModel.ttime[0].ttime2d)).Replace("\\", "/"); + tools.savepath = Path.Combine(curWorkarea.savepath, curWorkarea.toolsavepath); + tools.push2wx = curWorkarea.toolpush2wx ? "YES" : "NO"; ; JsonParser.WriteSystemConfigFile(Path.Combine(_systemConfig.proTools.ProPath, "apms.json"), tools); - - //4 SystemConfig.json配置更新 + + //4 SystemConfig.json配置更新 int index = _systemConfig.proTools.ProParams.IndexOf("-savepath"); string str = _systemConfig.proTools.ProParams.Substring(0, index) + "-savepath"; - _systemConfig.proTools.ProParams = $"{str} {tools.savepath} -delay {_wareaModel.delayTime * 60}"; + _systemConfig.proTools.ProParams = $"{str} {tools.savepath} -delay {curWorkarea.delayTime * 60}"; JsonParser.WriteSystemConfigFile(JsonParser.systemConfigPath, _systemConfig); } + //dataProTools配置更新 + ApmsModel protools = curWorkarea.apmModel; + // tools.savepath = SavePath; // _workareaModel.savepath + "/" +SavePath;; + protools.station = Path.GetFullPath(Path.Combine(curWorkarea.savepath, curWorkarea.apmModel.station)).Replace("\\", "/"); + protools.ttime[0].ttime2d = Path.GetFullPath(Path.Combine(curWorkarea.savepath, curWorkarea.apmModel.ttime[0].ttime2d)).Replace("\\", "/"); + // protools.push2wx = _workareaModel.toolpush2wx ? "YES" : "NO"; + + JsonParser.WriteSystemConfigFile(Path.Combine(_systemConfig.dataProTools.ProPath, "apms.json"), protools); //5 gw.recvftp.exe配置更新 - JsonParser.UpdateRecvJson(Path.Combine(_systemConfig.proRecv.ProPath, _systemConfig.proRecv.JsonPath), _wareaModel.savepath + "/" + _wareaModel.chartsavepath); + JsonParser.UpdateRecvJson(Path.Combine(_systemConfig.proRecv.ProPath, _systemConfig.proRecv.JsonPath), Path.Combine(curWorkarea.savepath, curWorkarea.chartsavepath).Replace("\\", "/")); } }); } diff --git a/StartServerWPF.Modules.Main/Views/AddWorkAreaDialog.xaml b/StartServerWPF.Modules.Main/Views/AddWorkAreaDialog.xaml new file mode 100644 index 0000000..ab8ab22 --- /dev/null +++ b/StartServerWPF.Modules.Main/Views/AddWorkAreaDialog.xaml @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + + + +