173 lines
5.3 KiB
Markdown
173 lines
5.3 KiB
Markdown
# 数据同步微服务
|
||
|
||
## 项目简介
|
||
|
||
数据同步微服务用于从第三方接口同步人员、项目和报告数据到MySQL数据库。支持定时任务自动同步和手动触发同步。
|
||
|
||
## 功能特性
|
||
|
||
1. **数据同步**
|
||
- 从第三方接口同步人员数据
|
||
- 从第三方接口同步项目(工程)数据
|
||
- 从第三方接口同步报告数据
|
||
- 支持字段大小写兼容
|
||
|
||
2. **同步方式**
|
||
- 定时任务:每晚12点自动执行全量同步
|
||
- 手动触发:通过REST API手动触发同步
|
||
|
||
3. **同步策略**
|
||
- 先删除表中所有现有数据
|
||
- 再全量同步接口返回的数据
|
||
- 使用接口返回的ID作为主键
|
||
|
||
## 技术栈
|
||
|
||
- Java 21
|
||
- Spring Boot 3.1.5
|
||
- Spring Cloud 2022.0.4
|
||
- MyBatis Plus 3.5.3.1
|
||
- MySQL 8.2.0
|
||
- Nacos(服务注册与发现)
|
||
|
||
## 项目结构
|
||
|
||
```
|
||
src/main/java/com/zhonghe/datasync/
|
||
├── common/ # 公共类
|
||
│ ├── exception/ # 异常处理
|
||
│ ├── Result.java # 统一响应结果
|
||
│ └── ResultCode.java # 响应码枚举
|
||
├── config/ # 配置类
|
||
├── controller/ # 控制器
|
||
├── dto/ # 数据传输对象
|
||
│ ├── request/ # 请求DTO
|
||
│ └── response/ # 响应DTO
|
||
├── entity/ # 实体类
|
||
├── mapper/ # MyBatis映射器
|
||
├── scheduled/ # 定时任务
|
||
├── service/ # 业务服务
|
||
└── util/ # 工具类
|
||
```
|
||
|
||
## 数据库表结构
|
||
|
||
### employee(人员表)
|
||
- id: 主键(VARCHAR)
|
||
- name: 人员姓名
|
||
- phone_number: 人员手机号
|
||
- password: 密码(明文存储)
|
||
- created_at: 创建时间
|
||
- updated_at: 更新时间
|
||
|
||
### project(项目表)
|
||
- id: 主键(BIGINT)
|
||
- project_name: 工程名称
|
||
- created_at: 创建时间
|
||
- updated_at: 更新时间
|
||
|
||
### report(报告表)
|
||
- id: 主键(BIGINT)
|
||
- order_number: 委托编号
|
||
- sample_code: 样品编号
|
||
- bg_sample_code: 报告编号
|
||
- project_name: 工程名称
|
||
- project_id: 工程主键
|
||
- experiment_name: 试验人员
|
||
- real_experiment_date: 试验时间
|
||
- created_at: 创建时间
|
||
- updated_at: 更新时间
|
||
|
||
## 配置说明
|
||
|
||
### 环境变量
|
||
|
||
| 变量名 | 说明 | 默认值 |
|
||
|--------|------|--------|
|
||
| MYSQL_HOST | MySQL主机地址 | localhost |
|
||
| MYSQL_PORT | MySQL端口 | 3306 |
|
||
| MYSQL_DATABASE | MySQL数据库名 | datasync |
|
||
| MYSQL_USERNAME | MySQL用户名 | root |
|
||
| MYSQL_PASSWORD | MySQL密码 | root |
|
||
| NACOS_SERVER | Nacos服务器地址 | localhost:8848 |
|
||
| NACOS_USERNAME | Nacos用户名 | nacos |
|
||
| NACOS_PASSWORD | Nacos密码 | nacos |
|
||
| THIRD_PARTY_AUTH_URL | 第三方鉴权接口地址 | http://limspro.91jiance.net/api/LoginAPI/GetAdminUserCode |
|
||
| THIRD_PARTY_EMPLOYEE_URL | 第三方人员接口地址 | http://121.40.18.211:20016/api/EmployeeAPI/GetZHEmployeeList |
|
||
| THIRD_PARTY_PROJECT_URL | 第三方项目接口地址 | http://121.40.18.211:20030/API/GetZHProjectList |
|
||
| THIRD_PARTY_REPORT_URL | 第三方报告接口地址 | http://121.40.18.211:20030/API/GetZHSampleAllList |
|
||
| THIRD_PARTY_USER_NAME | 第三方接口用户名 | 13120251031 |
|
||
| THIRD_PARTY_PASS_WORD | 第三方接口密码 | whfst@1901 |
|
||
|
||
## API接口
|
||
|
||
### 1. 同步所有数据
|
||
- **URL**: `/api/v1/sync/all`
|
||
- **方法**: POST
|
||
- **说明**: 同步人员、项目和报告数据
|
||
|
||
### 2. 同步人员数据
|
||
- **URL**: `/api/v1/sync/employees`
|
||
- **方法**: POST
|
||
- **说明**: 仅同步人员数据
|
||
|
||
### 3. 同步项目数据
|
||
- **URL**: `/api/v1/sync/projects`
|
||
- **方法**: POST
|
||
- **说明**: 仅同步项目数据
|
||
|
||
### 4. 同步报告数据
|
||
- **URL**: `/api/v1/sync/reports`
|
||
- **方法**: POST
|
||
- **说明**: 仅同步报告数据
|
||
|
||
## 定时任务
|
||
|
||
定时任务配置在 `DataSyncScheduledTask` 类中,使用 cron 表达式:
|
||
- **执行时间**: 每晚12点(0 0 0 * * ?)
|
||
- **执行内容**: 同步所有数据(人员、项目、报告)
|
||
|
||
## 部署说明
|
||
|
||
### 1. 数据库初始化
|
||
|
||
执行 `src/main/resources/db/schema.sql` 创建数据库表。
|
||
|
||
### 2. 构建项目
|
||
|
||
```bash
|
||
mvn clean package
|
||
```
|
||
|
||
### 3. Docker部署
|
||
|
||
```bash
|
||
docker build -t data-sync-service:1.0.0 .
|
||
docker run -d -p 8080:8080 \
|
||
-e MYSQL_HOST=your-mysql-host \
|
||
-e MYSQL_USERNAME=your-username \
|
||
-e MYSQL_PASSWORD=your-password \
|
||
data-sync-service:1.0.0
|
||
```
|
||
|
||
## 注意事项
|
||
|
||
1. **字段大小写兼容**: 使用 `@JsonProperty` 注解处理接口返回字段的大小写差异
|
||
2. **ID使用**: 使用接口返回的ID作为数据库主键,不自动生成
|
||
3. **同步策略**:
|
||
- 人员数据:增量同步(不删除现有数据),新增用户密码为手机号后六位,老用户密码保持不变
|
||
- 项目和报告数据:全量同步(先删除后插入)
|
||
4. **密码管理**:
|
||
- 新增用户:密码自动设置为手机号后六位
|
||
- 更新用户:密码字段不会被修改,保持原有密码
|
||
5. **事务管理**: 同步操作使用事务,失败时会回滚
|
||
6. **日志记录**: 所有同步操作都会记录详细日志
|
||
|
||
## 开发规范
|
||
|
||
本项目遵循《微服务开发规范文档.md》中的开发规范,包括:
|
||
- 代码风格规范
|
||
- 命名规范
|
||
- 异常处理规范
|
||
- 日志规范
|