fix(sql): make fee migration MySQL-compatible

This commit is contained in:
2026-08-10 15:52:40 +08:00
parent c9f1fe0093
commit 9ab7c01639
3 changed files with 82 additions and 30 deletions
@@ -6567,14 +6567,20 @@ DROP PROCEDURE IF EXISTS unified_publish_assert_fee_item_preflight;
DELIMITER $$
CREATE PROCEDURE unified_publish_assert_fee_item_preflight()
BEGIN
IF (SELECT COUNT(*) FROM tmp_fee_item_seed) <> 110
OR (SELECT COUNT(*) FROM tmp_fee_item_seed WHERE trade_scope = 'DOMESTIC') <> 84
OR (SELECT COUNT(*) FROM tmp_fee_item_seed WHERE trade_scope = 'INTERNATIONAL') <> 26 THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '二期费用项目迁移失败:Excel种子数量或国内国际范围不正确';
IF (SELECT COUNT(*) FROM tmp_fee_item_seed) <> 110 THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '二期费用项目迁移失败:Excel种子总数不正确';
END IF;
IF EXISTS (SELECT fee_code FROM tmp_fee_item_seed GROUP BY fee_code HAVING COUNT(*) > 1)
OR EXISTS (SELECT trade_scope, fee_type_name FROM tmp_fee_item_seed GROUP BY trade_scope, fee_type_name HAVING COUNT(*) > 1) THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '二期费用项目迁移失败:Excel种子编码或语义键重复';
IF (SELECT COUNT(*) FROM tmp_fee_item_seed WHERE trade_scope = 'DOMESTIC') <> 84 THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '二期费用项目迁移失败:Excel国内种子数量不正确';
END IF;
IF (SELECT COUNT(*) FROM tmp_fee_item_seed WHERE trade_scope = 'INTERNATIONAL') <> 26 THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '二期费用项目迁移失败:Excel国际种子数量不正确';
END IF;
IF EXISTS (SELECT fee_code FROM tmp_fee_item_seed GROUP BY fee_code HAVING COUNT(*) > 1) THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '二期费用项目迁移失败:Excel种子编码重复';
END IF;
IF EXISTS (SELECT trade_scope, fee_type_name FROM tmp_fee_item_seed GROUP BY trade_scope, fee_type_name HAVING COUNT(*) > 1) THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '二期费用项目迁移失败:Excel种子语义键重复';
END IF;
IF EXISTS (
SELECT f.id
@@ -6648,18 +6654,20 @@ BEGIN
IF EXISTS (
SELECT f.id
FROM fl_fee_item f
LEFT JOIN tmp_fee_item_seed by_code ON by_code.fee_code = NULLIF(TRIM(f.fee_code), '')
LEFT JOIN tmp_fee_item_seed by_semantic ON by_semantic.trade_scope = f.trade_scope
AND by_semantic.fee_type_name = f.fee_type_name
WHERE f.tenant_id > 0 AND by_code.seed_no IS NULL AND by_semantic.seed_no IS NULL
LEFT JOIN tmp_fee_item_seed matched_seed
ON matched_seed.fee_code = NULLIF(TRIM(f.fee_code), '')
OR (matched_seed.trade_scope = f.trade_scope
AND matched_seed.fee_type_name = f.fee_type_name)
WHERE f.tenant_id > 0 AND matched_seed.seed_no IS NULL
) THEN
SELECT 'UNMAPPED_CUSTOMER_ITEM' AS conflict_type, f.id, f.tenant_id, f.fee_code,
f.trade_scope, f.fee_type_name
FROM fl_fee_item f
LEFT JOIN tmp_fee_item_seed by_code ON by_code.fee_code = NULLIF(TRIM(f.fee_code), '')
LEFT JOIN tmp_fee_item_seed by_semantic ON by_semantic.trade_scope = f.trade_scope
AND by_semantic.fee_type_name = f.fee_type_name
WHERE f.tenant_id > 0 AND by_code.seed_no IS NULL AND by_semantic.seed_no IS NULL;
LEFT JOIN tmp_fee_item_seed matched_seed
ON matched_seed.fee_code = NULLIF(TRIM(f.fee_code), '')
OR (matched_seed.trade_scope = f.trade_scope
AND matched_seed.fee_type_name = f.fee_type_name)
WHERE f.tenant_id > 0 AND matched_seed.seed_no IS NULL;
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '二期费用项目迁移失败:存在无法匹配公共种子的客户费用项目';
END IF;
IF EXISTS (