# 旧系统车辆同步 - 快速开始 ## 一、快速部署(5分钟) ### 1. 执行数据库脚本 ```sql -- 文件:sql/legacy_vehicle_sync.sql -- 执行以下SQL语句 -- 添加car_id字段 ALTER TABLE tb_vehicle_info ADD COLUMN car_id INT NULL COMMENT '旧系统车辆ID(SQL Server CarID)' AFTER vehicle_id; ALTER TABLE tb_vehicle_info ADD INDEX idx_car_id (car_id); -- 注册定时任务 INSERT INTO sys_job ( job_name, job_group, invoke_target, cron_expression, misfire_policy, concurrent, status, create_by, create_time, remark ) VALUES ( '旧系统车辆同步', 'DEFAULT', 'legacyVehicleSyncTask.syncVehicles()', '0 0 2 * * ?', '3', '1', '0', 'admin', sysdate(), '从SQL Server的CarData表同步车辆数据到MySQL' ); ``` ### 2. 重启应用 ```bash # Windows .\ry.bat # Linux ./ry.sh ``` ### 3. 验证部署 **检查1:访问定时任务管理** 1. 登录后台:http://localhost/login 2. 进入「系统监控」→「定时任务」 3. 找到「旧系统车辆同步」任务 **检查2:立即执行测试** 1. 点击「旧系统车辆同步」的「执行一次」按钮 2. 点击「日志」查看执行结果 3. 确认无错误信息 ## 二、功能验证 ### 测试1:查看同步结果 ```sql -- 查询已同步的车辆 SELECT vehicle_id, car_id, vehicle_no, dept_id, platform_code, remark FROM tb_vehicle_info WHERE platform_code = 'LEGACY' ORDER BY create_time DESC LIMIT 10; ``` ### 测试2:验证部门关联 ```sql -- 查询车辆与部门的关联情况 SELECT v.vehicle_no, v.car_id, d.dept_name, d.dispatch_order_class FROM tb_vehicle_info v LEFT JOIN sys_dept d ON v.dept_id = d.dept_id WHERE v.platform_code = 'LEGACY' ORDER BY v.create_time DESC; ``` ### 测试3:手动触发同步 **方式1:通过定时任务** 1. 系统监控 → 定时任务 2. 找到「旧系统车辆同步」 3. 点击「执行一次」 **方式2:通过API** ```bash curl -X POST http://localhost:8080/system/vehicle/sync/legacy \ -H "Authorization: Bearer YOUR_TOKEN" ``` ## 三、数据准备(首次同步前) ### 1. 确保部门编码已配置 ```sql -- 查询部门的dispatch_order_class配置 SELECT dept_id, dept_name, dispatch_order_class FROM sys_dept WHERE dispatch_order_class IS NOT NULL; ``` **如果未配置,需要先配置部门编码:** ```sql -- 示例:配置部门编码 UPDATE sys_dept SET dispatch_order_class = 'HB' WHERE dept_name = '转运队'; UPDATE sys_dept SET dispatch_order_class = 'TI' WHERE dept_name = '调度中心'; UPDATE sys_dept SET dispatch_order_class = 'ZB' WHERE dept_name = '总部调度'; ``` ### 2. 检查SQL Server数据 ```sql -- 在SQL Server中检查车辆数据 SELECT TOP 10 CarId, CarLicense, CarOrdClass, CarState FROM CarData WHERE CarState = 1 ORDER BY CarId; ``` ## 四、常见问题 ### Q1: 同步后车辆的dept_id为NULL? **原因**:CarOrdClass无法匹配到sys_dept的dispatch_order_class **解决**: 1. 检查CarOrdClass的值 2. 在sys_dept中配置对应的dispatch_order_class 3. 重新执行同步 ### Q2: 车辆重复同步? **说明**:系统支持重复同步,已存在的车辆会被更新而不是重复插入 **验证**: ```sql -- 检查是否有重复车牌 SELECT vehicle_no, COUNT(*) as count FROM tb_vehicle_info GROUP BY vehicle_no HAVING COUNT(*) > 1; ``` ### Q3: 如何查看同步日志? **方式1:定时任务日志** - 系统监控 → 定时任务 → 旧系统车辆同步 → 日志 **方式2:系统日志文件** ```bash tail -f logs/sys-info.log | grep "车辆同步" ``` ### Q4: 定时任务不执行? **检查**: 1. 任务状态是否为「正常」 2. cron表达式是否正确 3. 系统时间是否正确 ## 五、核心流程说明 ### 同步逻辑 ``` 1. 从SQL Server查询 CarState=1 的车辆 ↓ 2. 提取车牌号(去除括号内容) ↓ 3. 在MySQL中查找匹配的车辆(支持模糊匹配) ↓ 4. 解析CarOrdClass,匹配dispatch_order_class ↓ 5. 更新或新增车辆记录(保存car_id和dept_id) ``` ### 车牌匹配规则 | SQL Server | MySQL | 匹配结果 | |-----------|-------|---------| | 浙A12345 | 浙A12345 | ✓ 精确匹配 | | 浙A12345(奔驰) | 浙A12345 | ✓ 提取后匹配 | | 浙A12345 | 浙A12345(奔驰GLE) | ✓ 模糊匹配 | ### 部门匹配规则 | CarOrdClass | 解析结果 | 匹配逻辑 | |------------|---------|----------| | HB | ['HB'] | 查找dispatch_order_class='HB' | | HB.TI | ['HB', 'TI'] | 查找第一个匹配的(HB或TI) | | ZB,TI | ['ZB', 'TI'] | 查找第一个匹配的(ZB或TI) | ## 六、监控与维护 ### 日常检查项 **每日检查**: - 查看定时任务执行日志 - 检查是否有失败记录 **每周检查**: - 统计同步的车辆数量 - 检查未关联部门的车辆 ### 统计SQL ```sql -- 统计同步车辆数量 SELECT platform_code, COUNT(*) as total, COUNT(dept_id) as with_dept, COUNT(*) - COUNT(dept_id) as without_dept FROM tb_vehicle_info GROUP BY platform_code; -- 查询未关联部门的车辆 SELECT vehicle_no, car_id, remark FROM tb_vehicle_info WHERE platform_code = 'LEGACY' AND dept_id IS NULL; ``` ## 七、调整定时任务 ### 修改执行时间 ```sql -- 改为每天早上6点执行 UPDATE sys_job SET cron_expression = '0 0 6 * * ?' WHERE job_name = '旧系统车辆同步'; -- 改为每小时执行一次 UPDATE sys_job SET cron_expression = '0 0 * * * ?' WHERE job_name = '旧系统车辆同步'; -- 改为每30分钟执行一次 UPDATE sys_job SET cron_expression = '0 0/30 * * * ?' WHERE job_name = '旧系统车辆同步'; ``` ### 暂停/启动任务 **通过管理界面**: - 系统监控 → 定时任务 → 旧系统车辆同步 → 状态(开启/关闭) **通过SQL**: ```sql -- 暂停任务 UPDATE sys_job SET status = '1' WHERE job_name = '旧系统车辆同步'; -- 启动任务 UPDATE sys_job SET status = '0' WHERE job_name = '旧系统车辆同步'; ``` ## 八、相关文档 - 详细说明:`旧系统车辆同步功能说明.md` - SQL脚本:`sql/legacy_vehicle_sync.sql` ## 九、技术支持 如有问题,请查看: 1. 系统日志:`logs/sys-info.log` 2. 定时任务日志:系统监控 → 定时任务 → 日志 3. 详细文档:`prd/旧系统车辆同步功能说明.md`