# 就业状态自动感知模块 - 开发设计文档 > 依据:《需求规格说明书》第3.9节 > 设计日期:2026-06-09 > 设计模式:视图分页查询 + 轻量本地标签表 --- ## 一、菜单层级 ``` 就业状态自动感知 (顶级菜单, sort_no: 2.00, icon: eye-outlined) ├── 企业就业状态感知 (子菜单, sort_no: 1.00) └── 个人就业状态感知 (子菜单, sort_no: 2.00) ``` --- ## 二、子模块1:企业就业状态感知 ### 2.1 功能说明 企业就业状态自动感知,监测企业在岗员工总数、用工工种分布、用工稳定性、薪酬待遇等数据。通过对这些数据的分析,准确掌握就业失业状况及其变化趋势。 ### 2.2 查询字段 所属区县,所属行业,企业名称,企业状态,自定义标签 ### 2.3 列表字段 企业名称,所属区县,企业规模,企业状态,所属行业,企业已发布岗位总数,当前在招岗位数量,备案在岗总人数,平均薪酬,自定义标签,最后通知时间 ### 2.4 支持功能 查看,发送消息,修改标签 ### 2.5 数据库设计 #### 表:企业就业状态本地信息表(enterprise_status_local) ```sql CREATE TABLE ENTERPRISE_STATUS_LOCAL ( ID VARCHAR(36) NOT NULL, ENTERPRISE_ID VARCHAR(36) NOT NULL COMMENT '企业ID(关联ENTERPRISE_INFO.ID)', CUSTOM_TAGS VARCHAR(500) COMMENT '自定义标签', LAST_NOTICE_TIME DATETIME 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 ENTERPRISE_STATUS_LOCAL IS '企业就业状态本地信息表'; CREATE UNIQUE INDEX IDX_ESL_ENTERPRISE ON ENTERPRISE_STATUS_LOCAL(ENTERPRISE_ID); ``` #### 视图:v_enterprise_employment_status 从 ENTERPRISE_INFO + POST_INFO + ENTERPRISE_STATUS_LOCAL 聚合: ```sql CREATE OR REPLACE VIEW V_ENTERPRISE_EMPLOYMENT_STATUS AS SELECT ei.ID, ei.UNIFIED_CREDIT_CODE, ei.COMPANY_NAME, ei.REG_ADDR_DISTRICT AS DISTRICT, ei.INDUSTRY, ei.STAFF_SIZE AS ENTERPRISE_SCALE, ei.BUSINESS_STATUS AS ENTERPRISE_STATUS, (SELECT COUNT(*) FROM POST_INFO pi WHERE pi.ENTERPRISE_ID = ei.ID) AS TOTAL_POST_COUNT, (SELECT COUNT(*) FROM POST_INFO pi WHERE pi.ENTERPRISE_ID = ei.ID AND (pi.POST_VALID_DATE IS NULL OR pi.POST_VALID_DATE >= SYSDATE)) AS ACTIVE_POST_COUNT, (SELECT COUNT(*) FROM POST_INFO pi WHERE pi.ENTERPRISE_ID = ei.ID AND pi.POST_VALID_DATE IS NOT NULL AND pi.POST_VALID_DATE < SYSDATE) AS EXPIRED_POST_COUNT, NULL AS REGISTERED_EMPLOYEE_COUNT, (SELECT AVG((pi2.SALARY_MIN + pi2.SALARY_MAX) / 2) FROM POST_INFO pi2 WHERE pi2.ENTERPRISE_ID = ei.ID AND (pi2.POST_VALID_DATE IS NULL OR pi2.POST_VALID_DATE >= SYSDATE) AND pi2.SALARY_MIN IS NOT NULL AND pi2.SALARY_MAX IS NOT NULL) AS AVERAGE_SALARY, esl.CUSTOM_TAGS, esl.LAST_NOTICE_TIME FROM ENTERPRISE_INFO ei LEFT JOIN ENTERPRISE_STATUS_LOCAL esl ON ei.ID = esl.ENTERPRISE_ID; ``` ### 2.6 文件清单 #### 后端(jeecg-module-zjrs/org/jeecg/modules/zjrs/enterprisestatus/) | 文件 | 说明 | |------|------| | entity/EnterpriseStatusLocal.java | 本地信息实体 | | entity/EnterpriseStatusPageVo.java | 列表页VO(视图字段) | | mapper/EnterpriseStatusLocalMapper.java | Mapper(含queryPageList) | | mapper/xml/EnterpriseStatusLocalMapper.xml | 视图查询SQL | | service/IEnterpriseStatusService.java | 服务接口 | | service/impl/EnterpriseStatusServiceImpl.java | 服务实现(含queryPageList) | | controller/EnterpriseStatusController.java | REST控制器(列表+标签保存) | #### 前端(jeecgboot-vue3/src/views/enterprisestatus/) | 文件 | 说明 | |------|------| | EnterpriseStatusList.vue | 列表页面(含查询表单) | | EnterpriseStatus.data.ts | 表格列+搜索配置 | | EnterpriseStatus.api.ts | API接口 | ### 2.7 业务逻辑 1. 企业就业状态数据从省一体化平台回流,通过视图实时聚合 2. 管理员可以给企业打自定义标签(存enterprise_status_local) 3. 发送消息功能:基于企业信息发送通知(待实现消息推送) --- ## 三、子模块2:个人就业状态感知 ### 3.1 功能说明 个人就业状态自动感知,监控求职人员就业情况。 ### 3.2 查询字段 户口所属区域,姓名,学历,性别,年龄,求职状态,就业状态 ### 3.3 列表字段 证件号码,姓名,户口所属区县,性别,学历,年龄,求职状态,就业状态,就业登记累计次数,失业登记累计次数,社保情况,自定义标签,最后通知时间 ### 3.4 支持功能 查看,发送消息,修改标签 ### 3.5 数据库设计 #### 表:个人就业状态本地信息表(personal_status_local) ```sql CREATE TABLE PERSONAL_STATUS_LOCAL ( ID VARCHAR(36) NOT NULL, PERSONAL_ID VARCHAR(36) NOT NULL COMMENT '个人ID(关联PERSONAL_INFO.ID)', CUSTOM_TAGS VARCHAR(500) COMMENT '自定义标签', LAST_NOTICE_TIME DATETIME 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 PERSONAL_STATUS_LOCAL IS '个人就业状态本地信息表'; CREATE UNIQUE INDEX IDX_PSL_PERSONAL ON PERSONAL_STATUS_LOCAL(PERSONAL_ID); ``` #### 视图:v_personal_employment_status 从 PERSONAL_INFO + EMPLOYMENT_RECORD + UNEMPLOYMENT_RECORD 聚合: ```sql CREATE OR REPLACE VIEW V_PERSONAL_EMPLOYMENT_STATUS AS SELECT pi.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, pi.JOB_SEARCH_STATUS, CASE WHEN er.PERSONAL_ID IS NOT NULL AND er.EMPLOY_COUNT > 0 THEN '就业中' WHEN ur.PERSONAL_ID IS NOT NULL AND ur.UNEMPLOY_COUNT > 0 THEN '失业中' ELSE '未就业' END AS EMPLOYMENT_STATUS, NVL(er.EMPLOY_COUNT, 0) AS EMPLOY_REG_COUNT, NVL(ur.UNEMPLOY_COUNT, 0) AS UNEMPLOY_REG_COUNT, NULL AS SOCIAL_INSURANCE_STATUS, psl.CUSTOM_TAGS, psl.LAST_NOTICE_TIME FROM PERSONAL_INFO pi LEFT JOIN PERSONAL_STATUS_LOCAL psl ON pi.ID = psl.PERSONAL_ID LEFT JOIN (SELECT PERSONAL_ID, COUNT(*) AS EMPLOY_COUNT FROM EMPLOYMENT_RECORD GROUP BY PERSONAL_ID) er ON pi.ID = er.PERSONAL_ID LEFT JOIN (SELECT PERSONAL_ID, COUNT(*) AS UNEMPLOY_COUNT FROM UNEMPLOYMENT_RECORD GROUP BY PERSONAL_ID) ur ON pi.ID = ur.PERSONAL_ID; ``` ### 3.6 文件清单 #### 后端(jeecg-module-zjrs/org/jeecg/modules/zjrs/personalstatus/) | 文件 | 说明 | |------|------| | entity/PersonalStatusLocal.java | 本地信息实体 | | entity/PersonalStatusPageVo.java | 列表页VO(视图字段) | | mapper/PersonalStatusLocalMapper.java | Mapper(含queryPageList) | | mapper/xml/PersonalStatusLocalMapper.xml | 视图查询SQL | | service/IPersonalStatusService.java | 服务接口 | | service/impl/PersonalStatusServiceImpl.java | 服务实现(含queryPageList) | | controller/PersonalStatusController.java | REST控制器(列表+标签保存) | #### 前端(jeecgboot-vue3/src/views/personalstatus/) | 文件 | 说明 | |------|------| | PersonalStatusList.vue | 列表页面(含查询表单) | | PersonalStatus.data.ts | 表格列+搜索配置 | | PersonalStatus.api.ts | API接口 | ### 3.7 业务逻辑 1. 就业状态判断规则:有有效就业登记→就业中,有有效失业登记→失业中,否则→未就业 2. 管理员可以给个人打自定义标签 3. 就业/失业登记累计次数根据省平台回流数据统计 --- ## 九、2026-06-10 修复与优化记录 ### 编译修复 - `EnterpriseStatusController.java` / `PersonalStatusController.java` — `javax.servlet` → `jakarta.servlet` - `EnterpriseStatusServiceImpl.java` / `PersonalStatusServiceImpl.java` — `javax.annotation.Resource` → `jakarta.annotation.Resource` - 移除不存在的 `org.jeecg.common.util.ParamUtils` 引用,改为手动 `req.getParameter()` 提取参数 - `IEnterpriseStatusService.java` / `IPersonalStatusService.java` — 补充 `queryPageList` 方法声明 ### 后端新增 - `EnterpriseStatusController.java` / `PersonalStatusController.java` — 新增 `/exportXls` 导出端点,支持 `selections` 勾选过滤 - `EnterpriseStatusPageVo.java` — 新增 `registeredEmployeeCount`(备案在岗总人数)、`averageSalary`(平均薪酬)、`@Excel` 注解 - `PersonalStatusPageVo.java` — 新增 `socialInsuranceStatus`(社保情况)、`householdAreaName`(户口区县名称)、`@Excel` 注解 - `EnterpriseStatusLocalMapper.xml` — 新增 `customTags` 查询条件 - `PersonalStatusLocalMapper.xml` — 新增 `age` 查询条件 ### 前端修复 **企业就业状态感知:** - 企业状态搜索框 → `` 下拉(BusinessStatus 字典) - 表格列翻译:`enterpriseStatus`(BusinessStatus)、`enterpriseScale`(enterprise_scale)、`district`(XZQH) - 新增导出按钮 + `exportConfig` - 新增 `EnterpriseStatusModal.vue` + `EnterpriseStatusDetail.vue` 详情弹窗(j-modal 模式,与重点关注人员一致) - 列标题修正:`已发布岗位总数` → `企业已发布岗位总数` **个人就业状态感知:** - 性别/学历/求职状态/就业状态搜索框 → `` 下拉(Gender/Education/JobSeekerStatus/employment_status 字典) - 表格列翻译:gender/education/jobSearchStatus/employmentStatus - 户口所属区县列 → `householdAreaName` 去"广东省湛江市"前缀显示区名 - 新增导出按钮 + `exportConfig` - 新增 `PersonalStatusModal.vue` + `PersonalStatusDetail.vue` 详情弹窗 ### DM8 数据库 - 建表:`ENTERPRISE_STATUS_LOCAL`、`PERSONAL_STATUS_LOCAL` - 建视图:`V_ENTERPRISE_EMPLOYMENT_STATUS`、`V_PERSONAL_EMPLOYMENT_STATUS` - 建字典:`employment_status`(就业状态)、`enterprise_scale`(企业规模) - 菜单权限:`就业状态自动感知`(178060400000000) → `企业就业状态感知`(178060400000001) → `个人就业状态感知`(178060400000002),含 admin 授权 - PERSONAL_INFO:20人,全部使用数字编码,覆盖湛江8区县 - ENTERPRISE_INFO:10家,含对应标签 - 旧人员数据(200-209)更新为湛江区县 + 多样化性别/学历/求职状态