# iFlow 项目上下文文件 (IFLOW.md) ## 项目概述 这是一个基于 Spring Boot 的钉钉消息推送系统,名为 `dingtalk`。该系统通过钉钉开放平台 API 实现了定时消息推送、用户管理、以及设备数据提醒等功能。主要功能包括: 1. 通过手机号获取钉钉用户ID 2. 定时向用户推送消息(5分钟和30分钟间隔) 3. 向钉钉群聊机器人发送消息 4. 与数据库交互,管理用户权限和消息发送记录 项目使用了 MyBatis-Plus 进行数据库操作,Oracle 作为数据库,并集成了钉钉SDK来实现与钉钉平台的通信。 ## 核心技术栈 - **框架**: 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/ │ │ │ ├── SendDingtalk.java # 钉钉用户实体 │ │ │ └── SendMessage.java # 消息发送实体 │ │ ├── mapper/ │ │ │ ├── SendDingtalkMapper.java # 钉钉用户数据访问层 │ │ │ └── SendMessageMapper.java # 消息发送数据访问层 │ │ ├── service/ │ │ │ ├── SendDingtalkService.java # 钉钉服务接口 │ │ │ ├── SendMessageService.java # 消息服务接口 │ │ │ ├── SimpleExample.java # 钉钉消息发送实现 │ │ │ └── impl/ │ │ │ ├── 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:@192.168.0.100:1521/orcl - **用户名**: yc_dev - **密码**: ycdev - **连接池**: Druid,初始连接数5,最大连接数20 ## 钉钉配置 - **AppKey**: dingyfqkfjecy4cjfyxa - **AppSecret**: nCwmyBw8K-EqAvkuhrhhqFonbLp455awtMa4D4Q-VRaY8U2EDEVsnYSYYfPvjiAX - **CorpId**: ding1dd72cd1d6adf70aa1320dcb25e91351 - **机器人Token**: c2849e46cb0d91b0721c377742938b8ac5ef57e3c9eeab918e2cd5dd9c3aad2a - **机器人Secret**: SEC382027a5c81ea5152b71b687fb2c1ebf26acbde035355da6ab2fb37306454134 ## 主要功能模块 ### 1. 用户管理 - `getDingTalkUserId()`: 通过手机号获取钉钉用户ID并保存到数据库 - 使用钉钉 `OapiV2UserGetbymobileResponse` API 实现 ### 2. 消息推送 - `chatSendMessage()`: 向钉钉群聊机器人发送消息 - `sendDingTalkFiveMinute()`, `sendDingTalkthirtyMinute()`: 定时向特定用户发送消息 - 使用钉钉机器人和用户消息推送 API 实现 ### 3. 定时任务 - `ScheduledTasks.java`: 定义了两个定时任务 - 每2分钟执行一次5分钟提醒检查 - 每3分钟执行一次30分钟提醒检查 ### 4. 权限控制 - 通过 `SendDingtalk` 实体中的 `purview` 字段控制用户消息接收权限 - 根据 `procNo`(工序编号)匹配用户权限 ## 构建与运行 ### 构建 ```bash mvn clean package ``` ### 运行 ```bash java -jar dingtalk.jar ``` 或在 IDE 中运行 `DingtalkApplication.java` 的 `main` 方法 ### 端口 - 服务器端口: 9096 ## 开发约定 - 使用 Lombok 注解简化代码 - 使用 MyBatis-Plus 进行数据库操作 - 使用统一的响应格式 `ResultMessage` - 配置文件使用 YAML 格式 - 定时任务使用 Spring 的 `@Scheduled` 注解