资源预约冲突检测规则
适用于教室、会议室、设备、车辆等资源预约与预订场景。
规则文件内容
请复制以下内容,保存为 .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,statusreservation_limits必须包含:daily_max,max_duration_hours,max_advance_days,min_interval_minutesreservation_events必须包含:reservation_id,event_type,operator_id,created_at
8. 实施注意事项
- 全链路统一时区(建议 UTC 存储,前端本地化展示)。
- 冲突检测接口必须支持排除当前预约(修改场景)。
- 定时任务建议每 5 分钟扫描一次超时未签到预约。
## 适用场景
- 校园教室/场地预约
- 企业会议室预约
- 设备与车辆预约管理
