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 三张流程、一张明细:审批通过才写使用人,归还才清空,借用超期单独打标。
▲ 闲置 → 提交占坑 → 审批写使用人 → 借用待还 → 归还释放 → 再闲置。领用停在使用中,借用才走完闭环
引言:卡片乱,多半是三种单揉成了一种
行政最烦的不是「没有领用单」,而是发出去的东西卡片对不上人。
|
|
|
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
本文只讲领用、借用、归还怎么串。入库建卡、调拨、维修、报废、盘点差异是别的单,不在这里展开。
菜单:资产管理 → 领用借用 / 归还。流程 key:asset_allocate_receive、asset_allocate_borrow、asset_allocate_return。
一、产品能力:三种单,一张卡
台账 /asset/card 上一物一卡。assetStatus 闲置才能领或借;通过后变成使用中,并写上使用人、使用部门。
|
|
|
|
|---|---|---|
|
|
|
|
|
|
|
returnStatus=待归还
|
|
|
|
独立单据 + 独立流程
|
|
|
|
|
|
|
|
|
领用和借用共用详情页 /asset/allocate-info,用 allocateType 1 / 2 区分。归还走 /asset/return-info,不要再塞回领用页当一个按钮「直接还」。
旧接口 returnAllocate 已经禁用:直接改卡会跳过审批和履历。正确入口是借用单上的「生成归还单」,createReturnFromBorrow 带出原明细。
二、业务怎么走:占坑、待还、释放
1. 领用:闲置 → 使用中
员工在 /asset/allocate-info 选闲置卡,提交 asset_allocate_receive。审批中卡片被单据锁住,第二张领用单选同一台会在提交时报「资产已被其他单据占用」。
通过后回写使用人。履历记一笔「资产领用」。没有预计归还日,也不出现「生成归还单」。
开发库里 AM702-2026080100001(id=6)已通过,明细是无尘服、键盘、鼠标三台,适合对照「一次领多台、每台数量只能是 1」。
2. 借用:过了还要回来
类型改成借用,预计归还日期必填。流程 key 换成 asset_allocate_borrow。通过后卡片同样使用中,但主单 returnStatus=待归还。详情页这时才露出「生成归还单」。
AM703-2026080200001(id=9)是已通过、待归还的借用,明细是键盘 ZC20260801-0015,底栏有「发起归还」。
3. 归还:再走一遍审批
生成的归还单带 sourceAllocateId。提交时校验:来源必须是已通过的借用、尚未还清、没有第二张在途归还。卡片必须已经是使用中。
通过后:卡片改闲置、使用人清空、履历记归还;来源借用单改 已归还 并写实际归还日。AM309-2026080200002(id=8)就是这台键盘的归还通过单。
▲ /asset/allocate-info?id=9。类型是借用,预计归还日在,审批通过后才能生成归还单
▲ /asset/return-info?id=8。独立单据、独立流程,通过后才释放卡片
▲ /asset/card-info?id=60 MOCK-CS-010 投影仪,状态使用中。领用/借用通过后使用人写在这张卡上,不是写在申请单里了事
三、设计怎么落地
设计思路
|
|
|
|
|---|---|---|
|
|
asset_allocate
allocateType
|
|
|
|
|
|
|
|
只在审批通过 |
|
|
|
|
|
|
|
AssetBillLockService
|
|
卡片是真相。单据是「谁申请改这张卡」。归还单用 source_allocate_id 找到原借用,避免还错人。
提交时先锁再启流程。通过回调才写卡。数量只允许 1:一物一卡,不能「一行领三台」。
// 提交:借用必须有预计归还日;领借只接受闲置卡public Long submitAllocate(AssetAllocateSaveReqVO saveReqVO) {if (ALLOCATE_TYPE_BORROW.equals(allocateType)&& saveReqVO.getExpectedReturnDate() == null) {throw exception(ASSET_ALLOCATE_EXPECTED_RETURN_REQUIRED);}if (ALLOCATE_TYPE_RETURN.equals(allocateType)) {validateReturnSubmit(saveReqVO);billLockService.assertAssetsAvailable(..., IN_USE, ...);} else {validateAssetsIdle(saveReqVO.getItems());billLockService.assertAssetsAvailable(..., IDLE, ...);}// startProcess:receive / borrow / return 三个 key}
审批通过才占卡或放卡。领用和借用都走 occupyAssetCard,归还走 releaseAssetCard。
private void onAllocateApproved(AssetAllocateDO bill, AssetBillTypeEnum flowBillType) {if (ASSET_ALLOCATE_RETURN.equals(flowBillType)) {items.forEach(item -> releaseAssetCard(fresh, item));// 来源借用单 returnStatus = 已归还return;}items.forEach(item -> occupyAssetCard(fresh, item, flowBillType));if (ASSET_ALLOCATE_BORROW.equals(flowBillType)) {allocateMapper.updateById(new AssetAllocateDO().setId(fresh.getId()).setReturnStatus(RETURN_STATUS_PENDING));}}
占卡写使用人,并记履历。归还把使用人四字段清空,状态回到闲置。
private void occupyAssetCard(AssetAllocateDO bill, AssetAllocateItemDO item,AssetBillTypeEnum flowBillType) {AssetCardDO upd = new AssetCardDO();upd.setId(item.getAssetId());upd.setAssetStatus(IN_USE);upd.setUseUserId(bill.getApplyUserId());upd.setUseUserName(bill.getApplyUserName());upd.setUseDeptId(bill.getApplyDeptId());upd.setUseDeptName(bill.getApplyDeptName());cardMapper.updateById(upd);// createLog:领用=2 / 借用=4}
逾期不靠人盯。assetBorrowOverdueJob 每天扫「借用 + 待还/已逾期 + 预计日 < 今天」,改逾期并按场景码通知借用人。已经逾期的继续提醒,避免只响一次。
前端:领用/借用同一 info,allocateType 决定标题和流程 key;showReturn 只在借用已通过且未还时显示。归还页不允许改成领用。
四、边界与对照
|
|
|
|
|---|---|---|
|
|
onAllocateApproved
|
|
|
|
createReturnFromBorrow |
|
|
|
|
|
|
|
|
|
|
|
|
|
用品发放那套「审批不扣库存、发放才扣」不要套到这里。固定资产没有「库存数量」,只有卡片状态。
五、快速体验
在线演示:https://ruoyioffice.com/web/(账号 admin / admin123)
资产管理 → 资产卡片,找一张闲置卡。 领用借用新建领用,提交审批,通过后回卡片看使用人。 -
再找一张闲置卡做借用,填预计归还日。 -
通过后点「生成归还单」,走 /asset/return-info。 -
归还通过后,卡片应回到闲置、使用人为空。
源码仓库:GitHub:https://github.com/yuqing2026/ruoyi-office | GitCode:https://gitcode.com/zhouzhongyan/ruoyi-office | Gitee:https://gitee.com/yqzy1688/ruoyi-office
常见问题(FAQ)
审批通过了卡片还是闲置?
看流程是不是真的走到通过,以及明细 assetId 是否还在。撤回状态是 10,不会写卡。
为什么领用单上没有「归还」?
领用按长期占用设计。要还,走调拨或另开业务约定;短期外带请改借用。
能两张归还单还同一笔借用吗?
在途归还会被 assertNoActiveReturn 拦住。已还清的借用再生成会报已归还。
和办公用品借用是不是一回事?
不是。用品借的是库存数量,资产借的是卡片。用品转固之后,再领用走本模块。
维修中的电脑能领吗?
不能。提交只接受闲置。维修中、调拨中、报废中都会被状态校验或在途锁挡住。
结语
固定资产要选的是「这台卡以后还回来吗」,不是再做一个万能领用按钮。领用写人,借用记到期,归还单独审,逾期用任务扫。读者能带走的三句:审批通过才改卡;归还是第二张单;同一台不能两单同时占。
你们现在投影仪是领用还是借用?评论区说一下到期有没有人催。
💡 想要体验 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 支持一下!

