【行政】会议室、车辆管理
会议室、车辆管理,由 yudao-module-oa 后端模块的 meetingroom、vehicle 包实现,前端实现在 @/views/oa/meetingroom/room、@/views/oa/meetingroom/booking、@/views/oa/vehicle、@/views/oa/vehicle/apply、@/views/oa/vehicle/return 目录。
会议室和车辆都先维护资源资料,再提交使用申请。会议室按预定时段安排使用,车辆通过用车、还车两张单据完成闭环;审批状态与实际使用 / 还车状态分别保存。
本文涉及表如下图所示:
# 1. 会议室信息
会议室信息,由 OaMeetingRoomController 提供接口(/oa/meeting-room)。
# 1.1 表结构
省略 creator/create_time/updater/update_time/deleted/tenant_id 等通用字段
会议室表 oa_meeting_room,保存会议室的位置、坐席数、设备和可预定范围:
CREATE TABLE `oa_meeting_room` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号',
`name` varchar(100) NOT NULL COMMENT '会议室名称',
`location` varchar(255) NOT NULL COMMENT '会议室位置',
`type` tinyint NOT NULL COMMENT '会议室类型',
`manager_user_id` bigint NOT NULL COMMENT '负责人用户编号',
`status` tinyint NOT NULL COMMENT '可用状态',
`pic_url` varchar(1024) COMMENT '会议室图片 URL',
`seat_count` int COMMENT '坐席数',
`equipments` json COMMENT '设备列表',
`allow_booking` bit NOT NULL COMMENT '是否允许预定',
`need_approval` bit NOT NULL COMMENT '预定是否需要审批',
`booking_scope` tinyint NOT NULL COMMENT '可预定范围',
`booking_user_ids` json COMMENT '可预定用户编号列表',
`sort` int NOT NULL COMMENT '显示顺序',
`remark` varchar(200) COMMENT '备注',
`file_urls` json COMMENT '附件地址列表',
PRIMARY KEY (`id`)
) ENGINE=InnoDB COMMENT='会议室';
① manager_user_id 关联 system_users 表的 id 字段,表示会议室负责人。
② 枚举 type 会议室类型(OaMeetingRoomTypeEnum),对应字典 oa_meeting_room_type:
| 值 | 枚举 | 说明 |
|---|---|---|
1 | INTERNAL | 内部会议室 |
2 | EXTERNAL | 外部会议室 |
3 | TRAINING | 培训室 |
4 | MULTIFUNCTION | 多功能厅 |
③ 枚举 status 可用状态(OaMeetingRoomStatusEnum),对应字典 oa_meeting_room_status:
| 值 | 枚举 | 说明 |
|---|---|---|
0 | NORMAL | 正常 |
1 | MAINTENANCE | 维修中 |
2 | DISABLED | 不可用 |
提交预定时要求房间 status = 正常(0) 且 allow_booking = true,否则抛出 MEETING_ROOM_NOT_AVAILABLE。
④ 枚举 booking_scope 可预定范围(OaMeetingRoomBookingScopeEnum),对应字典 oa_meeting_room_booking_scope:
| 值 | 枚举 | 说明 |
|---|---|---|
0 | ALL | 全部成员 |
1 | SPECIFIED | 指定成员 |
指定成员时,booking_user_ids 保存可预定用户编号列表;提交时校验当前用户是否在列表中。
⑤ need_approval 控制预定是否需要走 BPM:为 false 时提交直接审批通过且不创建流程实例。详见 §2.2 状态流转。
⑥ equipments、booking_user_ids、file_urls 均为 JSON,结构如下:
equipments / booking_user_ids / file_urls
equipments 是设备字典值数组,对应字典 oa_meeting_room_equipment:
[1, 2, 4]
| 值 | 说明(字典) |
|---|---|
1 | 电视 |
2 | 电脑 |
3 | 遥控器 |
4 | 投影仪 |
5 | 饮水机 |
6 | 置物柜 |
booking_user_ids 是用户编号数组,关联 system_users.id:
[1, 1024, 2048]
file_urls 是附件地址数组:
["http://xxx/room-plan.pdf"]
# 1.2 管理后台
对应 [OA 办公协同 -> 会议室管理 -> 会议室信息] 菜单,对应 yudao-ui-admin-vue3 项目的 @/views/oa/meetingroom/room 目录。
# 列表

# 新增与修改
点击【新增】打开 OaMeetingRoomForm.vue,填写名称、位置、类型、负责人、坐席数和设备,设置允许预定、预定需审批及可用范围。

# 查看预定信息
在会议室列表点击【预定信息】,查看房间已安排的会议,由 GET /oa/meeting-room-booking/schedule 提供数据。选择房间时也可以先查看预定信息。
# 2. 会议室预定
会议室预定,由 OaMeetingRoomBookingController 提供接口(/oa/meeting-room-booking)。
# 2.1 表结构
省略 creator/create_time/updater/update_time/deleted/tenant_id 等通用字段
会议室预定表 oa_meeting_room_booking,保存会议主题、时段、参会人以及审批与使用状态:
CREATE TABLE `oa_meeting_room_booking` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号',
`no` varchar(64) NOT NULL COMMENT '预定申请单号',
`room_id` bigint NOT NULL COMMENT '会议室编号',
`title` varchar(200) NOT NULL COMMENT '会议主题',
`start_time` datetime NOT NULL COMMENT '会议开始时间',
`end_time` datetime NOT NULL COMMENT '会议结束时间',
`moderator_user_id` bigint NOT NULL COMMENT '主持人用户编号',
`attendee_user_ids` json COMMENT '参会用户编号列表',
`reminder_type` tinyint NOT NULL COMMENT '会议提醒类型',
`reminded` bit NOT NULL DEFAULT b'0' COMMENT '是否已发送会议开始提醒',
`description` varchar(500) COMMENT '会议说明',
`dept_id` bigint COMMENT '申请部门编号',
`status` tinyint NOT NULL COMMENT '审批状态',
`process_instance_id` varchar(64) COMMENT 'BPM 流程实例编号',
`need_approval` bit COMMENT '提交时是否需要审批',
`use_status` tinyint NOT NULL COMMENT '使用状态',
`remark` varchar(500) COMMENT '申请备注',
`file_urls` json COMMENT '附件地址列表',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_meeting_booking_no` (`tenant_id`, `no`),
KEY `idx_meeting_booking_room_time` (`tenant_id`, `room_id`, `start_time`, `end_time`),
KEY `idx_meeting_booking_creator` (`tenant_id`, `creator`, `deleted`),
KEY `idx_meeting_booking_reminder` (`tenant_id`, `reminded`, `status`, `use_status`, `start_time`)
) ENGINE=InnoDB COMMENT='会议室预定';
① no 预定单号由 OaNoRedisDAO 以 HY 为前缀生成,uk_meeting_booking_no 唯一索引保证租户内唯一,创建时再查 selectByNo,重复则抛出 MEETING_ROOM_BOOKING_NO_DUPLICATE。通用字段 creator 即申请人。
② room_id 关联 oa_meeting_room 表的 id 字段;moderator_user_id 关联 system_users 表的 id 字段;dept_id 关联 system_dept 表的 id 字段,创建时冗余申请人部门。idx_meeting_booking_room_time 支撑时段冲突与日程查询。
③ need_approval 保存提交当时房间是否需要审批的快照,后续房间配置变更不影响已提交单据。
④ 枚举 reminder_type 提醒方式(OaMeetingRoomReminderTypeEnum),对应字典 oa_meeting_room_reminder_type:
| 值 | 枚举 | 说明 | 提前分钟 |
|---|---|---|---|
1 | NONE | 不提醒 | — |
2 | BEFORE_FIVE_MINUTES | 提前 5 分钟 | 5 |
3 | BEFORE_TEN_MINUTES | 提前 10 分钟 | 10 |
4 | BEFORE_FIFTEEN_MINUTES | 提前 15 分钟 | 15 |
5 | BEFORE_THIRTY_MINUTES | 提前 30 分钟 | 30 |
reminded 由提醒 Job 回写,避免重复发送。idx_meeting_booking_reminder 支撑定时扫描。
⑤ attendee_user_ids、file_urls 为 JSON:
attendee_user_ids / file_urls
[1, 2, 3]
["http://xxx/agenda.pdf"]
⑥ 提交时检查成员范围、房间状态和预约冲突。时段采用左闭右开区间,相邻会议可以首尾衔接。流程 key 为 oa_meeting_room_booking。
# 2.2 状态流转
会议室预定由 OaMeetingRoomBookingServiceImpl 控制,同时维护 BPM 审批状态与本地使用状态。
审批状态(BpmProcessInstanceStatusEnum,字典 bpm_process_instance_status):
| 状态值 | 枚举 | 说明 | 可执行操作 |
|---|---|---|---|
-1 | NOT_START | 未开始(草稿) | 编辑、删除、提交 |
1 | RUNNING | 审批中 | 取消、查看进度 |
2 | APPROVE | 审批通过 | 开始、完成、取消使用 |
3 | REJECT | 审批不通过 | — |
4 | CANCEL | 已取消 | — |
使用状态(OaMeetingRoomUseStatusEnum,字典 oa_meeting_room_use_status):
| 状态值 | 枚举 | 说明 | 可执行操作 |
|---|---|---|---|
0 | PENDING | 待使用 | 开始、取消 |
1 | IN_USE | 使用中 | 完成 |
2 | COMPLETED | 已完成 | — |
3 | CANCELLED | 已取消 | — |
状态流转说明
【提交可短路】
草稿(status=-1) ──提交──┬── needApproval=true ──→ 审批中(1) ──通过──→ 通过(2)+待使用(0)
└── needApproval=false ──→ 直接通过(2)+待使用(0)(不启 BPM,process_instance_id 为空)
【使用状态】(仅 status=审批通过(2))
待使用(0) ──开始──→ 使用中(1) ──完成──→ 已完成(2)
│
└──取消使用──→ 已取消(3)(保留审批通过结果)
审批驳回/取消 ──→ use_status=已取消(3),释放时段
- 创建预定(
createMeetingRoomBooking):status = 未开始(-1),use_status = 待使用(0),reminded = false,生成HY单号。 - 编辑 / 删除(
updateMeetingRoomBooking/deleteMeetingRoomBooking):仅草稿。 - 提交(
submitMeetingRoomBooking):校验房间可预定、成员范围、开始时间未过期、时段不冲突;写入need_approval快照。若needApproval = false,直接status = 审批通过(2)、use_status = 待使用(0)并返回 null(不创建流程);否则进入审批中(1)并启动oa_meeting_room_booking。 - 取消(
cancelMeetingRoomBooking):审批中则取消 BPM;已通过且待使用则只把use_status改为已取消(3),保留审批通过。 - 开始 / 完成(
startMeetingRoomBooking/finishMeetingRoomBooking):申请人或主持人可操作。开始要求当前时间落在会议时段内:待使用(0)→使用中(1);完成:使用中(1)→已完成(2)。 - 审批回写(
updateMeetingRoomBookingStatus):仅处理仍处于审批中(1)的单据;通过则use_status = 待使用(0),驳回/取消则use_status = 已取消(3)。 - 会议提醒(
OaMeetingRoomBookingReminderJob→sendMeetingRoomBookingReminders/sendMeetingRoomBookingReminder):扫描未提醒、已通过、待使用且到达提前提醒窗口的预定,发送站内信模板oa_meeting_room_booking_reminder,成功后回写reminded = 1。
# 2.3 管理后台
对应 [OA 办公协同 -> 会议室管理 -> 会议室预定] 菜单,对应 yudao-ui-admin-vue3 项目的 @/views/oa/meetingroom/booking 目录。
# 列表

# 新增与修改
点击【新增】打开 OaMeetingRoomBookingForm.vue,选择会议室,填写主题、起止时间、主持人、参会人员、提醒方式和会议说明,保存为草稿。

# 提交
在列表点击【提交】,调用 PUT /oa/meeting-room-booking/submit。需要审批时发起 oa_meeting_room_booking 流程,不需要审批时直接进入审批通过、待使用状态。
# 开始、完成与取消
审批通过的预定按页面状态点击【开始】【完成】,分别调用 /start、/finish 更新使用状态。点击【取消】调用 /cancel,按当前审批与使用状态处理。仅未提交草稿可修改、删除。
# 3. 车辆信息
车辆信息,由 OaVehicleController 提供接口(/oa/vehicle)。
# 3.1 表结构
省略 creator/create_time/updater/update_time/deleted/tenant_id 等通用字段
车辆表 oa_vehicle,保存车辆台账的车牌号、车型、座位数和保险年检信息:
CREATE TABLE `oa_vehicle` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号',
`no` varchar(32) NOT NULL COMMENT '车牌号',
`name` varchar(128) NOT NULL COMMENT '车辆名称',
`dept_id` bigint DEFAULT NULL COMMENT '所属部门编号',
`type` varchar(64) NOT NULL COMMENT '车型',
`category` varchar(64) DEFAULT NULL COMMENT '车辆分类',
`brand_model` varchar(128) DEFAULT NULL COMMENT '品牌型号',
`seat_count` int NOT NULL COMMENT '座位数',
`bare_price` decimal(18,2) NOT NULL DEFAULT 0 COMMENT '裸车价格(元)',
`compulsory_insurance_expire_time` datetime DEFAULT NULL COMMENT '交强险到期时间',
`commercial_insurance_expire_time` datetime DEFAULT NULL COMMENT '商业险到期时间',
`inspection_expire_time` datetime DEFAULT NULL COMMENT '年检到期时间',
`pic_url` varchar(2048) DEFAULT NULL COMMENT '车辆照片 URL',
`status` tinyint NOT NULL DEFAULT 0 COMMENT '车辆状态',
`sort` int NOT NULL DEFAULT 0 COMMENT '显示顺序',
`remark` varchar(500) DEFAULT NULL COMMENT '备注',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_no` (`tenant_id`, `no`)
) ENGINE=InnoDB COMMENT='车辆';
① no 是车牌号,uk_no 唯一索引保证租户内车牌唯一。dept_id 关联 system_dept 表的 id 字段。
② category 车辆分类对应字典 oa_vehicle_category。
③ 枚举 status 台账状态(OaVehicleStatusEnum),对应字典 oa_vehicle_status:
| 值 | 枚举 | 说明 |
|---|---|---|
0 | IDLE | 空闲 |
1 | DISABLED | 停用 |
2 | IN_USE | 使用中 |
车辆台账状态为手工维护
用车、还车审批不会自动改写 oa_vehicle.status。提交用车申请时只校验车辆当前为 空闲(0);是否占用预约时段由用车申请的审批状态与 return_status 控制。
# 3.2 管理后台
对应 [OA 办公协同 -> 车辆管理 -> 车辆信息] 菜单,对应 yudao-ui-admin-vue3 项目的 @/views/oa/vehicle 目录。
# 列表

# 新增与修改
点击【新增】打开 OaVehicleForm.vue,维护车牌号、名称、车型、分类、品牌、座位数、价格和保险年检信息。车牌号由后端校验唯一。

# 查询与删除
按部门、车牌号、车型、状态和保险年检时间筛选车辆。删除台账时不把历史用车单据当作同一对象删除。
# 4. 用车申请
用车申请,由 OaVehicleApplyController 提供接口(/oa/vehicle-apply)。
# 4.1 表结构
省略 creator/create_time/updater/update_time/deleted/tenant_id 等通用字段
用车申请表 oa_vehicle_apply,保存预计出车回车时间、用车事由和审批状态:
CREATE TABLE `oa_vehicle_apply` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号',
`no` varchar(64) NOT NULL COMMENT '用车申请单号',
`vehicle_id` bigint DEFAULT NULL COMMENT '车辆编号',
`vehicle_no` varchar(32) DEFAULT NULL COMMENT '车牌号快照',
`user_id` bigint NOT NULL COMMENT '申请人用户编号',
`dept_id` bigint DEFAULT NULL COMMENT '申请部门编号',
`start_time` datetime DEFAULT NULL COMMENT '预计出车时间',
`end_time` datetime DEFAULT NULL COMMENT '预计回车时间',
`start_location` varchar(255) DEFAULT NULL COMMENT '出车地点',
`end_location` varchar(255) DEFAULT NULL COMMENT '预计回车地点',
`reason` varchar(500) DEFAULT NULL COMMENT '用车事由',
`passenger` varchar(500) DEFAULT NULL COMMENT '随行人',
`status` tinyint NOT NULL DEFAULT -1 COMMENT '审批状态',
`return_status` tinyint NOT NULL DEFAULT 0 COMMENT '还车业务状态',
`process_instance_id` varchar(64) DEFAULT NULL COMMENT 'BPM 流程实例编号',
`file_urls` json DEFAULT NULL COMMENT '附件地址列表',
`remark` varchar(500) DEFAULT NULL COMMENT '备注',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_no` (`tenant_id`, `no`),
UNIQUE KEY `uk_process_instance` (`tenant_id`, `process_instance_id`),
KEY `idx_user_id` (`tenant_id`, `user_id`),
KEY `idx_vehicle_id` (`tenant_id`, `vehicle_id`)
) ENGINE=InnoDB COMMENT='用车申请';
① no 用车单号由 OaNoRedisDAO 以 YC 为前缀生成,uk_no 唯一索引 + validateVehicleApplyNoUnique 二次校验。user_id 关联 system_users,dept_id 关联 system_dept,创建时取自当前登录人。
② vehicle_id 关联 oa_vehicle 表的 id 字段,vehicle_no 保存车牌快照。idx_vehicle_id 支撑冲突检查与按车查询。
③ status 是 BPM 审批状态,流程 key 为 oa_vehicle_apply。return_status 是还车业务状态(OaVehicleReturnStatusEnum),对应字典 oa_vehicle_return_status。
④ 草稿不占用预约;提交时校验车辆空闲及时间冲突,审批中的申请也参与冲突检查。用车时间采用左闭右开区间。
⑤ file_urls 是 JSON 数组,保存附件地址列表。
# 4.2 状态流转
用车申请由 OaVehicleApplyServiceImpl 控制。
审批状态(BpmProcessInstanceStatusEnum,字典 bpm_process_instance_status):
| 状态值 | 枚举 | 说明 | 可执行操作 |
|---|---|---|---|
-1 | NOT_START | 未开始(草稿) | 编辑、删除、提交 |
1 | RUNNING | 审批中 | 取消、查看进度 |
2 | APPROVE | 审批通过 | 发起还车 |
3 | REJECT | 审批不通过 | — |
4 | CANCEL | 已取消 | — |
还车业务状态(OaVehicleReturnStatusEnum,字典 oa_vehicle_return_status):
| 状态值 | 枚举 | 说明 | 可执行操作 |
|---|---|---|---|
0 | NOT_EFFECTIVE | 未生效 | — |
1 | PENDING_RETURN | 待还车 | 新建/提交还车单 |
2 | RETURNING | 还车中 | —(等待还车审批) |
3 | RETURNED | 已还车 | — |
状态流转说明
【BPM】
草稿(-1) ──提交──→ 审批中(1) ──┬──通过──→ 通过(2) 且 return_status=待还车(1)
├──不通过/取消──→ return_status 保持/回到 未生效(0)
【还车业务】
未生效(0) ──用车审批通过──→ 待还车(1) ──提交还车──→ 还车中(2) ──┬──还车通过──→ 已还车(3)
└──还车拒绝/取消──→ 待还车(1)
- 创建申请(
createVehicleApply):status = 未开始(-1),return_status = 未生效(0),生成YC单号。 - 编辑 / 删除(
updateVehicleApply/deleteVehicleApply):仅草稿(validateVehicleApplyDraft)。 - 提交(
submitVehicleApply):校验车辆空闲(0)与时段冲突后进入审批中(1),发起oa_vehicle_apply。 - 取消(
cancelVehicleApply):仅审批中,取消 BPM 后释放预约。 - 审批回写(
updateVehicleApplyStatus):通过 →return_status = 待还车(1);拒绝/取消 →return_status = 未生效(0)。 - 还车状态 CAS(
updateVehicleApplyReturnStatus):按「期望原状态 → 新状态」条件更新(updateReturnStatusByIdAndReturnStatus),更新行数为 0 则抛出VEHICLE_RETURN_STATUS_INVALID,保证同时只允许一份还车中。
# 4.3 管理后台
对应 [OA 办公协同 -> 车辆管理 -> 用车申请] 菜单,对应 yudao-ui-admin-vue3 项目的 @/views/oa/vehicle/apply 目录。
# 列表

# 新增与修改
点击【新增】打开 OaVehicleApplyForm.vue,选择车辆,填写预计出车和回车时间、地点、随行人、用车事由及附件。保存生成草稿和申请单号。

# 提交与取消
在列表点击【提交】,调用 PUT /oa/vehicle-apply/submit 发起 oa_vehicle_apply 流程。审批中可点击【取消】;未提交草稿允许修改、删除,已提交单据保留历史。
# 发起还车
用车审批通过后,在列表点击【还车】,关联当前用车申请进入还车表单。还车情况由下一节的还车申请处理。
# 5. 还车申请
还车申请,由 OaVehicleReturnController 提供接口(/oa/vehicle-return)。还车是独立 BPM 单据,与用车申请一对多(历史上可多次发起,但同一时刻最多一份「还车中」)。
# 5.1 表结构
省略 creator/create_time/updater/update_time/deleted/tenant_id 等通用字段
还车申请表 oa_vehicle_return,关联用车申请,保存实际回车时间、地点和还车说明:
CREATE TABLE `oa_vehicle_return` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号',
`no` varchar(64) NOT NULL COMMENT '还车申请单号',
`apply_id` bigint NOT NULL COMMENT '用车申请编号',
`vehicle_id` bigint NOT NULL COMMENT '车辆编号',
`user_id` bigint NOT NULL COMMENT '申请人用户编号',
`dept_id` bigint DEFAULT NULL COMMENT '申请部门编号',
`actual_return_time` datetime DEFAULT NULL COMMENT '实际回车时间',
`return_location` varchar(255) DEFAULT NULL COMMENT '实际回车地点',
`status` tinyint NOT NULL DEFAULT -1 COMMENT '审批状态',
`process_instance_id` varchar(64) DEFAULT NULL COMMENT 'BPM 流程实例编号',
`file_urls` json DEFAULT NULL COMMENT '附件地址列表',
`remark` varchar(500) DEFAULT NULL COMMENT '备注',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_no` (`tenant_id`, `no`),
UNIQUE KEY `uk_process_instance` (`tenant_id`, `process_instance_id`),
KEY `idx_apply_id` (`tenant_id`, `apply_id`),
KEY `idx_user_id` (`tenant_id`, `user_id`),
KEY `idx_vehicle_id` (`tenant_id`, `vehicle_id`)
) ENGINE=InnoDB COMMENT='还车申请';
① no 还车单号由 OaNoRedisDAO 以 HC 为前缀生成,uk_no 唯一。apply_id 关联 oa_vehicle_apply 表的 id 字段;vehicle_id 从用车申请带出,关联 oa_vehicle。idx_apply_id 支撑按原单反查还车历史。
② user_id、dept_id 与用车申请一致,随关联申请确定。实际回车时间须满足原用车申请的时间约束(validateVehicleReturn)。
③ status 是独立的 BPM 审批状态,流程 key 为 oa_vehicle_return。保存还车草稿不改变原用车单的 return_status。
④ file_urls 是 JSON 数组,保存附件地址列表。
# 5.2 状态流转
还车申请由 OaVehicleReturnServiceImpl 控制,并回写原用车单的 return_status。
还车单审批状态(BpmProcessInstanceStatusEnum,字典 bpm_process_instance_status):
| 状态值 | 枚举 | 说明 | 可执行操作 |
|---|---|---|---|
-1 | NOT_START | 未开始(草稿) | 编辑、删除、提交 |
1 | RUNNING | 审批中 | 取消、查看进度 |
2 | APPROVE | 审批通过 | —(原单已还车) |
3 | REJECT | 审批不通过 | —(原单回到待还车) |
4 | CANCEL | 已取消 | —(原单回到待还车) |
状态流转说明
还车草稿(-1) ──提交──→ 还车审批中(1)
│
├──通过──→ 还车通过(2),原单 return_status:还车中(2) → 已还车(3)
└──拒绝/取消──→ 原单 return_status:还车中(2) → 待还车(1),可再次发起
- 创建还车(
createVehicleReturn):校验原单属于本人且return_status = 待还车(1);生成HC单号,还车单status = 未开始(-1)。此时原单仍为待还车。 - 编辑 / 删除(
updateVehicleReturn/deleteVehicleReturn):仅还车草稿;删除草稿不代表已还车。 - 提交(
submitVehicleReturn):CAS 将原单待还车(1)→还车中(2),再把还车单改为审批中(1)并启动oa_vehicle_return。若已有其它还车单处于还车中,CAS 失败。 - 取消(
cancelVehicleReturn):取消还车 BPM,结果事件把原单从还车中(2)恢复为待还车(1)。 - 审批回写(
updateVehicleReturnStatus):通过 → 原单还车中(2)→已还车(3);拒绝或取消 → 原单回到待还车(1),允许再次发起还车。
# 5.3 管理后台
对应 [OA 办公协同 -> 车辆管理 -> 还车申请] 菜单,对应 yudao-ui-admin-vue3 项目的 @/views/oa/vehicle/return 目录。
# 列表

# 新增与修改
点击【新增】打开 OaVehicleReturnForm.vue,选择本人待还车的用车申请,填写实际回车时间、地点、还车说明和附件。

# 提交与审批
在列表点击【提交】,调用 PUT /oa/vehicle-return/submit 发起 oa_vehicle_return 流程。实际回车时间必须满足原用车申请的时间约束。点击【进度】查看审批,审批中可取消。
# 删除
只有未提交的还车草稿可以修改、删除。删除草稿不代表已经还车,原用车单仍保持待还车状态。