Refactor surcharge management by replacing PrcPriceSetVersionSurcharge with PrcSurchargeRel, introducing price type handling (PRODUCT, SALES, REDLINE) and updating related services, mappers, and front-end components. Enhance validation and error messaging for price type and detail ID requirements. Update database schema to support new relationships and constraints.
This commit is contained in:
@@ -1351,36 +1351,6 @@ CREATE TABLE `prc_price_set_product` (
|
||||
CONSTRAINT `fk_psp_set` FOREIGN KEY (`price_set_id`) REFERENCES `prc_price_set` (`price_set_id`) ON DELETE CASCADE
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='价格套餐产品主表-与产品库快照独立';
|
||||
|
||||
-- ----------------------------
|
||||
-- 表结构:`prc_price_set_version_surcharge`
|
||||
-- ----------------------------
|
||||
CREATE TABLE `prc_price_set_version_surcharge` (
|
||||
`psvs_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '版本附加费id',
|
||||
`psv_id` bigint(20) NOT NULL COMMENT '套餐版本id',
|
||||
`psd_id` bigint(20) NOT NULL COMMENT '套餐明细id',
|
||||
`sc_id` bigint(20) DEFAULT NULL COMMENT '来源附加费配置id',
|
||||
`product_code` varchar(20) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '产品代码(与明细一致)',
|
||||
`sc_name` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '附加费名称快照',
|
||||
`fee_type` varchar(30) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'SURCHARGE' COMMENT '费用类型(字典bms_fee_type)',
|
||||
`charge_type` varchar(20) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '计费方式 FIXED固定金额/WEIGHT按重量/RATE按比例',
|
||||
`charge_value` decimal(18,6) NOT NULL COMMENT '计费数值快照',
|
||||
`currency` char(3) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'CNY' COMMENT '币种',
|
||||
`round_mode` varchar(20) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'HALF_UP' COMMENT '取值方式(字典bms_round_mode)',
|
||||
`country_code` char(2) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '适用国家ISO2(空=全部)',
|
||||
`sc_note` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '备注',
|
||||
`created_by` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建人',
|
||||
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
|
||||
`updated_by` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '更新人',
|
||||
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
|
||||
PRIMARY KEY (`psvs_id`),
|
||||
KEY `idx_psvs_psv` (`psv_id`),
|
||||
KEY `idx_psvs_psd` (`psd_id`),
|
||||
KEY `idx_psvs_product` (`psv_id`,`product_code`),
|
||||
KEY `idx_psvs_sc` (`sc_id`),
|
||||
CONSTRAINT `fk_psvs_psd` FOREIGN KEY (`psd_id`) REFERENCES `prc_price_set_detail` (`psd_id`) ON DELETE CASCADE,
|
||||
CONSTRAINT `fk_psvs_psv` FOREIGN KEY (`psv_id`) REFERENCES `prc_price_set_version` (`psv_id`) ON DELETE CASCADE
|
||||
) ENGINE=InnoDB AUTO_INCREMENT=487 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='价格套餐版本附加费快照';
|
||||
|
||||
-- ----------------------------
|
||||
-- 表结构:`prc_quote`
|
||||
-- ----------------------------
|
||||
@@ -1488,22 +1458,25 @@ CREATE TABLE `prc_surcharge` (
|
||||
CREATE TABLE `prc_surcharge_rel` (
|
||||
`rel_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '关联ID',
|
||||
`sc_id` bigint(20) NOT NULL COMMENT '附加费配置ID prc_surcharge.sc_id',
|
||||
`product_id` bigint(20) NOT NULL COMMENT '产品ID product.product_id',
|
||||
`product_id` bigint(20) NOT NULL COMMENT '产品ID或套餐产品ID:PRODUCT/REDLINE=product.product_id;SALES=prc_price_set_product.psp_id',
|
||||
`product_code` varchar(20) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '产品对接代码 product.product_code',
|
||||
`detail_id` bigint(20) DEFAULT NULL COMMENT '产品明细ID product_country.detail_id(空=作用于产品全部明细)',
|
||||
`detail_id` bigint(20) DEFAULT NULL COMMENT '明细ID:PRODUCT/REDLINE=product_country.detail_id(空=产品全部);SALES=prc_price_set_detail.psd_id',
|
||||
`price_type` varchar(20) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'PRODUCT' COMMENT '价格类型 PRODUCT产品价/SALES销售价/REDLINE红线价',
|
||||
`country_code` char(2) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '适用国家ISO2(空=全部)',
|
||||
`created_by` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建人',
|
||||
`create_time` datetime DEFAULT NULL,
|
||||
`updated_by` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '更新人',
|
||||
`update_time` datetime DEFAULT NULL,
|
||||
PRIMARY KEY (`rel_id`),
|
||||
UNIQUE KEY `uk_rel_scope` (`sc_id`,`product_id`,`detail_id`),
|
||||
UNIQUE KEY `uk_rel_scope` (`sc_id`,`product_id`,`detail_id`,`price_type`,`country_code`),
|
||||
KEY `idx_rel_sc` (`sc_id`),
|
||||
KEY `idx_rel_product` (`product_id`),
|
||||
KEY `idx_rel_product_code` (`product_code`),
|
||||
KEY `idx_rel_detail` (`detail_id`),
|
||||
CONSTRAINT `fk_rel_product` FOREIGN KEY (`product_id`) REFERENCES `product` (`product_id`) ON DELETE CASCADE,
|
||||
KEY `idx_rel_price_type` (`price_type`),
|
||||
KEY `idx_rel_country` (`country_code`),
|
||||
CONSTRAINT `fk_rel_sc` FOREIGN KEY (`sc_id`) REFERENCES `prc_surcharge` (`sc_id`) ON DELETE CASCADE
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='附加费与产品/明细关联表';
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='附加费关联表(按price_type多态关联产品或套餐)';
|
||||
|
||||
-- ----------------------------
|
||||
-- 表结构:`prc_weight_section_detail`
|
||||
|
||||
@@ -0,0 +1,80 @@
|
||||
-- prc_surcharge_rel: add price_type + country_code; drop version surcharge snapshot
|
||||
-- Run once on existing DB
|
||||
|
||||
-- 1) drop FK to product (SALES rows store psp_id in product_id)
|
||||
SET @fk_exists := (
|
||||
SELECT COUNT(1) FROM information_schema.TABLE_CONSTRAINTS
|
||||
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'prc_surcharge_rel'
|
||||
AND CONSTRAINT_NAME = 'fk_rel_product' AND CONSTRAINT_TYPE = 'FOREIGN KEY'
|
||||
);
|
||||
SET @sql := IF(@fk_exists > 0,
|
||||
'ALTER TABLE `prc_surcharge_rel` DROP FOREIGN KEY `fk_rel_product`',
|
||||
'SELECT 1');
|
||||
PREPARE stmt FROM @sql;
|
||||
EXECUTE stmt;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
|
||||
-- 2) price_type
|
||||
SET @col_exists := (
|
||||
SELECT COUNT(1) FROM information_schema.COLUMNS
|
||||
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'prc_surcharge_rel' AND COLUMN_NAME = 'price_type'
|
||||
);
|
||||
SET @sql := IF(@col_exists = 0,
|
||||
CONCAT(
|
||||
'ALTER TABLE `prc_surcharge_rel` ',
|
||||
'ADD COLUMN `price_type` varchar(20) NOT NULL DEFAULT ''PRODUCT'' ',
|
||||
'COMMENT ''价格类型 PRODUCT产品价/SALES销售价/REDLINE红线价'' AFTER `detail_id`'
|
||||
),
|
||||
'SELECT 1');
|
||||
PREPARE stmt FROM @sql;
|
||||
EXECUTE stmt;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
|
||||
-- 3) country_code on rel
|
||||
SET @col_exists := (
|
||||
SELECT COUNT(1) FROM information_schema.COLUMNS
|
||||
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'prc_surcharge_rel' AND COLUMN_NAME = 'country_code'
|
||||
);
|
||||
SET @sql := IF(@col_exists = 0,
|
||||
CONCAT(
|
||||
'ALTER TABLE `prc_surcharge_rel` ',
|
||||
'ADD COLUMN `country_code` char(2) DEFAULT NULL ',
|
||||
'COMMENT ''适用国家ISO2(空=全部)'' AFTER `price_type`'
|
||||
),
|
||||
'SELECT 1');
|
||||
PREPARE stmt FROM @sql;
|
||||
EXECUTE stmt;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
|
||||
-- 4) backfill country from surcharge master when rel country empty
|
||||
UPDATE prc_surcharge_rel r
|
||||
INNER JOIN prc_surcharge s ON s.sc_id = r.sc_id
|
||||
SET r.country_code = s.country_code
|
||||
WHERE (r.country_code IS NULL OR r.country_code = '')
|
||||
AND s.country_code IS NOT NULL AND s.country_code <> '';
|
||||
|
||||
-- 5) rebuild unique key
|
||||
SET @uk_exists := (
|
||||
SELECT COUNT(1) FROM information_schema.STATISTICS
|
||||
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'prc_surcharge_rel' AND INDEX_NAME = 'uk_rel_scope'
|
||||
);
|
||||
SET @sql := IF(@uk_exists > 0,
|
||||
'ALTER TABLE `prc_surcharge_rel` DROP INDEX `uk_rel_scope`',
|
||||
'SELECT 1');
|
||||
PREPARE stmt FROM @sql;
|
||||
EXECUTE stmt;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
|
||||
SET @uk_exists2 := (
|
||||
SELECT COUNT(1) FROM information_schema.STATISTICS
|
||||
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'prc_surcharge_rel' AND INDEX_NAME = 'uk_rel_scope'
|
||||
);
|
||||
SET @sql := IF(@uk_exists2 = 0,
|
||||
'ALTER TABLE `prc_surcharge_rel` ADD UNIQUE KEY `uk_rel_scope` (`sc_id`, `product_id`, `detail_id`, `price_type`, `country_code`)',
|
||||
'SELECT 1');
|
||||
PREPARE stmt FROM @sql;
|
||||
EXECUTE stmt;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
|
||||
-- 6) drop version surcharge snapshot table
|
||||
DROP TABLE IF EXISTS `prc_price_set_version_surcharge`;
|
||||
Reference in New Issue
Block a user