依据:《需求规格说明书》第3.10节
设计日期:2026-06-09
设计模式:目录树 + 文件管理 / 纯视图分页查询
政策推送和岗位信息变动推送 (顶级菜单, sort_no: 2.10, icon: notification-outlined)
├── 政策公开文件 (子菜单, sort_no: 1.00)
└── 画像变动管理 (子菜单, sort_no: 2.00)
用于政策公开文件(PDF格式)的上传和宣传,用户登录系统能够在线预览和下载政策文件。
文件名称
文件名称,排序
目录管理,增删改查
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 '政策文件目录表';
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 '政策文件表';
| 文件 | 说明 |
|---|---|
| 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) |
| 文件 | 说明 |
|---|---|
| PolicyFileList.vue | 左树右表页面 |
| PolicyFile.data.ts | 表格列+表单配置 |
| PolicyFile.api.ts | API接口 |
| components/PolicyFileForm.vue | 文件表单组件 |
| components/PolicyFileModal.vue | 文件弹窗组件 |
| components/PolicyCategoryForm.vue | 目录表单组件 |
| components/PolicyCategoryModal.vue | 目录弹窗组件 |
左右布局:左侧目录树(可搜索、新增、编辑、删除)+ 右侧文件列表(按选中目录过滤)
个人画像状态分为(1)求职信息不完善(2)求职失败(3)就业登记(4)失业登记
户口所属区域,姓名,学历,性别,年龄,画像状态
证件号码,姓名,户口所属区县,性别,学历,年龄,画像状态,情况说明,数据日期,自定义标签,最后通知时间
数据刷新,查看,发送消息,修改自定义标签
画像变动模块不创建独立物理表,所有数据通过视图从现有表计算得出:
| 数据项 | 来源 |
|---|---|
| 个人信息 | PERSONAL_INFO |
| 简历情况 | RESUME_INFO(is_default=是) |
| 求职失败 | INTERVIEW_FAIL_DIAGNOSIS |
| 就业登记 | EMPLOYMENT_RECORD |
| 失业登记 | UNEMPLOYMENT_RECORD |
| 自定义标签/通知时间 | PERSONAL_STATUS_LOCAL(与个人就业状态感知共用) |
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;
| 画像状态 | 判断条件 | 情况说明 |
|---|---|---|
| 求职信息不完善 | 求职状态为求职中,但简历为空或已过期 | 无简历 / 简历过期 |
| 求职失败 | 有面试失败记录 | 显示失败原因标签 |
| 就业登记 | 有有效就业登记 | 就业中 |
| 失业登记 | 有有效失业登记 | 失业中 |
| 文件 | 说明 |
|---|---|
| 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控制器(列表+标签保存) |
| 文件 | 说明 |
|---|---|
| ProfileChangeList.vue | 列表页面(含查询表单) |
| ProfileChange.data.ts | 表格列+搜索配置 |
| ProfileChange.api.ts | API接口(含saveTag/getTag) |
"数据刷新"功能即重新执行视图查询,获取最新数据(无需额外逻辑,reload()即可)。
ProfileChangeController.java / PolicyCategoryController.java / PolicyFileController.java — javax.servlet → jakarta.servletProfileChangeServiceImpl.java — javax.annotation.Resource → jakarta.annotation.Resourceorg.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 字典)householdAreaName 去"广东省湛江市"前缀rowKey 设为 personalId(修复勾选一个全选的bug)exportConfigProfileChangeModal.vue + ProfileChangeDetail.vue 详情弹窗(j-modal 模式)POLICY_CATEGORY、POLICY_FILEV_PROFILE_CHANGE(含 household_area_name)profile_status(画像状态)政策推送和岗位信息变动推送(178060400000010) → 政策公开文件(178060400000011) → 画像变动管理(178060400000012),含 admin 授权