Files
hzdyjs/出国申请字段映射分析报告.md
T
2025-10-14 16:41:19 +08:00

12 KiB
Raw Blame History

出国申请字段映射分析报告

问题概述

测试发现出国申请菜单下的新增申请功能中,部分表单字段填写后未能正确保存到数据库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_title varchar(50)
  • Entity类: ✅ 存在(第109行)
  • Bo类: ❌ 缺失
  • Vo类: ❌ 缺失
  • 影响: 用户填写的职称信息完全无法保存

2. exitReason(出境事由) - 严重问题 🔴

  • 前端位置: /web/src/views/rs/overseas/index.vue 第543行
  • 前端控件: 单选框(旅游/探亲)
  • 数据库字段: exit_reason varchar(200)
  • Entity类: ✅ 存在(第169行)
  • Bo类: ❌ 缺失
  • Vo类: ❌ 缺失
  • 影响: 出境事由(旅游或探亲)无法保存

3. documentName(申领证件名称) - 严重问题 🔴

  • 前端位置: /web/src/views/rs/overseas/index.vue 第524行
  • 数据库字段: document_name varchar(100)
  • Entity类: ✅ 存在(第151行)
  • Bo类: ❌ 缺失
  • Vo类: ❌ 缺失
  • 影响: 证件名称信息无法保存

4. documentNumber(证件号码) - 严重问题 🔴

  • 前端位置: /web/src/views/rs/overseas/index.vue 第529行
  • 数据库字段: document_number varchar(50)
  • Entity类: ✅ 存在(第157行)
  • Bo类: ❌ 缺失
  • Vo类: ❌ 缺失
  • 影响: 证件号码无法保存

5. destinationCountry(前往国家) - 严重问题 🔴

  • 前端位置: /web/src/views/rs/overseas/index.vue 第538行
  • 数据库字段: destination_country varchar(100)
  • Entity类: ✅ 存在(第163行)
  • Bo类: ❌ 缺失
  • Vo类: ❌ 缺失
  • 影响: 前往国家信息无法保存

6. visitRelationship(探望对象关系) - 严重问题 🔴

  • 前端位置: /web/src/views/rs/overseas/index.vue 第556行
  • 前端逻辑: 当出境事由为"探亲"时显示
  • 数据库字段: visit_relationship varchar(200)
  • Entity类: ✅ 存在(第175行)
  • Bo类: ❌ 缺失
  • Vo类: ❌ 缺失
  • 影响: 探亲时的探望对象关系无法保存

7. remarks(备注) - 一般问题 🟡

  • 前端位置: /web/src/views/rs/overseas/index.vue 第582行
  • 数据库字段: remarks varchar(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个缺失的字段。

优先级:

  1. 🔴 高优先级:professionalTitle、exitReason、destinationCountry、documentName、documentNumber
  2. 🟡 中优先级:visitRelationship、remarks
  3. ⚪ 低优先级:考虑是否在前端添加缺失的必填字段(如户籍所在地、身份证号等)

报告生成时间: 2025-10-08
报告生成人: Cursor AI Assistant