liu
13 小时以前 66517edf1de22c8203daa256abffddae43bae704
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
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
package cn.iocoder.yudao.module.mes.service.pro.bagcode;
 
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.mes.controller.admin.pro.bagcode.vo.MesProBagCodeBindBatchReqVO;
import cn.iocoder.yudao.module.mes.controller.admin.pro.bagcode.vo.MesProBagCodeBindReqVO;
import cn.iocoder.yudao.module.mes.controller.admin.pro.bagcode.vo.MesProBagCodeGenerateReqVO;
import cn.iocoder.yudao.module.mes.controller.admin.pro.bagcode.vo.MesProBagCodeGenerateRespVO;
import cn.iocoder.yudao.module.mes.controller.admin.pro.bagcode.vo.MesProBagCodePageReqVO;
import cn.iocoder.yudao.module.mes.controller.admin.pro.bagcode.vo.MesProBagCodeRawGenerateReqVO;
import cn.iocoder.yudao.module.mes.controller.admin.pro.bagcode.vo.MesProBagCodeReplaceReqVO;
import cn.iocoder.yudao.module.mes.controller.admin.pro.bagcode.vo.MesProBagCodeReplaceRespVO;
import cn.iocoder.yudao.module.mes.dal.dataobject.pro.bagcode.MesProBagCodeDO;
import jakarta.validation.Valid;
 
import java.util.Collection;
import java.util.List;
 
/**
 * MES 袋码赋码(一袋一码)Service 接口
 * <p>
 * 根据批次信息自动生成唯一二维码数据包,支持批量导出交付印刷,满足唯一性、可识别性、可追溯性要求。
 *
 * @author 超级管理员
 */
public interface MesProBagCodeService {
 
    /**
     * 生成袋码数据包(码值 = 批次号-袋序号),并回写批次袋码数量
     *
     * @param generateReqVO 生成信息
     * @return 生成组 UUID(标记同一次生成的数据包)
     */
    MesProBagCodeGenerateRespVO generateBagCodes(@Valid MesProBagCodeGenerateReqVO generateReqVO);
 
    /**
     * 生成原始袋码:仅选品种+袋码数量,不校验计量单位类型、不生成托盘;
     * 袋码带品种冗余,后续可正常录入批次/绑定托盘
     *
     * @param rawGenerateReqVO 生成信息
     * @return 生成组 UUID 与数量(type/perPallet/palletIds 为空)
     */
    MesProBagCodeGenerateRespVO generateRawBagCodes(@Valid MesProBagCodeRawGenerateReqVO rawGenerateReqVO);
 
    void bindBatch(@Valid MesProBagCodeBindBatchReqVO bindReqVO);
 
    /**
     * 作废破损袋码并在原批次生成等量替换袋码
     */
    MesProBagCodeReplaceRespVO replaceBagCodes(@Valid MesProBagCodeReplaceReqVO replaceReqVO);
 
    /**
     * 删除生成组(仅"已生成"状态且未绑定托盘的袋码允许删除)
     *
     * @param uuid 生成组 UUID
     */
    void deleteBagCodesByUuid(String uuid);
 
    /**
     * 袋码绑定托盘(需同一批次、未绑定过,且不超过托盘可装袋数)
     *
     * @param bindReqVO 绑定信息
     */
    void bindPallet(@Valid MesProBagCodeBindReqVO bindReqVO);
 
    /**
     * 袋码解绑托盘
     *
     * @param bindReqVO 解绑信息
     */
    void unbindPallet(@Valid MesProBagCodeBindReqVO bindReqVO);
 
    /**
     * 批量标记袋码为已导出印刷(交付印刷)
     *
     * @param ids 袋码编号列表
     */
    void markBagCodesPrinted(Collection<Long> ids);
 
    /**
     * 获得袋码
     *
     * @param id 编号
     * @return 袋码
     */
    MesProBagCodeDO getBagCode(Long id);
 
    /**
     * 校验袋码存在
     *
     * @param id 编号
     * @return 袋码
     */
    MesProBagCodeDO validateBagCodeExists(Long id);
 
    /**
     * 根据袋码(二维码内容)查询袋码,用于扫码追溯
     *
     * @param code 袋码
     * @return 袋码,不存在返回 null
     */
    MesProBagCodeDO getBagCodeByCode(String code);
 
    /** 内部查询识别业务码及历史追溯码,不用于公众追溯入口。 */
    MesProBagCodeDO getBagCodeByScanCode(String code);
 
    /** 补生成历史袋码业务码;已有码保持不变,返回新生成数量。 */
    int generateBusinessCodes(List<Long> ids);
 
    /**
     * 查询袋码替换记录
     */
    cn.iocoder.yudao.module.mes.dal.dataobject.pro.bagcode.MesProBagCodeReplaceDO getReplacementByOldBagCodeId(Long oldBagCodeId);
 
    cn.iocoder.yudao.module.mes.dal.dataobject.pro.bagcode.MesProBagCodeReplaceDO getReplacementByNewBagCodeId(Long newBagCodeId);
 
    /**
     * 获得袋码分页
     *
     * @param pageReqVO 分页查询
     * @return 袋码分页
     */
    PageResult<MesProBagCodeDO> getBagCodePage(MesProBagCodePageReqVO pageReqVO);
 
    /**
     * 获得生成组的袋码列表
     *
     * @param uuid 生成组 UUID
     * @return 袋码列表
     */
    List<MesProBagCodeDO> getBagCodeListByUuid(String uuid);
 
    /**
     * 获得绑定在某托盘上的袋码列表(按袋序号升序),用于托盘扫码追溯
     *
     * @param palletId 托盘编号
     * @return 袋码列表
     */
    List<MesProBagCodeDO> getBagCodeListByPalletId(Long palletId);
 
    /**
     * 获得某批次下的全部袋码列表(按袋序号升序),用于批量导出二维码
     *
     * @param batchId 批次编号
     * @return 袋码列表
     */
    List<MesProBagCodeDO> getBagCodeListByBatchId(Long batchId);
 
    /**
     * 获得某批次下可印刷的袋码列表(排除已作废袋码,按袋序号升序),用于批量导出二维码标签
     * <p>
     * 已作废的袋码(破损替换后作废)不得再印刷:其标签若贴到产品上,消费者扫码会被提示
     * 「该追溯码已作废,谨防假冒」,导致真品被误判为假货。
     *
     * @param batchId 批次编号
     * @return 可印刷的袋码列表
     */
    List<MesProBagCodeDO> getPrintableBagCodeListByBatchId(Long batchId);
 
    /**
     * 获得某生成组下可印刷的袋码列表(排除已作废袋码),用于批量导出二维码标签
     *
     * @param uuid 生成组 UUID
     * @return 可印刷的袋码列表
     */
    List<MesProBagCodeDO> getPrintableBagCodeListByUuid(String uuid);
 
    /**
     * 统计某生成组下可印刷的袋码数量
     * <p>
     * 导出前据此判断走同步下载还是后台任务,避免为了拿到数量而把全部袋码加载进内存。
     *
     * @param uuid 生成组 UUID
     * @return 可印刷的袋码数量
     */
    Long getPrintableBagCodeCountByUuid(String uuid);
 
    /**
     * 统计某批次下可印刷的袋码数量
     *
     * @param batchId 批次编号
     * @return 可印刷的袋码数量
     */
    Long getPrintableBagCodeCountByBatchId(Long batchId);
 
    /**
     * 分页获得某生成组下可印刷的袋码(后台大批量导出用,逐页取以控制内存)
     *
     * @param uuid     生成组 UUID
     * @param pageNo   页码,从 1 开始
     * @param pageSize 每页数量
     * @return 可印刷的袋码列表(按袋序号升序)
     */
    List<MesProBagCodeDO> getPrintableBagCodePageByUuid(String uuid, int pageNo, int pageSize);
 
    /**
     * 分页获得某批次下可印刷的袋码(后台大批量导出用)
     *
     * @param batchId  批次编号
     * @param pageNo   页码,从 1 开始
     * @param pageSize 每页数量
     * @return 可印刷的袋码列表(按袋序号升序)
     */
    List<MesProBagCodeDO> getPrintableBagCodePageByBatchId(Long batchId, int pageNo, int pageSize);
 
    /**
     * 标记袋码为已出库(记录销售出库单编号和出库时间)
     *
     * @param id      袋码编号
     * @param salesId 销售出库单编号
     */
    void markOutbound(Long id, Long salesId);
 
    /**
     * 清除袋码的出库标记(取消出库单时使用)
     *
     * @param id 袋码编号
     */
    void clearOutbound(Long id);
 
}