预约记录关联查询接口说明
功能概述
新增了一个接口,通过业主姓名关联 ownerinfo
表和 appointment
表,筛选出与当前巡逻员相同车场(community)的数据,返回 appointment
表中的记录。
🌟 主要特性
- ✅ 关联查询: 通过车牌号关联
ownerinfo
和appointment
表
- ✅ 权限过滤: 巡逻员只能查看自己负责社区的数据
- ✅ 多维搜索: 支持车牌号、业主姓名、电话号码搜索
- ✅ 分页支持: 支持分页查询,提高性能
- ✅ 数据丰富: 返回预约信息和业主信息的完整数据
📊 接口详情
后端接口
URL: GET /api/violations/appointment-records-by-owner
参数:
{"keyword": "搜索关键词(车牌号或业主姓名)", // 可选"page": 1, // 页码,默认1"size": 50 // 每页数量,默认50
}
响应数据:
{"code": 200,"message": "成功","data": [{"appointmentId": 123,"plateNumber": "京A12345","arriveDate": "2025-01-31 10:00:00","leaveDate": "2025-01-31 12:00:00","parkingSpace": "A-001","appointmentStatus": "confirmed","appointmentCreatedAt": "2025-01-30 15:30:00","ownerId": 456,"ownerName": "张三","ownerPhone": "13800138000","community": "阳光花园","parkingDuration": 2.0 // 停车时长(小时)}]
}
前端 API 调用
import { appointmentAnalysisApi } from '@/api/violation-api.js';// 查询预约记录
const result = await appointmentAnalysisApi.getAppointmentRecordsByOwner({keyword: '京A12345',page: 1,size: 20
});
🔧 实现细节
后端实现
- Controller 层 (
ViolationsController.java
)
- 新增
getAppointmentRecordsByOwner
接口方法
- 新增
- 处理参数验证和异常处理
- 记录详细的操作日志
- Service 层 (
ViolationsService.java
&ViolationsServiceImpl.java
)
- 实现业务逻辑
- 权限控制:巡逻员只能查看自己负责社区的数据
- 数据关联查询和格式化
- SQL 查询逻辑
SELECT DISTINCT a.id as appointment_id, a.plate_number, a.arrive_date, a.leave_date, a.parking_space, a.status as appointment_status, a.created_at as appointment_created_at, o.id as owner_id, o.name as owner_name, o.phone as owner_phone, o.community,TIMESTAMPDIFF(HOUR, a.arrive_date, a.leave_date) as parking_hours
FROM appointment a
INNER JOIN ownerinfo o ON a.plate_number = o.plate_number
WHERE 1=1 AND o.community = '当前巡逻员小区' -- 🔒 严格的小区权限过滤AND (a.community IS NULL OR a.community = '' OR a.community = '当前巡逻员小区') -- 🔒 appointment表小区一致性检查AND o.isaudit = '是' -- 🔍 只查询已审核的业主AND (a.plate_number LIKE '%关键词%' OR o.name LIKE '%关键词%' OR o.phone LIKE '%关键词%') -- 🔍 搜索条件
ORDER BY a.created_at DESC
LIMIT 50 OFFSET 0; -- 📄 分页
前端实现
- API 封装 (
violation-api.js
)
- 新增
getAppointmentRecordsByOwner
方法
- 新增
- 统一参数处理和错误处理
- 测试页面 (
appointment-owner-test.vue
)
- 完整的测试界面
- 搜索功能和分页控制
- 详细的数据展示和状态反馈
🔐 权限控制
- 巡逻员权限: 严格限制只能查看自己负责小区的预约记录
- 其他角色: 可以查看所有小区的预约记录(根据实际需求调整)
🔒 严格的小区权限控制逻辑:
- 巡逻员身份验证:
- 从 Token 中解析用户角色
- 如果是巡逻员,从
patrolinfo
表获取其负责的小区
- 如果是巡逻员,从
- 如果巡逻员没有小区信息,直接返回空结果
- 小区数据过滤:
- 在 SQL 查询中强制添加
o.community = '巡逻员小区'
条件
- 在 SQL 查询中强制添加
- 额外检查 appointment 表的小区字段(如果存在)
- 只查询已审核的业主数据
o.isaudit = '是'
- 只查询已审核的业主数据
- 双重保险机制:
- SQL 级别的小区过滤
- 业务层的二次过滤确认
- 确保 100% 的数据都与巡逻员小区一致
📱 使用方式
1. 测试接口
访问测试页面:/pages/test/appointment-owner-test
2. 集成到现有功能
// 在违规录入页面中使用
const searchOwnerRecords = async (keyword) => {try {const records = await appointmentAnalysisApi.getAppointmentRecordsByOwner({keyword: keyword,page: 1,size: 20});// 处理返回的数据console.log('预约记录:', records);} catch (error) {console.error('查询失败:', error);}
};