52 lines
2.5 KiB
Python
52 lines
2.5 KiB
Python
#!/usr/bin/env python3
|
|
# -*- coding: utf-8 -*-
|
|
"""重新导入王芳2026H1支付宝:只算真实支出(交易成功/支付成功),排除交易关闭(退款)"""
|
|
import json, pymysql
|
|
from datetime import datetime
|
|
cfg = json.load(open('db_config.json'))
|
|
conn = pymysql.connect(host=cfg['host'], port=cfg['port'], user=cfg['user'],
|
|
password=cfg.get('password'), database=cfg['database'], charset='utf8mb4')
|
|
cur = conn.cursor()
|
|
MEMBER_ID = 3
|
|
data = json.load(open('/tmp/wangfang_records.json'))
|
|
|
|
ali2cat = {
|
|
'餐饮美食': '餐饮/食品', '日用百货': '购物', '服饰装扮': '购物',
|
|
'交通出行': '交通', '医疗健康': '医疗', '家居家装': '家居',
|
|
'美容美发': '美容美发', '保险': '保险', '爱车养车': '交通',
|
|
'文化休闲': '娱乐', '生活服务': '生活服务', '数码电器': '数码',
|
|
'商业服务': '商业服务', '母婴亲子': '母婴', '转账红包': '转账/红包',
|
|
'酒店旅游': '旅游', '充值缴费': '生活缴费', '运动户外': '运动',
|
|
'教育培训': '教育培训', '其他': '其他',
|
|
}
|
|
EXCLUDE_STATUS = ('交易关闭',) # 退款/取消订单
|
|
|
|
inc=exp=skip=0; inc_sum=exp_sum=0.0; cat_tot={}
|
|
closed_list=[]
|
|
for rec in data['records']:
|
|
ts=rec['交易时间'].strip(); dt=datetime.strptime(ts,'%Y-%m-%d %H:%M:%S')
|
|
direction=rec['收/支'].strip(); amount=float(rec['金额'])
|
|
ali_cat=rec['交易分类'].strip(); status=rec['交易状态'].strip()
|
|
peer=rec['交易对方']; goods=rec['商品说明']; pay=rec['收/付款方式']
|
|
note=f"[支付宝] {ali_cat}|{peer}|{goods or '/'}|{pay}"
|
|
|
|
if direction=='支出':
|
|
if status in EXCLUDE_STATUS:
|
|
skip+=1; continue
|
|
cat=ali2cat.get(ali_cat,'其他')
|
|
cur.execute("INSERT INTO variable_expenses (member_id,category,amount,recorded_date,note) VALUES (%s,%s,%s,%s,%s)",
|
|
(MEMBER_ID,cat,amount,dt.date(),note))
|
|
exp+=1; exp_sum+=amount; cat_tot[cat]=cat_tot.get(cat,0)+amount
|
|
elif direction=='收入':
|
|
cur.execute("INSERT INTO income_records (member_id,source,amount,frequency,recorded_date,note) VALUES (%s,%s,%s,%s,%s,%s)",
|
|
(MEMBER_ID,peer,amount,'一次性',dt.date(),note))
|
|
inc+=1; inc_sum+=amount
|
|
else:
|
|
skip+=1
|
|
|
|
conn.commit()
|
|
print(f"支出 {exp}笔 ¥{exp_sum:.2f} (排除交易关闭 {skip}笔)")
|
|
print(f"收入 {inc}笔 ¥{inc_sum:.2f}")
|
|
print("支出分类:", {k:round(v,2) for k,v in sorted(cat_tot.items(),key=lambda x:-x[1])})
|
|
conn.close()
|