2026-06-29 940c8481d2fdcf51341db4ccd6fd6fcc2d43debb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
package cn.iocoder.yudao.module.wms.api.stock;
 
import cn.iocoder.yudao.module.wms.api.stock.dto.*;
 
import java.math.BigDecimal;
import java.util.List;
import java.util.Map;
 
/**
 * WMS 库存服务 API 接口
 *
 * 提供给 ERP、MES 等模块调用,实现跨模块库存操作
 * 使用统一的物料ID(md_item.id)
 *
 * @author 芋道源码
 */
public interface WmsStockApi {
 
    // ==================== 库存记录操作 ====================
 
    /**
     * 创建库存记录(入库)
     *
     * @param dto 库存记录创建请求
     * @return 库存记录ID
     */
    Long createStockRecord(StockRecordCreateDTO dto);
 
    /**
     * 批量创建库存记录
     *
     * @param dtoList 库存记录创建请求列表
     * @return 库存记录ID列表
     */
    List<Long> createStockRecordBatch(List<StockRecordCreateDTO> dtoList);
 
    // ==================== 库存锁定 ====================
 
    /**
     * 锁定库存
     *
     * @param itemId 物料ID
     * @param warehouseId 仓库ID
     * @param quantity 锁定数量
     * @return 锁定单号
     */
    String lockStock(Long itemId, Long warehouseId, BigDecimal quantity);
 
    /**
     * 批量锁定库存
     *
     * @param itemId 物料ID
     * @param warehouseId 仓库ID
     * @param quantity 锁定数量
     * @param bizType 业务类型
     * @param bizId 业务单据ID
     * @return 锁定单号
     */
    String lockStockWithBiz(Long itemId, Long warehouseId, BigDecimal quantity, Integer bizType, Long bizId);
 
    /**
     * 解锁库存
     *
     * @param lockNo 锁定单号
     */
    void unlockStock(String lockNo);
 
    // ==================== 库存查询 ====================
 
    /**
     * 查询可用库存
     *
     * @param itemId 物料ID
     * @param warehouseId 仓库ID
     * @return 可用库存数量
     */
    BigDecimal getAvailableStock(Long itemId, Long warehouseId);
 
    /**
     * 批量查询库存
     *
     * @param itemIds 物料ID列表
     * @param warehouseId 仓库ID
     * @return 物料ID -> 可用库存数量
     */
    Map<Long, BigDecimal> getAvailableStockMap(List<Long> itemIds, Long warehouseId);
 
    /**
     * 查询所有仓库的库存
     *
     * @param itemId 物料ID
     * @return 仓库ID -> 可用库存数量
     */
    Map<Long, BigDecimal> getAvailableStockByWarehouse(Long itemId);
 
    // ==================== 库存校验 ====================
 
    /**
     * 校验库存充足
     *
     * @param itemId 物料ID
     * @param warehouseId 仓库ID
     * @param quantity 需求数量
     * @return true=充足, false=不足
     */
    boolean validateStockEnough(Long itemId, Long warehouseId, BigDecimal quantity);
 
    /**
     * 校验库存充足(不足时抛出异常)
     *
     * @param itemId 物料ID
     * @param warehouseId 仓库ID
     * @param quantity 需求数量
     * @throws cn.iocoder.yudao.framework.common.exception.ServiceException 库存不足时抛出异常
     */
    void checkStockEnough(Long itemId, Long warehouseId, BigDecimal quantity);
 
    // ==================== 库存扣减 ====================
 
    /**
     * 扣减库存(出库)
     *
     * @param itemId 物料ID
     * @param warehouseId 仓库ID
     * @param quantity 扣减数量
     * @param bizType 业务类型
     * @param bizId 业务单据ID
     * @param bizNo 业务单据号
     */
    void deductStock(Long itemId, Long warehouseId, BigDecimal quantity, Integer bizType, Long bizId, String bizNo);
 
    /**
     * 增加库存(入库)
     *
     * @param itemId 物料ID
     * @param warehouseId 仓库ID
     * @param quantity 增加数量
     * @param bizType 业务类型
     * @param bizId 业务单据ID
     * @param bizNo 业务单据号
     */
    void addStock(Long itemId, Long warehouseId, BigDecimal quantity, Integer bizType, Long bizId, String bizNo);
 
}