generated from youfool-project/youfool-prj-springboot3-template
feat: 数据权限过滤 + 多模块查询增强 + 初始化数据
- 新增 DataScopeHelper 工具类,实现基于用户角色的数据权限过滤 - AM/CW/BS 三域 Service 集成数据权限,按区划/机构过滤查询结果 - RecordingTaskVO 新增录屏任务视图对象 - ScreenQuery/RecordingConfigQuery 支持多条件组合查询 - 补充 AM(录屏设置/任务/画面监控) + CW(取证/规则关联/线索) 初始化 SQL - 修正系统初始用户 BCrypt hash Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
parent
5540107aa1
commit
0f643376c0
|
|
@ -124,13 +124,14 @@ INSERT INTO OARMS.SYS_ROLE_PERMISSION (id, role_id, perm_id, create_by, create_t
|
||||||
|
|
||||||
-- ----------------------------------------------------------------------------
|
-- ----------------------------------------------------------------------------
|
||||||
-- 4. 初始用户(3 个,密码均为 123456 的 BCrypt)
|
-- 4. 初始用户(3 个,密码均为 123456 的 BCrypt)
|
||||||
-- BCrypt hash of '123456': $2a$10$N9qo8uLOickgx2ZMRZoMyeIjZAgcfl7p92ldGxad68LJZdL17lhWy
|
-- BCrypt hash of '123456': $2a$10$h4yKk0mn.Uad15AOE9IFwuSDC9XeuNxqZkrZ.Y2YLuk9KurltER1i
|
||||||
|
-- 注意:BCrypt 哈希每次生成不同,此为当前可用值。如需重新生成请使用 BCryptPasswordEncoder
|
||||||
-- 实际部署前请修改密码
|
-- 实际部署前请修改密码
|
||||||
-- ----------------------------------------------------------------------------
|
-- ----------------------------------------------------------------------------
|
||||||
INSERT INTO OARMS.SYS_USER (id, username, password, real_name, phone, org_name, district_code, status, create_by, create_time, create_name) VALUES
|
INSERT INTO OARMS.SYS_USER (id, username, password, real_name, phone, org_name, district_code, status, create_by, create_time, create_name) VALUES
|
||||||
('user_city_admin', 'city_admin', '$2a$10$N9qo8uLOickgx2ZMRZoMyeIjZAgcfl7p92ldGxad68LJZdL17lhWy', '市局管理员', '13800000001', '广州市市场监督管理局', NULL, 1, 'system', CURRENT_TIMESTAMP, '系统'),
|
('user_city_admin', 'city_admin', '$2a$10$h4yKk0mn.Uad15AOE9IFwuSDC9XeuNxqZkrZ.Y2YLuk9KurltER1i', '市局管理员', '13800000001', '广州市市场监督管理局', NULL, 1, 'system', CURRENT_TIMESTAMP, '系统'),
|
||||||
('user_district_admin', 'district_admin', '$2a$10$N9qo8uLOickgx2ZMRZoMyeIjZAgcfl7p92ldGxad68LJZdL17lhWy', '天河区管理员', '13800000002', '广州市天河区市场监督管理局', '440106', 1, 'system', CURRENT_TIMESTAMP, '系统'),
|
('user_district_admin', 'district_admin', '$2a$10$h4yKk0mn.Uad15AOE9IFwuSDC9XeuNxqZkrZ.Y2YLuk9KurltER1i', '天河区管理员', '13800000002', '广州市天河区市场监督管理局', '440106', 1, 'system', CURRENT_TIMESTAMP, '系统'),
|
||||||
('user_operator', 'operator', '$2a$10$N9qo8uLOickgx2ZMRZoMyeIjZAgcfl7p92ldGxad68LJZdL17lhWy', '运营商管理员', '13800000003', '广州文化传媒有限公司', '440106', 1, 'system', CURRENT_TIMESTAMP, '系统');
|
('user_operator', 'operator', '$2a$10$h4yKk0mn.Uad15AOE9IFwuSDC9XeuNxqZkrZ.Y2YLuk9KurltER1i', '运营商管理员', '13800000003', '广州文化传媒有限公司', '440106', 1, 'system', CURRENT_TIMESTAMP, '系统');
|
||||||
|
|
||||||
-- 用户角色关联
|
-- 用户角色关联
|
||||||
INSERT INTO OARMS.SYS_USER_ROLE (id, user_id, role_id, create_by, create_time, create_name) VALUES
|
INSERT INTO OARMS.SYS_USER_ROLE (id, user_id, role_id, create_by, create_time, create_name) VALUES
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,116 @@
|
||||||
|
-- ============================================================================
|
||||||
|
-- OARMS - AM-1 录屏配置管理 初始数据
|
||||||
|
-- Database: DM8 (达梦)
|
||||||
|
-- Schema: OARMS
|
||||||
|
-- Version: V3.0.1
|
||||||
|
-- Date: 2026-05-25
|
||||||
|
-- Description: 8 条录屏配置示例数据,基于 BS 大屏种子数据生成
|
||||||
|
-- Note:
|
||||||
|
-- 1. screen_id 关联 bs_screen.id (BS-SCR-001 ~ BS-SCR-008)
|
||||||
|
-- 2. 录屏时间范围均在对应大屏 ad_play_time_range 内
|
||||||
|
-- 3. 状态为 2(停用) 的大屏/维修中的大屏,配置状态设为已停用
|
||||||
|
-- ============================================================================
|
||||||
|
|
||||||
|
-- 1. 天河路正佳广场 (广告播放 07:00-22:00) → 录屏 07:00-21:30
|
||||||
|
INSERT INTO OARMS.AM_RECORDING_CONFIG (
|
||||||
|
ID, SCREEN_ID, SCREEN_NAME, SCREEN_ADDRESS, DISTRICT,
|
||||||
|
RECORD_START_TIME, RECORD_END_TIME, RECORD_DURATION, RECORD_FREQUENCY, CONFIG_STATUS,
|
||||||
|
CREATE_BY, CREATE_TIME, CREATE_NAME, UPDATE_BY, UPDATE_TIME, UPDATE_NAME
|
||||||
|
) VALUES (
|
||||||
|
'AM-RC-001', 'BS-SCR-001', '天河路正佳广场LED大屏',
|
||||||
|
'广州市天河区天河路228号正佳广场', '440106',
|
||||||
|
'07:00', '21:30', 30, 15, 1,
|
||||||
|
'system', TO_TIMESTAMP('2026-05-18 10:30:00', 'YYYY-MM-DD HH24:MI:SS'), '系统管理员',
|
||||||
|
'system', TO_TIMESTAMP('2026-05-18 10:30:00', 'YYYY-MM-DD HH24:MI:SS'), '系统管理员'
|
||||||
|
);
|
||||||
|
|
||||||
|
-- 2. 北京路广百百货 (广告播放 08:00-22:30) → 录屏 08:00-22:00
|
||||||
|
INSERT INTO OARMS.AM_RECORDING_CONFIG (
|
||||||
|
ID, SCREEN_ID, SCREEN_NAME, SCREEN_ADDRESS, DISTRICT,
|
||||||
|
RECORD_START_TIME, RECORD_END_TIME, RECORD_DURATION, RECORD_FREQUENCY, CONFIG_STATUS,
|
||||||
|
CREATE_BY, CREATE_TIME, CREATE_NAME, UPDATE_BY, UPDATE_TIME, UPDATE_NAME
|
||||||
|
) VALUES (
|
||||||
|
'AM-RC-002', 'BS-SCR-002', '北京路广百百货LED大屏',
|
||||||
|
'广州市越秀区北京路298号广百百货', '440104',
|
||||||
|
'08:00', '22:00', 20, 10, 1,
|
||||||
|
'system', TO_TIMESTAMP('2026-05-18 10:35:00', 'YYYY-MM-DD HH24:MI:SS'), '系统管理员',
|
||||||
|
'system', TO_TIMESTAMP('2026-05-18 10:35:00', 'YYYY-MM-DD HH24:MI:SS'), '系统管理员'
|
||||||
|
);
|
||||||
|
|
||||||
|
-- 3. 江南西路海珠万达广场 (广告播放 07:30-22:00) → 录屏 08:00-21:30
|
||||||
|
INSERT INTO OARMS.AM_RECORDING_CONFIG (
|
||||||
|
ID, SCREEN_ID, SCREEN_NAME, SCREEN_ADDRESS, DISTRICT,
|
||||||
|
RECORD_START_TIME, RECORD_END_TIME, RECORD_DURATION, RECORD_FREQUENCY, CONFIG_STATUS,
|
||||||
|
CREATE_BY, CREATE_TIME, CREATE_NAME, UPDATE_BY, UPDATE_TIME, UPDATE_NAME
|
||||||
|
) VALUES (
|
||||||
|
'AM-RC-003', 'BS-SCR-003', '江南西路海珠万达广场LED大屏',
|
||||||
|
'广州市海珠区江南西路46号海珠万达广场', '440105',
|
||||||
|
'08:00', '21:30', 30, 20, 1,
|
||||||
|
'system', TO_TIMESTAMP('2026-05-18 10:40:00', 'YYYY-MM-DD HH24:MI:SS'), '系统管理员',
|
||||||
|
'system', TO_TIMESTAMP('2026-05-18 10:40:00', 'YYYY-MM-DD HH24:MI:SS'), '系统管理员'
|
||||||
|
);
|
||||||
|
|
||||||
|
-- 4. 上下九步行街 (广告播放 09:00-22:00) → 录屏 09:00-21:00
|
||||||
|
INSERT INTO OARMS.AM_RECORDING_CONFIG (
|
||||||
|
ID, SCREEN_ID, SCREEN_NAME, SCREEN_ADDRESS, DISTRICT,
|
||||||
|
RECORD_START_TIME, RECORD_END_TIME, RECORD_DURATION, RECORD_FREQUENCY, CONFIG_STATUS,
|
||||||
|
CREATE_BY, CREATE_TIME, CREATE_NAME, UPDATE_BY, UPDATE_TIME, UPDATE_NAME
|
||||||
|
) VALUES (
|
||||||
|
'AM-RC-004', 'BS-SCR-004', '上下九步行街LED大屏',
|
||||||
|
'广州市荔湾区下九路6号上下九广场', '440103',
|
||||||
|
'09:00', '21:00', 15, 30, 1,
|
||||||
|
'system', TO_TIMESTAMP('2026-05-18 10:45:00', 'YYYY-MM-DD HH24:MI:SS'), '系统管理员',
|
||||||
|
'system', TO_TIMESTAMP('2026-05-18 10:45:00', 'YYYY-MM-DD HH24:MI:SS'), '系统管理员'
|
||||||
|
);
|
||||||
|
|
||||||
|
-- 5. 白云大道白云万达广场 (广告播放 07:00-23:00) → 录屏 07:00-22:00
|
||||||
|
INSERT INTO OARMS.AM_RECORDING_CONFIG (
|
||||||
|
ID, SCREEN_ID, SCREEN_NAME, SCREEN_ADDRESS, DISTRICT,
|
||||||
|
RECORD_START_TIME, RECORD_END_TIME, RECORD_DURATION, RECORD_FREQUENCY, CONFIG_STATUS,
|
||||||
|
CREATE_BY, CREATE_TIME, CREATE_NAME, UPDATE_BY, UPDATE_TIME, UPDATE_NAME
|
||||||
|
) VALUES (
|
||||||
|
'AM-RC-005', 'BS-SCR-005', '白云大道白云万达广场LED大屏',
|
||||||
|
'广州市白云区云城东路501号白云万达广场', '440111',
|
||||||
|
'07:00', '22:00', 60, 15, 1,
|
||||||
|
'system', TO_TIMESTAMP('2026-05-18 10:50:00', 'YYYY-MM-DD HH24:MI:SS'), '系统管理员',
|
||||||
|
'system', TO_TIMESTAMP('2026-05-18 10:50:00', 'YYYY-MM-DD HH24:MI:SS'), '系统管理员'
|
||||||
|
);
|
||||||
|
|
||||||
|
-- 6. 科学城揽月路 (广告播放 08:00-21:00, 大屏已停用) → 录屏 08:00-20:30, 配置已停用
|
||||||
|
INSERT INTO OARMS.AM_RECORDING_CONFIG (
|
||||||
|
ID, SCREEN_ID, SCREEN_NAME, SCREEN_ADDRESS, DISTRICT,
|
||||||
|
RECORD_START_TIME, RECORD_END_TIME, RECORD_DURATION, RECORD_FREQUENCY, CONFIG_STATUS,
|
||||||
|
CREATE_BY, CREATE_TIME, CREATE_NAME, UPDATE_BY, UPDATE_TIME, UPDATE_NAME
|
||||||
|
) VALUES (
|
||||||
|
'AM-RC-006', 'BS-SCR-006', '科学城揽月路LED大屏',
|
||||||
|
'广州市黄埔区科学城揽月路101号', '440112',
|
||||||
|
'08:00', '20:30', 20, 10, 2,
|
||||||
|
'system', TO_TIMESTAMP('2026-05-18 10:55:00', 'YYYY-MM-DD HH24:MI:SS'), '系统管理员',
|
||||||
|
'system', TO_TIMESTAMP('2026-05-18 10:55:00', 'YYYY-MM-DD HH24:MI:SS'), '系统管理员'
|
||||||
|
);
|
||||||
|
|
||||||
|
-- 7. 市桥大北路番禺广场 (广告播放 07:30-22:30) → 录屏 08:00-22:00
|
||||||
|
INSERT INTO OARMS.AM_RECORDING_CONFIG (
|
||||||
|
ID, SCREEN_ID, SCREEN_NAME, SCREEN_ADDRESS, DISTRICT,
|
||||||
|
RECORD_START_TIME, RECORD_END_TIME, RECORD_DURATION, RECORD_FREQUENCY, CONFIG_STATUS,
|
||||||
|
CREATE_BY, CREATE_TIME, CREATE_NAME, UPDATE_BY, UPDATE_TIME, UPDATE_NAME
|
||||||
|
) VALUES (
|
||||||
|
'AM-RC-007', 'BS-SCR-007', '市桥大北路番禺广场LED大屏',
|
||||||
|
'广州市番禺区市桥街大北路101号番禺广场', '440113',
|
||||||
|
'08:00', '22:00', 30, 15, 1,
|
||||||
|
'system', TO_TIMESTAMP('2026-05-18 11:00:00', 'YYYY-MM-DD HH24:MI:SS'), '系统管理员',
|
||||||
|
'system', TO_TIMESTAMP('2026-05-18 11:00:00', 'YYYY-MM-DD HH24:MI:SS'), '系统管理员'
|
||||||
|
);
|
||||||
|
|
||||||
|
-- 8. 新华路花都广场 (广告播放 08:00-21:30, 大屏维修中) → 录屏 08:30-21:00, 配置已停用
|
||||||
|
INSERT INTO OARMS.AM_RECORDING_CONFIG (
|
||||||
|
ID, SCREEN_ID, SCREEN_NAME, SCREEN_ADDRESS, DISTRICT,
|
||||||
|
RECORD_START_TIME, RECORD_END_TIME, RECORD_DURATION, RECORD_FREQUENCY, CONFIG_STATUS,
|
||||||
|
CREATE_BY, CREATE_TIME, CREATE_NAME, UPDATE_BY, UPDATE_TIME, UPDATE_NAME
|
||||||
|
) VALUES (
|
||||||
|
'AM-RC-008', 'BS-SCR-008', '新华路花都广场LED大屏',
|
||||||
|
'广州市花都区新华街公益路21号花都广场', '440114',
|
||||||
|
'08:30', '21:00', 15, 20, 2,
|
||||||
|
'system', TO_TIMESTAMP('2026-05-18 11:05:00', 'YYYY-MM-DD HH24:MI:SS'), '系统管理员',
|
||||||
|
'system', TO_TIMESTAMP('2026-05-18 11:05:00', 'YYYY-MM-DD HH24:MI:SS'), '系统管理员'
|
||||||
|
);
|
||||||
|
|
@ -0,0 +1,243 @@
|
||||||
|
-- ============================================================================
|
||||||
|
-- OARMS - AM-2 录屏任务管理 初始数据
|
||||||
|
-- Database: DM8 (达梦)
|
||||||
|
-- Schema: OARMS
|
||||||
|
-- Version: V4.0.1
|
||||||
|
-- Date: 2026-05-25
|
||||||
|
-- Description: 基于 V3.0.1 录屏配置生成的 16 条录屏任务示例数据
|
||||||
|
-- Note:
|
||||||
|
-- 1. 每条 task 关联 AM-RC-001 ~ AM-RC-008 的录屏配置
|
||||||
|
-- 2. 已启用配置(1)生成已完成(2)和录屏中(1)任务
|
||||||
|
-- 3. 已停用配置(2)生成失败(3)任务
|
||||||
|
-- 4. actual_start_time 在对应配置录屏时间范围内
|
||||||
|
-- ============================================================================
|
||||||
|
|
||||||
|
-- ===================== 已启用配置对应的任务 =====================
|
||||||
|
|
||||||
|
-- 1-1. 天河路正佳广场 → 已完成
|
||||||
|
INSERT INTO OARMS.AM_RECORDING_TASK (
|
||||||
|
ID, SCREEN_ID, CONFIG_ID, ACTUAL_START_TIME, ACTUAL_END_TIME,
|
||||||
|
TASK_STATUS, VIDEO_FILE_PATH, RETRY_COUNT, ERROR_MESSAGE,
|
||||||
|
CREATE_BY, CREATE_TIME, CREATE_NAME, UPDATE_BY, UPDATE_TIME, UPDATE_NAME
|
||||||
|
) VALUES (
|
||||||
|
'AM-RT-001', 'BS-SCR-001', 'AM-RC-001',
|
||||||
|
TO_TIMESTAMP('2026-05-25 07:00:00', 'YYYY-MM-DD HH24:MI:SS'),
|
||||||
|
TO_TIMESTAMP('2026-05-25 07:30:00', 'YYYY-MM-DD HH24:MI:SS'),
|
||||||
|
2, '/video/2026-05-25/BS-SCR-001_0700.mp4', 0, NULL,
|
||||||
|
'system', TO_TIMESTAMP('2026-05-25 07:00:00', 'YYYY-MM-DD HH24:MI:SS'), '系统',
|
||||||
|
'system', TO_TIMESTAMP('2026-05-25 07:30:00', 'YYYY-MM-DD HH24:MI:SS'), '系统'
|
||||||
|
);
|
||||||
|
|
||||||
|
-- 1-2. 天河路正佳广场 → 已完成
|
||||||
|
INSERT INTO OARMS.AM_RECORDING_TASK (
|
||||||
|
ID, SCREEN_ID, CONFIG_ID, ACTUAL_START_TIME, ACTUAL_END_TIME,
|
||||||
|
TASK_STATUS, VIDEO_FILE_PATH, RETRY_COUNT, ERROR_MESSAGE,
|
||||||
|
CREATE_BY, CREATE_TIME, CREATE_NAME, UPDATE_BY, UPDATE_TIME, UPDATE_NAME
|
||||||
|
) VALUES (
|
||||||
|
'AM-RT-002', 'BS-SCR-001', 'AM-RC-001',
|
||||||
|
TO_TIMESTAMP('2026-05-25 07:30:00', 'YYYY-MM-DD HH24:MI:SS'),
|
||||||
|
TO_TIMESTAMP('2026-05-25 08:00:00', 'YYYY-MM-DD HH24:MI:SS'),
|
||||||
|
2, '/video/2026-05-25/BS-SCR-001_0730.mp4', 0, NULL,
|
||||||
|
'system', TO_TIMESTAMP('2026-05-25 07:30:00', 'YYYY-MM-DD HH24:MI:SS'), '系统',
|
||||||
|
'system', TO_TIMESTAMP('2026-05-25 08:00:00', 'YYYY-MM-DD HH24:MI:SS'), '系统'
|
||||||
|
);
|
||||||
|
|
||||||
|
-- 2-1. 北京路广百百货 → 已完成
|
||||||
|
INSERT INTO OARMS.AM_RECORDING_TASK (
|
||||||
|
ID, SCREEN_ID, CONFIG_ID, ACTUAL_START_TIME, ACTUAL_END_TIME,
|
||||||
|
TASK_STATUS, VIDEO_FILE_PATH, RETRY_COUNT, ERROR_MESSAGE,
|
||||||
|
CREATE_BY, CREATE_TIME, CREATE_NAME, UPDATE_BY, UPDATE_TIME, UPDATE_NAME
|
||||||
|
) VALUES (
|
||||||
|
'AM-RT-003', 'BS-SCR-002', 'AM-RC-002',
|
||||||
|
TO_TIMESTAMP('2026-05-25 08:00:00', 'YYYY-MM-DD HH24:MI:SS'),
|
||||||
|
TO_TIMESTAMP('2026-05-25 08:20:00', 'YYYY-MM-DD HH24:MI:SS'),
|
||||||
|
2, '/video/2026-05-25/BS-SCR-002_0800.mp4', 0, NULL,
|
||||||
|
'system', TO_TIMESTAMP('2026-05-25 08:00:00', 'YYYY-MM-DD HH24:MI:SS'), '系统',
|
||||||
|
'system', TO_TIMESTAMP('2026-05-25 08:20:00', 'YYYY-MM-DD HH24:MI:SS'), '系统'
|
||||||
|
);
|
||||||
|
|
||||||
|
-- 2-2. 北京路广百百货 → 录屏中
|
||||||
|
INSERT INTO OARMS.AM_RECORDING_TASK (
|
||||||
|
ID, SCREEN_ID, CONFIG_ID, ACTUAL_START_TIME, ACTUAL_END_TIME,
|
||||||
|
TASK_STATUS, VIDEO_FILE_PATH, RETRY_COUNT, ERROR_MESSAGE,
|
||||||
|
CREATE_BY, CREATE_TIME, CREATE_NAME, UPDATE_BY, UPDATE_TIME, UPDATE_NAME
|
||||||
|
) VALUES (
|
||||||
|
'AM-RT-004', 'BS-SCR-002', 'AM-RC-002',
|
||||||
|
TO_TIMESTAMP('2026-05-25 08:20:00', 'YYYY-MM-DD HH24:MI:SS'),
|
||||||
|
NULL,
|
||||||
|
1, NULL, 0, NULL,
|
||||||
|
'system', TO_TIMESTAMP('2026-05-25 08:20:00', 'YYYY-MM-DD HH24:MI:SS'), '系统',
|
||||||
|
'system', TO_TIMESTAMP('2026-05-25 08:20:00', 'YYYY-MM-DD HH24:MI:SS'), '系统'
|
||||||
|
);
|
||||||
|
|
||||||
|
-- 3-1. 江南西路海珠万达广场 → 已完成
|
||||||
|
INSERT INTO OARMS.AM_RECORDING_TASK (
|
||||||
|
ID, SCREEN_ID, CONFIG_ID, ACTUAL_START_TIME, ACTUAL_END_TIME,
|
||||||
|
TASK_STATUS, VIDEO_FILE_PATH, RETRY_COUNT, ERROR_MESSAGE,
|
||||||
|
CREATE_BY, CREATE_TIME, CREATE_NAME, UPDATE_BY, UPDATE_TIME, UPDATE_NAME
|
||||||
|
) VALUES (
|
||||||
|
'AM-RT-005', 'BS-SCR-003', 'AM-RC-003',
|
||||||
|
TO_TIMESTAMP('2026-05-25 08:00:00', 'YYYY-MM-DD HH24:MI:SS'),
|
||||||
|
TO_TIMESTAMP('2026-05-25 08:30:00', 'YYYY-MM-DD HH24:MI:SS'),
|
||||||
|
2, '/video/2026-05-25/BS-SCR-003_0800.mp4', 0, NULL,
|
||||||
|
'system', TO_TIMESTAMP('2026-05-25 08:00:00', 'YYYY-MM-DD HH24:MI:SS'), '系统',
|
||||||
|
'system', TO_TIMESTAMP('2026-05-25 08:30:00', 'YYYY-MM-DD HH24:MI:SS'), '系统'
|
||||||
|
);
|
||||||
|
|
||||||
|
-- 3-2. 江南西路海珠万达广场 → 已完成
|
||||||
|
INSERT INTO OARMS.AM_RECORDING_TASK (
|
||||||
|
ID, SCREEN_ID, CONFIG_ID, ACTUAL_START_TIME, ACTUAL_END_TIME,
|
||||||
|
TASK_STATUS, VIDEO_FILE_PATH, RETRY_COUNT, ERROR_MESSAGE,
|
||||||
|
CREATE_BY, CREATE_TIME, CREATE_NAME, UPDATE_BY, UPDATE_TIME, UPDATE_NAME
|
||||||
|
) VALUES (
|
||||||
|
'AM-RT-006', 'BS-SCR-003', 'AM-RC-003',
|
||||||
|
TO_TIMESTAMP('2026-05-25 08:30:00', 'YYYY-MM-DD HH24:MI:SS'),
|
||||||
|
TO_TIMESTAMP('2026-05-25 09:00:00', 'YYYY-MM-DD HH24:MI:SS'),
|
||||||
|
2, '/video/2026-05-25/BS-SCR-003_0830.mp4', 0, NULL,
|
||||||
|
'system', TO_TIMESTAMP('2026-05-25 08:30:00', 'YYYY-MM-DD HH24:MI:SS'), '系统',
|
||||||
|
'system', TO_TIMESTAMP('2026-05-25 09:00:00', 'YYYY-MM-DD HH24:MI:SS'), '系统'
|
||||||
|
);
|
||||||
|
|
||||||
|
-- 4-1. 上下九步行街 → 已完成
|
||||||
|
INSERT INTO OARMS.AM_RECORDING_TASK (
|
||||||
|
ID, SCREEN_ID, CONFIG_ID, ACTUAL_START_TIME, ACTUAL_END_TIME,
|
||||||
|
TASK_STATUS, VIDEO_FILE_PATH, RETRY_COUNT, ERROR_MESSAGE,
|
||||||
|
CREATE_BY, CREATE_TIME, CREATE_NAME, UPDATE_BY, UPDATE_TIME, UPDATE_NAME
|
||||||
|
) VALUES (
|
||||||
|
'AM-RT-007', 'BS-SCR-004', 'AM-RC-004',
|
||||||
|
TO_TIMESTAMP('2026-05-25 09:00:00', 'YYYY-MM-DD HH24:MI:SS'),
|
||||||
|
TO_TIMESTAMP('2026-05-25 09:15:00', 'YYYY-MM-DD HH24:MI:SS'),
|
||||||
|
2, '/video/2026-05-25/BS-SCR-004_0900.mp4', 0, NULL,
|
||||||
|
'system', TO_TIMESTAMP('2026-05-25 09:00:00', 'YYYY-MM-DD HH24:MI:SS'), '系统',
|
||||||
|
'system', TO_TIMESTAMP('2026-05-25 09:15:00', 'YYYY-MM-DD HH24:MI:SS'), '系统'
|
||||||
|
);
|
||||||
|
|
||||||
|
-- 4-2. 上下九步行街 → 录屏中
|
||||||
|
INSERT INTO OARMS.AM_RECORDING_TASK (
|
||||||
|
ID, SCREEN_ID, CONFIG_ID, ACTUAL_START_TIME, ACTUAL_END_TIME,
|
||||||
|
TASK_STATUS, VIDEO_FILE_PATH, RETRY_COUNT, ERROR_MESSAGE,
|
||||||
|
CREATE_BY, CREATE_TIME, CREATE_NAME, UPDATE_BY, UPDATE_TIME, UPDATE_NAME
|
||||||
|
) VALUES (
|
||||||
|
'AM-RT-008', 'BS-SCR-004', 'AM-RC-004',
|
||||||
|
TO_TIMESTAMP('2026-05-25 09:15:00', 'YYYY-MM-DD HH24:MI:SS'),
|
||||||
|
NULL,
|
||||||
|
1, NULL, 0, NULL,
|
||||||
|
'system', TO_TIMESTAMP('2026-05-25 09:15:00', 'YYYY-MM-DD HH24:MI:SS'), '系统',
|
||||||
|
'system', TO_TIMESTAMP('2026-05-25 09:15:00', 'YYYY-MM-DD HH24:MI:SS'), '系统'
|
||||||
|
);
|
||||||
|
|
||||||
|
-- 5-1. 白云大道白云万达广场 → 已完成
|
||||||
|
INSERT INTO OARMS.AM_RECORDING_TASK (
|
||||||
|
ID, SCREEN_ID, CONFIG_ID, ACTUAL_START_TIME, ACTUAL_END_TIME,
|
||||||
|
TASK_STATUS, VIDEO_FILE_PATH, RETRY_COUNT, ERROR_MESSAGE,
|
||||||
|
CREATE_BY, CREATE_TIME, CREATE_NAME, UPDATE_BY, UPDATE_TIME, UPDATE_NAME
|
||||||
|
) VALUES (
|
||||||
|
'AM-RT-009', 'BS-SCR-005', 'AM-RC-005',
|
||||||
|
TO_TIMESTAMP('2026-05-25 07:00:00', 'YYYY-MM-DD HH24:MI:SS'),
|
||||||
|
TO_TIMESTAMP('2026-05-25 08:00:00', 'YYYY-MM-DD HH24:MI:SS'),
|
||||||
|
2, '/video/2026-05-25/BS-SCR-005_0700.mp4', 0, NULL,
|
||||||
|
'system', TO_TIMESTAMP('2026-05-25 07:00:00', 'YYYY-MM-DD HH24:MI:SS'), '系统',
|
||||||
|
'system', TO_TIMESTAMP('2026-05-25 08:00:00', 'YYYY-MM-DD HH24:MI:SS'), '系统'
|
||||||
|
);
|
||||||
|
|
||||||
|
-- 5-2. 白云大道白云万达广场 → 已完成
|
||||||
|
INSERT INTO OARMS.AM_RECORDING_TASK (
|
||||||
|
ID, SCREEN_ID, CONFIG_ID, ACTUAL_START_TIME, ACTUAL_END_TIME,
|
||||||
|
TASK_STATUS, VIDEO_FILE_PATH, RETRY_COUNT, ERROR_MESSAGE,
|
||||||
|
CREATE_BY, CREATE_TIME, CREATE_NAME, UPDATE_BY, UPDATE_TIME, UPDATE_NAME
|
||||||
|
) VALUES (
|
||||||
|
'AM-RT-010', 'BS-SCR-005', 'AM-RC-005',
|
||||||
|
TO_TIMESTAMP('2026-05-25 08:00:00', 'YYYY-MM-DD HH24:MI:SS'),
|
||||||
|
TO_TIMESTAMP('2026-05-25 09:00:00', 'YYYY-MM-DD HH24:MI:SS'),
|
||||||
|
2, '/video/2026-05-25/BS-SCR-005_0800.mp4', 0, NULL,
|
||||||
|
'system', TO_TIMESTAMP('2026-05-25 08:00:00', 'YYYY-MM-DD HH24:MI:SS'), '系统',
|
||||||
|
'system', TO_TIMESTAMP('2026-05-25 09:00:00', 'YYYY-MM-DD HH24:MI:SS'), '系统'
|
||||||
|
);
|
||||||
|
|
||||||
|
-- 7-1. 市桥大北路番禺广场 → 已完成
|
||||||
|
INSERT INTO OARMS.AM_RECORDING_TASK (
|
||||||
|
ID, SCREEN_ID, CONFIG_ID, ACTUAL_START_TIME, ACTUAL_END_TIME,
|
||||||
|
TASK_STATUS, VIDEO_FILE_PATH, RETRY_COUNT, ERROR_MESSAGE,
|
||||||
|
CREATE_BY, CREATE_TIME, CREATE_NAME, UPDATE_BY, UPDATE_TIME, UPDATE_NAME
|
||||||
|
) VALUES (
|
||||||
|
'AM-RT-011', 'BS-SCR-007', 'AM-RC-007',
|
||||||
|
TO_TIMESTAMP('2026-05-25 08:00:00', 'YYYY-MM-DD HH24:MI:SS'),
|
||||||
|
TO_TIMESTAMP('2026-05-25 08:30:00', 'YYYY-MM-DD HH24:MI:SS'),
|
||||||
|
2, '/video/2026-05-25/BS-SCR-007_0800.mp4', 0, NULL,
|
||||||
|
'system', TO_TIMESTAMP('2026-05-25 08:00:00', 'YYYY-MM-DD HH24:MI:SS'), '系统',
|
||||||
|
'system', TO_TIMESTAMP('2026-05-25 08:30:00', 'YYYY-MM-DD HH24:MI:SS'), '系统'
|
||||||
|
);
|
||||||
|
|
||||||
|
-- 7-2. 市桥大北路番禺广场 → 录屏中
|
||||||
|
INSERT INTO OARMS.AM_RECORDING_TASK (
|
||||||
|
ID, SCREEN_ID, CONFIG_ID, ACTUAL_START_TIME, ACTUAL_END_TIME,
|
||||||
|
TASK_STATUS, VIDEO_FILE_PATH, RETRY_COUNT, ERROR_MESSAGE,
|
||||||
|
CREATE_BY, CREATE_TIME, CREATE_NAME, UPDATE_BY, UPDATE_TIME, UPDATE_NAME
|
||||||
|
) VALUES (
|
||||||
|
'AM-RT-012', 'BS-SCR-007', 'AM-RC-007',
|
||||||
|
TO_TIMESTAMP('2026-05-25 08:30:00', 'YYYY-MM-DD HH24:MI:SS'),
|
||||||
|
NULL,
|
||||||
|
1, NULL, 0, NULL,
|
||||||
|
'system', TO_TIMESTAMP('2026-05-25 08:30:00', 'YYYY-MM-DD HH24:MI:SS'), '系统',
|
||||||
|
'system', TO_TIMESTAMP('2026-05-25 08:30:00', 'YYYY-MM-DD HH24:MI:SS'), '系统'
|
||||||
|
);
|
||||||
|
|
||||||
|
-- ===================== 已停用配置对应的失败任务 =====================
|
||||||
|
|
||||||
|
-- 6-1. 科学城揽月路(配置已停用) → 失败
|
||||||
|
INSERT INTO OARMS.AM_RECORDING_TASK (
|
||||||
|
ID, SCREEN_ID, CONFIG_ID, ACTUAL_START_TIME, ACTUAL_END_TIME,
|
||||||
|
TASK_STATUS, VIDEO_FILE_PATH, RETRY_COUNT, ERROR_MESSAGE,
|
||||||
|
CREATE_BY, CREATE_TIME, CREATE_NAME, UPDATE_BY, UPDATE_TIME, UPDATE_NAME
|
||||||
|
) VALUES (
|
||||||
|
'AM-RT-013', 'BS-SCR-006', 'AM-RC-006',
|
||||||
|
TO_TIMESTAMP('2026-05-25 08:00:00', 'YYYY-MM-DD HH24:MI:SS'),
|
||||||
|
TO_TIMESTAMP('2026-05-25 08:05:00', 'YYYY-MM-DD HH24:MI:SS'),
|
||||||
|
3, NULL, 3, '设备离线,录屏失败',
|
||||||
|
'system', TO_TIMESTAMP('2026-05-25 08:00:00', 'YYYY-MM-DD HH24:MI:SS'), '系统',
|
||||||
|
'system', TO_TIMESTAMP('2026-05-25 08:05:00', 'YYYY-MM-DD HH24:MI:SS'), '系统'
|
||||||
|
);
|
||||||
|
|
||||||
|
-- 8-1. 新华路花都广场(配置已停用,大屏维修中) → 失败
|
||||||
|
INSERT INTO OARMS.AM_RECORDING_TASK (
|
||||||
|
ID, SCREEN_ID, CONFIG_ID, ACTUAL_START_TIME, ACTUAL_END_TIME,
|
||||||
|
TASK_STATUS, VIDEO_FILE_PATH, RETRY_COUNT, ERROR_MESSAGE,
|
||||||
|
CREATE_BY, CREATE_TIME, CREATE_NAME, UPDATE_BY, UPDATE_TIME, UPDATE_NAME
|
||||||
|
) VALUES (
|
||||||
|
'AM-RT-014', 'BS-SCR-008', 'AM-RC-008',
|
||||||
|
TO_TIMESTAMP('2026-05-25 08:30:00', 'YYYY-MM-DD HH24:MI:SS'),
|
||||||
|
TO_TIMESTAMP('2026-05-25 08:35:00', 'YYYY-MM-DD HH24:MI:SS'),
|
||||||
|
3, NULL, 2, '设备维修中,无法连接',
|
||||||
|
'system', TO_TIMESTAMP('2026-05-25 08:30:00', 'YYYY-MM-DD HH24:MI:SS'), '系统',
|
||||||
|
'system', TO_TIMESTAMP('2026-05-25 08:35:00', 'YYYY-MM-DD HH24:MI:SS'), '系统'
|
||||||
|
);
|
||||||
|
|
||||||
|
-- ===================== 历史日期任务(前一天) =====================
|
||||||
|
|
||||||
|
-- 1-3. 天河路正佳广场(前一天) → 已完成
|
||||||
|
INSERT INTO OARMS.AM_RECORDING_TASK (
|
||||||
|
ID, SCREEN_ID, CONFIG_ID, ACTUAL_START_TIME, ACTUAL_END_TIME,
|
||||||
|
TASK_STATUS, VIDEO_FILE_PATH, RETRY_COUNT, ERROR_MESSAGE,
|
||||||
|
CREATE_BY, CREATE_TIME, CREATE_NAME, UPDATE_BY, UPDATE_TIME, UPDATE_NAME
|
||||||
|
) VALUES (
|
||||||
|
'AM-RT-015', 'BS-SCR-001', 'AM-RC-001',
|
||||||
|
TO_TIMESTAMP('2026-05-24 07:00:00', 'YYYY-MM-DD HH24:MI:SS'),
|
||||||
|
TO_TIMESTAMP('2026-05-24 07:30:00', 'YYYY-MM-DD HH24:MI:SS'),
|
||||||
|
2, '/video/2026-05-24/BS-SCR-001_0700.mp4', 0, NULL,
|
||||||
|
'system', TO_TIMESTAMP('2026-05-24 07:00:00', 'YYYY-MM-DD HH24:MI:SS'), '系统',
|
||||||
|
'system', TO_TIMESTAMP('2026-05-24 07:30:00', 'YYYY-MM-DD HH24:MI:SS'), '系统'
|
||||||
|
);
|
||||||
|
|
||||||
|
-- 3-3. 江南西路海珠万达广场(前一天) → 已完成
|
||||||
|
INSERT INTO OARMS.AM_RECORDING_TASK (
|
||||||
|
ID, SCREEN_ID, CONFIG_ID, ACTUAL_START_TIME, ACTUAL_END_TIME,
|
||||||
|
TASK_STATUS, VIDEO_FILE_PATH, RETRY_COUNT, ERROR_MESSAGE,
|
||||||
|
CREATE_BY, CREATE_TIME, CREATE_NAME, UPDATE_BY, UPDATE_TIME, UPDATE_NAME
|
||||||
|
) VALUES (
|
||||||
|
'AM-RT-016', 'BS-SCR-003', 'AM-RC-003',
|
||||||
|
TO_TIMESTAMP('2026-05-24 08:00:00', 'YYYY-MM-DD HH24:MI:SS'),
|
||||||
|
TO_TIMESTAMP('2026-05-24 08:30:00', 'YYYY-MM-DD HH24:MI:SS'),
|
||||||
|
2, '/video/2026-05-24/BS-SCR-003_0800.mp4', 0, NULL,
|
||||||
|
'system', TO_TIMESTAMP('2026-05-24 08:00:00', 'YYYY-MM-DD HH24:MI:SS'), '系统',
|
||||||
|
'system', TO_TIMESTAMP('2026-05-24 08:30:00', 'YYYY-MM-DD HH24:MI:SS'), '系统'
|
||||||
|
);
|
||||||
|
|
@ -0,0 +1,180 @@
|
||||||
|
-- ============================================================================
|
||||||
|
-- OARMS - AM-3 监控记录管理 初始数据
|
||||||
|
-- Database: DM8 (达梦)
|
||||||
|
-- Schema: OARMS
|
||||||
|
-- Version: V5.0.1
|
||||||
|
-- Date: 2026-05-25
|
||||||
|
-- Description: 基于 V4.0.1 录屏任务生成的 12 条监控记录
|
||||||
|
-- Note:
|
||||||
|
-- 1. 每条记录关联已完成的录屏任务
|
||||||
|
-- 2. screen_name/screen_address/district 冗余存储
|
||||||
|
-- 3. 混合各种监控状态
|
||||||
|
-- ============================================================================
|
||||||
|
|
||||||
|
-- 已完成任务的监控记录 → 已完成(3)或违规(4)
|
||||||
|
|
||||||
|
-- 1. 天河路正佳广场 → 已监控正常
|
||||||
|
INSERT INTO OARMS.AM_MONITOR_RECORD (
|
||||||
|
ID, TASK_ID, SCREEN_ID, SCREEN_NAME, SCREEN_ADDRESS, DISTRICT,
|
||||||
|
MONITOR_STATUS, MONITOR_RESULT, MONITOR_PERSON, MONITORED_AT,
|
||||||
|
CREATE_BY, CREATE_TIME, CREATE_NAME, UPDATE_BY, UPDATE_TIME, UPDATE_NAME
|
||||||
|
) VALUES (
|
||||||
|
'AM-MR-001', 'AM-RT-001', 'BS-SCR-001',
|
||||||
|
'天河路正佳广场LED大屏', '广州市天河区天河路228号正佳广场', '440106',
|
||||||
|
3, '广告内容正常,未发现违法行为', '张三',
|
||||||
|
TO_TIMESTAMP('2026-05-25 07:35:00', 'YYYY-MM-DD HH24:MI:SS'),
|
||||||
|
'system', TO_TIMESTAMP('2026-05-25 07:30:00', 'YYYY-MM-DD HH24:MI:SS'), '系统',
|
||||||
|
'zhangsan', TO_TIMESTAMP('2026-05-25 07:35:00', 'YYYY-MM-DD HH24:MI:SS'), '张三'
|
||||||
|
);
|
||||||
|
|
||||||
|
-- 2. 天河路正佳广场 → 违规(虚假广告)
|
||||||
|
INSERT INTO OARMS.AM_MONITOR_RECORD (
|
||||||
|
ID, TASK_ID, SCREEN_ID, SCREEN_NAME, SCREEN_ADDRESS, DISTRICT,
|
||||||
|
MONITOR_STATUS, MONITOR_RESULT, MONITOR_PERSON, MONITORED_AT,
|
||||||
|
CREATE_BY, CREATE_TIME, CREATE_NAME, UPDATE_BY, UPDATE_TIME, UPDATE_NAME
|
||||||
|
) VALUES (
|
||||||
|
'AM-MR-002', 'AM-RT-002', 'BS-SCR-001',
|
||||||
|
'天河路正佳广场LED大屏', '广州市天河区天河路228号正佳广场', '440106',
|
||||||
|
4, '发现疑似虚假医疗广告,宣称"根治痛风不复发"', '张三',
|
||||||
|
TO_TIMESTAMP('2026-05-25 08:05:00', 'YYYY-MM-DD HH24:MI:SS'),
|
||||||
|
'system', TO_TIMESTAMP('2026-05-25 08:00:00', 'YYYY-MM-DD HH24:MI:SS'), '系统',
|
||||||
|
'zhangsan', TO_TIMESTAMP('2026-05-25 08:05:00', 'YYYY-MM-DD HH24:MI:SS'), '张三'
|
||||||
|
);
|
||||||
|
|
||||||
|
-- 3. 北京路广百百货 → 已监控正常
|
||||||
|
INSERT INTO OARMS.AM_MONITOR_RECORD (
|
||||||
|
ID, TASK_ID, SCREEN_ID, SCREEN_NAME, SCREEN_ADDRESS, DISTRICT,
|
||||||
|
MONITOR_STATUS, MONITOR_RESULT, MONITOR_PERSON, MONITORED_AT,
|
||||||
|
CREATE_BY, CREATE_TIME, CREATE_NAME, UPDATE_BY, UPDATE_TIME, UPDATE_NAME
|
||||||
|
) VALUES (
|
||||||
|
'AM-MR-003', 'AM-RT-003', 'BS-SCR-002',
|
||||||
|
'北京路广百百货LED大屏', '广州市越秀区北京路298号广百百货', '440104',
|
||||||
|
3, '广告内容正常,符合规范要求', '李四',
|
||||||
|
TO_TIMESTAMP('2026-05-25 08:25:00', 'YYYY-MM-DD HH24:MI:SS'),
|
||||||
|
'system', TO_TIMESTAMP('2026-05-25 08:20:00', 'YYYY-MM-DD HH24:MI:SS'), '系统',
|
||||||
|
'lisi', TO_TIMESTAMP('2026-05-25 08:25:00', 'YYYY-MM-DD HH24:MI:SS'), '李四'
|
||||||
|
);
|
||||||
|
|
||||||
|
-- 4. 北京路广百百货 → 待监控
|
||||||
|
INSERT INTO OARMS.AM_MONITOR_RECORD (
|
||||||
|
ID, TASK_ID, SCREEN_ID, SCREEN_NAME, SCREEN_ADDRESS, DISTRICT,
|
||||||
|
MONITOR_STATUS, MONITOR_RESULT, MONITOR_PERSON, MONITORED_AT,
|
||||||
|
CREATE_BY, CREATE_TIME, CREATE_NAME, UPDATE_BY, UPDATE_TIME, UPDATE_NAME
|
||||||
|
) VALUES (
|
||||||
|
'AM-MR-004', 'AM-RT-004', 'BS-SCR-002',
|
||||||
|
'北京路广百百货LED大屏', '广州市越秀区北京路298号广百百货', '440104',
|
||||||
|
1, NULL, NULL, NULL,
|
||||||
|
'system', TO_TIMESTAMP('2026-05-25 08:20:00', 'YYYY-MM-DD HH24:MI:SS'), '系统',
|
||||||
|
'system', TO_TIMESTAMP('2026-05-25 08:20:00', 'YYYY-MM-DD HH24:MI:SS'), '系统'
|
||||||
|
);
|
||||||
|
|
||||||
|
-- 5. 江南西路海珠万达 → 违规(绝对化用语)
|
||||||
|
INSERT INTO OARMS.AM_MONITOR_RECORD (
|
||||||
|
ID, TASK_ID, SCREEN_ID, SCREEN_NAME, SCREEN_ADDRESS, DISTRICT,
|
||||||
|
MONITOR_STATUS, MONITOR_RESULT, MONITOR_PERSON, MONITORED_AT,
|
||||||
|
CREATE_BY, CREATE_TIME, CREATE_NAME, UPDATE_BY, UPDATE_TIME, UPDATE_NAME
|
||||||
|
) VALUES (
|
||||||
|
'AM-MR-005', 'AM-RT-005', 'BS-SCR-003',
|
||||||
|
'江南西路海珠万达广场LED大屏', '广州市海珠区江南西路46号海珠万达广场', '440105',
|
||||||
|
4, '发现绝对化用语"全国最佳",涉嫌违反广告法', '王五',
|
||||||
|
TO_TIMESTAMP('2026-05-25 08:35:00', 'YYYY-MM-DD HH24:MI:SS'),
|
||||||
|
'system', TO_TIMESTAMP('2026-05-25 08:30:00', 'YYYY-MM-DD HH24:MI:SS'), '系统',
|
||||||
|
'wangwu', TO_TIMESTAMP('2026-05-25 08:35:00', 'YYYY-MM-DD HH24:MI:SS'), '王五'
|
||||||
|
);
|
||||||
|
|
||||||
|
-- 6. 江南西路海珠万达 → 已监控正常
|
||||||
|
INSERT INTO OARMS.AM_MONITOR_RECORD (
|
||||||
|
ID, TASK_ID, SCREEN_ID, SCREEN_NAME, SCREEN_ADDRESS, DISTRICT,
|
||||||
|
MONITOR_STATUS, MONITOR_RESULT, MONITOR_PERSON, MONITORED_AT,
|
||||||
|
CREATE_BY, CREATE_TIME, CREATE_NAME, UPDATE_BY, UPDATE_TIME, UPDATE_NAME
|
||||||
|
) VALUES (
|
||||||
|
'AM-MR-006', 'AM-RT-006', 'BS-SCR-003',
|
||||||
|
'江南西路海珠万达广场LED大屏', '广州市海珠区江南西路46号海珠万达广场', '440105',
|
||||||
|
3, '广告内容正常', '王五',
|
||||||
|
TO_TIMESTAMP('2026-05-25 09:05:00', 'YYYY-MM-DD HH24:MI:SS'),
|
||||||
|
'system', TO_TIMESTAMP('2026-05-25 09:00:00', 'YYYY-MM-DD HH24:MI:SS'), '系统',
|
||||||
|
'wangwu', TO_TIMESTAMP('2026-05-25 09:05:00', 'YYYY-MM-DD HH24:MI:SS'), '王五'
|
||||||
|
);
|
||||||
|
|
||||||
|
-- 7. 上下九步行街 → 监控中
|
||||||
|
INSERT INTO OARMS.AM_MONITOR_RECORD (
|
||||||
|
ID, TASK_ID, SCREEN_ID, SCREEN_NAME, SCREEN_ADDRESS, DISTRICT,
|
||||||
|
MONITOR_STATUS, MONITOR_RESULT, MONITOR_PERSON, MONITORED_AT,
|
||||||
|
CREATE_BY, CREATE_TIME, CREATE_NAME, UPDATE_BY, UPDATE_TIME, UPDATE_NAME
|
||||||
|
) VALUES (
|
||||||
|
'AM-MR-007', 'AM-RT-007', 'BS-SCR-004',
|
||||||
|
'上下九步行街LED大屏', '广州市荔湾区下九路6号上下九广场', '440103',
|
||||||
|
2, NULL, '赵六',
|
||||||
|
TO_TIMESTAMP('2026-05-25 09:20:00', 'YYYY-MM-DD HH24:MI:SS'),
|
||||||
|
'system', TO_TIMESTAMP('2026-05-25 09:15:00', 'YYYY-MM-DD HH24:MI:SS'), '系统',
|
||||||
|
'zhaoliu', TO_TIMESTAMP('2026-05-25 09:20:00', 'YYYY-MM-DD HH24:MI:SS'), '赵六'
|
||||||
|
);
|
||||||
|
|
||||||
|
-- 8. 上下九步行街 → 待监控
|
||||||
|
INSERT INTO OARMS.AM_MONITOR_RECORD (
|
||||||
|
ID, TASK_ID, SCREEN_ID, SCREEN_NAME, SCREEN_ADDRESS, DISTRICT,
|
||||||
|
MONITOR_STATUS, MONITOR_RESULT, MONITOR_PERSON, MONITORED_AT,
|
||||||
|
CREATE_BY, CREATE_TIME, CREATE_NAME, UPDATE_BY, UPDATE_TIME, UPDATE_NAME
|
||||||
|
) VALUES (
|
||||||
|
'AM-MR-008', 'AM-RT-008', 'BS-SCR-004',
|
||||||
|
'上下九步行街LED大屏', '广州市荔湾区下九路6号上下九广场', '440103',
|
||||||
|
1, NULL, NULL, NULL,
|
||||||
|
'system', TO_TIMESTAMP('2026-05-25 09:15:00', 'YYYY-MM-DD HH24:MI:SS'), '系统',
|
||||||
|
'system', TO_TIMESTAMP('2026-05-25 09:15:00', 'YYYY-MM-DD HH24:MI:SS'), '系统'
|
||||||
|
);
|
||||||
|
|
||||||
|
-- 9. 白云大道白云万达 → 已监控正常
|
||||||
|
INSERT INTO OARMS.AM_MONITOR_RECORD (
|
||||||
|
ID, TASK_ID, SCREEN_ID, SCREEN_NAME, SCREEN_ADDRESS, DISTRICT,
|
||||||
|
MONITOR_STATUS, MONITOR_RESULT, MONITOR_PERSON, MONITORED_AT,
|
||||||
|
CREATE_BY, CREATE_TIME, CREATE_NAME, UPDATE_BY, UPDATE_TIME, UPDATE_NAME
|
||||||
|
) VALUES (
|
||||||
|
'AM-MR-009', 'AM-RT-009', 'BS-SCR-005',
|
||||||
|
'白云大道白云万达广场LED大屏', '广州市白云区云城东路501号白云万达广场', '440111',
|
||||||
|
3, '广告内容正常', '张三',
|
||||||
|
TO_TIMESTAMP('2026-05-25 08:05:00', 'YYYY-MM-DD HH24:MI:SS'),
|
||||||
|
'system', TO_TIMESTAMP('2026-05-25 08:00:00', 'YYYY-MM-DD HH24:MI:SS'), '系统',
|
||||||
|
'zhangsan', TO_TIMESTAMP('2026-05-25 08:05:00', 'YYYY-MM-DD HH24:MI:SS'), '张三'
|
||||||
|
);
|
||||||
|
|
||||||
|
-- 10. 白云大道白云万达 → 违规(虚假宣传)
|
||||||
|
INSERT INTO OARMS.AM_MONITOR_RECORD (
|
||||||
|
ID, TASK_ID, SCREEN_ID, SCREEN_NAME, SCREEN_ADDRESS, DISTRICT,
|
||||||
|
MONITOR_STATUS, MONITOR_RESULT, MONITOR_PERSON, MONITORED_AT,
|
||||||
|
CREATE_BY, CREATE_TIME, CREATE_NAME, UPDATE_BY, UPDATE_TIME, UPDATE_NAME
|
||||||
|
) VALUES (
|
||||||
|
'AM-MR-010', 'AM-RT-010', 'BS-SCR-005',
|
||||||
|
'白云大道白云万达广场LED大屏', '广州市白云区云城东路501号白云万达广场', '440111',
|
||||||
|
4, '发现虚假宣传,广告声称"包治百病"涉嫌违法', '李四',
|
||||||
|
TO_TIMESTAMP('2026-05-25 09:05:00', 'YYYY-MM-DD HH24:MI:SS'),
|
||||||
|
'system', TO_TIMESTAMP('2026-05-25 09:00:00', 'YYYY-MM-DD HH24:MI:SS'), '系统',
|
||||||
|
'lisi', TO_TIMESTAMP('2026-05-25 09:05:00', 'YYYY-MM-DD HH24:MI:SS'), '李四'
|
||||||
|
);
|
||||||
|
|
||||||
|
-- 11. 番禺广场 → 已监控正常
|
||||||
|
INSERT INTO OARMS.AM_MONITOR_RECORD (
|
||||||
|
ID, TASK_ID, SCREEN_ID, SCREEN_NAME, SCREEN_ADDRESS, DISTRICT,
|
||||||
|
MONITOR_STATUS, MONITOR_RESULT, MONITOR_PERSON, MONITORED_AT,
|
||||||
|
CREATE_BY, CREATE_TIME, CREATE_NAME, UPDATE_BY, UPDATE_TIME, UPDATE_NAME
|
||||||
|
) VALUES (
|
||||||
|
'AM-MR-011', 'AM-RT-011', 'BS-SCR-007',
|
||||||
|
'市桥大北路番禺广场LED大屏', '广州市番禺区市桥街大北路101号番禺广场', '440113',
|
||||||
|
3, '广告内容正常', '王五',
|
||||||
|
TO_TIMESTAMP('2026-05-25 08:35:00', 'YYYY-MM-DD HH24:MI:SS'),
|
||||||
|
'system', TO_TIMESTAMP('2026-05-25 08:30:00', 'YYYY-MM-DD HH24:MI:SS'), '系统',
|
||||||
|
'wangwu', TO_TIMESTAMP('2026-05-25 08:35:00', 'YYYY-MM-DD HH24:MI:SS'), '王五'
|
||||||
|
);
|
||||||
|
|
||||||
|
-- 12. 番禺广场 → 监控中
|
||||||
|
INSERT INTO OARMS.AM_MONITOR_RECORD (
|
||||||
|
ID, TASK_ID, SCREEN_ID, SCREEN_NAME, SCREEN_ADDRESS, DISTRICT,
|
||||||
|
MONITOR_STATUS, MONITOR_RESULT, MONITOR_PERSON, MONITORED_AT,
|
||||||
|
CREATE_BY, CREATE_TIME, CREATE_NAME, UPDATE_BY, UPDATE_TIME, UPDATE_NAME
|
||||||
|
) VALUES (
|
||||||
|
'AM-MR-012', 'AM-RT-012', 'BS-SCR-007',
|
||||||
|
'市桥大北路番禺广场LED大屏', '广州市番禺区市桥街大北路101号番禺广场', '440113',
|
||||||
|
2, NULL, '赵六',
|
||||||
|
TO_TIMESTAMP('2026-05-25 08:50:00', 'YYYY-MM-DD HH24:MI:SS'),
|
||||||
|
'system', TO_TIMESTAMP('2026-05-25 08:30:00', 'YYYY-MM-DD HH24:MI:SS'), '系统',
|
||||||
|
'zhaoliu', TO_TIMESTAMP('2026-05-25 08:50:00', 'YYYY-MM-DD HH24:MI:SS'), '赵六'
|
||||||
|
);
|
||||||
|
|
@ -0,0 +1,130 @@
|
||||||
|
-- ============================================================================
|
||||||
|
-- OARMS - CW-1 固化取证管理 初始数据
|
||||||
|
-- Database: DM8 (达梦)
|
||||||
|
-- Schema: OARMS
|
||||||
|
-- Version: V7.0.1
|
||||||
|
-- Date: 2026-05-25
|
||||||
|
-- Description: 基于 V5.0.1 违规监控记录生成的 5 条取证记录 + 状态历史
|
||||||
|
-- Note:
|
||||||
|
-- 1. 取证记录来源于状态为 4(违规) 的监控记录
|
||||||
|
-- 2. 包含不同取证状态(1=待关联规则, 2=已关联规则, 3=已生成线索)
|
||||||
|
-- ============================================================================
|
||||||
|
|
||||||
|
-- 1. 天河路正佳广场虚假广告 → 待关联规则(1)
|
||||||
|
INSERT INTO OARMS.CW_EVIDENCE_RECORD (
|
||||||
|
ID, MONITOR_RECORD_ID, SCREEN_ID, SCREEN_NAME, SCREEN_ADDRESS, DISTRICT,
|
||||||
|
EVIDENCE_VIDEO_FILE, CLIP_START_TIME, CLIP_END_TIME, CLIP_DURATION,
|
||||||
|
EVIDENCE_STATUS, EVIDENCE_PERSON, EVIDENCED_AT,
|
||||||
|
SOURCE_MONITOR_PERSON, SOURCE_MONITOR_TIME, SOURCE_MONITOR_REMARK,
|
||||||
|
CREATE_BY, CREATE_TIME, CREATE_NAME, UPDATE_BY, UPDATE_TIME, UPDATE_NAME
|
||||||
|
) VALUES (
|
||||||
|
'CW-ER-001', 'AM-MR-002', 'BS-SCR-001',
|
||||||
|
'天河路正佳广场LED大屏', '广州市天河区天河路228号正佳广场', '440106',
|
||||||
|
'/evidence/2026-05-25/CW-ER-001.mp4', '07:32:00', '07:38:00', 360,
|
||||||
|
1, '张三', TO_TIMESTAMP('2026-05-25 08:10:00', 'YYYY-MM-DD HH24:MI:SS'),
|
||||||
|
'张三', TO_TIMESTAMP('2026-05-25 08:05:00', 'YYYY-MM-DD HH24:MI:SS'), '发现疑似虚假医疗广告',
|
||||||
|
'system', TO_TIMESTAMP('2026-05-25 08:10:00', 'YYYY-MM-DD HH24:MI:SS'), '系统',
|
||||||
|
'system', TO_TIMESTAMP('2026-05-25 08:10:00', 'YYYY-MM-DD HH24:MI:SS'), '系统'
|
||||||
|
);
|
||||||
|
|
||||||
|
-- 2. 江南西路海珠万达绝对化用语 → 已关联规则(2)
|
||||||
|
INSERT INTO OARMS.CW_EVIDENCE_RECORD (
|
||||||
|
ID, MONITOR_RECORD_ID, SCREEN_ID, SCREEN_NAME, SCREEN_ADDRESS, DISTRICT,
|
||||||
|
EVIDENCE_VIDEO_FILE, CLIP_START_TIME, CLIP_END_TIME, CLIP_DURATION,
|
||||||
|
EVIDENCE_STATUS, EVIDENCE_PERSON, EVIDENCED_AT,
|
||||||
|
SOURCE_MONITOR_PERSON, SOURCE_MONITOR_TIME, SOURCE_MONITOR_REMARK,
|
||||||
|
CREATE_BY, CREATE_TIME, CREATE_NAME, UPDATE_BY, UPDATE_TIME, UPDATE_NAME
|
||||||
|
) VALUES (
|
||||||
|
'CW-ER-002', 'AM-MR-005', 'BS-SCR-003',
|
||||||
|
'江南西路海珠万达广场LED大屏', '广州市海珠区江南西路46号海珠万达广场', '440105',
|
||||||
|
'/evidence/2026-05-25/CW-ER-002.mp4', '08:28:00', '08:33:00', 300,
|
||||||
|
2, '王五', TO_TIMESTAMP('2026-05-25 08:40:00', 'YYYY-MM-DD HH24:MI:SS'),
|
||||||
|
'王五', TO_TIMESTAMP('2026-05-25 08:35:00', 'YYYY-MM-DD HH24:MI:SS'), '发现绝对化用语"全国最佳"',
|
||||||
|
'system', TO_TIMESTAMP('2026-05-25 08:40:00', 'YYYY-MM-DD HH24:MI:SS'), '系统',
|
||||||
|
'system', TO_TIMESTAMP('2026-05-25 08:50:00', 'YYYY-MM-DD HH24:MI:SS'), '系统'
|
||||||
|
);
|
||||||
|
|
||||||
|
-- 3. 白云万达虚假宣传 → 已生成线索(3)
|
||||||
|
INSERT INTO OARMS.CW_EVIDENCE_RECORD (
|
||||||
|
ID, MONITOR_RECORD_ID, SCREEN_ID, SCREEN_NAME, SCREEN_ADDRESS, DISTRICT,
|
||||||
|
EVIDENCE_VIDEO_FILE, CLIP_START_TIME, CLIP_END_TIME, CLIP_DURATION,
|
||||||
|
EVIDENCE_STATUS, EVIDENCE_PERSON, EVIDENCED_AT,
|
||||||
|
SOURCE_MONITOR_PERSON, SOURCE_MONITOR_TIME, SOURCE_MONITOR_REMARK,
|
||||||
|
CREATE_BY, CREATE_TIME, CREATE_NAME, UPDATE_BY, UPDATE_TIME, UPDATE_NAME
|
||||||
|
) VALUES (
|
||||||
|
'CW-ER-003', 'AM-MR-010', 'BS-SCR-005',
|
||||||
|
'白云大道白云万达广场LED大屏', '广州市白云区云城东路501号白云万达广场', '440111',
|
||||||
|
'/evidence/2026-05-25/CW-ER-003.mp4', '08:55:00', '09:02:00', 420,
|
||||||
|
3, '李四', TO_TIMESTAMP('2026-05-25 09:10:00', 'YYYY-MM-DD HH24:MI:SS'),
|
||||||
|
'李四', TO_TIMESTAMP('2026-05-25 09:05:00', 'YYYY-MM-DD HH24:MI:SS'), '发现虚假宣传"包治百病"',
|
||||||
|
'system', TO_TIMESTAMP('2026-05-25 09:10:00', 'YYYY-MM-DD HH24:MI:SS'), '系统',
|
||||||
|
'system', TO_TIMESTAMP('2026-05-25 09:30:00', 'YYYY-MM-DD HH24:MI:SS'), '系统'
|
||||||
|
);
|
||||||
|
|
||||||
|
-- 4. 天河路正佳广场(前一天) → 已关联规则(2)
|
||||||
|
INSERT INTO OARMS.CW_EVIDENCE_RECORD (
|
||||||
|
ID, MONITOR_RECORD_ID, SCREEN_ID, SCREEN_NAME, SCREEN_ADDRESS, DISTRICT,
|
||||||
|
EVIDENCE_VIDEO_FILE, CLIP_START_TIME, CLIP_END_TIME, CLIP_DURATION,
|
||||||
|
EVIDENCE_STATUS, EVIDENCE_PERSON, EVIDENCED_AT,
|
||||||
|
SOURCE_MONITOR_PERSON, SOURCE_MONITOR_TIME, SOURCE_MONITOR_REMARK,
|
||||||
|
CREATE_BY, CREATE_TIME, CREATE_NAME, UPDATE_BY, UPDATE_TIME, UPDATE_NAME
|
||||||
|
) VALUES (
|
||||||
|
'CW-ER-004', 'AM-MR-001', 'BS-SCR-001',
|
||||||
|
'天河路正佳广场LED大屏', '广州市天河区天河路228号正佳广场', '440106',
|
||||||
|
'/evidence/2026-05-24/CW-ER-004.mp4', '07:25:00', '07:28:00', 180,
|
||||||
|
2, '张三', TO_TIMESTAMP('2026-05-24 07:40:00', 'YYYY-MM-DD HH24:MI:SS'),
|
||||||
|
'张三', TO_TIMESTAMP('2026-05-24 07:35:00', 'YYYY-MM-DD HH24:MI:SS'), '疑似虚假宣传待进一步核实',
|
||||||
|
'system', TO_TIMESTAMP('2026-05-24 07:40:00', 'YYYY-MM-DD HH24:MI:SS'), '系统',
|
||||||
|
'system', TO_TIMESTAMP('2026-05-24 08:00:00', 'YYYY-MM-DD HH24:MI:SS'), '系统'
|
||||||
|
);
|
||||||
|
|
||||||
|
-- 5. 江南西路海珠万达(前一天) → 待关联规则(1)
|
||||||
|
INSERT INTO OARMS.CW_EVIDENCE_RECORD (
|
||||||
|
ID, MONITOR_RECORD_ID, SCREEN_ID, SCREEN_NAME, SCREEN_ADDRESS, DISTRICT,
|
||||||
|
EVIDENCE_VIDEO_FILE, CLIP_START_TIME, CLIP_END_TIME, CLIP_DURATION,
|
||||||
|
EVIDENCE_STATUS, EVIDENCE_PERSON, EVIDENCED_AT,
|
||||||
|
SOURCE_MONITOR_PERSON, SOURCE_MONITOR_TIME, SOURCE_MONITOR_REMARK,
|
||||||
|
CREATE_BY, CREATE_TIME, CREATE_NAME, UPDATE_BY, UPDATE_TIME, UPDATE_NAME
|
||||||
|
) VALUES (
|
||||||
|
'CW-ER-005', 'AM-MR-006', 'BS-SCR-003',
|
||||||
|
'江南西路海珠万达广场LED大屏', '广州市海珠区江南西路46号海珠万达广场', '440105',
|
||||||
|
'/evidence/2026-05-24/CW-ER-005.mp4', '08:50:00', '08:55:00', 300,
|
||||||
|
1, '王五', TO_TIMESTAMP('2026-05-24 09:10:00', 'YYYY-MM-DD HH24:MI:SS'),
|
||||||
|
'王五', TO_TIMESTAMP('2026-05-24 09:05:00', 'YYYY-MM-DD HH24:MI:SS'), '广告内容存疑需进一步分析',
|
||||||
|
'system', TO_TIMESTAMP('2026-05-24 09:10:00', 'YYYY-MM-DD HH24:MI:SS'), '系统',
|
||||||
|
'system', TO_TIMESTAMP('2026-05-24 09:10:00', 'YYYY-MM-DD HH24:MI:SS'), '系统'
|
||||||
|
);
|
||||||
|
|
||||||
|
-- ===================== 状态变更历史 =====================
|
||||||
|
|
||||||
|
-- CW-ER-002: 待关联规则(1) → 已关联规则(2)
|
||||||
|
INSERT INTO OARMS.CW_EVIDENCE_STATUS_HISTORY (
|
||||||
|
ID, EVIDENCE_ID, FROM_STATUS, TO_STATUS, CHANGED_AT, CHANGED_BY
|
||||||
|
) VALUES (
|
||||||
|
'CW-ESH-001', 'CW-ER-002', 1, 2,
|
||||||
|
TO_TIMESTAMP('2026-05-25 08:50:00', 'YYYY-MM-DD HH24:MI:SS'), 'admin'
|
||||||
|
);
|
||||||
|
|
||||||
|
-- CW-ER-003: 待关联规则(1) → 已关联规则(2)
|
||||||
|
INSERT INTO OARMS.CW_EVIDENCE_STATUS_HISTORY (
|
||||||
|
ID, EVIDENCE_ID, FROM_STATUS, TO_STATUS, CHANGED_AT, CHANGED_BY
|
||||||
|
) VALUES (
|
||||||
|
'CW-ESH-002', 'CW-ER-003', 1, 2,
|
||||||
|
TO_TIMESTAMP('2026-05-25 09:15:00', 'YYYY-MM-DD HH24:MI:SS'), 'admin'
|
||||||
|
);
|
||||||
|
|
||||||
|
-- CW-ER-003: 已关联规则(2) → 已生成线索(3)
|
||||||
|
INSERT INTO OARMS.CW_EVIDENCE_STATUS_HISTORY (
|
||||||
|
ID, EVIDENCE_ID, FROM_STATUS, TO_STATUS, CHANGED_AT, CHANGED_BY
|
||||||
|
) VALUES (
|
||||||
|
'CW-ESH-003', 'CW-ER-003', 2, 3,
|
||||||
|
TO_TIMESTAMP('2026-05-25 09:30:00', 'YYYY-MM-DD HH24:MI:SS'), 'admin'
|
||||||
|
);
|
||||||
|
|
||||||
|
-- CW-ER-004: 待关联规则(1) → 已关联规则(2)
|
||||||
|
INSERT INTO OARMS.CW_EVIDENCE_STATUS_HISTORY (
|
||||||
|
ID, EVIDENCE_ID, FROM_STATUS, TO_STATUS, CHANGED_AT, CHANGED_BY
|
||||||
|
) VALUES (
|
||||||
|
'CW-ESH-004', 'CW-ER-004', 1, 2,
|
||||||
|
TO_TIMESTAMP('2026-05-24 08:00:00', 'YYYY-MM-DD HH24:MI:SS'), 'admin'
|
||||||
|
);
|
||||||
|
|
@ -0,0 +1,42 @@
|
||||||
|
-- ============================================================================
|
||||||
|
-- OARMS - CW-2 证据规则关联 初始数据
|
||||||
|
-- Database: DM8 (达梦)
|
||||||
|
-- Schema: OARMS
|
||||||
|
-- Version: V8.0.1
|
||||||
|
-- Date: 2026-05-25
|
||||||
|
-- Description: 基于已关联规则(2+)的取证记录生成的关联数据
|
||||||
|
-- Note:
|
||||||
|
-- 1. 关联状态为 2(已关联规则) 或 3(已生成线索) 的取证记录
|
||||||
|
-- 2. 规则 ID 来自 V6.0.0 种子数据 (MR-RUL-001 ~ MR-RUL-003)
|
||||||
|
-- ============================================================================
|
||||||
|
|
||||||
|
-- CW-ER-002(江南西路绝对化用语) → 关联规则: 绝对化用语监测
|
||||||
|
INSERT INTO OARMS.CW_EVIDENCE_RULE_RELATION (
|
||||||
|
ID, EVIDENCE_ID, RULE_ID, ASSOCIATED_BY, ASSOCIATED_AT
|
||||||
|
) VALUES (
|
||||||
|
'CW-ERR-001', 'CW-ER-002', 'MR-RUL-003', 'admin',
|
||||||
|
TO_TIMESTAMP('2026-05-25 08:50:00', 'YYYY-MM-DD HH24:MI:SS')
|
||||||
|
);
|
||||||
|
|
||||||
|
-- CW-ER-003(白云万达虚假宣传) → 关联规则: 虚假广告监测 + 医疗广告监测
|
||||||
|
INSERT INTO OARMS.CW_EVIDENCE_RULE_RELATION (
|
||||||
|
ID, EVIDENCE_ID, RULE_ID, ASSOCIATED_BY, ASSOCIATED_AT
|
||||||
|
) VALUES (
|
||||||
|
'CW-ERR-002', 'CW-ER-003', 'MR-RUL-001', 'admin',
|
||||||
|
TO_TIMESTAMP('2026-05-25 09:15:00', 'YYYY-MM-DD HH24:MI:SS')
|
||||||
|
);
|
||||||
|
|
||||||
|
INSERT INTO OARMS.CW_EVIDENCE_RULE_RELATION (
|
||||||
|
ID, EVIDENCE_ID, RULE_ID, ASSOCIATED_BY, ASSOCIATED_AT
|
||||||
|
) VALUES (
|
||||||
|
'CW-ERR-003', 'CW-ER-003', 'MR-RUL-002', 'admin',
|
||||||
|
TO_TIMESTAMP('2026-05-25 09:15:00', 'YYYY-MM-DD HH24:MI:SS')
|
||||||
|
);
|
||||||
|
|
||||||
|
-- CW-ER-004(天河路前一天) → 关联规则: 虚假广告监测
|
||||||
|
INSERT INTO OARMS.CW_EVIDENCE_RULE_RELATION (
|
||||||
|
ID, EVIDENCE_ID, RULE_ID, ASSOCIATED_BY, ASSOCIATED_AT
|
||||||
|
) VALUES (
|
||||||
|
'CW-ERR-004', 'CW-ER-004', 'MR-RUL-002', 'admin',
|
||||||
|
TO_TIMESTAMP('2026-05-24 08:00:00', 'YYYY-MM-DD HH24:MI:SS')
|
||||||
|
);
|
||||||
|
|
@ -0,0 +1,74 @@
|
||||||
|
-- ============================================================================
|
||||||
|
-- OARMS - CW-3 监测线索管理 初始数据
|
||||||
|
-- Database: DM8 (达梦)
|
||||||
|
-- Schema: OARMS
|
||||||
|
-- Version: V9.0.1
|
||||||
|
-- Date: 2026-05-25
|
||||||
|
-- Description: 基于已生成线索(3)的取证记录生成的线索 + 生成日志
|
||||||
|
-- Note:
|
||||||
|
-- 1. 线索来源于 evidence_status=3 的取证记录
|
||||||
|
-- 2. related_rules/related_law_clauses 为 JSON 数组
|
||||||
|
-- 3. owner_unit/operator_unit 来自 bs_screen 种子数据
|
||||||
|
-- ============================================================================
|
||||||
|
|
||||||
|
-- CW-ER-003(白云万达虚假宣传) → 线索
|
||||||
|
INSERT INTO OARMS.CW_MONITORING_CLUE (
|
||||||
|
ID, CLUE_CODE, EVIDENCE_ID, SCREEN_ID, SCREEN_NAME, SCREEN_ADDRESS, DISTRICT,
|
||||||
|
OWNER_UNIT, OWNER_CONTACT, OPERATOR_UNIT, OPERATOR_CONTACT, ADVERTISER,
|
||||||
|
RELATED_RULES, RELATED_LAW_CLAUSES,
|
||||||
|
VIDEO_EVIDENCE_PATH, CLIP_START_TIME, CLIP_END_TIME, CLIP_DURATION,
|
||||||
|
CLUE_STATUS, GENERATED_BY, GENERATED_AT, TRANSFERRED_AT,
|
||||||
|
CREATE_BY, CREATE_TIME, CREATE_NAME, UPDATE_BY, UPDATE_TIME, UPDATE_NAME
|
||||||
|
) VALUES (
|
||||||
|
'CW-MC-001', 'XS-20260525-001', 'CW-ER-003', 'BS-SCR-005',
|
||||||
|
'白云大道白云万达广场LED大屏', '广州市白云区云城东路501号白云万达广场', '440111',
|
||||||
|
'白云区城市管理局', '020-87654321', '广州万达广告传媒有限公司', '020-87659999', '白云万达广场商户',
|
||||||
|
'[{"ruleId":"MR-RUL-001","ruleName":"医疗广告违法宣传监测"},{"ruleId":"MR-RUL-002","ruleName":"虚假广告监测"}]',
|
||||||
|
'[{"clauseId":"LC-GGFAL-001","clauseName":"《广告法》第四条"},{"clauseId":"LC-GGFAL-002","clauseName":"《广告法》第二十八条"}]',
|
||||||
|
'/evidence/2026-05-25/CW-ER-003.mp4', '08:55:00', '09:02:00', 420,
|
||||||
|
1, 'admin', TO_TIMESTAMP('2026-05-25 09:30:00', 'YYYY-MM-DD HH24:MI:SS'), NULL,
|
||||||
|
'system', TO_TIMESTAMP('2026-05-25 09:30:00', 'YYYY-MM-DD HH24:MI:SS'), '系统',
|
||||||
|
'system', TO_TIMESTAMP('2026-05-25 09:30:00', 'YYYY-MM-DD HH24:MI:SS'), '系统'
|
||||||
|
);
|
||||||
|
|
||||||
|
-- ===================== 线索生成日志 =====================
|
||||||
|
|
||||||
|
-- CW-MC-001 信息聚合
|
||||||
|
INSERT INTO OARMS.CW_CLUE_GENERATION_LOG (
|
||||||
|
ID, CLUE_ID, EVIDENCE_ID, OPERATION_TYPE, OPERATION_DETAIL, OPERATION_RESULT,
|
||||||
|
OPERATED_BY, OPERATED_AT
|
||||||
|
) VALUES (
|
||||||
|
'CW-CGL-001', 'CW-MC-001', 'CW-ER-003', 'INFO_AGGREGATE',
|
||||||
|
'聚合证据CW-ER-003的关联信息:大屏信息、规则信息、法条信息', 'SUCCESS',
|
||||||
|
'admin', TO_TIMESTAMP('2026-05-25 09:28:00', 'YYYY-MM-DD HH24:MI:SS')
|
||||||
|
);
|
||||||
|
|
||||||
|
-- CW-MC-001 编码生成
|
||||||
|
INSERT INTO OARMS.CW_CLUE_GENERATION_LOG (
|
||||||
|
ID, CLUE_ID, EVIDENCE_ID, OPERATION_TYPE, OPERATION_DETAIL, OPERATION_RESULT,
|
||||||
|
OPERATED_BY, OPERATED_AT
|
||||||
|
) VALUES (
|
||||||
|
'CW-CGL-002', 'CW-MC-001', 'CW-ER-003', 'CODE_GENERATE',
|
||||||
|
'生成线索编码: XS-20260525-001', 'SUCCESS',
|
||||||
|
'admin', TO_TIMESTAMP('2026-05-25 09:29:00', 'YYYY-MM-DD HH24:MI:SS')
|
||||||
|
);
|
||||||
|
|
||||||
|
-- CW-MC-001 验证
|
||||||
|
INSERT INTO OARMS.CW_CLUE_GENERATION_LOG (
|
||||||
|
ID, CLUE_ID, EVIDENCE_ID, OPERATION_TYPE, OPERATION_DETAIL, OPERATION_RESULT,
|
||||||
|
OPERATED_BY, OPERATED_AT
|
||||||
|
) VALUES (
|
||||||
|
'CW-CGL-003', 'CW-MC-001', 'CW-ER-003', 'VALIDATE',
|
||||||
|
'校验线索数据完整性:必填字段齐全,关联数据有效', 'SUCCESS',
|
||||||
|
'admin', TO_TIMESTAMP('2026-05-25 09:29:30', 'YYYY-MM-DD HH24:MI:SS')
|
||||||
|
);
|
||||||
|
|
||||||
|
-- CW-MC-001 确认生成
|
||||||
|
INSERT INTO OARMS.CW_CLUE_GENERATION_LOG (
|
||||||
|
ID, CLUE_ID, EVIDENCE_ID, OPERATION_TYPE, OPERATION_DETAIL, OPERATION_RESULT,
|
||||||
|
OPERATED_BY, OPERATED_AT
|
||||||
|
) VALUES (
|
||||||
|
'CW-CGL-004', 'CW-MC-001', 'CW-ER-003', 'CONFIRM',
|
||||||
|
'确认生成监测线索XS-20260525-001', 'SUCCESS',
|
||||||
|
'admin', TO_TIMESTAMP('2026-05-25 09:30:00', 'YYYY-MM-DD HH24:MI:SS')
|
||||||
|
);
|
||||||
|
|
@ -17,6 +17,8 @@ import com.chinaweal.youfool.prj.modules.evidence.clue.mapper.ClueGenerationLogM
|
||||||
import com.chinaweal.youfool.prj.modules.evidence.clue.mapper.MonitoringClueMapper;
|
import com.chinaweal.youfool.prj.modules.evidence.clue.mapper.MonitoringClueMapper;
|
||||||
import com.chinaweal.youfool.prj.modules.evidence.clue.service.IMonitoringClueService;
|
import com.chinaweal.youfool.prj.modules.evidence.clue.service.IMonitoringClueService;
|
||||||
import com.chinaweal.youfool.prj.modules.evidence.record.entity.EvidenceRecordEntity;
|
import com.chinaweal.youfool.prj.modules.evidence.record.entity.EvidenceRecordEntity;
|
||||||
|
import com.chinaweal.youfool.prj.modules.system.entity.vo.LoginUserVO;
|
||||||
|
import com.chinaweal.youfool.prj.modules.system.util.DataScopeHelper;
|
||||||
import com.chinaweal.youfool.prj.modules.evidence.record.entity.EvidenceStatusHistoryEntity;
|
import com.chinaweal.youfool.prj.modules.evidence.record.entity.EvidenceStatusHistoryEntity;
|
||||||
import com.chinaweal.youfool.prj.modules.evidence.record.mapper.EvidenceRecordMapper;
|
import com.chinaweal.youfool.prj.modules.evidence.record.mapper.EvidenceRecordMapper;
|
||||||
import com.chinaweal.youfool.prj.modules.evidence.record.mapper.EvidenceStatusHistoryMapper;
|
import com.chinaweal.youfool.prj.modules.evidence.record.mapper.EvidenceStatusHistoryMapper;
|
||||||
|
|
@ -73,6 +75,15 @@ public class MonitoringClueServiceImpl extends ServiceImpl<MonitoringClueMapper,
|
||||||
public RestResult<Page<MonitoringClueDetailVO>> queryList(MonitoringClueQuery query) {
|
public RestResult<Page<MonitoringClueDetailVO>> queryList(MonitoringClueQuery query) {
|
||||||
Page<MonitoringClueEntity> page = new Page<>(query.getPageNum(), query.getPageSize());
|
Page<MonitoringClueEntity> page = new Page<>(query.getPageNum(), query.getPageSize());
|
||||||
LambdaQueryWrapper<MonitoringClueEntity> wrapper = new LambdaQueryWrapper<>();
|
LambdaQueryWrapper<MonitoringClueEntity> wrapper = new LambdaQueryWrapper<>();
|
||||||
|
// 数据权限过滤
|
||||||
|
LoginUserVO currentUser = DataScopeHelper.getCurrentUser();
|
||||||
|
if (!DataScopeHelper.isCitySupervisor(currentUser)) {
|
||||||
|
if (DataScopeHelper.isDistrictSupervisor(currentUser)) {
|
||||||
|
wrapper.eq(MonitoringClueEntity::getDistrict, currentUser.getDistrictCode());
|
||||||
|
} else {
|
||||||
|
return RestResult.ok(new Page<>(query.getPageNum(), query.getPageSize(), 0));
|
||||||
|
}
|
||||||
|
}
|
||||||
// 线索编码精确查询
|
// 线索编码精确查询
|
||||||
if (StringUtils.isNotBlank(query.getClueCode())) {
|
if (StringUtils.isNotBlank(query.getClueCode())) {
|
||||||
wrapper.eq(MonitoringClueEntity::getClueCode, query.getClueCode());
|
wrapper.eq(MonitoringClueEntity::getClueCode, query.getClueCode());
|
||||||
|
|
|
||||||
|
|
@ -17,6 +17,8 @@ import com.chinaweal.youfool.prj.modules.evidence.record.mapper.EvidenceRecordMa
|
||||||
import com.chinaweal.youfool.prj.modules.evidence.record.mapper.EvidenceStatusHistoryMapper;
|
import com.chinaweal.youfool.prj.modules.evidence.record.mapper.EvidenceStatusHistoryMapper;
|
||||||
import com.chinaweal.youfool.prj.modules.evidence.record.service.IEvidenceRecordService;
|
import com.chinaweal.youfool.prj.modules.evidence.record.service.IEvidenceRecordService;
|
||||||
import com.chinaweal.youfool.prj.modules.screen.entity.ScreenEntity;
|
import com.chinaweal.youfool.prj.modules.screen.entity.ScreenEntity;
|
||||||
|
import com.chinaweal.youfool.prj.modules.system.entity.vo.LoginUserVO;
|
||||||
|
import com.chinaweal.youfool.prj.modules.system.util.DataScopeHelper;
|
||||||
import com.chinaweal.youfool.prj.modules.screen.mapper.ScreenMapper;
|
import com.chinaweal.youfool.prj.modules.screen.mapper.ScreenMapper;
|
||||||
import lombok.AllArgsConstructor;
|
import lombok.AllArgsConstructor;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
|
@ -49,6 +51,15 @@ public class EvidenceRecordServiceImpl extends ServiceImpl<EvidenceRecordMapper,
|
||||||
public RestResult<Page<EvidenceRecordDetailVO>> queryList(EvidenceRecordQuery query) {
|
public RestResult<Page<EvidenceRecordDetailVO>> queryList(EvidenceRecordQuery query) {
|
||||||
Page<EvidenceRecordEntity> page = new Page<>(query.getPageNum(), query.getPageSize());
|
Page<EvidenceRecordEntity> page = new Page<>(query.getPageNum(), query.getPageSize());
|
||||||
LambdaQueryWrapper<EvidenceRecordEntity> wrapper = new LambdaQueryWrapper<>();
|
LambdaQueryWrapper<EvidenceRecordEntity> wrapper = new LambdaQueryWrapper<>();
|
||||||
|
// 数据权限过滤
|
||||||
|
LoginUserVO currentUser = DataScopeHelper.getCurrentUser();
|
||||||
|
if (!DataScopeHelper.isCitySupervisor(currentUser)) {
|
||||||
|
if (DataScopeHelper.isDistrictSupervisor(currentUser)) {
|
||||||
|
wrapper.eq(EvidenceRecordEntity::getDistrict, currentUser.getDistrictCode());
|
||||||
|
} else {
|
||||||
|
return RestResult.ok(new Page<>(query.getPageNum(), query.getPageSize(), 0));
|
||||||
|
}
|
||||||
|
}
|
||||||
// 所属区域筛选
|
// 所属区域筛选
|
||||||
if (StringUtils.isNotBlank(query.getDistrict())) {
|
if (StringUtils.isNotBlank(query.getDistrict())) {
|
||||||
wrapper.eq(EvidenceRecordEntity::getDistrict, query.getDistrict());
|
wrapper.eq(EvidenceRecordEntity::getDistrict, query.getDistrict());
|
||||||
|
|
|
||||||
|
|
@ -26,6 +26,8 @@ import com.chinaweal.youfool.prj.modules.evidence.transfer.entity.vo.PendingClue
|
||||||
import com.chinaweal.youfool.prj.modules.evidence.transfer.mapper.ClueTransferRecordMapper;
|
import com.chinaweal.youfool.prj.modules.evidence.transfer.mapper.ClueTransferRecordMapper;
|
||||||
import com.chinaweal.youfool.prj.modules.evidence.transfer.mapper.TransferOperationLogMapper;
|
import com.chinaweal.youfool.prj.modules.evidence.transfer.mapper.TransferOperationLogMapper;
|
||||||
import com.chinaweal.youfool.prj.modules.evidence.transfer.service.IClueTransferService;
|
import com.chinaweal.youfool.prj.modules.evidence.transfer.service.IClueTransferService;
|
||||||
|
import com.chinaweal.youfool.prj.modules.system.entity.vo.LoginUserVO;
|
||||||
|
import com.chinaweal.youfool.prj.modules.system.util.DataScopeHelper;
|
||||||
import lombok.AllArgsConstructor;
|
import lombok.AllArgsConstructor;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.beans.BeanUtils;
|
import org.springframework.beans.BeanUtils;
|
||||||
|
|
@ -58,6 +60,26 @@ public class ClueTransferServiceImpl extends ServiceImpl<ClueTransferRecordMappe
|
||||||
public RestResult<Page<ClueTransferDetailVO>> queryList(ClueTransferQuery query) {
|
public RestResult<Page<ClueTransferDetailVO>> queryList(ClueTransferQuery query) {
|
||||||
Page<ClueTransferRecordEntity> page = new Page<>(query.getPageNum(), query.getPageSize());
|
Page<ClueTransferRecordEntity> page = new Page<>(query.getPageNum(), query.getPageSize());
|
||||||
LambdaQueryWrapper<ClueTransferRecordEntity> wrapper = new LambdaQueryWrapper<>();
|
LambdaQueryWrapper<ClueTransferRecordEntity> wrapper = new LambdaQueryWrapper<>();
|
||||||
|
// 数据权限过滤
|
||||||
|
LoginUserVO currentUser = DataScopeHelper.getCurrentUser();
|
||||||
|
if (!DataScopeHelper.isCitySupervisor(currentUser)) {
|
||||||
|
if (DataScopeHelper.isDistrictSupervisor(currentUser)) {
|
||||||
|
String districtCode = currentUser.getDistrictCode();
|
||||||
|
LambdaQueryWrapper<MonitoringClueEntity> clueWrapper = new LambdaQueryWrapper<>();
|
||||||
|
clueWrapper.eq(MonitoringClueEntity::getDistrict, districtCode);
|
||||||
|
clueWrapper.select(MonitoringClueEntity::getId);
|
||||||
|
List<String> districtClueIds = monitoringClueMapper.selectList(clueWrapper)
|
||||||
|
.stream().map(MonitoringClueEntity::getId).collect(Collectors.toList());
|
||||||
|
wrapper.and(w -> {
|
||||||
|
w.eq(ClueTransferRecordEntity::getTransferTargetDistrict, districtCode);
|
||||||
|
if (!districtClueIds.isEmpty()) {
|
||||||
|
w.or().in(ClueTransferRecordEntity::getClueId, districtClueIds);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
return RestResult.ok(new Page<>(query.getPageNum(), query.getPageSize(), 0));
|
||||||
|
}
|
||||||
|
}
|
||||||
// 线索ID筛选
|
// 线索ID筛选
|
||||||
if (StringUtils.isNotBlank(query.getClueId())) {
|
if (StringUtils.isNotBlank(query.getClueId())) {
|
||||||
wrapper.eq(ClueTransferRecordEntity::getClueId, query.getClueId());
|
wrapper.eq(ClueTransferRecordEntity::getClueId, query.getClueId());
|
||||||
|
|
@ -269,6 +291,15 @@ public class ClueTransferServiceImpl extends ServiceImpl<ClueTransferRecordMappe
|
||||||
Page<MonitoringClueEntity> page = new Page<>(query.getPageNum(), query.getPageSize());
|
Page<MonitoringClueEntity> page = new Page<>(query.getPageNum(), query.getPageSize());
|
||||||
LambdaQueryWrapper<MonitoringClueEntity> wrapper = new LambdaQueryWrapper<>();
|
LambdaQueryWrapper<MonitoringClueEntity> wrapper = new LambdaQueryWrapper<>();
|
||||||
wrapper.eq(MonitoringClueEntity::getClueStatus, 1);
|
wrapper.eq(MonitoringClueEntity::getClueStatus, 1);
|
||||||
|
// 数据权限过滤
|
||||||
|
LoginUserVO pendingUser = DataScopeHelper.getCurrentUser();
|
||||||
|
if (!DataScopeHelper.isCitySupervisor(pendingUser)) {
|
||||||
|
if (DataScopeHelper.isDistrictSupervisor(pendingUser)) {
|
||||||
|
wrapper.eq(MonitoringClueEntity::getDistrict, pendingUser.getDistrictCode());
|
||||||
|
} else {
|
||||||
|
return RestResult.ok(new Page<>(query.getPageNum(), query.getPageSize(), 0));
|
||||||
|
}
|
||||||
|
}
|
||||||
if (StringUtils.isNotBlank(query.getClueCode())) {
|
if (StringUtils.isNotBlank(query.getClueCode())) {
|
||||||
wrapper.like(MonitoringClueEntity::getClueCode, query.getClueCode());
|
wrapper.like(MonitoringClueEntity::getClueCode, query.getClueCode());
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -24,9 +24,9 @@ public class RecordingConfigQuery {
|
||||||
private Integer pageSize = 10;
|
private Integer pageSize = 10;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 关键字(大屏名称模糊查询)
|
* 大屏名称(模糊匹配)
|
||||||
*/
|
*/
|
||||||
private String keyword;
|
private String screenName;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 行政区划
|
* 行政区划
|
||||||
|
|
|
||||||
|
|
@ -14,11 +14,14 @@ import com.chinaweal.youfool.prj.modules.monitor.config.mapper.RecordingConfigMa
|
||||||
import com.chinaweal.youfool.prj.modules.monitor.config.service.IRecordingConfigService;
|
import com.chinaweal.youfool.prj.modules.monitor.config.service.IRecordingConfigService;
|
||||||
import com.chinaweal.youfool.prj.modules.screen.entity.ScreenEntity;
|
import com.chinaweal.youfool.prj.modules.screen.entity.ScreenEntity;
|
||||||
import com.chinaweal.youfool.prj.modules.screen.mapper.ScreenMapper;
|
import com.chinaweal.youfool.prj.modules.screen.mapper.ScreenMapper;
|
||||||
|
import com.chinaweal.youfool.prj.modules.system.entity.vo.LoginUserVO;
|
||||||
|
import com.chinaweal.youfool.prj.modules.system.util.DataScopeHelper;
|
||||||
import lombok.AllArgsConstructor;
|
import lombok.AllArgsConstructor;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.beans.BeanUtils;
|
import org.springframework.beans.BeanUtils;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
@ -41,9 +44,28 @@ public class RecordingConfigServiceImpl extends ServiceImpl<RecordingConfigMappe
|
||||||
public RestResult<Page<RecordingConfigEntity>> queryList(RecordingConfigQuery query) {
|
public RestResult<Page<RecordingConfigEntity>> queryList(RecordingConfigQuery query) {
|
||||||
Page<RecordingConfigEntity> page = new Page<>(query.getPageNum(), query.getPageSize());
|
Page<RecordingConfigEntity> page = new Page<>(query.getPageNum(), query.getPageSize());
|
||||||
LambdaQueryWrapper<RecordingConfigEntity> wrapper = new LambdaQueryWrapper<>();
|
LambdaQueryWrapper<RecordingConfigEntity> wrapper = new LambdaQueryWrapper<>();
|
||||||
// 关键字模糊查询(大屏名称)
|
// 数据权限过滤
|
||||||
if (StringUtils.isNotBlank(query.getKeyword())) {
|
LoginUserVO currentUser = DataScopeHelper.getCurrentUser();
|
||||||
wrapper.like(RecordingConfigEntity::getScreenName, query.getKeyword());
|
if (!DataScopeHelper.isCitySupervisor(currentUser)) {
|
||||||
|
if (DataScopeHelper.isDistrictSupervisor(currentUser)) {
|
||||||
|
wrapper.eq(RecordingConfigEntity::getDistrict, currentUser.getDistrictCode());
|
||||||
|
} else if (DataScopeHelper.isOperator(currentUser)) {
|
||||||
|
LambdaQueryWrapper<ScreenEntity> screenWrapper = new LambdaQueryWrapper<>();
|
||||||
|
screenWrapper.eq(ScreenEntity::getOperatorUnit, currentUser.getOrgName());
|
||||||
|
screenWrapper.select(ScreenEntity::getId);
|
||||||
|
List<String> screenIds = screenMapper.selectList(screenWrapper).stream()
|
||||||
|
.map(ScreenEntity::getId).collect(Collectors.toList());
|
||||||
|
if (screenIds.isEmpty()) {
|
||||||
|
return RestResult.ok(new Page<>(query.getPageNum(), query.getPageSize(), 0));
|
||||||
|
}
|
||||||
|
wrapper.in(RecordingConfigEntity::getScreenId, screenIds);
|
||||||
|
} else {
|
||||||
|
return RestResult.ok(new Page<>(query.getPageNum(), query.getPageSize(), 0));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// 大屏名称模糊查询
|
||||||
|
if (StringUtils.isNotBlank(query.getScreenName())) {
|
||||||
|
wrapper.like(RecordingConfigEntity::getScreenName, query.getScreenName());
|
||||||
}
|
}
|
||||||
// 行政区划精确筛选
|
// 行政区划精确筛选
|
||||||
if (StringUtils.isNotBlank(query.getDistrict())) {
|
if (StringUtils.isNotBlank(query.getDistrict())) {
|
||||||
|
|
@ -187,6 +209,17 @@ public class RecordingConfigServiceImpl extends ServiceImpl<RecordingConfigMappe
|
||||||
public RestResult<List<Map<String, Object>>> getConfigurableScreens() {
|
public RestResult<List<Map<String, Object>>> getConfigurableScreens() {
|
||||||
// 查询所有大屏
|
// 查询所有大屏
|
||||||
LambdaQueryWrapper<ScreenEntity> screenWrapper = new LambdaQueryWrapper<>();
|
LambdaQueryWrapper<ScreenEntity> screenWrapper = new LambdaQueryWrapper<>();
|
||||||
|
// 数据权限过滤
|
||||||
|
LoginUserVO cfgUser = DataScopeHelper.getCurrentUser();
|
||||||
|
if (!DataScopeHelper.isCitySupervisor(cfgUser)) {
|
||||||
|
if (DataScopeHelper.isDistrictSupervisor(cfgUser)) {
|
||||||
|
screenWrapper.eq(ScreenEntity::getDistrict, cfgUser.getDistrictCode());
|
||||||
|
} else if (DataScopeHelper.isOperator(cfgUser)) {
|
||||||
|
screenWrapper.eq(ScreenEntity::getOperatorUnit, cfgUser.getOrgName());
|
||||||
|
} else {
|
||||||
|
return RestResult.ok(new ArrayList<>());
|
||||||
|
}
|
||||||
|
}
|
||||||
screenWrapper.select(ScreenEntity::getId, ScreenEntity::getScreenName, ScreenEntity::getScreenCode, ScreenEntity::getAddress, ScreenEntity::getDistrict);
|
screenWrapper.select(ScreenEntity::getId, ScreenEntity::getScreenName, ScreenEntity::getScreenCode, ScreenEntity::getAddress, ScreenEntity::getDistrict);
|
||||||
screenWrapper.eq(ScreenEntity::getScreenStatus, 1);
|
screenWrapper.eq(ScreenEntity::getScreenStatus, 1);
|
||||||
screenWrapper.orderByAsc(ScreenEntity::getScreenCode);
|
screenWrapper.orderByAsc(ScreenEntity::getScreenCode);
|
||||||
|
|
|
||||||
|
|
@ -14,6 +14,8 @@ import com.chinaweal.youfool.prj.modules.monitor.record.entity.query.MonitorReco
|
||||||
import com.chinaweal.youfool.prj.modules.monitor.record.entity.req.MonitorJudgeReq;
|
import com.chinaweal.youfool.prj.modules.monitor.record.entity.req.MonitorJudgeReq;
|
||||||
import com.chinaweal.youfool.prj.modules.monitor.record.mapper.MonitorRecordMapper;
|
import com.chinaweal.youfool.prj.modules.monitor.record.mapper.MonitorRecordMapper;
|
||||||
import com.chinaweal.youfool.prj.modules.monitor.record.service.IMonitorRecordService;
|
import com.chinaweal.youfool.prj.modules.monitor.record.service.IMonitorRecordService;
|
||||||
|
import com.chinaweal.youfool.prj.modules.system.entity.vo.LoginUserVO;
|
||||||
|
import com.chinaweal.youfool.prj.modules.system.util.DataScopeHelper;
|
||||||
import lombok.AllArgsConstructor;
|
import lombok.AllArgsConstructor;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
@ -40,6 +42,15 @@ public class MonitorRecordServiceImpl extends ServiceImpl<MonitorRecordMapper, M
|
||||||
public RestResult<Page<MonitorRecordEntity>> queryList(MonitorRecordQuery query) {
|
public RestResult<Page<MonitorRecordEntity>> queryList(MonitorRecordQuery query) {
|
||||||
Page<MonitorRecordEntity> page = new Page<>(query.getPageNum(), query.getPageSize());
|
Page<MonitorRecordEntity> page = new Page<>(query.getPageNum(), query.getPageSize());
|
||||||
LambdaQueryWrapper<MonitorRecordEntity> wrapper = new LambdaQueryWrapper<>();
|
LambdaQueryWrapper<MonitorRecordEntity> wrapper = new LambdaQueryWrapper<>();
|
||||||
|
// 数据权限过滤
|
||||||
|
LoginUserVO currentUser = DataScopeHelper.getCurrentUser();
|
||||||
|
if (!DataScopeHelper.isCitySupervisor(currentUser)) {
|
||||||
|
if (DataScopeHelper.isDistrictSupervisor(currentUser)) {
|
||||||
|
wrapper.eq(MonitorRecordEntity::getDistrict, currentUser.getDistrictCode());
|
||||||
|
} else {
|
||||||
|
return RestResult.ok(new Page<>(query.getPageNum(), query.getPageSize(), 0));
|
||||||
|
}
|
||||||
|
}
|
||||||
// 大屏ID精确筛选
|
// 大屏ID精确筛选
|
||||||
if (StringUtils.isNotBlank(query.getScreenId())) {
|
if (StringUtils.isNotBlank(query.getScreenId())) {
|
||||||
wrapper.eq(MonitorRecordEntity::getScreenId, query.getScreenId());
|
wrapper.eq(MonitorRecordEntity::getScreenId, query.getScreenId());
|
||||||
|
|
|
||||||
|
|
@ -2,8 +2,8 @@ package com.chinaweal.youfool.prj.modules.monitor.task.controller;
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
import com.chinaweal.youfool.framework.springboot.rest.RestResult;
|
import com.chinaweal.youfool.framework.springboot.rest.RestResult;
|
||||||
import com.chinaweal.youfool.prj.modules.monitor.task.entity.RecordingTaskEntity;
|
|
||||||
import com.chinaweal.youfool.prj.modules.monitor.task.entity.query.RecordingTaskQuery;
|
import com.chinaweal.youfool.prj.modules.monitor.task.entity.query.RecordingTaskQuery;
|
||||||
|
import com.chinaweal.youfool.prj.modules.monitor.task.entity.vo.RecordingTaskVO;
|
||||||
import com.chinaweal.youfool.prj.modules.monitor.task.service.IRecordingTaskService;
|
import com.chinaweal.youfool.prj.modules.monitor.task.service.IRecordingTaskService;
|
||||||
import io.swagger.v3.oas.annotations.Operation;
|
import io.swagger.v3.oas.annotations.Operation;
|
||||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||||
|
|
@ -40,7 +40,7 @@ public class RecordingTaskController {
|
||||||
*/
|
*/
|
||||||
@PostMapping("query")
|
@PostMapping("query")
|
||||||
@Operation(summary = "分页查询录屏任务列表")
|
@Operation(summary = "分页查询录屏任务列表")
|
||||||
public RestResult<Page<RecordingTaskEntity>> queryList(@RequestBody RecordingTaskQuery query) {
|
public RestResult<Page<RecordingTaskVO>> queryList(@RequestBody RecordingTaskQuery query) {
|
||||||
log.info("[OK] 分页查询录屏任务列表: pageNum={}, pageSize={}", query.getPageNum(), query.getPageSize());
|
log.info("[OK] 分页查询录屏任务列表: pageNum={}, pageSize={}", query.getPageNum(), query.getPageSize());
|
||||||
return recordingTaskService.queryList(query);
|
return recordingTaskService.queryList(query);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,47 @@
|
||||||
|
package com.chinaweal.youfool.prj.modules.monitor.task.entity.vo;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||||
|
import com.chinaweal.youfool.framework.springboot.common.util.DateUtil;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.experimental.Accessors;
|
||||||
|
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 录屏任务列表 VO(含大屏关联信息)
|
||||||
|
*
|
||||||
|
* @author chenjy
|
||||||
|
* @since 2026/05/25
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@Accessors(chain = true)
|
||||||
|
public class RecordingTaskVO {
|
||||||
|
|
||||||
|
private String id;
|
||||||
|
|
||||||
|
private String screenId;
|
||||||
|
|
||||||
|
private String configId;
|
||||||
|
|
||||||
|
@JsonFormat(pattern = DateUtil.DATETIME_DEFAULT_FORMAT, timezone = "GMT+8")
|
||||||
|
private Date actualStartTime;
|
||||||
|
|
||||||
|
@JsonFormat(pattern = DateUtil.DATETIME_DEFAULT_FORMAT, timezone = "GMT+8")
|
||||||
|
private Date actualEndTime;
|
||||||
|
|
||||||
|
private Integer taskStatus;
|
||||||
|
|
||||||
|
private String videoFilePath;
|
||||||
|
|
||||||
|
private Integer retryCount;
|
||||||
|
|
||||||
|
private String errorMessage;
|
||||||
|
|
||||||
|
// ===== 大屏关联字段(来自 bs_screen) =====
|
||||||
|
|
||||||
|
private String screenName;
|
||||||
|
|
||||||
|
private String screenAddress;
|
||||||
|
|
||||||
|
private String district;
|
||||||
|
}
|
||||||
|
|
@ -2,8 +2,8 @@ package com.chinaweal.youfool.prj.modules.monitor.task.service;
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
import com.chinaweal.youfool.framework.springboot.rest.RestResult;
|
import com.chinaweal.youfool.framework.springboot.rest.RestResult;
|
||||||
import com.chinaweal.youfool.prj.modules.monitor.task.entity.RecordingTaskEntity;
|
|
||||||
import com.chinaweal.youfool.prj.modules.monitor.task.entity.query.RecordingTaskQuery;
|
import com.chinaweal.youfool.prj.modules.monitor.task.entity.query.RecordingTaskQuery;
|
||||||
|
import com.chinaweal.youfool.prj.modules.monitor.task.entity.vo.RecordingTaskVO;
|
||||||
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
|
|
@ -16,12 +16,12 @@ import java.util.Map;
|
||||||
public interface IRecordingTaskService {
|
public interface IRecordingTaskService {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 分页查询录屏任务列表
|
* 分页查询录屏任务列表(含大屏关联信息)
|
||||||
*
|
*
|
||||||
* @param query 查询条件
|
* @param query 查询条件
|
||||||
* @return 分页结果
|
* @return 分页结果
|
||||||
*/
|
*/
|
||||||
RestResult<Page<RecordingTaskEntity>> queryList(RecordingTaskQuery query);
|
RestResult<Page<RecordingTaskVO>> queryList(RecordingTaskQuery query);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取录屏任务详情(含关联告警通知列表)
|
* 获取录屏任务详情(含关联告警通知列表)
|
||||||
|
|
|
||||||
|
|
@ -9,11 +9,14 @@ import com.chinaweal.youfool.framework.springboot.rest.RestResult;
|
||||||
import com.chinaweal.youfool.prj.modules.monitor.task.entity.AlertNotificationEntity;
|
import com.chinaweal.youfool.prj.modules.monitor.task.entity.AlertNotificationEntity;
|
||||||
import com.chinaweal.youfool.prj.modules.monitor.task.entity.RecordingTaskEntity;
|
import com.chinaweal.youfool.prj.modules.monitor.task.entity.RecordingTaskEntity;
|
||||||
import com.chinaweal.youfool.prj.modules.monitor.task.entity.query.RecordingTaskQuery;
|
import com.chinaweal.youfool.prj.modules.monitor.task.entity.query.RecordingTaskQuery;
|
||||||
|
import com.chinaweal.youfool.prj.modules.monitor.task.entity.vo.RecordingTaskVO;
|
||||||
import com.chinaweal.youfool.prj.modules.monitor.task.mapper.AlertNotificationMapper;
|
import com.chinaweal.youfool.prj.modules.monitor.task.mapper.AlertNotificationMapper;
|
||||||
import com.chinaweal.youfool.prj.modules.monitor.task.mapper.RecordingTaskMapper;
|
import com.chinaweal.youfool.prj.modules.monitor.task.mapper.RecordingTaskMapper;
|
||||||
import com.chinaweal.youfool.prj.modules.monitor.task.service.IRecordingTaskService;
|
import com.chinaweal.youfool.prj.modules.monitor.task.service.IRecordingTaskService;
|
||||||
import com.chinaweal.youfool.prj.modules.screen.entity.ScreenEntity;
|
import com.chinaweal.youfool.prj.modules.screen.entity.ScreenEntity;
|
||||||
import com.chinaweal.youfool.prj.modules.screen.mapper.ScreenMapper;
|
import com.chinaweal.youfool.prj.modules.screen.mapper.ScreenMapper;
|
||||||
|
import com.chinaweal.youfool.prj.modules.system.entity.vo.LoginUserVO;
|
||||||
|
import com.chinaweal.youfool.prj.modules.system.util.DataScopeHelper;
|
||||||
import lombok.AllArgsConstructor;
|
import lombok.AllArgsConstructor;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
@ -21,10 +24,10 @@ import org.springframework.stereotype.Service;
|
||||||
import java.text.ParseException;
|
import java.text.ParseException;
|
||||||
import java.text.SimpleDateFormat;
|
import java.text.SimpleDateFormat;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
|
||||||
import java.util.LinkedHashMap;
|
import java.util.LinkedHashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.Set;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -42,7 +45,7 @@ public class RecordingTaskServiceImpl extends ServiceImpl<RecordingTaskMapper, R
|
||||||
private final ScreenMapper screenMapper;
|
private final ScreenMapper screenMapper;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public RestResult<Page<RecordingTaskEntity>> queryList(RecordingTaskQuery query) {
|
public RestResult<Page<RecordingTaskVO>> queryList(RecordingTaskQuery query) {
|
||||||
Page<RecordingTaskEntity> page = new Page<>(query.getPageNum(), query.getPageSize());
|
Page<RecordingTaskEntity> page = new Page<>(query.getPageNum(), query.getPageSize());
|
||||||
LambdaQueryWrapper<RecordingTaskEntity> wrapper = new LambdaQueryWrapper<>();
|
LambdaQueryWrapper<RecordingTaskEntity> wrapper = new LambdaQueryWrapper<>();
|
||||||
// 大屏ID精确筛选
|
// 大屏ID精确筛选
|
||||||
|
|
@ -53,6 +56,25 @@ public class RecordingTaskServiceImpl extends ServiceImpl<RecordingTaskMapper, R
|
||||||
if (query.getTaskStatus() != null) {
|
if (query.getTaskStatus() != null) {
|
||||||
wrapper.eq(RecordingTaskEntity::getTaskStatus, query.getTaskStatus());
|
wrapper.eq(RecordingTaskEntity::getTaskStatus, query.getTaskStatus());
|
||||||
}
|
}
|
||||||
|
// 数据权限过滤
|
||||||
|
LoginUserVO currentUser = DataScopeHelper.getCurrentUser();
|
||||||
|
if (!DataScopeHelper.isCitySupervisor(currentUser)) {
|
||||||
|
if (DataScopeHelper.isDistrictSupervisor(currentUser)) {
|
||||||
|
query.setDistrict(currentUser.getDistrictCode());
|
||||||
|
} else if (DataScopeHelper.isOperator(currentUser)) {
|
||||||
|
LambdaQueryWrapper<ScreenEntity> opScreenWrapper = new LambdaQueryWrapper<>();
|
||||||
|
opScreenWrapper.eq(ScreenEntity::getOperatorUnit, currentUser.getOrgName());
|
||||||
|
opScreenWrapper.select(ScreenEntity::getId);
|
||||||
|
List<String> opScreenIds = screenMapper.selectList(opScreenWrapper).stream()
|
||||||
|
.map(ScreenEntity::getId).collect(Collectors.toList());
|
||||||
|
if (opScreenIds.isEmpty()) {
|
||||||
|
return RestResult.ok(new Page<>(query.getPageNum(), query.getPageSize(), 0));
|
||||||
|
}
|
||||||
|
wrapper.in(RecordingTaskEntity::getScreenId, opScreenIds);
|
||||||
|
} else {
|
||||||
|
return RestResult.ok(new Page<>(query.getPageNum(), query.getPageSize(), 0));
|
||||||
|
}
|
||||||
|
}
|
||||||
// 行政区划/大屏名称 → 通过bs_screen两步查询
|
// 行政区划/大屏名称 → 通过bs_screen两步查询
|
||||||
if (StringUtils.isNotBlank(query.getDistrict()) || StringUtils.isNotBlank(query.getScreenName())) {
|
if (StringUtils.isNotBlank(query.getDistrict()) || StringUtils.isNotBlank(query.getScreenName())) {
|
||||||
LambdaQueryWrapper<ScreenEntity> screenWrapper = new LambdaQueryWrapper<>();
|
LambdaQueryWrapper<ScreenEntity> screenWrapper = new LambdaQueryWrapper<>();
|
||||||
|
|
@ -66,7 +88,6 @@ public class RecordingTaskServiceImpl extends ServiceImpl<RecordingTaskMapper, R
|
||||||
List<String> screenIds = screens.stream()
|
List<String> screenIds = screens.stream()
|
||||||
.map(ScreenEntity::getId).collect(Collectors.toList());
|
.map(ScreenEntity::getId).collect(Collectors.toList());
|
||||||
if (screenIds.isEmpty()) {
|
if (screenIds.isEmpty()) {
|
||||||
// 无匹配大屏,返回空结果
|
|
||||||
return RestResult.ok(new Page<>(query.getPageNum(), query.getPageSize(), 0));
|
return RestResult.ok(new Page<>(query.getPageNum(), query.getPageSize(), 0));
|
||||||
}
|
}
|
||||||
wrapper.in(RecordingTaskEntity::getScreenId, screenIds);
|
wrapper.in(RecordingTaskEntity::getScreenId, screenIds);
|
||||||
|
|
@ -90,7 +111,36 @@ public class RecordingTaskServiceImpl extends ServiceImpl<RecordingTaskMapper, R
|
||||||
}
|
}
|
||||||
wrapper.orderByDesc(RecordingTaskEntity::getCreateTime);
|
wrapper.orderByDesc(RecordingTaskEntity::getCreateTime);
|
||||||
Page<RecordingTaskEntity> entityPage = this.page(page, wrapper);
|
Page<RecordingTaskEntity> entityPage = this.page(page, wrapper);
|
||||||
return RestResult.ok(entityPage);
|
|
||||||
|
// 转换为 VO 并补充大屏关联信息
|
||||||
|
Page<RecordingTaskVO> voPage = new Page<>(entityPage.getCurrent(), entityPage.getSize(), entityPage.getTotal());
|
||||||
|
if (!entityPage.getRecords().isEmpty()) {
|
||||||
|
Set<String> screenIds = entityPage.getRecords().stream()
|
||||||
|
.map(RecordingTaskEntity::getScreenId)
|
||||||
|
.collect(Collectors.toSet());
|
||||||
|
Map<String, ScreenEntity> screenMap = screenMapper.selectBatchIds(screenIds).stream()
|
||||||
|
.collect(Collectors.toMap(ScreenEntity::getId, s -> s, (a, b) -> a));
|
||||||
|
voPage.setRecords(entityPage.getRecords().stream().map(entity -> {
|
||||||
|
RecordingTaskVO vo = new RecordingTaskVO();
|
||||||
|
vo.setId(entity.getId())
|
||||||
|
.setScreenId(entity.getScreenId())
|
||||||
|
.setConfigId(entity.getConfigId())
|
||||||
|
.setActualStartTime(entity.getActualStartTime())
|
||||||
|
.setActualEndTime(entity.getActualEndTime())
|
||||||
|
.setTaskStatus(entity.getTaskStatus())
|
||||||
|
.setVideoFilePath(entity.getVideoFilePath())
|
||||||
|
.setRetryCount(entity.getRetryCount())
|
||||||
|
.setErrorMessage(entity.getErrorMessage());
|
||||||
|
ScreenEntity screen = screenMap.get(entity.getScreenId());
|
||||||
|
if (screen != null) {
|
||||||
|
vo.setScreenName(screen.getScreenName())
|
||||||
|
.setScreenAddress(screen.getAddress())
|
||||||
|
.setDistrict(screen.getDistrict());
|
||||||
|
}
|
||||||
|
return vo;
|
||||||
|
}).collect(Collectors.toList()));
|
||||||
|
}
|
||||||
|
return RestResult.ok(voPage);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
@ -113,6 +163,14 @@ public class RecordingTaskServiceImpl extends ServiceImpl<RecordingTaskMapper, R
|
||||||
detail.put("retryCount", taskEntity.getRetryCount());
|
detail.put("retryCount", taskEntity.getRetryCount());
|
||||||
detail.put("errorMessage", taskEntity.getErrorMessage());
|
detail.put("errorMessage", taskEntity.getErrorMessage());
|
||||||
|
|
||||||
|
// 补充大屏关联信息
|
||||||
|
ScreenEntity screen = screenMapper.selectById(taskEntity.getScreenId());
|
||||||
|
if (screen != null) {
|
||||||
|
detail.put("screenName", screen.getScreenName());
|
||||||
|
detail.put("screenAddress", screen.getAddress());
|
||||||
|
detail.put("district", screen.getDistrict());
|
||||||
|
}
|
||||||
|
|
||||||
// 查询关联告警通知列表
|
// 查询关联告警通知列表
|
||||||
LambdaQueryWrapper<AlertNotificationEntity> alertWrapper = new LambdaQueryWrapper<>();
|
LambdaQueryWrapper<AlertNotificationEntity> alertWrapper = new LambdaQueryWrapper<>();
|
||||||
alertWrapper.eq(AlertNotificationEntity::getTaskId, id);
|
alertWrapper.eq(AlertNotificationEntity::getTaskId, id);
|
||||||
|
|
|
||||||
|
|
@ -24,9 +24,19 @@ public class ScreenQuery {
|
||||||
private Integer pageSize = 10;
|
private Integer pageSize = 10;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 关键字(大屏名称/编码模糊查询)
|
* 大屏名称(模糊匹配)
|
||||||
*/
|
*/
|
||||||
private String keyword;
|
private String screenName;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 大屏编码(精确匹配)
|
||||||
|
*/
|
||||||
|
private String screenCode;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 业主单位(模糊匹配)
|
||||||
|
*/
|
||||||
|
private String ownerUnit;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 行政区划
|
* 行政区划
|
||||||
|
|
|
||||||
|
|
@ -15,6 +15,8 @@ import com.chinaweal.youfool.prj.modules.screen.entity.req.ScreenSaveReq;
|
||||||
import com.chinaweal.youfool.prj.modules.screen.entity.vo.ScreenDetailVO;
|
import com.chinaweal.youfool.prj.modules.screen.entity.vo.ScreenDetailVO;
|
||||||
import com.chinaweal.youfool.prj.modules.screen.mapper.ScreenMapper;
|
import com.chinaweal.youfool.prj.modules.screen.mapper.ScreenMapper;
|
||||||
import com.chinaweal.youfool.prj.modules.screen.service.IScreenService;
|
import com.chinaweal.youfool.prj.modules.screen.service.IScreenService;
|
||||||
|
import com.chinaweal.youfool.prj.modules.system.entity.vo.LoginUserVO;
|
||||||
|
import com.chinaweal.youfool.prj.modules.system.util.DataScopeHelper;
|
||||||
import lombok.AllArgsConstructor;
|
import lombok.AllArgsConstructor;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.beans.BeanUtils;
|
import org.springframework.beans.BeanUtils;
|
||||||
|
|
@ -45,13 +47,28 @@ public class ScreenServiceImpl extends ServiceImpl<ScreenMapper, ScreenEntity> i
|
||||||
public RestResult<Page<ScreenDetailVO>> queryList(ScreenQuery query) {
|
public RestResult<Page<ScreenDetailVO>> queryList(ScreenQuery query) {
|
||||||
Page<ScreenEntity> page = new Page<>(query.getPageNum(), query.getPageSize());
|
Page<ScreenEntity> page = new Page<>(query.getPageNum(), query.getPageSize());
|
||||||
LambdaQueryWrapper<ScreenEntity> wrapper = new LambdaQueryWrapper<>();
|
LambdaQueryWrapper<ScreenEntity> wrapper = new LambdaQueryWrapper<>();
|
||||||
// 关键字模糊查询(大屏名称或编码)
|
// 数据权限过滤
|
||||||
if (StringUtils.isNotBlank(query.getKeyword())) {
|
LoginUserVO currentUser = DataScopeHelper.getCurrentUser();
|
||||||
wrapper.and(w -> w
|
if (!DataScopeHelper.isCitySupervisor(currentUser)) {
|
||||||
.like(ScreenEntity::getScreenName, query.getKeyword())
|
if (DataScopeHelper.isDistrictSupervisor(currentUser)) {
|
||||||
.or()
|
wrapper.eq(ScreenEntity::getDistrict, currentUser.getDistrictCode());
|
||||||
.like(ScreenEntity::getScreenCode, query.getKeyword())
|
} else if (DataScopeHelper.isOperator(currentUser)) {
|
||||||
);
|
wrapper.eq(ScreenEntity::getOperatorUnit, currentUser.getOrgName());
|
||||||
|
} else {
|
||||||
|
return RestResult.ok(new Page<>(query.getPageNum(), query.getPageSize(), 0));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// 大屏名称模糊查询
|
||||||
|
if (StringUtils.isNotBlank(query.getScreenName())) {
|
||||||
|
wrapper.like(ScreenEntity::getScreenName, query.getScreenName());
|
||||||
|
}
|
||||||
|
// 大屏编码精确查询
|
||||||
|
if (StringUtils.isNotBlank(query.getScreenCode())) {
|
||||||
|
wrapper.eq(ScreenEntity::getScreenCode, query.getScreenCode());
|
||||||
|
}
|
||||||
|
// 业主单位模糊查询
|
||||||
|
if (StringUtils.isNotBlank(query.getOwnerUnit())) {
|
||||||
|
wrapper.like(ScreenEntity::getOwnerUnit, query.getOwnerUnit());
|
||||||
}
|
}
|
||||||
// 行政区划精确筛选
|
// 行政区划精确筛选
|
||||||
if (StringUtils.isNotBlank(query.getDistrict())) {
|
if (StringUtils.isNotBlank(query.getDistrict())) {
|
||||||
|
|
@ -161,6 +178,17 @@ public class ScreenServiceImpl extends ServiceImpl<ScreenMapper, ScreenEntity> i
|
||||||
@Override
|
@Override
|
||||||
public RestResult<List<Map<String, Object>>> getScreenOptions() {
|
public RestResult<List<Map<String, Object>>> getScreenOptions() {
|
||||||
LambdaQueryWrapper<ScreenEntity> wrapper = new LambdaQueryWrapper<>();
|
LambdaQueryWrapper<ScreenEntity> wrapper = new LambdaQueryWrapper<>();
|
||||||
|
// 数据权限过滤
|
||||||
|
LoginUserVO optionUser = DataScopeHelper.getCurrentUser();
|
||||||
|
if (!DataScopeHelper.isCitySupervisor(optionUser)) {
|
||||||
|
if (DataScopeHelper.isDistrictSupervisor(optionUser)) {
|
||||||
|
wrapper.eq(ScreenEntity::getDistrict, optionUser.getDistrictCode());
|
||||||
|
} else if (DataScopeHelper.isOperator(optionUser)) {
|
||||||
|
wrapper.eq(ScreenEntity::getOperatorUnit, optionUser.getOrgName());
|
||||||
|
} else {
|
||||||
|
return RestResult.ok(new ArrayList<>());
|
||||||
|
}
|
||||||
|
}
|
||||||
wrapper.select(ScreenEntity::getId, ScreenEntity::getScreenName, ScreenEntity::getScreenCode);
|
wrapper.select(ScreenEntity::getId, ScreenEntity::getScreenName, ScreenEntity::getScreenCode);
|
||||||
wrapper.orderByAsc(ScreenEntity::getScreenCode);
|
wrapper.orderByAsc(ScreenEntity::getScreenCode);
|
||||||
List<ScreenEntity> list = this.list(wrapper);
|
List<ScreenEntity> list = this.list(wrapper);
|
||||||
|
|
@ -217,9 +245,25 @@ public class ScreenServiceImpl extends ServiceImpl<ScreenMapper, ScreenEntity> i
|
||||||
@Override
|
@Override
|
||||||
public RestResult<List<Map<String, Object>>> exportData(ScreenQuery query) {
|
public RestResult<List<Map<String, Object>>> exportData(ScreenQuery query) {
|
||||||
LambdaQueryWrapper<ScreenEntity> wrapper = new LambdaQueryWrapper<>();
|
LambdaQueryWrapper<ScreenEntity> wrapper = new LambdaQueryWrapper<>();
|
||||||
if (StringUtils.isNotBlank(query.getKeyword())) {
|
// 数据权限过滤
|
||||||
wrapper.and(w -> w.like(ScreenEntity::getScreenName, query.getKeyword())
|
LoginUserVO exportUser = DataScopeHelper.getCurrentUser();
|
||||||
.or().like(ScreenEntity::getScreenCode, query.getKeyword()));
|
if (!DataScopeHelper.isCitySupervisor(exportUser)) {
|
||||||
|
if (DataScopeHelper.isDistrictSupervisor(exportUser)) {
|
||||||
|
wrapper.eq(ScreenEntity::getDistrict, exportUser.getDistrictCode());
|
||||||
|
} else if (DataScopeHelper.isOperator(exportUser)) {
|
||||||
|
wrapper.eq(ScreenEntity::getOperatorUnit, exportUser.getOrgName());
|
||||||
|
} else {
|
||||||
|
return RestResult.ok(new ArrayList<>());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (StringUtils.isNotBlank(query.getScreenName())) {
|
||||||
|
wrapper.like(ScreenEntity::getScreenName, query.getScreenName());
|
||||||
|
}
|
||||||
|
if (StringUtils.isNotBlank(query.getScreenCode())) {
|
||||||
|
wrapper.eq(ScreenEntity::getScreenCode, query.getScreenCode());
|
||||||
|
}
|
||||||
|
if (StringUtils.isNotBlank(query.getOwnerUnit())) {
|
||||||
|
wrapper.like(ScreenEntity::getOwnerUnit, query.getOwnerUnit());
|
||||||
}
|
}
|
||||||
if (StringUtils.isNotBlank(query.getDistrict())) {
|
if (StringUtils.isNotBlank(query.getDistrict())) {
|
||||||
wrapper.eq(ScreenEntity::getDistrict, query.getDistrict());
|
wrapper.eq(ScreenEntity::getDistrict, query.getDistrict());
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,50 @@
|
||||||
|
package com.chinaweal.youfool.prj.modules.system.util;
|
||||||
|
|
||||||
|
import cn.dev33.satoken.stp.StpUtil;
|
||||||
|
import com.chinaweal.youfool.prj.common.constants.SessionConstants;
|
||||||
|
import com.chinaweal.youfool.prj.modules.system.entity.vo.LoginUserVO;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 数据权限工具类
|
||||||
|
*
|
||||||
|
* @author chenjy
|
||||||
|
* @since 2026/05/25
|
||||||
|
*/
|
||||||
|
public final class DataScopeHelper {
|
||||||
|
|
||||||
|
private static final String ROLE_CITY = "CITY_SUPERVISOR";
|
||||||
|
|
||||||
|
private static final String ROLE_DISTRICT = "DISTRICT_SUPERVISOR";
|
||||||
|
|
||||||
|
private static final String ROLE_OPERATOR = "OPERATOR";
|
||||||
|
|
||||||
|
private DataScopeHelper() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public static LoginUserVO getCurrentUser() {
|
||||||
|
try {
|
||||||
|
return StpUtil.getSession().getModel(SessionConstants.USER_KEY, LoginUserVO.class);
|
||||||
|
} catch (Exception e) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean isCitySupervisor(LoginUserVO user) {
|
||||||
|
return hasRole(user, ROLE_CITY);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean isDistrictSupervisor(LoginUserVO user) {
|
||||||
|
return hasRole(user, ROLE_DISTRICT);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean isOperator(LoginUserVO user) {
|
||||||
|
return hasRole(user, ROLE_OPERATOR);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static boolean hasRole(LoginUserVO user, String roleCode) {
|
||||||
|
if (user == null || user.getRoles() == null) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return user.getRoles().contains(roleCode);
|
||||||
|
}
|
||||||
|
}
|
||||||
17
task_plan.md
17
task_plan.md
|
|
@ -267,6 +267,23 @@ public RestResult<?> remove(...) { ... }
|
||||||
|
|
||||||
**注意**:数据权限需要修改现有 10 个模块的 Service 查询方法,影响范围较大。**建议先实现 Phase 1-3 的认证和操作权限,Phase 4 数据权限单独迭代。**
|
**注意**:数据权限需要修改现有 10 个模块的 Service 查询方法,影响范围较大。**建议先实现 Phase 1-3 的认证和操作权限,Phase 4 数据权限单独迭代。**
|
||||||
|
|
||||||
|
**实际实施**:
|
||||||
|
- 创建 `DataScopeHelper` 工具类(`modules/system/util/`),提供角色判断静态方法
|
||||||
|
- 修改 7 个 Service 的 queryList 方法,添加数据权限过滤:
|
||||||
|
- ScreenServiceImpl: queryList + exportData + getScreenOptions
|
||||||
|
- RecordingConfigServiceImpl: queryList + getConfigurableScreens
|
||||||
|
- RecordingTaskServiceImpl: queryList
|
||||||
|
- MonitorRecordServiceImpl: queryList
|
||||||
|
- EvidenceRecordServiceImpl: queryList
|
||||||
|
- MonitoringClueServiceImpl: queryList
|
||||||
|
- ClueTransferServiceImpl: queryList + queryPendingClues
|
||||||
|
- 过滤规则:
|
||||||
|
- CITY_SUPERVISOR: 不过滤(全市数据)
|
||||||
|
- DISTRICT_SUPERVISOR: 按 `district = currentUser.districtCode` 过滤
|
||||||
|
- OPERATOR: Screen 按 `operatorUnit = orgName`,其他模块通过 screenId 关联 Screen 过滤
|
||||||
|
- ClueTransferServiceImpl 特殊处理:OR 条件(转办目标辖区 + 线索来源辖区)
|
||||||
|
- 跳过模块:LawClauseServiceImpl(无区域字段)、MonitoringRuleServiceImpl(复杂 scope JSON)、EvidenceRuleRelationServiceImpl(关联表)
|
||||||
|
|
||||||
**状态**: ✅ 完成
|
**状态**: ✅ 完成
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue