You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

157 lines
4.7 KiB
C#

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

// ============================================================================
// 【文件说明】AnalyticsDashboardDTO.cs - 分析仪表盘数据 DTO
// ============================================================================
// 这是仪表盘接口返回的数据结构,包含网站访问统计的核心指标。
//
// 【核心指标说明】
// - PVPage View页面浏览量用户每打开一个页面计为 1 次
// - UVUnique Visitor独立访客数同一访客多次访问只计 1 次
// - IP UV独立 IP 数,同一 IP 多次访问只计 1 次
// - 跳出率:只浏览一页就离开的会话占比
// - 平均停留时长:用户在网站的平均停留时间
//
// 【与 Java Spring Boot 的对比】
// Java 通常用 POJO
// public class AnalyticsDashboardDTO {
// private String statDate;
// private Long pv;
// private Long uv;
// // getter/setter...
// }
//
// C# 用自动属性,代码更简洁。
// ============================================================================
namespace Admin.NET.Plugin.HwPortal;
/// <summary>
/// 分析仪表盘数据。
/// <para>
/// 【业务场景】
/// 管理后台的"数据分析"页面展示:
/// - 今日/指定日期的访问统计
// - 热门页面排行
// - 搜索关键词排行
/// </para>
/// </summary>
public class AnalyticsDashboardDTO
{
/// <summary>
/// 统计日期格式yyyy-MM-dd
/// </summary>
public string StatDate { get; set; }
/// <summary>
/// 页面浏览量PV
/// <para>
/// 【业务说明】
/// 用户每打开一个页面计为 1 次 PV。
/// 同一用户刷新页面会增加 PV。
/// </para>
/// </summary>
public long? Pv { get; set; }
/// <summary>
/// 独立访客数UV
/// <para>
/// 【业务说明】
/// 按 visitorId 去重统计。
/// 同一访客多次访问只计 1 次 UV。
/// </para>
/// </summary>
public long? Uv { get; set; }
/// <summary>
/// 独立 IP 数。
/// <para>
/// 【业务说明】
/// 按 IP 哈希去重统计。
/// 同一 IP 多次访问只计 1 次。
/// 注意:由于存储的是哈希值,无法反查原始 IP。
/// </para>
/// </summary>
public long? IpUv { get; set; }
/// <summary>
/// 平均停留时长(毫秒)。
/// <para>
/// 【计算方式】
/// 所有 page_leave 事件的停留时长平均值。
/// </para>
/// </summary>
public long? AvgStayMs { get; set; }
/// <summary>
/// 跳出率(百分比)。
/// <para>
/// 【计算方式】
/// 跳出率 = 单页会话数 / 总会话数 × 100
///
/// 【业务含义】
/// - 跳出率高:用户只看了一页就离开,可能内容不相关或体验差
/// - 跳出率低:用户浏览了多个页面,内容吸引人
/// </para>
/// </summary>
public double? BounceRate { get; set; }
/// <summary>
/// 搜索次数。
/// <para>
/// 【业务说明】
/// search_submit 事件的总次数。
/// </para>
/// </summary>
public long? SearchCount { get; set; }
/// <summary>
/// 下载次数。
/// <para>
/// 【业务说明】
/// download_click 事件的总次数。
/// </para>
/// </summary>
public long? DownloadCount { get; set; }
/// <summary>
/// 入口页面排行。
/// <para>
/// 【业务说明】
/// 用户进入网站的第一页统计:
/// - 哪些页面是用户进入网站的入口
/// - 用于评估推广页面的效果
/// </para>
/// <para>
/// 【C# 语法知识点 - 集合属性初始化】
/// List&lt;T&gt; Property { get; set; } = new();
///
/// = new() 是属性初始化器:
/// - 创建对象时自动初始化集合
/// - 避免 null 引用异常
/// - new() 是 C# 9.0 的目标类型 new 表达式
///
/// 对比 Java
/// Java 通常不初始化,或需要显式初始化:
/// private List&lt;Item&gt; items = new ArrayList&lt;&gt;();
/// </para>
/// </summary>
public List<AnalyticsRankItemDTO> EntryPages { get; set; } = new();
/// <summary>
/// 热门页面排行。
/// <para>
/// 【业务说明】
/// 浏览量最高的页面列表。
/// </para>
/// </summary>
public List<AnalyticsRankItemDTO> HotPages { get; set; } = new();
/// <summary>
/// 热门搜索关键词排行。
/// <para>
/// 【业务说明】
/// 搜索次数最多的关键词列表。
/// </para>
/// </summary>
public List<AnalyticsRankItemDTO> HotKeywords { get; set; } = new();
}