# 📱 数据验证与短信告警系统 ## 🎯 功能概述 自动化数据验证系统,每天定时检查数据一致性,发现问题时通过阿里云短信服务发送告警。 **核心功能:** - ✅ 自动验证 JSON/CSV/数据库 三个数据源的一致性 - ✅ 验证失败自动发送短信告警(错误代码:2222) - ✅ 支持定时任务(每天上午9点执行) - ✅ 生成详细的验证报告 - ✅ 支持多手机号接收告警 --- ## 📁 文件结构 ``` xhh_baijiahao/ ├── data_validation.py # 数据验证核心模块 ├── data_validation_with_sms.py # 数据验证+短信告警集成脚本 ⭐ ├── sms_config.json # 短信服务配置文件 ⭐ ├── test_validation_sms.bat # Windows快速测试脚本 ├── 数据验证短信告警使用说明.md # 详细使用文档 └── ai_sms/ # 阿里云短信SDK示例 └── alibabacloud_sample/ └── sample.py ``` --- ## 🚀 快速开始(5分钟) ### 1️⃣ 安装依赖 ```bash pip install alibabacloud_dysmsapi20170525 alibabacloud_credentials alibabacloud_tea_openapi alibabacloud_tea_util ``` ### 2️⃣ 配置短信服务 编辑 `sms_config.json`: ```json { "access_key_id": "您的AccessKey ID", "access_key_secret": "您的AccessKey Secret", "sign_name": "北京乐航时代科技", "template_code": "SMS_486210104", "phone_numbers": "13621242430" } ``` **获取AccessKey:** https://ram.console.aliyun.com/manage/ak ### 3️⃣ 测试运行 **Windows用户(双击运行):** ``` test_validation_sms.bat ``` **命令行运行:** ```bash # 测试短信发送 python data_validation_with_sms.py --test-sms # 执行数据验证 python data_validation_with_sms.py ``` ### 4️⃣ 配置定时任务 ```bash # 查看配置命令 python data_validation_with_sms.py --setup-schedule ``` 按照提示配置Windows任务计划程序,设置每天9点自动执行。 --- ## 📖 使用场景 ### 场景1:每日自动验证 **定时任务配置(每天9点):** - 程序:`C:\Python\python.exe` - 参数:`D:\workspace\xhh_baijiahao\data_validation_with_sms.py` - 触发器:每天上午9:00 **执行流程:** 1. 自动验证昨天的数据(JSON/CSV/数据库) 2. 如果发现问题 → 发送短信告警(错误代码2222) 3. 生成详细验证报告 ### 场景2:手动验证指定日期 ```bash # 验证2025-12-29的数据 python data_validation_with_sms.py --date 2025-12-29 # 验证指定表 python data_validation_with_sms.py --table ai_statistics_day --date 2025-12-29 # 只验证特定数据源 python data_validation_with_sms.py --source csv database ``` ### 场景3:仅验证不发短信 ```bash # 适用于调试或测试 python data_validation_with_sms.py --no-sms ``` --- ## 🔔 短信告警说明 ### 触发条件 发送短信告警(错误代码:**2222**)的情况: | 问题类型 | 说明 | 示例 | |---------|-----|-----| | **顺序不一致** | JSON和CSV记录顺序不同 | 账号A在JSON第1位,CSV第3位 | | **缺失记录** | 某个数据源少了记录 | JSON有10条,CSV只有9条 | | **多余记录** | 某个数据源多了记录 | CSV有11条,数据库只有10条 | | **字段差异** | 相同记录的字段值不同 | 阅读量:JSON=1000, CSV=999 | ### 短信内容 ``` 【北京乐航时代科技】您的验证码是2222 ``` > 💡 **说明**:由于使用验证码模板,错误代码固定为 `2222`。具体错误详情请查看验证报告文件。 ### 多号码配置 在 `sms_config.json` 中配置多个接收号码: ```json { "phone_numbers": "13621242430,13800138000,13900139000" } ``` --- ## 📊 验证报告 每次验证自动生成详细报告: ``` validation_report_20250104_090523.txt ``` **报告内容:** - ✅ 顺序验证结果 - ✅ 交叉验证结果 - ✅ 数据差异统计 - ✅ 详细错误列表(记录级别) **示例报告片段:** ``` 交叉验证结果 ---------------------------------------------------------------------- json vs csv 共同记录: 48 条 仅在json: 0 条 仅在csv: 2 条 字段不匹配: 3 条 仅在csv中的记录(前5条): - 测试账号1|1 - 测试账号2|1 字段值不匹配的记录(前3条): 记录: 主力账号|1 字段 read_count: json: 150000 csv: 149999 ``` --- ## ⚙️ 高级配置 ### 环境变量方式(更安全) **Windows PowerShell:** ```powershell $env:ALIBABA_CLOUD_ACCESS_KEY_ID="您的AccessKey ID" $env:ALIBABA_CLOUD_ACCESS_KEY_SECRET="您的AccessKey Secret" ``` **Linux/macOS:** ```bash export ALIBABA_CLOUD_ACCESS_KEY_ID="您的AccessKey ID" export ALIBABA_CLOUD_ACCESS_KEY_SECRET="您的AccessKey Secret" ``` ### 配置优先级 1. **环境变量** (最高优先级) 2. **sms_config.json** 配置文件 3. **代码中的默认值** --- ## 🔧 故障排查 ### ❌ 短信发送失败 **常见原因:** 1. AccessKey ID/Secret 不正确 2. 短信签名未审核通过 3. 短信模板未审核通过 4. 账户余额不足 5. 手机号格式错误 **解决方法:** ```bash # 测试短信发送 python data_validation_with_sms.py --test-sms ``` 查看控制台输出的详细错误信息和诊断地址。 ### ❌ 导入错误 ``` ImportError: No module named 'alibabacloud_dysmsapi20170525' ``` **解决方法:** ```bash pip install alibabacloud_dysmsapi20170525 alibabacloud_credentials alibabacloud_tea_openapi alibabacloud_tea_util ``` ### ❌ 数据库连接失败 检查 `database_config.py` 配置是否正确。 ### ❌ 定时任务不执行 **检查项:** 1. 任务计划程序中任务状态 2. Python路径和脚本路径是否正确 3. 查看任务历史记录 --- ## 📝 命令行参数 ```bash python data_validation_with_sms.py [参数] ``` | 参数 | 说明 | 示例 | |-----|-----|-----| | `--date` | 指定验证日期 | `--date 2025-12-29` | | `--source` | 指定数据源 | `--source json csv` | | `--table` | 指定验证表 | `--table ai_statistics_day` | | `--setup-schedule` | 配置定时任务 | `--setup-schedule` | | `--test-sms` | 测试短信功能 | `--test-sms` | | `--no-sms` | 禁用短信发送 | `--no-sms` | --- ## 🔐 安全建议 1. ✅ **使用环境变量存储敏感信息** - 不要将 AccessKey 提交到 Git - 将 `sms_config.json` 添加到 `.gitignore` 2. ✅ **定期轮换 AccessKey** - 建议每3-6个月更换一次 3. ✅ **使用 RAM 子账号** - 为短信服务创建专用子账号 - 仅授予短信发送权限 4. ✅ **设置 IP 白名单** - 在阿里云 RAM 控制台限制访问 IP --- ## 📞 技术支持 ### 阿里云短信服务 - 控制台:https://dysms.console.aliyun.com/ - 文档:https://help.aliyun.com/product/44282.html - API参考:https://api.aliyun.com/product/Dysmsapi ### 常见问题 **Q:短信收不到?** A:检查手机号是否正确,短信签名和模板是否已审核通过。 **Q:如何查看短信发送记录?** A:登录阿里云短信服务控制台 → 业务统计 → 发送记录查询。 **Q:短信费用多少?** A:验证码短信约0.045元/条,具体价格以阿里云官网为准。 **Q:可以自定义短信内容吗?** A:需要在阿里云控制台申请新的短信模板,审核通过后修改 `template_code` 配置。 --- ## 🎉 快速测试检查清单 - [ ] 安装Python依赖 - [ ] 配置 `sms_config.json` - [ ] 运行 `test_validation_sms.bat` - [ ] 收到测试短信 - [ ] 执行数据验证 - [ ] 生成验证报告 - [ ] 配置定时任务 --- ## 📅 版本历史 ### v1.0.0 (2025-01-04) - ✨ 初始版本发布 - ✅ 数据验证功能 - ✅ 阿里云短信告警 - ✅ 定时任务支持 - ✅ 多数据源支持(JSON/CSV/数据库) - ✅ 详细验证报告 - ✅ 配置文件支持 --- **开发团队:** 北京乐航时代科技 **最后更新:** 2025-01-04