3 天以前 b852254d90e7d1955db31db154193ec8ee84d8b3
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
145
146
147
package cn.iocoder.yudao.module.mes.service.wm.stocktaking.task;
 
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.mes.controller.admin.wm.stocktaking.task.vo.MesWmStockTakingTaskPageReqVO;
import cn.iocoder.yudao.module.mes.controller.admin.wm.stocktaking.task.vo.MesWmStockTakingTaskSaveReqVO;
import cn.iocoder.yudao.module.mes.dal.dataobject.wm.stocktaking.task.MesWmStockTakingTaskDO;
import jakarta.validation.Valid;
 
import java.util.List;
import java.util.Map;
 
/**
 * MES 盘点任务 Service 接口
 *
 * @author 超级管理员
 */
public interface MesWmStockTakingTaskService {
 
    /**
     * 盘点结果审批 BPM 分类编码
     */
    String APPROVE_CATEGORY_CODE = "stock_taking_result_approve";
 
    /**
     * 创建盘点任务
     *
     * @param createReqVO 创建信息
     * @return 盘点任务编号
     */
    Long createStockTakingTask(@Valid MesWmStockTakingTaskSaveReqVO createReqVO);
 
    /**
     * 更新盘点任务
     *
     * @param updateReqVO 更新信息
     */
    void updateStockTakingTask(@Valid MesWmStockTakingTaskSaveReqVO updateReqVO);
 
    /**
     * 删除盘点任务
     *
     * @param id 盘点任务编号
     */
    void deleteStockTakingTask(Long id);
 
    /**
     * 开始盘点(草稿 → 盘点中)
     *
     * <p>仅草稿状态可执行:校验任务行非空后置为盘点中,若开启冻结则冻结任务行的库存。
     * 盘点中可录入实盘数量、Excel 导入实盘。
     *
     * @param id 盘点任务编号
     */
    void submitStockTakingTask(Long id);
 
    /**
     * 提交盘点结果审批(盘点中 → 盘点中 + 创建 BPM 流程实例)
     *
     * <p>录入/导入完成后提交结果审批:校验盘点中存在且至少一条盘点结果、且结果审批未提交过,
     * 创建 BPM 流程实例并回写 {@code processInstanceId}。审批通过后才执行差异核销并置为已完成。
     *
     * @param id                  盘点任务编号
     * @param processDefinitionKey BPM 流程定义 Key
     */
    void submitStockTakingResultApproval(Long id, String processDefinitionKey);
 
    /**
     * 更新盘点任务结果审批状态(BPM 审批回调)
     *
     * <p>仅盘点中状态处理:
     * <ul>
     *     <li>审批通过:解冻库存,同事务自动核销盘盈/盘亏并置为已完成;</li>
     *     <li>审批驳回:清空流程实例编号,任务保持盘点中,可修改实盘后重新提交;</li>
     *     <li>审批取消:解冻库存并置为已取消。</li>
     * </ul>
     *
     * @param id        盘点任务编号
     * @param bpmResult BPM 审批结果(通过/驳回/取消)
     */
    void updateStockTakingTaskResultAuditStatus(Long id, Integer bpmResult);
 
    /**
     * 获取盘点结果审批可用的 BPM 流程定义列表
     *
     * @return 流程定义列表(id/key/name)
     */
    List<Map<String, Object>> getStockTakingTaskResultApprovalProcessDefinitionList();
 
    /**
     * 取消盘点任务
     *
     * @param id 盘点任务编号
     */
    void cancelStockTakingTask(Long id);
 
    /**
     * 由盘点方案按周期自动生成盘点任务
     *
     * <p>供后台定时任务调用:基于已启用且开启自动生成的方案创建草稿盘点任务并生成明细行,
     * 任务编码自动生成。创建成功后回写方案上次自动生成时间,避免同一周期重复生成。
     *
     * @param planId 盘点方案编号
     * @return 盘点任务编号
     */
    Long createStockTakingTaskFromPlan(Long planId);
 
    /**
     * 获得盘点任务
     *
     * @param id 盘点任务编号
     * @return 盘点任务
     */
    MesWmStockTakingTaskDO getStockTakingTask(Long id);
 
    /**
     * 校验盘点任务是否存在
     *
     * @param id 盘点任务编号
     * @return 盘点任务
     */
    MesWmStockTakingTaskDO validateStockTakingTaskExists(Long id);
 
    /**
     * 校验盘点任务存在,并且处于【准备中】状态
     *
     * @param id 盘点任务编号
     * @return 盘点任务
     */
    MesWmStockTakingTaskDO validateStockTakingTaskExistsAndPrepare(Long id);
 
    /**
     * 校验盘点任务存在,并且处于【盘点中】状态
     *
     * @param id 盘点任务编号
     * @return 盘点任务
     */
    MesWmStockTakingTaskDO validateStockTakingTaskExistsAndApproving(Long id);
 
    /**
     * 分页查询盘点任务
     *
     * @param pageReqVO 分页查询条件
     * @return 盘点任务分页结果
     */
    PageResult<MesWmStockTakingTaskDO> getStockTakingTaskPage(MesWmStockTakingTaskPageReqVO pageReqVO);
 
}