编辑 | blame | 历史 | 原始文档

钉钉消息推送系统

项目概述

这是一个基于 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(工序编号)匹配用户权限

构建与运行

构建

mvn clean package

运行

java -jar dingtalk.jar

或在 IDE 中运行 DingtalkApplication.javamain 方法

端口

  • 服务器端口: 9096

开发约定

  • 使用 Lombok 注解简化代码
  • 使用 MyBatis-Plus 进行数据库操作
  • 使用统一的响应格式 ResultMessage
  • 配置文件使用 YAML 格式
  • 定时任务使用 Spring 的 @Scheduled 注解
README 5 KB