Files
label_backend/README.md

173 lines
5.3 KiB
Markdown
Raw Normal View History

2026-04-14 14:59:46 +08:00
# 数据同步微服务
## 项目简介
数据同步微服务用于从第三方接口同步人员、项目和报告数据到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》中的开发规范包括
- 代码风格规范
- 命名规范
- 异常处理规范
- 日志规范