feat(tokenstats): add monthly/yearly activity views and re-anchor ranges to today - #1110
feat(tokenstats): add monthly/yearly activity views and re-anchor ranges to today#11103316891527 wants to merge 5 commits into
Conversation
CATMIAOZHI
left a comment
There was a problem hiding this comment.
BLOCK:2 项 P2,触发条件、后果和建议见行内评论。
审计提交:6db9aa2523365f818bdcb6d50255504da11946b4,目标分支 dev。已先请求 CATMIAOZHI review,再完成独立工作树全 diff、运行调用链和独立 agent 复核;git diff --check 通过。
验证范围:上游仓库该 HEAD 的 check-runs 为 0,审计前无 review 线程或普通评论。已核对工作流内容:PR workflow 仅匹配 development,本 PR 目标为 dev;构建/单测 push workflow 匹配 main。已核对 Actions Variables(GITEE_OWNER、GITEE_REPO)。已核实作者 fork 的 Android Build 对应本次 HEAD 且成功;步骤只有构建,没有 JVM 单测执行步骤,因此不将其视为单测通过。遵守目标仓库 AGENTS.md,本次未执行本地编译、测试、Lint 或真机验证,未修改源码。
|
|
||
| // Hourly buckets are only meaningful for single-day views (24 bars). Keep the | ||
| // range short to avoid wasteful computation for weekly/monthly/yearly ranges. | ||
| val hourly = if (dayCount <= 2 && hourTotals.isNotEmpty()) { |
There was a problem hiding this comment.
[P2] 每日图表需要覆盖实际允许的多日日期范围
首次进入时 loadInternal 默认加载 DAILY,但 defaultDateRange 仍为最近 30 天;这里对超过两天的范围返回空 hourly,而 DAILY 的 TokenActivityHourlyChart 无条件读取 data.hourly。因此即使有使用记录,首次进入也只看到空图。日期选择器在 DAILY 模式选择三天以上也能稳定触发,saveCustomRange 不会改变模式。请协调默认范围、模式和自定义日期的渲染规则,保证所有可选范围都产生可显示的数据,不能只修首次默认日期。
| val rangeEnd = data.daily.lastOrNull()?.date | ||
| val points = data.monthly.map { month -> | ||
| TokenActivitySeriesPoint( | ||
| startDate = month.startDate, |
There was a problem hiding this comment.
[P2] 首月详情的开始日期应截到实际查询范围
例如 2026-09-07 点击“每年”,实际范围是 2025-09-07 至 2026-09-06。monthly 聚合按自然月分桶,首柱仅统计 09-07 至 09-30,但 month.startDate 固定为 09-01,这里的详情却显示 09-01 至 09-30 的用量,包含了实际上未查询的前六天。请像下面 TokenActivityYearlyChart 一样,使用 data.daily.first().date 截断起始日期;结束日期已经做了对应处理。
变更说明 / Description
Token 统计页的“活跃记录”此前只有每日/每周/累计三档,且日期范围固定在上次手动选择的日期——想看当天数据必须打开日期面板手动点选。本 PR 把模式扩展为五档(每日/每周/每月/每年/累计),点击任一模式自动刷新到最近一个完整周期,并按模式展示对应粒度的柱状图;原方格热力图独立为“活跃日历”卡片。
背景与动机 / Context and motivation
改动范围 / Changes
minusMonths自动钳制月末)→ 按周分桶,2 月平年 28 天为 4 根,其余 5 根TokenActivityAggregator新增小时分桶(仅短范围计算)与月/年分桶,复用现有分位数等级与柱高逻辑;周分桶改为从范围起点对齐的滚动 7 天分桶;getActivityHoursInRange(strftime('%Y-%m-%d %H')分组),不涉及任何表结构/索引/迁移变更;兼容性与风险 / Compatibility and risks
valueOf失败回退DAILY),不会崩溃;java.time计算(minusDays/minusMonths/YearMonth.atEndOfMonth),无硬编码月长/闰年规则,也不会展示未来日期;关联 Issue / Related issue
N/A —— 该改动源自用户对 Token 统计页使用体验的反馈,无对应 Issue。
验证方式 / Verification