fix(master-data): enforce authoritative vehicle totals
This commit is contained in:
136
vehicle-data-platform/docs/oneos-brand-backfill.sql
Normal file
136
vehicle-data-platform/docs/oneos-brand-backfill.sql
Normal file
@@ -0,0 +1,136 @@
|
||||
-- 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), ''), '') = '';
|
||||
Reference in New Issue
Block a user