116 lines
3.8 KiB
Python
116 lines
3.8 KiB
Python
#!/usr/bin/env python3
|
|
# -*- coding: utf-8 -*-
|
|
"""
|
|
检查结账数据 JSON 文件的结构,了解实际字段名称
|
|
|
|
用法:
|
|
cd C:/NeoZQYY
|
|
python scripts/ops/_inspect_settlement_json.py
|
|
"""
|
|
|
|
import json
|
|
import os
|
|
import sys
|
|
from pathlib import Path
|
|
|
|
# 添加项目根目录到 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)
|
|
|
|
print(f"📊 文件顶层结构:")
|
|
for key in data.keys():
|
|
print(f" - {key}: {type(data[key])}")
|
|
|
|
records = data.get("records", [])
|
|
print(f"\n📋 总记录数: {len(records)}")
|
|
|
|
if not records:
|
|
print("❌ 没有记录数据")
|
|
return
|
|
|
|
# 检查第一条记录的结构
|
|
first_record = records[0]
|
|
print(f"\n🔍 第一条记录的字段:")
|
|
for key, value in first_record.items():
|
|
value_type = type(value).__name__
|
|
if isinstance(value, str) and len(value) > 50:
|
|
value_preview = f"{value[:50]}..."
|
|
else:
|
|
value_preview = str(value)
|
|
print(f" - {key}: {value_type} = {value_preview}")
|
|
|
|
# 查找时间相关字段
|
|
time_fields = []
|
|
for key, value in first_record.items():
|
|
if isinstance(value, str) and any(pattern in key.lower() for pattern in ['time', 'date', '时间', '日期']):
|
|
time_fields.append((key, value))
|
|
|
|
if time_fields:
|
|
print(f"\n🕐 时间相关字段:")
|
|
for key, value in time_fields:
|
|
print(f" - {key}: {value}")
|
|
else:
|
|
print(f"\n❌ 未找到明显的时间字段")
|
|
|
|
# 检查前几条记录,寻找时间模式
|
|
print(f"\n🔍 前 5 条记录的所有字段值 (寻找时间模式):")
|
|
for i, record in enumerate(records[:5]):
|
|
print(f"\n记录 {i+1}:")
|
|
for key, value in record.items():
|
|
if isinstance(value, str) and len(value) > 10:
|
|
# 检查是否像时间格式
|
|
if any(char in str(value) for char in ['-', ':', ' ']) and any(char.isdigit() for char in str(value)):
|
|
print(f" - {key}: {value} ⭐")
|
|
else:
|
|
print(f" - {key}: {value}")
|
|
else:
|
|
print(f" - {key}: {value}")
|
|
|
|
# 保存结构分析
|
|
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
|
|
analysis_file = log_dir / f"settlement_structure_analysis_{timestamp}.txt"
|
|
|
|
with open(analysis_file, "w", encoding="utf-8") as f:
|
|
f.write(f"结账数据结构分析\n")
|
|
f.write(f"分析时间: {datetime.now().isoformat()}\n")
|
|
f.write(f"数据文件: {latest_file.name}\n")
|
|
f.write(f"总记录数: {len(records)}\n\n")
|
|
|
|
f.write(f"第一条记录字段:\n")
|
|
for key, value in first_record.items():
|
|
f.write(f" {key}: {type(value).__name__} = {str(value)[:100]}\n")
|
|
|
|
if time_fields:
|
|
f.write(f"\n时间相关字段:\n")
|
|
for key, value in time_fields:
|
|
f.write(f" {key}: {value}\n")
|
|
|
|
print(f"\n📋 结构分析已保存到: {analysis_file}")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
from datetime import datetime
|
|
main() |