137 lines
4.6 KiB
SQL
137 lines
4.6 KiB
SQL
-- OneOS 车辆品牌一次性只读校准
|
|
--
|
|
-- 边界:
|
|
-- 1. 只读取 ln_asset_management.vehicle_info / vehicle_model。
|
|
-- 2. 只更新中台 vehicle_identity_binding.oem 的空值,不覆盖已有品牌。
|
|
-- 3. 每辆车在 vehicle_identity_oem_audit 留存来源编码、车型、版本和操作人。
|
|
-- 4. 必须先应用 deploy/migrations/018_vehicle_oem_audit.sql。
|
|
-- 5. 不得把本脚本改为定时跨库同步;后续持续同步应走 OneOS 正式 API。
|
|
|
|
SET SESSION MAX_EXECUTION_TIME = 10000;
|
|
SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
|
|
|
|
SELECT
|
|
COUNT(*) AS candidate_rows,
|
|
COUNT(DISTINCT b.vin) AS candidate_vehicles,
|
|
COUNT(DISTINCT CONCAT(b.vin, '|', LOWER(TRIM(vm.brand)), '|', COALESCE(TRIM(vm.model), ''))) AS distinct_source_values
|
|
FROM vehicle_identity_binding b
|
|
JOIN ln_asset_management.vehicle_info vi
|
|
ON BINARY vi.vin = BINARY b.vin
|
|
AND vi.del_flag = '0'
|
|
JOIN ln_asset_management.vehicle_model vm
|
|
ON vm.id = vi.vehicle_model_id
|
|
AND vm.del_flag = '0'
|
|
WHERE COALESCE(NULLIF(TRIM(b.oem), ''), '') = ''
|
|
AND COALESCE(NULLIF(TRIM(vm.brand), ''), '') <> '';
|
|
|
|
-- candidate_rows、candidate_vehicles、distinct_source_values 必须相等后才能继续。
|
|
START TRANSACTION;
|
|
|
|
INSERT INTO vehicle_identity_oem_audit (
|
|
vin,
|
|
before_oem,
|
|
after_oem,
|
|
source_system,
|
|
source_version,
|
|
source_brand_code,
|
|
source_model_name,
|
|
source_updated_at,
|
|
actor
|
|
)
|
|
SELECT
|
|
b.vin,
|
|
COALESCE(b.oem, ''),
|
|
CASE LOWER(TRIM(vm.brand))
|
|
WHEN 'hyundai' THEN
|
|
CASE
|
|
WHEN vm.model LIKE '%帕力安%' OR vm.model LIKE '%冷链%' OR vm.model LIKE '%双飞翼%' THEN '帕力安牌'
|
|
ELSE '现代'
|
|
END
|
|
WHEN 'yuejin' THEN '跃进'
|
|
WHEN 'feichi' THEN '飞驰'
|
|
WHEN 'sulong' THEN '苏龙'
|
|
WHEN 'higer' THEN '海格'
|
|
WHEN 'dongfeng' THEN '东风'
|
|
WHEN 'yutong' THEN '宇通'
|
|
WHEN 'chufeng' THEN '楚风'
|
|
WHEN 'tonghua' THEN '通华'
|
|
WHEN 'maxus' THEN '大通'
|
|
WHEN 'mingwei' THEN '明威'
|
|
WHEN 'wanfeng' THEN '万风'
|
|
WHEN 'shujie' THEN '舒捷'
|
|
WHEN 'denza' THEN '腾势'
|
|
WHEN 'hongyan' THEN '红岩'
|
|
WHEN 'yuanchang brand' THEN '远程牌'
|
|
WHEN 'others' THEN '其他'
|
|
ELSE TRIM(vm.brand)
|
|
END,
|
|
'oneos_vehicle_model',
|
|
'oneos-vehicle-model-20260716',
|
|
TRIM(vm.brand),
|
|
COALESCE(TRIM(vm.model), ''),
|
|
vm.update_time,
|
|
'p1-02-master-data-calibration'
|
|
FROM vehicle_identity_binding b
|
|
JOIN ln_asset_management.vehicle_info vi
|
|
ON BINARY vi.vin = BINARY b.vin
|
|
AND vi.del_flag = '0'
|
|
JOIN ln_asset_management.vehicle_model vm
|
|
ON vm.id = vi.vehicle_model_id
|
|
AND vm.del_flag = '0'
|
|
WHERE COALESCE(NULLIF(TRIM(b.oem), ''), '') = ''
|
|
AND COALESCE(NULLIF(TRIM(vm.brand), ''), '') <> ''
|
|
ON DUPLICATE KEY UPDATE id = vehicle_identity_oem_audit.id;
|
|
|
|
UPDATE vehicle_identity_binding b
|
|
JOIN (
|
|
SELECT
|
|
vi.vin,
|
|
CASE LOWER(TRIM(vm.brand))
|
|
WHEN 'hyundai' THEN
|
|
CASE
|
|
WHEN vm.model LIKE '%帕力安%' OR vm.model LIKE '%冷链%' OR vm.model LIKE '%双飞翼%' THEN '帕力安牌'
|
|
ELSE '现代'
|
|
END
|
|
WHEN 'yuejin' THEN '跃进'
|
|
WHEN 'feichi' THEN '飞驰'
|
|
WHEN 'sulong' THEN '苏龙'
|
|
WHEN 'higer' THEN '海格'
|
|
WHEN 'dongfeng' THEN '东风'
|
|
WHEN 'yutong' THEN '宇通'
|
|
WHEN 'chufeng' THEN '楚风'
|
|
WHEN 'tonghua' THEN '通华'
|
|
WHEN 'maxus' THEN '大通'
|
|
WHEN 'mingwei' THEN '明威'
|
|
WHEN 'wanfeng' THEN '万风'
|
|
WHEN 'shujie' THEN '舒捷'
|
|
WHEN 'denza' THEN '腾势'
|
|
WHEN 'hongyan' THEN '红岩'
|
|
WHEN 'yuanchang brand' THEN '远程牌'
|
|
WHEN 'others' THEN '其他'
|
|
ELSE TRIM(vm.brand)
|
|
END AS brand_name
|
|
FROM ln_asset_management.vehicle_info vi
|
|
JOIN ln_asset_management.vehicle_model vm
|
|
ON vm.id = vi.vehicle_model_id
|
|
AND vm.del_flag = '0'
|
|
WHERE vi.del_flag = '0'
|
|
AND COALESCE(NULLIF(TRIM(vi.vin), ''), '') <> ''
|
|
AND COALESCE(NULLIF(TRIM(vm.brand), ''), '') <> ''
|
|
) master
|
|
ON BINARY master.vin = BINARY b.vin
|
|
SET b.oem = master.brand_name
|
|
WHERE COALESCE(NULLIF(TRIM(b.oem), ''), '') = '';
|
|
|
|
COMMIT;
|
|
|
|
SELECT
|
|
COUNT(*) AS audited_rows,
|
|
COUNT(DISTINCT vin) AS audited_vehicles
|
|
FROM vehicle_identity_oem_audit
|
|
WHERE source_system = 'oneos_vehicle_model'
|
|
AND source_version = 'oneos-vehicle-model-20260716';
|
|
|
|
SELECT COUNT(*) AS remaining_missing_oem
|
|
FROM vehicle_identity_binding
|
|
WHERE COALESCE(NULLIF(TRIM(oem), ''), '') = '';
|