-- 渠道与产品的收付关系。一个渠道同一收付类型只保留一条。可重复执行。 SET NAMES utf8mb4; CREATE TABLE IF NOT EXISTS `srv_channel_product_map` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键', `channel_id` varchar(50) NOT NULL COMMENT '渠道ID,对应 srv_service_channel.id', `product_id` bigint(20) NOT NULL COMMENT '产品ID,应付时为价卡产品编号', `price_set_id` bigint(20) DEFAULT NULL COMMENT '应收套餐ID,对应 prc_price_set.price_set_id', `pay_type` varchar(10) NOT NULL COMMENT '收付类型,字典 bms_pay_type:AR应收 AP应付', `create_by` varchar(64) DEFAULT NULL COMMENT '创建者', `create_time` datetime DEFAULT NULL COMMENT '创建时间', `update_by` varchar(64) DEFAULT NULL COMMENT '更新者', `update_time` datetime DEFAULT NULL COMMENT '更新时间', PRIMARY KEY (`id`), UNIQUE KEY `uk_channel_pay_type` (`channel_id`, `pay_type`), KEY `idx_channel_product_map_product` (`product_id`), KEY `idx_channel_product_map_price_set` (`price_set_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='渠道产品关系映射'; SET @sql = ( SELECT IF( COUNT(*) = 0, 'ALTER TABLE srv_channel_product_map ADD COLUMN price_set_id bigint(20) DEFAULT NULL COMMENT ''应收套餐ID,对应 prc_price_set.price_set_id'' AFTER product_id, ADD KEY idx_channel_product_map_price_set (price_set_id)', 'SELECT 1' ) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'srv_channel_product_map' AND COLUMN_NAME = 'price_set_id' ); PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt; SET @copy_sql = ( SELECT IF( COUNT(*) > 0, 'INSERT INTO srv_channel_product_map (channel_id, product_id, pay_type, create_time, update_time) SELECT c.channel_id, IFNULL(c.origin_id, c.product_id), ''AP'', c.update_time, c.update_time FROM srv_channel_pay c WHERE NOT EXISTS ( SELECT 1 FROM srv_channel_product_map m WHERE m.channel_id = c.channel_id AND m.pay_type = ''AP'' )', 'SELECT 1' ) FROM information_schema.TABLES WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'srv_channel_pay' ); PREPARE stmt FROM @copy_sql; EXECUTE stmt; DEALLOCATE PREPARE stmt; DROP TABLE IF EXISTS srv_channel_pay;