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