using InSituLaboratory.Common; using InSituLaboratory.Entities; using InSituLaboratory.Entities.SqlSugar; using InSituLaboratory.IService; using InSituLaboratory.IService.Sensor; using InSituLaboratory.Models; using InSituLaboratory.Service; using Microsoft.EntityFrameworkCore.Query.Internal; using Prism.Regions; using Prism.Services.Dialogs; using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Forms; namespace InSituLaboratory.ViewModels.Pages { public class SequentialDistributionViewModel : ViewModelBase { #region 实体类 public ObservableCollection sysSequentialDetailsListS1 { get; set; } = new ObservableCollection(); public ObservableCollection sysSequentialDetailsListS2 { get; set; } = new ObservableCollection(); public ObservableCollection sysSequentialDetailsListS3 { get; set; } = new ObservableCollection(); public ObservableCollection sysSequentialDetailsListS4 { get; set; } = new ObservableCollection(); public ObservableCollection sysSequentialDetailsListS5 { get; set; } = new ObservableCollection(); public CurrentSequentiualModel CurrentSequentiual { get; set; } = new CurrentSequentiualModel(); //当前运行时序状态表 public SequentStatusModel sequentStatusModel { get; set; } = new SequentStatusModel(); #endregion IDialogService _dialogService; ISysSequentialService _sysSequentialService; ISensorService _sensorService; public SequentialDistributionViewModel(IRegionManager regionManager, IDialogService dialogService, ISysSequentialService sysSequentialService, ISensorService sensorService) : base(regionManager) { this.PageTitle = "时序下发"; _dialogService = dialogService; _sysSequentialService = sysSequentialService; _sensorService = sensorService; Refresh(); RefreshS1(); RefreshS2(); RefreshS3(); RefreshS4(); RefreshS5(); } /// /// 页面刷新 /// public override void Refresh() { //获取当前运行时序状态表 var CurrentSequentiualList = _sensorService.GetCurrentSequentiual(); //当前运行时序状态数据 if (CurrentSequentiualList.Count() != 0) { var data = _sensorService.GetCurrentSequentiual().FirstOrDefault(); CurrentSequentiual.Sequentiual1Status = data.Sequentiual1Status; CurrentSequentiual.Sequentiual2Status = data.Sequentiual2Status; CurrentSequentiual.Sequentiual3Status = data.Sequentiual3Status; CurrentSequentiual.Sequentiual4Status = data.Sequentiual4Status; CurrentSequentiual.Sequentiual5Status = data.Sequentiual5Status; } } #region 时序 1 public override void RefreshS1() { int num = 1; SearchKey = "时序1"; sysSequentialDetailsListS1.Clear(); //获取时序母表数据 var list = _sysSequentialService.GetSequentials(SearchKey).ToList(); if (list.Count != 0) { var data = _sysSequentialService.GetSequentials(SearchKey).First(); //获取时序子表数据 var dataDetails = _sysSequentialService.GetSequentialDetails(data.Number).ToList(); foreach (var item in dataDetails) { SysSequentialDetails sysSequentialDetail = new SysSequentialDetails(); sysSequentialDetail.Number = item.Number; sysSequentialDetail.DurationTime = item.DurationTime; sysSequentialDetail.SensorID = item.SensorID; sysSequentialDetail.WorkTime = item.WorkTime; sysSequentialDetail.SequenceGroup = item.SequenceGroup; sysSequentialDetail.CreateTime = item.CreateTime; sysSequentialDetail.Sequential = item.Sequential; sysSequentialDetail.SysSquentialID = item.SysSquentialID; sysSequentialDetail.IsDelete = item.IsDelete; sysSequentialDetail.num = num; sysSequentialDetailsListS1.Add(sysSequentialDetail); num++; } sequentStatusModel.SequentialStartTime1 = data.StartTime; sequentStatusModel.SequentialEndTime1 = data.EndTime; sequentStatusModel.Status1 = data.Status; } } /// /// 编辑或者新增 /// /// public override void DoModifyS1(object model) { if (sequentStatusModel.SequentialStartTime1 == null || sequentStatusModel.SequentialEndTime1 == null) { System.Windows.Forms.MessageBox.Show("时序1: 开始时间和结束时间不能为空!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } else { DateTime expirationDate = (DateTime)sequentStatusModel.SequentialStartTime1; DateTime expirationDate1 = (DateTime)sequentStatusModel.SequentialEndTime1; DateTime dateTime = DateTime.Now; if (expirationDate < dateTime) { System.Windows.Forms.MessageBox.Show("时序1: 开始时间不得早于当前时间!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } else if (expirationDate1 < dateTime) { System.Windows.Forms.MessageBox.Show("时序1: 结束时间不得早于当前时间!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } else if (expirationDate >= expirationDate1) { System.Windows.Forms.MessageBox.Show("时序1: 结束时间不得早于开始时间!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } else { DialogParameters ps = new DialogParameters(); ps.Add("model", model); ps.Add("sequentialStartTime", sequentStatusModel.SequentialStartTime1); ps.Add("sequentialEndTime", sequentStatusModel.SequentialEndTime1); ps.Add("kind", "时序1"); _dialogService.ShowDialog("ModifySequentialView", ps, result => { // 判断子窗口的返回状态,如果OK,刷新当前页面,否则不管 if (result.Result == ButtonResult.OK) { this.RefreshS1(); } }); } } } /// /// 删除 /// /// public override void DoDeleteS1(object model) { try { if (System.Windows.Forms.MessageBox.Show("是否确定删除此项?", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == System.Windows.Forms.DialogResult.OK) { // 软删除 var data = _sysSequentialService.Find((model as SysSequentialDetails).Number); data.IsDelete = 1; _sysSequentialService.Update(data); //查询删除后子表是否还存在时序配置 var list = _sysSequentialService.GetSequentialDetails(data.SysSquentialID).ToList(); //若子表不存在当前时序下配置信息,则删除对应的母表时序 if (list.Count() == 0) { var SysSequential = _sysSequentialService.Find(data.SysSquentialID); SysSequential.IsDelete = 1; _sysSequentialService.Update(SysSequential); } ///更新时序总表 var data1 = _sysSequentialService.Find((model as SysSequentialDetails).Number); data1.IsDelete = 1; _sysSequentialService.Update(data1); System.Windows.Forms.MessageBox.Show("删除完成!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk); this.RefreshS1(); } } catch (Exception ex) { System.Windows.Forms.MessageBox.Show(ex.Message, "提示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk); } } /// /// 时序下发 /// public override void SendS1() { if (sequentStatusModel.SequentialStartTime1 == null || sequentStatusModel.SequentialEndTime1 == null) { System.Windows.Forms.MessageBox.Show("时序1: 开始时间和结束时间不能为空!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } else { if (RelayViewModel.SocketInfo.ConnectionMessage == "断开") { List byteaq = encode((DateTime)sequentStatusModel.SequentialStartTime1, (DateTime)sequentStatusModel.SequentialEndTime1, 0x01, "时序1"); List buffer = Escape(byteaq.ToArray()); string list = tools.byteToHexStr(buffer.ToArray()); byte[] bytea = tools.ConvertHexStringToBytes(list); RelayViewModel.clientModel.SendData(bytea); System.Windows.Forms.MessageBox.Show("命令已下发!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } else { System.Windows.Forms.MessageBox.Show("请先连接服务端!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } } } /// /// 时序清空 /// public override void ClearS1() { if (sequentStatusModel.SequentialStartTime1 == null || sequentStatusModel.SequentialEndTime1 == null) { System.Windows.Forms.MessageBox.Show("时序1: 开始时间和结束时间不能为空!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } else { if (RelayViewModel.SocketInfo.ConnectionMessage == "断开") { dosend(0x01, 0x02); System.Windows.Forms.MessageBox.Show("命令已下发!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } else { System.Windows.Forms.MessageBox.Show("请先连接服务端!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } } } /// /// 时序启动 /// public override void BeginS1() { if (sequentStatusModel.SequentialStartTime1 == null || sequentStatusModel.SequentialEndTime1 == null) { System.Windows.Forms.MessageBox.Show("时序1: 开始时间和结束时间不能为空!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } else { if (RelayViewModel.SocketInfo.ConnectionMessage == "断开") { dosend(0x01, 0x03); System.Windows.Forms.MessageBox.Show("命令已下发!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } else { System.Windows.Forms.MessageBox.Show("请先连接服务端!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } } } /// /// 时序暂停 /// public override void SuspendS1() { if (sequentStatusModel.SequentialStartTime1 == null || sequentStatusModel.SequentialEndTime1 == null) { System.Windows.Forms.MessageBox.Show("时序1: 开始时间和结束时间不能为空!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } else { if (RelayViewModel.SocketInfo.ConnectionMessage == "断开") { dosend(0x01, 0x04); System.Windows.Forms.MessageBox.Show("命令已下发!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } else { System.Windows.Forms.MessageBox.Show("请先连接服务端!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } } } #endregion #region 时序 2 public override void RefreshS2() { int num = 1; SearchKey = "时序2"; sysSequentialDetailsListS2.Clear(); var list = _sysSequentialService.GetSequentials(SearchKey).ToList(); if (list.Count != 0) { var data = _sysSequentialService.GetSequentials(SearchKey).First(); var dataDetails = _sysSequentialService.GetSequentialDetails(data.Number).ToList(); foreach (var item in dataDetails) { SysSequentialDetails sysSequentialDetail = new SysSequentialDetails(); sysSequentialDetail.Number = item.Number; sysSequentialDetail.DurationTime = item.DurationTime; sysSequentialDetail.SensorID = item.SensorID; sysSequentialDetail.WorkTime = item.WorkTime; sysSequentialDetail.SequenceGroup = item.SequenceGroup; sysSequentialDetail.CreateTime = item.CreateTime; sysSequentialDetail.Sequential = item.Sequential; sysSequentialDetail.SysSquentialID = item.SysSquentialID; sysSequentialDetail.IsDelete = item.IsDelete; sysSequentialDetail.num = num; sysSequentialDetailsListS2.Add(sysSequentialDetail); num++; } sequentStatusModel.SequentialStartTime2 = data.StartTime; sequentStatusModel.SequentialEndTime2 = data.EndTime; sequentStatusModel.Status2 = data.Status; } } /// /// 编辑或者新增 /// /// public override void DoModifyS2(object model) { if (sequentStatusModel.SequentialStartTime2 == null || sequentStatusModel.SequentialEndTime2 == null) { System.Windows.Forms.MessageBox.Show("时序2:开始时间和结束时间不能为空!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } else { DateTime expirationDate = (DateTime)sequentStatusModel.SequentialStartTime2; DateTime expirationDate1 = (DateTime)sequentStatusModel.SequentialEndTime2; DateTime dateTime = DateTime.Now; if (expirationDate < dateTime) { System.Windows.Forms.MessageBox.Show("时序2:开始时间不得早于当前时间!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } else if (expirationDate1 < dateTime) { System.Windows.Forms.MessageBox.Show("时序2:结束时间不得早于当前时间!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } else if (expirationDate >= expirationDate1) { System.Windows.Forms.MessageBox.Show("时序2:结束时间不得早于开始时间!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } else { DialogParameters ps = new DialogParameters(); ps.Add("model", model); ps.Add("sequentialStartTime", sequentStatusModel.SequentialStartTime2); ps.Add("sequentialEndTime", sequentStatusModel.SequentialEndTime2); ps.Add("kind", "时序2"); _dialogService.ShowDialog("ModifySequentialView", ps, result => { // 判断子窗口的返回状态,如果OK,刷新当前页面,否则不管 if (result.Result == ButtonResult.OK) { this.RefreshS2(); } }); } } } /// /// 删除 /// /// public override void DoDeleteS2(object model) { try { if (System.Windows.Forms.MessageBox.Show("是否确定删除此项?", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == System.Windows.Forms.DialogResult.OK) { // 软删除 var data = _sysSequentialService.Find((model as SysSequentialDetails).Number); data.IsDelete = 1; _sysSequentialService.Update(data); //查询删除后子表是否还存在时序配置 var list = _sysSequentialService.GetSequentialDetails(data.SysSquentialID).ToList(); //若子表不存在当前时序下配置信息,则删除对应的母表时序 if (list.Count() == 0) { var SysSequential = _sysSequentialService.Find(data.SysSquentialID); SysSequential.IsDelete = 1; _sysSequentialService.Update(SysSequential); } System.Windows.Forms.MessageBox.Show("删除完成!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk); this.RefreshS2(); } } catch (Exception ex) { System.Windows.Forms.MessageBox.Show(ex.Message, "提示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk); } } /// /// 时序清空 /// public override void ClearS2() { if (sequentStatusModel.SequentialStartTime2 == null || sequentStatusModel.SequentialEndTime2 == null) { System.Windows.Forms.MessageBox.Show("时序2: 开始时间和结束时间不能为空!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } else { if (RelayViewModel.SocketInfo.ConnectionMessage == "断开") { dosend(0x02, 0x02); System.Windows.Forms.MessageBox.Show("命令已下发!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } else { System.Windows.Forms.MessageBox.Show("请先连接服务端!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } } } /// /// 时序启动 /// public override void BeginS2() { if (sequentStatusModel.SequentialStartTime2 == null || sequentStatusModel.SequentialEndTime2 == null) { System.Windows.Forms.MessageBox.Show("时序2: 开始时间和结束时间不能为空!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } else { if (RelayViewModel.SocketInfo.ConnectionMessage == "断开") { dosend(0x02, 0x03); System.Windows.Forms.MessageBox.Show("命令已下发!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } else { System.Windows.Forms.MessageBox.Show("请先连接服务端!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } } } /// /// 时序暂停 /// public override void SuspendS2() { if (sequentStatusModel.SequentialStartTime2 == null || sequentStatusModel.SequentialEndTime2 == null) { System.Windows.Forms.MessageBox.Show("时序2: 开始时间和结束时间不能为空!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } else { if (RelayViewModel.SocketInfo.ConnectionMessage == "断开") { dosend(0x02, 0x04); System.Windows.Forms.MessageBox.Show("命令已下发!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } else { System.Windows.Forms.MessageBox.Show("请先连接服务端!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } } } #endregion #region 时序 3 public override void RefreshS3() { int num = 1; SearchKey = "时序3"; sysSequentialDetailsListS3.Clear(); var list = _sysSequentialService.GetSequentials(SearchKey).ToList(); if (list.Count != 0) { var data = _sysSequentialService.GetSequentials(SearchKey).First(); var dataDetails = _sysSequentialService.GetSequentialDetails(data.Number).ToList(); foreach (var item in dataDetails) { SysSequentialDetails sysSequentialDetail = new SysSequentialDetails(); sysSequentialDetail.Number = item.Number; sysSequentialDetail.DurationTime = item.DurationTime; sysSequentialDetail.SensorID = item.SensorID; sysSequentialDetail.WorkTime = item.WorkTime; sysSequentialDetail.SequenceGroup = item.SequenceGroup; sysSequentialDetail.CreateTime = item.CreateTime; sysSequentialDetail.Sequential = item.Sequential; sysSequentialDetail.SysSquentialID = item.SysSquentialID; sysSequentialDetail.IsDelete = item.IsDelete; sysSequentialDetail.num = num; sysSequentialDetailsListS3.Add(sysSequentialDetail); num++; } sequentStatusModel.SequentialStartTime3 = data.StartTime; sequentStatusModel.SequentialEndTime3 = data.EndTime; sequentStatusModel.Status3 = data.Status; } } /// /// 编辑或者新增 /// /// public override void DoModifyS3(object model) { if (sequentStatusModel.SequentialStartTime3 == null || sequentStatusModel.SequentialEndTime3 == null) { System.Windows.Forms.MessageBox.Show("时序3:开始时间和结束时间不能为空!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } else { DateTime expirationDate = (DateTime)sequentStatusModel.SequentialStartTime3; DateTime expirationDate1 = (DateTime)sequentStatusModel.SequentialEndTime3; DateTime dateTime = DateTime.Now; if (expirationDate < dateTime) { System.Windows.Forms.MessageBox.Show("时序3:开始时间不得早于当前时间!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } else if (expirationDate1 < dateTime) { System.Windows.Forms.MessageBox.Show("时序3:结束时间不得早于当前时间!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } else if (expirationDate >= expirationDate1) { System.Windows.Forms.MessageBox.Show("时序3:结束时间不得早于开始时间!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } else { DialogParameters ps = new DialogParameters(); ps.Add("model", model); ps.Add("sequentialStartTime", sequentStatusModel.SequentialStartTime3); ps.Add("sequentialEndTime", sequentStatusModel.SequentialEndTime3); ps.Add("kind", "时序3"); _dialogService.ShowDialog("ModifySequentialView", ps, result => { // 判断子窗口的返回状态,如果OK,刷新当前页面,否则不管 if (result.Result == ButtonResult.OK) { this.RefreshS3(); } }); } } } /// /// 删除 /// /// public override void DoDeleteS3(object model) { try { if (System.Windows.Forms.MessageBox.Show("是否确定删除此项?", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == System.Windows.Forms.DialogResult.OK) { // 软删除 var data = _sysSequentialService.Find((model as SysSequentialDetails).Number); data.IsDelete = 1; _sysSequentialService.Update(data); //查询删除后子表是否还存在时序配置 var list = _sysSequentialService.GetSequentialDetails(data.SysSquentialID).ToList(); //若子表不存在当前时序下配置信息,则删除对应的母表时序 if (list.Count() == 0) { var SysSequential = _sysSequentialService.Find(data.SysSquentialID); SysSequential.IsDelete = 1; _sysSequentialService.Update(SysSequential); } System.Windows.Forms.MessageBox.Show("删除完成!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk); this.RefreshS3(); } } catch (Exception ex) { System.Windows.Forms.MessageBox.Show(ex.Message, "提示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk); } } /// /// 时序清空 /// public override void ClearS3() { if (sequentStatusModel.SequentialStartTime3 == null || sequentStatusModel.SequentialEndTime3 == null) { System.Windows.Forms.MessageBox.Show("时序3: 开始时间和结束时间不能为空!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } else { if (RelayViewModel.SocketInfo.ConnectionMessage == "断开") { dosend(0x03, 0x02); System.Windows.Forms.MessageBox.Show("命令已下发!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } else { System.Windows.Forms.MessageBox.Show("请先连接服务端!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } } } /// /// 时序启动 /// public override void BeginS3() { if (sequentStatusModel.SequentialStartTime3 == null || sequentStatusModel.SequentialEndTime3 == null) { System.Windows.Forms.MessageBox.Show("时序3: 开始时间和结束时间不能为空!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } else { if (RelayViewModel.SocketInfo.ConnectionMessage == "断开") { dosend(0x03, 0x03); System.Windows.Forms.MessageBox.Show("命令已下发!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } else { System.Windows.Forms.MessageBox.Show("请先连接服务端!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } } } /// /// 时序暂停 /// public override void SuspendS3() { if (sequentStatusModel.SequentialStartTime3 == null || sequentStatusModel.SequentialEndTime3 == null) { System.Windows.Forms.MessageBox.Show("时序3: 开始时间和结束时间不能为空!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } else { if (RelayViewModel.SocketInfo.ConnectionMessage == "断开") { dosend(0x03, 0x04); System.Windows.Forms.MessageBox.Show("命令已下发!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } else { System.Windows.Forms.MessageBox.Show("请先连接服务端!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } } } #endregion #region 时序 4 public override void RefreshS4() { int num = 1; SearchKey = "时序4"; sysSequentialDetailsListS4.Clear(); var list = _sysSequentialService.GetSequentials(SearchKey).ToList(); if (list.Count != 0) { var data = _sysSequentialService.GetSequentials(SearchKey).First(); var dataDetails = _sysSequentialService.GetSequentialDetails(data.Number).ToList(); foreach (var item in dataDetails) { SysSequentialDetails sysSequentialDetail = new SysSequentialDetails(); sysSequentialDetail.Number = item.Number; sysSequentialDetail.DurationTime = item.DurationTime; sysSequentialDetail.SensorID = item.SensorID; sysSequentialDetail.WorkTime = item.WorkTime; sysSequentialDetail.SequenceGroup = item.SequenceGroup; sysSequentialDetail.CreateTime = item.CreateTime; sysSequentialDetail.Sequential = item.Sequential; sysSequentialDetail.SysSquentialID = item.SysSquentialID; sysSequentialDetail.IsDelete = item.IsDelete; sysSequentialDetail.num = num; sysSequentialDetailsListS4.Add(sysSequentialDetail); num++; } sequentStatusModel.SequentialStartTime4 = data.StartTime; sequentStatusModel.SequentialEndTime4 = data.EndTime; sequentStatusModel.Status4 = data.Status; } } /// /// 编辑或者新增 /// /// public override void DoModifyS4(object model) { if (sequentStatusModel.SequentialStartTime4 == null || sequentStatusModel.SequentialEndTime4 == null) { System.Windows.Forms.MessageBox.Show("时序4:开始时间和结束时间不能为空!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } else { DateTime expirationDate = (DateTime)sequentStatusModel.SequentialStartTime4; DateTime expirationDate1 = (DateTime)sequentStatusModel.SequentialEndTime4; DateTime dateTime = DateTime.Now; if (expirationDate < dateTime) { System.Windows.Forms.MessageBox.Show("时序4:开始时间不得早于当前时间!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } else if (expirationDate1 < dateTime) { System.Windows.Forms.MessageBox.Show("时序4:结束时间不得早于当前时间!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } else if (expirationDate >= expirationDate1) { System.Windows.Forms.MessageBox.Show("时序4:结束时间不得早于开始时间!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } else { DialogParameters ps = new DialogParameters(); ps.Add("model", model); ps.Add("sequentialStartTime", sequentStatusModel.SequentialStartTime4); ps.Add("sequentialEndTime", sequentStatusModel.SequentialEndTime4); ps.Add("kind", "时序4"); _dialogService.ShowDialog("ModifySequentialView", ps, result => { // 判断子窗口的返回状态,如果OK,刷新当前页面,否则不管 if (result.Result == ButtonResult.OK) { this.RefreshS4(); } }); } } } /// /// 删除 /// /// public override void DoDeleteS4(object model) { try { if (System.Windows.Forms.MessageBox.Show("是否确定删除此项?", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == System.Windows.Forms.DialogResult.OK) { // 软删除 var data = _sysSequentialService.Find((model as SysSequentialDetails).Number); data.IsDelete = 1; _sysSequentialService.Update(data); //查询删除后子表是否还存在时序配置 var list = _sysSequentialService.GetSequentialDetails(data.SysSquentialID).ToList(); //若子表不存在当前时序下配置信息,则删除对应的母表时序 if (list.Count() == 0) { var SysSequential = _sysSequentialService.Find(data.SysSquentialID); SysSequential.IsDelete = 1; _sysSequentialService.Update(SysSequential); } System.Windows.Forms.MessageBox.Show("删除完成!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk); this.RefreshS4(); } } catch (Exception ex) { System.Windows.Forms.MessageBox.Show(ex.Message, "提示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk); } } /// /// 时序清空 /// public override void ClearS4() { if (sequentStatusModel.SequentialStartTime4 == null || sequentStatusModel.SequentialEndTime4 == null) { System.Windows.Forms.MessageBox.Show("时序4: 开始时间和结束时间不能为空!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } else { if (RelayViewModel.SocketInfo.ConnectionMessage == "断开") { dosend(0x04, 0x02); System.Windows.Forms.MessageBox.Show("命令已下发!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } else { System.Windows.Forms.MessageBox.Show("请先连接服务端!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } } } /// /// 时序启动 /// public override void BeginS4() { if (sequentStatusModel.SequentialStartTime4 == null || sequentStatusModel.SequentialEndTime4 == null) { System.Windows.Forms.MessageBox.Show("时序4: 开始时间和结束时间不能为空!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } else { if (RelayViewModel.SocketInfo.ConnectionMessage == "断开") { dosend(0x04, 0x03); System.Windows.Forms.MessageBox.Show("命令已下发!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } else { System.Windows.Forms.MessageBox.Show("请先连接服务端!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } } } /// /// 时序暂停 /// public override void SuspendS4() { if (sequentStatusModel.SequentialStartTime4 == null || sequentStatusModel.SequentialEndTime4 == null) { System.Windows.Forms.MessageBox.Show("时序4: 开始时间和结束时间不能为空!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } else { if (RelayViewModel.SocketInfo.ConnectionMessage == "断开") { dosend(0x04, 0x04); System.Windows.Forms.MessageBox.Show("命令已下发!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } else { System.Windows.Forms.MessageBox.Show("请先连接服务端!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } } } #endregion #region 时序 5 public override void RefreshS5() { int num = 1; SearchKey = "时序5"; sysSequentialDetailsListS5.Clear(); var list = _sysSequentialService.GetSequentials(SearchKey).ToList(); if (list.Count != 0) { var data = _sysSequentialService.GetSequentials(SearchKey).First(); var dataDetails = _sysSequentialService.GetSequentialDetails(data.Number).ToList(); foreach (var item in dataDetails) { SysSequentialDetails sysSequentialDetail = new SysSequentialDetails(); sysSequentialDetail.Number = item.Number; sysSequentialDetail.DurationTime = item.DurationTime; sysSequentialDetail.SensorID = item.SensorID; sysSequentialDetail.WorkTime = item.WorkTime; sysSequentialDetail.SequenceGroup = item.SequenceGroup; sysSequentialDetail.CreateTime = item.CreateTime; sysSequentialDetail.Sequential = item.Sequential; sysSequentialDetail.SysSquentialID = item.SysSquentialID; sysSequentialDetail.IsDelete = item.IsDelete; sysSequentialDetail.num = num; sysSequentialDetailsListS5.Add(sysSequentialDetail); num++; } sequentStatusModel.SequentialStartTime5 = data.StartTime; sequentStatusModel.SequentialEndTime5 = data.EndTime; sequentStatusModel.Status5 = data.Status; } } /// /// 编辑或者新增 /// /// public override void DoModifyS5(object model) { if (sequentStatusModel.SequentialStartTime5 == null || sequentStatusModel.SequentialEndTime5 == null) { System.Windows.Forms.MessageBox.Show("时序5:开始时间和结束时间不能为空!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } else { DateTime expirationDate = (DateTime)sequentStatusModel.SequentialStartTime5; DateTime expirationDate1 = (DateTime)sequentStatusModel.SequentialEndTime5; DateTime dateTime = DateTime.Now; if (expirationDate < dateTime) { System.Windows.Forms.MessageBox.Show("时序5:开始时间不得早于当前时间!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } else if (expirationDate1 < dateTime) { System.Windows.Forms.MessageBox.Show("时序5:结束时间不得早于当前时间!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } else if (expirationDate >= expirationDate1) { System.Windows.Forms.MessageBox.Show("时序5:结束时间不得早于开始时间!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } else { DialogParameters ps = new DialogParameters(); ps.Add("model", model); ps.Add("sequentialStartTime", sequentStatusModel.SequentialStartTime5); ps.Add("sequentialEndTime", sequentStatusModel.SequentialEndTime5); ps.Add("kind", "时序5"); _dialogService.ShowDialog("ModifySequentialView", ps, result => { // 判断子窗口的返回状态,如果OK,刷新当前页面,否则不管 if (result.Result == ButtonResult.OK) { this.RefreshS5(); } }); } } } /// /// 删除 /// /// public override void DoDeleteS5(object model) { try { if (System.Windows.Forms.MessageBox.Show("是否确定删除此项?", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == System.Windows.Forms.DialogResult.OK) { // 软删除 var data = _sysSequentialService.Find((model as SysSequentialDetails).Number); data.IsDelete = 1; _sysSequentialService.Update(data); //查询删除后子表是否还存在时序配置 var list = _sysSequentialService.GetSequentialDetails(data.SysSquentialID).ToList(); //若子表不存在当前时序下配置信息,则删除对应的母表时序 if (list.Count() == 0) { var SysSequential = _sysSequentialService.Find(data.SysSquentialID); SysSequential.IsDelete = 1; _sysSequentialService.Update(SysSequential); } System.Windows.Forms.MessageBox.Show("删除完成!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk); this.RefreshS5(); } } catch (Exception ex) { System.Windows.Forms.MessageBox.Show(ex.Message, "提示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk); } } /// /// 时序清空 /// public override void ClearS5() { if (sequentStatusModel.SequentialStartTime5 == null || sequentStatusModel.SequentialEndTime5 == null) { System.Windows.Forms.MessageBox.Show("时序5: 开始时间和结束时间不能为空!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } else { if (RelayViewModel.SocketInfo.ConnectionMessage == "断开") { dosend(0x05, 0x02); System.Windows.Forms.MessageBox.Show("命令已下发!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } else { System.Windows.Forms.MessageBox.Show("请先连接服务端!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } } } /// /// 时序启动 /// public override void BeginS5() { if (sequentStatusModel.SequentialStartTime5 == null || sequentStatusModel.SequentialEndTime5 == null) { System.Windows.Forms.MessageBox.Show("时序5: 开始时间和结束时间不能为空!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } else { if (RelayViewModel.SocketInfo.ConnectionMessage == "断开") { dosend(0x05, 0x03); System.Windows.Forms.MessageBox.Show("命令已下发!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } else { System.Windows.Forms.MessageBox.Show("请先连接服务端!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } } } /// /// 时序暂停 /// public override void SuspendS5() { if (sequentStatusModel.SequentialStartTime5 == null || sequentStatusModel.SequentialEndTime5 == null) { System.Windows.Forms.MessageBox.Show("时序5: 开始时间和结束时间不能为空!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } else { if (RelayViewModel.SocketInfo.ConnectionMessage == "断开") { dosend(0x05, 0x04); System.Windows.Forms.MessageBox.Show("命令已下发!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } else { System.Windows.Forms.MessageBox.Show("请先连接服务端!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } } } #endregion /// /// 转义封装 /// /// /// public List Escape(byte[] bytes) { //标志位 byte head = 0x7f; //crc byte nr_crc = 0; nr_crc = tools.CRC(bytes.ToArray(), 0, bytes.Length); ///转义 int j = 0; List tBuffer = bytes.ToList(); tBuffer.Add(nr_crc); int length = tBuffer.ToArray().Length; byte[] newAnswer = tBuffer.ToArray(); for (int i = 0; i < length; i++) { if (newAnswer[i] == 0x7e || newAnswer[i] == 0x7f) { j++; } } byte[] newSendBuffer = new byte[length + j]; for (int i = 0; i < length; i++) { newSendBuffer[i] = newAnswer[i]; } for (int i = 0; i < length + j; i++) { if (newSendBuffer[i] == 0x7e) { for (int k = length + j - 1; k > i + 1; k--) { newSendBuffer[k] = newSendBuffer[k - 1]; } newSendBuffer[i + 1] = 0x01; } if (newSendBuffer[i] == 0x7f) { newSendBuffer[i] = 0x7e; for (int k = length + j - 1; k > i + 1; k--) { newSendBuffer[k] = newSendBuffer[k - 1]; } newSendBuffer[i + 1] = 0x02; } } List buffer = new List(); buffer.Add(head); for (int i = 0; i < newSendBuffer.Length; i++) { buffer.Add(newSendBuffer[i]); } buffer.Add(head); return buffer; } /// /// 命令发送 /// /// 时序号 /// 操作类型 public void dosend(byte x1, byte x2) { //消息体 byte[] byteaq = new byte[] { 0x91, 0x00, 0x10, 0x01, 0x00, 0x00, 0x00, 0x00, x1, x2 }; List buffer = Escape(byteaq); string list = tools.byteToHexStr(buffer.ToArray()); byte[] bytea = tools.ConvertHexStringToBytes(list); RelayViewModel.clientModel.SendData(bytea); } /// /// 时序下发封装数据域 /// /// 时序开始时间 /// 时序结束时间 /// 时序组号 /// 时序类型 /// public List encode(DateTime StartTime, DateTime EndTime, byte GroupNumber, string kind) { DateTime startTime = StartTime; DateTime endTime = EndTime; ulong senddate; ulong year; ulong month; ulong day; ulong hour; ulong min; ulong sec; ulong sendenddate; ulong endyear; ulong endmonth; ulong endday; ulong endhour; ulong endmin; ulong endsec; //定义消息体数组 List byteaq = new List(); year = (ulong)startTime.Year * 10000000000UL; month = (ulong)startTime.Month * 100000000UL; day = (ulong)startTime.Day * 1000000UL; hour = (ulong)startTime.Hour * 10000UL; min = (ulong)startTime.Minute * 100UL; sec = (ulong)startTime.Second; senddate = year + month + day + hour + min + sec; endyear = (ulong)endTime.Year * 10000000000UL; endmonth = (ulong)endTime.Month * 100000000UL; endday = (ulong)endTime.Day * 1000000UL; endhour = (ulong)endTime.Hour * 10000UL; endmin = (ulong)endTime.Minute * 100UL; endsec = (ulong)endTime.Second; sendenddate = endyear + endmonth + endday + endhour + endmin + endsec; //消息头 byteaq.Add(0x91); byteaq.Add(0x00); byteaq.Add(0x10); byteaq.Add(0x01); byteaq.Add(0x00); byteaq.Add(0x00); byteaq.Add(0x00); byteaq.Add(0x00); //时序组号 byteaq.Add(GroupNumber); //操作类型 byteaq.Add(0x01); //开始时间 byteaq.Add((byte)((senddate >> 56) & 0xff)); byteaq.Add((byte)((senddate >> 48) & 0xff)); byteaq.Add((byte)((senddate >> 40) & 0xff)); byteaq.Add((byte)((senddate >> 32) & 0xff)); byteaq.Add((byte)((senddate >> 24) & 0xff)); byteaq.Add((byte)((senddate >> 16) & 0xff)); byteaq.Add((byte)((senddate >> 8) & 0xff)); byteaq.Add((byte)(senddate & 0xff)); //结束时间 byteaq.Add((byte)((sendenddate >> 56) & 0xff)); byteaq.Add((byte)((sendenddate >> 48) & 0xff)); byteaq.Add((byte)((sendenddate >> 40) & 0xff)); byteaq.Add((byte)((sendenddate >> 32) & 0xff)); byteaq.Add((byte)((sendenddate >> 24) & 0xff)); byteaq.Add((byte)((sendenddate >> 16) & 0xff)); byteaq.Add((byte)((sendenddate >> 8) & 0xff)); byteaq.Add((byte)(sendenddate & 0xff)); var datalist = _sysSequentialService.Query(m => m.StartTime == startTime && m.EndTime == endTime && m.IsDelete == 0 && m.Sequential == kind).OrderBy(n => n.SequenceGroup).ThenBy(s => s.CreateTime).ToArray(); //单体循环数量 List b = new List(); //这个m 在每次SequenceGroup变化的时候记录一下 变化的节点 //拿下一次的节点i - 上一次的节点m 就是当前的长度,同时把新的节点赋到m上 //最后只要把总长度减去最后一个节点的长度,就是最后一个的长度 int m = 0; //先遍历 datalist 确定 SequenceGroup的种类和数量 for (int i = 0; i < datalist.Length; i++) { if (i != 0 && datalist.Length >= 1) { if (datalist[i].SequenceGroup != datalist[i - 1].SequenceGroup) { b.Add(i - m); m = i; } if (i == datalist.Length - 1) { b.Add(datalist.Length - m); m = 0; } } } //b = new List() { 4, 3, 4, 6 }; //3 3 2 1 for (int i = 0; i < b.Count; i++) { //添加循环传感器的个数 byteaq.Add((byte)b[i]); //定义一个循环间隔时长 int d = 0; //添加传感器识别码和工作时长 for (int j = 0; j < b[i]; j++) { //去b[i - 1]之前的和 int n = 0; for (int k = 0; k < i; k++) { n += b[k]; } //获取传感器的ID 用字典获取 datalist[i == 0 ? j:n + j].SensorID switch (datalist[i == 0 ? j : n + j].SensorID) { case "工控机": byteaq.Add(0x00); break; case "色质联用": byteaq.Add(0x01); break; case "备用串口1": byteaq.Add(0x02); break; case "备用串口2": byteaq.Add(0x03); break; case "光通讯机": byteaq.Add(0x04); break; case "ADCP": byteaq.Add(0x05); break; case "CTD": byteaq.Add(0x06); break; case "气相色谱仪": byteaq.Add(0x07); break; case "甲烷传感器": byteaq.Add(0x08); break; case "二氧化碳同位素分析仪": byteaq.Add(0x09); break; case "备用网口设备": byteaq.Add(0x0a); break; case "ICL": byteaq.Add(0x0b); break; case "显微拉曼分析仪": byteaq.Add(0x0c); break; case "质谱仪": byteaq.Add(0x0d); break; case "声学定位": byteaq.Add(0x0e); break; case "摄像1": byteaq.Add(0x0f); break; case "摄像2": byteaq.Add(0x10); break; case "电交换机2": byteaq.Add(0x11); break; default: break; } //定义接收工作时长 int w = Convert.ToInt32(datalist[i == 0 ? j : n + j].WorkTime); byteaq.Add((byte)(w & 0xFF)); byteaq.Add((byte)((w & 0xFF00) >> 8)); byteaq.Add((byte)((w & 0xFF0000) >> 16)); byteaq.Add((byte)((w >> 24) & 0xFF)); //接收循环间隔时长 d = Convert.ToInt32(datalist[i == 0 ? j : n + j].DurationTime); } byteaq.Add((byte)(d & 0xFF)); byteaq.Add((byte)((d & 0xFF00) >> 8)); byteaq.Add((byte)((d & 0xFF0000) >> 16)); byteaq.Add((byte)((d >> 24) & 0xFF)); } return byteaq; } } }