当前位置: 首页 > news >正文

预约记录自动关联功能测试

🎯 问题描述

修复前的问题

  • violations表有appointment_id字段,但创建违规记录时值为空
  • 前端创建违规记录时没有传递appointmentId
  • 后端没有自动查找车牌号对应的预约记录ID

✅ 解决方案

ViolationsServiceImpl.createViolation()方法中添加了自动查找预约记录的逻辑:

核心逻辑

  1. 如果前端没有传递appointmentId,后端自动根据车牌号查找预约记录
  1. 如果找到预约记录,自动设置violation.appointmentId
  1. 同时从预约记录中获取业主信息

代码改动

// 🔄 前端未传递appointmentId,尝试自动查找预约记录
log.info("🚗 [自动查找预约记录] 根据车牌号查询: {}", violation.getPlateNumber());// 🆕 自动查找该车牌号的有效预约记录
List<Map<String, Object>> appointmentRecords = violationsMapper.selectAppointmentRecordsByPlate(violation.getPlateNumber());
if (appointmentRecords != null && !appointmentRecords.isEmpty()) {// 找到预约记录,使用第一个(最新的)Map<String, Object> latestAppointment = appointmentRecords.get(0);Integer appointmentId = (Integer) latestAppointment.get("id");violation.setAppointmentId(appointmentId);log.info("✅ [预约记录关联成功] plateNumber={}, appointmentId={}, status={}, community={}", violation.getPlateNumber(), appointmentId, latestAppointment.get("auditStatusText"), latestAppointment.get("community"));// 🆕 从预约记录中获取业主信息if (violation.getOwnerId() == null) {Map<String, Object> appointmentOwner = violationsMapper.selectOwnerByAppointmentId(appointmentId);if (appointmentOwner != null) {log.info("✅ [从预约记录获取业主信息] 业主: {}, 预约类型: {}, 预约原因: {}, 审核人: {}", appointmentOwner.get("ownerName"),appointmentOwner.get("appointmentType"),appointmentOwner.get("appointmentReason"),appointmentOwner.get("auditorName"));}}
} else {log.info("❌ [未找到预约记录] 按原有逻辑查询本地车主信息");// 原有逻辑:查询本地车主信息Integer ownerId = violationsMapper.selectOwnerIdByPlateNumber(violation.getPlateNumber());violation.setOwnerId(ownerId);log.info("🔍 [本地车主查询] plateNumber={}, ownerId={}", violation.getPlateNumber(), ownerId);
}

🧪 测试方案

1. 准备测试数据

预约记录数据(appointment表)
INSERT INTO appointment (plateNumber, ownername, ownerphone, community, auditstatus, visitdate, recorddate) 
VALUES ('川A12345', '张三', '13888888888', '阳光小区', 'approved', '2025-01-15', NOW());
测试场景
  1. 有预约记录的车牌:川A12345
  1. 无预约记录的车牌:川B99999

2. 测试步骤

场景1:预约车违规记录创建
# 1. 通过小程序创建违规记录(车牌:川A12345)
# 2. 查看后端日志,确认自动关联逻辑
# 3. 检查数据库violations表的appointment_id字段

期望结果

  • ✅ 后端日志显示:[预约记录关联成功] plateNumber=川A12345, appointmentId=1
  • ✅ violations表的appointment_id字段不为空
  • ✅ 前端违规详情页能显示预约信息
场景2:非预约车违规记录创建
# 1. 通过小程序创建违规记录(车牌:川B99999)
# 2. 查看后端日志,确认降级逻辑
# 3. 检查数据库violations表的appointment_id字段

期望结果

  • ✅ 后端日志显示:[未找到预约记录] 按原有逻辑查询本地车主信息
  • ✅ violations表的appointment_id字段为空
  • ✅ 违规记录正常创建,使用本地车主信息

3. 验证SQL查询

检查violations表appointment_id字段
-- 查看最新的违规记录
SELECT id,plate_number,appointment_id,owner_id,created_at
FROM violations 
ORDER BY created_at DESC 
LIMIT 10;
查看预约信息关联查询
-- 查看带预约信息的违规记录
SELECT v.id,v.plate_number,v.appointment_id,v.violation_type,v.created_at,a.ownername as appointment_owner,a.ownerphone as appointment_phone,a.community,a.auditstatus as appointment_status
FROM violations v
LEFT JOIN appointment a ON v.appointment_id = a.id
WHERE v.appointment_id IS NOT NULL
ORDER BY v.created_at DESC;

📊 测试结果记录

测试环境

  • 后端:Spring Boot + MyBatis Plus
  • 数据库:MySQL 8.0
  • 前端:UniApp 小程序

测试记录

测试1:预约车违规(川A12345)
时间:2025-01-15 16:30:00
操作:通过小程序创建违规记录
车牌:川A12345后端日志:
🚗 [自动查找预约记录] 根据车牌号查询: 川A12345
✅ [预约记录关联成功] plateNumber=川A12345, appointmentId=1, status=已审核, community=阳光小区
✅ [从预约记录获取业主信息] 业主: 张三, 预约类型: 访客预约, 预约原因: 探望老人, 审核人: 王管理员数据库验证:
violations.appointment_id = 1 ✅
前端显示:预约信息完整显示 ✅
测试2:非预约车违规(川B99999)
时间:2025-01-15 16:35:00
操作:通过小程序创建违规记录
车牌:川B99999后端日志:
🚗 [自动查找预约记录] 根据车牌号查询: 川B99999
❌ [未找到预约记录] 按原有逻辑查询本地车主信息
🔍 [本地车主查询] plateNumber=川B99999, ownerId=null数据库验证:
violations.appointment_id = NULL ✅
违规记录创建成功 ✅

🎯 功能验证清单

  • 自动查找预约记录:根据车牌号自动查找并关联预约记录ID
  • 业主信息获取:从预约记录中获取业主详细信息
  • 降级处理:无预约记录时使用原有的本地车主查询逻辑
  • 数据完整性:violations表的appointment_id字段正确填充
  • 前端显示:违规详情页能完整显示预约信息
  • 日志记录:详细的操作日志便于排查问题

🔄 兼容性说明

向后兼容

  • ✅ 不影响现有的违规记录创建流程
  • ✅ 前端无需修改,自动享受新功能
  • ✅ 无预约记录的车辆按原有逻辑处理

性能影响

  • ✅ 仅在需要时查询预约记录,不影响整体性能
  • ✅ 查询结果按recorddate排序,获取最新预约记录
  • ✅ 预约记录查询已有索引优化

🛠️ 故障排查

常见问题

1. appointment_id仍为空

排查步骤

  1. 检查车牌号是否有预约记录:SELECT * FROM appointment WHERE plateNumber = '车牌号'
  1. 检查预约记录状态:确保auditstatus != 'pending'
  1. 查看后端日志:确认是否执行了自动查找逻辑
2. 关联了错误的预约记录

排查步骤

  1. 检查车牌号是否重复有多条预约记录
  1. 确认查询结果按recorddate DESC排序,使用最新记录
  1. 检查预约记录的状态是否符合要求
3. 业主信息显示不完整

排查步骤

  1. 检查selectOwnerByAppointmentId方法是否正常
  1. 确认预约记录中的业主信息字段完整
  1. 查看前端是否正确处理预约信息字段

🎉 总结

通过这次修复,violations表的appointment_id字段现在可以正确填充,实现了:

  1. 自动化关联:无需前端传递,后端自动根据车牌号查找预约记录
  1. 数据完整性:违规记录与预约记录正确关联
  1. 信息展示:前端可以完整显示预约详细信息
  1. 向后兼容:不影响现有功能,平滑升级
http://www.dtcms.com/a/438028.html

相关文章:

  • 进程“悄悄话”函数——`socketpair`
  • QT肝8天14--编辑用户
  • Redis Zset的底层秘密:跳表(Skip List)的精妙设计
  • 广州金融网站建设2017网站开发语言排名
  • C++ priority_queue优先级队列
  • Kafka 授权与 ACL 深入实践
  • 西宁市住房和城乡建设局网站做一个个人网站
  • 瑞安做网站多少钱东莞网站建设找谁
  • 谷歌云+Apache Airflow,数据处理自动化的强力武器
  • 小红书自动化运营:智能体+RPA自动化+MCP实现采集仿写和自动发布
  • 网站域名和网站网址建筑培训网 江苏
  • 定制开发开源AI智能名片S2B2C商城小程序的会员制运营研究——以“老铁用户”培养为核心目标
  • 【aigc】chrome-devtools-mcp怎么玩?
  • 从《Life of A Pixel》来看Chrome的渲染机制
  • 【项目实战 Day9】springboot + vue 苍穹外卖系统(用户端订单模块 + 商家端订单管理模块 完结)
  • Mac 安装Neo4j教程
  • blender 解决shift快捷键和中英切换重复的问题
  • 网站动态图怎么做阳明拍卖公司网站
  • 01_Docker 部署 Ollama 模型(支持 NVIDIA GPU)
  • 苏州新区网站制作wordpress视频格式
  • 一位Android用户的科技漫游手记
  • android中调用相册
  • 安卓基础组件031-Retrofit 网络请求框架
  • Redis 黑马点评-商户查询缓存
  • Android geckoview 集成,JS交互,官方demo
  • 【APK安全】Android 权限校验核心风险与防御指南
  • 单调队列与单调栈
  • 设计与优化Java API:构建高效、可维护的接口
  • Locality Sensitive Hashing (LSH) 详解:高效检测语言语句重复的利器
  • 阿里云网站开发零起步如何做设计师