using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Runtime.Serialization;
using System.Web.Script.Serialization;
using System.Xml.Serialization;
using NewLife;
using NewLife.Data;
using XCode;
using XCode.Cache;
using XCode.Configuration;
using XCode.DataAccessLayer;
namespace Rainbow.Entity;
/// <summary>成员小时统计。从MemberStat按小时汇总。用于成员日报和行为趋势</summary>
[Serializable]
[DataObject]
[Description("成员小时统计。从MemberStat按小时汇总。用于成员日报和行为趋势")]
[BindIndex("IU_MemberHourStat_MemberId_StatHour", true, "MemberId,StatHour")]
[BindTable("MemberHourStat", Description = "成员小时统计。从MemberStat按小时汇总。用于成员日报和行为趋势", ConnName = "RainbowStat", DbType = DatabaseType.None)]
public partial class MemberHourStat
{
#region 属性
private Int32 _Id;
/// <summary>编号</summary>
[DisplayName("编号")]
[Description("编号")]
[DataObjectField(true, true, false, 0)]
[BindColumn("Id", "编号", "")]
public Int32 Id { get => _Id; set { if (OnPropertyChanging("Id", value)) { _Id = value; OnPropertyChanged("Id"); } } }
private Int32 _MemberId;
/// <summary>关联成员</summary>
[DisplayName("关联成员")]
[Description("关联成员")]
[DataObjectField(false, false, false, 0)]
[BindColumn("MemberId", "关联成员", "")]
public Int32 MemberId { get => _MemberId; set { if (OnPropertyChanging("MemberId", value)) { _MemberId = value; OnPropertyChanged("MemberId"); } } }
private DateTime _StatHour;
/// <summary>统计小时</summary>
[DisplayName("统计小时")]
[Description("统计小时")]
[DataObjectField(false, false, true, 0)]
[BindColumn("StatHour", "统计小时", "")]
public DateTime StatHour { get => _StatHour; set { if (OnPropertyChanging("StatHour", value)) { _StatHour = value; OnPropertyChanged("StatHour"); } } }
private Int32 _DeviceCount;
/// <summary>平均在线设备数</summary>
[DisplayName("平均在线设备数")]
[Description("平均在线设备数")]
[DataObjectField(false, false, false, 0)]
[BindColumn("DeviceCount", "平均在线设备数", "")]
public Int32 DeviceCount { get => _DeviceCount; set { if (OnPropertyChanging("DeviceCount", value)) { _DeviceCount = value; OnPropertyChanged("DeviceCount"); } } }
private Int64 _RxBytes;
/// <summary>小时接收字节合计</summary>
[DisplayName("小时接收字节合计")]
[Description("小时接收字节合计")]
[DataObjectField(false, false, false, 0)]
[BindColumn("RxBytes", "小时接收字节合计", "")]
public Int64 RxBytes { get => _RxBytes; set { if (OnPropertyChanging("RxBytes", value)) { _RxBytes = value; OnPropertyChanged("RxBytes"); } } }
private Int64 _TxBytes;
/// <summary>小时发送字节合计</summary>
[DisplayName("小时发送字节合计")]
[Description("小时发送字节合计")]
[DataObjectField(false, false, false, 0)]
[BindColumn("TxBytes", "小时发送字节合计", "")]
public Int64 TxBytes { get => _TxBytes; set { if (OnPropertyChanging("TxBytes", value)) { _TxBytes = value; OnPropertyChanged("TxBytes"); } } }
private Int64 _RxBytesMax;
/// <summary>分钟接收峰值。定位该成员带宽消耗最大的时刻</summary>
[DisplayName("分钟接收峰值")]
[Description("分钟接收峰值。定位该成员带宽消耗最大的时刻")]
[DataObjectField(false, false, false, 0)]
[BindColumn("RxBytesMax", "分钟接收峰值。定位该成员带宽消耗最大的时刻", "")]
public Int64 RxBytesMax { get => _RxBytesMax; set { if (OnPropertyChanging("RxBytesMax", value)) { _RxBytesMax = value; OnPropertyChanged("RxBytesMax"); } } }
private Int64 _TxBytesMax;
/// <summary>分钟发送峰值</summary>
[DisplayName("分钟发送峰值")]
[Description("分钟发送峰值")]
[DataObjectField(false, false, false, 0)]
[BindColumn("TxBytesMax", "分钟发送峰值", "")]
public Int64 TxBytesMax { get => _TxBytesMax; set { if (OnPropertyChanging("TxBytesMax", value)) { _TxBytesMax = value; OnPropertyChanged("TxBytesMax"); } } }
private Int32 _TotalConns;
/// <summary>最大连接数</summary>
[DisplayName("最大连接数")]
[Description("最大连接数")]
[DataObjectField(false, false, false, 0)]
[BindColumn("TotalConns", "最大连接数", "")]
public Int32 TotalConns { get => _TotalConns; set { if (OnPropertyChanging("TotalConns", value)) { _TotalConns = value; OnPropertyChanged("TotalConns"); } } }
private Int32 _TcpRetrans;
/// <summary>TCP重传合计</summary>
[DisplayName("TCP重传合计")]
[Description("TCP重传合计")]
[DataObjectField(false, false, false, 0)]
[BindColumn("TcpRetrans", "TCP重传合计", "")]
public Int32 TcpRetrans { get => _TcpRetrans; set { if (OnPropertyChanging("TcpRetrans", value)) { _TcpRetrans = value; OnPropertyChanged("TcpRetrans"); } } }
private Int32 _AvgRttMin;
/// <summary>最小时延</summary>
[DisplayName("最小时延")]
[Description("最小时延")]
[DataObjectField(false, false, false, 0)]
[BindColumn("AvgRttMin", "最小时延", "")]
public Int32 AvgRttMin { get => _AvgRttMin; set { if (OnPropertyChanging("AvgRttMin", value)) { _AvgRttMin = value; OnPropertyChanged("AvgRttMin"); } } }
private Int32 _AvgRttMax;
/// <summary>最大时延。抖动=Max-Min>100ms→VoIP/游戏体验差</summary>
[DisplayName("最大时延")]
[Description("最大时延。抖动=Max-Min>100ms→VoIP/游戏体验差")]
[DataObjectField(false, false, false, 0)]
[BindColumn("AvgRttMax", "最大时延。抖动=Max-Min>100ms→VoIP/游戏体验差", "")]
public Int32 AvgRttMax { get => _AvgRttMax; set { if (OnPropertyChanging("AvgRttMax", value)) { _AvgRttMax = value; OnPropertyChanged("AvgRttMax"); } } }
private Int32 _BlockedCount;
/// <summary>防火墙拦截合计</summary>
[DisplayName("防火墙拦截合计")]
[Description("防火墙拦截合计")]
[DataObjectField(false, false, false, 0)]
[BindColumn("BlockedCount", "防火墙拦截合计", "")]
public Int32 BlockedCount { get => _BlockedCount; set { if (OnPropertyChanging("BlockedCount", value)) { _BlockedCount = value; OnPropertyChanged("BlockedCount"); } } }
private Int32 _DnsQueries;
/// <summary>DNS查询合计</summary>
[DisplayName("DNS查询合计")]
[Description("DNS查询合计")]
[DataObjectField(false, false, false, 0)]
[BindColumn("DnsQueries", "DNS查询合计", "")]
public Int32 DnsQueries { get => _DnsQueries; set { if (OnPropertyChanging("DnsQueries", value)) { _DnsQueries = value; OnPropertyChanged("DnsQueries"); } } }
private Int32 _OnlineSeconds;
/// <summary>小时在线秒数。反映该成员用网时长。异常短→可能外出或断网</summary>
[DisplayName("小时在线秒数")]
[Description("小时在线秒数。反映该成员用网时长。异常短→可能外出或断网")]
[DataObjectField(false, false, false, 0)]
[BindColumn("OnlineSeconds", "小时在线秒数。反映该成员用网时长。异常短→可能外出或断网", "", ItemType = "TimeSpan")]
public Int32 OnlineSeconds { get => _OnlineSeconds; set { if (OnPropertyChanging("OnlineSeconds", value)) { _OnlineSeconds = value; OnPropertyChanged("OnlineSeconds"); } } }
private Int32 _OfflineCount;
/// <summary>掉线次数合计</summary>
[DisplayName("掉线次数合计")]
[Description("掉线次数合计")]
[DataObjectField(false, false, false, 0)]
[BindColumn("OfflineCount", "掉线次数合计", "")]
public Int32 OfflineCount { get => _OfflineCount; set { if (OnPropertyChanging("OfflineCount", value)) { _OfflineCount = value; OnPropertyChanged("OfflineCount"); } } }
private DateTime _CreateTime;
/// <summary>创建时间</summary>
[Category("扩展")]
[DisplayName("创建时间")]
[Description("创建时间")]
[DataObjectField(false, false, true, 0)]
[BindColumn("CreateTime", "创建时间", "")]
public DateTime CreateTime { get => _CreateTime; set { if (OnPropertyChanging("CreateTime", value)) { _CreateTime = value; OnPropertyChanged("CreateTime"); } } }
#endregion
#region 获取/设置 字段值
/// <summary>获取/设置 字段值</summary>
/// <param name="name">字段名</param>
/// <returns></returns>
public override Object? this[String name]
{
get => name switch
{
"Id" => _Id,
"MemberId" => _MemberId,
"StatHour" => _StatHour,
"DeviceCount" => _DeviceCount,
"RxBytes" => _RxBytes,
"TxBytes" => _TxBytes,
"RxBytesMax" => _RxBytesMax,
"TxBytesMax" => _TxBytesMax,
"TotalConns" => _TotalConns,
"TcpRetrans" => _TcpRetrans,
"AvgRttMin" => _AvgRttMin,
"AvgRttMax" => _AvgRttMax,
"BlockedCount" => _BlockedCount,
"DnsQueries" => _DnsQueries,
"OnlineSeconds" => _OnlineSeconds,
"OfflineCount" => _OfflineCount,
"CreateTime" => _CreateTime,
_ => base[name]
};
set
{
switch (name)
{
case "Id": _Id = value.ToInt(); break;
case "MemberId": _MemberId = value.ToInt(); break;
case "StatHour": _StatHour = value.ToDateTime(); break;
case "DeviceCount": _DeviceCount = value.ToInt(); break;
case "RxBytes": _RxBytes = value.ToLong(); break;
case "TxBytes": _TxBytes = value.ToLong(); break;
case "RxBytesMax": _RxBytesMax = value.ToLong(); break;
case "TxBytesMax": _TxBytesMax = value.ToLong(); break;
case "TotalConns": _TotalConns = value.ToInt(); break;
case "TcpRetrans": _TcpRetrans = value.ToInt(); break;
case "AvgRttMin": _AvgRttMin = value.ToInt(); break;
case "AvgRttMax": _AvgRttMax = value.ToInt(); break;
case "BlockedCount": _BlockedCount = value.ToInt(); break;
case "DnsQueries": _DnsQueries = value.ToInt(); break;
case "OnlineSeconds": _OnlineSeconds = value.ToInt(); break;
case "OfflineCount": _OfflineCount = value.ToInt(); break;
case "CreateTime": _CreateTime = value.ToDateTime(); break;
default: base[name] = value; break;
}
}
}
#endregion
#region 关联映射
/// <summary>关联成员</summary>
[XmlIgnore, IgnoreDataMember, ScriptIgnore]
public Member? Member => Extends.Get(nameof(Member), k => Member.FindById(MemberId));
/// <summary>关联成员</summary>
[Map(nameof(MemberId), typeof(Member), "Id")]
public String? MemberName => Member?.Name;
#endregion
#region 扩展查询
/// <summary>根据编号查找</summary>
/// <param name="id">编号</param>
/// <returns>实体对象</returns>
public static MemberHourStat? FindById(Int32 id)
{
if (id < 0) return null;
// 实体缓存
if (Meta.Session.Count < MaxCacheCount) return Meta.Cache.Find(e => e.Id == id);
// 单对象缓存
return Meta.SingleCache[id];
//return Find(_.Id == id);
}
#endregion
#region 高级查询
/// <summary>高级查询</summary>
/// <param name="memberId">关联成员</param>
/// <param name="start">统计小时开始</param>
/// <param name="end">统计小时结束</param>
/// <param name="key">关键字</param>
/// <param name="page">分页参数信息。可携带统计和数据权限扩展查询等信息</param>
/// <returns>实体列表</returns>
public static IList<MemberHourStat> Search(Int32 memberId, DateTime start, DateTime end, String key, PageParameter page)
{
var exp = new WhereExpression();
if (memberId >= 0) exp &= _.MemberId == memberId;
exp &= _.StatHour.Between(start, end);
if (!key.IsNullOrEmpty()) exp &= SearchWhereByKeys(key);
return FindAll(exp, page);
}
#endregion
#region 字段名
/// <summary>取得成员小时统计字段信息的快捷方式</summary>
public partial class _
{
/// <summary>编号</summary>
public static readonly Field Id = FindByName("Id");
/// <summary>关联成员</summary>
public static readonly Field MemberId = FindByName("MemberId");
/// <summary>统计小时</summary>
public static readonly Field StatHour = FindByName("StatHour");
/// <summary>平均在线设备数</summary>
public static readonly Field DeviceCount = FindByName("DeviceCount");
/// <summary>小时接收字节合计</summary>
public static readonly Field RxBytes = FindByName("RxBytes");
/// <summary>小时发送字节合计</summary>
public static readonly Field TxBytes = FindByName("TxBytes");
/// <summary>分钟接收峰值。定位该成员带宽消耗最大的时刻</summary>
public static readonly Field RxBytesMax = FindByName("RxBytesMax");
/// <summary>分钟发送峰值</summary>
public static readonly Field TxBytesMax = FindByName("TxBytesMax");
/// <summary>最大连接数</summary>
public static readonly Field TotalConns = FindByName("TotalConns");
/// <summary>TCP重传合计</summary>
public static readonly Field TcpRetrans = FindByName("TcpRetrans");
/// <summary>最小时延</summary>
public static readonly Field AvgRttMin = FindByName("AvgRttMin");
/// <summary>最大时延。抖动=Max-Min>100ms→VoIP/游戏体验差</summary>
public static readonly Field AvgRttMax = FindByName("AvgRttMax");
/// <summary>防火墙拦截合计</summary>
public static readonly Field BlockedCount = FindByName("BlockedCount");
/// <summary>DNS查询合计</summary>
public static readonly Field DnsQueries = FindByName("DnsQueries");
/// <summary>小时在线秒数。反映该成员用网时长。异常短→可能外出或断网</summary>
public static readonly Field OnlineSeconds = FindByName("OnlineSeconds");
/// <summary>掉线次数合计</summary>
public static readonly Field OfflineCount = FindByName("OfflineCount");
/// <summary>创建时间</summary>
public static readonly Field CreateTime = FindByName("CreateTime");
static Field FindByName(String name) => Meta.Table.FindByName(name)!;
}
/// <summary>取得成员小时统计字段名称的快捷方式</summary>
public partial class __
{
/// <summary>编号</summary>
public const String Id = "Id";
/// <summary>关联成员</summary>
public const String MemberId = "MemberId";
/// <summary>统计小时</summary>
public const String StatHour = "StatHour";
/// <summary>平均在线设备数</summary>
public const String DeviceCount = "DeviceCount";
/// <summary>小时接收字节合计</summary>
public const String RxBytes = "RxBytes";
/// <summary>小时发送字节合计</summary>
public const String TxBytes = "TxBytes";
/// <summary>分钟接收峰值。定位该成员带宽消耗最大的时刻</summary>
public const String RxBytesMax = "RxBytesMax";
/// <summary>分钟发送峰值</summary>
public const String TxBytesMax = "TxBytesMax";
/// <summary>最大连接数</summary>
public const String TotalConns = "TotalConns";
/// <summary>TCP重传合计</summary>
public const String TcpRetrans = "TcpRetrans";
/// <summary>最小时延</summary>
public const String AvgRttMin = "AvgRttMin";
/// <summary>最大时延。抖动=Max-Min>100ms→VoIP/游戏体验差</summary>
public const String AvgRttMax = "AvgRttMax";
/// <summary>防火墙拦截合计</summary>
public const String BlockedCount = "BlockedCount";
/// <summary>DNS查询合计</summary>
public const String DnsQueries = "DnsQueries";
/// <summary>小时在线秒数。反映该成员用网时长。异常短→可能外出或断网</summary>
public const String OnlineSeconds = "OnlineSeconds";
/// <summary>掉线次数合计</summary>
public const String OfflineCount = "OfflineCount";
/// <summary>创建时间</summary>
public const String CreateTime = "CreateTime";
}
#endregion
}
|