using InSituLaboratory.Entities; using InSituLaboratory.IService; using InSituLaboratory.Models; using InSituLaboratory.Service; using Microsoft.VisualBasic.ApplicationServices; using Prism.Services.Dialogs; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Media.Animation; namespace InSituLaboratory.ViewModels.Pages.Dialogs { /// /// 新增或者增加时序 /// public class ModifySequentialViewModel : DialogViewModelBase { #region Model /// /// 传感器设备集合 /// public List DeviceNodes { get; set; } = new List(); public string? workTime { get; set; } public long? workInt { get; set; } /// /// 开始时间 /// public DateTime? startTime { get; set; } /// /// 结束时间 /// public DateTime? endTime { get; set; } /// /// 配置 /// public string SequenceGroup { get; set; } /// /// 序号 /// public int Number { get; set; } /// /// 传感器设备 /// private string _sensorID; public string SensorID { get { return _sensorID;} set { _sensorID = value; //通过设备信息查询设备工作时长 workTime = _deviceSvice.GetDeviceByDeviceName(_sensorID); this.ErrorList.Clear(); if (_sensorID == "质谱仪") { workInt = Convert.ToInt64(workTime) * 60 * 60; if (Convert.ToInt64(WorkTime) > workInt) { ErrorList.Add("WorkTime", new List { "质谱仪已超出最大工作时长" }); this.RaiseErrorsChanged("WorkTime"); } else { ErrorList.Remove("WorkTime"); this.RaiseErrorsChanged("WorkTime"); } } else if (_sensorID == "二氧化碳同位素分析仪") { workInt = Convert.ToInt64(workTime) * 60 * 60; if (Convert.ToInt64(WorkTime) > workInt) { ErrorList.Add("WorkTime", new List { "二氧化碳同位素分析仪已超出最大工作时长" }); this.RaiseErrorsChanged("WorkTime"); } else { ErrorList.Remove("WorkTime"); this.RaiseErrorsChanged("WorkTime"); } } else if (_sensorID == "甲烷同位素分析仪") { workInt = Convert.ToInt64(workTime) * 60 * 60; if (Convert.ToInt64(WorkTime) > workInt) { ErrorList.Add("WorkTime", new List { "甲烷同位素分析仪已超出最大工作时长" }); this.RaiseErrorsChanged("WorkTime"); } } else if (_sensorID == "气相色谱仪") { workInt = Convert.ToInt64(workTime) * 60 * 60; if (Convert.ToInt64(WorkTime) > workInt) { ErrorList.Add("WorkTime", new List { "气相色谱仪已超出最大工作时长" }); this.RaiseErrorsChanged("WorkTime"); } } else if (_sensorID == "基因测序仪") { workInt = Convert.ToInt64(workTime) * 60 * 60; if (Convert.ToInt64(WorkTime) > workInt) { ErrorList.Add("WorkTime", new List { "基因测序仪已超出最大工作时长" }); this.RaiseErrorsChanged("WorkTime"); } } else { ErrorList.Remove("WorkTime"); this.RaiseErrorsChanged("WorkTime"); } } } /// /// 循环时长 /// public string DurationTime { get; set; } /// /// 时序类别 /// public string kind { get; set; } private string _workTime; /// /// 工作时长 /// public string WorkTime { get { return _workTime; } set { _workTime = value; this.ErrorList.Clear(); if (string.IsNullOrEmpty(value)) { ErrorList.Add("WorkTime", new List { "工作时长不能为空" }); this.RaiseErrorsChanged(); } else if (_sensorID == "质谱仪") { workInt = Convert.ToInt64(workTime) * 60 * 60; if (Convert.ToInt64(value) > workInt) { ErrorList.Add("WorkTime", new List { "质谱仪已超出最大工作时长" }); this.RaiseErrorsChanged("WorkTime"); } } else if (_sensorID == "二氧化碳同位素分析仪") { workInt = Convert.ToInt64(workTime) * 60 * 60; if (Convert.ToInt64(value) > workInt) { ErrorList.Add("WorkTime", new List { "二氧化碳同位素分析仪已超出最大工作时长" }); this.RaiseErrorsChanged("WorkTime"); } } else if (_sensorID == "甲烷同位素分析仪") { workInt = Convert.ToInt64(workTime) * 60 * 60; if (Convert.ToInt64(value) > workInt) { ErrorList.Add("WorkTime", new List { "甲烷同位素分析仪已超出最大工作时长" }); this.RaiseErrorsChanged("WorkTime"); } } else if (_sensorID == "气相色谱仪") { workInt = Convert.ToInt64(workTime) * 60 * 60; if (Convert.ToInt64(value) > workInt) { ErrorList.Add("WorkTime", new List { "气相色谱仪已超出最大工作时长" }); this.RaiseErrorsChanged("WorkTime"); } } else if (_sensorID == "基因测序仪") { workInt = Convert.ToInt64(workTime) * 60 * 60; if (Convert.ToInt64(value) > workInt) { ErrorList.Add("WorkTime", new List { "基因测序仪已超出最大工作时长" }); this.RaiseErrorsChanged("WorkTime"); } } else { ErrorList.Remove("WorkTime"); this.RaiseErrorsChanged("WorkTime"); } } } #endregion ISysSequentialService _sequentialService; IDeviceSvice _deviceSvice; public ModifySequentialViewModel(ISysSequentialService sequentialService, IDeviceSvice deviceSvice) { _sequentialService = sequentialService; _deviceSvice = deviceSvice; } public override void OnDialogOpened(IDialogParameters parameters) { var SequentialDetail = parameters.GetValue("model"); startTime = parameters.GetValue("sequentialStartTime"); endTime = parameters.GetValue("sequentialEndTime"); kind = parameters.GetValue("kind"); if (SequentialDetail == null) { this.Title = "新增时序配置"; } else { this.Title = "编辑时序配置"; var su = _sequentialService.Find(SequentialDetail.Number); Number = su.Number; SensorID = su.SensorID; DurationTime = su.DurationTime; } DeviceNodes = _deviceSvice.GetDevices().ToList(); } public override void DoSave() { try { if (this.HasErrors) return; var data = _sequentialService.GetSequentials(kind).ToList(); //保存时 首次去查询 data == null 说明数据库中无数据 为第一次插入 if (data.Count() == 0) { _sequentialService.Insert(new SysSequential { StartTime = startTime, EndTime = endTime, CreateTime = DateTime.Now, Sequential = kind, IsDelete = 0 }); var Squential = _sequentialService.Query(m => m.Sequential == kind).OrderByDescending(n => n.CreateTime).First(); _sequentialService.Insert(new SysSequentialDetails { SysSquentialID = Squential.Number, SensorID = SensorID, DurationTime = DurationTime, CreateTime = DateTime.Now, Sequential = kind, IsDelete = 0 }); } else { //判断查询的当前时序开始和结束时间与打开的窗口传值是否有变化 //无变化说明是在当前时序下新增传感器运行时间配置 var data1 = _sequentialService.GetSequentials(kind).First(); if (data1.StartTime == startTime && data1.EndTime == endTime) { //新增传感器配置 if (Number == 0) { _sequentialService.Insert(new SysSequentialDetails { SysSquentialID = data1.Number, SensorID = SensorID, DurationTime = DurationTime, CreateTime = DateTime.Now, Sequential = kind, IsDelete = 0 }); } else { //修改传感器配置 var ssd = _sequentialService.Find(Number); ssd.SensorID = SensorID; ssd.DurationTime = DurationTime; _sequentialService.Update(ssd); } } else { //新的时序 _sequentialService.Insert(new SysSequential { StartTime = startTime, EndTime = endTime, CreateTime = DateTime.Now, Sequential = kind, IsDelete = 0 }); var Squential = _sequentialService.Query(m => m.Sequential == kind).OrderByDescending(n => n.CreateTime).First(); _sequentialService.Insert(new SysSequentialDetails { SysSquentialID = Squential.Number, SensorID = SensorID, DurationTime = DurationTime, CreateTime = DateTime.Now, Sequential = kind, IsDelete = 0 }); } } base.DoSave(); } catch (Exception ex) { MessageBox.Show(ex.Message, "提示"); } } } }