using CommunityToolkit.Mvvm.ComponentModel; using PMSWPF.Enums; namespace PMSWPF.Models; /// /// 表示变量数据信息。 /// public partial class VariableData : ObservableObject, IEquatable { /// /// 变量唯一标识符。 /// public int Id { get; set; } /// /// 变量名称。 /// [ObservableProperty] private string name; /// /// 节点ID,用于标识变量在设备或系统中的唯一路径。 /// public string NodeId { get; set; } /// /// 节点ID,用于标识变量在设备或系统中的唯一路径。 /// public string S7Address { get; set; } /// /// OPC UA Endpoint URL。 /// public string? OpcUaEndpointUrl { get; set; } /// /// OPC UA Node ID。 /// public string? OpcUaNodeId { get; set; } /// /// 变量描述。 /// [ObservableProperty] private string description = String.Empty; /// /// 协议类型,例如Modbus、OPC UA等。 /// public ProtocolType ProtocolType { get; set; } /// /// 信号类型,例如模拟量、数字量等。 /// public SignalType SignalType { get; set; } /// /// 数据类型,例如Int、Float、String等。 /// public string DataType { get; set; } /// /// 变量当前原始数据值。 /// [ObservableProperty] private string dataValue = String.Empty; /// /// 变量经过转换或格式化后的显示值。 /// [ObservableProperty] private string displayValue = String.Empty; /// /// 指示变量是否处于激活状态。 /// [ObservableProperty] public bool isActive; /// /// 指示变量是否被选中 /// [ObservableProperty] public bool isSelect; /// /// 指示是否需要保存变量数据。 /// public bool IsSave { get; set; } /// /// 指示是否需要对变量进行报警监测。 /// public bool IsAlarm { get; set; } /// /// 轮询级别,例如1秒、5秒等。 /// [ObservableProperty] private PollLevelType pollLevelType = PollLevelType.ThirtySeconds; /// /// OPC UA更新类型,例如轮询或订阅。 /// [ObservableProperty] private OpcUaUpdateType opcUaUpdateType = OpcUaUpdateType.OpcUaPoll; /// /// 最后一次轮询时间。 /// public DateTime LastPollTime { get; set; } = DateTime.MinValue; /// /// 指示变量是否已被逻辑删除。 /// public bool IsDeleted { get; set; } /// /// 指示变量是否已被修改了。 /// [ObservableProperty] private bool isModified; /// /// 报警的最大值阈值。 /// public double AlarmMax { get; set; } /// /// 报警的最小值阈值。 /// public double AlarmMin { get; set; } /// /// 数据转换规则或表达式。 /// [ObservableProperty] private string converstion = String.Empty; /// /// 数据保存的范围或阈值。 /// public double SaveRange { get; set; } /// /// 变量数据创建时间。 /// [ObservableProperty] private DateTime createTime; /// /// 变量数据最后更新时间。 /// [ObservableProperty] private DateTime updateTime = DateTime.Now; /// /// 最后更新变量数据的用户。 /// public User UpdateUser { get; set; } /// /// 关联的变量表ID。 /// public int VariableTableId { get; set; } /// /// 关联的变量表实体。 /// public VariableTable? VariableTable { get; set; } /// /// 关联的MQTT配置列表。 /// public List? VariableMqtts { get; set; } partial void OnPollLevelTypeChanged(PollLevelType value) { IsModified = true; } public override bool Equals(object? obj) { return Equals(obj as VariableData); } public bool Equals(VariableData? other) { if (ReferenceEquals(null, other)) return false; if (ReferenceEquals(this, other)) return true; // Compare all relevant properties for equality return Name == other.Name && NodeId == other.NodeId && S7Address == other.S7Address && OpcUaEndpointUrl == other.OpcUaEndpointUrl && OpcUaNodeId == other.OpcUaNodeId && Description == other.Description && ProtocolType == other.ProtocolType && SignalType == other.SignalType && DataType == other.DataType && DataValue == other.DataValue && DisplayValue == other.DisplayValue && IsActive == other.IsActive && IsSave == other.IsSave && IsAlarm == other.IsAlarm && PollLevelType == other.PollLevelType && OpcUaUpdateType == other.OpcUaUpdateType && IsDeleted == other.IsDeleted && AlarmMax == other.AlarmMax && AlarmMin == other.AlarmMin && Converstion == other.Converstion && SaveRange == other.SaveRange && CreateTime == other.CreateTime && VariableTableId == other.VariableTableId; } public override int GetHashCode() { // Combine hash codes of all relevant properties var hash = new HashCode(); hash.Add(Name); hash.Add(NodeId); hash.Add(S7Address); hash.Add(OpcUaEndpointUrl); hash.Add(OpcUaNodeId); hash.Add(Description); hash.Add(ProtocolType); hash.Add(SignalType); hash.Add(DataType); hash.Add(DataValue); hash.Add(DisplayValue); hash.Add(IsActive); hash.Add(IsSave); hash.Add(IsAlarm); hash.Add(PollLevelType); hash.Add(OpcUaUpdateType); hash.Add(IsDeleted); hash.Add(AlarmMax); hash.Add(AlarmMin); hash.Add(Converstion); hash.Add(SaveRange); hash.Add(CreateTime); hash.Add(VariableTableId); return hash.ToHashCode(); } }