HKC/DM_Weight/ViewModels/FridgeOnlyWindowViewModel.cs

267 lines
10 KiB
C#
Raw Normal View History

2024-07-08 11:44:31 +08:00
using DM_Weight.Common;
using DM_Weight.msg;
using DM_Weight.Port;
using DM_Weight.util;
2025-03-13 11:13:12 +08:00
using log4net;
using log4net.Repository.Hierarchy;
2024-07-08 11:44:31 +08:00
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.Xml;
namespace DM_Weight.ViewModels
{
public class FridgeOnlyWindowViewModel : BindableBase, IRegionMemberLifetime, INavigationAware
{
2025-03-13 11:13:12 +08:00
private readonly ILog logger = LogManager.GetLogger(typeof(FridgeOnlyWindowViewModel));
2024-07-08 11:44:31 +08:00
//温度区间
private string _temperatureRange = CommonClass.ReadAppSetting("temperatureRange").ToString();
public string TemperatureRange
{
get => _temperatureRange;
set
{
SetProperty(ref _temperatureRange, value);
}
2025-03-12 17:47:00 +08:00
}
//温度不在范围超时时间
private string _outRangeTime = CommonClass.ReadAppSetting("OutRangeTime").ToString();
2025-03-12 17:47:00 +08:00
public string OutRangeTime
{
get => _outRangeTime; set
{
SetProperty(ref _outRangeTime, value);
}
}
2024-07-08 11:44:31 +08:00
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);
}
/// <summary>
/// 根据冰箱温度控制保存按钮是否可点击
/// </summary>
private bool _isInvalid;
public bool IsInvalid
{
get => _isInvalid;
set
{
SetProperty(ref _isInvalid, value);
BtnIsEnable = !IsInvalid;
}
}
/// <summary>
/// 根据冰箱温度控制保存按钮是否可用
/// </summary>
private bool _btnIsEnable = true;
public bool BtnIsEnable
{
get => _btnIsEnable;
set => SetProperty(ref _btnIsEnable, value);
}
//冰箱状态:true关1;false开0
2024-07-08 11:44:31 +08:00
private bool _fridgeState;
public bool FridgeState
{
get => _fridgeState;
set => SetProperty(ref _fridgeState, value);
}
//报警状态:true关1;false开0
2024-07-08 11:44:31 +08:00
private bool _alarmState;
public bool AlarmState
{
get => _alarmState;
set => SetProperty(ref _alarmState, value);
}
2024-07-08 11:44:31 +08:00
private float retTemperature = Convert.ToSingle(ConfigurationManager.AppSettings["temperatureValue"]);
private PortUtil _portUtil;
IEventAggregator _eventAggregator;
public FridgeOnlyWindowViewModel(PortUtil portUtil, IEventAggregator eventAggregator)
{
_portUtil = portUtil;
_eventAggregator = eventAggregator;
}
/// <summary>
/// 保存按钮
/// </summary>
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)
2024-07-08 11:44:31 +08:00
{
await _portUtil.FridgeOff(1);
Thread.Sleep(100);
CommonClass.SaveAppSetting("FridgeState", "1");
//Configuration _configuration = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
//_configuration.AppSettings.Settings["FridgeState"].Value = "1";
//_configuration.Save();
//ConfigurationManager.RefreshSection("FridgeState");
2024-07-08 11:44:31 +08:00
}
else
{
await _portUtil.FridegOpen(1);
Thread.Sleep(100);
CommonClass.SaveAppSetting("FridgeState", "0");
//Configuration _configuration = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
//_configuration.AppSettings.Settings["FridgeState"].Value = "0";
//_configuration.Save();
//ConfigurationManager.RefreshSection("FridgeState");
//冰箱打开定时获取冰箱温度
_eventAggregator.GetEvent<FridgeEvent>().Publish();
}
2024-07-08 11:44:31 +08:00
//发送警报使能/失能指令
if (AlarmState)
2024-07-08 11:44:31 +08:00
{
await _portUtil.FridgeAlarmOff(1);
Thread.Sleep(100);
CommonClass.SaveAppSetting("AlarmState", "1");
//Configuration _configuration = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
//_configuration.AppSettings.Settings["AlarmState"].Value = "1";
//_configuration.Save();
//ConfigurationManager.RefreshSection("AlarmState");
2024-07-08 11:44:31 +08:00
}
else
{
await _portUtil.FridgeAlarmOn(1);
Thread.Sleep(100);
CommonClass.SaveAppSetting("AlarmState", "0");
//Configuration _configuration = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
//_configuration.AppSettings.Settings["AlarmState"].Value = "0";
//_configuration.Save();
//ConfigurationManager.RefreshSection("AlarmState");
}
2024-07-08 11:44:31 +08:00
//设定冰箱1温度区间
//string[] range = ConfigurationManager.AppSettings["temperatureRange"].Split('-');
2024-07-08 11:44:31 +08:00
string[] newRange = TemperatureRange.Split('-');
if (newRange.Length >= 2)
2024-07-08 11:44:31 +08:00
{
bool bMix = float.TryParse(newRange[0], out float Min);
bool bMax = float.TryParse(newRange[1], out float Max);
2024-07-08 11:44:31 +08:00
if (bMix && bMax)
{
if (Min != Convert.ToSingle(newRange[0]))
{
//设定冰箱温度最小值
await _portUtil.FridgeMinSetting(Convert.ToSingle(newRange[0]),1);
2024-07-08 11:44:31 +08:00
Thread.Sleep(100);
}
if (Max != Convert.ToSingle(newRange[1]))
{
Thread.Sleep(100);
//设定冰箱温度最大值
await _portUtil.FridgeMaxSetting(Convert.ToSingle(newRange[1]), 1);
Thread.Sleep(100);
}
}
//Configuration _configuration = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
//_configuration.AppSettings.Settings["TemperatureRange"].Value = c;
//_configuration.Save();
//ConfigurationManager.RefreshSection("TemperatureRange");
CommonClass.SaveAppSetting("TemperatureRange", TemperatureRange);
}
//超时时间
if (OutRangeTime != null)
{
//Configuration _configuration = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
//_configuration.AppSettings.Settings["OutRangeTime"].Value = OutRangeTime;
//_configuration.Save();
//ConfigurationManager.RefreshSection("OutRangeTime");
CommonClass.SaveAppSetting("OutRangeTime", OutRangeTime);
2024-07-08 11:44:31 +08:00
}
2024-07-08 11:44:31 +08:00
_portUtil.FridgeOperate = false;
AlertMsg alertMsg = new AlertMsg
{
Message = $"保存成功",
Type = MsgType.SUCCESS
};
_eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
2024-07-08 11:44:31 +08:00
}
catch (Exception ex)
{
AlertMsg alertMsg = new AlertMsg
{
Message = $"保存异常{ex.ToString}",
Type = MsgType.ERROR
};
_eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
_portUtil.FridgeOperate = false;
}
}
//手动实现调用配置的逻辑 规避修改配置文件后不起作用的问题
//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);
// logger.Info($"xPath:{xPath} exeFileName:{exeFileName} ReadAppSetting key:{key} value:{node.Attributes["value"].Value}");
// return Convert.ToInt32(node.Attributes["value"].Value);
//}
2024-07-08 11:44:31 +08:00
public void ConfirmNavigationRequest(NavigationContext navigationContext, Action<bool> continuationCallback)
{
}
public void OnNavigatedTo(NavigationContext navigationContext)
{
FridgeState =CommonClass.ReadAppSetting("FridgeState").Equals("1");
AlarmState = CommonClass.ReadAppSetting("AlarmState").Equals("1");
2024-07-08 11:44:31 +08:00
GetTemperature();
}
public bool IsNavigationTarget(NavigationContext navigationContext)
{
return true;
}
public void OnNavigatedFrom(NavigationContext navigationContext)
{
}
2024-07-08 11:44:31 +08:00
//获取冰箱温度值,如有更改则保存更改
private async Task GetTemperature()
{
//float retT = await _portUtil.GetFridgeTemperature();
}
}
}