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

5.3 KiB
Raw Blame History

数据同步微服务

项目简介

数据同步微服务用于从第三方接口同步人员、项目和报告数据到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. 构建项目

mvn clean package

3. Docker部署

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》中的开发规范包括

  • 代码风格规范
  • 命名规范
  • 异常处理规范
  • 日志规范