92 lines
2.7 KiB
C#
Raw Normal View History

2024-12-19 16:07:07 +08:00
using System;
using System.Collections.Generic;
2025-04-21 09:54:34 +08:00
using System.ComponentModel.DataAnnotations;
2024-12-19 16:07:07 +08:00
using System.Linq;
using System.Text;
using System.Threading.Tasks;
2025-04-21 09:54:34 +08:00
using JiShe.CollectBus.Common.Attributes;
2024-12-19 16:07:07 +08:00
using JiShe.CollectBus.Enums;
2025-04-21 09:54:34 +08:00
using Volo.Abp.Auditing;
2024-12-19 16:07:07 +08:00
using Volo.Abp.Domain.Entities;
2025-04-21 09:54:34 +08:00
using Volo.Abp.Logging;
2024-12-19 16:07:07 +08:00
2025-03-14 14:28:04 +08:00
namespace JiShe.CollectBus.IotSystems.Devices
2024-12-19 16:07:07 +08:00
{
2025-04-21 09:54:34 +08:00
public class Device : BasicAggregateRoot<Guid>
2024-12-19 16:07:07 +08:00
{
/// <summary>
/// Device
/// </summary>
/// <param name="number"></param>
/// <param name="firstOnlineTime"></param>
/// <param name="lastOnlineTime"></param>
/// <param name="clientId"></param>
/// <param name="status"></param>
public Device(string number, string clientId, DateTime firstOnlineTime, DateTime lastOnlineTime, DeviceStatus status)
{
2025-04-21 09:54:34 +08:00
Id = Guid.NewGuid();
2024-12-19 16:07:07 +08:00
Number = number;
FirstOnlineTime = firstOnlineTime;
LastOnlineTime = lastOnlineTime;
ClientId = clientId;
Status = status;
}
/// <summary>
/// 集中器编号在集中器登录时解析获取并会更新为当前TCP连接的最新ClientId
/// </summary>
2025-04-21 09:54:34 +08:00
[PartitionKey]
2024-12-19 16:07:07 +08:00
public string Number { get; set; }
/// <summary>
/// 首次上线时间
/// </summary>
2024-12-19 16:07:07 +08:00
public DateTime FirstOnlineTime { get; set; }
/// <summary>
/// 最后上线时间
/// </summary>
2024-12-19 16:07:07 +08:00
public DateTime LastOnlineTime { get; set; }
/// <summary>
/// TCP客户端首次连接ID在登录解析成功以后会被Number集中器编号覆盖
/// </summary>
2024-12-19 16:07:07 +08:00
public string ClientId { get; set; }
/// <summary>
/// TCP客户端断线时间用于计算是否断线
/// </summary>
2024-12-19 16:07:07 +08:00
public DateTime? LastOfflineTime { get; set; }
/// <summary>
/// 设备状态
/// </summary>
2025-04-21 09:54:34 +08:00
[PartitionKey]
2024-12-19 16:07:07 +08:00
public DeviceStatus Status { get; set; }
2025-04-13 21:26:27 +08:00
/// <summary>
/// 设备任务超时次数,超过一定次数则发出预警。
/// </summary>
public int TaskTimeOutCounts { get; set; } = 0;
2024-12-19 16:07:07 +08:00
public void UpdateByLoginAndHeartbeat(string clientId)
{
LastOnlineTime = DateTime.Now;
ClientId = clientId;
Status = DeviceStatus.Online;
}
2025-03-27 08:38:19 +08:00
public void UpdateByLoginAndHeartbeat()
{
LastOnlineTime = DateTime.Now;
Status = DeviceStatus.Online;
}
2024-12-19 16:07:07 +08:00
public void UpdateByOnClosed()
{
LastOfflineTime = DateTime.Now;
Status = DeviceStatus.Offline;
}
}
}