12 KiB
出国申请字段映射分析报告
问题概述
测试发现出国申请菜单下的新增申请功能中,部分表单字段填写后未能正确保存到数据库rs_overseas_application表中,如professional_title、position、exit_reason等字段在数据库中显示为NULL。
分析结论
根本原因:后端的RsOverseasApplicationBo.java和RsOverseasApplicationVo.java类中缺少了多个数据库字段的映射,导致前端提交的数据无法正确传递到数据库。
详细字段对比分析
一、字段映射状态总览
| 序号 | 前端表单字段 | 数据库字段 | Entity类 | Bo类 | Vo类 | 状态 |
|---|---|---|---|---|---|---|
| 1 | applicantName | applicant_name | ✅ | ✅ | ✅ | ✅ 正常 |
| 2 | gender | gender | ✅ | ✅ | ✅ | ✅ 正常 |
| 3 | birthDate | birth_date | ✅ | ✅ | ✅ | ✅ 正常 |
| 4 | politicalStatus | political_status | ✅ | ✅ | ✅ | ✅ 正常 |
| 5 | department | department | ✅ | ✅ | ✅ | ✅ 正常 |
| 6 | professionalTitle | professional_title | ✅ | ❌ | ❌ | ❌ 缺失 |
| 7 | position | position | ✅ | ✅ | ✅ | ✅ 正常 |
| 8 | administrativeLevel | administrative_level | ✅ | ✅ | ✅ | ✅ 正常 |
| 9 | documentName | document_name | ✅ | ❌ | ❌ | ❌ 缺失 |
| 10 | documentNumber | document_number | ✅ | ❌ | ❌ | ❌ 缺失 |
| 11 | destinationCountry | destination_country | ✅ | ❌ | ❌ | ❌ 缺失 |
| 12 | exitReason | exit_reason | ✅ | ❌ | ❌ | ❌ 缺失 |
| 13 | visitRelationship | visit_relationship | ✅ | ❌ | ❌ | ❌ 缺失 |
| 14 | itinerary | itinerary | ✅ | ✅ | ✅ | ✅ 正常 |
| 15 | remarks | remarks | ✅ | ❌ | ❌ | ❌ 缺失 |
| 16 | startDate | start_date | ✅ | ✅ | ✅ | ✅ 正常 |
| 17 | endDate | end_date | ✅ | ✅ | ✅ | ✅ 正常 |
| 18 | duration | duration | ✅ | ✅ | ✅ | ✅ 正常 |
| 19 | destination | destination | ✅ | ✅ | ✅ | ✅ 正常 |
| 20 | mobilePhone | mobile_phone | ✅ | ✅ | ✅ | ✅ 正常 |
| 21 | emergencyContact | emergency_contact | ✅ | ✅ | ✅ | ✅ 正常 |
| 22 | signature | signature | ✅ | ✅ | ✅ | ✅ 正常 |
| 23 | registeredAddress | registered_address | ✅ | ✅ | ✅ | ⚠️ 前端未填写 |
| 24 | idNumber | id_number | ✅ | ✅ | ✅ | ⚠️ 前端未填写 |
| 25 | personnelCategory | personnel_category | ✅ | ✅ | ✅ | ⚠️ 前端未填写 |
| 26 | unitContact | unit_contact | ✅ | ✅ | ✅ | ⚠️ 前端未填写 |
| 27 | officePhone | office_phone | ✅ | ✅ | ✅ | ⚠️ 前端未填写 |
| 28 | registrationUnit | registration_unit | ✅ | ✅ | ✅ | ⚠️ 前端未填写 |
| 29 | unitLeaderSignature | unit_leader_signature | ✅ | ✅ | ✅ | ⚠️ 前端未填写 |
二、缺失字段详细说明
1. professionalTitle(职称) - 严重问题 🔴
- 前端位置:
/web/src/views/rs/overseas/index.vue第510行 - 数据库字段:
professional_titlevarchar(50) - Entity类: ✅ 存在(第109行)
- Bo类: ❌ 缺失
- Vo类: ❌ 缺失
- 影响: 用户填写的职称信息完全无法保存
2. exitReason(出境事由) - 严重问题 🔴
- 前端位置:
/web/src/views/rs/overseas/index.vue第543行 - 前端控件: 单选框(旅游/探亲)
- 数据库字段:
exit_reasonvarchar(200) - Entity类: ✅ 存在(第169行)
- Bo类: ❌ 缺失
- Vo类: ❌ 缺失
- 影响: 出境事由(旅游或探亲)无法保存
3. documentName(申领证件名称) - 严重问题 🔴
- 前端位置:
/web/src/views/rs/overseas/index.vue第524行 - 数据库字段:
document_namevarchar(100) - Entity类: ✅ 存在(第151行)
- Bo类: ❌ 缺失
- Vo类: ❌ 缺失
- 影响: 证件名称信息无法保存
4. documentNumber(证件号码) - 严重问题 🔴
- 前端位置:
/web/src/views/rs/overseas/index.vue第529行 - 数据库字段:
document_numbervarchar(50) - Entity类: ✅ 存在(第157行)
- Bo类: ❌ 缺失
- Vo类: ❌ 缺失
- 影响: 证件号码无法保存
5. destinationCountry(前往国家) - 严重问题 🔴
- 前端位置:
/web/src/views/rs/overseas/index.vue第538行 - 数据库字段:
destination_countryvarchar(100) - Entity类: ✅ 存在(第163行)
- Bo类: ❌ 缺失
- Vo类: ❌ 缺失
- 影响: 前往国家信息无法保存
6. visitRelationship(探望对象关系) - 严重问题 🔴
- 前端位置:
/web/src/views/rs/overseas/index.vue第556行 - 前端逻辑: 当出境事由为"探亲"时显示
- 数据库字段:
visit_relationshipvarchar(200) - Entity类: ✅ 存在(第175行)
- Bo类: ❌ 缺失
- Vo类: ❌ 缺失
- 影响: 探亲时的探望对象关系无法保存
7. remarks(备注) - 一般问题 🟡
- 前端位置:
/web/src/views/rs/overseas/index.vue第582行 - 数据库字段:
remarksvarchar(500) - Entity类: ✅ 存在(第181行)
- Bo类: ❌ 缺失
- Vo类: ❌ 缺失
- 影响: 备注信息无法保存
三、前端已有但数据库有字段未使用的情况
以下字段在数据库表和Bo/Vo类中存在,但前端表单中未包含输入控件:
| 字段名 | 数据库字段 | Bo类 | Vo类 | 说明 |
|---|---|---|---|---|
| registeredAddress | registered_address | ✅ | ✅ | 户籍所在地 |
| idNumber | id_number | ✅ | ✅ | 身份证号码 |
| personnelCategory | personnel_category | ✅ | ✅ | 人员类别代码 |
| unitContact | unit_contact | ✅ | ✅ | 登记备案责任单位联系人 |
| officePhone | office_phone | ✅ | ✅ | 办公电话 |
| registrationUnit | registration_unit | ✅ | ✅ | 登记备案责任单位 |
| unitLeaderSignature | unit_leader_signature | ✅ | ✅ | 责任单位负责人签名 |
建议: 这些字段可能需要在后续版本的前端表单中添加,或者在后端自动填充。
修复方案
方案一:修改Bo类和Vo类(推荐)
需要在以下两个文件中添加缺失的字段:
1. 修改 RsOverseasApplicationBo.java
文件位置:/backend/ruoyi-modules/ruoyi-rs/src/main/java/org/dromara/rs/domain/bo/RsOverseasApplicationBo.java
需要添加的字段:
/**
* 职称
*/
private String professionalTitle;
/**
* 申领证件名称
*/
private String documentName;
/**
* 证件号码
*/
private String documentNumber;
/**
* 前往国家
*/
private String destinationCountry;
/**
* 出境事由
*/
private String exitReason;
/**
* 探望对象姓名及与申请者关系
*/
private String visitRelationship;
/**
* 备注
*/
private String remarks;
2. 修改 RsOverseasApplicationVo.java
文件位置:/backend/ruoyi-modules/ruoyi-rs/src/main/java/org/dromara/rs/domain/vo/RsOverseasApplicationVo.java
需要添加的字段:
/**
* 职称
*/
private String professionalTitle;
/**
* 申领证件名称
*/
private String documentName;
/**
* 证件号码
*/
private String documentNumber;
/**
* 前往国家
*/
private String destinationCountry;
/**
* 出境事由
*/
private String exitReason;
/**
* 探望对象姓名及与申请者关系
*/
private String visitRelationship;
/**
* 备注
*/
private String remarks;
方案二:前端表单字段重命名(不推荐)
将前端表单字段重命名以匹配现有的Bo/Vo字段,但这会导致业务逻辑混乱,不推荐使用。
数据流程说明
当前数据流转过程
前端表单 (Vue)
↓ (HTTP POST)
Controller (RsOverseasApplicationController)
↓ (接收 RsOverseasApplicationBo)
Service (IRsOverseasApplicationService)
↓ (Bo → Entity 映射)
Mapper (MyBatis-Plus)
↓ (SQL INSERT/UPDATE)
数据库 (rs_overseas_application表)
问题所在
前端提交: { professionalTitle: "副教授", exitReason: "旅游", ... }
↓
Controller接收Bo对象
↓
⚠️ Bo类中没有professionalTitle、exitReason等字段
↓
❌ 这些字段的值被忽略,不会传递给Entity
↓
❌ 数据库中对应字段保持NULL
预期修复效果
修复后,数据流将正常工作:
前端提交: { professionalTitle: "副教授", exitReason: "旅游", documentName: "护照", ... }
↓
Controller接收Bo对象 ✅ Bo类包含所有字段
↓
Service层: Bo → Entity映射 ✅ 字段正确映射
↓
Mapper: 执行INSERT/UPDATE ✅ SQL包含所有字段
↓
数据库: ✅ professional_title="副教授", exit_reason="旅游", document_name="护照"
测试验证计划
修复完成后,需要进行以下测试:
1. 新增申请测试
- 填写完整的申请表单,包括职称、出境事由等所有字段
- 提交申请
- 查询数据库验证所有字段是否正确保存
2. 修改申请测试
- 编辑已有申请
- 修改职称、出境事由等字段
- 保存修改
- 验证数据库字段是否正确更新
3. 查看详情测试
- 查看申请详情
- 验证所有字段是否正确显示
4. 探亲特殊逻辑测试
- 选择出境事由为"探亲"
- 填写探望对象关系
- 验证visitRelationship字段是否正确保存
建议的完整字段列表
为确保数据完整性,建议前端表单包含以下所有必填字段:
基本信息
- 姓名 (applicantName)
- 性别 (gender)
- 出生年月 (birthDate)
- 政治面貌 (politicalStatus)
- 户籍所在地 (registeredAddress) - 前端缺失
- 身份证号 (idNumber) - 前端缺失
工作信息
- 现工作部门 (department)
- 职称 (professionalTitle) - Bo/Vo缺失
- 职务 (position)
- 行政职级 (administrativeLevel) - 前端缺失
- 人员类别代码 (personnelCategory) - 前端缺失
证件信息
- 申领证件名称 (documentName) - Bo/Vo缺失
- 证件号码 (documentNumber) - Bo/Vo缺失
出国信息
- 前往国家 (destinationCountry) - Bo/Vo缺失
- 出境事由 (exitReason) - Bo/Vo缺失
- 探望对象关系 (visitRelationship) - Bo/Vo缺失 (当出境事由为探亲时)
- 行程安排 (itinerary)
- 出发日期 (startDate)
- 返回日期 (endDate)
- 出国天数 (duration)
联系信息
- 联系电话 (mobilePhone)
- 办公电话 (officePhone) - 前端缺失
- 应急联系人及电话 (emergencyContact)
单位信息
- 登记备案责任单位 (registrationUnit) - 前端缺失
- 责任单位联系人 (unitContact) - 前端缺失
- 责任单位负责人签名 (unitLeaderSignature) - 前端缺失
其他
- 手写签字 (signature)
- 备注 (remarks) - Bo/Vo缺失
总结
核心问题:7个关键字段(professionalTitle、documentName、documentNumber、destinationCountry、exitReason、visitRelationship、remarks)在Bo和Vo类中缺失,导致前端提交的数据无法保存到数据库。
解决方案:在RsOverseasApplicationBo.java和RsOverseasApplicationVo.java两个文件中添加这7个缺失的字段。
优先级:
- 🔴 高优先级:professionalTitle、exitReason、destinationCountry、documentName、documentNumber
- 🟡 中优先级:visitRelationship、remarks
- ⚪ 低优先级:考虑是否在前端添加缺失的必填字段(如户籍所在地、身份证号等)
报告生成时间: 2025-10-08
报告生成人: Cursor AI Assistant