增加软删除

This commit is contained in:
wuweihua
2026-10-12 09:52:24 +08:00
parent 5aba8af49d
commit d08485d738
25 changed files with 561 additions and 101 deletions
@@ -0,0 +1,185 @@
-- product / product_country / prc_surcharge: is_del (0 not deleted / 1 deleted)
SET NAMES utf8mb4;
SET @col := (
SELECT COLUMN_NAME FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'product'
AND COLUMN_NAME = 'is_del'
LIMIT 1
);
SET @sql := IF(@col IS NULL,
'ALTER TABLE product ADD COLUMN is_del char(1) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT ''0'' COMMENT ''是否删除 0未删除 1已删除'' AFTER status',
'SELECT 1');
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
SET @idx := (
SELECT INDEX_NAME FROM information_schema.STATISTICS
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'product'
AND INDEX_NAME = 'uk_product_code_eff'
LIMIT 1
);
SET @sql := IF(@idx IS NULL, 'SELECT 1', 'ALTER TABLE product DROP INDEX uk_product_code_eff');
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
SET @idx := (
SELECT INDEX_NAME FROM information_schema.STATISTICS
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'product'
AND INDEX_NAME = 'uk_product_code_eff_is_del'
LIMIT 1
);
SET @sql := IF(@idx IS NULL, 'ALTER TABLE product ADD UNIQUE KEY uk_product_code_eff_is_del (product_code, effective_date, is_del)', 'SELECT 1');
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
SET @col := (
SELECT COLUMN_NAME FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'product_country'
AND COLUMN_NAME = 'is_del'
LIMIT 1
);
SET @sql := IF(@col IS NULL,
'ALTER TABLE product_country ADD COLUMN is_del char(1) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT ''0'' COMMENT ''是否删除 0未删除 1已删除'' AFTER status',
'SELECT 1');
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
SET @idx := (
SELECT INDEX_NAME FROM information_schema.STATISTICS
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'product_country'
AND INDEX_NAME = 'uk_product_country_zone_weight_eff'
LIMIT 1
);
SET @sql := IF(@idx IS NULL, 'SELECT 1', 'ALTER TABLE product_country DROP INDEX uk_product_country_zone_weight_eff');
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
SET @idx := (
SELECT INDEX_NAME FROM information_schema.STATISTICS
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'product_country'
AND INDEX_NAME = 'uk_product_country_zone_weight_eff_is_del'
LIMIT 1
);
SET @sql := IF(@idx IS NULL, 'ALTER TABLE product_country ADD UNIQUE KEY uk_product_country_zone_weight_eff_is_del (product_code, country_name, zone_code, weight_min, weight_max, effective_date, is_del)', 'SELECT 1');
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
SET @col := (
SELECT COLUMN_NAME FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'prc_surcharge'
AND COLUMN_NAME = 'is_del'
LIMIT 1
);
SET @sql := IF(@col IS NULL,
'ALTER TABLE prc_surcharge ADD COLUMN is_del char(1) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT ''0'' COMMENT ''是否删除 0未删除 1已删除'' AFTER ss_code',
'SELECT 1');
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
UPDATE product SET is_del = '0' WHERE is_del IS NULL;
UPDATE product_country SET is_del = '0' WHERE is_del IS NULL;
UPDATE prc_surcharge SET is_del = '0' WHERE is_del IS NULL;
-- redline_product / redline_product_country
SET @col := (
SELECT COLUMN_NAME FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'redline_product'
AND COLUMN_NAME = 'is_del'
LIMIT 1
);
SET @sql := IF(@col IS NULL,
'ALTER TABLE redline_product ADD COLUMN is_del char(1) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT ''0'' COMMENT ''是否删除 0未删除 1已删除'' AFTER status',
'SELECT 1');
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
SET @idx := (
SELECT INDEX_NAME FROM information_schema.STATISTICS
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'redline_product'
AND INDEX_NAME = 'uk_redline_product_code_eff'
LIMIT 1
);
SET @sql := IF(@idx IS NULL, 'SELECT 1', 'ALTER TABLE redline_product DROP INDEX uk_redline_product_code_eff');
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
SET @idx := (
SELECT INDEX_NAME FROM information_schema.STATISTICS
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'redline_product'
AND INDEX_NAME = 'uk_redline_product_code_eff_is_del'
LIMIT 1
);
SET @sql := IF(@idx IS NULL, 'ALTER TABLE redline_product ADD UNIQUE KEY uk_redline_product_code_eff_is_del (product_code, effective_date, is_del)', 'SELECT 1');
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
SET @col := (
SELECT COLUMN_NAME FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'redline_product_country'
AND COLUMN_NAME = 'is_del'
LIMIT 1
);
SET @sql := IF(@col IS NULL,
'ALTER TABLE redline_product_country ADD COLUMN is_del char(1) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT ''0'' COMMENT ''是否删除 0未删除 1已删除'' AFTER status',
'SELECT 1');
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
SET @idx := (
SELECT INDEX_NAME FROM information_schema.STATISTICS
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'redline_product_country'
AND INDEX_NAME = 'uk_redline_country_zone_weight_eff'
LIMIT 1
);
SET @sql := IF(@idx IS NULL, 'SELECT 1', 'ALTER TABLE redline_product_country DROP INDEX uk_redline_country_zone_weight_eff');
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
SET @idx := (
SELECT INDEX_NAME FROM information_schema.STATISTICS
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'redline_product_country'
AND INDEX_NAME = 'uk_redline_country_zone_weight_eff_is_del'
LIMIT 1
);
SET @sql := IF(@idx IS NULL, 'ALTER TABLE redline_product_country ADD UNIQUE KEY uk_redline_country_zone_weight_eff_is_del (product_code, country_name, zone_code, weight_min, weight_max, effective_date, is_del)', 'SELECT 1');
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
UPDATE redline_product SET is_del = '0' WHERE is_del IS NULL;
UPDATE redline_product_country SET is_del = '0' WHERE is_del IS NULL;
-- prc_surcharge_rel
SET @col := (
SELECT COLUMN_NAME FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'prc_surcharge_rel'
AND COLUMN_NAME = 'is_del'
LIMIT 1
);
SET @sql := IF(@col IS NULL,
'ALTER TABLE prc_surcharge_rel ADD COLUMN is_del char(1) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT ''0'' COMMENT ''是否删除 0未删除 1已删除'' AFTER country_code',
'SELECT 1');
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
SET @idx := (
SELECT INDEX_NAME FROM information_schema.STATISTICS
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'prc_surcharge_rel'
AND INDEX_NAME = 'uk_rel_scope'
LIMIT 1
);
SET @sql := IF(@idx IS NULL, 'SELECT 1', 'ALTER TABLE prc_surcharge_rel DROP INDEX uk_rel_scope');
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
SET @idx := (
SELECT INDEX_NAME FROM information_schema.STATISTICS
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'prc_surcharge_rel'
AND INDEX_NAME = 'uk_rel_scope_is_del'
LIMIT 1
);
SET @sql := IF(@idx IS NULL, 'ALTER TABLE prc_surcharge_rel ADD UNIQUE KEY uk_rel_scope_is_del (sc_id, product_id, detail_id, price_type, country_code, is_del)', 'SELECT 1');
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
UPDATE prc_surcharge_rel SET is_del = '0' WHERE is_del IS NULL;
+4 -2
View File
@@ -13,6 +13,7 @@ CREATE TABLE IF NOT EXISTS `redline_product` (
`effective_date` datetime DEFAULT NULL COMMENT '目录生效时间(到小时)',
`expire_date` datetime DEFAULT NULL COMMENT '失效时间(空=长期)',
`status` char(1) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '0' COMMENT '0待生效 1已生效 2已失效',
`is_del` char(1) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '0' COMMENT '是否删除 0未删除 1已删除',
`source_sheet` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '来源Excel sheet名',
`pef_id` bigint(20) DEFAULT NULL COMMENT '关联导入价表Excel附件 prc_price_excel_file.pef_id',
`remark` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
@@ -22,7 +23,7 @@ CREATE TABLE IF NOT EXISTS `redline_product` (
`updated_by` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '',
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`product_id`) USING BTREE,
UNIQUE KEY `uk_redline_product_code_eff` (`product_code`,`effective_date`),
UNIQUE KEY `uk_redline_product_code_eff_is_del` (`product_code`,`effective_date`,`is_del`),
KEY `idx_redline_tax_status` (`tax_mode`,`status`) USING BTREE,
KEY `idx_redline_product_code` (`product_code`),
KEY `idx_redline_product_pef_id` (`pef_id`)
@@ -47,10 +48,11 @@ CREATE TABLE IF NOT EXISTS `redline_product_country` (
`effective_date` datetime DEFAULT NULL COMMENT '生效时间(到小时)',
`expire_date` datetime DEFAULT NULL COMMENT '失效时间(空=开放)',
`status` char(1) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '0' COMMENT '0待生效 1已生效 2已失效',
`is_del` char(1) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '0' COMMENT '是否删除 0未删除 1已删除',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`detail_id`) USING BTREE,
UNIQUE KEY `uk_redline_country_zone_weight_eff` (`product_code`,`country_name`,`zone_code`,`weight_min`,`weight_max`,`effective_date`),
UNIQUE KEY `uk_redline_country_zone_weight_eff_is_del` (`product_code`,`country_name`,`zone_code`,`weight_min`,`weight_max`,`effective_date`,`is_del`),
KEY `idx_redline_country_code` (`country_code`) USING BTREE,
KEY `idx_redline_weight_match` (`product_code`,`country_code`,`weight_min`,`weight_max`) USING BTREE,
KEY `idx_redline_product_eff` (`product_code`,`effective_date`,`expire_date`),