Files
label_backend/README.md
2026-04-14 14:59:46 +08:00

173 lines
5.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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