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 用管理类型把它们分开:申请只占流程,发放才动库存,归还和转固走各自通道。
▲ 左:笔、投影、显示器、订书机一眼能认。右:一种用品一行,绿框审批不扣库存,蓝发完即结,橙待还,红转固
引言:用品乱,多半是类型选错
行政最烦的不是「没有申请单」,而是发完不知道还要不要回来。
|
|
|
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
本文只讲产品怎么用、流程怎么走、实现怎么串。不重复旧文「3 张表口号」,改讲三分治选哪一种、发放归还转固各在哪一页。
菜单:OA 办公 → 办公用品管理。流程 key:oa_supply_apply_bill。
一、先认三种东西,再开申请
台账页 /oa/supply/supplyinfo 建档时选 managementType:
|
|
|
|
|
|---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
选错类型,后面所有按钮都会「看起来坏了」。投影仪建成消耗品,归还页永远没有它。
入库走台账「入库」弹窗,只加 oa_supply.stockQuantity。入库不等于发给员工。
二、业务怎么走:一页申请,两页办结
员工走 /oa/supply/supply-apply-info 填领用申请:用途、明细行、选品。提交启动 Flowable,明细先变成「申请中」,库存不动。
行政在 /oa/supply/supplyrecord 办两件事:
-
筛「待领用」→ 打开发放,填实发数量。 -
筛「已领用待归还」→ 点归还,可分次还,还满才「已归还」。
资产品转固不在发放页。回到台账,对还在库的资产品点「转固」,选资产分类,生成资产卡片后再扣用品库存。
▲ /oa/supply/supply-apply-info。一行一个用品,类型是台账带过来的,申请页不要改成另一种
▲ /oa/supply/supplyrecord。剪刀是借用品,发完进待归还。本次归还数量可分次,还满才加回库存
▲ /oa/supply/supplyinfo 点转固。会议显示器当前库存 2 台,选资产分类后生成卡片并扣用品库存,不是第二张领用单
三、实现怎么串:表、时序、代码放一起看
三张表只干三件事:oa_supply 是库存真相,oa_supply_apply_bill 是审批壳,oa_supply_apply_item 是每一行的状态机。
|
|
|
|
|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
一次完整消耗品发放,时间顺序是:
-
员工 submit→ 写主单明细 →BpmProcessInstanceApi用 keyoa_supply_apply_bill。 -
审批通过 → SupplyApplyBillServiceImpl.updateProcessStatus把该单明细批量改成待领用。 -
行政 issueItem→ 先deductStock,再按类型分终态。 -
拒绝/撤回 → 明细状态清空,发放池看不到,库存从未动过。
// 审批通过才解锁发放;驳回清空,避免「已扣库存的废单」public void updateProcessStatus(String businessKey, Integer status) {Long id = Long.parseLong(businessKey);SupplyApplyBillDO updateObj = new SupplyApplyBillDO();updateObj.setId(id);updateObj.setProcessStatus(status);supplyApplyBillMapper.updateById(updateObj);if (APPROVE.getStatus().equals(status)) {supplyApplyItemMapper.updateItemStatusByBillId(id, SupplyItemStatusEnum.PENDING_ISSUE.getStatus());} else if (REJECT.getStatus().equals(status) || CANCEL.getStatus().equals(status)|| RETURN.getStatus().equals(status) || WITHDRAW.getStatus().equals(status)) {supplyApplyItemMapper.updateItemStatusByBillId(id, null);}}
发放是库存和状态的同一事务。消耗品走 ISSUED,其余走 ISSUED_PENDING_RETURN。不要在审批回调里扣库存——驳回无法原路加回。
public void issueItem(SupplyApplyItemIssueReqVO issueReqVO) {SupplyApplyItemDO item = supplyApplyItemMapper.selectById(issueReqVO.getId());if (!SupplyItemStatusEnum.PENDING_ISSUE.getStatus().equals(item.getItemStatus())) {throw exception(SUPPLY_ITEM_STATUS_INVALID);}supplyService.deductStock(item.getSupplyId(), issueReqVO.getIssueQuantity());Integer newStatus = (item.getManagementType() != null && item.getManagementType() == 1)? SupplyItemStatusEnum.ISSUED.getStatus(): SupplyItemStatusEnum.ISSUED_PENDING_RETURN.getStatus();// 回写实发数量、发放人、时间}
归还按累计数量:还一部分仍待归还,还满才 RETURNED,同时 restoreStock。超量直接拒绝。
转固是第三条腿,不读领用明细。全功能版 SupplyAssetConvertClient.batchCreate 调资产卡片 API;OA 裁剪版是空实现,按钮会提示模块未启用。
public List<Long> convertToAsset(SupplyConvertAssetReqVO convertReqVO) {if (!MANAGEMENT_TYPE_ASSET.equals(supply.getManagementType())) {throw exception(SUPPLY_CONVERT_TYPE_INVALID);}List<Long> cardIds = supplyAssetConvertClient.batchCreate(buildConvertCommand(supply, convertReqVO));// 用品库存 −N,convertedQuantity +N,实物改由资产台账管return cardIds;}
前端三页不要合成一页:申请是员工的,发放是行政的,转固是资产会计的。权限和菜单本来就该分开。
四、实施时怎么选
|
|
|
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
batchIssueItems
|
历史用品已经建成消耗品、又想追还:只能改台账类型后再新建申请,旧明细状态不会自动回退。
五、快速体验
在线演示:https://ruoyioffice.com/web/(账号 admin / admin123)
OA 办公 → 办公用品管理 → 用品台账,看三种类型库存。 领用申请新建一张,明细混一行消耗、一行借用。 -
走完审批后打开 领用发放,分别发放,看终态差在哪。 -
对借用行点归还。 -
回到台账找资产品,打开转固弹窗(演示环境有资产模块才会成功)。
源码仓库:GitHub:https://github.com/yuqing2026/ruoyi-office | GitCode:https://gitcode.com/zhouzhongyan/ruoyi-office | Gitee:https://gitee.com/yqzy1688/ruoyi-office
常见问题(FAQ)
审批通过了为什么发放页没有行?
看明细 itemStatus 是不是待领用。驳回/撤回会清空状态。也检查菜单数据权限,不是看错人的单。
转固会不会把已借出的那台也转走?
转固扣的是当前库存,不是在借数量。已借出的实物不在库,转不了。先归还再转。
消耗品能不能部分发放?
可以,issueQuantity 可以小于申请数。剩下的行仍待领用,或你们约定整行一次发完。库存按实发扣。
和固定资产领用单是不是一回事?
不是。用品转固之后,再领用走资产模块的领用/借用单。用品发放页不再管那张卡。
OA 商业版没有资产模块怎么办?
转固客户端是空实现,会提示未启用。借用品闭环不受影响。
结语
办公用品要选的是类型,不是再加一张「归还申请流程」。申请审的是该不该发,发放改库存,归还只对借用/资产品,转固只对还在库的资产品。读者能带走的三句:审批不扣库存;类型决定终态;转固是资产交接不是第二张领用。
你们现在投影仪是消耗品还是借用品?评论区说一下发放后能不能在待归还里看到。
💡 想要体验 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 支持一下!

