liyong
4 天以前 be5783c8a7e13bbc76d33c95643d75779cce21db
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
package cn.iocoder.yudao.module.mes.service.pro.feedback;
 
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.mes.controller.admin.pro.feedback.vo.MesProFeedbackPageReqVO;
import cn.iocoder.yudao.module.mes.controller.admin.pro.feedback.vo.MesProFeedbackSaveReqVO;
import cn.iocoder.yudao.module.mes.dal.dataobject.pro.feedback.MesProFeedbackDO;
import jakarta.validation.Valid;
 
import java.math.BigDecimal;
import java.util.Collection;
import java.util.List;
 
/**
 * MES 生产报工 Service 接口
 *
 * @author 芋道源码
 */
public interface MesProFeedbackService {
 
    /**
     * 创建生产报工(草稿)
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createFeedback(@Valid MesProFeedbackSaveReqVO createReqVO);
 
    /**
     * 修改生产报工
     *
     * @param updateReqVO 更新信息
     */
    void updateFeedback(@Valid MesProFeedbackSaveReqVO updateReqVO);
 
    /**
     * 删除生产报工(仅草稿)
     *
     * @param id 编号
     */
    void deleteFeedback(Long id);
 
    /**
     * 获得生产报工
     *
     * @param id 编号
     * @return 生产报工
     */
    MesProFeedbackDO getFeedback(Long id);
 
    /**
     * 校验生产报工存在
     *
     * @param id 编号
     * @return 生产报工
     */
    MesProFeedbackDO validateFeedbackExists(Long id);
 
    /**
     * 获得生产报工分页
     *
     * @param pageReqVO 分页查询
     * @return 生产报工分页
     */
    PageResult<MesProFeedbackDO> getFeedbackPage(MesProFeedbackPageReqVO pageReqVO);
 
    /**
     * 按任务编号列表批量获得报工记录(用于任务台账聚合在途/已审批报工量)
     *
     * @param taskIds 任务编号列表
     * @return 报工记录列表
     */
    List<MesProFeedbackDO> getFeedbackListByTaskIds(Collection<Long> taskIds);
 
    /**
     * 按任务编号获得报工记录列表(报工历史,含草稿/审批中/待检验/已完成)
     *
     * @param taskId 任务编号
     * @return 报工记录列表
     */
    List<MesProFeedbackDO> getFeedbackListByTaskId(Long taskId);
 
    /**
     * 提交报工(草稿 → 审批中)
     *
     * @param id 编号
     */
    void submitFeedback(Long id);
 
    /**
     * 驳回报工(审批中 → 草稿)
     *
     * @param id 编号
     */
    void rejectFeedback(Long id);
 
    /**
     * 审批通过报工单,执行生产入库流程
     *
     * <p>整体流程如下:
     * <ol>
     *   <li>校验报工单状态和数量</li>
     *   <li>生成物料消耗单,扣减线边库物料</li>
     *   <li>根据工序配置(关键工序 & 是否需要检验)分情况处理:
     *     <ul>
     *       <li><b>关键工序 + 需要检验</b>:生成产出单(质量状态=待检验),报工单状态 → 待检验,等待质检完成回调</li>
     *       <li><b>关键工序 + 无需检验</b>:生成产出单(按合格/不合格拆行),执行产品入库,更新任务/工单已生产数量,报工单状态 → 已完成</li>
     *       <li><b>非关键工序</b>:不生成产出单,不更新任务/工单数量,报工单状态 → 已完成</li>
     *     </ul>
     *   </li>
     * </ol>
     *
     * @param id 报工单编号
     * @return true=已完成, false=待检验(需等质检回调)
     */
    boolean approveFeedback(Long id);
 
    /**
     * IPQC 完成后回调:完成报工单并更新任务/工单进度
     *
     * <p>由 IPQC 检验完成时调用,将报工单状态从待检验改为已完成,
     * 并根据检验结果回写合格/不合格/废品数量,同时更新任务/工单的已生产数量。
     *
     * @param feedbackId          报工记录 ID
     * @param sourceLineId        来源产出行 ID(用于直接定位待检行)
     * @param qualifiedQty        合格品数量
     * @param unqualifiedQty      不合格品数量
     * @param laborScrapQty       工废数量
     * @param materialScrapQty    料废数量
     * @param otherScrapQty       其他废品数量
     */
    void updateProFeedbackWhenIpqcFinish(Long feedbackId, Long sourceLineId,
                                         BigDecimal qualifiedQty, BigDecimal unqualifiedQty,
                                         BigDecimal laborScrapQty, BigDecimal materialScrapQty, BigDecimal otherScrapQty);
 
}