编辑 | blame | 历史 | 原始文档

旧系统车辆同步 - 快速开始

一、快速部署(5分钟)

1. 执行数据库脚本

-- 文件: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. 重启应用

# Windows
.\ry.bat

# Linux
./ry.sh

3. 验证部署

检查1:访问定时任务管理
1. 登录后台:http://localhost/login
2. 进入「系统监控」→「定时任务」
3. 找到「旧系统车辆同步」任务

检查2:立即执行测试
1. 点击「旧系统车辆同步」的「执行一次」按钮
2. 点击「日志」查看执行结果
3. 确认无错误信息

二、功能验证

测试1:查看同步结果

-- 查询已同步的车辆
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:验证部门关联

-- 查询车辆与部门的关联情况
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. 确保部门编码已配置

-- 查询部门的dispatch_order_class配置
SELECT dept_id, dept_name, dispatch_order_class
FROM sys_dept
WHERE dispatch_order_class IS NOT NULL;

如果未配置,需要先配置部门编码:

-- 示例:配置部门编码
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 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

-- 统计同步车辆数量
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;

七、调整定时任务

修改执行时间

-- 改为每天早上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