# 钉钉消息推送系统 ## 项目概述 这是一个基于 Spring Boot 的钉钉消息推送系统,名为 `dingtalk`。该系统通过钉钉开放平台 API 实现了定时消息推送、用户管理、以及设备数据提醒等功能。 ## 核心技术栈 - **框架**: Spring Boot 2.6.13 - **语言**: Java 1.8 - **数据库**: Oracle,使用 Druid 连接池 - **持久层**: MyBatis-Plus - **钉钉集成**: 钉钉开放平台 SDK - **工具库**: Lombok, Gson, OkHttp3, Fastjson, Hutool, Apache POI - **包管理**: Maven ## 项目架构 ``` src/ ├── main/ │ ├── java/com/gs/dingtalk/ │ │ ├── DingtalkApplication.java # Spring Boot 启动类 │ │ ├── config/ │ │ │ ├── DataAcquisitionConfiguration.java # 钉钉应用配置(AppKey、AppSecret等) │ │ │ ├── ResultMessage.java # 统一响应消息格式 │ │ │ └── URLEncoder.java # URL编码工具类 │ │ ├── controller/ │ │ │ └── KMController.java # 消息发送控制层 │ │ ├── dto/ │ │ │ ├── ApiResponseCode.java # API响应码 │ │ │ ├── DingTalkMessage.java # 钉钉消息 DTO │ │ │ ├── DingTalkResponse.java # 钉钉响应 DTO │ │ │ └── Result.java # 统一返回结果 │ │ ├── entity/ │ │ │ ├── MesQaDingtalk.java # 质量检测钉钉消息实体 │ │ │ ├── SendDingtalk.java # 钉钉用户实体 │ │ │ └── SendMessage.java # 消息发送实体 │ │ ├── mapper/ │ │ │ ├── MesQaDingtalkMapper.java # 质量检测钉钉消息数据访问层 │ │ │ ├── SendDingtalkMapper.java # 钉钉用户数据访问层 │ │ │ └── SendMessageMapper.java # 消息发送数据访问层 │ │ ├── service/ │ │ │ ├── MesQaDingtalkService.java # 质量检测钉钉服务接口 │ │ │ ├── SendDingtalkService.java # 钉钉服务接口 │ │ │ ├── SendMessageService.java # 消息服务接口 │ │ │ ├── SimpleExample.java # 钉钉消息发送实现 │ │ │ └── impl/ │ │ │ ├── MesQaDingtalkServiceImpl.java # 质量检测钉钉服务实现 │ │ │ ├── SendDingtalkServiceImpl.java # 钉钉服务实现 │ │ │ └── SendMessageServiceImpl.java # 消息服务实现 │ │ └── task/ │ │ └── ScheduledTasks.java # 定时任务 │ └── resources/ │ ├── application.yml # 应用配置文件 │ └── mapper/ # MyBatis XML 映射文件 └── test/ └── java/com/gs/dingtalk/DeviceReceivingApplicationTests.java # 测试类 ``` ## 数据库配置 - **数据库**: Oracle - **URL**: jdbc:oracle:thin:@172.16.0.219:1521/orcl - **用户名**: yc_dev - **密码**: ycdev - **连接池**: Druid,初始连接数5,最大连接数20 ## 钉钉配置 在 `config/DataAcquisitionConfiguration.java` 中配置: - **AppKey**: 钉钉应用的 AppKey - **AppSecret**: 钉钉应用的 AppSecret - **CorpId**: 钉钉企业 CorpId - **机器人Token**: 钉钉群聊机器人 Token - **机器人Secret**: 钉钉群聊机器人 Secret ## 主要功能模块 ### 1. 用户管理 - `getDingTalkUserId()`: 通过手机号获取钉钉用户ID并保存到数据库 - 使用钉钉 `OapiV2UserGetbymobileResponse` API 实现 ### 2. 消息推送 - `chatSendMessage()`: 向钉钉群聊机器人发送消息 - `sendDingTalkFiveMinute()`, `sendDingTalkFifteenMinute()`, `sendDingTalkthirtyMinute()`: 定时向特定用户发送消息 ### 3. 定时任务 - `ScheduledTasks.java`: 定义了三个定时任务 - 每2分钟执行一次5分钟提醒检查 - 每3分钟执行一次15分钟提醒检查 - 每4分钟执行一次30分钟提醒检查 ### 4. 质量检测 - `MesQaDingtalkServiceImpl`: 处理质量检测相关的钉钉消息推送 ### 5. 权限控制 - 通过 `SendDingtalk` 实体中的 `purview` 字段控制用户消息接收权限 - 根据 `procNo`(工序编号)匹配用户权限 ## 构建与运行 ### 构建 ```bash mvn clean package ``` ### 运行 ```bash java -jar dingtalk.jar ``` 或在 IDE 中运行 `DingtalkApplication.java` 的 `main` 方法 ### 端口 - 服务器端口: 9096 ## 开发约定 - 使用 Lombok 注解简化代码 - 使用 MyBatis-Plus 进行数据库操作 - 使用统一的响应格式 `ResultMessage` - 配置文件使用 YAML 格式 - 定时任务使用 Spring 的 `@Scheduled` 注解