增加规则配置

This commit is contained in:
wuweihua
2026-10-16 13:40:03 +08:00
parent b3f79ffc4c
commit b54cb1b018
16 changed files with 1376 additions and 7 deletions
+60
View File
@@ -0,0 +1,60 @@
-- biz_rule: one row per product/country/customer dimension
SET NAMES utf8mb4;
CREATE TABLE IF NOT EXISTS biz_rule (
rule_id bigint(20) NOT NULL AUTO_INCREMENT COMMENT '规则ID',
rule_name varchar(100) NOT NULL COMMENT '规则名称',
rule_type varchar(32) NOT NULL COMMENT '规则类型(字典 bms_biz_rule_type)',
product_code varchar(64) DEFAULT NULL COMMENT '产品代码(空=全部)',
country_code varchar(10) DEFAULT NULL COMMENT '国家ISO2(空=全部)',
customer_code varchar(64) DEFAULT NULL COMMENT '客户代码(空=全部)',
weight_min decimal(10,3) DEFAULT NULL COMMENT '重量段最小KG(含)',
weight_max decimal(10,3) DEFAULT NULL COMMENT '重量段最大KG(含)',
weight_source varchar(32) NOT NULL COMMENT '取值字段(字典 bms_biz_weight_source)',
side_sum_max decimal(10,2) DEFAULT NULL COMMENT '三边和上限(三边规则)',
status char(1) NOT NULL DEFAULT '0' COMMENT '状态(0正常 1停用)',
remark varchar(500) DEFAULT NULL COMMENT '备注',
create_by varchar(64) DEFAULT '' COMMENT '创建者',
create_time datetime DEFAULT NULL COMMENT '创建时间',
update_by varchar(64) DEFAULT '' COMMENT '更新者',
update_time datetime DEFAULT NULL COMMENT '更新时间',
del_flag char(1) DEFAULT '0' COMMENT '删除标记(0存在 1删除)',
PRIMARY KEY (rule_id),
KEY idx_biz_rule_dim (product_code, country_code, customer_code),
KEY idx_biz_rule_type_status (rule_type, status),
KEY idx_biz_rule_status (status)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='业务规则配置表(产品/国家/客户维度)';
INSERT INTO sys_dict_type (dict_name, dict_type, status, create_by, create_time, remark)
SELECT N'业务规则类型', 'bms_biz_rule_type', '0', 'admin', sysdate(), N'计费/业务规则类型'
FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM sys_dict_type WHERE dict_type = 'bms_biz_rule_type');
INSERT INTO sys_dict_data (dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, remark)
SELECT 1, N'三边规则', 'THREE_SIDE', 'bms_biz_rule_type', '', 'primary', 'Y', '0', 'admin', sysdate(), N'三边和小于阈值时按取值字段取重'
FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM sys_dict_data WHERE dict_type = 'bms_biz_rule_type' AND dict_value = 'THREE_SIDE');
INSERT INTO sys_dict_type (dict_name, dict_type, status, create_by, create_time, remark)
SELECT N'规则取重字段', 'bms_biz_weight_source', '0', 'admin', sysdate(), N'实重(收货重)/计费重'
FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM sys_dict_type WHERE dict_type = 'bms_biz_weight_source');
INSERT INTO sys_dict_data (dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, remark)
SELECT 1, N'实重', 'RECEIVE_WEIGHT', 'bms_biz_weight_source', '', 'success', 'Y', '0', 'admin', sysdate(), N'收货重 TAB_ORDER.WEIGHT'
FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM sys_dict_data WHERE dict_type = 'bms_biz_weight_source' AND dict_value = 'RECEIVE_WEIGHT');
INSERT INTO sys_dict_data (dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, remark)
SELECT 2, N'计费重', 'CHARGE_WEIGHT', 'bms_biz_weight_source', '', 'warning', 'N', '0', 'admin', sysdate(), N'上游计费重/体积重因子'
FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM sys_dict_data WHERE dict_type = 'bms_biz_weight_source' AND dict_value = 'CHARGE_WEIGHT');
-- seed: one row per product
INSERT INTO biz_rule (rule_name, rule_type, product_code, country_code, customer_code, weight_min, weight_max, weight_source, side_sum_max, status, remark, create_by, create_time, del_flag)
SELECT N'WSP三边和<90取收货重', 'THREE_SIDE', v.product_code, NULL, NULL, NULL, NULL, 'RECEIVE_WEIGHT', 90.00, '0',
N'产品三边和小于90时以收货重为计费重', 'admin', sysdate(), '0'
FROM (
SELECT 'WSP081' AS product_code UNION ALL SELECT 'WSP075' UNION ALL SELECT 'WSP069'
UNION ALL SELECT 'WSP068' UNION ALL SELECT 'WSP067' UNION ALL SELECT 'WSP066'
) v
WHERE NOT EXISTS (
SELECT 1 FROM biz_rule r
WHERE r.del_flag = '0' AND r.rule_type = 'THREE_SIDE' AND r.product_code = v.product_code
AND r.country_code IS NULL AND r.customer_code IS NULL
);
+57
View File
@@ -0,0 +1,57 @@
-- Alter existing biz_rule to product/country/customer dimension storage
SET NAMES utf8mb4;
-- add new columns if missing
SET @sql := (
SELECT IF(
EXISTS(SELECT 1 FROM information_schema.columns WHERE table_schema = DATABASE() AND table_name = 'biz_rule' AND column_name = 'product_code'),
'SELECT 1',
'ALTER TABLE biz_rule ADD COLUMN product_code varchar(64) DEFAULT NULL COMMENT ''产品代码(空=全部)'' AFTER rule_type'
)
);
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
SET @sql := (
SELECT IF(
EXISTS(SELECT 1 FROM information_schema.columns WHERE table_schema = DATABASE() AND table_name = 'biz_rule' AND column_name = 'country_code'),
'SELECT 1',
'ALTER TABLE biz_rule ADD COLUMN country_code varchar(10) DEFAULT NULL COMMENT ''国家ISO2(空=全部)'' AFTER product_code'
)
);
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
SET @sql := (
SELECT IF(
EXISTS(SELECT 1 FROM information_schema.columns WHERE table_schema = DATABASE() AND table_name = 'biz_rule' AND column_name = 'customer_code'),
'SELECT 1',
'ALTER TABLE biz_rule ADD COLUMN customer_code varchar(64) DEFAULT NULL COMMENT ''客户代码(空=全部)'' AFTER country_code'
)
);
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
-- migrate CSV rows: take first token only as best-effort (manual fix may be needed)
UPDATE biz_rule
SET product_code = NULLIF(TRIM(SUBSTRING_INDEX(REPLACE(IFNULL(product_codes,''), ' ', ''), ',', 1)), ''),
country_code = NULLIF(TRIM(SUBSTRING_INDEX(REPLACE(IFNULL(country_codes,''), ' ', ''), ',', 1)), ''),
customer_code = NULLIF(TRIM(SUBSTRING_INDEX(REPLACE(IFNULL(customer_codes,''), ' ', ''), ',', 1)), '')
WHERE product_code IS NULL
AND EXISTS(SELECT 1 FROM information_schema.columns WHERE table_schema = DATABASE() AND table_name = 'biz_rule' AND column_name = 'product_codes');
-- drop old CSV columns if present
SET @sql := (
SELECT IF(
EXISTS(SELECT 1 FROM information_schema.columns WHERE table_schema = DATABASE() AND table_name = 'biz_rule' AND column_name = 'product_codes'),
'ALTER TABLE biz_rule DROP COLUMN product_codes, DROP COLUMN country_codes, DROP COLUMN customer_codes',
'SELECT 1'
)
);
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
SET @sql := (
SELECT IF(
EXISTS(SELECT 1 FROM information_schema.statistics WHERE table_schema = DATABASE() AND table_name = 'biz_rule' AND index_name = 'idx_biz_rule_dim'),
'SELECT 1',
'ALTER TABLE biz_rule ADD KEY idx_biz_rule_dim (product_code, country_code, customer_code)'
)
);
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
+70
View File
@@ -0,0 +1,70 @@
-- Rule management: top-level sibling of data management (not nested under data)
SET NAMES utf8mb4;
-- locate data top menu to place rule management next to it
SET @dataMenuId := (
SELECT menu_id FROM sys_menu
WHERE path = 'data' AND menu_type = 'M' AND parent_id = 0
ORDER BY menu_id ASC LIMIT 1
);
SET @dataMenuId := IFNULL(@dataMenuId, (
SELECT menu_id FROM sys_menu
WHERE path = 'data' AND menu_type = 'M'
ORDER BY menu_id ASC LIMIT 1
));
SET @dataOrderNum := (SELECT IFNULL(order_num, 10) FROM sys_menu WHERE menu_id = @dataMenuId LIMIT 1);
SET @ruleOrderNum := IFNULL(@dataOrderNum, 10) + 1;
-- directory: rule management (parent_id = 0, sibling of data)
INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, query, route_name, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, remark)
SELECT 2480, N'规则管理', 0, @ruleOrderNum, 'rule', NULL, '', '', 1, 0, 'M', '0', '0', '', 'edit', 'admin', sysdate(), N'业务规则管理'
FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM sys_menu WHERE menu_id = 2480 OR (path = 'rule' AND parent_id = 0 AND menu_type = 'M'));
-- if already inserted under data, move to top level
UPDATE sys_menu
SET parent_id = 0,
order_num = @ruleOrderNum,
path = 'rule',
menu_type = 'M',
component = NULL,
update_time = sysdate()
WHERE menu_id = 2480
OR (menu_name = N'规则管理' AND menu_type = 'M' AND path = 'rule');
SET @ruleParentId := (SELECT menu_id FROM sys_menu WHERE menu_id = 2480 LIMIT 1);
SET @ruleParentId := IFNULL(@ruleParentId, (
SELECT menu_id FROM sys_menu WHERE path = 'rule' AND menu_type = 'M' AND parent_id = 0 ORDER BY menu_id ASC LIMIT 1
));
INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, query, route_name, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, remark)
SELECT 2481, N'规则配置', @ruleParentId, 1, 'config', 'data/rule/config/index', '', 'BizRuleConfig', 1, 0, 'C', '0', '0', 'data:bizRule:list', 'list', 'admin', sysdate(), N'计费重取值等业务规则'
FROM DUAL WHERE @ruleParentId IS NOT NULL AND NOT EXISTS (SELECT 1 FROM sys_menu WHERE menu_id = 2481 OR perms = 'data:bizRule:list');
-- ensure page menu hangs under top-level rule management
UPDATE sys_menu
SET parent_id = @ruleParentId,
path = 'config',
component = 'data/rule/config/index',
update_time = sysdate()
WHERE @ruleParentId IS NOT NULL
AND (menu_id = 2481 OR perms = 'data:bizRule:list');
INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time)
SELECT 2482, N'查询', 2481, 1, '', NULL, 1, 0, 'F', '0', '0', 'data:bizRule:query', '#', 'admin', sysdate()
FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM sys_menu WHERE menu_id = 2482 OR perms = 'data:bizRule:query');
INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time)
SELECT 2483, N'新增', 2481, 2, '', NULL, 1, 0, 'F', '0', '0', 'data:bizRule:add', '#', 'admin', sysdate()
FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM sys_menu WHERE menu_id = 2483 OR perms = 'data:bizRule:add');
INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time)
SELECT 2484, N'修改', 2481, 3, '', NULL, 1, 0, 'F', '0', '0', 'data:bizRule:edit', '#', 'admin', sysdate()
FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM sys_menu WHERE menu_id = 2484 OR perms = 'data:bizRule:edit');
INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time)
SELECT 2485, N'删除', 2481, 4, '', NULL, 1, 0, 'F', '0', '0', 'data:bizRule:remove', '#', 'admin', sysdate()
FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM sys_menu WHERE menu_id = 2485 OR perms = 'data:bizRule:remove');
INSERT INTO sys_role_menu (role_id, menu_id)
SELECT 1, m.menu_id FROM (SELECT 2480 AS menu_id UNION SELECT 2481 UNION SELECT 2482 UNION SELECT 2483 UNION SELECT 2484 UNION SELECT 2485) m
WHERE NOT EXISTS (SELECT 1 FROM sys_role_menu rm WHERE rm.role_id = 1 AND rm.menu_id = m.menu_id);
@@ -0,0 +1,24 @@
-- Rename tables: remove bms_ prefix (run once on existing DB)
SET NAMES utf8mb4;
-- bms_biz_rule -> biz_rule
SET @sql := (
SELECT IF(
EXISTS(SELECT 1 FROM information_schema.tables WHERE table_schema = DATABASE() AND table_name = 'bms_biz_rule')
AND NOT EXISTS(SELECT 1 FROM information_schema.tables WHERE table_schema = DATABASE() AND table_name = 'biz_rule'),
'RENAME TABLE bms_biz_rule TO biz_rule',
'SELECT 1'
)
);
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
-- bms_biz_attachment -> biz_attachment
SET @sql := (
SELECT IF(
EXISTS(SELECT 1 FROM information_schema.tables WHERE table_schema = DATABASE() AND table_name = 'bms_biz_attachment')
AND NOT EXISTS(SELECT 1 FROM information_schema.tables WHERE table_schema = DATABASE() AND table_name = 'biz_attachment'),
'RENAME TABLE bms_biz_attachment TO biz_attachment',
'SELECT 1'
)
);
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
@@ -1,7 +1,7 @@
-- 公共业务附件表(可复用:批量修改计费重导入等)
SET NAMES utf8mb4;
CREATE TABLE IF NOT EXISTS bms_biz_attachment (
CREATE TABLE IF NOT EXISTS biz_attachment (
attachment_id bigint(20) NOT NULL AUTO_INCREMENT COMMENT '附件ID',
biz_type varchar(64) NOT NULL COMMENT '业务类型(如 CHARGE_WEIGHT_IMPORT)',
biz_id varchar(64) DEFAULT NULL COMMENT '业务关联ID(如导入任务taskId)',
@@ -19,4 +19,4 @@ CREATE TABLE IF NOT EXISTS bms_biz_attachment (
PRIMARY KEY (attachment_id),
KEY idx_biz_attach_type_time (biz_type, create_time),
KEY idx_biz_attach_biz_id (biz_type, biz_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='公共业务附件';
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='公共业务附件';