记账这件事,说大不大说小不小。我见过太多小老板用Excel记了三年账,最后发现公式错位导致全年利润少算30%;也遇到过自由职业者因为漏记几笔支出,到年底报税时手忙脚乱。传统财务软件对个人和微小企业来说就像用高射炮打蚊子——功能过剩还死贵,这就是为什么我们要做这个轻量化记账平台。
这个基于SpringBoot的系统定位非常明确:给个体户、自由职业者、小微团队提供零门槛的财务管控工具。相比市面上的庞然大物,我们砍掉了复杂的财务模块,保留核心的收支记录、分类统计、多账户管理功能,让用户5分钟就能上手。去年帮一个煎饼摊老板部署测试版,他第二天就扔掉了用了五年的记账本——这就是我们要的效果。
选择SpringBoot不是随大流。我们对比过三个方案:
数据库选了MariaDB而非MySQL,因为:
系统由五个关键模块组成:
sql复制CREATE TABLE `transaction` (
`id` BIGINT AUTO_INCREMENT,
`user_id` BIGINT NOT NULL,
`account_id` BIGINT NOT NULL COMMENT '关联账户',
`amount` DECIMAL(12,2) NOT NULL COMMENT '支持负数为支出',
`category` VARCHAR(20) NOT NULL COMMENT '餐饮/交通等',
`tags` JSON DEFAULT NULL COMMENT '支持多标签{"聚餐","客户"}',
`remark` VARCHAR(100) DEFAULT '无',
`photo_url` VARCHAR(255) DEFAULT NULL COMMENT '票据照片',
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
针对非专业用户做了三大优化:
重要提示:金额输入框要做防呆设计,禁止输入"三百元"这类文本
在小霸王服务器(2核4G)上要达到200+TPS,我们做了:
实测数据:
为技术小白准备的Docker Compose方案:
yaml复制version: '3'
services:
db:
image: mariadb:10.6
environment:
MYSQL_ROOT_PASSWORD: ${DB_PASSWORD}
volumes:
- ./data:/var/lib/mysql
app:
image: registry.cn-hangzhou.aliyuncs.com/accounting:v1.2
ports:
- "8080:8080"
depends_on:
- db
启动命令:
bash复制echo "DB_PASSWORD=yourStrongPassword" > .env
docker-compose up -d
根据23家试用客户反馈,最常改的三个地方:
java复制@Column(columnDefinition = "JSON")
private String extendedFields; // {"commissionRate":0.3}
早期版本用Float存储金额,结果出现:
code复制100.01 - 100.00 = 0.009999999999990905
改用BigDecimal后解决,但要特别注意:
java复制@JsonSerialize(using=ToStringSerializer.class)
private BigDecimal amount;
用户反馈"昨天记的账变成今天了",原因是:
最终解决方案:
Timezone-Offset: 480(东八区)java复制@PostMapping
public Result addRecord(@RequestHeader("Timezone-Offset") int offset,
@RequestBody Record record) {
record.setCreateTime(LocalDateTime.now().plusMinutes(offset));
//...
}
这个系统最让我惊喜的是用户开发的野路子用法:
这说明轻量化设计反而激发了适应性。下一步计划加入插件体系,让用户能自己扩展字段和报表。毕竟,最好的管理系统永远是用户自己改造出来的那一个。