fix: 预结算预付台账唯一键加入预结算单id,修复付款申请多选预结算单同步重复键冲突

This commit is contained in:
刘泉佳
2026-10-28 09:47:52 +08:00
parent 4b9e117c9e
commit 7ef3b95aab
@@ -0,0 +1,33 @@
-- 预结算预付记录表:唯一键调整(支持付款申请多选预结算单,每张预结算单各建一条台账)
-- 原唯一键 uk_pre_settlement_advance_no(tenant_id, advance_no) 与多选预结算单联动建档冲突:
-- 同一付款申请为多张预结算单建档时 advance_no 相同,第二条插入报 Duplicate entry。
-- 调整为 uk_pre_settlement_advance_no(tenant_id, pre_settlement_id, advance_no)。
-- 幂等脚本,可重复执行:旧键存在且不含 pre_settlement_id 才删,目标键不存在才加。
SELECT IF(
EXISTS(SELECT 1 FROM information_schema.statistics
WHERE table_schema = DATABASE()
AND table_name = 'blade_pre_settlement_advance'
AND index_name = 'uk_pre_settlement_advance_no')
AND NOT EXISTS(SELECT 1 FROM information_schema.statistics
WHERE table_schema = DATABASE()
AND table_name = 'blade_pre_settlement_advance'
AND index_name = 'uk_pre_settlement_advance_no'
AND column_name = 'pre_settlement_id'),
'ALTER TABLE `blade_pre_settlement_advance` DROP INDEX `uk_pre_settlement_advance_no`',
'DO 0'
) INTO @drop_sql;
PREPARE stmt FROM @drop_sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
SELECT IF(
NOT EXISTS(SELECT 1 FROM information_schema.statistics
WHERE table_schema = DATABASE()
AND table_name = 'blade_pre_settlement_advance'
AND index_name = 'uk_pre_settlement_advance_no'),
'ALTER TABLE `blade_pre_settlement_advance` ADD UNIQUE KEY `uk_pre_settlement_advance_no` (`tenant_id`, `pre_settlement_id`, `advance_no`) USING BTREE',
'DO 0'
) INTO @add_sql;
PREPARE stmt FROM @add_sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;