Skip to content

账单字段说明

本章说明支付宝「交易记录明细查询」导出的 CSV 在导入本系统时,各字段的读取与丢弃情况,可作为开发新解析器或调整字段映射的参考。

样例与实现位置

  • 编码:GBK(解析器兼容 UTF-8 / UTF-8 BOM)
  • 解析器:src/main/java/cn/rosercode/finance/importer/AlipayBillParser.java
  • 落库服务:src/main/java/cn/rosercode/finance/service/impl/BillImportServiceImpl.java

文件结构

位置内容是否处理
第 1 行支付宝交易记录明细查询忽略
第 2 行账号:[...]忽略
第 3 行起始日期:[...] 终止日期:[...]忽略
第 4 行---交易记录明细列表---忽略
第 5 行表头(以「交易号」开头)作为列定位依据
数据行每行一笔交易逐行解析
结尾统计待收入/已支出/待支出、导出时间、用户忽略

解析器通过「以 交易号 开头」定位表头行;遇到空行、--- 分隔线或 开头的统计行即结束。

CSV 完整表头(16 列)

序号列名序号列名
1交易号9商品名称
2商家订单号10金额(元)
3交易创建时间11收/支
4付款时间12交易状态
5最近修改时间13服务费(元)
6交易来源地14成功退款(元)
7类型15备注
8交易对方16资金状态

完全丢弃的字段(7 个)

列名说明
商家订单号未使用
最近修改时间未使用
交易来源地未使用
类型未使用,改用「收/支」推断类型
服务费(元)未使用
成功退款(元)未使用
备注支付宝自带备注被丢弃;系统备注由「交易对方 · 商品名称」拼接生成

读取但未落库的字段(3 个)

列名用途
交易状态仅用于类型推断与预览展示
资金状态仅用于「不计收支」行的类型推断
交易创建时间仅当「付款时间」为空时作为交易时间兜底

落库映射(写入 t_transaction

CSV 列数据库字段说明
交易号external_no导入去重键
付款时间(缺失时用交易创建时间)transaction_time交易发生时间
金额(元)amount去除千分位逗号后解析
收/支type + include_in_stats「不计收支」默认 include_in_stats = 0
交易对方 + 商品名称remark拼接为「交易对方 · 商品名称」,截断至 255 字符
payment_method固定为 ALIPAY
category_id取用户选择的默认分类;未选择则为 NULL

类型推断规则

收/支交易状态 / 资金状态推断类型
支出EXPENSE
收入INCOME
不计收支交易状态含「退款」INCOME
不计收支资金状态为「已收入」INCOME
不计收支其他(如「交易关闭」)EXPENSE

可能的后续增强

  1. 将支付宝「备注」并入系统 remark(当前完全丢失)。
  2. 新增字段记录「服务费」/「成功退款」。
  3. 保留「商家订单号」作为辅助去重或展示。

相关文档

基于 Spring Boot 3 + Vue 3 的个人收支管理系统