仓储管理系统参考手册
843 字
4 分钟
仓储管理系统参考手册
业务简介

库存管理系统(Warehouse Management System)主要是和订单、物流等服务交互,逻辑也一般十分复杂,也需要有专门的后台管理系统来管理各个仓库中的商品库存,在企业中一般是单独开发,常常对于我们开发商城其他业务的人来说,是一个类似于黑盒的存在。在我们CSMALL商城中,也不需要关心它的实现细节,只需要调用接口即可。
WMS主要逻辑如下:
-
用户点击提交订单,订单服务需要调用库存服务接口,查看订单中的商品是否有库存
注意:在本商城中,提交订单的时候,不扣减库存,等用户付款完成才锁定库存,等待发货之后,用户收货了才会最终扣减库存
-
在用户订单支付完成之后,需要调用库存管理系统的接口扣减库存(锁定库存)
-
在库存管理系统扣减库存的过程中,需要判断这笔订单中的商品是否都存在在同一个仓库中(内部逻辑)
- 如果在同一个仓库中,那么直接扣减对应商品的库存即可
- 如果不在同一个仓库中,那么就意味着这笔订单需要从不同的仓库发货,物流信息等也会不一样,那么就需要对订单进行拆分,通常我们业内叫做拆单。如何拆单呢?本商场的逻辑是按照仓库ID进行拆单,在这里需要调用订单服务的接口,把一个订单按照仓库ID拆分成多个订单
库存管理系统搭建
直接把整个工程作为模块引入IDEA即可,只需要更改一下父工程的pom.xml文件。


数据库简介

仓库信息表:主要是存储各个仓储信息,比如北京大兴仓、武汉江夏仓、深圳龙岗仓。表示这个仓库位置在哪里。
库存表:表示各个商品库存多少,关联仓库ID,进而表示这个商品在哪个仓库
stock:库存数
stock_locked:当前已经被锁定的库存数
库存工作单:关联订单,记录订单扣减库存的信息
库存工作单明细:关联库存工作单,记录订单扣减库存的商品详情。
接口说明
查询库存
// 参数说明:// skuId: 商品Id// num: 商品数量@GetMapping("/api/ware/inner/hasStock/{skuId}/{num}")public Result hasStock(@PathVariable Long skuId, @PathVariable Integer num){ Boolean ret = wareService.hasStock(skuId,num); if (ret) return Result.ok(); return Result.fail();}扣减库存
// 参数说明:// orderId: 订单Id@PostMapping("//inner/decreaseStock/{orderId}")public Result decreaseStock(@PathVariable(value = "orderId") Long orderId){ wareService.decreaseStock(orderId); return Result.ok();}拆单接口
拆单是由库存服务调用订单服务,有订单服务拆单,所以需要由订单服务来提供,接口示例:
// 参数说明// orderId: 订单Id// List<WareSkuDTO>:仓库和商品ids映射,可以理解为在这次订单中,这些商品分别属于哪个仓库
// 返回值说明:// List<WareOrderTaskDTO>, 表示订单被拆分之后的那些子订单对应的库存工作单列表,每一个子订单对应一个库存工作单
@PostMapping("/api/order/inner/orderSplit/{orderId}")List<WareOrderTaskDTO> orderSplit(@PathVariable(value = "orderId") String orderId, @RequestBody List<WareSkuDTO> wareSkuDTOList){
return null;
}public class WareSkuDTO {
// 仓库id String wareId;
// 商品id列表 List<String> skuIds;
}文章分享
如果这篇文章对你有帮助,欢迎分享给更多人!