-- 文件: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'
);
# Windows
.\ry.bat
# Linux
./ry.sh
检查1:访问定时任务管理
1. 登录后台:http://localhost/login
2. 进入「系统监控」→「定时任务」
3. 找到「旧系统车辆同步」任务
检查2:立即执行测试
1. 点击「旧系统车辆同步」的「执行一次」按钮
2. 点击「日志」查看执行结果
3. 确认无错误信息
-- 查询已同步的车辆
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;
-- 查询车辆与部门的关联情况
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;
方式1:通过定时任务
1. 系统监控 → 定时任务
2. 找到「旧系统车辆同步」
3. 点击「执行一次」
方式2:通过APIbash curl -X POST http://localhost:8080/system/vehicle/sync/legacy \ -H "Authorization: Bearer YOUR_TOKEN"
-- 查询部门的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 = '总部调度';
-- 在SQL Server中检查车辆数据
SELECT TOP 10
CarId,
CarLicense,
CarOrdClass,
CarState
FROM CarData
WHERE CarState = 1
ORDER BY CarId;
原因:CarOrdClass无法匹配到sys_dept的dispatch_order_class
解决:
1. 检查CarOrdClass的值
2. 在sys_dept中配置对应的dispatch_order_class
3. 重新执行同步
说明:系统支持重复同步,已存在的车辆会被更新而不是重复插入
验证:sql -- 检查是否有重复车牌 SELECT vehicle_no, COUNT(*) as count FROM tb_vehicle_info GROUP BY vehicle_no HAVING COUNT(*) > 1;
方式1:定时任务日志
- 系统监控 → 定时任务 → 旧系统车辆同步 → 日志
方式2:系统日志文件bash tail -f logs/sys-info.log | grep "车辆同步"
检查:
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) |
每日检查:
- 查看定时任务执行日志
- 检查是否有失败记录
每周检查:
- 统计同步的车辆数量
- 检查未关联部门的车辆
-- 统计同步车辆数量
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 = '旧系统车辆同步';
```
旧系统车辆同步功能说明.mdsql/legacy_vehicle_sync.sql如有问题,请查看:
1. 系统日志:logs/sys-info.log
2. 定时任务日志:系统监控 → 定时任务 → 日志
3. 详细文档:prd/旧系统车辆同步功能说明.md