日期: 2026-06-09
失败诊断模块(interviewfail)是就业一湛通服务平台中负责求职失败分析的核心模块。该模块基于 JeecgBoot 前后端分离架构,后端基于 Spring Boot + MyBatis-Plus,前端基于 Vue 3 + TypeScript + Ant Design Vue。
根据《需求规格说明书》第3.3节——失败诊断:
失败原因明细(InterviewFailReason)
├── 新增时自动同步 → 失败诊断分析(InterviewFailDiagnosis) [按personalId聚合,failCount计数]
│ ├── 关联 ← InterviewFailDiagnosisTag → InterviewFailTag [关键字自动匹配标签]
│ ├── 1:N → InterviewFailFollowUp [服务跟进子表]
│ └── 1:N → InterviewFailMessage [发送消息子表]
└── 列表查询关联 → PersonalInfo [获取姓名、性别、年龄、户口所在地]
仅两个主表(失败原因明细、失败诊断分析)编写了 Controller,子表和关联表通过主表的 Controller 暴露查询接口。
| 层次 | 文件 | 说明 |
|---|---|---|
| Entity | InterviewFailReason.java |
失败原因明细实体 |
InterviewFailDiagnosis.java |
失败诊断分析实体 | |
InterviewFailDiagnosisTag.java |
诊断标签关联实体 | |
InterviewFailFollowUp.java |
服务跟进实体(子表) | |
InterviewFailMessage.java |
发送消息实体(子表) | |
InterviewFailTag.java |
失败标签配置实体 | |
| VO | InterviewFailReasonVO.java |
失败原因明细VO(含个人信息关联字段) |
InterviewFailDiagnosisVO.java |
失败诊断分析VO(含个人信息+标签关联字段) | |
| DTO | InterviewFailDiagnosisSaveDTO.java |
失败诊断分析保存DTO(含标签ID) |
| Mapper | InterviewFailReasonMapper.java |
失败原因明细Mapper |
InterviewFailDiagnosisMapper.java |
失败诊断分析Mapper | |
InterviewFailDiagnosisTagMapper.java |
诊断标签关联Mapper | |
InterviewFailFollowUpMapper.java |
服务跟进Mapper(含deleteByDiagnosisId/selectByDiagnosisId) | |
InterviewFailMessageMapper.java |
发送消息Mapper(含deleteByDiagnosisId/selectByDiagnosisId) | |
InterviewFailTagMapper.java |
失败标签配置Mapper | |
| Mapper XML | 6个XML文件 | 位于 mapper/xml/ 目录 |
| Service接口 | IInterviewFailReasonService.java |
失败原因明细服务接口(含VO查询、诊断同步、字典翻译) |
IInterviewFailDiagnosisService.java |
失败诊断分析服务接口(含VO查询、字典翻译) | |
IInterviewFailDiagnosisTagService.java |
诊断标签关联服务接口 | |
IInterviewFailFollowUpService.java |
服务跟进服务接口(含外键查询/删除) | |
IInterviewFailMessageService.java |
发送消息服务接口(含外键查询/删除) | |
IInterviewFailTagService.java |
失败标签配置服务接口 | |
| Service实现 | InterviewFailReasonServiceImpl.java |
失败原因明细Service实现(含诊断同步、标签匹配、VO组装、字典翻译) |
InterviewFailDiagnosisServiceImpl.java |
失败诊断分析Service实现(含VO组装、标签关联、字典翻译) | |
InterviewFailDiagnosisTagServiceImpl.java |
诊断标签关联Service实现 | |
InterviewFailFollowUpServiceImpl.java |
服务跟进Service实现 | |
InterviewFailMessageServiceImpl.java |
发送消息Service实现 | |
InterviewFailTagServiceImpl.java |
失败标签配置Service实现 | |
| Controller | InterviewFailReasonController.java |
失败原因明细控制器(CRUD + 导入导出 + 诊断同步) |
InterviewFailDiagnosisController.java |
失败诊断分析控制器(CRUD + 导入导出 + 子表CRUD + 标签查询) |
| 目录 | 文件 | 说明 |
|---|---|---|
| reason/ | InterviewFailReasonList.vue |
失败原因明细列表页 |
InterviewFailReason.api.ts |
失败原因明细API封装 | |
InterviewFailReason.data.ts |
表格列、搜索表单、弹窗表单配置 | |
components/InterviewFailReasonModal.vue |
新增/编辑弹窗容器 | |
components/InterviewFailReasonForm.vue |
表单组件(含人员选择器联动) | |
components/InterviewFailReasonDetailModal.vue |
详情弹窗 | |
| diagnosis/ | InterviewFailDiagnosisList.vue |
失败诊断分析列表页 |
InterviewFailDiagnosis.api.ts |
失败诊断分析API封装(含子表接口) | |
InterviewFailDiagnosis.data.ts |
表格列、搜索表单、弹窗表单、子表列配置 | |
components/InterviewFailDiagnosisModal.vue |
新增/编辑弹窗容器 | |
components/InterviewFailDiagnosisForm.vue |
表单组件(含标签多选下拉) | |
components/InterviewFailDiagnosisDetailModal.vue |
详情弹窗 | |
components/FailReasonListModal.vue |
失败明细列表弹窗(按人员ID过滤) | |
components/FollowUpListModal.vue |
服务跟进弹窗(含增删改查) | |
components/SendMessageModal.vue |
发送消息弹窗 |
内容: 完成失败诊断模块 6 张表的后端基础 CRUD 代码,包括 Entity、Mapper、Service、Controller 全层代码,以及 VO 关联查询和字典翻译功能。
实现要点:
Entity 层:6 个实体类均实现 Serializable,使用 Lombok 注解(@Data、@Accessors(chain=true)、@EqualsAndHashCode),使用 @TableName 指定达梦数据库表名,@TableId(type=IdType.ASSIGN_ID) 使用雪花算法生成主键。公共审计字段(createBy、createTime、updateBy、updateTime、sysOrgCode)在每个实体中显式定义。需要导入导出的字段使用 @Excel 注解,日期字段使用 @JsonFormat + @DateTimeFormat 进行格式化。
Mapper 层:主表和配置表的 Mapper 仅继承 BaseMapper<T>。子表 Mapper(InterviewFailFollowUpMapper、InterviewFailMessageMapper)增加了 deleteByDiagnosisId(通过外键批量删除)和 selectByDiagnosisId(通过外键查询)方法,使用 @Delete 和 @Select 注解实现。
Service 层:接口继承 IService<T>,实现继承 ServiceImpl<Mapper, T>。子表 Service 封装了 selectByDiagnosisId 和 deleteByDiagnosisId 方法供 Controller 调用。主表 Service 增加了关联查询和字典翻译能力。
VO 层:
InterviewFailReasonVO:继承 InterviewFailReason,增加 fullName(姓名)、gender(性别)、age(年龄,通过出生日期实时计算,考虑生日是否已过)、householdAreaName(户口所在地完整路径)四个关联字段InterviewFailDiagnosisVO:继承 InterviewFailDiagnosis,增加 fullName、gender、age、householdAreaName、tagNames(关联标签名称,逗号分隔)、tagIds(关联标签ID,逗号分隔)六个关联字段DTO 层:
InterviewFailDiagnosisSaveDTO:继承 InterviewFailDiagnosis,增加 tagIds(逗号分隔的标签ID)字段,用于新增/编辑时保存标签关联关系Controller 层 - InterviewFailReasonController:继承 JeecgController<InterviewFailReason, IInterviewFailReasonService>,路由前缀 /interviewFail/interviewFailReason,提供:
GET /list — 分页列表查询,返回 VO(含个人信息关联字段),支持姓名、户口所在地模糊搜索POST /add — 新增(同时触发诊断分析同步和标签匹配)PUT /edit — 编辑DELETE /delete — 通过id删除DELETE /deleteBatch — 批量删除GET /queryById — 通过id查询,返回 VOGET /exportXls — Excel导出(使用VO类,字段:姓名、性别、年龄、户口所在地、企业名称、应聘岗位、面试方式、投递时间、面试时间、不通过原因、数据来源),自动翻译字典字段POST /importExcel — Excel导入Controller 层 - InterviewFailDiagnosisController:继承 JeecgController<InterviewFailDiagnosis, IInterviewFailDiagnosisService>,路由前缀 /interviewFail/interviewFailDiagnosis,提供:
主表CRUD:
GET /list — 分页列表查询,返回VO(含个人信息+标签关联字段),支持姓名、户口所在地、本地标签、失败次数范围、是否已跟进搜索POST /add — 新增(使用 SaveDTO,含标签关联保存)PUT /edit — 编辑(使用 SaveDTO,含标签关联保存)DELETE /delete — 通过id删除(级联删除标签关联+服务跟进+发送消息)DELETE /deleteBatch — 批量删除(级联删除标签关联+服务跟进+发送消息)GET /queryById — 通过id查询,返回 VOGET /exportXls — Excel导出(使用VO类,字段:姓名、性别、年龄、户口所在地、失败次数、关联标签、是否已跟进、最后通知时间),自动翻译字典字段POST /importExcel — Excel导入标签下拉:
GET /queryTagList — 查询所有标签,用于前端下拉选择子表查询:
GET /queryFollowUpList — 查询指定诊断分析的服务跟进记录列表GET /queryMessageList — 查询指定诊断分析的发送消息记录列表子表CRUD:
POST /followUp/add — 添加服务跟进记录PUT /followUp/edit — 编辑服务跟进记录DELETE /followUp/delete — 删除服务跟进记录POST /message/add — 发送消息(同时自动更新主表最后通知时间)核心业务逻辑——失败原因新增自动同步诊断分析(saveWithSyncDiagnosis):
核心业务逻辑——诊断分析保存标签关联(saveTagRelations):
关联查询性能优化——批量查询避免N+1:
buildVOList 方法中,先收集所有记录的 personalId,通过 selectBatchIds 一次性批量查询 PersonalInfo字典翻译:导出时通过 translateDictFields 方法对字典字段(如性别、数据来源)进行值→标签的内存映射翻译,避免导出数据库原始编码值
设计说明:
/queryTagList 接口暴露下拉数据)需求描述: 为失败原因明细模块创建前端列表页、API、数据配置和弹窗组件,提供标准 CRUD 操作界面。
实现方案:
useListPage + BasicTable,搜索表单包含姓名、户口所在地、企业名称、数据来源(字典下拉);包含新增、导出、批量删除按钮;操作列提供编辑、详情、删除三个操作;字典字段(性别、数据来源)通过 useDict 翻译enum Api 定义 8 个接口路径;提供 list/queryById/saveOrUpdate/deleteOne/batchDelete 函数,getExportUrl/getImportUrl 供导入导出组件使用queryById 获取含VO字段的完整数据回填useDict 翻译需求描述: 为失败诊断分析模块创建前端列表页、API、数据配置、弹窗组件及子表弹窗,提供主表 CRUD + 子表管理操作界面。
实现方案:
useDict/自定义函数翻译enum Api 定义 15 个接口路径(主表 CRUD 8个 + 子表查询 2个 + 标签下拉 1个 + 子表 CRUD 4个)/queryTagList 获取);编辑/详情时通过 queryById 获取含标签ID的完整数据回填多选| 文件 | 操作 | 原因 |
|---|---|---|
jeecg-boot-module/jeecg-module-zjrs/.../interviewfail/entity/InterviewFailReason.java |
新增 | 失败原因明细表实体类(personalId、enterpriseName、jobName、interviewMethod、deliveryTime、interviewTime、failReason、dataSource) |
jeecg-boot-module/jeecg-module-zjrs/.../interviewfail/entity/InterviewFailDiagnosis.java |
新增 | 失败诊断分析表实体类(personalId、provincePersonalId、failCount、localTags、isFollowed、lastNotifyTime) |
jeecg-boot-module/jeecg-module-zjrs/.../interviewfail/entity/InterviewFailDiagnosisTag.java |
新增 | 诊断标签关联表实体类(diagnosisId、tagId,无主键,多对多关联) |
jeecg-boot-module/jeecg-module-zjrs/.../interviewfail/entity/InterviewFailFollowUp.java |
新增 | 服务跟进表实体类(diagnosisId、fullName、serviceContent、serviceTime、servicePerson) |
jeecg-boot-module/jeecg-module-zjrs/.../interviewfail/entity/InterviewFailMessage.java |
新增 | 发送消息表实体类(diagnosisId、messageSubject、messageContent、sender、sendTime) |
jeecg-boot-module/jeecg-module-zjrs/.../interviewfail/entity/InterviewFailTag.java |
新增 | 失败标签配置表实体类(tagCode、tagName、tagDescription、matchKeywords、sortOrder) |
jeecg-boot-module/jeecg-module-zjrs/.../interviewfail/vo/InterviewFailReasonVO.java |
新增 | 失败原因明细VO,继承InterviewFailReason,增加fullName、gender、age、householdAreaName四个关联字段 |
jeecg-boot-module/jeecg-module-zjrs/.../interviewfail/vo/InterviewFailDiagnosisVO.java |
新增 | 失败诊断分析VO,继承InterviewFailDiagnosis,增加fullName、gender、age、householdAreaName、tagNames、tagIds六个关联字段 |
jeecg-boot-module/jeecg-module-zjrs/.../interviewfail/dto/InterviewFailDiagnosisSaveDTO.java |
新增 | 失败诊断分析保存DTO,继承InterviewFailDiagnosis,增加tagIds字段用于保存标签关联 |
jeecg-boot-module/jeecg-module-zjrs/.../interviewfail/mapper/InterviewFailReasonMapper.java |
新增 | 失败原因明细Mapper,继承BaseMapper |
jeecg-boot-module/jeecg-module-zjrs/.../interviewfail/mapper/InterviewFailDiagnosisMapper.java |
新增 | 失败诊断分析Mapper,继承BaseMapper |
jeecg-boot-module/jeecg-module-zjrs/.../interviewfail/mapper/InterviewFailDiagnosisTagMapper.java |
新增 | 诊断标签关联Mapper,继承BaseMapper |
jeecg-boot-module/jeecg-module-zjrs/.../interviewfail/mapper/InterviewFailFollowUpMapper.java |
新增 | 服务跟进Mapper,含外键查询/删除方法 |
jeecg-boot-module/jeecg-module-zjrs/.../interviewfail/mapper/InterviewFailMessageMapper.java |
新增 | 发送消息Mapper,含外键查询/删除方法 |
jeecg-boot-module/jeecg-module-zjrs/.../interviewfail/mapper/InterviewFailTagMapper.java |
新增 | 失败标签配置Mapper,继承BaseMapper |
jeecg-boot-module/jeecg-module-zjrs/.../interviewfail/mapper/xml/*.xml(6个) |
新增 | MyBatis XML映射文件 |
jeecg-boot-module/jeecg-module-zjrs/.../interviewfail/service/IInterviewFailReasonService.java |
新增 | 失败原因明细Service接口,含saveWithSyncDiagnosis、VO查询、字典翻译方法 |
jeecg-boot-module/jeecg-module-zjrs/.../interviewfail/service/IInterviewFailDiagnosisService.java |
新增 | 失败诊断分析Service接口,含VO查询、字典翻译方法 |
jeecg-boot-module/jeecg-module-zjrs/.../interviewfail/service/IInterviewFailDiagnosisTagService.java |
新增 | 诊断标签关联Service接口 |
jeecg-boot-module/jeecg-module-zjrs/.../interviewfail/service/IInterviewFailFollowUpService.java |
新增 | 服务跟进Service接口,含外键查询/删除方法 |
jeecg-boot-module/jeecg-module-zjrs/.../interviewfail/service/IInterviewFailMessageService.java |
新增 | 发送消息Service接口,含外键查询/删除方法 |
jeecg-boot-module/jeecg-module-zjrs/.../interviewfail/service/IInterviewFailTagService.java |
新增 | 失败标签配置Service接口 |
jeecg-boot-module/jeecg-module-zjrs/.../interviewfail/service/impl/InterviewFailReasonServiceImpl.java |
新增 | 失败原因明细Service实现,含saveWithSyncDiagnosis(诊断同步+标签匹配)、buildVOList(批量关联查询)、translateDictFields(字典翻译) |
jeecg-boot-module/jeecg-module-zjrs/.../interviewfail/service/impl/InterviewFailDiagnosisServiceImpl.java |
新增 | 失败诊断分析Service实现,含buildVOList(标签关联查询+个人信息查询)、translateDictFields |
jeecg-boot-module/jeecg-module-zjrs/.../interviewfail/service/impl/InterviewFailDiagnosisTagServiceImpl.java |
新增 | 诊断标签关联Service实现 |
jeecg-boot-module/jeecg-module-zjrs/.../interviewfail/service/impl/InterviewFailFollowUpServiceImpl.java |
新增 | 服务跟进Service实现 |
jeecg-boot-module/jeecg-module-zjrs/.../interviewfail/service/impl/InterviewFailMessageServiceImpl.java |
新增 | 发送消息Service实现 |
jeecg-boot-module/jeecg-module-zjrs/.../interviewfail/service/impl/InterviewFailTagServiceImpl.java |
新增 | 失败标签配置Service实现 |
jeecg-boot-module/jeecg-module-zjrs/.../interviewfail/controller/InterviewFailReasonController.java |
新增 | 失败原因明细Controller(主表,含CRUD+导入导出+诊断同步) |
jeecg-boot-module/jeecg-module-zjrs/.../interviewfail/controller/InterviewFailDiagnosisController.java |
新增 | 失败诊断分析Controller(主表,含CRUD+导入导出+标签查询+子表CRUD+级联删除) |
| 文件 | 操作 | 原因 |
|---|---|---|
jeecgboot-vue3/src/views/interviewfail/reason/InterviewFailReasonList.vue |
新增 | 失败原因明细列表主页,含搜索、表格、操作栏 |
jeecgboot-vue3/src/views/interviewfail/reason/InterviewFailReason.api.ts |
新增 | 失败原因明细 API 封装(8个接口) |
jeecgboot-vue3/src/views/interviewfail/reason/InterviewFailReason.data.ts |
新增 | 表格列配置(11列)、搜索表单、弹窗表单定义 |
jeecgboot-vue3/src/views/interviewfail/reason/components/InterviewFailReasonModal.vue |
新增 | 新增/编辑弹窗容器 |
jeecgboot-vue3/src/views/interviewfail/reason/components/InterviewFailReasonForm.vue |
新增 | 表单组件,集成人员选择器联动填充 |
jeecgboot-vue3/src/views/interviewfail/reason/components/InterviewFailReasonDetailModal.vue |
新增 | 详情弹窗,a-descriptions展示 |
jeecgboot-vue3/src/views/interviewfail/diagnosis/InterviewFailDiagnosisList.vue |
新增 | 失败诊断分析列表主页,含搜索、表格、操作栏、多弹窗 |
jeecgboot-vue3/src/views/interviewfail/diagnosis/InterviewFailDiagnosis.api.ts |
新增 | 失败诊断分析 API 封装(15个接口,含子表CRUD) |
jeecgboot-vue3/src/views/interviewfail/diagnosis/InterviewFailDiagnosis.data.ts |
新增 | 表格列配置(8列)、搜索表单、弹窗表单、子表列配置 |
jeecgboot-vue3/src/views/interviewfail/diagnosis/components/InterviewFailDiagnosisModal.vue |
新增 | 新增/编辑弹窗容器 |
jeecgboot-vue3/src/views/interviewfail/diagnosis/components/InterviewFailDiagnosisForm.vue |
新增 | 表单组件,含标签多选下拉 |
jeecgboot-vue3/src/views/interviewfail/diagnosis/components/InterviewFailDiagnosisDetailModal.vue |
新增 | 详情弹窗 |
jeecgboot-vue3/src/views/interviewfail/diagnosis/components/FailReasonListModal.vue |
新增 | 失败明细列表弹窗(按人员过滤) |
jeecgboot-vue3/src/views/interviewfail/diagnosis/components/FollowUpListModal.vue |
新增 | 服务跟进弹窗(含内嵌增删改查) |
jeecgboot-vue3/src/views/interviewfail/diagnosis/components/SendMessageModal.vue |
新增 | 发送消息弹窗(自动填充推送人和推送时间) |