-- 案件监督:负面清单巡查 + 周调度 -- 1) t_case_file 补业务分类/创建单位/办案单位/案件状态 -- 2) 周调度主表 + 案件快照 + 参会人员 -- 3) 案件监督改为目录并挂两个子菜单及功能权限 -- ========== 案件快照补字段 ========== ALTER TABLE t_case_file ADD COLUMN IF NOT EXISTS biz_category VARCHAR(32) DEFAULT '经侦'; ALTER TABLE t_case_file ADD COLUMN IF NOT EXISTS create_dept VARCHAR(128); ALTER TABLE t_case_file ADD COLUMN IF NOT EXISTS handle_dept VARCHAR(128); ALTER TABLE t_case_file ADD COLUMN IF NOT EXISTS case_status VARCHAR(32) DEFAULT 'investigating'; COMMENT ON COLUMN t_case_file.biz_category IS '业务系统分类:经侦/刑侦等'; COMMENT ON COLUMN t_case_file.create_dept IS '创建单位'; COMMENT ON COLUMN t_case_file.handle_dept IS '办案单位'; COMMENT ON COLUMN t_case_file.case_status IS '案件状态:pending_filing/investigating/closed/withdrawn'; UPDATE t_case_file SET biz_category = COALESCE(NULLIF(biz_category, ''), '经侦'), case_status = COALESCE(NULLIF(case_status, ''), 'investigating') WHERE deleted_flag = FALSE; -- ========== 周调度 ========== CREATE TABLE IF NOT EXISTS t_case_weekly_schedule ( schedule_id BIGSERIAL PRIMARY KEY, schedule_no VARCHAR(64) NOT NULL, schedule_content TEXT, status VARCHAR(32) NOT NULL DEFAULT 'draft', create_user_id BIGINT, create_user_name VARCHAR(64), push_time TIMESTAMP, lock_time TIMESTAMP, create_time TIMESTAMP DEFAULT NOW(), update_time TIMESTAMP DEFAULT NOW(), deleted_flag BOOLEAN DEFAULT FALSE ); CREATE UNIQUE INDEX IF NOT EXISTS uk_t_case_weekly_schedule_no ON t_case_weekly_schedule(schedule_no) WHERE deleted_flag = FALSE; CREATE INDEX IF NOT EXISTS idx_t_case_weekly_schedule_status ON t_case_weekly_schedule(status) WHERE deleted_flag = FALSE; COMMENT ON TABLE t_case_weekly_schedule IS '案件周调度:draft未推送 / pending_confirm待确认 / confirmed全员确认已锁定'; CREATE TABLE IF NOT EXISTS t_case_weekly_schedule_case ( item_id BIGSERIAL PRIMARY KEY, schedule_id BIGINT NOT NULL, case_id BIGINT NOT NULL, case_no VARCHAR(64) NOT NULL, case_name VARCHAR(200) NOT NULL, create_dept VARCHAR(128), handle_dept VARCHAR(128), case_status VARCHAR(32), accept_time TIMESTAMP, sort_no INTEGER DEFAULT 0, create_time TIMESTAMP DEFAULT NOW() ); CREATE INDEX IF NOT EXISTS idx_t_case_weekly_schedule_case_sid ON t_case_weekly_schedule_case(schedule_id); CREATE TABLE IF NOT EXISTS t_case_weekly_schedule_member ( member_id BIGSERIAL PRIMARY KEY, schedule_id BIGINT NOT NULL, employee_id BIGINT NOT NULL, employee_name VARCHAR(64), confirmed_flag BOOLEAN DEFAULT FALSE, confirm_time TIMESTAMP, create_time TIMESTAMP DEFAULT NOW() ); CREATE UNIQUE INDEX IF NOT EXISTS uk_t_case_weekly_schedule_member ON t_case_weekly_schedule_member(schedule_id, employee_id); CREATE INDEX IF NOT EXISTS idx_t_case_weekly_schedule_member_emp ON t_case_weekly_schedule_member(employee_id, confirmed_flag); -- ========== 菜单:案件监督改为目录 ========== UPDATE t_menu SET menu_type = 1, component = NULL, path = '/case-management/supervision', update_time = NOW() WHERE menu_name = '案件监督' AND path = '/case-management/supervision' AND deleted_flag = 0; -- 旧功能点挂在原页面上,改为目录后下线 UPDATE t_menu f SET deleted_flag = TRUE, update_time = NOW() FROM t_menu p WHERE p.menu_name = '案件监督' AND p.path = '/case-management/supervision' AND p.deleted_flag = 0 AND f.parent_id = p.menu_id AND f.menu_type = 3 AND f.deleted_flag = 0 AND f.web_perms IN ( 'case:query', 'case-supervision:query', 'case-supervision:add', 'case-supervision:view', 'case-supervision:supervise' ); INSERT INTO t_menu (menu_name, menu_type, parent_id, sort, path, component, frame_flag, cache_flag, visible_flag, disabled_flag, perms_type, icon, deleted_flag, create_user_id, create_time, update_time) SELECT v.menu_name, 2, p.menu_id, v.sort_num, v.path, v.component, false, false, true, false, 1, NULL, false, 1, NOW(), NOW() FROM t_menu p CROSS JOIN (VALUES ('负面清单巡查', 1, '/case-management/supervision/negative-list', '/business/case-management/negative-list.vue'), ('周调度', 2, '/case-management/supervision/weekly-schedule', '/business/case-management/weekly-schedule.vue') ) AS v(menu_name, sort_num, path, component) WHERE p.menu_name = '案件监督' AND p.path = '/case-management/supervision' AND p.deleted_flag = 0 AND NOT EXISTS (SELECT 1 FROM t_menu x WHERE x.path = v.path AND x.deleted_flag = 0); -- 功能权限 INSERT INTO t_menu (menu_name, menu_type, parent_id, sort, frame_flag, cache_flag, visible_flag, disabled_flag, perms_type, api_perms, web_perms, context_menu_id, deleted_flag, create_user_id, create_time, update_time) SELECT v.menu_name, 3, c.menu_id, v.sort_num, false, false, true, false, 1, v.perms, v.perms, c.menu_id, false, 1, NOW(), NOW() FROM t_menu c CROSS JOIN (VALUES ('查询', 10, 'negative-list:query', '/case-management/supervision/negative-list'), ('查询', 10, 'weekly-schedule:query', '/case-management/supervision/weekly-schedule'), ('新增', 20, 'weekly-schedule:add', '/case-management/supervision/weekly-schedule'), ('查看', 30, 'weekly-schedule:view', '/case-management/supervision/weekly-schedule'), ('推送', 40, 'weekly-schedule:push', '/case-management/supervision/weekly-schedule'), ('确认', 50, 'weekly-schedule:confirm', '/case-management/supervision/weekly-schedule'), ('打印', 60, 'weekly-schedule:print', '/case-management/supervision/weekly-schedule') ) AS v(menu_name, sort_num, perms, child_path) WHERE c.path = v.child_path AND c.deleted_flag = 0 AND NOT EXISTS (SELECT 1 FROM t_menu x WHERE x.web_perms = v.perms AND x.deleted_flag = 0); -- 原有「案件监督」权限的角色同步绑定子菜单及功能点 INSERT INTO t_role_menu (role_id, menu_id) SELECT DISTINCT rm.role_id, c.menu_id FROM t_role_menu rm JOIN t_menu p ON p.menu_id = rm.menu_id JOIN t_menu c ON c.parent_id = p.menu_id AND c.deleted_flag = 0 AND c.menu_type IN (2, 3) WHERE p.menu_name = '案件监督' AND p.path = '/case-management/supervision' AND p.deleted_flag = 0 AND NOT EXISTS ( SELECT 1 FROM t_role_menu x WHERE x.role_id = rm.role_id AND x.menu_id = c.menu_id );