#!/usr/bin/env python3 """ 将测试数据导出为Excel格式,以便通过数据采集模块导入到正式数据库 """ import json import pandas as pd from datetime import datetime, timedelta import random from typing import List, Dict def load_test_data(): """加载测试数据""" data_dir = "/Users/liulujian/Documents/code/deeprisk-claude-1/backend/test_data/revenue_test" with open(f"{data_dir}/streamers.json", 'r', encoding='utf-8') as f: streamers = json.load(f) with open(f"{data_dir}/contracts.json", 'r', encoding='utf-8') as f: contracts = json.load(f) with open(f"{data_dir}/recharges.json", 'r', encoding='utf-8') as f: recharges = json.load(f) with open(f"{data_dir}/tax_declarations.json", 'r', encoding='utf-8') as f: tax_declarations = json.load(f) return streamers, contracts, recharges, tax_declarations def export_streamers_to_excel(streamers: List[Dict]): """导出主播信息到Excel""" data = [] for idx, s in enumerate(streamers): # 为每个主播生成唯一的身份证号 id_card_no = f"11010119900101{1000 + idx:04d}" data.append({ "streamer_id": s['streamer_id'], "real_name": s['streamer_name'], "stage_name": s['streamer_name'], "id_card_no": id_card_no, "phone": "13800138000", "email": f"{s['streamer_id'].lower()}@example.com", "platform": "抖音", "mcn_agency_id": "", "entry_date": "2024-01-01", "contract_status": "有效", "entity_type": "个人", "tax_region": "北京市", "bank_account_no": "6222021234567890123", "bank_name": "中国工商银行", }) df = pd.DataFrame(data) output_file = "/Users/liulujian/Documents/code/deeprisk-claude-1/backend/test_data/revenue_test/主播信息导入模板.xlsx" df.to_excel(output_file, index=False, engine='openpyxl') print(f"✓ 主播信息已导出到: {output_file}") print(f" 共 {len(data)} 条记录") def export_contracts_to_excel(contracts: List[Dict]): """导出分成协议到Excel""" data = [] for c in contracts: data.append({ "contract_no": c['contract_id'], "contract_type": "独家", "streamer_id": c['streamer_id'], "streamer_name": c['streamer_id'], "streamer_entity_type": "个人", "platform_party": c['platform'], "platform_credit_code": "91110000000000000X", "revenue_type": "直播打赏", "platform_ratio": float(c['platform_share_ratio']), "streamer_ratio": float(c['share_ratio']), "settlement_cycle": "月结", "contract_start_date": c['start_date'], "contract_end_date": c['end_date'], "contract_status": c['status'], "remark": "", }) df = pd.DataFrame(data) output_file = "/Users/liulujian/Documents/code/deeprisk-claude-1/backend/test_data/revenue_test/分成协议导入模板.xlsx" df.to_excel(output_file, index=False, engine='openpyxl') print(f"✓ 分成协议已导出到: {output_file}") print(f" 共 {len(data)} 条记录") def export_recharges_to_excel(recharges: List[Dict]): """导出充值记录到Excel""" data = [] for r in recharges: data.append({ "platform": "抖音", "recharge_amount": float(r['recharge_amount']), "recharge_date": r['recharge_date'], "recharge_type": "现金", "account_name": r['streamer_id'], "voucher_no": f"CZ{r['recharge_id']}", "remark": f"用户{r['streamer_id']}的充值记录", }) df = pd.DataFrame(data) output_file = "/Users/liulujian/Documents/code/deeprisk-claude-1/backend/test_data/revenue_test/充值记录导入模板.xlsx" df.to_excel(output_file, index=False, engine='openpyxl') print(f"✓ 充值记录已导出到: {output_file}") print(f" 共 {len(data)} 条记录") def export_tax_declarations_to_excel(tax_declarations: List[Dict]): """导出税务申报到Excel""" data = [] for t in tax_declarations: data.append({ "taxpayer_name": t['streamer_id'], "taxpayer_id": t['tax_no'], "tax_period": t['declaration_period'], "declaration_date": t['declaration_date'], "tax_authority_code": "11010100", "tax_authority_name": "北京市朝阳区税务局", "taxpayer_type": "小规模纳税人", "tax_rate": float(t['tax_rate']), "sales_revenue": float(t['declared_amount']), "sales_revenue_taxable": float(t['declared_amount']), "output_tax": float(t['tax_amount']), "input_tax": 0.00, "input_tax_deductible": 0.00, "tax_payable": float(t['tax_amount']), "tax_to_pay": float(t['tax_amount']), "refund_amount": 0.00, "declaration_status": t['status'], "is_reconciled": "否", }) df = pd.DataFrame(data) output_file = "/Users/liulujian/Documents/code/deeprisk-claude-1/backend/test_data/revenue_test/税务申报导入模板.xlsx" df.to_excel(output_file, index=False, engine='openpyxl') print(f"✓ 税务申报已导出到: {output_file}") print(f" 共 {len(data)} 条记录") def main(): """主函数""" print("=" * 80) print("将测试数据导出为Excel格式") print("=" * 80) print() # 加载测试数据 streamers, contracts, recharges, tax_declarations = load_test_data() # 导出各类数据 print("\n📤 正在导出数据...") export_streamers_to_excel(streamers) export_contracts_to_excel(contracts) export_recharges_to_excel(recharges) export_tax_declarations_to_excel(tax_declarations) print("\n" + "=" * 80) print("✅ 所有数据导出完成!") print("=" * 80) print("\n📋 导出文件列表:") print(" 1. 主播信息导入模板.xlsx") print(" 2. 分成协议导入模板.xlsx") print(" 3. 充值记录导入模板.xlsx") print(" 4. 税务申报导入模板.xlsx") print("\n📖 使用说明:") print(" 1. 通过前端界面 http://localhost:3000/data-import/upload 上传文件") print(" 2. 选择对应的导入类型(streamer/contract/recharge/tax)") print(" 3. 确认导入并等待完成") print("\n" + "=" * 80) if __name__ == "__main__": main()