修改打单计费逻辑
This commit is contained in:
@@ -325,3 +325,124 @@ SELECT 1, m.menu_id FROM (
|
||||
UNION SELECT 2627 UNION SELECT 2628
|
||||
) m
|
||||
WHERE NOT EXISTS (SELECT 1 FROM sys_role_menu rm WHERE rm.role_id = 1 AND rm.menu_id = m.menu_id);
|
||||
|
||||
-- ========== 五、打单计费热路径索引(可重复执行) ==========
|
||||
-- 命中顺序:客户绑套餐 → 渠道 AR 映产品 → term 按套餐+产品+日期 → 明细按 term_id
|
||||
|
||||
-- 5.1 客户按 customer_code 取绑定(selectEffectiveByCustomerCode)
|
||||
SET @idx := (
|
||||
SELECT COUNT(1) FROM information_schema.STATISTICS
|
||||
WHERE TABLE_SCHEMA = DATABASE()
|
||||
AND TABLE_NAME = 'prc_customer_price_set'
|
||||
AND INDEX_NAME = 'idx_cps_customer_code'
|
||||
);
|
||||
SET @sql := IF(@idx = 0,
|
||||
'ALTER TABLE prc_customer_price_set ADD KEY idx_cps_customer_code (customer_code)',
|
||||
'SELECT 1');
|
||||
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
|
||||
|
||||
-- 5.2 套餐壳按分类+状态(列表/启停过滤;计费按 PK 取,顺带加速 LABEL 筛)
|
||||
SET @idx := (
|
||||
SELECT COUNT(1) FROM information_schema.STATISTICS
|
||||
WHERE TABLE_SCHEMA = DATABASE()
|
||||
AND TABLE_NAME = 'prc_price_set'
|
||||
AND INDEX_NAME = 'idx_ps_category_status'
|
||||
);
|
||||
SET @sql := IF(@idx = 0,
|
||||
'ALTER TABLE prc_price_set ADD KEY idx_ps_category_status (set_category, status)',
|
||||
'SELECT 1');
|
||||
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
|
||||
|
||||
-- 5.3 渠道 AR 映射:uk_channel_pay_type(channel_id, pay_type) 已存在,补 product_id 侧已有;确保 channel_code 索引
|
||||
SET @idx := (
|
||||
SELECT COUNT(1) FROM information_schema.STATISTICS
|
||||
WHERE TABLE_SCHEMA = DATABASE()
|
||||
AND TABLE_NAME = 'srv_channel_product_map'
|
||||
AND INDEX_NAME = 'idx_channel_product_map_channel_code'
|
||||
);
|
||||
SET @sql := IF(@idx = 0,
|
||||
'ALTER TABLE srv_channel_product_map ADD KEY idx_channel_product_map_channel_code (channel_code)',
|
||||
'SELECT 1');
|
||||
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
|
||||
|
||||
-- 5.4 term 计费命中:套餐+产品+生效窗(selectTermIdBySetProductAt)— 已有则跳过
|
||||
SET @idx := (
|
||||
SELECT COUNT(1) FROM information_schema.STATISTICS
|
||||
WHERE TABLE_SCHEMA = DATABASE()
|
||||
AND TABLE_NAME = 'pay_product_term'
|
||||
AND INDEX_NAME = 'idx_pay_term_set_product_time'
|
||||
);
|
||||
SET @sql := IF(@idx = 0,
|
||||
'ALTER TABLE pay_product_term ADD KEY idx_pay_term_set_product_time (price_set_id, product_id, effective_start, effective_end)',
|
||||
'SELECT 1');
|
||||
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
|
||||
|
||||
-- 5.5 term 按产品查是否挂套餐(selectLabelProductIdByDict 的 exists)
|
||||
SET @idx := (
|
||||
SELECT COUNT(1) FROM information_schema.STATISTICS
|
||||
WHERE TABLE_SCHEMA = DATABASE()
|
||||
AND TABLE_NAME = 'pay_product_term'
|
||||
AND INDEX_NAME = 'idx_pay_term_product_set'
|
||||
);
|
||||
SET @sql := IF(@idx = 0,
|
||||
'ALTER TABLE pay_product_term ADD KEY idx_pay_term_product_set (product_id, price_set_id)',
|
||||
'SELECT 1');
|
||||
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
|
||||
|
||||
-- 5.6 打单产品字典命中(dict_value + AR)
|
||||
SET @idx := (
|
||||
SELECT COUNT(1) FROM information_schema.STATISTICS
|
||||
WHERE TABLE_SCHEMA = DATABASE()
|
||||
AND TABLE_NAME = 'pay_product'
|
||||
AND INDEX_NAME = 'idx_pay_product_dict_type'
|
||||
);
|
||||
SET @sql := IF(@idx = 0,
|
||||
'ALTER TABLE pay_product ADD KEY idx_pay_product_dict_type (dict_value, product_type)',
|
||||
'SELECT 1');
|
||||
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
|
||||
|
||||
-- 5.7 明细按 term_id 装载(select*ByTerm);原索引以 product_id 领先,补 term 单列
|
||||
SET @idx := (
|
||||
SELECT COUNT(1) FROM information_schema.STATISTICS
|
||||
WHERE TABLE_SCHEMA = DATABASE()
|
||||
AND TABLE_NAME = 'pay_weight_band'
|
||||
AND INDEX_NAME = 'idx_pay_weight_term'
|
||||
);
|
||||
SET @sql := IF(@idx = 0,
|
||||
'ALTER TABLE pay_weight_band ADD KEY idx_pay_weight_term (term_id)',
|
||||
'SELECT 1');
|
||||
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
|
||||
|
||||
SET @idx := (
|
||||
SELECT COUNT(1) FROM information_schema.STATISTICS
|
||||
WHERE TABLE_SCHEMA = DATABASE()
|
||||
AND TABLE_NAME = 'pay_surcharge'
|
||||
AND INDEX_NAME = 'idx_pay_surcharge_term'
|
||||
);
|
||||
SET @sql := IF(@idx = 0,
|
||||
'ALTER TABLE pay_surcharge ADD KEY idx_pay_surcharge_term (term_id)',
|
||||
'SELECT 1');
|
||||
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
|
||||
|
||||
SET @idx := (
|
||||
SELECT COUNT(1) FROM information_schema.STATISTICS
|
||||
WHERE TABLE_SCHEMA = DATABASE()
|
||||
AND TABLE_NAME = 'pay_extra_line'
|
||||
AND INDEX_NAME = 'idx_pay_extra_term'
|
||||
);
|
||||
SET @sql := IF(@idx = 0,
|
||||
'ALTER TABLE pay_extra_line ADD KEY idx_pay_extra_term (term_id)',
|
||||
'SELECT 1');
|
||||
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
|
||||
|
||||
-- 5.8 订单扩展按渠道反查(可选批量重计时);bill_id / order_no 已有唯一键
|
||||
SET @idx := (
|
||||
SELECT COUNT(1) FROM information_schema.STATISTICS
|
||||
WHERE TABLE_SCHEMA = DATABASE()
|
||||
AND TABLE_NAME = 'prc_order_bill_ext'
|
||||
AND INDEX_NAME = 'idx_order_bill_ext_channel'
|
||||
);
|
||||
SET @sql := IF(@idx = 0,
|
||||
'ALTER TABLE prc_order_bill_ext ADD KEY idx_order_bill_ext_channel (product_channel_id)',
|
||||
'SELECT 1');
|
||||
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
|
||||
|
||||
Reference in New Issue
Block a user