Skip to content

资源预约冲突检测规则

适用于教室、会议室、设备、车辆等资源预约与预订场景。

规则文件内容

请复制以下内容,保存为 .cursor/rules/resource-booking-conflict.mdc

markdown
---
description: 资源预约冲突检测、预约限制与自动释放业务规则
globs: src/modules/reservations/**, src/modules/resources/**, src/modules/approval/**
---

# 资源预约冲突检测业务规则

## 1. 核心原则
- **冲突先判定**:先判断时间冲突,再判断间隔冲突与限制规则。
- **规则可配置**:间隔、每日上限、提前天数等参数可配置。
- **状态闭环**:预约生命周期必须可追踪(reserved/in-use/completed/cancelled)。

## 2. 时间冲突规则

### 2.1 时间重叠
- 任意两条预约时间段存在交集即冲突。

```ts
function isTimeOverlap(aStart: Date, aEnd: Date, bStart: Date, bEnd: Date): boolean {
  return aStart < bEnd && aEnd > bStart;
}

2.2 间隔缓冲

  • 两条相邻预约之间最小间隔 10 分钟(默认值,可配置)。
  • 间隔不足记为 interval_conflict

3. 预约限制规则

3.1 用户维度限制

  • 每人每天最多 2 次有效预约(默认值,可配置)。
  • 单次预约时长不超过 4 小时(默认值,可配置)。

3.2 时间窗口限制

  • 最多提前 7 天预约(默认值,可配置)。
  • 不能预约当前时间之前的时间段。

4. 审批与状态规则

  • 普通资源:可自动批准(按组织策略配置)。
  • 特殊资源(高价值设备/重点场地):进入审批流。
  • 已驳回或已取消预约不可直接恢复,必须重新发起。

5. 自动释放规则

  • 预约开始后 30 分钟内未签到:自动释放资源。
  • 自动释放必须写入 cancel_reason = AUTO_RELEASE_TIMEOUT
  • 自动释放后必须通知申请人和管理人员。

6. 并发与幂等规则

  • 创建预约时必须使用“冲突检测 + 事务锁”。
  • 同一请求重复提交需基于 idempotency_key 幂等处理。

7. 数据模型约束

  • reservations 必须包含:resource_id, user_id, start_time, end_time, status
  • reservation_limits 必须包含:daily_max, max_duration_hours, max_advance_days, min_interval_minutes
  • reservation_events 必须包含:reservation_id, event_type, operator_id, created_at

8. 实施注意事项

  • 全链路统一时区(建议 UTC 存储,前端本地化展示)。
  • 冲突检测接口必须支持排除当前预约(修改场景)。
  • 定时任务建议每 5 分钟扫描一次超时未签到预约。

## 适用场景

- 校园教室/场地预约
- 企业会议室预约
- 设备与车辆预约管理

基于 AI 辅助开发,快速、灵活、可靠