微信小程序页面迁移校验之前 P5任务处理之前
This commit is contained in:
152
scripts/ops/_analyze_settlement_data.py
Normal file
152
scripts/ops/_analyze_settlement_data.py
Normal file
@@ -0,0 +1,152 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
"""
|
||||
分析手动获取的结账数据,检查时间分布
|
||||
|
||||
用法:
|
||||
cd C:/NeoZQYY
|
||||
python scripts/ops/_analyze_settlement_data.py
|
||||
"""
|
||||
|
||||
import json
|
||||
import os
|
||||
import sys
|
||||
from datetime import datetime, date
|
||||
from pathlib import Path
|
||||
from collections import defaultdict
|
||||
|
||||
# 添加项目根目录到 Python 路径
|
||||
project_root = Path(__file__).parent.parent.parent
|
||||
sys.path.insert(0, str(project_root))
|
||||
|
||||
# 加载环境变量
|
||||
from dotenv import load_dotenv
|
||||
load_dotenv(project_root / ".env")
|
||||
|
||||
def main():
|
||||
"""分析结账数据的时间分布"""
|
||||
|
||||
# 查找最新的结账数据文件
|
||||
log_dir = Path(os.environ["SYSTEM_LOG_ROOT"])
|
||||
settlement_files = list(log_dir.glob("settlement_manual_fetch_*.json"))
|
||||
|
||||
if not settlement_files:
|
||||
print("❌ 未找到结账数据文件")
|
||||
return
|
||||
|
||||
# 使用最新的文件
|
||||
latest_file = max(settlement_files, key=lambda f: f.stat().st_mtime)
|
||||
print(f"📂 分析文件: {latest_file.name}")
|
||||
|
||||
# 读取数据
|
||||
with open(latest_file, "r", encoding="utf-8") as f:
|
||||
data = json.load(f)
|
||||
|
||||
records = data.get("records", [])
|
||||
print(f"📊 总记录数: {len(records)}")
|
||||
|
||||
if not records:
|
||||
print("❌ 没有记录数据")
|
||||
return
|
||||
|
||||
# 分析时间分布
|
||||
pay_times = []
|
||||
date_counts = defaultdict(int)
|
||||
|
||||
for record in records:
|
||||
# 结账数据在 settleList 字段中
|
||||
settle_data = record.get("settleList", {})
|
||||
pay_time = settle_data.get("payTime")
|
||||
if pay_time:
|
||||
pay_times.append(pay_time)
|
||||
# 提取日期部分
|
||||
try:
|
||||
date_str = pay_time.split()[0] # "2026-02-14 10:30:00" -> "2026-02-14"
|
||||
date_counts[date_str] += 1
|
||||
except:
|
||||
continue
|
||||
|
||||
if not pay_times:
|
||||
print("❌ 没有有效的 payTime 数据")
|
||||
return
|
||||
|
||||
pay_times.sort()
|
||||
|
||||
print(f"\n🕐 时间分布:")
|
||||
print(f" 最早结账时间: {pay_times[0]}")
|
||||
print(f" 最晚结账时间: {pay_times[-1]}")
|
||||
print(f" 有效结账记录: {len(pay_times)}/{len(records)}")
|
||||
|
||||
# 按日期统计
|
||||
print(f"\n📅 按日期统计:")
|
||||
sorted_dates = sorted(date_counts.keys())
|
||||
|
||||
for date_str in sorted_dates:
|
||||
count = date_counts[date_str]
|
||||
print(f" {date_str}: {count:4d} 条记录")
|
||||
|
||||
print(f"\n总计: {len(sorted_dates)} 天有数据")
|
||||
|
||||
# 检查数据延迟
|
||||
latest_date = pay_times[-1].split()[0]
|
||||
today = date.today().strftime("%Y-%m-%d")
|
||||
|
||||
print(f"\n🔍 数据延迟检查:")
|
||||
print(f" API 最新数据日期: {latest_date}")
|
||||
print(f" 今天日期: {today}")
|
||||
|
||||
if latest_date < today:
|
||||
from datetime import datetime as dt
|
||||
latest_dt = dt.strptime(latest_date, "%Y-%m-%d")
|
||||
today_dt = dt.strptime(today, "%Y-%m-%d")
|
||||
days_behind = (today_dt - latest_dt).days
|
||||
print(f" ⚠️ 数据延迟: {days_behind} 天")
|
||||
else:
|
||||
print(f" ✅ 数据是最新的")
|
||||
|
||||
# 检查最近几天的数据
|
||||
print(f"\n📈 最近 7 天数据:")
|
||||
recent_dates = sorted_dates[-7:] if len(sorted_dates) >= 7 else sorted_dates
|
||||
for date_str in recent_dates:
|
||||
count = date_counts[date_str]
|
||||
print(f" {date_str}: {count:4d} 条记录")
|
||||
|
||||
# 生成更新的报告
|
||||
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
|
||||
report_file = log_dir / f"settlement_detailed_analysis_{timestamp}.md"
|
||||
|
||||
with open(report_file, "w", encoding="utf-8") as f:
|
||||
f.write(f"# 飞球 API 结账数据详细分析报告\n\n")
|
||||
f.write(f"**分析时间**: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}\n\n")
|
||||
f.write(f"**数据源文件**: {latest_file.name}\n\n")
|
||||
f.write(f"**数据统计**:\n")
|
||||
f.write(f"- 总记录数: {len(records)}\n")
|
||||
f.write(f"- 有效结账记录: {len(pay_times)}\n")
|
||||
f.write(f"- 最早结账时间: {pay_times[0]}\n")
|
||||
f.write(f"- 最晚结账时间: {pay_times[-1]}\n")
|
||||
f.write(f"- 数据覆盖天数: {len(sorted_dates)} 天\n\n")
|
||||
|
||||
f.write(f"**数据延迟检查**:\n")
|
||||
f.write(f"- API 最新数据日期: {latest_date}\n")
|
||||
f.write(f"- 今天日期: {today}\n")
|
||||
|
||||
if latest_date < today:
|
||||
f.write(f"- ⚠️ 数据延迟: {days_behind} 天\n\n")
|
||||
else:
|
||||
f.write(f"- ✅ 数据是最新的\n\n")
|
||||
|
||||
f.write(f"**按日期统计** (共 {len(sorted_dates)} 天):\n")
|
||||
for date_str in sorted_dates:
|
||||
count = date_counts[date_str]
|
||||
f.write(f"- {date_str}: {count:4d} 条记录\n")
|
||||
|
||||
f.write(f"\n**最近 7 天数据**:\n")
|
||||
for date_str in recent_dates:
|
||||
count = date_counts[date_str]
|
||||
f.write(f"- {date_str}: {count:4d} 条记录\n")
|
||||
|
||||
print(f"\n📋 详细分析报告已保存到: {report_file}")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user