Files
hzdyjs/docs/开发文档/API/报告厅预约审核API.md
T

13 KiB
Raw Blame History

报告厅预约审核 API 文档

文档信息

  • 文档名称: 报告厅预约审核 API 文档
  • 创建时间: 2025-01-09
  • 维护负责人: 开发团队
  • 最后更新: 2025-01-09 16:30:00

概述

报告厅预约审核模块提供专门的报告厅预约审核功能 API 接口,包括审核建议生成、时间冲突检查、批量审核等核心功能。该模块主要面向管理员用户,用于对用户提交的报告厅预约申请进行审核处理。

核心功能

  • 📋 预约列表查询:查询待审核和已审核的报告厅预约申请
  • 🔍 时间冲突检查:智能检测预约时间是否与已批准的预约冲突
  • 💡 审核建议生成:基于时间冲突检查结果自动生成审核建议
  • ✅ 批量审核处理:支持批准/拒绝单个或多个预约申请
  • 📊 审核记录管理:记录审核人、审核时间、审核备注等详细信息

技术特点

  • 智能冲突检测:精确的时间重叠算法,避免预约冲突
  • 批量操作支持:高效处理多个预约的审核操作
  • 权限控制严格:完整的权限验证机制
  • 日志记录完整:详细的操作日志和审核轨迹

🔐 基础规范

请求头规范

所有需要认证的接口都必须在请求头中携带:

{
    "Authorization": "Bearer {access_token}",
    "clientid": "e5cd7e4891bf95d1d19206ce24a7b32e",
    "Content-Type": "application/json;charset=utf-8",
    "Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8",
    "referer": "http://localhost/login?redirect=%252Findex"
}

响应格式规范

  • 分页列表: TableDataInfo 格式 (total, rows, code, msg)
  • 非分页接口: R 类型格式 (code, msg, data)
  • 错误响应: 统一错误格式

详细规范请参考:API文档基础规范


📋 报告厅预约查询 API

1. 查询报告厅预约列表

接口描述: 查询报告厅预约申请列表,支持多种条件筛选
请求方式: GET
请求路径: /hq/hallReservation/list
权限要求: hq:hallReservation:list

请求参数

参数名 类型 必填 说明 示例值
hallName String 否 报告厅名称(模糊查询) 第一报告厅
startTime String 否 预约开始时间(查询该时间之后的) 2025-01-10
endTime String 否 预约结束时间(查询该时间之前的) 2025-01-15
applicantName String 否 申请人姓名(模糊查询) 张三
status String 否 预约状态(0-审核中 1-已批准 2-已拒绝) 0
pageNum Integer 否 页码,默认1 1
pageSize Integer 否 每页数量,默认10 10

响应示例

{
    "total": 5,
    "rows": [
        {
            "id": 1234567890123456789,
            "hallId": 1,
            "hallName": "第一报告厅",
            "applicantId": 987654321,
            "applicantName": "张三",
            "applicantPhone": "13800138000",
            "startTime": "2025-01-15 09:00:00",
            "endTime": "2025-01-15 12:00:00",
            "reservationPurpose": "学术讲座 - 人工智能发展趋势",
            "status": "0",
            "auditBy": null,
            "auditName": null,
            "auditTime": null,
            "auditRemark": null,
            "createTime": "2025-01-09 14:30:00"
        }
    ],
    "code": 200,
    "msg": "查询成功"
}

2. 获取报告厅预约详情

接口描述: 获取指定预约申请的详细信息
请求方式: GET
请求路径: /hq/hallReservation/{id}
权限要求: hq:hallReservation:query

路径参数

参数名 类型 必填 说明 示例值
id Long 是 预约 ID 1234567890123456789

响应示例

{
    "code": 200,
    "msg": "操作成功",
    "data": {
        "id": 1234567890123456789,
        "hallId": 1,
        "hallName": "第一报告厅",
        "applicantId": 987654321,
        "applicantName": "张三",
        "applicantPhone": "13800138000",
        "startTime": "2025-01-15 09:00:00",
        "endTime": "2025-01-15 12:00:00",
        "reservationPurpose": "学术讲座 - 人工智能发展趋势",
        "status": "0",
        "auditBy": null,
        "auditName": null,
        "auditTime": null,
        "auditRemark": null,
        "createTime": "2025-01-09 14:30:00"
    }
}

🔍 时间冲突检查 API

检查报告厅预约时间冲突

接口描述: 检查指定报告厅在指定时间段内是否存在已批准的预约冲突
请求方式: POST
请求路径: /hq/hallReservation/checkTimeConflict
权限要求: hq:hallReservation:query

请求体

{
    "hallId": 1,
    "startTime": "2025-01-15 09:00:00",
    "endTime": "2025-01-15 12:00:00",
    "excludeId": 1234567890123456789
}

请求参数说明

参数名 类型 必填 说明 示例值
hallId Long 是 报告厅ID 1
startTime Date 是 预约开始时间(格式:yyyy-MM-dd HH:mm:ss) 2025-01-15 09:00:00
endTime Date 是 预约结束时间(格式:yyyy-MM-dd HH:mm:ss) 2025-01-15 12:00:00
excludeId Long 否 排除的预约ID(编辑时排除自己) 1234567890123456789

响应示例

无冲突时:

{
    "code": 200,
    "msg": "操作成功",
    "data": {
        "hasConflict": false,
        "conflictList": [],
        "conflictMessage": "无时间冲突"
    }
}

有冲突时:

{
    "code": 200,
    "msg": "操作成功",
    "data": {
        "hasConflict": true,
        "conflictList": [
            {
                "id": 1234567890123456790,
                "hallId": 1,
                "hallName": "第一报告厅",
                "applicantName": "李四",
                "applicantPhone": "13900139000",
                "startTime": "2025-01-15 10:00:00",
                "endTime": "2025-01-15 13:00:00",
                "reservationPurpose": "企业宣讲会",
                "status": "1",
                "auditName": "管理员",
                "auditTime": "2025-01-14 15:30:00"
            }
        ],
        "conflictMessage": "发现 1 个时间冲突的已批准预约"
    }
}

时间冲突判定规则

两个时间段存在冲突的条件:

  1. 新预约开始时间 < 已存在预约结束时间
  2. 新预约结束时间 > 已存在预约开始时间

即:startTime < existingEndTime AND endTime > existingStartTime

冲突检查逻辑

  1. 同一报告厅:只检查相同报告厅ID的预约
  2. 已批准状态:只检查状态为"1"(已批准)的预约
  3. 排除自身:修改预约时可以通过excludeId排除自身
  4. 精确匹配:使用数据库时间比较,确保检查准确性

✅ 报告厅预约审核 API

批量审核报告厅预约

接口描述: 批量批准或拒绝报告厅预约申请
请求方式: PUT
请求路径: /hq/hallReservation/audit
权限要求: hq:hallReservation:audit

请求体

{
    "ids": [1234567890123456789, 1234567890123456790],
    "status": "1",
    "auditRemark": "审核通过,请按时使用报告厅"
}

请求参数说明

参数名 类型 必填 说明 示例值
ids Long[] 是 要审核的预约ID数组 [1234567890123456789, 1234567890123456790]
status String 是 审核状态(1-批准 2-拒绝) 1
auditRemark String 否 审核备注(拒绝时建议填写原因) 审核通过,请按时使用报告厅

响应示例

成功时:

{
    "code": 200,
    "msg": "操作成功"
}

失败时:

{
    "code": 500,
    "msg": "审核失败,请稍后重试"
}

审核业务逻辑

  1. 状态检查:只有状态为"0"(审核中)的预约可以被审核
  2. 权限验证:必须具有hq:hallReservation:audit权限
  3. 审核信息记录:
    • auditBy:当前登录用户ID
    • auditName:当前登录用户姓名
    • auditTime:当前系统时间
    • auditRemark:审核备注
  4. 批量操作:支持一次审核多个预约,保证操作的原子性

审核状态说明

状态值 状态名称 说明
0 审核中 用户提交,等待审核
1 已批准 管理员审核通过
2 已拒绝 管理员审核拒绝

📊 数据字典

预约状态 (hall_reserv_status)

字典值 字典标签 说明 颜色标识
0 审核中 待管理员审核 橙色
1 已批准 审核通过 绿色
2 已拒绝 审核拒绝 红色

🔒 权限配置

接口权限要求

接口 权限标识 说明
查询报告厅预约列表 hq:hallReservation:list 列表查询权限
获取报告厅预约详情 hq:hallReservation:query 详情查询权限
检查报告厅预约时间冲突 hq:hallReservation:query 详情查询权限
批量审核报告厅预约 hq:hallReservation:audit 审核操作权限

权限配置SQL

参考文件:docs/设计文档/database/hall-audit-permission.sql


💡 开发建议

前端集成建议

  1. 审核建议显示:

    • 调用时间冲突检查接口
    • 根据返回结果显示审核建议
    • 冲突时显示警告图标和冲突详情
  2. 批量操作优化:

    • 支持全选/反选功能
    • 批量操作前进行确认提示
    • 操作结果统一反馈
  3. 用户体验优化:

    • 实时冲突检查
    • 操作loading状态
    • 详细的错误提示

后端开发注意事项

  1. 时间处理:

    • 统一使用数据库时间进行比较
    • 注意时区处理
    • 精确到秒级别
  2. 并发控制:

    • 审核操作加锁机制
    • 防止重复审核
    • 事务一致性保证
  3. 日志记录:

    • 详细的操作日志
    • 异常情况记录
    • 性能监控

🐛 常见问题

Q1: 时间冲突检查不准确怎么办?

A: 检查以下几点:

  1. 确认时间格式是否正确(yyyy-MM-dd HH:mm:ss)
  2. 检查数据库中的时间数据是否准确
  3. 确认冲突检查的SQL逻辑是否正确
  4. 检查是否正确排除了指定的预约ID

Q2: 批量审核部分失败怎么处理?

A:

  1. 后端使用事务确保原子性
  2. 如果部分失败,整个操作回滚
  3. 返回具体的失败原因
  4. 前端提示用户重新操作

Q3: 审核权限验证失败?

A:

  1. 检查用户是否具有hq:hallReservation:audit权限
  2. 确认权限配置SQL是否正确执行
  3. 检查角色权限分配是否正确
  4. 确认Token是否有效

📝 版本记录

v1.0.0 (2025-01-09)

新增功能:

  • ✨ 报告厅预约时间冲突检查接口
  • ✨ 智能审核建议生成功能
  • ✨ 批量审核处理功能
  • ✨ 完整的权限控制机制
  • ✨ 详细的审核记录管理

技术特点:

  • 🔍 精确的时间重叠检测算法
  • 📊 批量操作支持
  • 🔒 严格的权限验证
  • 📝 完整的操作日志

API接口:

  • GET /hq/hallReservation/list - 查询预约列表
  • GET /hq/hallReservation/{id} - 获取预约详情
  • POST /hq/hallReservation/checkTimeConflict - 检查时间冲突
  • PUT /hq/hallReservation/audit - 批量审核预约

📝 维护人: 开发团队
🔄 最后更新: 2025-01-09 16:30:00
📁 文件位置: docs/开发文档/API/报告厅预约审核API.md
🎯 相关文档: API文档基础规范 | API文档总览