铜陵经侦
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

151 lines
6.7 KiB

4 days ago
-- 案件监督:负面清单巡查 + 周调度
-- 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
);