会议室预订
这篇解决什么
会议室档案和预订单怎么分、时段冲突在哪拦。读完能对上 oa_meeting_room_booking 和 oa_meeting_room_booking 流程 key,不要把日历控件当唯一校验。
先开模块,见 OA 功能设计。业务表单约定见 业务表单开发。
示意图:先有房间档案。预订单才走审批和冲突校验。
从哪改
| 名称 | 说明 | 仓库路径 |
|---|---|---|
| 房间 API | /oa/meeting-room | ruoyi-office/yudao-module-oa/.../MeetingRoomController.java |
| 预订单 | /oa/meeting-room-booking | MeetingRoomBookingController.java |
| 表 | 档案 / 预订 | oa_meeting_room、oa_meeting_room_booking |
| 流程 key | oa_meeting_room_booking | OaBillTypeEnum 代码 104 |
| 前端 | 档案 + list/info | ruoyi-office-vben/apps/web-antd/src/views/oa/meetingroom/ |
| 移动 | 创建页 pages-oa/meeting-room | bpm-menu-config.ts |
页面是 booking/list、booking/info。模型自定义路径必须对这两处。
validateTimeConflict 只看同一 roomId、useStatus 为待使用 0 或使用中 1 的单。草稿和已取消不占档。开始时间不能早于现在。前端日期用 valueFormat: 'x'。
提醒场景码 OA_MEETING_REMIND,不是流程节点。改 cron / 通知模板别去改预订 Controller。
权限字 oa:meeting-room-booking:create。档案维护走 oa:meeting-room:*。
字段
| 名称 | 说明 | 仓库路径 |
|---|---|---|
roomId / roomName | 房间冗余 | MeetingRoomBookingDO |
meetingStartTime / meetingEndTime | 会议时段 | 同上 |
moderatorId | 主持人 | 同上 |
useStatus | 待使用 / 使用中等 | 冲突查询用 |
日历绿了不等于能提交
列表日历只是展示。提交仍走后端冲突。两个人同时订同一段,后提交的会收到 MEETING_ROOM_BOOKING_TIME_CONFLICT。
先建房间再发单
没有 oa_meeting_room 行,预订选不到房间。不要在单据里手填一个不存在的 roomId。
@RequestMapping("/oa/meeting-room-booking")
public class MeetingRoomBookingController { }
@TableName("oa_meeting_room_booking")
public class MeetingRoomBookingDO extends BaseDO { }配置与操作
先在 OA → 会议室管理 → 会议室信息 建房间。预订走 booking / booking-info。保存后谁占档:同一 roomId 且 useStatus 为待使用 / 使用中的单。草稿和已取消不占。
日历只是展示。两人同时订同一段,后提交的收到 MEETING_ROOM_BOOKING_TIME_CONFLICT。提醒场景码 OA_MEETING_REMIND,改 cron 别去改预订 Controller。

本系统截图:OA → 会议室管理 → 会议室预定。

本系统截图:预订单 info。时段是时间戳,前端 valueFormat: 'x'。
