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