模块开发说明-政策推送和岗位信息变动推送.md 9.5 KB

政策推送和岗位信息变动推送模块 - 开发设计文档

依据:《需求规格说明书》第3.10节
设计日期:2026-06-09
设计模式:目录树 + 文件管理 / 纯视图分页查询


一、菜单层级

政策推送和岗位信息变动推送 (顶级菜单, sort_no: 2.10, icon: notification-outlined)
  ├── 政策公开文件 (子菜单, sort_no: 1.00)
  └── 画像变动管理 (子菜单, sort_no: 2.00)

二、子模块1:政策公开文件

2.1 功能说明

用于政策公开文件(PDF格式)的上传和宣传,用户登录系统能够在线预览和下载政策文件。

2.2 查询字段

文件名称

2.3 列表字段

文件名称,排序

2.4 支持功能

目录管理,增删改查

2.5 数据库设计

表1:政策文件目录表(policy_category)

CREATE TABLE POLICY_CATEGORY (
    ID            VARCHAR(36)  NOT NULL,
    PARENT_ID     VARCHAR(36)           COMMENT '父级目录ID',
    NAME          VARCHAR(200) NOT NULL COMMENT '目录名称',
    SORT_NO       INTEGER               COMMENT '排序',
    CREATE_BY     VARCHAR(50),
    CREATE_TIME   DATETIME     NOT NULL DEFAULT CURRENT_TIMESTAMP,
    UPDATE_BY     VARCHAR(50),
    UPDATE_TIME   DATETIME     NOT NULL DEFAULT CURRENT_TIMESTAMP,
    SYS_ORG_CODE  VARCHAR(50),
    PRIMARY KEY (ID)
);
COMMENT ON TABLE POLICY_CATEGORY IS '政策文件目录表';

表2:政策文件表(policy_file)

CREATE TABLE POLICY_FILE (
    ID            VARCHAR(36)  NOT NULL,
    CATEGORY_ID   VARCHAR(36)           COMMENT '关联目录ID',
    NAME          VARCHAR(200) NOT NULL COMMENT '文件名称',
    FILE_URL      VARCHAR(500)          COMMENT '文件路径',
    SORT_NO       INTEGER               COMMENT '排序',
    CREATE_BY     VARCHAR(50),
    CREATE_TIME   DATETIME     NOT NULL DEFAULT CURRENT_TIMESTAMP,
    UPDATE_BY     VARCHAR(50),
    UPDATE_TIME   DATETIME     NOT NULL DEFAULT CURRENT_TIMESTAMP,
    SYS_ORG_CODE  VARCHAR(50),
    PRIMARY KEY (ID)
);
COMMENT ON TABLE POLICY_FILE IS '政策文件表';

2.6 文件清单

后端(jeecg-module-zjrs/org/jeecg/modules/zjrs/policyfile/)

文件 说明
entity/PolicyCategory.java 目录实体
entity/PolicyFile.java 文件实体
mapper/PolicyCategoryMapper.java 目录Mapper
mapper/PolicyFileMapper.java 文件Mapper
service/IPolicyCategoryService.java 目录服务接口
service/IPolicyFileService.java 文件服务接口
service/impl/PolicyCategoryServiceImpl.java 目录服务实现
service/impl/PolicyFileServiceImpl.java 文件服务实现
controller/PolicyCategoryController.java 目录Controller(支持树查+CRUD)
controller/PolicyFileController.java 文件Controller(CRUD)

前端(jeecgboot-vue3/src/views/policyfile/)

文件 说明
PolicyFileList.vue 左树右表页面
PolicyFile.data.ts 表格列+表单配置
PolicyFile.api.ts API接口
components/PolicyFileForm.vue 文件表单组件
components/PolicyFileModal.vue 文件弹窗组件
components/PolicyCategoryForm.vue 目录表单组件
components/PolicyCategoryModal.vue 目录弹窗组件

2.7 UI布局

左右布局:左侧目录树(可搜索、新增、编辑、删除)+ 右侧文件列表(按选中目录过滤)


三、子模块2:画像变动管理

3.1 功能说明

个人画像状态分为(1)求职信息不完善(2)求职失败(3)就业登记(4)失业登记

3.2 查询字段

户口所属区域,姓名,学历,性别,年龄,画像状态

3.3 列表字段

证件号码,姓名,户口所属区县,性别,学历,年龄,画像状态,情况说明,数据日期,自定义标签,最后通知时间

3.4 支持功能

数据刷新,查看,发送消息,修改自定义标签

3.5 数据库设计

无独立物理表

画像变动模块不创建独立物理表,所有数据通过视图从现有表计算得出:

数据项 来源
个人信息 PERSONAL_INFO
简历情况 RESUME_INFO(is_default=是)
求职失败 INTERVIEW_FAIL_DIAGNOSIS
就业登记 EMPLOYMENT_RECORD
失业登记 UNEMPLOYMENT_RECORD
自定义标签/通知时间 PERSONAL_STATUS_LOCAL(与个人就业状态感知共用)

视图:v_profile_change

CREATE OR REPLACE VIEW V_PROFILE_CHANGE AS
SELECT
    pi.ID AS PERSONAL_ID, pi.ID_NUMBER, pi.FULL_NAME,
    pi.HOUSEHOLD_LOCATION AS HOUSEHOLD_DISTRICT, pi.GENDER, pi.EDUCATION,
    FLOOR(MONTHS_BETWEEN(SYSDATE, pi.BIRTH_DATE) / 12) AS AGE,
    CASE
        WHEN pi.JOB_SEARCH_STATUS IN ('离职-随时到岗','在职-月内到岗','在职-考虑机会','应届毕业生')
             AND (r.ID IS NULL OR (r.VALID_DATE IS NOT NULL AND r.VALID_DATE < SYSDATE))
            THEN '求职信息不完善'
        WHEN fd.ID IS NOT NULL THEN '求职失败'
        WHEN er.PERSONAL_ID IS NOT NULL THEN '就业登记'
        WHEN ur.PERSONAL_ID IS NOT NULL THEN '失业登记'
        ELSE '求职信息不完善'
    END AS PROFILE_STATUS,
    CASE
        WHEN pi.JOB_SEARCH_STATUS IN ('离职-随时到岗','在职-月内到岗','在职-考虑机会','应届毕业生')
             AND r.ID IS NULL THEN '无简历'
        WHEN pi.JOB_SEARCH_STATUS IN ('离职-随时到岗','在职-月内到岗','在职-考虑机会','应届毕业生')
             AND r.VALID_DATE IS NOT NULL AND r.VALID_DATE < SYSDATE THEN '简历过期'
        WHEN fd.ID IS NOT NULL THEN fd.LOCAL_TAGS
        WHEN er.PERSONAL_ID IS NOT NULL THEN '就业中'
        WHEN ur.PERSONAL_ID IS NOT NULL THEN '失业中'
        ELSE ''
    END AS STATUS_DESC,
    COALESCE(fd.UPDATE_TIME, er.CREATE_TIME, ur.CREATE_TIME, pi.UPDATE_TIME) AS DATA_DATE,
    psl.CUSTOM_TAGS, psl.LAST_NOTICE_TIME
FROM PERSONAL_INFO pi
LEFT JOIN RESUME_INFO r ON pi.ID = r.PERSONAL_ID AND (r.IS_DEFAULT IS NULL OR r.IS_DEFAULT = '是')
LEFT JOIN INTERVIEW_FAIL_DIAGNOSIS fd ON pi.ID = fd.PERSONAL_ID
LEFT JOIN (SELECT PERSONAL_ID, COUNT(*) AS EMPLOY_COUNT, MIN(CREATE_TIME) AS CREATE_TIME FROM EMPLOYMENT_RECORD GROUP BY PERSONAL_ID) er ON pi.ID = er.PERSONAL_ID
LEFT JOIN (SELECT PERSONAL_ID, COUNT(*) AS UNEMPLOY_COUNT, MIN(CREATE_TIME) AS CREATE_TIME FROM UNEMPLOYMENT_RECORD GROUP BY PERSONAL_ID) ur ON pi.ID = ur.PERSONAL_ID
LEFT JOIN PERSONAL_STATUS_LOCAL psl ON pi.ID = psl.PERSONAL_ID;

3.6 画像状态判断规则

画像状态 判断条件 情况说明
求职信息不完善 求职状态为求职中,但简历为空或已过期 无简历 / 简历过期
求职失败 有面试失败记录 显示失败原因标签
就业登记 有有效就业登记 就业中
失业登记 有有效失业登记 失业中

3.7 文件清单

后端(jeecg-module-zjrs/org/jeecg/modules/zjrs/profilechange/)

文件 说明
entity/ProfileChangePageVo.java 列表页VO
mapper/ProfileChangeMapper.java Mapper(queryPageList)
mapper/xml/ProfileChangeMapper.xml 视图查询SQL
service/IProfileChangeService.java 服务接口
service/impl/ProfileChangeServiceImpl.java 服务实现
controller/ProfileChangeController.java REST控制器(列表+标签保存)

前端(jeecgboot-vue3/src/views/profilechange/)

文件 说明
ProfileChangeList.vue 列表页面(含查询表单)
ProfileChange.data.ts 表格列+搜索配置
ProfileChange.api.ts API接口(含saveTag/getTag)

3.8 数据刷新

"数据刷新"功能即重新执行视图查询,获取最新数据(无需额外逻辑,reload()即可)。


四、2026-06-10 修复与优化记录

编译修复

  • ProfileChangeController.java / PolicyCategoryController.java / PolicyFileController.javajavax.servletjakarta.servlet
  • ProfileChangeServiceImpl.javajavax.annotation.Resourcejakarta.annotation.Resource
  • 移除不存在的 org.jeecg.common.util.ParamUtils 引用

后端新增

  • ProfileChangeController.java — 新增 saveTag/getTag 端点(共用 PersonalStatusLocal 表)
  • ProfileChangeController.java — 新增 /exportXls 导出端点,支持 selections 勾选过滤
  • ProfileChangePageVo.java — 新增 householdAreaName(户口区县名称)、@Excel 注解
  • ProfileChangeMapper.xml — 新增 age 查询条件

前端修复

政策公开文件:

  • PolicyFile.data.ts — formSchema 新增隐藏 categoryId 字段,修复新增文件分类关联丢失
  • PolicyFileList.vue — 新增文件名称搜索框

画像变动管理:

  • 性别/学历/画像状态搜索框 → <a-select> 下拉(Gender/Education/profile_status 字典)
  • 表格列翻译:gender/education/profileStatus
  • 户口所属区县列 → householdAreaName 去"广东省湛江市"前缀
  • rowKey 设为 personalId(修复勾选一个全选的bug)
  • 新增导出按钮 + exportConfig
  • 新增 ProfileChangeModal.vue + ProfileChangeDetail.vue 详情弹窗(j-modal 模式)

DM8 数据库

  • 建表:POLICY_CATEGORYPOLICY_FILE
  • 建视图:V_PROFILE_CHANGE(含 household_area_name)
  • 建字典:profile_status(画像状态)
  • 菜单权限:政策推送和岗位信息变动推送(178060400000010) → 政策公开文件(178060400000011) → 画像变动管理(178060400000012),含 admin 授权
  • policy_category:9条(3一级+6二级目录)
  • policy_file:14条测试数据