gaoluyang
2026-10-30 cbadfd8e691ab335965202a984db16e55ac8e42c
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
package cn.iocoder.yudao.module.mes.service.wm.productissue;
 
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.mes.controller.admin.wm.productissue.vo.MesWmProductIssuePageReqVO;
import cn.iocoder.yudao.module.mes.controller.admin.wm.productissue.vo.MesWmProductIssueSaveReqVO;
import cn.iocoder.yudao.module.mes.controller.admin.wm.productissue.vo.MesWmProductIssueSupplementReqVO;
import cn.iocoder.yudao.module.mes.dal.dataobject.wm.productissue.MesWmProductIssueDO;
import jakarta.validation.Valid;
 
import java.util.List;
 
/**
 * MES 领料出库单 Service 接口
 */
public interface MesWmProductIssueService {
 
    /**
     * 创建领料出库单
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createProductIssue(@Valid MesWmProductIssueSaveReqVO createReqVO);
 
    /**
     * 根据生产工单生成领料任务(草稿)
     *
     * <p>需求 5.2③:按工单 BOM 物料清单 × 工单计划数量算出应领数量,
     * 扣除该工单下已领(未取消)数量后,剩余部分生成一张草稿领料出库单,
     * 后续走 提交 → 拣货 → 完成(完成时扣减原辅料库存)。</p>
     *
     * @param workOrderId 生产工单编号
     * @return 领料出库单编号
     */
    Long generateByWorkOrder(Long workOrderId);
 
    /**
     * 创建补领辅料单(草稿)
     *
     * <p>补领与正常领料走同一条流转:提交 → 拣货 → 完成(完成时扣减库存)。
     * 补领单的 issueType=2 并记录补领原因,便于在领料列表中筛选与追溯。</p>
     *
     * @param reqVO 补领信息
     * @return 领料单编号
     */
    Long createSupplementIssue(@Valid MesWmProductIssueSupplementReqVO reqVO);
 
    /**
     * 修改领料出库单
     *
     * @param updateReqVO 修改信息
     */
    void updateProductIssue(@Valid MesWmProductIssueSaveReqVO updateReqVO);
 
    /**
     * 删除领料出库单
     *
     * @param id 编号
     */
    void deleteProductIssue(Long id);
 
    /**
     * 获得领料出库单
     *
     * @param id 编号
     * @return 领料出库单
     */
    MesWmProductIssueDO getProductIssue(Long id);
 
    /**
     * 获得领料出库单分页
     *
     * @param pageReqVO 分页参数
     * @return 领料出库单分页
     */
    PageResult<MesWmProductIssueDO> getProductIssuePage(MesWmProductIssuePageReqVO pageReqVO);
 
    /**
     * 校验领料出库单是否存在
     *
     * @param id 编号
     * @return 领料出库单
     */
    MesWmProductIssueDO validateProductIssueExists(Long id);
 
    /**
     * 校验领料出库单存在且为准备中状态
     *
     * @param id 编号
     * @return 领料出库单
     */
    MesWmProductIssueDO validateProductIssueExistsAndPrepare(Long id);
 
    /**
     * 提交领料出库单(草稿 → 待拣货)
     *
     * @param id 编号
     */
    void submitProductIssue(Long id);
 
    /**
     * 执行拣货(待拣货 → 待执行领出)
     *
     * @param id 编号
     */
    void stockProductIssue(Long id);
 
    /**
     * 执行领出/出库(待执行领出 → 已完成),更新库存台账
     *
     * @param id 编号
     */
    void finishProductIssue(Long id);
 
    /**
     * 取消领料出库单(任意非已完成/已取消状态 → 已取消)
     *
     * @param id 编号
     */
    void cancelProductIssue(Long id);
 
    /**
     * 校验领料出库单的数量:每行明细数量之和是否等于行领料数量
     *
     * @param id 编号
     * @return 是否全部一致
     */
    Boolean checkProductIssueQuantity(Long id);
 
    /**
     * 获取指定工单下已完成的领料单列表
     *
     * @param workOrderId 生产工单ID
     * @return 已完成的领料单列表
     */
    List<MesWmProductIssueDO> getFinishedIssuesByWorkOrderId(Long workOrderId);
 
}