| | |
| | | 4. 退货管理 |
| | | 5. 供应商管理 |
| | | 6. ERP与SRM系统数据比对 |
| | | 7. 钉钉消息通知 |
| | | |
| | | ## 核心数据实体 |
| | | |
| | |
| | | - API调用频率不低于2小时 |
| | | - 请求时间范围不大于24小时 |
| | | - 数据类型转换需注意:ERP系统(Long)与SRM系统(Integer) |
| | | |
| | | ## REST API接口 |
| | | |
| | | ### 钉钉消息发送接口 |
| | | |
| | | #### 接口信息 |
| | | |
| | | - **URL**: `POST /api/dingtalk/sendMessage` |
| | | - **功能**: 发送钉钉消息通知 |
| | | - **描述**: 根据检验单号发送不合格检验单的钉钉通知消息 |
| | | |
| | | #### 请求参数 |
| | | |
| | | ```json |
| | | { |
| | | "releaseNo": "检验单号" |
| | | } |
| | | ``` |
| | | |
| | | **参数说明**: |
| | | |
| | | - `releaseNo` (String, 必填): 检验单号,用于查询对应的钉钉消息内容 |
| | | |
| | | #### 响应结果 |
| | | |
| | | ```json |
| | | { |
| | | "code": 200, |
| | | "message": null, |
| | | "successful": 0, |
| | | "data": "接收成功" |
| | | } |
| | | ``` |
| | | |
| | | **响应字段说明**: |
| | | |
| | | - `code` (Integer): 响应状态码,200表示成功,500表示失败 |
| | | - `message` (String): 错误信息,成功时为null |
| | | - `successful` (Integer): 成功标识,0表示成功,1表示失败 |
| | | - `data` (String): 响应数据,成功时为"接收成功",失败时为"接收失败" |
| | | |
| | | #### 使用示例 |
| | | |
| | | **请求示例**: |
| | | |
| | | ```bash |
| | | curl -X POST http://localhost:9095/api/dingtalk/sendMessage \ |
| | | -H "Content-Type: application/json" \ |
| | | -d '{"releaseNo": "IQC202501270001"}' |
| | | ``` |
| | | |
| | | **成功响应示例**: |
| | | |
| | | ```json |
| | | { |
| | | "code": 200, |
| | | "message": null, |
| | | "successful": 0, |
| | | "data": "接收成功" |
| | | } |
| | | ``` |
| | | |
| | | **失败响应示例**: |
| | | |
| | | ```json |
| | | { |
| | | "code": 500, |
| | | "message": "检验单号不能为空", |
| | | "successful": 1, |
| | | "data": "接收失败" |
| | | } |
| | | ``` |
| | | |
| | | #### 错误处理 |
| | | |
| | | 接口会处理以下错误情况: |
| | | |
| | | 1. **参数为空**: 检验单号为空或null时返回错误信息 |
| | | 2. **数据不存在**: 检验单号对应的钉钉消息内容不存在时返回失败 |
| | | 3. **发送失败**: 钉钉API调用失败时返回失败信息 |
| | | 4. **系统异常**: 其他系统异常时返回异常信息 |
| | | |
| | | #### 注意事项 |
| | | |
| | | 1. 确保检验单号在`DINGTALK_MSG`表中有对应的记录 |
| | | 2. 确保钉钉应用配置正确且有发送权限 |
| | | 3. 接口调用频率建议不超过每分钟1次 |
| | | 4. 建议在生产环境中添加接口访问权限控制 |
| | | |
| | | #### 详细文档 |
| | | |
| | | 更多详细的API使用说明、错误处理、最佳实践等内容,请参考 [API_DOCUMENTATION.md](./API_DOCUMENTATION.md) 文件。 |
| | | |
| | | ## 数据库表结构 |
| | | |
| | |
| | | 异步线程2: 批次5处理完成 |
| | | ``` |
| | | |
| | | 这种方式确保了主线程不会被长时间阻塞,同时充分利用了系统资源进行并行处理。 |
| | | 这种方式确保了主线程不会被长时间阻塞,同时充分利用了系统资源进行并行处理。 |
| | | |
| | | ## 钉钉消息通知功能 |
| | | |
| | | 系统集成了钉钉消息通知功能,用于在重要事件发生时向指定用户发送通知。主要包括以下几个部分: |
| | | |
| | | ### 功能概述 |
| | | |
| | | 1. **通知场景**: |
| | | - 采购订单数据比对完成后,通知相关人员查看结果 |
| | | - 数据异常时的预警通知 |
| | | - 系统重要操作的确认通知 |
| | | - 不合格检验单审批情况通知 |
| | | |
| | | 2. **通知方式**: |
| | | - 个人工作通知:直接发送给指定用户 |
| | | - 群机器人通知:发送到指定的钉钉群 |
| | | |
| | | ### 数据结构 |
| | | |
| | | 钉钉用户信息存储在 `DINGTALK_INFO` 表中,表结构如下: |
| | | |
| | | | 字段名 | 类型 | 说明 | |
| | | |------------------|---------|--------------------| |
| | | | id | Long | 主键 | |
| | | | sid | Long | 职工ID | |
| | | | phone | String | 电话号码 | |
| | | | dingtalk_id | String | 钉钉用户ID | |
| | | | is_send_dingtalk | Integer | 是否发送钉钉通知(1:是, 0:否) | |
| | | |
| | | 不合格检验单信息存储在 `DINGTALK_MSG` 表中,表结构如下: |
| | | |
| | | | 字段名 | 类型 | 说明 | |
| | | |---------------|--------|-------| |
| | | | release_no | String | 检验单号 | |
| | | | supp_name | String | 供应商名称 | |
| | | | create_date | Date | 来料日期 | |
| | | | project_codes | String | 项目代码 | |
| | | | item_no | String | 料号 | |
| | | | fname | String | 审核人 | |
| | | | fng_handle | String | 处理方式 | |
| | | |
| | | ### 消息发送流程 |
| | | |
| | | 1. **获取通知用户**: |
| | | - 从 `DINGTALK_INFO` 表中筛选 `is_send_dingtalk` 为1的用户 |
| | | - 如果用户的钉钉ID为空,则通过钉钉API根据手机号获取钉钉ID |
| | | - 更新数据库中的钉钉ID |
| | | |
| | | 2. **发送通知**: |
| | | - 汇总所有有效的钉钉用户ID |
| | | - 根据检验单号查询 `DINGTALK_MSG` 表获取消息内容 |
| | | - 调用钉钉开放API发送工作通知 |
| | | |
| | | ### 配置说明 |
| | | |
| | | 钉钉应用配置信息存储在 `DataAcquisitionConfiguration` 中: |
| | | |
| | | ```java |
| | | // 钉钉应用Key |
| | | public static final String TALK_APP_KEY = "your_app_key"; |
| | | // 钉钉应用Secret |
| | | public static final String TALK_APP_SECRET = "your_app_secret"; |
| | | // 钉钉自定义机器人Token |
| | | public static final String CUSTOM_ROBOT_TOKEN = "your_robot_token"; |
| | | ``` |
| | | |
| | | ### 使用方法 |
| | | |
| | | 要发送钉钉通知,可以调用 `DingtalkInfoService` 的 `sendMessage` 方法: |
| | | |
| | | ```java |
| | | |
| | | @Autowired |
| | | private DingtalkInfoService dingtalkInfoService; |
| | | |
| | | // 发送不合格检验单通知 |
| | | boolean result = dingtalkInfoService.sendMessage("检验单号"); |
| | | ``` |
| | | |
| | | ### 定时任务 |
| | | |
| | | 系统配置了定时任务自动发送不合格检验单通知: |
| | | |
| | | ```java |
| | | /** |
| | | * 定时发送不合格检验单钉钉通知 |
| | | * 每小时检查一次是否有新的不合格检验单 |
| | | */ |
| | | @Scheduled(cron = "0 0 */1 * * ?") |
| | | public void sendInspectionNotification() { |
| | | // 任务实现... |
| | | } |
| | | ``` |
| | | |
| | | ### 消息格式 |
| | | |
| | | 不合格检验单通知的格式如下: |
| | | |
| | | ``` |
| | | 供应商[xxx] 来料日期[yyyy-MM-dd] 项目[xxx] 料号[xxx]的不合格检验单被[xxx]审批为[xxx],请查收! |
| | | ``` |
| | | |
| | | ### 注意事项 |
| | | |
| | | 1. 钉钉消息发送频率有限制,请勿过于频繁发送 |
| | | 2. 确保应用有发送工作通知的权限 |
| | | 3. 用户手机号必须与钉钉注册手机号一致 |
| | | 4. 建议将重要通知同时通过多种渠道发送(如邮件、短信等) |
| | | 5. 检验单通知在`DINGTALK_MSG`表中必须有对应的记录 |