1. 项目背景与核心价值记账这件事我从大学时代就开始折腾了。最早用Excel手工记录后来试过各种记账App但总感觉差点意思——要么功能太简单要么数据不透明要么就是突然收费。去年终于下定决心自己开发一套全栈记账系统既能满足个性化需求又能作为全栈技术的练手项目。这套系统经过半年迭代现在已经稳定运行了8个月累计记录交易4000笔。最大的价值在于1) 完全掌控数据所有权 2) 可定制任何特殊记账场景 3) 打通了消费分析的全链路。比如我可以自定义奶茶消费警戒线这样的特色功能这是商业软件永远做不到的。2. 技术架构设计2.1 整体技术栈选型前端采用ReactTypeScript组合主要考虑组件化开发适合频繁交互的记账场景TypeScript的强类型能避免金额计算这类低级错误生态丰富用了MUI组件库加速开发后端选择NestJS框架因为模块化架构适合业务逐渐复杂的情况内置TypeScript支持与前端的完美配合企业级应用常用的成熟框架数据库选了PostgreSQL看中其JSONB类型完美存储动态的交易附加信息强大的分析函数支持复杂报表统计事务特性确保资金计算的绝对准确2.2 关键架构决策采用BFF(Backend For Frontend)模式在前后端之间增加了GraphQL层。实测发现三个优势前端可以精确获取所需字段减少接口请求量一次查询即可获取关联数据如交易分类账户类型系统自动生成前后端协作效率提升30%// 典型GraphQL查询示例 query GetTransactions { transactions(dateRange: 2023-07) { id amount category { name icon } account { name } memo } }3. 核心功能实现细节3.1 交易记录引擎开发中最复杂的部分需要考虑多币种处理自动汇率转换分期交易拆分如年费按月分摊转账交易的借贷平衡校验解决方案是采用事务事件溯源模式每个交易作为独立事务记录状态变更生成事件流通过重放事件重建账户余额(注根据规范要求已移除mermaid图表改为文字说明) 流程说明 1. 用户提交交易表单 2. 服务端验证并生成交易记录 3. 同步生成AccountBalanceUpdated事件 4. 事件处理器更新账户余额 5. 异常时触发事务回滚3.2 自动化记账功能实现了三类自动化规则模板记账固定场景快速记录如每日咖啡智能识别通过备注关键字自动分类银行同步对接支付宝/微信账单API重要经验自动化规则一定要加人工确认环节初期因为规则冲突导致过错误分类后来改为建议确认模式才稳定。4. 数据分析模块4.1 实时统计实现利用PostgreSQL的窗口函数实现了实时消费趋势图按日/周/月预算执行进度监控同类消费对比分析-- 周消费统计SQL示例 SELECT date_trunc(week, date) AS week, SUM(CASE WHEN typeexpense THEN amount ELSE 0 END) AS spending FROM transactions GROUP BY week ORDER BY week DESC LIMIT 12;4.2 自定义报表系统开发了类Excel的报表设计器支持拖拽字段生成透视表自定义计算公式条件格式设置如超支标红实测比商业软件更灵活比如可以计算 奶茶支出 / 总餐饮支出 × 100% 这样的个性化指标5. 部署与运维方案5.1 基础设施配置使用Docker Compose编排服务前端静态资源托管在Nginx后端服务启用PM2集群模式数据库配置定期备份任务# docker-compose片段 services: db: image: postgres:14 volumes: - pg_data:/var/lib/postgresql/data environment: POSTGRES_PASSWORD: ${DB_PASSWORD}5.2 监控与告警实现了三级监控体系前端Sentry收集异常后端Prometheus采集指标数据库慢查询日志分析最实用的自定义指标是记账延迟报警——当超过24小时没有新记录时推送提醒到手机。6. 踩坑经验实录6.1 金额计算的精度问题初期直接使用JavaScript的Number类型导致出现0.1 0.2 // 0.30000000000000004解决方案后端使用PostgreSQL的numeric类型前端引入decimal.js库全链路统一以分为单位存储整数6.2 数据迁移的血泪史从旧系统迁移时犯过的错直接INSERT导致ID冲突忘记转换日期时区分类映射表不完整最终方案使用临时表过渡编写校验脚本核对总数和总额分批次迁移并人工抽检7. 项目成果与迭代计划目前系统日均使用3-5次核心指标交易记录成功率99.8%报表生成速度2s(万级数据)移动端适配完成度90%下一步重点增加多设备同步功能开发消费预测AI模型完善API开放平台这套系统给我最大的启示是工具应该适应人而不是人适应工具。现在我的记账流程从原来的每周痛苦1小时变成了每天顺手3分钟这才是真正可持续的个人财务管理方式。