啊鑫
5 天以前 1f963e2344833ff02087c05411b112147492bd00
README.md
@@ -19,6 +19,7 @@
4. 退货管理
5. 供应商管理
6. ERP与SRM系统数据比对
7. 钉钉消息通知
## 核心数据实体
@@ -40,6 +41,98 @@
- 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) 文件。
## 数据库表结构
@@ -330,4 +423,113 @@
异步线程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`表中必须有对应的记录