# 企业微信表格数据自动抓取与统计系统 ## 📋 系统概述 本系统实现了从企业微信自动抓取指定表格数据,进行数据解析、去重、统计分析的完整流程。 ## 🔄 完整流程图 ``` ┌─────────────────────────────────────────────────────────────────┐ │ 企业微信表格数据处理流程 │ └─────────────────────────────────────────────────────────────────┘ 1. 【获取访问令牌】 ├─ 使用 corpId + appSecret ├─ 调用企业微信 API 获取 access_token └─ 缓存 token(有效期 7200 秒) 2. 【抓取表格数据】 ├─ 使用 access_token + docId + sheetId + range ├─ 调用企业微信文档 API └─ 获取表格原始数据(JSON 格式) 3. 【数据转换】 ├─ 解析 JSON 数据结构 ├─ 映射到 CustomerData 实体 └─ 处理日期、文本等字段 4. 【数据去重】 ├─ 计算数据哈希值(MD5) ├─ 基于日期的智能去重 │ ├─ 当天数据:检查缓存,跳过已处理 │ └─ 非当天数据:直接处理 └─ 记录处理状态到数据库 5. 【数据统计】 ├─ 按标签组统计数量 ├─ 按日期统计趋势 └─ 生成统计报表 6. 【数据存储】 ├─ 保存客户数据到数据库 ├─ 保存统计结果 └─ 清理过期缓存 7. 【定时任务】 └─ 每小时自动执行一次(可配置) ``` ## 🎯 核心功能模块 ### 1. 企业微信 API 集成 - **文件**: `WecomApiUtils.java` - **功能**: - 获取并缓存 access_token - 调用企业微信文档 API 获取表格数据 - 自动处理 token 过期和刷新 ### 2. 数据抓取服务 - **文件**: `WecomTableService.java` - **功能**: - 从企业微信抓取表格数据 - 数据格式转换(JSON → CustomerData) - 智能去重处理 - 批量保存数据 ### 3. 数据去重服务 - **文件**: `ProcessedDataService.java` - **功能**: - 基于日期的去重策略 - 数据哈希计算 - 缓存管理(内存 + 数据库) - 自动清理过期数据 ### 4. 数据统计服务 - **文件**: `CustomerDataService.java` - **功能**: - Excel 文件解析 - 标签统计分析 - 统计结果持久化 ### 5. 定时任务 - **文件**: `WecomTableSyncTask.java` - **功能**: - 定时自动抓取(默认每小时) - 异常处理和日志记录 ### 6. REST API 接口 - **文件**: `WecomTableController.java` - **接口**: - `POST /wecom/table/sync` - 手动触发同步 - `GET /wecom/table/status` - 查询服务状态 ## 📦 数据实体 ### CustomerData(客户数据) 包含 31 个字段: - 基本信息:客户名称、描述、手机、邮箱、企业、地址、职务、电话 - 添加信息:添加人、添加人账号、添加人部门、添加时间 - 来源信息:来源 - 标签信息:18 个标签组(投放、公司孵化、商务、成交日期等) ## 🔧 必需的外部参数 ### 1. 企业微信配置参数(必填) 在 `application.yml` 中配置: ```yaml wecom: # 企业 ID(必填) corp-id: "your_corp_id" # 应用密钥(必填) app-secret: "your_app_secret" # 文档 ID(必填) doc-id: "your_doc_id" # 工作表 ID(必填) sheet-id: "your_sheet_id" # 查询范围(必填,A1 表示法) range: "A1:AE1000" # 抓取间隔(可选,默认 60 分钟) fetch-interval: 60 ``` ### 2. 参数获取方法 #### 2.1 获取 corp-id(企业 ID) 1. 登录企业微信管理后台:https://work.weixin.qq.com/ 2. 进入「我的企业」→「企业信息」 3. 复制「企业 ID」 #### 2.2 获取 app-secret(应用密钥) 1. 登录企业微信管理后台 2. 进入「应用管理」→ 选择或创建一个应用 3. 在应用详情页面找到「Secret」 4. 复制应用的 Secret **注意**: 需要给应用授予「企业微信文档」的权限 #### 2.3 获取 doc-id(文档 ID) 1. 在企业微信中打开目标表格文档 2. 查看浏览器地址栏的 URL 3. URL 格式:`https://doc.weixin.qq.com/sheet/xxxxx` 4. `xxxxx` 部分就是 doc-id #### 2.4 获取 sheet-id(工作表 ID) 方法一:通过 API 查询 - 调用企业微信文档 API 获取文档的所有工作表列表 - 从返回结果中找到目标工作表的 ID 方法二:通过开发者工具 - 打开企业微信文档 - 按 F12 打开开发者工具 - 切换工作表时查看网络请求 - 找到包含 sheet_id 的请求参数 #### 2.5 设置 range(查询范围) - 使用 A1 表示法,例如: - `A1:Z100` - 查询 A 到 Z 列,前 100 行 - `A1:AE1000` - 查询 A 到 AE 列,前 1000 行 - `A:Z` - 查询 A 到 Z 列的所有行 ### 3. 数据库配置(必填) 需要在主项目的 `application.yml` 中配置数据库连接: ```yaml spring: datasource: url: jdbc:mysql://localhost:3306/your_database?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8 username: your_username password: your_password ``` ### 4. 数据库表结构(需要创建) 需要创建以下表: - `customer_data` - 存储客户数据 - `processed_data_record` - 存储已处理数据记录(用于去重) - `customer_tag_statistics` - 存储标签统计数据 ## 🚀 使用方式 ### 方式一:自动定时任务 系统启动后,定时任务会自动执行(默认每小时整点) ### 方式二:手动触发 调用 REST API: ```bash curl -X POST http://localhost:8080/wecom/table/sync ``` ### 方式三:查看服务状态 ```bash curl -X GET http://localhost:8080/wecom/table/status ``` ## 📊 数据处理逻辑 ### 去重策略 1. **当天数据去重**: - 使用「客户名称 + 添加人账号」作为唯一键 - 计算数据的 MD5 哈希值 - 如果键和哈希值都相同,则跳过 2. **历史数据处理**: - 非当天的数据直接处理,不进行去重检查 - 适用于补录历史数据的场景 ### 缓存管理 - 内存缓存:存储当天已处理的数据 - 数据库持久化:记录所有处理历史 - 自动清理:每次处理后清理非当天的缓存 ## 📝 日志说明 系统会记录详细的日志信息: - 数据抓取日志:记录抓取的数据量 - 去重日志:记录新数据、跳过数据、无效数据的数量 - 错误日志:记录所有异常信息 ## ⚠️ 注意事项 1. **权限要求**: - 企业微信应用需要有「企业微信文档」的 API 权限 - 应用需要能访问目标文档 2. **API 限制**: - 企业微信 API 有调用频率限制 - access_token 有效期为 7200 秒(2 小时) 3. **数据量限制**: - 单次查询的数据量不宜过大 - 建议 range 设置在 1000 行以内 4. **表格格式要求**: - 第一行必须是表头 - 列的顺序必须与 CustomerData 实体的字段映射一致 ## 🔍 故障排查 ### 问题 1:获取 access_token 失败 - 检查 corp-id 和 app-secret 是否正确 - 检查应用是否有相应权限 - 检查网络连接是否正常 ### 问题 2:获取表格数据失败 - 检查 doc-id 和 sheet-id 是否正确 - 检查应用是否有文档访问权限 - 检查 range 范围是否合法 ### 问题 3:数据解析失败 - 检查表格列的顺序是否与代码映射一致 - 检查日期格式是否为 yyyy-MM-dd - 查看详细的错误日志 ## 📚 相关文档 - [企业微信 API 文档](https://developer.work.weixin.qq.com/document/) - [企业微信文档 API](https://developer.work.weixin.qq.com/document/path/97459) - [EasyExcel 文档](https://easyexcel.opensource.alibaba.com/) ## 🎉 总结 本系统提供了一个完整的企业微信表格数据自动化处理方案,包括: - ✅ 自动抓取企业微信表格数据 - ✅ 智能去重(基于日期和数据哈希) - ✅ 数据统计分析 - ✅ 定时任务自动执行 - ✅ REST API 手动触发 - ✅ 完整的日志记录 只需配置好企业微信的相关参数,系统即可自动运行!