创建日期:2026-06-11
需求依据:《需求规格说明书》第3.11节 - 数据统计
"数据统计"模块用于接收外部系统回流的数据,包含3张核心明细表及其对应的3张统计报表页面,共6个前端菜单。
| 序号 | 表名 | 表说明 | 实体类 |
|---|---|---|---|
| 1 | stat_job_reflux |
岗位数据回流明细表 | StatJobReflux |
| 2 | stat_key_person_reflux |
重点人群回流明细表 | StatKeyPersonReflux |
| 3 | stat_worker_reflux |
农民工流动回流明细表 | StatWorkerReflux |
| 序号 | 路由路径 | 页面名称 | 功能类型 |
|---|---|---|---|
| 1 | /dataReflux/statJobReflux |
岗位回流数据 | 明细管理 |
| 2 | /dataReflux/statWorkerReflux |
农民工流动回流数据 | 明细管理 |
| 3 | /dataReflux/statKeyPersonReflux |
重点人群回流数据 | 明细管理 |
| 4 | /statistics/jobReflux |
岗位归集数量统计 | 统计报表 |
| 5 | /statistics/workerReflux |
农民工返乡返岗统计 | 统计报表 |
| 6 | /statistics/keyPersonReflux |
重点人群统计 | 统计报表 |
后端代码位于路径:jeecg-boot/jeecg-boot-module/jeecg-module-zjrs/src/main/java/org/jeecg/modules/zjrs/dataReflux/
每个子模块(statJobReflux / statKeyPersonReflux / statWorkerReflux)均采用统一的分层架构:
├── controller/ # 控制器层(REST API)
├── entity/ # 实体类 + 统计VO
├── mapper/ # MyBatis Mapper接口
│ └── xml/ # Mapper XML
└── service/ # 业务接口
└── impl/ # 业务实现
| 字段 | 类型 | 说明 |
|---|---|---|
| id | String | 主键(ASSIGN_ID) |
| unitCreditCode | String | 统一社会信用代码 |
| enterpriseName | String | 企业名称 |
| district | String | 所属区县 |
| jobName | String | 招聘岗位名称 |
| planHireCount | Integer | 计划招聘人数 |
| jobIndustry | String | 岗位所属行业 |
| salaryRange | String | 薪资区间 |
| educationRequire | String | 学历要求 |
| jobPublishTime | Date | 岗位发布时间 |
| jobStatus | String | 岗位状态 |
| dataRefluxTime | Date | 数据回流时间 |
| createBy/createTime/updateBy/updateTime/sysOrgCode | — | 系统标准字段 |
| 字段 | 类型 | 说明 |
|---|---|---|
| id | String | 主键(ASSIGN_ID) |
| idCard | String | 身份证号码 |
| fullName | String | 姓名 |
| district | String | 所属区县 |
| keyPersonCategory | String | 重点人群类别 |
| confirmDate | Date | 认定日期 |
| validDate | Date | 有效日期 |
| currentEmployStatus | String | 当前就业状态 |
| dataRefluxTime | Date | 数据回流时间 |
| createBy/createTime/updateBy/updateTime/sysOrgCode | — | 系统标准字段 |
| 字段 | 类型 | 说明 |
|---|---|---|
| id | String | 主键(ASSIGN_ID) |
| idCard | String | 身份证号码 |
| fullName | String | 姓名 |
| district | String | 所属区县 |
| ruralRegisterFlag | String | 乡村户籍标识 |
| originWorkArea | String | 原就业外出地市/省份 |
| workEndDate | Date | 外出就业结束日期 |
| localEmployDate | Date | 本地新就业登记日期 |
| personCategoryTag | String | 人员类别标签 |
| dataRefluxTime | Date | 数据回流时间 |
| createBy/createTime/updateBy/updateTime/sysOrgCode | — | 系统标准字段 |
每个Controller继承自 JeecgController<T, IService<T>>,提供以下标准接口:
| 接口 | HTTP方法 | 路径 | 说明 |
|---|---|---|---|
| 分页查询 | GET | /list |
支持QueryGenerator动态查询条件 |
| 主键查询 | GET | /queryById |
通过id查询单条记录 |
| 新增 | POST | /add |
新增记录 |
| 编辑 | PUT/POST | /edit |
更新记录 |
| 删除 | DELETE | /delete |
通过id删除 |
| 批量删除 | DELETE | /deleteBatch |
逗号分隔id批量删除 |
| 导出Excel | GET/POST | /exportXls |
导出明细数据到Excel |
| 导入Excel | POST | /importExcel |
从Excel导入数据 |
| 统计查询 | GET | /statistics/queryByMonth |
按月统计查询(传入year参数) |
| 统计导出 | GET/POST | /statistics/exportXls |
导出统计报表到Excel |
三个MyBatis XML中的统计SQL均按 年份 进行筛选,按 月份 + 区县(+ 类别)维度进行 GROUP BY 聚合:
DATE_FORMAT(t.DATA_REFLUX_TIME, '%Y-%m') + DISTRICT,统计归集总数、本期新增、本期失效DATE_FORMAT(t.DATA_REFLUX_TIME, '%Y-%m') + DISTRICT + KEY_PERSON_CATEGORY,统计总人数、已失效人数、未就业人数DATE_FORMAT(t.DATA_REFLUX_TIME, '%Y-%m') + DISTRICT + PERSON_CATEGORY_TAG,统计返乡总人数、新就业登记人数IService<T>,继承MyBatis-Plus基础CRUD能力ServiceImpl<Mapper, Entity>,实现 ITranslateDictFieldService 接口translateDictFields 方法用于导出时将字典值翻译为中文标签(当前3表暂无字典字段需要翻译,直接返回原列表)queryStatisticsByYear 方法委托给对应的Mapper执行统计SQL每个表的明细页面包含6个文件,结构一致:
| 文件 | 说明 |
|---|---|
StatXxxReflux.api.ts |
API接口定义(list/save/edit/delete/exportXls/importExcel/queryById) |
StatXxxReflux.data.ts |
表格列定义(columns)+ 高级查询字段定义(superQuerySchema) |
StatXxxRefluxList.vue |
列表主页面(查询区域 + BasicTable + 导出按钮 + 详情弹窗) |
components/StatXxxRefluxDetailModal.vue |
详情弹窗组件(使用a-descriptions展示字段) |
components/StatXxxRefluxForm.vue |
表单组件(新增/编辑) |
components/StatXxxRefluxModal.vue |
弹窗容器组件(包裹Form) |
superQuerySchema 支持更多字段queryById 接口获取完整数据,使用 a-descriptions 展示useListPage hook 统一的 onExportXls 方法a-date-picker,格式为 YYYY-MM-DD| 表 | 查询条件1 | 查询条件2 | 查询条件3 |
|---|---|---|---|
| 岗位 | 企业名称 | 岗位名称 | 所属区县 |
| 重点人群 | 姓名 | 身份证号码 | 所属区县 |
| 农民工 | 姓名 | 身份证号码 | 所属区县 |
每个表的统计页面包含3个文件,结构一致:
| 文件 | 说明 |
|---|---|
XxxStatistics.api.ts |
API定义(statisticsList + statisticsExportXls) |
XxxStatistics.data.ts |
统计表格列定义 + 单元格合并逻辑 |
XxxStatisticsList.vue |
统计列表页面(年份选择 + BasicTable + 导出按钮) |
a-date-picker picker="year",默认值为当前年份afterFetch 钩子计算同月份行的 _rowSpanMap,在 customCell 中实现同月份的多行合并展示pagination: false),一次性展示全年数据showActionColumn: false)岗位归集数量统计报表:
| 列 | 是否合并 |
|---|---|
| 序号 | 按月合并 |
| 统计月份 | 按月合并 |
| 所属区县 | 不合并 |
| 归集岗位总数 | 不合并 |
| 本期新增岗位数 | 不合并 |
| 本期失效下架岗位数 | 不合并 |
重点人群统计报表:
| 列 | 是否合并 |
|---|---|
| 序号 | 按月合并 |
| 统计月份 | 按月合并 |
| 所属区县 | 不合并 |
| 重点人群类别 | 不合并 |
| 本期本类别总人数 | 不合并 |
| 本期本类别已失效总人数 | 不合并 |
| 本期本类别未就业总人数 | 不合并 |
农民工返乡返岗统计报表:
| 列 | 是否合并 |
|---|---|
| 序号 | 按月合并 |
| 统计月份 | 按月合并 |
| 所属区县 | 不合并 |
| 人员类别 | 不合并 |
| 本期返乡总人数 | 不合并 |
| 本期新就业登记总人数 | 不合并 |
权限菜单SQL文件位于:
jeecg-boot/jeecg-module-system/jeecg-system-start/src/main/resources/flyway/sql/mysql/V20260611_1__menu_dataReflux.sql
所有主菜单的父级菜单ID为 2064888275729645570。
| 菜单ID | 菜单名称 | 排序 |
|---|---|---|
| 178061200000101 | 岗位回流数据 | 1 |
| 178061200000201 | 农民工流动回流数据 | 2 |
| 178061200000301 | 重点人群回流数据 | 3 |
每个主菜单下包含:添加、编辑、删除、批量删除、导出excel、导入excel 共6个按钮级权限。
| 菜单ID | 菜单名称 | 排序 |
|---|---|---|
| 178061200000401 | 岗位归集数量统计 | 4 |
| 178061200000501 | 农民工返乡返岗统计 | 5 |
| 178061200000601 | 重点人群统计 | 6 |
每个统计菜单下包含:查询、导出excel 共2个按钮级权限。
| 权限类型 | 格式 |
|---|---|
| 明细-添加 | dataReflux:stat_{table}_reflux:add |
| 明细-编辑 | dataReflux:stat_{table}_reflux:edit |
| 明细-删除 | dataReflux:stat_{table}_reflux:delete |
| 明细-批量删除 | dataReflux:stat_{table}_reflux:deleteBatch |
| 明细-导出 | dataReflux:stat_{table}_reflux:exportXls |
| 明细-导入 | dataReflux:stat_{table}_reflux:importExcel |
| 统计-查询 | dataReflux:stat_{table}_reflux:statisticsQuery |
| 统计-导出 | dataReflux:stat_{table}_reflux:statisticsExportXls |
其中 {table} 为 job / worker / key_person。
所有菜单和权限均已授权给 admin 角色(role_id: f6817f48af4fb3af11b9e8bf182f618b)。
jeecg-boot/jeecg-boot-module/jeecg-module-zjrs/src/main/java/org/jeecg/modules/zjrs/dataReflux/
├── statJobReflux/
│ ├── controller/StatJobRefluxController.java # 岗位回流控制器(CRUD + 统计 + Excel导入导出)
│ ├── entity/StatJobReflux.java # 岗位回流实体(11个业务字段)
│ ├── entity/StatJobRefluxStatisticsVo.java # 岗位统计报表VO(5个统计字段)
│ ├── mapper/StatJobRefluxMapper.java # Mapper接口(统计查询方法)
│ ├── mapper/xml/StatJobRefluxMapper.xml # 统计SQL(按月+区县分组聚合)
│ ├── service/IStatJobRefluxService.java # 服务接口
│ └── service/impl/StatJobRefluxServiceImpl.java # 服务实现
├── statKeyPersonReflux/
│ ├── controller/StatKeyPersonRefluxController.java # 重点人群回流控制器
│ ├── entity/StatKeyPersonReflux.java # 重点人群回流实体(8个业务字段)
│ ├── entity/StatKeyPersonRefluxStatisticsVo.java # 重点人群统计报表VO(6个统计字段)
│ ├── mapper/StatKeyPersonRefluxMapper.java # Mapper接口
│ ├── mapper/xml/StatKeyPersonRefluxMapper.xml # 统计SQL(按月+区县+类别分组)
│ ├── service/IStatKeyPersonRefluxService.java # 服务接口
│ └── service/impl/StatKeyPersonRefluxServiceImpl.java # 服务实现
└── statWorkerReflux/
├── controller/StatWorkerRefluxController.java # 农民工回流控制器
├── entity/StatWorkerReflux.java # 农民工回流实体(9个业务字段)
├── entity/StatWorkerRefluxStatisticsVo.java # 农民工统计报表VO(5个统计字段)
├── mapper/StatWorkerRefluxMapper.java # Mapper接口
├── mapper/xml/StatWorkerRefluxMapper.xml # 统计SQL(按月+区县+人员类别分组)
├── service/IStatWorkerRefluxService.java # 服务接口
└── service/impl/StatWorkerRefluxServiceImpl.java # 服务实现
jeecgboot-vue3/src/views/
dataReflux/
├── statJobReflux/
│ ├── StatJobReflux.api.ts # 岗位回流API定义(8个接口)
│ ├── StatJobReflux.data.ts # 岗位表格列定义(11列) + 高级查询(11字段)
│ ├── StatJobRefluxList.vue # 岗位回流列表页(企业名称/岗位名称/区县查询)
│ └── components/
│ ├── StatJobRefluxDetailModal.vue # 岗位详情弹窗
│ ├── StatJobRefluxForm.vue # 岗位表单(11个业务字段输入)
│ └── StatJobRefluxModal.vue # 岗位弹窗容器
├── statKeyPersonReflux/
│ ├── StatKeyPersonReflux.api.ts # 重点人群回流API定义
│ ├── StatKeyPersonReflux.data.ts # 重点人群表格列定义(8列) + 高级查询(8字段)
│ ├── StatKeyPersonRefluxList.vue # 重点人群列表页(姓名/身份证/区县查询)
│ └── components/
│ ├── StatKeyPersonRefluxDetailModal.vue # 重点人群详情弹窗
│ ├── StatKeyPersonRefluxForm.vue # 重点人群表单(8个业务字段输入)
│ └── StatKeyPersonRefluxModal.vue # 重点人群弹窗容器
└── statWorkerReflux/
├── StatWorkerReflux.api.ts # 农民工回流API定义
├── StatWorkerReflux.data.ts # 农民工表格列定义(9列) + 高级查询(9字段)
├── StatWorkerRefluxList.vue # 农民工列表页(姓名/身份证/区县查询)
└── components/
├── StatWorkerRefluxDetailModal.vue # 农民工详情弹窗
├── StatWorkerRefluxForm.vue # 农民工表单(9个业务字段输入)
└── StatWorkerRefluxModal.vue # 农民工弹窗容器
statistics/
├── jobReflux/
│ ├── JobRefluxStatistics.api.ts # 岗位统计API(查询+导出)
│ ├── JobRefluxStatistics.data.ts # 岗位统计表格列定义(6列,含单元格合并)
│ └── JobRefluxStatisticsList.vue # 岗位统计页面(年份选择 + 无分页 + 月份合并)
├── keyPersonReflux/
│ ├── KeyPersonRefluxStatistics.api.ts # 重点人群统计API
│ ├── KeyPersonRefluxStatistics.data.ts # 重点人群统计表格列定义(7列,含单元格合并)
│ └── KeyPersonRefluxStatisticsList.vue # 重点人群统计页面
└── workerReflux/
├── WorkerRefluxStatistics.api.ts # 农民工统计API
├── WorkerRefluxStatistics.data.ts # 农民工统计表格列定义(6列,含单元格合并)
└── WorkerRefluxStatisticsList.vue # 农民工统计页面
jeecg-boot/jeecg-module-system/jeecg-system-start/src/main/resources/flyway/sql/mysql/
└── V20260611_1__menu_dataReflux.sql # 菜单权限SQL(6个主菜单 + 37个子权限 + 角色授权)
| 要点 | 说明 |
|---|---|
| 框架 | Spring Boot + MyBatis-Plus + JeecgBoot |
| ORM | MyBatis-Plus(基础CRUD自动生成)+ MyBatis XML(统计SQL手写) |
| 前端 | Vue 3 + TypeScript + Ant Design Vue + JeecgBoot Vue3封装组件 |
| 权限 | Apache Shiro注解 + sys_permission表存储菜单/按钮权限 |
| 导入导出 | AutoPoi(JeecgEntityExcelView) |
| 数据库迁移 | Flyway(SQL脚本命名规范:V{YYYYMMDD}_{序号}__描述.sql) |
| 统计维度 | 年份筛选 + 月份/区县/类别多维度聚合 |
| 前端合并 | 通过 afterFetch 计算 _rowSpanMap + customCell 实现同月单元格合并 |
| JSON格式化 | 后端日期字段统一 GMT+8、yyyy-MM-dd 格式 |
| Excel导出 | 明细导出 - 可选择导出字段列表;统计导出 - 固定导出字段 |