SpringBoot3+Vue3+Flowable 公务用车:申请占坑、还车释放、撞时段怎么拦
🌐 文档地址:https://ruoyioffice.com
📦 源码1·GitHub:https://github.com/yuqing2026/ruoyi-office
📦 源码2·GitCode:https://gitcode.com/zhouzhongyan/ruoyi-office
📦 源码3·Gitee:https://gitee.com/yqzy1688/ruoyi-office
💬 微信:17156169080(备注「RuoYi Office」)
车不是库存里的签字笔,同一时段只能给一个人。RuoYi Office 用两张单把这件事钉死:用车单审过就占坑,还车单审过才释放。第二张撞上上午那趟,提交当场红字,不用等调度事后打电话。
▲ 左:奥迪 / 岚图 / 帕萨特 / 大巴一眼能认。右:一辆车一行排期,橙色待还、绿空档、红框重叠提交即拦
引言:公车乱,多半是「过了就算借走了」
行政最烦的不是没有用车单,而是单子过了,车还停在楼下;或者两张单约了同一上午。
|
|
|
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
本文只讲产品怎么走、两张单怎么配合、冲突和还车状态怎么串。菜单:OA 办公 → 车辆管理。流程 key:oa_car_apply_bill、oa_car_return_bill。
一、先认三张东西,再开单
|
|
|
|
|---|---|---|
|
|
/oa/car/car-info |
|
|
|
/oa/car/car-apply-info |
|
|
|
/oa/car/car-return-info |
|
用车单多一个 returnStatus,和流程状态不是一回事:
|
|
|
|
|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
选车时看到的「能用」,是台账状态。真正能不能约这个上午,看时间槽有没有被待还车或审批中的单占住。
二、业务怎么走:先占坑,再还钥匙
-
员工在 /oa/car/car-apply-info选车、填出车和预计回车时间。提交启动oa_car_apply_bill。 -
保存/提交时做时段重叠校验。审批中的单、已通过且待还/还车中的单,只要和本单时间相交,直接 CAR_TIME_CONFLICT。 -
用车审批通过,只改两件事: processStatus=通过,returnStatus=待还车。不会改台账里的车辆状态字段。 -
司机回来,开 /oa/car/car-return-info,勾这张用车单,填实际出回时间和地点。提交oa_car_return_bill,用车单改成还车中。 -
还车通过 → 用车单改已还车。还车驳回/取消 → 用车单滚回未生效,下午不能再当成「已经还了」。
▲ /oa/car/car-apply-info。时间用时间戳 valueFormat: 'x'。通过后才出现待还车,不是提交瞬间占坑
▲ /oa/car/car-return-info。必须勾未还的用车单。还车中的单不能再开第二张还车
▲ /oa/car/car-info。奥迪 A6L 空闲、大巴停用。台账管编制,时段占坑在用车单上,不要在这里手工改「借出」
三、实现怎么串:表、时序、代码放一起看
三张表只干三件事:oa_car 是编制,oa_car_apply_bill 是占坑壳,oa_car_return_bill 是释放壳。
|
|
|
|
|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
一次完整出车,时间顺序是:
submit用车单 → validateTimeConflict→ 启oa_car_apply_bill。-
通过 → returnStatus=待还车。这张单开始挡住重叠时段。 submit还车单 → 校验用车单还没还 → 启 oa_car_return_bill→markAsReturning。-
还车通过 → markAsReturned。驳回 →markAsNotReturned(回到未生效)。
// 用车通过才待还车;车这个时段从此算占坑public void updateProcessStatus(String businessKey, Integer status) {Long id = Long.parseLong(businessKey);CarApplyBillDO updateObj = new CarApplyBillDO();updateObj.setId(id);updateObj.setProcessStatus(status);if (APPROVE.getStatus().equals(status)) {updateObj.setReturnStatus(CarReturnStatusEnum.PENDING_RETURN.getStatus());}carApplyBillMapper.updateById(updateObj);}
冲突要同时罩住「还在审」和「已经过了但没还」两拨人。只查审批中,下午那张待还车会被第二个人约走。
// 同一 carId,时间三段相交:本单包住对方 / 对方包住本单起点 / 包住终点.and(sub -> sub.eq(CarApplyBillDO::getProcessStatus, RUNNING.getStatus())// 时间相交…….or(ok -> ok.eq(CarApplyBillDO::getProcessStatus, APPROVE.getStatus()).in(CarApplyBillDO::getReturnStatus,PENDING_RETURN.getStatus(), RETURNING.getStatus())))
还车单和用车单靠 applyBill 单号挂钩。提交还车先占「还车中」,避免同一张用车单开出两张还车。还车审不过,必须把用车单滚回去,否则钥匙在系统里永远还在路上。
if (APPROVE.getStatus().equals(status)) {carApplyBillService.markAsReturned(applyBill.getId());} else if (REJECT.getStatus().equals(status)|| CANCEL.getStatus().equals(status)|| RETURN.getStatus().equals(status)) {carApplyBillService.markAsNotReturned(applyBill.getId());}
前端出回时间是 LocalDateTime 时间戳模式,DatePicker 必须 valueFormat: 'x'。不要写成 YYYY-MM-DD HH:mm:ss 字符串,选完会变成 NaN。
两张单不要合成一张「用车+还车」。合成之后,人还在半路就能点还车,冲突算法也少了一段还车中。
四、实施时怎么选
|
|
|
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
和会议室、用印外借是同一类「时段资源」。会议室冲突三模式、用印 useMode 是另一篇文章,公车这里只认:审批中 + 待还/还车中。
五、快速体验
在线演示:https://ruoyioffice.com/web/(账号 admin / admin123)
车辆管理 → 车辆台账打开一辆在用车,看座次和保险日期。 用车申请打开一张已通过、待还车的单,看车牌和出回时间。 -
再开一张同车、重叠上午的单,保存应提示时间冲突。 还车申请勾那张待还车的用车单提交。 -
还车通过后,原用车单还车状态应为已还车,下午可以再约。
源码仓库:GitHub:https://github.com/yuqing2026/ruoyi-office | GitCode:https://gitcode.com/zhouzhongyan/ruoyi-office | Gitee:https://gitee.com/yqzy1688/ruoyi-office
常见问题(FAQ)
用车通过了,台账为什么还是「在用」?
台账的 status 是编制,不是借出标记。借出看用车单的待还车。不要在台账上手工改成停用冒充借出。
为什么还车要再走一遍审批?
实际行程、地点、说明要留痕。调度确认车回来了,下午才能再派。驳回还能滚状态。
还车单驳回后能不能再约这辆车的下午?
用车单会回到未生效,不再占「待还车」。但那张用车单自己的时段如果还在、流程还没结束,仍可能挡住重叠。先把用车单处理完。
和会议室冲突算法是不是同一套?
思想相同:区间相交。公车多了一段「已通过但没还」。会议室另有提醒和三种冲突模式,不要把会议室的 cancelByBiz 抄到公车里。
能不能只开用车单、口头还车?
可以凑合一周。第二周一定出现「系统里车还在外面」。还车单就是为了把钥匙挂回挂板。
结语
公务用车要选的是「谁占坑、谁释放」,不是再加一张调度确认流程。用车审的是该不该出,还车审的是车有没有回来,冲突拦在提交。读者能带走的三句:通过才待还车;待还和还车中都占坑;还车驳回必须滚状态。
你们现在第二张重叠的用车单,是提交就红,还是审到一半才发现?评论区说一下。
💡 想要体验 RuoYi Office 的强大功能?
🌐 在线演示:https://ruoyioffice.com/web/(账号 admin / admin123)
📦 源码仓库:GitHub:https://github.com/yuqing2026/ruoyi-office | GitCode:https://gitcode.com/zhouzhongyan/ruoyi-office | Gitee:https://gitee.com/yqzy1688/ruoyi-office
💬 技术咨询:添加微信 17156169080,备注「RuoYi Office」
⭐ 如果觉得不错,请给个 Star 支持一下!

