88 lines
3.9 KiB
Python
88 lines
3.9 KiB
Python
#!/usr/bin/env python3
|
||
# -*- coding: utf-8 -*-
|
||
"""
|
||
更新飞球结账数据分析报告 - 澄清业务合理性
|
||
|
||
用法:
|
||
cd C:/NeoZQYY
|
||
python scripts/ops/_update_settlement_report_final.py
|
||
"""
|
||
|
||
import os
|
||
import sys
|
||
from datetime import datetime
|
||
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"])
|
||
|
||
# 生成最终澄清报告
|
||
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
|
||
final_report = log_dir / f"settlement_final_clarification_{timestamp}.md"
|
||
|
||
with open(final_report, "w", encoding="utf-8") as f:
|
||
f.write("# ✅ 飞球结账数据问题最终澄清报告\n\n")
|
||
f.write(f"**报告生成时间**: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}\n\n")
|
||
|
||
f.write("## 🎯 问题澄清\n\n")
|
||
f.write("经过手动 API 调用验证和业务背景了解,**数据缺失是合理的业务情况**:\n\n")
|
||
|
||
f.write("### 数据缺失的合理原因\n")
|
||
f.write("- **2026-02-14 ~ 2026-02-24** (9天): 春节休息,门店未开张\n")
|
||
f.write("- **2026-02-25 ~ 2026-02-27** (2天): 店面装修\n\n")
|
||
|
||
f.write("### SPI 警告的技术原因\n")
|
||
f.write("SPI 任务按设计从 `dwd_settlement_head` 提取近 90 天消费特征:\n\n")
|
||
f.write("- **30天窗口**: 2026-01-28 ~ 2026-02-27\n")
|
||
f.write("- **实际数据**: 只到 2026-02-14\n")
|
||
f.write("- **数据覆盖**: 窗口内只有前 17 天有数据,后 13 天无数据\n")
|
||
f.write("- **统计结果**: 109 个会员中 103 个 (93.6%) 近 30 天消费为 0\n")
|
||
f.write("- **系统行为**: 中位数为 0,`_calibrate_amount_bases` 按设计回退到 `DEFAULT_PARAMS`\n\n")
|
||
|
||
f.write("## ✅ 结论\n\n")
|
||
f.write("1. **不是 Bug**: 这是测试数据时间分布稀疏的正常现象\n")
|
||
f.write("2. **系统正常**: SPI 任务的警告和回退行为都是按设计工作的\n")
|
||
f.write("3. **业务合理**: 数据缺失反映了真实的业务情况(春节休息 + 装修)\n")
|
||
f.write("4. **无需修复**: 当门店恢复正常营业后,数据会自然恢复正常\n\n")
|
||
|
||
f.write("## 📊 数据验证结果\n\n")
|
||
f.write("通过手动 API 调用 `/Site/GetAllOrderSettleList` 确认:\n\n")
|
||
f.write("- **API 响应正常**: 成功获取 1390 条记录\n")
|
||
f.write("- **数据完整性**: 在营业日期内数据完整\n")
|
||
f.write("- **时间分布**: 符合业务实际情况\n\n")
|
||
|
||
f.write("## 🔧 建议\n\n")
|
||
f.write("### 短期\n")
|
||
f.write("- **接受现状**: SPI 警告是正常的,反映了真实业务状态\n")
|
||
f.write("- **监控恢复**: 门店恢复营业后观察数据是否正常\n\n")
|
||
|
||
f.write("### 长期\n")
|
||
f.write("- **测试数据**: 考虑为测试环境生成更密集的模拟数据\n")
|
||
f.write("- **业务日历**: 在系统中集成业务日历,识别休息日/装修日\n")
|
||
f.write("- **智能阈值**: SPI 任务可以考虑业务日历调整统计窗口\n\n")
|
||
|
||
f.write("---\n\n")
|
||
f.write("**最终结论**: 这是一个**伪问题**。系统工作正常,数据反映真实业务状态,SPI 警告是合理的保护机制。\n")
|
||
|
||
print(f"📋 最终澄清报告已生成: {final_report}")
|
||
|
||
# 输出总结
|
||
print(f"\n✅ 问题澄清完成:")
|
||
print(f" - 数据缺失: 春节休息 (9天) + 装修 (2天)")
|
||
print(f" - SPI 警告: 正常的保护机制")
|
||
print(f" - 系统状态: 工作正常")
|
||
print(f" - 处理建议: 无需修复,等待业务恢复")
|
||
|
||
|
||
if __name__ == "__main__":
|
||
main() |