1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
-- 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;