# newapi 多机部署重复计费修复方案 **Repository Path**: liuhongbin/newapi-error-refund ## Basic Information - **Project Name**: newapi 多机部署重复计费修复方案 - **Description**: No description available - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-02-05 - **Last Updated**: 2026-02-05 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 重复退费记录查询工具 ## 当前统计ID 截止查询id :185188 ## 功能说明 这个工具用于查询数据库中 `logs` 表里 `type=4` 的重复退费记录。 ### 主要功能 1. **自动检测重复**: 根据 `content` 字段内容识别重复的退费记录 2. **详细展示**: 显示每条重复记录的详细信息(ID、用户、时间、金额等) 3. **统计汇总**: 统计重复组数、多退次数和总金额 4. **导出功能**: 可将结果导出为 JSON 文件便于后续处理 5. **数据分析**: 提供按用户、时间、模式的统计分析 ## 安装依赖 ```bash pip install pymysql ``` 或使用 requirements.txt: ```bash pip install -r requirements.txt ``` ## 使用方法 ### 1. 查询重复记录 #### 方式一:交互式运行 ```bash python check_duplicate_refunds.py ``` 脚本会列出所有数据库,选择后开始查询。 #### 方式二:直接指定数据库 ```bash python check_duplicate_refunds.py new-api ``` #### 方式三:自动导出结果 ```bash python check_duplicate_refunds.py new-api --export ``` ### 2. 分析重复记录 查询完成后,可以使用分析工具进行深入分析: ```bash # 交互式分析 python analyze_duplicates.py duplicate_refunds_new-api_20260204_113456.json # 自动导出分析结果 python analyze_duplicates.py duplicate_refunds_new-api_20260204_113456.json --export ``` ### 3. 生成汇总报告 分析完成后,可以生成更详细的汇总报告和CSV文件: ```bash python generate_summary.py user_duplicate_details.json ``` 这将生成: - 控制台输出的详细汇总报告 - `user_error_refunds.csv` - 所有用户的错误退费统计(可用Excel打开) ### 4. 计算修正后的用户余额 关联 users 表,计算每个用户修正后的余额: ```bash python calculate_corrected_balance.py user_duplicate_details.json new-api ``` 这将生成: - 控制台输出的余额修正报告 - `user_corrected_balance.csv` - 用户余额修正明细表(可用Excel打开) - `user_corrected_balance.json` - 用户余额修正数据(JSON格式) - `update_user_quota.sql` - SQL更新脚本(可直接执行修正余额) ### 5. 执行余额修正(可选) **警告:此步骤会修改数据库,请先在测试环境验证!** ```bash # 1. 模拟运行(不修改数据库,查看将要执行的操作) python execute_correction.py user_corrected_balance.json new-api # 2. 查看执行报告 cat correction_report.txt # 3. 实际执行修正 python execute_correction.py user_corrected_balance.json new-api --execute # 4. 自定义批次大小(每批处理20个用户) python execute_correction.py user_corrected_balance.json new-api --execute --batch-size=20 ``` 执行后会: - 扣除每个用户的错误退费金额 - 在 logs 表插入操作日志(type=3) - 日志内容格式:`管理员修正重复退款金额,将用户额度从 ¥X 修改为 ¥Y,详细日志可联系客服` ## 查询结果说明 ### 控制台输出 脚本会显示: - 重复的退费内容 - 每组重复的次数 - 详细的记录信息(ID、用户、时间、金额等) - 统计汇总信息 ### 导出文件 #### 1. duplicate_refunds_{数据库名}_{时间戳}.json 包含所有重复记录的详细信息: - 数据库名称和检查时间 - 每组重复记录的完整信息 - 记录ID、用户信息、时间戳等 #### 2. user_duplicate_details.json 用户维度的统计信息: - 每个用户的重复记录数 - 重复组数 - **总退费金额** (total_refund_amount) - **错误退费金额** (error_refund_amount) - 重复多退的金额 - 详细的重复记录列表 #### 3. user_error_refunds.csv CSV格式的用户错误退费统计表: - 可用Excel或其他表格软件打开 - 包含:用户名、总记录数、重复次数、重复组数、总退费金额、错误退费金额 - 按错误退费金额降序排列 #### 4. user_corrected_balance.csv CSV格式的用户余额修正明细表: - 可用Excel或其他表格软件打开 - 包含:用户ID、用户名、显示名称、邮箱、用户组、状态 - 当前余额(quota和元)、错误退费(quota和元)、修正后余额(quota和元) - 已使用额度、请求次数、重复次数、重复组数 - 按错误退费金额降序排列 #### 5. user_corrected_balance.json JSON格式的用户余额修正数据: - 包含总体统计信息 - 每个用户的详细余额信息 - 可用于程序化处理 #### 6. update_user_quota.sql SQL更新脚本: - 包含所有需要修正余额的用户的UPDATE语句 - 使用事务包裹,可安全回滚 - **警告:执行前务必备份数据库!** ## 分析结果说明 分析工具提供三个维度的统计: ### 1. 按用户统计 - 显示每个用户的总记录数、重复次数、重复组数、**错误退费金额** - 按错误退费金额降序排列 - 默认显示前20个用户 - 显示总计错误退费额 ### 2. 按日期统计 - 显示每天的重复记录数 - 帮助识别问题高发时段 - 默认显示最近30天 ### 3. 按内容模式统计 - Video任务失败 - 图片任务失败 - 其他类型 - 显示每种模式的重复组数和总重复次数 ## 输出示例 ### 查询结果示例 ``` ================================================================================ 数据库: new-api ================================================================================ [警告] 发现 14467 组重复的退费记录: 【重复组 1】 退费内容: Video async task failed video_941479bf-e342-447a-bd7d-15b1616a271f, refund ¥0.288000 额度 重复次数: 2 次 (多退了 1 次) 详细记录: 1. ID: 185188 用户: user_xxx (user_id: 27) 时间: 2026-02-04 11:07:21 退费额度: ¥0.000000 (quota: 0) 模型: 渠道: 5 IP: 192.168.1.1 2. ID: 185186 ... ================================================================================ 统计汇总: 重复组数: 14467 多退次数: 20145 总退费金额: ¥0.000000 ================================================================================ ``` ### 分析结果示例 ``` ================================================================================ 按用户统计重复退费 ================================================================================ 用户名 总记录数 重复次数 重复组数 错误退费额 -------------------------------------------------------------------------------- user_001 13461 8038 5423 ¥1617.050000 user_002 4901 2790 2111 ¥ 462.631200 user_003 3873 2238 1635 ¥ 201.381600 总计错误退费额: ¥4585.018474 ================================================================================ ================================================================================ 按内容模式统计 ================================================================================ 模式 重复组数 总重复次数 -------------------------------------------------------------------------------- Video任务失败 13256 18474 图片任务失败 1168 1578 其他 43 93 ``` ### 汇总报告示例 ``` 【总体统计】 涉及用户数: 106 总记录数: 34612 重复记录数: 20125 重复率: 58.14% 总退费金额: ¥7767.19 错误退费金额: ¥4585.02 错误退费占比: 59.03% 【错误退费金额 Top 10 用户】 排名 用户名 重复次数 错误退费额 -------------------------------------------------------------------------------- 1 user_001 8038 ¥ 1617.05 2 user_002 798 ¥ 578.59 3 user_003 2790 ¥ 462.63 ``` ## 数据库配置 数据库连接信息存储在 `config.ini` 配置文件中。 ### 配置文件格式 创建或编辑 `config.ini` 文件: ```ini [database] host = your_host port = 3306 user = your_user password = your_password database = newapi charset = utf8mb4 ``` ### 配置示例 **生产环境配置**: ```ini [database] host = your_production_host port = 3306 user = your_username password = your_password database = newapi charset = utf8mb4 ``` **测试环境配置**: ```ini [database] host = your_test_host port = 3306 user = your_username password = your_password database = your_test_database charset = utf8mb4 ``` ### 配置管理 所有脚本都通过 `db_config.py` 模块读取配置文件,无需修改代码即可切换数据库环境。 ## 注意事项 1. 确保网络可以访问数据库服务器 2. 确保数据库用户有 `logs` 表的查询权限 3. 大量数据可能需要较长查询时间 4. quota 字段会自动转换为人民币金额(除以 500000) ## 后续处理建议 查询到重复记录后,可以: 1. 导出 JSON 文件进行详细分析 2. 根据 ID 列表编写删除或修正脚本 3. 分析重复原因,修复产生重复的代码逻辑