fix: 预结算预付台账唯一键加入预结算单id,修复付款申请多选预结算单同步重复键冲突
This commit is contained in:
@@ -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;
|
||||
Reference in New Issue
Block a user