tamakyi
ff46a9cbb8
统计页把「我的结论」与「访客点赞」拆成两块
用户问「数据统计处的推荐地点和踩雷地点只针对站长吗?应该分开,用户的点赞点踩单独做一块」。
他看到的没错:那张卡的**列表全是站长结论**(verdictPlaces = place_votes),访客票只在副标题里
露了个总数(👍 N · 👎 M)——既看不出哪几个地点被顶上去,也容易被当成两者合并的榜。
- 新增 votes.TopVisitorVoted:按访客票数列地点榜。HAVING 只算**至少有一票的那个方向**,
否则 0 票的地点会把榜塞满;同票数按 visit_count DESC, p.id 排,刷新之间顺序不跳。
票按坐标键挂,所以 join 回当前数据集的地点才定位得到(与 Tallies/verdictPlaces 同一口径)。
- 「推荐 & 踩雷(我的结论)」只讲站长,副标题只留「推荐 N · 踩雷 M」,标题与列表都改成「我」的口吻。
- 新增「访客点赞」卡:副标题总票数,两列列 👍/👎 票最多的地点并带票数,各有空态。
- 加载拆成两个 pageJob(verdicts / visitorvotes)并行,两块互不依赖就不该串着等。
- 两块共用同一个可见性开关(IsAdmin || Settings.MarksPublic),与地点页投票区一致。
用例(stats_votes_split_test.go)按卡片标题切出两段 HTML,断言「我标的地点只出现在站长块、
访客顶的地点只出现在访客块」,并核对两边各自的计数——比单看总数更能证明没串台。
⚠️ 又一次同一个坑:两张票表都按坐标键读、与数据集无关,place_visitor_votes 还没有 user_id、
不随删用户清理 ⇒ 上一轮跑剩的票会被算进来、票数越堆越多。新增 isolateVoteState 按 place_key
清两张表(前置 + cleanup 各一次)。
顺带订正 README:那里还写着站长结论「按 src_pk 存」,其实早就是坐标键了。
全量验收 PASS=338 FAIL=0 SKIP=0。
2026-10-01 01:47:48 +08:00
..
2026-09-24 20:37:57 +08:00
2026-10-01 01:47:48 +08:00
2026-09-24 20:37:16 +08:00
2026-09-24 20:37:16 +08:00
2026-09-24 20:37:16 +08:00
2026-09-18 13:05:49 +08:00
2026-09-18 13:05:49 +08:00
2026-09-28 19:31:21 +08:00
2026-09-29 10:46:54 +08:00
2026-09-29 13:25:50 +08:00
2026-09-30 16:18:52 +08:00
2026-09-30 19:15:48 +08:00
2026-09-30 19:15:48 +08:00
2026-09-30 16:18:52 +08:00
2026-09-18 17:06:22 +08:00
2026-09-24 20:37:16 +08:00
2026-09-24 20:37:16 +08:00
2026-09-24 20:37:16 +08:00
2026-10-01 01:15:04 +08:00
2026-09-24 20:37:16 +08:00
2026-09-30 15:02:45 +08:00
2026-09-30 19:00:18 +08:00
2026-09-24 20:37:16 +08:00
2026-09-29 16:57:29 +08:00
2026-09-24 20:37:16 +08:00
2026-09-29 11:50:06 +08:00
2026-09-29 13:25:50 +08:00
2026-09-30 17:35:59 +08:00
2026-09-24 20:37:16 +08:00
2026-09-19 16:31:01 +08:00
2026-09-19 16:31:01 +08:00
2026-09-20 10:07:00 +08:00
2026-09-24 20:37:16 +08:00
2026-09-18 13:05:49 +08:00
2026-09-18 21:52:29 +08:00
2026-09-19 16:04:00 +08:00
2026-09-18 13:05:49 +08:00
2026-09-19 16:04:00 +08:00
2026-09-24 20:37:16 +08:00
2026-09-19 16:04:00 +08:00
2026-09-24 20:37:16 +08:00
2026-09-24 20:37:57 +08:00
2026-09-19 16:31:01 +08:00
2026-09-24 20:37:16 +08:00
2026-09-24 20:37:16 +08:00
2026-10-01 01:15:04 +08:00
2026-09-29 21:15:25 +08:00
2026-09-30 19:00:18 +08:00
2026-09-30 19:45:51 +08:00
2026-09-24 20:37:16 +08:00
2026-10-01 01:47:48 +08:00
2026-09-30 23:31:17 +08:00
2026-09-24 20:37:16 +08:00
2026-09-30 16:18:52 +08:00
2026-10-01 00:11:04 +08:00
2026-10-01 01:15:04 +08:00
2026-09-20 12:22:11 +08:00
2026-09-24 20:37:16 +08:00
2026-09-24 20:37:57 +08:00
2026-09-24 20:37:57 +08:00
2026-09-18 13:05:49 +08:00
2026-09-30 19:45:51 +08:00
2026-09-18 13:05:49 +08:00
2026-09-18 17:06:22 +08:00
2026-09-30 16:18:52 +08:00
2026-09-24 20:37:16 +08:00
2026-09-24 20:37:16 +08:00
2026-09-24 20:37:16 +08:00
2026-09-18 13:05:49 +08:00
2026-09-24 20:37:16 +08:00
2026-09-24 20:37:16 +08:00
2026-09-19 16:04:00 +08:00
2026-09-24 20:37:16 +08:00
2026-09-24 20:37:16 +08:00
2026-09-24 20:37:16 +08:00
2026-09-18 13:05:49 +08:00
2026-09-24 20:37:16 +08:00
2026-09-30 23:31:17 +08:00
2026-09-24 20:37:16 +08:00
2026-10-01 01:47:48 +08:00
2026-09-24 20:37:16 +08:00
2026-09-20 12:22:11 +08:00
2026-09-24 20:37:57 +08:00
2026-09-24 20:37:57 +08:00
2026-09-24 20:37:57 +08:00
2026-09-24 20:37:16 +08:00
2026-09-18 13:05:49 +08:00
2026-09-24 20:37:16 +08:00
2026-09-30 23:31:17 +08:00
2026-09-18 13:05:49 +08:00
2026-09-24 20:37:16 +08:00
2026-09-24 20:37:16 +08:00
2026-09-24 20:37:16 +08:00
2026-10-01 01:47:48 +08:00
2026-09-24 20:37:16 +08:00
2026-09-18 13:05:49 +08:00
2026-09-24 20:37:57 +08:00