Files
shz-backend/sql/migration_public_job_fair_review_workflow.sql
lapuda 5060fb0557 feat: Implement job fair company registration review workflow
- Added review status fields to the public_job_fair_company table to manage company registration states (pending, approved, rejected).
- Enhanced PublicJobFairServiceImpl to handle company registration, review, and job management for companies.
- Updated PublicJobFairMapper.xml with new SQL queries for managing company relations and reviews.
- Created migration script to add review fields and set default values for existing records.
- Introduced new permissions for company users to manage job postings and registration status.
- Added utility methods for ensuring proper role checks and company retrieval.
2026-07-15 11:34:31 +08:00

286 lines
10 KiB
PL/PgSQL
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

-- 公共招聘会企业报名审核及企业岗位维护权限
--
-- 说明:
-- 1. 企业在 CMS 报名后进入 0-待审核;管理员审核为 1-通过或 2-驳回。
-- 2. 历史企业关联没有审核字段,统一按 1-已通过处理,避免历史数据突然不能维护。
-- 3. 脚本按权限标识和角色关联幂等执行,可重复执行。
BEGIN;
-- 1. 企业报名审核字段
ALTER TABLE "shz"."public_job_fair_company"
ADD COLUMN IF NOT EXISTS "review_status" CHAR(1) DEFAULT '1';
ALTER TABLE "shz"."public_job_fair_company"
ADD COLUMN IF NOT EXISTS "review_by" VARCHAR(64);
ALTER TABLE "shz"."public_job_fair_company"
ADD COLUMN IF NOT EXISTS "review_time" TIMESTAMP;
ALTER TABLE "shz"."public_job_fair_company"
ADD COLUMN IF NOT EXISTS "review_remark" VARCHAR(500);
UPDATE "shz"."public_job_fair_company"
SET "review_status" = '1'
WHERE "review_status" IS NULL;
COMMENT ON COLUMN "shz"."public_job_fair_company"."review_status"
IS '审核状态 0待审核 1通过 2驳回';
COMMENT ON COLUMN "shz"."public_job_fair_company"."review_by"
IS '审核人';
COMMENT ON COLUMN "shz"."public_job_fair_company"."review_time"
IS '审核时间';
COMMENT ON COLUMN "shz"."public_job_fair_company"."review_remark"
IS '审核意见';
-- 2. 新增 CMS 按钮权限。
-- 当前线上招聘会列表菜单为 cms:publicJobFair:list找不到时兼容已知父菜单 2056。
INSERT INTO "shz"."sys_menu" (
"menu_id", "menu_name", "parent_id", "order_num", "path", "component",
"query", "route_name", "is_frame", "is_cache", "menu_type", "visible",
"status", "perms", "icon", "create_by", "create_time", "update_by",
"update_time", "remark"
)
SELECT
(SELECT COALESCE(MAX("menu_id"), 0) + 1 FROM "shz"."sys_menu"),
'企业报名公共招聘会', parent_menu."menu_id", 1, '', '', '', '',
1, 0, 'F', '0', '0', 'cms:publicJobFair:signup', '#', 'admin', CURRENT_TIMESTAMP,
'', NULL, '企业用户报名公共招聘会'
FROM (
SELECT COALESCE((
SELECT "menu_id"
FROM "shz"."sys_menu"
WHERE "perms" = 'cms:publicJobFair:list'
ORDER BY "menu_id"
LIMIT 1
), 2056) AS "menu_id"
) parent_menu
WHERE NOT EXISTS (
SELECT 1 FROM "shz"."sys_menu"
WHERE "perms" = 'cms:publicJobFair:signup'
);
INSERT INTO "shz"."sys_menu" (
"menu_id", "menu_name", "parent_id", "order_num", "path", "component",
"query", "route_name", "is_frame", "is_cache", "menu_type", "visible",
"status", "perms", "icon", "create_by", "create_time", "update_by",
"update_time", "remark"
)
SELECT
(SELECT COALESCE(MAX("menu_id"), 0) + 1 FROM "shz"."sys_menu"),
'企业新增报名岗位', parent_menu."menu_id", 2, '', '', '', '',
1, 0, 'F', '0', '0', 'cms:publicJobFair:job:add', '#', 'admin', CURRENT_TIMESTAMP,
'', NULL, '审核通过后企业新增报名岗位'
FROM (
SELECT COALESCE((
SELECT "menu_id" FROM "shz"."sys_menu"
WHERE "perms" = 'cms:publicJobFair:list'
ORDER BY "menu_id" LIMIT 1
), 2056) AS "menu_id"
) parent_menu
WHERE NOT EXISTS (
SELECT 1 FROM "shz"."sys_menu"
WHERE "perms" = 'cms:publicJobFair:job:add'
);
INSERT INTO "shz"."sys_menu" (
"menu_id", "menu_name", "parent_id", "order_num", "path", "component",
"query", "route_name", "is_frame", "is_cache", "menu_type", "visible",
"status", "perms", "icon", "create_by", "create_time", "update_by",
"update_time", "remark"
)
SELECT
(SELECT COALESCE(MAX("menu_id"), 0) + 1 FROM "shz"."sys_menu"),
'企业修改报名岗位', parent_menu."menu_id", 3, '', '', '', '',
1, 0, 'F', '0', '0', 'cms:publicJobFair:job:edit', '#', 'admin', CURRENT_TIMESTAMP,
'', NULL, '企业修改自己的报名岗位'
FROM (
SELECT COALESCE((
SELECT "menu_id" FROM "shz"."sys_menu"
WHERE "perms" = 'cms:publicJobFair:list'
ORDER BY "menu_id" LIMIT 1
), 2056) AS "menu_id"
) parent_menu
WHERE NOT EXISTS (
SELECT 1 FROM "shz"."sys_menu"
WHERE "perms" = 'cms:publicJobFair:job:edit'
);
INSERT INTO "shz"."sys_menu" (
"menu_id", "menu_name", "parent_id", "order_num", "path", "component",
"query", "route_name", "is_frame", "is_cache", "menu_type", "visible",
"status", "perms", "icon", "create_by", "create_time", "update_by",
"update_time", "remark"
)
SELECT
(SELECT COALESCE(MAX("menu_id"), 0) + 1 FROM "shz"."sys_menu"),
'企业删除报名岗位', parent_menu."menu_id", 4, '', '', '', '',
1, 0, 'F', '0', '0', 'cms:publicJobFair:job:remove', '#', 'admin', CURRENT_TIMESTAMP,
'', NULL, '企业删除自己的报名岗位'
FROM (
SELECT COALESCE((
SELECT "menu_id" FROM "shz"."sys_menu"
WHERE "perms" = 'cms:publicJobFair:list'
ORDER BY "menu_id" LIMIT 1
), 2056) AS "menu_id"
) parent_menu
WHERE NOT EXISTS (
SELECT 1 FROM "shz"."sys_menu"
WHERE "perms" = 'cms:publicJobFair:job:remove'
);
INSERT INTO "shz"."sys_menu" (
"menu_id", "menu_name", "parent_id", "order_num", "path", "component",
"query", "route_name", "is_frame", "is_cache", "menu_type", "visible",
"status", "perms", "icon", "create_by", "create_time", "update_by",
"update_time", "remark"
)
SELECT
(SELECT COALESCE(MAX("menu_id"), 0) + 1 FROM "shz"."sys_menu"),
'审核参会企业', parent_menu."menu_id", 5, '', '', '', '',
1, 0, 'F', '0', '0', 'cms:publicJobFair:review', '#', 'admin', CURRENT_TIMESTAMP,
'', NULL, '管理员审核招聘会企业报名'
FROM (
SELECT COALESCE((
SELECT "menu_id" FROM "shz"."sys_menu"
WHERE "perms" = 'cms:publicJobFair:list'
ORDER BY "menu_id" LIMIT 1
), 2056) AS "menu_id"
) parent_menu
WHERE NOT EXISTS (
SELECT 1 FROM "shz"."sys_menu"
WHERE "perms" = 'cms:publicJobFair:review'
);
INSERT INTO "shz"."sys_menu" (
"menu_id", "menu_name", "parent_id", "order_num", "path", "component",
"query", "route_name", "is_frame", "is_cache", "menu_type", "visible",
"status", "perms", "icon", "create_by", "create_time", "update_by",
"update_time", "remark"
)
SELECT
(SELECT COALESCE(MAX("menu_id"), 0) + 1 FROM "shz"."sys_menu"),
'管理员添加参会企业', parent_menu."menu_id", 6, '', '', '', '',
1, 0, 'F', '0', '0', 'cms:publicJobFair:company:add', '#', 'admin', CURRENT_TIMESTAMP,
'', NULL, '管理员向招聘会添加参会企业'
FROM (
SELECT COALESCE((
SELECT "menu_id" FROM "shz"."sys_menu"
WHERE "perms" = 'cms:publicJobFair:list'
ORDER BY "menu_id" LIMIT 1
), 2056) AS "menu_id"
) parent_menu
WHERE NOT EXISTS (
SELECT 1 FROM "shz"."sys_menu"
WHERE "perms" = 'cms:publicJobFair:company:add'
);
INSERT INTO "shz"."sys_menu" (
"menu_id", "menu_name", "parent_id", "order_num", "path", "component",
"query", "route_name", "is_frame", "is_cache", "menu_type", "visible",
"status", "perms", "icon", "create_by", "create_time", "update_by",
"update_time", "remark"
)
SELECT
(SELECT COALESCE(MAX("menu_id"), 0) + 1 FROM "shz"."sys_menu"),
'管理员移除参会企业', parent_menu."menu_id", 7, '', '', '', '',
1, 0, 'F', '0', '0', 'cms:publicJobFair:company:remove', '#', 'admin', CURRENT_TIMESTAMP,
'', NULL, '管理员从招聘会移除参会企业'
FROM (
SELECT COALESCE((
SELECT "menu_id" FROM "shz"."sys_menu"
WHERE "perms" = 'cms:publicJobFair:list'
ORDER BY "menu_id" LIMIT 1
), 2056) AS "menu_id"
) parent_menu
WHERE NOT EXISTS (
SELECT 1 FROM "shz"."sys_menu"
WHERE "perms" = 'cms:publicJobFair:company:remove'
);
-- 3. 企业角色(线上 role_id=1102获得企业端报名和岗位维护权限。
INSERT INTO "shz"."sys_role_menu" ("role_id", "menu_id")
SELECT 1102, menu."menu_id"
FROM "shz"."sys_menu" menu
WHERE menu."perms" IN (
'cms:publicJobFair:signup',
'cms:publicJobFair:job:add',
'cms:publicJobFair:job:edit',
'cms:publicJobFair:job:remove'
)
AND NOT EXISTS (
SELECT 1
FROM "shz"."sys_role_menu" existing
WHERE existing."role_id" = 1102
AND existing."menu_id" = menu."menu_id"
);
-- 管理员同时获得 CMS 详情页的企业/岗位维护权限;企业角色虽有同名岗位权限,
-- 但 Service 层会拒绝其调用管理员关联接口。
INSERT INTO "shz"."sys_role_menu" ("role_id", "menu_id")
SELECT DISTINCT admin_role."role_id", menu."menu_id"
FROM (
SELECT DISTINCT role_menu."role_id"
FROM "shz"."sys_role_menu" role_menu
JOIN "shz"."sys_menu" list_menu
ON list_menu."menu_id" = role_menu."menu_id"
AND list_menu."perms" = 'cms:publicJobFair:list'
WHERE role_menu."role_id" <> 1102
UNION
SELECT "role_id"
FROM "shz"."sys_role"
WHERE "role_name" IN ('管理员', '超级管理员')
) admin_role
JOIN "shz"."sys_menu" menu
ON menu."perms" IN (
'cms:publicJobFair:company:add',
'cms:publicJobFair:company:remove',
'cms:publicJobFair:job:add',
'cms:publicJobFair:job:remove'
)
WHERE NOT EXISTS (
SELECT 1
FROM "shz"."sys_role_menu" existing
WHERE existing."role_id" = admin_role."role_id"
AND existing."menu_id" = menu."menu_id"
);
-- 5. 管理员角色获得企业审核权限:包括已有公共招聘会列表权限的非企业角色
-- (当前线上为网格员 1103以及超级管理员。企业角色不授予审核权限。
INSERT INTO "shz"."sys_role_menu" ("role_id", "menu_id")
SELECT DISTINCT admin_role."role_id", review_menu."menu_id"
FROM (
SELECT DISTINCT role_menu."role_id"
FROM "shz"."sys_role_menu" role_menu
JOIN "shz"."sys_menu" list_menu
ON list_menu."menu_id" = role_menu."menu_id"
AND list_menu."perms" = 'cms:publicJobFair:list'
WHERE role_menu."role_id" <> 1102
UNION
SELECT "role_id"
FROM "shz"."sys_role"
WHERE "role_name" IN ('管理员', '超级管理员')
) admin_role
CROSS JOIN (
SELECT "menu_id"
FROM "shz"."sys_menu"
WHERE "perms" = 'cms:publicJobFair:review'
ORDER BY "menu_id"
LIMIT 1
) review_menu
WHERE NOT EXISTS (
SELECT 1
FROM "shz"."sys_role_menu" existing
WHERE existing."role_id" = admin_role."role_id"
AND existing."menu_id" = review_menu."menu_id"
);
COMMIT;
-- 验证:
-- SELECT column_name, data_type, column_default
-- FROM information_schema.columns
-- WHERE table_schema = 'shz' AND table_name = 'public_job_fair_company'
-- ORDER BY ordinal_position;
-- SELECT menu_id, menu_name, perms
-- FROM shz.sys_menu
-- WHERE perms LIKE 'cms:publicJobFair:%'
-- ORDER BY menu_id;