欢迎光临
我们一直在努力

「简记往来」开发历程系列:双向差额统计——如何自动计算回礼参考

一、什么是“差额统计”?

礼账和普通记账最大的区别是:它要回答的不只是“花了多少钱”,而是“谁欠谁”。

举个例子:

张三结婚时你随了800。两年后你结婚,张三随了600。

普通记账App会记录两笔“支出”和“收入”,但它不会告诉你:张三还欠你200。

差额统计要做的就是这个——把“人和人之间的往来”算清楚。

二、数据聚合逻辑

差额统计的核心SQL:

SELECT
contact_id,
SUM(CASE WHEN type = 'receive' THEN amount ELSE 0 END) as total_receive,
SUM(CASE WHEN type = 'send' THEN amount ELSE 0 END) as total_send,
SUM(CASE WHEN type = 'receive' THEN amount ELSE amount END) as net
FROM records
WHERE book_id = ?
GROUP BY contact_id
HAVING net != 0

  • total_receive:对方累计给了你多少钱
  • total_send:你累计给了对方多少钱
  • net:净额(正数=你欠对方,负数=对方欠你)

三、前端展示方案

差额统计的结果通过两种方式展示:

1. 联系人列表页:每个联系人卡片上显示净额

张三 | 收:800 | 送:500 | 净:+300
李四 | 收:600 | 送:1000 | 净:-400

正数(绿色)表示“你欠他的”,负数(红色)表示“他欠你的”。

2. 排行榜:分别展示“收礼最多TOP5”、“送礼最多TOP5”、“净额最高TOP5”、“净额最低TOP5”。

四、性能优化

6.8万用户、62万笔记录,差额统计的查询怎么保证速度?

核心优化点:

  • 索引:(book_id, contact_id) 复合索引
  • 缓存:统计结果缓存5分钟,减少数据库查询
  • 分页:排行榜只取TOP5,不加载全部数据
  • 实际测试中,最复杂的查询(按账本聚合所有联系人)响应时间约150ms。

    五、净额的含义

    净额的正负号容易让人困惑,简记往来的设计是:

    • 正数(+) :你欠对方的。对方给你的比你给他的多,你需要“还人情”。
    • 负数(-) :对方欠你的。你给他的比他给你的多,对方需要“还人情”。

    这个设计让用户一眼就能看出“该回礼给谁”。
    在这里插入图片描述

    六、真实用户反馈

    “以前回礼全靠猜,现在打开简记往来一搜,就知道该回多少。终于不用纠结了。”

    这就是差额统计的价值——不是算账,是让人情往来更从容。

    赞(0)
    未经允许不得转载:171主机测评 » 「简记往来」开发历程系列:双向差额统计——如何自动计算回礼参考
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址