using DM_Weight.Common; using DM_Weight.msg; using DM_Weight.Port; using DM_Weight.util; using Prism.Commands; using Prism.Events; using Prism.Mvvm; using Prism.Regions; using System; using System.Collections.Generic; using System.Configuration; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; using System.Windows; using System.Xml; namespace DM_Weight.ViewModels { public class FridgeWindowViewModel : BindableBase, IRegionMemberLifetime, INavigationAware { //温度区间 private string _temperatureRange = CommonClass.ReadAppSetting("temperatureRange").ToString(); public string TemperatureRange { get => _temperatureRange; set { SetProperty(ref _temperatureRange, value); //更新配置文件中冰箱温度区间 CommonClass.SaveAppSetting("temperatureRange", _temperatureRange); } } //冰箱2温度区间 private string _temperatureRange2 = CommonClass.ReadAppSetting("temperatureRange2").ToString(); public string TemperatureRange2 { get => _temperatureRange2; set { SetProperty(ref _temperatureRange2, value); //更新配置文件中冰箱温度区间 CommonClass.SaveAppSetting("temperatureRange2", _temperatureRange2); } } private float defaultValue = Convert.ToSingle(CommonClass.ReadAppSetting("temperatureValue")); //温度值 private float _temperatureValue = Convert.ToSingle(CommonClass.ReadAppSetting("temperatureValue")); public float TemperatureValue { get => _temperatureValue; set => SetProperty(ref _temperatureValue, value); } /// /// 根据冰箱温度控制保存按钮是否可点击 /// private bool _isInvalid; public bool IsInvalid { get => _isInvalid; set { SetProperty(ref _isInvalid, value); BtnIsEnable = !IsInvalid; } } /// /// 根据冰箱温度控制保存按钮是否可用 /// private bool _btnIsEnable = true; public bool BtnIsEnable { get => _btnIsEnable; set => SetProperty(ref _btnIsEnable, value); } //冰箱状态:true关;false开 private bool _fridgeState; public bool FridgeState { get => _fridgeState; set => SetProperty(ref _fridgeState, value); } //报警状态:true关;false开 private bool _alarmState; public bool AlarmState { get => _alarmState; set => SetProperty(ref _alarmState, value); } //冰箱2状态:true关;false开 private bool _fridgeState2; public bool FridgeState2 { get => _fridgeState2; set => SetProperty(ref _fridgeState2, value); } //冰箱2报警状态:true关;false开 private bool _alarmState2; public bool AlarmState2 { get => _alarmState2; set => SetProperty(ref _alarmState2, value); } private int _defaultLoginMode;//1开0关 private int _defaultAlarmMode;//1开0关 private float retTemperature = Convert.ToSingle(ConfigurationManager.AppSettings["temperatureValue"]); private PortUtil _portUtil; IEventAggregator _eventAggregator; public FridgeWindowViewModel(PortUtil portUtil, IEventAggregator eventAggregator) { _portUtil = portUtil; _eventAggregator = eventAggregator; } /// /// 保存按钮 /// public DelegateCommand SaveCommand { get => new DelegateCommand(SaveAction, () => !IsInvalid); } public bool KeepAlive => false; private async void SaveAction() { try { _portUtil.FridgeOperate = true; //设置温度值验证不通过则直接返回不保存 //获取冰箱温度 //if (_fridgeState != _defaultLoginMode.Equals(1)) //{ // ConfigurationManager.RefreshSection("FridgeState"); //发送冰箱使能/失能指令 if (_fridgeState) { await _portUtil.FridgeOff(1); Thread.Sleep(100); CommonClass.SaveAppSetting("FridgeState", "0"); } else { await _portUtil.FridegOpen(1); Thread.Sleep(100); CommonClass.SaveAppSetting("FridgeState", "1"); } //冰箱2 发送冰箱使能/失能指令 if (_fridgeState2) { await _portUtil.FridgeOff(2); Thread.Sleep(100); CommonClass.SaveAppSetting("FridgeState2", "0"); } else { await _portUtil.FridegOpen(2); Thread.Sleep(100); CommonClass.SaveAppSetting("FridgeState2", "1"); } //} //温度报警设定 //if (AlarmState != _defaultAlarmMode.Equals(1)) //{ //发送警报使能/失能指令 if (_alarmState) { await _portUtil.FridgeAlarmOff(1); Thread.Sleep(100); CommonClass.SaveAppSetting("AlarmState", "0"); } else { await _portUtil.FridgeAlarmOn(1); Thread.Sleep(100); CommonClass.SaveAppSetting("AlarmState", "1"); } //冰箱2 发送警报使能/失能指令 if (_alarmState2) { await _portUtil.FridgeAlarmOff(2); Thread.Sleep(100); CommonClass.SaveAppSetting("AlarmState2", "0"); } else { await _portUtil.FridgeAlarmOn(2); Thread.Sleep(100); CommonClass.SaveAppSetting("AlarmState2", "1"); } //} //if (retTemperature != TemperatureValue) //{ // //设定冰箱温度 // await _portUtil.SetFridgeTemperature(TemperatureValue); // CommonClass.SaveAppSetting("temperatureValue", TemperatureValue.ToString()); //} //设定冰箱1温度区间 string[] range = ConfigurationManager.AppSettings["temperatureRange"].Split('-'); string[] newRange = TemperatureRange.Split('-'); if (range.Length >= 2) { bool bMix = float.TryParse(range[0], out float Min); bool bMax = float.TryParse(range[1], out float Max); if (bMix && bMax) { if (Min != Convert.ToSingle(newRange[0])) { //设定冰箱温度最小值 await _portUtil.FridgeMinSetting(Convert.ToSingle(newRange[0]),1); Thread.Sleep(100); } if (Max != Convert.ToSingle(newRange[1])) { Thread.Sleep(100); //设定冰箱温度最大值 await _portUtil.FridgeMaxSetting(Convert.ToSingle(newRange[1]), 1); Thread.Sleep(100); } } } //设定冰箱2温度区间 string[] range2 = ConfigurationManager.AppSettings["temperatureRange2"].Split('-'); string[] newRange2 = TemperatureRange2.Split('-'); if (range2.Length >= 2) { bool bMix = float.TryParse(range2[0], out float Min); bool bMax = float.TryParse(range2[1], out float Max); if (bMix && bMax) { if (Min != Convert.ToSingle(newRange2[0])) { //设定冰箱温度最小值 await _portUtil.FridgeMinSetting(Convert.ToSingle(newRange2[0]), 2); Thread.Sleep(100); } if (Max != Convert.ToSingle(newRange2[1])) { Thread.Sleep(100); //设定冰箱温度最大值 await _portUtil.FridgeMaxSetting(Convert.ToSingle(newRange2[1]), 2); Thread.Sleep(100); } } } _portUtil.FridgeOperate = false; AlertMsg alertMsg = new AlertMsg { Message = $"保存成功", Type = MsgType.SUCCESS }; _eventAggregator.GetEvent().Publish(alertMsg); //_fridgeState = ReadAppSetting("FridgeState").Equals(1); //_defaultLoginMode = ReadAppSetting("FridgeState"); //_defaultAlarmMode = ReadAppSetting("AlarmState"); //_alarmState = ReadAppSetting("AlarmState").Equals(1); //_temperatureRange = CommonClass.ReadAppSetting("temperatureRange"); //_temperatureValue = Convert.ToSingle(CommonClass.ReadAppSetting("temperatureValue")); } catch (Exception ex) { AlertMsg alertMsg = new AlertMsg { Message = $"保存异常{ex.ToString}", Type = MsgType.ERROR }; _eventAggregator.GetEvent().Publish(alertMsg); _portUtil.FridgeOperate = false; } } public FridgeWindowViewModel() { } //手动实现调用配置的逻辑 规避修改配置文件后不起作用的问题 public int ReadAppSetting(string key) { string xPath = "/configuration/appSettings//add[@key='" + key + "']"; XmlDocument doc = new XmlDocument(); string exeFileName = System.Reflection.Assembly.GetExecutingAssembly().GetName().Name; doc.Load(exeFileName + ".dll.config"); XmlNode node = doc.SelectSingleNode(xPath); return Convert.ToInt32(node.Attributes["value"].Value); } public void ConfirmNavigationRequest(NavigationContext navigationContext, Action continuationCallback) { } public void OnNavigatedTo(NavigationContext navigationContext) { _fridgeState = ReadAppSetting("FridgeState").Equals(0); _defaultLoginMode = ReadAppSetting("FridgeState"); _defaultAlarmMode = ReadAppSetting("AlarmState"); _alarmState = ReadAppSetting("AlarmState").Equals(0); GetTemperature(); } public bool IsNavigationTarget(NavigationContext navigationContext) { return true; } public void OnNavigatedFrom(NavigationContext navigationContext) { } //public void OnNavigatedTo(NavigationContext navigationContext) //{ // GetTemperature(); //} //public bool IsNavigationTarget(NavigationContext navigationContext) //{ // return true; //} //public void OnNavigatedFrom(NavigationContext navigationContext) //{ //} //获取冰箱温度值,如有更改则保存更改 private async Task GetTemperature() { //float retT = await _portUtil.GetFridgeTemperature(); } } }