-- Ticket08:记录每个数据来源的实际接收边界,并以独占租约防止并发重叠。
|
CREATE TABLE t_test_reception_interval (
|
interval_id BIGINT NOT NULL AUTO_INCREMENT,
|
test_id BIGINT NOT NULL,
|
binding_id BIGINT NULL,
|
source_type VARCHAR(32) NOT NULL,
|
source_id BIGINT NOT NULL,
|
source_channel_code VARCHAR(64) NULL,
|
action_at_utc DATETIME(3) NOT NULL,
|
start_boundary_at_utc DATETIME(3) NOT NULL,
|
end_boundary_at_utc DATETIME(3) NULL,
|
boundary_note VARCHAR(255) NULL,
|
interval_status VARCHAR(32) NOT NULL DEFAULT 'OPEN',
|
PRIMARY KEY (interval_id),
|
KEY idx_reception_interval_test (test_id, source_type, source_id, action_at_utc),
|
KEY idx_reception_interval_source (source_type, source_id, source_channel_code, start_boundary_at_utc),
|
CONSTRAINT fk_reception_interval_test FOREIGN KEY (test_id) REFERENCES t_test (test_id),
|
CONSTRAINT fk_reception_interval_binding FOREIGN KEY (binding_id) REFERENCES t_test_channel_binding (binding_id),
|
CONSTRAINT chk_reception_interval_source CHECK (source_type IN ('CABINET_CHANNEL', 'COLLECTOR_CHANNEL')),
|
CONSTRAINT chk_reception_interval_status CHECK (interval_status IN ('OPEN', 'CLOSED'))
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='测试数据接收区间';
|
|
CREATE TABLE t_collector_channel_lease (
|
collector_id BIGINT NOT NULL,
|
channel_code VARCHAR(64) NOT NULL,
|
test_id BIGINT NOT NULL,
|
binding_id BIGINT NOT NULL,
|
acquired_by BIGINT NULL,
|
acquired_at_utc DATETIME(3) NOT NULL,
|
PRIMARY KEY (collector_id, channel_code),
|
KEY idx_collector_lease_test (test_id),
|
CONSTRAINT fk_collector_lease_collector FOREIGN KEY (collector_id) REFERENCES t_collector (collector_id),
|
CONSTRAINT fk_collector_lease_test FOREIGN KEY (test_id) REFERENCES t_test (test_id),
|
CONSTRAINT fk_collector_lease_binding FOREIGN KEY (binding_id) REFERENCES t_test_channel_binding (binding_id)
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='活动采集器通道独占锁';
|
|
ALTER TABLE t_test
|
ADD KEY idx_test_reception_status (reception_status, test_status);
|
|
-- 为独立动作补充按钮权限;仅写系统菜单元数据,不导入演示业务数据。
|
SET @reception_menu_id := (SELECT COALESCE(MAX(menu_id), 0) + 1 FROM sys_menu);
|
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, update_by, update_time, remark)
|
SELECT @reception_menu_id, '开始接收', menu_id, 6, '', NULL, NULL, '', 1, 0, 'F', '0', '0',
|
'system:test:start', '#', 'admin', NOW(), '', NULL, '测试开始接收权限'
|
FROM sys_menu
|
WHERE perms = 'system:test:list'
|
LIMIT 1;
|