149 lines
5.5 KiB
PL/PgSQL
149 lines
5.5 KiB
PL/PgSQL
-- 执行状态:测试环境已执行
|
||
-- 测试环境:test
|
||
-- 测试执行时间:2026-07-24 09:39:31 +0800
|
||
-- 正式环境:未执行
|
||
-- 招聘会机构管理及场地所属机构多选关联。
|
||
-- 依赖:招聘会管理目录(menu_name='招聘会管理')和场地信息维护权限已存在。
|
||
-- 可重复执行;正式环境仅在功能验收通过并获单独授权后执行。
|
||
|
||
BEGIN;
|
||
|
||
SET LOCAL search_path = shz, public;
|
||
|
||
CREATE SEQUENCE IF NOT EXISTS cms_job_fair_institution_id_seq
|
||
START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE CACHE 1;
|
||
|
||
CREATE SEQUENCE IF NOT EXISTS cms_venue_institution_id_seq
|
||
START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE CACHE 1;
|
||
|
||
CREATE TABLE IF NOT EXISTS cms_job_fair_institution (
|
||
id BIGINT NOT NULL DEFAULT nextval('cms_job_fair_institution_id_seq') PRIMARY KEY,
|
||
institution_name VARCHAR(200) NOT NULL,
|
||
institution_intro TEXT,
|
||
create_by VARCHAR(64) DEFAULT '',
|
||
create_time TIMESTAMP(0),
|
||
update_by VARCHAR(64) DEFAULT '',
|
||
update_time TIMESTAMP(0),
|
||
remark VARCHAR(500),
|
||
del_flag CHAR(1) DEFAULT '0'
|
||
);
|
||
|
||
COMMENT ON TABLE cms_job_fair_institution IS '招聘会机构管理表';
|
||
COMMENT ON COLUMN cms_job_fair_institution.institution_name IS '机构名称';
|
||
COMMENT ON COLUMN cms_job_fair_institution.institution_intro IS '机构简介';
|
||
COMMENT ON COLUMN cms_job_fair_institution.del_flag IS '删除标志(0代表存在 2代表删除)';
|
||
|
||
CREATE UNIQUE INDEX IF NOT EXISTS uk_cms_job_fair_institution_name
|
||
ON cms_job_fair_institution (institution_name) WHERE del_flag = '0';
|
||
|
||
CREATE TABLE IF NOT EXISTS cms_venue_institution (
|
||
id BIGINT NOT NULL DEFAULT nextval('cms_venue_institution_id_seq') PRIMARY KEY,
|
||
venue_id BIGINT NOT NULL,
|
||
institution_id BIGINT NOT NULL
|
||
);
|
||
|
||
COMMENT ON TABLE cms_venue_institution IS '场地与招聘会机构关联表';
|
||
COMMENT ON COLUMN cms_venue_institution.venue_id IS '场地ID';
|
||
COMMENT ON COLUMN cms_venue_institution.institution_id IS '机构ID';
|
||
|
||
CREATE UNIQUE INDEX IF NOT EXISTS uk_cms_venue_institution
|
||
ON cms_venue_institution (venue_id, institution_id);
|
||
CREATE INDEX IF NOT EXISTS idx_cms_venue_institution_institution
|
||
ON cms_venue_institution (institution_id);
|
||
|
||
WITH parent_menu AS (
|
||
SELECT menu_id
|
||
FROM sys_menu
|
||
WHERE menu_name = '招聘会管理' AND parent_id = 0
|
||
ORDER BY menu_id
|
||
LIMIT 1
|
||
), inserted_page AS (
|
||
INSERT INTO sys_menu (
|
||
menu_id, menu_name, parent_id, order_num, path, component, query, route_name,
|
||
is_frame, is_cache, menu_type, visible, status, perms, icon,
|
||
create_by, create_time, remark
|
||
)
|
||
SELECT
|
||
(SELECT COALESCE(MAX(menu_id), 0) + 1 FROM sys_menu),
|
||
'机构管理', parent_menu.menu_id, 3, 'institution', 'jobfair/institution/index', NULL, '',
|
||
1, 0, 'C', '0', '0', 'cms:jobFairInstitution:list', '#',
|
||
'system', NOW(), '招聘会机构管理菜单'
|
||
FROM parent_menu
|
||
WHERE NOT EXISTS (
|
||
SELECT 1
|
||
FROM sys_menu existing
|
||
WHERE existing.parent_id = parent_menu.menu_id
|
||
AND existing.menu_name = '机构管理'
|
||
)
|
||
RETURNING menu_id
|
||
), institution_page AS (
|
||
SELECT menu_id FROM inserted_page
|
||
UNION
|
||
SELECT menu_id
|
||
FROM sys_menu
|
||
WHERE menu_name = '机构管理'
|
||
AND parent_id = (SELECT menu_id FROM parent_menu)
|
||
), button_seed(menu_name, order_num, perms) AS (
|
||
VALUES
|
||
('机构查询', 1, 'cms:jobFairInstitution:query'),
|
||
('机构新增', 2, 'cms:jobFairInstitution:add'),
|
||
('机构修改', 3, 'cms:jobFairInstitution:edit'),
|
||
('机构删除', 4, 'cms:jobFairInstitution:remove')
|
||
), max_menu AS (
|
||
SELECT COALESCE(MAX(menu_id), 0) AS menu_id FROM sys_menu
|
||
)
|
||
INSERT INTO sys_menu (
|
||
menu_id, menu_name, parent_id, order_num, path, component, query, route_name,
|
||
is_frame, is_cache, menu_type, visible, status, perms, icon,
|
||
create_by, create_time, remark
|
||
)
|
||
SELECT
|
||
max_menu.menu_id + 1 + ROW_NUMBER() OVER (ORDER BY button_seed.order_num),
|
||
button_seed.menu_name, institution_page.menu_id, button_seed.order_num, '', NULL, NULL, '',
|
||
1, 0, 'F', '0', '0', button_seed.perms, '#',
|
||
'system', NOW(), '招聘会机构管理按钮权限'
|
||
FROM institution_page
|
||
CROSS JOIN button_seed
|
||
CROSS JOIN max_menu
|
||
WHERE NOT EXISTS (
|
||
SELECT 1 FROM sys_menu existing WHERE existing.perms = button_seed.perms
|
||
);
|
||
|
||
WITH institution_menus AS (
|
||
SELECT menu_id
|
||
FROM sys_menu
|
||
WHERE perms IN (
|
||
'cms:jobFairInstitution:list',
|
||
'cms:jobFairInstitution:query',
|
||
'cms:jobFairInstitution:add',
|
||
'cms:jobFairInstitution:edit',
|
||
'cms:jobFairInstitution:remove'
|
||
)
|
||
UNION
|
||
SELECT menu_id
|
||
FROM sys_menu
|
||
WHERE menu_name = '机构管理'
|
||
AND parent_id = (SELECT menu_id FROM sys_menu WHERE menu_name = '招聘会管理' AND parent_id = 0 ORDER BY menu_id LIMIT 1)
|
||
), venue_roles AS (
|
||
SELECT DISTINCT role_id
|
||
FROM sys_role_menu
|
||
WHERE menu_id IN (
|
||
SELECT menu_id FROM sys_menu WHERE perms = 'cms:venueInfo:list'
|
||
)
|
||
), role_menu_rows AS (
|
||
SELECT venue_roles.role_id, institution_menus.menu_id
|
||
FROM venue_roles
|
||
CROSS JOIN institution_menus
|
||
)
|
||
INSERT INTO sys_role_menu (role_id, menu_id)
|
||
SELECT role_menu_rows.role_id, role_menu_rows.menu_id
|
||
FROM role_menu_rows
|
||
WHERE NOT EXISTS (
|
||
SELECT 1
|
||
FROM sys_role_menu existing
|
||
WHERE existing.role_id = role_menu_rows.role_id
|
||
AND existing.menu_id = role_menu_rows.menu_id
|
||
);
|
||
|
||
COMMIT;
|