大数跨境

SpringBoot3+Vue3+Flowable 公务用车:申请占坑、还车释放、撞时段怎么拦

SpringBoot3+Vue3+Flowable 公务用车:申请占坑、还车释放、撞时段怎么拦 企业软件源码
2026-09-11
3
导读:用车单一过,这辆车这个时段就被占住;还车单再过,钥匙才能挂回去。RuoYi Office 把用车和还车拆成两张 Flowable 单:审批中和待还车都占坑,第二张撞时段提交当场拦,还车驳回会把用车单滚

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_billoa_car_return_bill


一、先认三张东西,再开单

页面
路由
干什么
车辆台账
/oa/car/car-info
车牌、座位数、在用/停用。停用的车选不出来
用车申请
/oa/car/car-apply-info
选车、出车/回车时间、事由。提交走 Flowable
还车申请
/oa/car/car-return-info
勾未还的用车单,填实际时间、地点、还车说明

用车单多一个 returnStatus,和流程状态不是一回事:

returnStatus
含义
谁改
0 未生效
还在审,或还车被驳回滚回来
提交前 / 还车驳回
1 待还车
用车单通过,车这个时段被占住
用车审批通过
2 还车中
还车单已提交,还没过
提交还车单
3 已还车
还车单通过,钥匙可再派
还车审批通过

选车时看到的「能用」,是台账状态。真正能不能约这个上午,看时间槽有没有被待还车或审批中的单占住。


二、业务怎么走:先占坑,再还钥匙

  1. 员工在 /oa/car/car-apply-info 选车、填出车和预计回车时间。提交启动 oa_car_apply_bill
  2. 保存/提交时做时段重叠校验。审批中的单、已通过且待还/还车中的单,只要和本单时间相交,直接 CAR_TIME_CONFLICT
  3. 用车审批通过,只改两件事:processStatus=通过returnStatus=待还车不会改台账里的车辆状态字段。
  4. 司机回来,开 /oa/car/car-return-info,勾这张用车单,填实际出回时间和地点。提交 oa_car_return_bill,用车单改成还车中。
  5. 还车通过 → 用车单改已还车。还车驳回/取消 → 用车单滚回未生效,下午不能再当成「已经还了」。

▲ /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 是释放壳。

关键字段
谁改
oa_car
carNo、status、seatNum
台账维护,审批不改
oa_car_apply_bill
processStatus、returnStatus、goTime、returnTime、carId
提交、用车回调、还车回调
oa_car_return_bill
processStatus、applyBill、实际出回时间
提交还车、还车回调

一次完整出车,时间顺序是:

  1. submit
     用车单 → validateTimeConflict → 启 oa_car_apply_bill
  2. 通过 → returnStatus=待还车。这张单开始挡住重叠时段。
  3. submit
     还车单 → 校验用车单还没还 → 启 oa_car_return_bill → markAsReturning
  4. 还车通过 → 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

两张单不要合成一张「用车+还车」。合成之后,人还在半路就能点还车,冲突算法也少了一段还车中。


四、实施时怎么选

你想要的结果
怎么配
同一上午绝不双派
提交时校验,不要把冲突放到审批意见里
车坏了先别派
台账改停用,选车弹窗过滤
实际比预计晚回
还车单填实际时间,不要去改已经通过的用车单时段
还车审不过
让流程驳回,系统会滚 returnStatus,不要手工改库
外勤自驾
照样走用车+还车,不要另开一张「借车确认」

和会议室、用印外借是同一类「时段资源」。会议室冲突三模式、用印 useMode 是另一篇文章,公车这里只认:审批中 + 待还/还车中。


五、快速体验

在线演示:https://ruoyioffice.com/web/(账号 admin / admin123)

  1. 车辆管理 → 车辆台账
     打开一辆在用车,看座次和保险日期。
  2. 用车申请
     打开一张已通过、待还车的单,看车牌和出回时间。
  3. 再开一张同车、重叠上午的单,保存应提示时间冲突。
  4. 还车申请
     勾那张待还车的用车单提交。
  5. 还车通过后,原用车单还车状态应为已还车,下午可以再约。

源码仓库: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 支持一下!

【声明】内容源于网络
0
0
企业软件源码
RuoyiOffice 是一套基于 Spring Boot + Vue3 +Uniapp 的企业一体化管理平台,集 OA、CRM、ERP、工作流、HR、资产、合同、项目、AI应用等业务于一体,帮助企业用一个系统协同管理多类核心业务。
内容 122
粉丝 0
企业软件源码 RuoyiOffice 是一套基于 Spring Boot + Vue3 +Uniapp 的企业一体化管理平台,集 OA、CRM、ERP、工作流、HR、资产、合同、项目、AI应用等业务于一体,帮助企业用一个系统协同管理多类核心业务。
总阅读1.4k
粉丝0
内容122