Files

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), ''), '') = '';