9.9 KiB
9.9 KiB
党籍保留亲属姓名字段修复完成报告
🎯 问题描述
问题现象:前端页面查看党籍保留申请详情时,"亲属姓名"字段始终显示"无",即使数据库中有数据。
影响范围:党籍保留申请管理模块的详情查看功能
报告时间:2025-10-10
🔍 问题根源分析
经过深入排查,发现了真正的问题根源:
❌ 核心问题:Mapper XML文件缺少字段映射
问题文件:backend/ruoyi-modules/ruoyi-rs/src/main/resources/mapper/rs/RsPartyMembershipRetentionMapper.xml
问题1:ResultMap缺少relativeName映射
<!-- 修复前:缺少 relativeName 字段映射 -->
<resultMap type="RsPartyMembershipRetention" id="RsPartyMembershipRetentionResult">
<result property="spouse" column="spouse"/>
<!-- ❌ 缺少 relativeName 映射 -->
<result property="travelStartDate" column="travel_start_date"/>
</resultMap>
问题2:SQL查询语句缺少relative_name字段
<!-- 修复前:SQL查询没有包含 relative_name 字段 -->
<sql id="selectRetentionVo">
select r.retention_id, r.application_id, r.registration_id, r.name, r.id_card, r.position, r.spouse,
<!-- ❌ 缺少 r.relative_name -->
r.travel_start_date, r.travel_end_date, ...
</sql>
📊 数据流程分析
数据库表 rs_party_membership_retention (有 relative_name 字段)
↓
❌ Mapper XML SQL查询 (没有查询 relative_name 字段)
↓
❌ ResultMap映射 (没有映射 relativeName 属性)
↓
后端实体类 RsPartyMembershipRetention (有 relativeName 属性)
↓
后端Vo类 RsPartyMembershipRetentionVo (有 relativeName 属性)
↓
前端API响应 (relativeName 为 null)
↓
前端页面显示 "无"
结论:即使数据库有数据,由于Mapper XML没有查询和映射该字段,导致后端返回的数据中 relativeName 始终为 null。
✅ 修复方案
修复1:在ResultMap中添加relativeName映射
文件:RsPartyMembershipRetentionMapper.xml
修改位置:第7-36行
<!-- 修复后:添加 relativeName 字段映射 -->
<resultMap type="RsPartyMembershipRetention" id="RsPartyMembershipRetentionResult">
<id property="retentionId" column="retention_id"/>
<result property="applicationId" column="application_id"/>
<result property="registrationId" column="registration_id"/>
<result property="name" column="name"/>
<result property="idCard" column="id_card"/>
<result property="position" column="position"/>
<result property="spouse" column="spouse"/>
<result property="relativeName" column="relative_name"/> <!-- ✅ 新增 -->
<result property="travelStartDate" column="travel_start_date"/>
<!-- ... 其他字段 ... -->
</resultMap>
修复2:在SQL查询中添加relative_name字段
文件:RsPartyMembershipRetentionMapper.xml
修改位置:第43-63行
<!-- 修复后:SQL查询包含 relative_name 字段 -->
<sql id="selectRetentionVo">
select r.retention_id, r.application_id, r.registration_id, r.name, r.id_card, r.position, r.spouse, r.relative_name, <!-- ✅ 新增 -->
r.travel_start_date, r.travel_end_date, r.stay_days, r.destination, r.purpose,
r.travel_reason, r.self_funded, r.request_approval, r.final_approval,
r.party_branch, r.application_date, r.status, r.application_time, r.remarks,
r.tenant_id, r.create_by, r.create_time, r.update_by, r.update_time, r.deleted,
CASE r.self_funded
WHEN '1' THEN '是'
WHEN '0' THEN '否'
ELSE '未知'
END as self_funded_text,
CASE r.status
WHEN '0' THEN '草稿'
WHEN '1' THEN '待审核'
WHEN '2' THEN '已通过'
WHEN '3' THEN '已拒绝'
WHEN '4' THEN '已撤回'
ELSE '未知状态'
END as status_text
from rs_party_membership_retention r
</sql>
📝 修复后的完整数据流程
数据库表 rs_party_membership_retention (有 relative_name 字段)
↓
✅ Mapper XML SQL查询 (查询 r.relative_name 字段)
↓
✅ ResultMap映射 (映射 relativeName 属性)
↓
后端实体类 RsPartyMembershipRetention (relativeName 有值)
↓
后端Vo类 RsPartyMembershipRetentionVo (relativeName 有值)
↓
前端API响应 (relativeName 有正确的值)
↓
前端页面显示 "实际的亲属姓名"
🚀 部署步骤
1. 重新编译后端代码
cd /Users/weizzzz/Documents/Cursor/0828CURSOR/all-project/backend/ruoyi-admin
mvn clean compile -DskipTests
状态:✅ 已完成(2025-10-10 10:22:13)
2. 重启后端服务
方法1:在终端中重启(推荐)
# 在运行后端服务的终端窗口中按 Ctrl + C 停止服务
# 然后执行:
cd /Users/weizzzz/Documents/Cursor/0828CURSOR/all-project/backend
./start-main.sh
方法2:使用kill命令重启
# 停止后端服务
kill 87027
# 等待几秒钟
sleep 3
# 重新启动服务
cd /Users/weizzzz/Documents/Cursor/0828CURSOR/all-project/backend
./start-main.sh
状态:⏳ 待执行(需要用户手动重启)
3. 清除浏览器缓存
- 建议使用无痕模式测试
- 或者按
Ctrl + Shift + R强制刷新页面
🧪 验证步骤
1. 测试API接口
使用Postman或浏览器测试:
GET http://localhost:8080/rs/party/retention/3
预期返回:
{
"code": 200,
"msg": "操作成功",
"data": {
"retentionId": 3,
"name": "张三",
"spouse": "李四",
"relativeName": "王五", // ✅ 应该有值,不再是 null
"destination": "美国",
"stayDays": 180,
// ... 其他字段
}
}
2. 测试前端页面
- 打开党籍保留申请管理页面
- 点击任意一条记录的"查看"按钮
- 在详情对话框中查看"亲属姓名"字段
预期结果:
- ✅ 如果数据库中有值,应该显示实际的亲属姓名
- ✅ 如果数据库中为NULL,显示"无"
3. 测试新增/编辑功能
- 新增一条党籍保留申请,填写亲属姓名
- 保存后查看详情
- 确认亲属姓名正确保存和显示
📊 数据库数据检查
-- 检查现有数据
SELECT retention_id, name, spouse, relative_name
FROM rs_party_membership_retention
WHERE deleted = '0'
LIMIT 10;
当前数据状态:
- retention_id=1: relative_name = NULL
- retention_id=2: relative_name = NULL
- retention_id=3: relative_name = '王五' ✅
- retention_id=4: relative_name = '张三' ✅
说明:数据库中部分记录的 relative_name 为 NULL 是正常的,这些记录可能是在添加该字段之前创建的。
📋 相关文件清单
已修改的文件
- Mapper XML文件(核心修复)
- 路径:
backend/ruoyi-modules/ruoyi-rs/src/main/resources/mapper/rs/RsPartyMembershipRetentionMapper.xml - 修改内容:
- 在
RsPartyMembershipRetentionResultResultMap中添加relativeName映射 - 在
selectRetentionVoSQL中添加r.relative_name字段
- 在
- 路径:
之前已完成的文件(无需再修改)
-
数据库表结构
- 表:
rs_party_membership_retention - 字段:
relative_name VARCHAR(100) COMMENT '亲属姓名(探望对象)'
- 表:
-
后端实体类
- 文件:
backend/ruoyi-modules/ruoyi-rs/src/main/java/org/dromara/rs/domain/RsPartyMembershipRetention.java - 已有:
private String relativeName;属性
- 文件:
-
后端Bo类
- 文件:
backend/ruoyi-modules/ruoyi-rs/src/main/java/org/dromara/rs/domain/bo/RsPartyMembershipRetentionBo.java - 已有:
private String relativeName;属性
- 文件:
-
后端Vo类
- 文件:
backend/ruoyi-modules/ruoyi-rs/src/main/java/org/dromara/rs/domain/vo/RsPartyMembershipRetentionVo.java - 已有:
private String relativeName;属性
- 文件:
-
前端API类型定义
- 文件:
web/src/api/rs/party-membership-retention/types.ts - 已有:
relativeName?: string;字段
- 文件:
-
前端页面
- 文件:
web/src/views/rs/party-membership-retention/index.vue - 已有:表单输入、详情显示、验证规则
- 文件:
⚠️ 重要提醒
为什么之前没有发现这个问题?
- 数据库字段存在 ✅
- 后端实体类有属性 ✅
- 前端页面有显示 ✅
- 但是Mapper XML没有查询和映射 ❌
这是一个隐蔽的问题,因为:
- 代码编译不会报错
- 接口调用不会报错
- 只是返回的数据中该字段为
null
如何避免类似问题?
-
添加新字段的完整流程:
数据库表 → Mapper XML (SQL + ResultMap) → 实体类 → Bo/Vo类 → 前端类型定义 → 前端页面 -
检查清单:
- ✅ 数据库字段是否添加
- ✅ Mapper XML的SQL是否包含该字段
- ✅ Mapper XML的ResultMap是否映射该字段
- ✅ 实体类是否有对应属性
- ✅ Bo/Vo类是否有对应属性
- ✅ 前端类型定义是否有该字段
- ✅ 前端页面是否正确使用
-
测试验证:
- 先测试API接口,确认返回数据正确
- 再测试前端页面,确认显示正确
🎉 修复完成标志
当你看到以下情况时,说明修复成功:
- ✅ 后端服务重启成功,无报错
- ✅ API接口返回的JSON中
relativeName字段有正确的值(不是null) - ✅ 前端详情页面正确显示亲属姓名(不再显示"无")
- ✅ 新增/编辑申请时,亲属姓名可以正常保存和显示
📞 技术支持
修复人员:Cursor AI
修复时间:2025-10-10
问题级别:中等(数据映射问题)
修复难度:简单(只需修改Mapper XML)
📚 相关文档
党籍保留补充亲属姓名字段脚本.sql- 数据库脚本重启后端服务说明.md- 服务重启指南党籍保留亲属姓名字段修复完成报告.md- 本文档
最后更新:2025-10-10 10:22
状态:✅ 代码修复完成,⏳ 等待服务重启验证