|
1
2
|
package com.huaheng.api.erp.service;
|
|
3
|
import com.alibaba.fastjson.JSON;
|
|
4
|
import com.alibaba.fastjson.JSONArray;
|
|
5
6
7
8
9
10
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.huaheng.api.erp.domain.BoxInfo;
import com.huaheng.api.erp.domain.ChipInfos;
import com.huaheng.api.erp.domain.ShipmentRecord;
|
|
11
|
import com.huaheng.api.wcs.service.WcsService;
|
|
12
|
import com.huaheng.common.constant.HttpConstant;
|
|
13
14
|
import com.huaheng.common.constant.QuantityConstant;
import com.huaheng.common.exception.service.ServiceException;
|
|
15
|
import com.huaheng.common.utils.DateUtils;
|
|
16
|
import com.huaheng.common.utils.http.OkHttpUtils;
|
|
17
|
import com.huaheng.framework.web.domain.AjaxResult;
|
|
18
|
import com.huaheng.framework.web.service.ConfigService;
|
|
19
|
import com.huaheng.pc.config.address.service.AddressService;
|
|
20
21
|
import com.huaheng.pc.config.bosAssistantDetail.domain.BosAssistantDetail;
import com.huaheng.pc.config.bosAssistantDetail.service.IBosAssistantDetailService;
|
|
22
23
24
25
|
import com.huaheng.pc.config.container.domain.Container;
import com.huaheng.pc.config.container.service.ContainerService;
import com.huaheng.pc.config.containerType.domain.ContainerType;
import com.huaheng.pc.config.containerType.service.ContainerTypeService;
|
|
26
27
|
import com.huaheng.pc.config.location.domain.Location;
import com.huaheng.pc.config.location.service.LocationService;
|
|
28
29
30
31
32
33
|
import com.huaheng.pc.config.material.domain.Material;
import com.huaheng.pc.config.material.service.MaterialService;
import com.huaheng.pc.config.proPackaging.domain.ProPackaging;
import com.huaheng.pc.config.proPackaging.service.IProPackagingService;
import com.huaheng.pc.inventory.InventoryHistoryDetail.domain.InventoryHistoryDetail;
import com.huaheng.pc.inventory.InventoryHistoryDetail.service.IInventoryHistoryDetailService;
|
|
34
35
36
37
|
import com.huaheng.pc.inventory.cycleCountDetail.domain.CycleCountDetail;
import com.huaheng.pc.inventory.cycleCountDetail.domain.CycleCountDetailChild;
import com.huaheng.pc.inventory.cycleCountDetail.service.CycleCountDetailChildService;
import com.huaheng.pc.inventory.cycleCountDetail.service.CycleCountDetailService;
|
|
38
39
40
41
|
import com.huaheng.pc.inventory.inventoryCacheDetail.domain.InventoryCacheDetail;
import com.huaheng.pc.inventory.inventoryCacheDetail.service.InventoryCacheDetailService;
import com.huaheng.pc.inventory.inventoryDetail.domain.InventoryDetail;
import com.huaheng.pc.inventory.inventoryDetail.service.InventoryDetailService;
|
|
42
43
|
import com.huaheng.pc.inventory.inventoryHeader.domain.InventoryHeader;
import com.huaheng.pc.inventory.inventoryHeader.service.InventoryHeaderService;
|
|
44
45
46
47
48
49
50
51
52
53
|
import com.huaheng.pc.inventory.inventoryHistoryHeader.domain.InventoryHistoryHeader;
import com.huaheng.pc.inventory.inventoryHistoryHeader.service.IInventoryHistoryHeaderService;
import com.huaheng.pc.receipt.receiptContainerDetail.domain.ReceiptContainerDetail;
import com.huaheng.pc.receipt.receiptContainerDetail.service.ReceiptContainerDetailService;
import com.huaheng.pc.receipt.receiptContainerHeader.domain.ReceiptContainerHeader;
import com.huaheng.pc.receipt.receiptContainerHeader.service.ReceiptContainerHeaderService;
import com.huaheng.pc.receipt.receiptDetail.domain.ReceiptDetail;
import com.huaheng.pc.receipt.receiptDetail.service.ReceiptDetailService;
import com.huaheng.pc.receipt.receiptHeader.domain.ReceiptHeader;
import com.huaheng.pc.receipt.receiptHeader.service.ReceiptHeaderService;
|
|
54
55
56
57
58
|
import com.huaheng.pc.shipment.shipmentContainerHeader.service.ShipmentContainerHeaderService;
import com.huaheng.pc.shipment.shipmentDetail.domain.ShipmentDetail;
import com.huaheng.pc.shipment.shipmentDetail.service.ShipmentDetailService;
import com.huaheng.pc.shipment.shipmentHeader.domain.ShipmentHeader;
import com.huaheng.pc.shipment.shipmentHeader.service.ShipmentHeaderService;
|
|
59
60
|
import com.huaheng.pc.task.agvTask.domain.AgvTask;
import com.huaheng.pc.task.agvTask.service.AgvTaskService;
|
|
61
62
|
import com.huaheng.pc.task.taskDetail.domain.TaskDetail;
import com.huaheng.pc.task.taskDetail.service.TaskDetailService;
|
|
63
|
import com.huaheng.pc.task.taskHeader.domain.TaskHeader;
|
|
64
|
import com.huaheng.pc.task.taskHeader.service.ReceiptTaskService;
|
|
65
|
import com.huaheng.pc.task.taskHeader.service.TaskHeaderService;
|
|
66
67
68
69
70
71
|
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.math.RoundingMode;
|
|
72
73
|
import java.text.MessageFormat;
import java.util.*;
|
|
74
|
import java.util.stream.Collectors;
|
|
75
|
|
|
76
77
78
|
/**
* @author 游杰
*/
|
|
79
80
81
82
83
84
85
86
|
@Service
public class CodingServiceImpl implements CodingService {
@Resource
private IInventoryHistoryDetailService inventoryHistoryDetailService;
@Resource
private IInventoryHistoryHeaderService inventoryHistoryHeaderService;
@Resource
|
|
87
|
private CycleCountDetailChildService cycleCountDetailChildService;
|
|
88
89
90
|
@Resource
private ShipmentDetailService shipmentDetailService;
@Resource
|
|
91
92
93
94
95
96
97
98
|
private ContainerService containerService;
@Resource
private ContainerTypeService containerTypeService;
@Resource
private ReceiptContainerHeaderService receiptContainerHeaderService;
@Resource
private ReceiptHeaderService receiptHeaderService;
@Resource
|
|
99
100
|
private PDAServiceImpl pdaService;
@Resource
|
|
101
102
|
private MaterialService materialService;
@Resource
|
|
103
104
|
private ShipmentHeaderService shipmentHeaderService;
@Resource
|
|
105
106
|
private AddressService addressService;
@Resource
|
|
107
108
109
110
111
112
113
114
115
|
private IProPackagingService proPackagingService;
@Resource
private ReceiptDetailService receiptDetailService;
@Resource
private ReceiptContainerDetailService receiptContainerDetailService;
@Resource
private ReceiptTaskService receiptTaskService;
@Resource
private AgvTaskService agvTaskService;
|
|
116
117
|
@Resource
private LocationService locationService;
|
|
118
119
|
@Resource
private WcsService wcsService;
|
|
120
|
@Resource
|
|
121
|
private ShipmentContainerHeaderService shipmentContainerHeaderService;
|
|
122
|
@Resource
|
|
123
|
private IBosAssistantDetailService bosAssistantDetailService;
|
|
124
125
126
|
@Resource
private InventoryDetailService inventoryDetailService;
@Resource
|
|
127
128
|
private IProPackagingService proPackingService;
@Resource
|
|
129
130
|
private CycleCountDetailService cycleCountDetailService;
@Resource
|
|
131
|
private InventoryCacheDetailService inventoryCacheDetailService;
|
|
132
133
|
@Resource
private TaskHeaderService taskHeaderService;
|
|
134
|
@Resource
|
|
135
136
|
private TaskDetailService taskDetailService;
@Resource
|
|
137
|
private InventoryHeaderService inventoryHeaderService;
|
|
138
139
|
@Resource
private ConfigService configService;
|
|
140
141
142
|
@Override
@Transactional(rollbackFor = Exception.class)
|
|
143
144
145
|
public AjaxResult innerReceipt(String containerCode, String position, String proSchedule, String orderCode, String orderName, List<BoxInfo> boxInfoList,
int stack, int qc, int orderFinish, BigDecimal weight, int type, String k3Code, String inType, String operatorName, String quantityorName,
Integer toalCases) {
|
|
146
147
|
String warehouseCode = "CS0001";
boolean result = false;
|
|
148
|
orderFinish = 1;
|
|
149
|
Container container = containerService.getContainerByCode(containerCode, warehouseCode);
|
|
150
|
if (container == null) {
|
|
151
152
153
|
return AjaxResult.error("根据托盘号:" + containerCode + "没有找到匹配的容器");
}
String locationCode = container.getLocationCode();
|
|
154
|
if (StringUtils.isNotEmpty(locationCode)) {
|
|
155
156
|
return AjaxResult.error("这个容器在库位上,不能用来入库, 托盘号:" + containerCode);
}
|
|
157
158
159
160
|
String containerStatus = container.getStatus();
if (containerStatus.equals(QuantityConstant.STATUS_CONTAINER_LOCK)) {
return AjaxResult.error("这个容器已经锁定,不能用来入库, 容器号:" + containerCode);
}
|
|
161
|
String containerTypeCode = container.getContainerType();
|
|
162
|
if (containerTypeCode == null) {
|
|
163
164
|
return AjaxResult.error("容器类型编码为空");
}
|
|
165
|
ContainerType containerType = containerTypeService.getContainerTypeByCode(containerTypeCode, warehouseCode);
|
|
166
|
if (containerType == null) {
|
|
167
168
|
return AjaxResult.error("容器类型为空");
}
|
|
169
|
if (boxInfoList == null || boxInfoList.size() == 0) {
|
|
170
171
172
173
|
return AjaxResult.error("箱信息为空");
}
List<ReceiptContainerDetail> receiptContainerDetailList = new ArrayList<>();
|
|
174
175
176
177
|
LambdaQueryWrapper<ReceiptContainerHeader> receiptContainerHeaderLambdaQueryWrapper = Wrappers.lambdaQuery();
receiptContainerHeaderLambdaQueryWrapper.eq(ReceiptContainerHeader::getContainerCode, containerCode).lt(ReceiptContainerHeader::getStatus,
QuantityConstant.RECEIPT_CONTAINER_FINISHED);
ReceiptContainerHeader receiptContainerHeader = receiptContainerHeaderService.getOne(receiptContainerHeaderLambdaQueryWrapper);
|
|
178
|
if (receiptContainerHeader != null) {
|
|
179
180
|
return AjaxResult.error("容器已经有组盘信息,容器号:" + containerCode);
}
|
|
181
|
ReceiptHeader receiptHeader = null;
|
|
182
|
if (type == 0) { // 生产入库
|
|
183
184
|
String receiptCode = receiptHeaderService.createCode(QuantityConstant.RECEIPT_TYPE_PRODUCTON);
LambdaQueryWrapper<ReceiptHeader> receiptHeaderLambdaQueryWrapper = Wrappers.lambdaQuery();
|
|
185
186
|
receiptHeaderLambdaQueryWrapper.eq(ReceiptHeader::getOrderCode, orderCode).le(ReceiptHeader::getLastStatus, QuantityConstant.RECEIPT_HEADER_POSTING)
.eq(ReceiptHeader::getReceiptType, QuantityConstant.RECEIPT_TYPE_PRODUCTON);
|
|
187
188
189
190
191
192
|
receiptHeader = receiptHeaderService.getOne(receiptHeaderLambdaQueryWrapper);
if (receiptHeader == null) {
receiptHeader = new ReceiptHeader();
receiptHeader.setCode(receiptCode);
receiptHeader.setOrderCode(orderCode);
receiptHeader.setReceiptType(QuantityConstant.RECEIPT_TYPE_PRODUCTON);
|
|
193
|
receiptHeader.setInType(inType);
|
|
194
195
196
197
198
199
200
|
receiptHeader.setWarehouseCode(warehouseCode);
receiptHeader.setCompanyCode(QuantityConstant.DEFAULT_COMPANY);
receiptHeader.setReferType(QuantityConstant.BILL_TYPE_RECEIPT_SINGLE);
receiptHeader.setTotalLines(0);
receiptHeader.setTotalQty(BigDecimal.ZERO);
receiptHeader.setFirstStatus(200);
receiptHeader.setLastStatus(200);
|
|
201
|
receiptHeader.setToalCases(toalCases);
|
|
202
203
204
205
206
207
208
209
|
receiptHeader.setOrderFinish(false);
receiptHeader.setCreatedBy(QuantityConstant.PLATFORM_CODING);
receiptHeader.setLastUpdatedBy(QuantityConstant.PLATFORM_CODING);
result = receiptHeaderService.save(receiptHeader);
if (!result) {
throw new ServiceException("保存入库单失败");
}
}
|
|
210
|
} else if (type == 1) { // 退货入库
|
|
211
|
LambdaQueryWrapper<ReceiptHeader> receiptHeaderLambdaQueryWrapper = Wrappers.lambdaQuery();
|
|
212
213
|
receiptHeaderLambdaQueryWrapper.eq(ReceiptHeader::getReferCode, k3Code).le(ReceiptHeader::getLastStatus, QuantityConstant.RECEIPT_HEADER_POSTING)
.eq(ReceiptHeader::getReceiptType, QuantityConstant.RECEIPT_BILL_TYPE_SR);
|
|
214
|
receiptHeader = receiptHeaderService.getOne(receiptHeaderLambdaQueryWrapper);
|
|
215
|
if (receiptHeader == null) {
|
|
216
|
throw new ServiceException("没有找到销售退货单");
|
|
217
|
}
|
|
218
|
} else if (type == 2) {
|
|
219
|
String receiptCode = receiptHeaderService.createCode(QuantityConstant.RECEIPT_BILL_TYPE_OR);
|
|
220
|
LambdaQueryWrapper<ReceiptHeader> receiptHeaderLambdaQueryWrapper = Wrappers.lambdaQuery();
|
|
221
222
|
receiptHeaderLambdaQueryWrapper.eq(ReceiptHeader::getOrderCode, orderCode).le(ReceiptHeader::getLastStatus, QuantityConstant.RECEIPT_HEADER_POSTING)
.eq(ReceiptHeader::getReceiptType, QuantityConstant.RECEIPT_BILL_TYPE_OR);
|
|
223
224
225
226
227
|
receiptHeader = receiptHeaderService.getOne(receiptHeaderLambdaQueryWrapper);
if (receiptHeader == null) {
receiptHeader = new ReceiptHeader();
receiptHeader.setCode(receiptCode);
receiptHeader.setOrderCode(orderCode);
|
|
228
229
230
|
receiptHeader.setReceiptType(QuantityConstant.RECEIPT_BILL_TYPE_OR);
String defDeptCode = configService.getKey(QuantityConstant.QT_DEF_DEPT);
receiptHeader.setUserDef1(defDeptCode);
|
|
231
232
233
|
receiptHeader.setInType(inType);
receiptHeader.setWarehouseCode(warehouseCode);
receiptHeader.setCompanyCode(QuantityConstant.DEFAULT_COMPANY);
|
|
234
|
// 其他入库单 类型
|
|
235
|
receiptHeader.setReferType(QuantityConstant.BILL_TYPE_RECEIPT_OTHER);
|
|
236
237
238
239
240
241
242
243
244
245
246
247
248
|
receiptHeader.setTotalLines(0);
receiptHeader.setTotalQty(BigDecimal.ZERO);
receiptHeader.setFirstStatus(200);
receiptHeader.setLastStatus(200);
receiptHeader.setToalCases(toalCases);
receiptHeader.setOrderFinish(false);
receiptHeader.setCreatedBy(QuantityConstant.PLATFORM_CODING);
receiptHeader.setLastUpdatedBy(QuantityConstant.PLATFORM_CODING);
result = receiptHeaderService.save(receiptHeader);
if (!result) {
throw new ServiceException("保存入库单失败");
}
}
|
|
249
|
} else {
|
|
250
|
throw new ServiceException("type类型不匹配");
|
|
251
|
}
|
|
252
|
BigDecimal totalQty = BigDecimal.ZERO;
|
|
253
254
255
|
String materialCode1 = null, batch1 = null, level1 = null, color1 = null, proPackage1 = null, productSize = null;
Integer boxQty = 0;// 每箱数量
Integer box = 0;// 箱数
|
|
256
|
BoxInfo boxInfo1 = boxInfoList.get(0);
|
|
257
|
for (BoxInfo boxInfo : boxInfoList) {
|
|
258
|
materialCode1 = boxInfo.getMaterialCode();
|
|
259
|
proPackage1 = boxInfo.getProPackaging();
|
|
260
261
|
level1 = boxInfo.getLevel();
color1 = boxInfo.getColor();
|
|
262
|
productSize = boxInfo.getSize();
|
|
263
264
265
|
BigDecimal qty = boxInfo.getQty();
batch1 = boxInfo.getBatch();
totalQty = totalQty.add(qty);
|
|
266
|
if (!boxInfo1.getMaterialCode().equals(materialCode1)) {
|
|
267
268
|
throw new ServiceException("赋码系统给的物料编码不一致:" + boxInfo1.getMaterialCode() + "," + materialCode1);
}
|
|
269
|
if (!boxInfo1.getProPackaging().equals(proPackage1)) {
|
|
270
271
|
throw new ServiceException("赋码系统给的产品包装不一致:" + boxInfo1.getProPackaging() + "," + proPackage1);
}
|
|
272
|
if (!boxInfo1.getLevel().equals(level1)) {
|
|
273
274
|
throw new ServiceException("赋码系统给的等级不一致:" + boxInfo1.getLevel() + "," + level1);
}
|
|
275
|
if (!boxInfo1.getColor().equals(color1)) {
|
|
276
277
|
throw new ServiceException("赋码系统给的色号不一致:" + boxInfo1.getColor() + "," + color1);
}
|
|
278
|
if (!boxInfo1.getBatch().equals(batch1)) {
|
|
279
280
|
throw new ServiceException("赋码系统给的批次不一致:" + boxInfo1.getBatch() + "," + batch1);
}
|
|
281
|
}
|
|
282
|
Material material = materialService.getMaterialByCode(materialCode1);
|
|
283
284
|
getBosAssistantNumber(color1, "colour");
getBosAssistantNumber(level1, "level");
|
|
285
286
287
288
289
290
291
292
293
294
295
296
297
298
|
LambdaQueryWrapper<ReceiptDetail> receiptDetailLambdaQueryWrapper1 = Wrappers.lambdaQuery();
receiptDetailLambdaQueryWrapper1.eq(ReceiptDetail::getReceiptId, receiptHeader.getId());
List<ReceiptDetail> details = receiptDetailService.list(receiptDetailLambdaQueryWrapper1);
BigDecimal sum = new BigDecimal(0);
ReceiptDetail detail = null;
for (ReceiptDetail det : details) {
sum = sum.add(det.getTaskQty());
if (det.getMaterialCode().equals(materialCode1)) {
detail = det;
}
}
|
|
299
|
if (type == 1 && sum.add(totalQty).compareTo(receiptHeader.getTotalQty()) == 1) {
|
|
300
301
302
|
throw new ServiceException("单据数量超出了:");
}
|
|
303
|
if (detail == null && details.size() != 0) {
|
|
304
305
306
|
throw new ServiceException("不可出现一种新的物料:");
}
|
|
307
308
|
ReceiptDetail receiptDetail = new ReceiptDetail();
receiptDetail.setWarehouseCode(warehouseCode);
|
|
309
|
receiptDetail.setCompanyCode(QuantityConstant.DEFAULT_COMPANY);
|
|
310
311
|
receiptDetail.setMaterialCode(materialCode1);
receiptDetail.setMaterialUnit("1001");
|
|
312
|
receiptDetail.setMaterialSpec(material.getSpec());
|
|
313
|
if (details.size() > 1) {
|
|
314
315
|
receiptDetail.setFHTZDetail(detail.getFHTZDetail());
}
|
|
316
|
LambdaQueryWrapper<Material> queryWrapper = Wrappers.lambdaQuery();
|
|
317
|
queryWrapper.eq(Material::getCode, materialCode1).eq(Material::getWarehouseCode, QuantityConstant.DEFAULT_WAREHOUSE);
|
|
318
|
Material material1 = materialService.getOne(queryWrapper);
|
|
319
|
if (material1 == null) {
|
|
320
321
|
return AjaxResult.error("没有找到物料信息:" + materialCode1);
}
|
|
322
323
324
|
receiptDetail.setMaterialName(material1.getName());
receiptDetail.setColor(color1);
receiptDetail.setLevel(level1);
|
|
325
|
receiptDetail.setProPackaging(proPackage1);
|
|
326
327
328
|
receiptDetail.setProductSchedule(proSchedule);
receiptDetail.setProductSize(productSize);
receiptDetail.setQty(totalQty);
|
|
329
|
receiptDetail.setStatus(QuantityConstant.RECEIPT_HEADER_BUILD);
|
|
330
331
|
LambdaQueryWrapper<ProPackaging> queryWrapper2 = Wrappers.lambdaQuery();
|
|
332
|
queryWrapper2.eq(ProPackaging::getNumber, proPackage1);
|
|
333
|
ProPackaging proPackaging = proPackagingService.getOne(queryWrapper2);
|
|
334
|
if (proPackaging == null) {
|
|
335
336
|
return AjaxResult.error("没有该产品包装");
}
|
|
337
|
// 每箱数量
|
|
338
|
int pieceBox = proPackaging.getPieceBox();
|
|
339
|
String toPort = null;
|
|
340
|
String toLocationCode = null;
|
|
341
|
// 先获取起始库位,获取不到就放到缓存区
|
|
342
343
344
345
|
if (qc == 0) {
AjaxResult ajaxResult = wcsService.getFromPort();
if (ajaxResult.hasErr()) {
throw new ServiceException("获取站台点失败");
|
|
346
|
}
|
|
347
|
JSONArray array = (JSONArray)ajaxResult.getData();
|
|
348
|
|
|
349
|
for (int i = 0; i < array.size(); i++) {
|
|
350
|
toPort = (String)array.get(i);
|
|
351
352
353
354
|
String port = null;
if (toPort.equals(QuantityConstant.PORT_P1005)) {
port = QuantityConstant.PORT_P1004;
}
|
|
355
|
|
|
356
357
358
|
if (toPort.equals(QuantityConstant.PORT_P1001)) {
port = QuantityConstant.PORT_P1000;
}
|
|
359
|
|
|
360
|
LambdaQueryWrapper<AgvTask> agvTaskLambdaQueryWrapper = Wrappers.lambdaQuery();
|
|
361
|
agvTaskLambdaQueryWrapper.eq(AgvTask::getToPort, port).ne(AgvTask::getStatus, QuantityConstant.TASK_STATUS_COMPLETED);
|
|
362
363
364
365
366
367
368
369
|
List<AgvTask> list = agvTaskService.list(agvTaskLambdaQueryWrapper);
toLocationCode = toPort;
if (list.size() > 0) {
toLocationCode = getCacheLocation();
} else {
break;
}
|
|
370
371
|
}
|
|
372
373
374
|
if (array.size() == 0) {
toLocationCode = getCacheLocation();
}
|
|
375
|
|
|
376
377
378
|
if (StringUtils.isEmpty(toLocationCode)) {
throw new ServiceException("没有找到入库缓存区空闲库位");
}
|
|
379
|
}
|
|
380
|
|
|
381
|
// 箱数
|
|
382
383
|
box = totalQty.divide(BigDecimal.valueOf(pieceBox), RoundingMode.DOWN).intValue();
receiptDetail.setBox(box);
|
|
384
|
if (receiptHeader.getReceiptType().equals(QuantityConstant.RECEIPT_BILL_TYPE_SR)) {
|
|
385
386
|
receiptDetail.setTaskQty(totalQty);
}
|
|
387
|
|
|
388
389
390
391
|
// if (details.size()>1&&sum.add(totalQty).compareTo(detail.getQty())==1)
// {
// throw new ServiceException("已收数量不能大于单据总数量");
// }
|
|
392
|
|
|
393
394
|
receiptDetail.setBatch(batch1);
receiptDetail.setProjectNo(orderCode);
|
|
395
|
receiptDetail.setReceiptCode(receiptHeader.getCode());
|
|
396
|
receiptDetail.setQcCheck(qc + "");// 是否质检
|
|
397
398
|
receiptDetail.setCreatedBy(QuantityConstant.PLATFORM_CODING);
receiptDetail.setLastUpdatedBy(QuantityConstant.PLATFORM_CODING);
|
|
399
|
receiptDetail.setReceiptId(receiptHeader.getId());
|
|
400
|
|
|
401
|
LambdaQueryWrapper<ReceiptDetail> receiptDetailQueryWrapper = new LambdaQueryWrapper<>();
|
|
402
403
|
receiptDetailQueryWrapper.eq(ReceiptDetail::getReceiptId, receiptHeader.getId()).eq(ReceiptDetail::getMaterialCode, materialCode1)
.eq(ReceiptDetail::getBatch, batch1).eq(ReceiptDetail::getColor, color1).eq(ReceiptDetail::getLevel, level1);
|
|
404
|
ReceiptDetail receiptDetail1 = receiptDetailService.getOne(receiptDetailQueryWrapper);
|
|
405
|
if (receiptDetail1 != null) {
|
|
406
407
|
receiptDetail = receiptDetail1;
BigDecimal qty = receiptDetail.getQty();
|
|
408
|
BigDecimal taskQty = receiptDetail.getTaskQty();
|
|
409
|
qty = qty.add(totalQty);
|
|
410
|
taskQty = taskQty.add(totalQty);
|
|
411
|
if (receiptHeader.getReceiptType().equals(QuantityConstant.RECEIPT_BILL_TYPE_SR)) {
|
|
412
|
receiptDetail.setTaskQty(taskQty);
|
|
413
|
} else {
|
|
414
415
|
receiptDetail.setQty(qty);
}
|
|
416
417
418
419
|
result = receiptDetailService.updateById(receiptDetail);
} else {
result = receiptDetailService.save(receiptDetail);
}
|
|
420
|
if (!result) {
|
|
421
422
|
throw new ServiceException("保存入库单详情失败");
}
|
|
423
|
receiptHeader.setTotalLines(receiptHeader.getTotalLines() + 1);
|
|
424
|
receiptHeader.setTotalQty(receiptHeader.getTotalQty().add(totalQty));
|
|
425
|
// 判断是否完成的标志
|
|
426
|
boolean result1 = orderFinish == 1;
|
|
427
|
receiptHeader.setOrderFinish(result1);// 设值
|
|
428
|
if (receiptHeader.getReceiptType().equals(QuantityConstant.RECEIPT_BILL_TYPE_SR)) {
|
|
429
430
431
432
|
LambdaQueryWrapper<ReceiptDetail> receiptDetailLambdaQueryWrapper = Wrappers.lambdaQuery();
receiptDetailLambdaQueryWrapper.eq(ReceiptDetail::getReceiptId, receiptHeader.getId());
List<ReceiptDetail> receiptDetailList = receiptDetailService.list(receiptDetailLambdaQueryWrapper);
int complete = 1;
|
|
433
434
|
for (ReceiptDetail receiptDetail2 : receiptDetailList) {
if (receiptDetail2.getQty().compareTo(receiptDetail2.getTaskQty()) > 0) {
|
|
435
436
437
|
complete = 0;
}
}
|
|
438
|
if (complete == 1) {
|
|
439
|
if (receiptHeader.getLastStatus().intValue() < QuantityConstant.RECEIPT_HEADER_POSTING) {
|
|
440
441
442
|
receiptHeader.setFirstStatus(QuantityConstant.RECEIPT_HEADER_POSTING);
receiptHeader.setLastStatus(QuantityConstant.RECEIPT_HEADER_POSTING);
}
|
|
443
444
|
}
}
|
|
445
|
result = receiptHeaderService.updateById(receiptHeader);
|
|
446
|
if (!result) {
|
|
447
448
|
throw new ServiceException("更新入库单失败");
}
|
|
449
|
receiptDetailService.updateReceiptHeader(receiptHeader);
|
|
450
451
|
ReceiptContainerHeader receiptContainerHeader1 = new ReceiptContainerHeader();
receiptContainerHeader1.setWarehouseCode(warehouseCode);
|
|
452
|
receiptContainerHeader1.setCompanyCode(QuantityConstant.DEFAULT_COMPANY);
|
|
453
454
|
receiptContainerHeader1.setContainerCode(containerCode);
receiptContainerHeader1.setPosition(position);
|
|
455
|
receiptContainerHeader1.setPort(toLocationCode);
|
|
456
457
|
receiptContainerHeader1.setOperatorName(operatorName);
receiptContainerHeader1.setQualityorName(quantityorName);
|
|
458
459
460
|
receiptContainerHeader1.setBatch(batch1);
receiptContainerHeader1.setLevel(level1);
receiptContainerHeader1.setColor(color1);
|
|
461
|
receiptContainerHeader1.setProductSize(productSize);
|
|
462
|
receiptContainerHeader1.setProPackaging(proPackage1);
|
|
463
|
receiptContainerHeader1.setProductSchedule(proSchedule);
|
|
464
|
// receiptContainerHeader1.setStockId(stockId);//生产车间
|
|
465
466
467
|
receiptContainerHeader1.setOrderCode(orderCode);// 订单编号
receiptContainerHeader1.setOrderName(orderName);// 订单名称
receiptContainerHeader1.setMaterialCode(materialCode1);// 物料编码
|
|
468
|
receiptContainerHeader1.setContainerType(containerTypeCode);
|
|
469
|
receiptContainerHeader1.setWeight(String.valueOf(weight));
|
|
470
471
|
receiptContainerHeader1.setTaskType(QuantityConstant.TASK_TYPE_WHOLERECEIPT);
receiptContainerHeader1.setStatus(QuantityConstant.RECEIPT_CONTAINER_BUILD);
|
|
472
|
receiptContainerHeader1.setStack(stack);// 设置垛型
|
|
473
474
|
receiptContainerHeader1.setCreatedBy(QuantityConstant.PLATFORM_CODING);
receiptContainerHeader1.setLastUpdatedBy(QuantityConstant.PLATFORM_CODING);
|
|
475
|
result = receiptContainerHeaderService.save(receiptContainerHeader1);
|
|
476
|
if (!result) {
|
|
477
478
|
throw new ServiceException("保存入库组盘头失败");
}
|
|
479
|
for (BoxInfo boxInfo : boxInfoList) {
|
|
480
|
String boxCode = boxInfo.getBoxCode();
|
|
481
|
int boxPosition = boxInfo.getBoxPosition();
|
|
482
|
List<ChipInfos> chipInfoList = boxInfo.getChipInfos();
|
|
483
484
|
// String materialCode = boxInfo.getMaterialCode();
// Material material = materialService.getMaterialByCode(materialCode, warehouseCode);
|
|
485
|
String level = boxInfo.getLevel();
|
|
486
|
String proPackagingStr = boxInfo.getProPackaging();
|
|
487
|
String productSize1 = boxInfo.getSize();
|
|
488
489
|
String color = boxInfo.getColor();
String batch = boxInfo.getBatch();
|
|
490
|
for (ChipInfos chipInfos : chipInfoList) {
|
|
491
|
ReceiptContainerDetail receiptContainerDetail = new ReceiptContainerDetail();
|
|
492
493
|
String chipCode1 = chipInfos.getChipBarcode1();
String chipCode2 = chipInfos.getChipBarcode2();
|
|
494
495
496
|
receiptContainerDetail.setWarehouseCode(warehouseCode);
receiptContainerDetail.setContainerCode(containerCode);
receiptContainerDetail.setContainerType(containerTypeCode);
|
|
497
|
receiptContainerDetail.setCompanyCode(QuantityConstant.DEFAULT_COMPANY);
|
|
498
|
receiptContainerDetail.setTaskType(QuantityConstant.TASK_TYPE_WHOLERECEIPT);
|
|
499
500
|
receiptContainerDetail.setChipCode1(chipCode1);
receiptContainerDetail.setChipCode2(chipCode2);
|
|
501
502
503
504
|
receiptContainerDetail.setMaterialCode(receiptDetail.getMaterialCode());
receiptContainerDetail.setMaterialName(receiptDetail.getMaterialName());
receiptContainerDetail.setMaterialSpec(receiptDetail.getMaterialSpec());
receiptContainerDetail.setMaterialUnit(receiptDetail.getMaterialUnit());
|
|
505
506
507
508
509
|
receiptContainerDetail.setProPackaging(proPackagingStr);// 包装
receiptContainerDetail.setProductSchedule(proSchedule);// 排产订单
receiptContainerDetail.setProductSize(productSize1);// 等级
receiptContainerDetail.setLevel(level);// 等级
receiptContainerDetail.setColor(color);// 色号
|
|
510
511
512
513
514
|
receiptContainerDetail.setQty(BigDecimal.ONE);
receiptContainerDetail.setBatch(batch);
receiptContainerDetail.setReceiptCode(orderCode);
receiptContainerDetail.setBoxCode(boxCode);
receiptContainerDetail.setReceiptType("SC");
|
|
515
516
517
|
receiptContainerDetail.setInventorySts(QuantityConstant.QUALITY_GOOD);
receiptContainerDetail.setCreatedBy(QuantityConstant.PLATFORM_CODING);
receiptContainerDetail.setLastUpdatedBy(QuantityConstant.PLATFORM_CODING);
|
|
518
519
520
521
522
523
524
525
|
receiptContainerDetail.setBoxPosition(boxPosition);
receiptContainerDetail.setReceiptId(receiptHeader.getId());
receiptContainerDetail.setReceiptDetailId(receiptDetail.getId());
receiptContainerDetail.setReceiptContainerId(receiptContainerHeader1.getId());
receiptContainerDetailList.add(receiptContainerDetail);
}
}
result = receiptContainerDetailService.saveBatch(receiptContainerDetailList);
|
|
526
|
if (!result) {
|
|
527
528
529
|
throw new ServiceException("保存入库组盘详情失败");
}
Integer id = receiptContainerHeader1.getId();
|
|
530
|
|
|
531
|
if (qc == 1) {
|
|
532
533
|
receiptContainerHeader1.setExceptionCode("需要质检");
receiptContainerHeaderService.updateById(receiptContainerHeader1);
|
|
534
|
toLocationCode = getCacheLocation();
|
|
535
|
} else {
|
|
536
|
if (toLocationCode.equals(QuantityConstant.PORT_P1001) || toLocationCode.equals(QuantityConstant.PORT_P1005)) {
|
|
537
|
AjaxResult ajaxResult = receiptTaskService.createReceiptTask(id, warehouseCode);
|
|
538
|
if (ajaxResult.hasErr()) {
|
|
539
|
throw new ServiceException("生成任务失败" + ajaxResult.getMsg());
|
|
540
|
}
|
|
541
|
int taskId = (int)ajaxResult.getData();
|
|
542
543
544
545
|
TaskHeader taskHeader = taskHeaderService.getById(taskId);
taskHeader.setUserDef1(operatorName);
taskHeader.setUserDef2(quantityorName);
taskHeaderService.updateById(taskHeader);
|
|
546
|
}
|
|
547
|
}
|
|
548
549
550
|
if (StringUtils.isEmpty(toLocationCode)) {
throw new ServiceException("没有找到入库缓存区空闲库位");
}
|
|
551
552
|
AjaxResult taskFromTo = agvTaskService.sendTaskFromTo(warehouseCode, QuantityConstant.ZONE_LK, containerCode, position, toLocationCode,
QuantityConstant.PLATFORM_CODING, totalQty.intValue());
|
|
553
|
if (taskFromTo.hasErr()) {
|
|
554
|
throw new ServiceException("生成agv任务失败" + taskFromTo.getMsg());
|
|
555
|
}
|
|
556
|
|
|
557
558
559
560
561
|
return AjaxResult.success("保存入库组盘信息成功");
}
@Override
public AjaxResult findShipmentRecord(String boxCode) {
|
|
562
|
// 查询符合条件的历史库存明细
|
|
563
564
|
LambdaQueryWrapper<InventoryHistoryDetail> inventoryHistoryDetailLambdaQueryWrapper = Wrappers.lambdaQuery();
inventoryHistoryDetailLambdaQueryWrapper.eq(InventoryHistoryDetail::getBoxCode, boxCode);
|
|
565
566
|
List<InventoryHistoryDetail> inventoryHistorysDetailList = inventoryHistoryDetailService.list(inventoryHistoryDetailLambdaQueryWrapper);
|
|
567
568
|
LambdaQueryWrapper<InventoryHistoryHeader> inventoryHistoryHeaderLambdaQueryWrapper = Wrappers.lambdaQuery();
inventoryHistoryHeaderLambdaQueryWrapper.eq(InventoryHistoryHeader::getId, inventoryHistorysDetailList.get(0).getInventoryHistoryHeaderId());
|
|
569
570
|
InventoryHistoryHeader inventoryHistoryHeader = inventoryHistoryHeaderService.getOne(inventoryHistoryHeaderLambdaQueryWrapper);
|
|
571
|
List<ShipmentRecord> list = new ArrayList<>();
|
|
572
|
for (InventoryHistoryDetail inventoryHistoryDetail : inventoryHistorysDetailList) {
|
|
573
|
// 设置shipmentRecord属性,
|
|
574
|
ShipmentRecord shipmentRecord = new ShipmentRecord();
|
|
575
576
577
578
579
580
581
|
shipmentRecord.setMaterialCode(inventoryHistoryDetail.getMaterialCode());
shipmentRecord.setMaterialName(inventoryHistoryDetail.getMaterialName());
shipmentRecord.setColor(inventoryHistoryDetail.getColor());
shipmentRecord.setBoxCode(boxCode);
shipmentRecord.setLevel(inventoryHistoryDetail.getLevel());
shipmentRecord.setBatch(inventoryHistoryDetail.getBatch());
shipmentRecord.setTime(inventoryHistoryDetail.getCreated());
|
|
582
|
shipmentRecord.setChipCode1(inventoryHistoryDetail.getChipCode1());
|
|
583
584
585
586
587
588
589
590
|
shipmentRecord.setOrderCode(inventoryHistoryHeader.getOrderCode());
shipmentRecord.setOrderName(inventoryHistoryHeader.getOrderName());
list.add(shipmentRecord);
}
return AjaxResult.success().setData(list);
}
|
|
591
|
@Override
|
|
592
|
@Transactional(rollbackFor = Exception.class)
|
|
593
|
public AjaxResult findShipmentRecord(String boxCode, String chipCode) {
|
|
594
|
// 查询符合条件的历史库存明细
|
|
595
596
597
|
LambdaQueryWrapper<InventoryHistoryDetail> inventoryHistoryDetailLambdaQueryWrapper = Wrappers.lambdaQuery();
if (StringUtils.isNotEmpty(boxCode)) {
inventoryHistoryDetailLambdaQueryWrapper.eq(InventoryHistoryDetail::getBoxCode, boxCode);
|
|
598
599
600
|
}
if (StringUtils.isNotEmpty(chipCode)) {
|
|
601
|
inventoryHistoryDetailLambdaQueryWrapper.eq(InventoryHistoryDetail::getChipCode1, chipCode);
|
|
602
|
}
|
|
603
|
|
|
604
605
|
List<InventoryHistoryDetail> inventoryHistorysDetailList = inventoryHistoryDetailService.list(inventoryHistoryDetailLambdaQueryWrapper);
|
|
606
|
Collections.reverse(inventoryHistorysDetailList);
|
|
607
608
|
List<ShipmentRecord> list = new ArrayList<>();
|
|
609
|
for (InventoryHistoryDetail inventoryHistoryDetail : inventoryHistorysDetailList) {
|
|
610
611
612
|
LambdaQueryWrapper<InventoryHistoryHeader> inventoryHistoryHeaderLambdaQueryWrapper = Wrappers.lambdaQuery();
inventoryHistoryHeaderLambdaQueryWrapper.eq(InventoryHistoryHeader::getId, inventoryHistoryDetail.getInventoryHistoryHeaderId());
InventoryHistoryHeader inventoryHistoryHeader = inventoryHistoryHeaderService.getOne(inventoryHistoryHeaderLambdaQueryWrapper);
|
|
613
|
// 设置shipmentRecord属性,
|
|
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
|
ShipmentRecord shipmentRecord = new ShipmentRecord();
shipmentRecord.setMaterialCode(inventoryHistoryDetail.getMaterialCode());
shipmentRecord.setMaterialName(inventoryHistoryDetail.getMaterialName());
shipmentRecord.setLocationCode(inventoryHistoryDetail.getLocationCode());
shipmentRecord.setProductSchedule(inventoryHistoryDetail.getProductSchedule());
shipmentRecord.setColor(inventoryHistoryDetail.getColor());
if (StringUtils.isNotEmpty(boxCode)) {
shipmentRecord.setBoxCode(boxCode);
} else if (StringUtils.isNotEmpty(chipCode)) {
shipmentRecord.setBoxCode(inventoryHistorysDetailList.get(0).getBoxCode());
}
shipmentRecord.setLevel(inventoryHistoryDetail.getLevel());
shipmentRecord.setBatch(inventoryHistoryDetail.getBatch());
shipmentRecord.setTime(inventoryHistoryDetail.getCreated());
shipmentRecord.setChipCode1(inventoryHistoryDetail.getChipCode1());
if (inventoryHistoryHeader != null) {
shipmentRecord.setOrderCode(inventoryHistoryHeader.getOrderCode());
shipmentRecord.setOrderName(inventoryHistoryHeader.getOrderName());
shipmentRecord.setShipmentCode(inventoryHistoryHeader.getShipmentCode());
shipmentRecord.setReceiptCode(inventoryHistoryHeader.getReceiptCode());
}
list.add(shipmentRecord);
|
|
636
637
638
639
|
}
return AjaxResult.success().setData(list);
}
|
|
640
641
|
private Boolean agvTaskAndReceiptQcStream(String position, ReceiptHeader receiptHeader, String warehouseCode, int totalQty) {
// 生成AGV取放货任务
|
|
642
|
AgvTask agvTask = new AgvTask();
|
|
643
|
agvTask.setTaskType(QuantityConstant.AGV_TYPE_TAKE_AND_RELEASE);
|
|
644
645
646
647
648
|
agvTask.setStatus(QuantityConstant.AGV_TASK_STATUS_BUILD);
agvTask.setWarehouseCode(warehouseCode);
agvTask.setPriority(10);
agvTask.setFromPort(position);
agvTask.setToPort("质检点位");
|
|
649
|
agvTask.setQty(totalQty);
|
|
650
651
|
agvTask.setCreatedBy("质检点位");
Boolean result = agvTaskService.save(agvTask);
|
|
652
|
if (!result) {
|
|
653
654
|
throw new ServiceException("生成AGV任务失败");
}
|
|
655
|
// 生成入库质检单
|
|
656
657
658
|
receiptHeaderService.check(receiptHeader.getId());
return Boolean.TRUE;
}
|
|
659
|
|
|
660
661
|
private String getBosAssistantNumber(String number1, String id) {
LambdaQueryWrapper<BosAssistantDetail> bosAssistantDetailLambdaQueryWrapper = Wrappers.lambdaQuery();
|
|
662
663
|
bosAssistantDetailLambdaQueryWrapper.eq(BosAssistantDetail::getId, id).eq(BosAssistantDetail::getNumber, number1);
BosAssistantDetail bosAssistantDetail = bosAssistantDetailService.getOne(bosAssistantDetailLambdaQueryWrapper);
|
|
664
|
if (bosAssistantDetail == null) {
|
|
665
666
667
668
669
|
throw new ServiceException("没有找到对应详情:" + number1);
}
String number = bosAssistantDetail.getNumber();
return number;
}
|
|
670
|
|
|
671
|
/*
|
|
672
673
|
* 从A库
*/
|
|
674
|
@Override
|
|
675
|
@Transactional(rollbackFor = Exception.class)
|
|
676
|
public AjaxResult requestEmptyContainer(String requestInCode) {
|
|
677
678
679
680
|
List<Integer> rows = new ArrayList<>();
rows.add(1);
rows.add(2);
rows.add(3);
|
|
681
|
LambdaQueryWrapper<Location> locationLambdaQueryWrapper = Wrappers.lambdaQuery();
|
|
682
683
|
locationLambdaQueryWrapper.eq(Location::getZoneCode, QuantityConstant.ZONE_RECEIPT_MANY_CONTAINER).eq(Location::getStatus,
QuantityConstant.STATUS_LOCATION_LOCK);
|
|
684
|
List<Location> locationList = locationService.list(locationLambdaQueryWrapper);
|
|
685
|
if (locationList.size() > 0) {
|
|
686
687
|
List<Integer> rowList = locationList.stream().map(Location::getIRow).collect(Collectors.toList());
for (Integer row : rowList) {
|
|
688
|
rows.remove(row);
|
|
689
690
|
}
}
|
|
691
|
if (rows.size() == 0) {
|
|
692
693
694
695
|
return AjaxResult.error("每一行都有AGV任务,暂时没有可用库位, 清过段时间重试");
}
locationLambdaQueryWrapper = Wrappers.lambdaQuery();
locationLambdaQueryWrapper.eq(Location::getZoneCode, QuantityConstant.ZONE_RECEIPT_MANY_CONTAINER)
|
|
696
697
|
.eq(Location::getStatus, QuantityConstant.STATUS_LOCATION_EMPTY).in(Location::getIRow, rows).ne(Location::getContainerCode, "")
.orderByAsc(Location::getIColumn).orderByDesc(Location::getILayer).last(" limit 1");
|
|
698
|
Location location = locationService.getOne(locationLambdaQueryWrapper);
|
|
699
|
|
|
700
|
if (location == null) {
|
|
701
|
return AjaxResult.error("没有找到可出库位");
|
|
702
703
|
}
|
|
704
|
LambdaQueryWrapper<AgvTask> agvTaskLambdaQueryWrapper = Wrappers.lambdaQuery();
|
|
705
|
agvTaskLambdaQueryWrapper.eq(AgvTask::getToPort, requestInCode).lt(AgvTask::getStatus, QuantityConstant.TASK_STATUS_COMPLETED);
|
|
706
|
List<AgvTask> agvTaskList = agvTaskService.list(agvTaskLambdaQueryWrapper);
|
|
707
|
if (agvTaskList.size() > 0) {
|
|
708
709
|
return AjaxResult.error(requestInCode + "位置已经有AGV搬运任务");
}
|
|
710
711
712
713
714
715
|
String containerCode = location.getContainerCode();
String warehouseCode = location.getWarehouseCode();
String locationCode = location.getCode();
String zoneCode = location.getZoneCode();
Container container = containerService.getContainerByCode(containerCode, warehouseCode);
|
|
716
|
if (container != null) {
|
|
717
|
String status = container.getStatus();
|
|
718
|
if (status.equals(QuantityConstant.STATUS_CONTAINER_MANY)) {
|
|
719
720
|
AjaxResult ajaxResult =
agvTaskService.sendTaskFromTo(warehouseCode, zoneCode, containerCode, locationCode, requestInCode, QuantityConstant.PLATFORM_CODING, 0);
|
|
721
|
return ajaxResult;
|
|
722
723
|
}
}
|
|
724
|
|
|
725
|
return AjaxResult.error("没有可用于出库的库位");
|
|
726
|
}
|
|
727
|
|
|
728
|
// 获取空闲的入库缓存库位
|
|
729
|
@Override
|
|
730
|
@Transactional(rollbackFor = Exception.class)
|
|
731
|
public String getCacheLocation() {
|
|
732
733
734
735
|
List<Integer> rows = new ArrayList<>();
rows.add(1);
rows.add(2);
rows.add(3);
|
|
736
|
LambdaQueryWrapper<Location> locationLambdaQueryWrapper = Wrappers.lambdaQuery();
|
|
737
|
locationLambdaQueryWrapper.eq(Location::getZoneCode, QuantityConstant.ZONE_RECEIPT_CACHE).eq(Location::getStatus, QuantityConstant.STATUS_LOCATION_LOCK);
|
|
738
|
List<Location> locationList = locationService.list(locationLambdaQueryWrapper);
|
|
739
740
741
742
743
744
745
|
// 原代码是如果第一行有任务 就暂时不分配了,现在客户要求同时只能有一个agv任务(默认锁定就是有任务)
// if (locationList.size() > 0) {
// List<Integer> rowList = locationList.stream().map(Location::getIRow).collect(Collectors.toList());
// for (Integer row : rowList) {
// rows.remove(row);
// }
// }
|
|
746
|
if (locationList.size() > 0) {
|
|
747
|
throw new ServiceException("齐工要求 同时只能有一个agv任务 当前入库缓存区库位有锁定情况 无法生成新的任务");
|
|
748
|
}
|
|
749
|
if (rows.size() == 0) {
|
|
750
751
752
753
754
|
rows = new ArrayList<>();
rows.add(1);
rows.add(2);
rows.add(3);
}
|
|
755
|
|
|
756
|
// 之前代码按顺序查询的 默认取第一个 会造成后面的释放了分配到后面去,逻辑存在问题 先注释
|
|
757
758
759
760
761
762
763
764
765
|
// locationLambdaQueryWrapper = Wrappers.lambdaQuery();
// locationLambdaQueryWrapper.eq(Location::getZoneCode, QuantityConstant.ZONE_RECEIPT_CACHE)
// .eq(Location::getStatus, QuantityConstant.STATUS_LOCATION_EMPTY)
// .eq(Location::getContainerCode, "")
// .in(Location::getIRow, rows)
// .orderByDesc(Location::getIColumn)
// .orderByAsc(Location::getILayer)
// .last(" limit 1");
|
|
766
|
// 改写先全取 在本地处理数据 一共18*3个库位 本地处理多个循环也不至于很卡
|
|
767
|
locationLambdaQueryWrapper = Wrappers.lambdaQuery();
|
|
768
769
|
locationLambdaQueryWrapper.eq(Location::getZoneCode, QuantityConstant.ZONE_RECEIPT_CACHE).in(Location::getIRow, rows).orderByAsc(Location::getIRow)
.orderByAsc(Location::getIColumn);
|
|
770
|
|
|
771
772
|
List<Location> locations = locationService.list(locationLambdaQueryWrapper);
|
|
773
|
// 按 IRow 分组
|
|
774
|
Map<Integer, List<Location>> locationMap = locations.stream().collect(Collectors.groupingBy(Location::getIRow));
|
|
775
776
777
|
// 按空闲数量从多到少排序
Comparator<List<Location>> byIdleCount = Comparator.comparingInt(list -> {
|
|
778
779
780
|
long idleCount = list.stream()
.filter(location -> QuantityConstant.STATUS_CONTAINER_EMPTY.equals(location.getStatus()) && !StringUtils.isNotEmpty(location.getContainerCode()))
.count();
|
|
781
782
783
|
return -(int)idleCount; // 按空闲数量从多到少排序
});
|
|
784
|
// 每一行都分成一个list内,方便进行循环遍历
|
|
785
|
List<List<Location>> locationIRowList = new ArrayList<>(locationMap.values());
|
|
786
787
|
locationIRowList.sort(byIdleCount);
|
|
788
789
790
791
792
793
794
795
796
797
798
|
String LocationCode = null;
// 第一层遍历是行
for (List<Location> location : locationIRowList) {
// 第二次遍历是每一行的值 这里用int i可以更好的利用位置取值
for (int i = 0; i < location.size(); i++) {
// 查出非空闲或者有容器 如果当前列查了有就在这i的前一个给出去
if (!location.get(i).getStatus().equals(QuantityConstant.STATUS_CONTAINER_EMPTY) || StringUtils.isNotEmpty(location.get(i).getContainerCode())) {
// 如果是第一个就放弃这一行 比如B010101库位前是空的不存在了 这里用行跟来判断
if (location.get(i).getIColumn() == 1) {
// 当前行的遍历关闭 会到第一层遍历去重新到第二行
|
|
799
800
801
|
break;
}
|
|
802
803
|
// 如果不是当前行的第一个库位,就往前取一个,就是i-1,给变量赋值出去 直接退出当前遍历到第一层遍历
LocationCode = location.get(i - 1).getCode();
|
|
804
|
break;
|
|
805
806
807
808
|
} else {
// 如果这一行全不是有货或者锁定的 直接把最后一个当库位返回
if (i == location.size() - 1) {
LocationCode = location.get(i).getCode();
|
|
809
810
811
812
|
break;
}
}
}
|
|
813
814
|
// 如果在第二层里面给了库位了 就不需要再继续执行直接关闭当第一层遍历
if (LocationCode != null) {
|
|
815
816
|
break;
}
|
|
817
|
}
|
|
818
|
|
|
819
|
// TODO 如果三个都满了 默认返回是null 这里先保留 看看到时候要不要直接抛异常回滚报错为无库位
|
|
820
|
return LocationCode;
|
|
821
|
}
|
|
822
|
|
|
823
824
825
|
// 1.首先清掉库存、库存缓存、组盘信息
// 2.如果尾盘还没有推送托盘信息,并且尾盘数量有多,那么尾盘多取一个
// 3.如果尾盘数量不够,生成内部出库单出库。
|
|
826
|
@Override
|
|
827
|
@Transactional(rollbackFor = Exception.class)
|
|
828
|
public AjaxResult brickFalling(String boxCode, String containerCode) {
|
|
829
830
831
832
833
834
835
836
|
String materialCode = null;
String materialName = null;
String materialSpec = null;
String level = null;
String color = null;
String proPackaging = null;
String productSchedule = null;
String batch = null;
|
|
837
|
int size = 0;
|
|
838
|
// 查询库存里面还有没有这个值
|
|
839
|
LambdaQueryWrapper<InventoryDetail> inventoryDetailLambdaQueryWrapper = Wrappers.lambdaQuery();
|
|
840
|
inventoryDetailLambdaQueryWrapper.eq(InventoryDetail::getContainerCode, containerCode).eq(InventoryDetail::getBoxCode, boxCode);
|
|
841
|
List<InventoryDetail> inventoryDetails = inventoryDetailService.list(inventoryDetailLambdaQueryWrapper);
|
|
842
843
844
845
846
847
848
849
850
|
if (inventoryDetails.size() > 0) {
materialCode = inventoryDetails.get(0).getMaterialCode();
level = inventoryDetails.get(0).getLevel();
color = inventoryDetails.get(0).getColor();
proPackaging = inventoryDetails.get(0).getProPackaging();
productSchedule = inventoryDetails.get(0).getProductSchedule();
batch = inventoryDetails.get(0).getBatch();
materialName = inventoryDetails.get(0).getMaterialName();
materialSpec = inventoryDetails.get(0).getMaterialSpec();
|
|
851
|
List<Integer> inventoryIds = inventoryDetails.stream().map(InventoryDetail::getId).collect(Collectors.toList());
|
|
852
|
if (inventoryIds.size() > 0) {
|
|
853
|
boolean result = inventoryDetailService.removeByIds(inventoryIds);
|
|
854
|
if (!result) {
|
|
855
856
857
|
throw new ServiceException("删除库存详情");
}
}
|
|
858
|
}
|
|
859
|
|
|
860
|
// 查询库存扣减表有没有这个值
|
|
861
|
LambdaQueryWrapper<InventoryCacheDetail> inventoryCacheDetailLambdaQueryWrapper = Wrappers.lambdaQuery();
|
|
862
|
inventoryCacheDetailLambdaQueryWrapper.eq(InventoryCacheDetail::getBoxCode, boxCode).eq(InventoryCacheDetail::getContainerCode, containerCode);
|
|
863
|
List<InventoryCacheDetail> inventoryCacheDetails = inventoryCacheDetailService.list(inventoryCacheDetailLambdaQueryWrapper);
|
|
864
|
// 如果有就删除
|
|
865
866
867
868
869
870
871
872
873
|
if (inventoryCacheDetails.size() > 0) {
materialCode = inventoryCacheDetails.get(0).getMaterialCode();
level = inventoryCacheDetails.get(0).getLevel();
color = inventoryCacheDetails.get(0).getColor();
proPackaging = inventoryCacheDetails.get(0).getProPackaging();
productSchedule = inventoryCacheDetails.get(0).getProductSchedule();
batch = inventoryCacheDetails.get(0).getBatch();
materialName = inventoryCacheDetails.get(0).getMaterialName();
materialSpec = inventoryCacheDetails.get(0).getMaterialSpec();
|
|
874
|
List<Integer> inventoryCacheIds = inventoryCacheDetails.stream().map(InventoryCacheDetail::getId).collect(Collectors.toList());
|
|
875
876
|
if (inventoryCacheIds.size() > 0) {
size = inventoryCacheIds.size();
|
|
877
|
boolean result = inventoryCacheDetailService.removeByIds(inventoryCacheIds);
|
|
878
|
if (!result) {
|
|
879
880
881
|
throw new ServiceException("删除缓存库存详情");
}
}
|
|
882
|
|
|
883
|
}
|
|
884
|
|
|
885
|
// 查询有没有组托
|
|
886
|
LambdaQueryWrapper<ReceiptContainerDetail> receiptContainerDetailLambdaQueryWrapper = Wrappers.lambdaQuery();
|
|
887
888
|
receiptContainerDetailLambdaQueryWrapper.eq(ReceiptContainerDetail::getBoxCode, boxCode).ne(ReceiptContainerDetail::getStatus,
QuantityConstant.INVENTORY_TRANSACTION_SHIPMENT);
|
|
889
|
List<ReceiptContainerDetail> receiptContainerDetails = receiptContainerDetailService.list(receiptContainerDetailLambdaQueryWrapper);
|
|
890
891
|
boolean isZt = false;
|
|
892
|
// 如果有就删除
|
|
893
|
if (receiptContainerDetails.size() > 0) {
|
|
894
895
|
LambdaQueryWrapper<TaskHeader> taskHeaderLambdaQueryWrapper = Wrappers.lambdaQuery();
|
|
896
|
taskHeaderLambdaQueryWrapper.eq(TaskHeader::getContainerCode, receiptContainerDetails.get(0).getContainerCode())
|
|
897
|
.ne(TaskHeader::getPortGroup, QuantityConstant.PORTGROUP_P30).eq(TaskHeader::getTaskType, QuantityConstant.TASK_TYPE_OVER_STATION);
|
|
898
|
TaskHeader taskHeader = taskHeaderService.getOne(taskHeaderLambdaQueryWrapper);
|
|
899
|
if (taskHeader == null) {
|
|
900
901
|
throw new ServiceException("入库组盘明细对应换站任务不存在");
}
|
|
902
|
taskHeader.setBadQty(taskHeader.getBadQty() + receiptContainerDetails.size());
|
|
903
|
taskHeaderService.updateById(taskHeader);
|
|
904
905
906
907
908
909
910
911
|
materialCode = receiptContainerDetails.get(0).getMaterialCode();
level = receiptContainerDetails.get(0).getLevel();
color = receiptContainerDetails.get(0).getColor();
proPackaging = receiptContainerDetails.get(0).getProPackaging();
productSchedule = receiptContainerDetails.get(0).getProductSchedule();
batch = receiptContainerDetails.get(0).getBatch();
materialName = receiptContainerDetails.get(0).getMaterialName();
materialSpec = receiptContainerDetails.get(0).getMaterialSpec();
|
|
912
|
List<Integer> receiptContainerDetailIds = receiptContainerDetails.stream().map(ReceiptContainerDetail::getId).collect(Collectors.toList());
|
|
913
|
if (receiptContainerDetailIds.size() > 0) {
|
|
914
|
boolean result = receiptContainerDetailService.removeByIds(receiptContainerDetailIds);
|
|
915
|
if (!result) {
|
|
916
917
918
|
throw new ServiceException("删除入库组盘详情详情");
}
}
|
|
919
|
isZt = true;
|
|
920
921
|
}
|
|
922
923
|
boolean isPushCoding = false;
LambdaQueryWrapper<TaskHeader> taskHeaderLambdaQueryWrapper = Wrappers.lambdaQuery();
|
|
924
|
taskHeaderLambdaQueryWrapper.eq(TaskHeader::getContainerCode, containerCode).eq(TaskHeader::getStatus, QuantityConstant.TASK_STATUS_ARRIVED_STATION);
|
|
925
|
TaskHeader taskHeader = taskHeaderService.getOne(taskHeaderLambdaQueryWrapper);
|
|
926
|
if (taskHeader == null) {
|
|
927
928
|
throw new ServiceException("任务不存在");
}
|
|
929
930
|
taskHeader.setBack(0);
taskHeaderService.updateById(taskHeader);
|
|
931
|
if (taskHeader != null) {
|
|
932
933
934
|
long shipmentOrder = taskHeader.getShipmentOrder();
int sequenceNumber = taskHeader.getSequenceNumber();
LambdaQueryWrapper<TaskHeader> taskHeaderLambdaQueryWrapper1 = Wrappers.lambdaQuery();
|
|
935
936
|
taskHeaderLambdaQueryWrapper1.eq(TaskHeader::getShipmentOrder, shipmentOrder).eq(TaskHeader::getSequence, sequenceNumber).eq(TaskHeader::getMaterialCode,
materialCode);
|
|
937
|
TaskHeader taskHeader1 = taskHeaderService.getOne(taskHeaderLambdaQueryWrapper1);
|
|
938
|
|
|
939
|
// 查出明细表包含主表id的所有
|
|
940
|
LambdaQueryWrapper<InventoryDetail> inventoryDetailLambdaQueryWrapper1 = Wrappers.lambdaQuery();
|
|
941
942
|
inventoryDetailLambdaQueryWrapper1.eq(InventoryDetail::getContainerCode, taskHeader1.getContainerCode()).eq(InventoryDetail::getMaterialCode,
taskHeader1.getMaterialCode());
|
|
943
944
|
List<InventoryDetail> inventoryDetailList = inventoryDetailService.list(inventoryDetailLambdaQueryWrapper1);
|
|
945
946
947
948
949
|
String finalLevel = level;
String finalMaterialCode = materialCode;
String finalColor = color;
String finalBatch = batch;
String finalProPackaging = proPackaging;
|
|
950
951
952
953
954
|
List<InventoryDetail> details = inventoryDetailList.stream().filter(i -> i.getLevel().equals(finalLevel) && i.getMaterialCode().equals(finalMaterialCode)
&& i.getColor().equals(finalColor) && i.getBatch().equals(finalBatch) && i.getProPackaging().equals(finalProPackaging)).collect(Collectors.toList());
if (details.size() < 1) {
taskHeader1 = null;
|
|
955
956
|
}
|
|
957
|
if (taskHeader1 != null) {
|
|
958
|
int pushCoding = taskHeader1.getPushCoding();
|
|
959
|
LambdaQueryWrapper<InventoryHeader> inventoryHeaderLambdaQueryWrapper = Wrappers.lambdaQuery();
|
|
960
961
|
inventoryHeaderLambdaQueryWrapper.eq(InventoryHeader::getContainerCode, taskHeader1.getContainerCode());
InventoryHeader inventoryHeader = inventoryHeaderService.getOne(inventoryHeaderLambdaQueryWrapper);
|
|
962
|
int inventoryQty = 0;
|
|
963
|
if (inventoryHeader != null) {
|
|
964
965
|
inventoryQty = inventoryHeader.getBoxQty().intValue();
}
|
|
966
|
int qty = taskHeader1.getQty();
|
|
967
968
969
970
971
972
973
974
975
976
977
978
979
|
if (isZt != true) {
if (pushCoding == 0) {
qty = qty + 1;
if (qty <= inventoryQty) {
isPushCoding = true;
taskHeader1.setQty(qty);
taskHeaderService.updateById(taskHeader1);
}
} else {
qty = qty + 1;
if (qty > inventoryQty) {
isPushCoding = false;
}
|
|
980
981
|
}
} else {
|
|
982
983
|
isPushCoding = false;
}
|
|
984
985
986
987
988
989
990
|
}
}
LambdaQueryWrapper<ProPackaging> proPackagingLambdaQueryWrapper = Wrappers.lambdaQuery();
proPackagingLambdaQueryWrapper.eq(ProPackaging::getNumber, proPackaging);
ProPackaging proPackaging1 = proPackagingService.getOne(proPackagingLambdaQueryWrapper);
int pieceBox = proPackaging1.getPieceBox();
|
|
991
|
if (!isPushCoding) {
|
|
992
993
|
String shipmentCode = taskHeader.getShipmentCode();
LambdaQueryWrapper<ShipmentHeader> shipmentLambdaQueryWrapper = Wrappers.lambdaQuery();
|
|
994
995
|
shipmentLambdaQueryWrapper.eq(ShipmentHeader::getUserDef3, shipmentCode).eq(ShipmentHeader::getShipmentType, QuantityConstant.SHIPMENT_TYPE_BH)
.eq(ShipmentHeader::getLastStatus, QuantityConstant.SHIPMENT_HEADER_BUILD);
|
|
996
|
ShipmentHeader shipmentHeader = shipmentHeaderService.getOne(shipmentLambdaQueryWrapper);
|
|
997
|
if (shipmentHeader == null) {
|
|
998
|
String code = shipmentHeaderService.createCode(QuantityConstant.SHIPMENT_TYPE_BH);
|
|
999
|
shipmentHeader = new ShipmentHeader();
|
|
1000
|
shipmentHeader.setCode(code);
|
|
1001
1002
1003
|
shipmentHeader.setWarehouseCode(QuantityConstant.DEFAULT_WAREHOUSE);
shipmentHeader.setCompanyCode(QuantityConstant.DEFAULT_COMPANY);
shipmentHeader.setShipmentType(QuantityConstant.SHIPMENT_TYPE_BH);
|
|
1004
|
shipmentHeader.setTotalQty(new BigDecimal(pieceBox));
|
|
1005
|
shipmentHeader.setTotalWeight(BigDecimal.ZERO);
|
|
1006
|
shipmentHeader.setTotalLines(1);
|
|
1007
1008
1009
1010
1011
1012
|
shipmentHeader.setPriority(100);
shipmentHeader.setFirstStatus(0);
shipmentHeader.setLastStatus(0);
shipmentHeader.setCreatedBy("WMS");
shipmentHeader.setCreated(new Date());
shipmentHeader.setLastUpdated(new Date());
|
|
1013
1014
|
boolean result = shipmentHeaderService.save(shipmentHeader);
if (!result) {
|
|
1015
1016
|
throw new ServiceException("补货通知单生成失败");
}
|
|
1017
|
}
|
|
1018
|
if (shipmentHeader != null) {
|
|
1019
|
LambdaQueryWrapper<ShipmentDetail> shipmentDetailLambdaQueryWrapper = Wrappers.lambdaQuery();
|
|
1020
1021
1022
|
shipmentDetailLambdaQueryWrapper.eq(ShipmentDetail::getShipmentCode, shipmentHeader.getCode()).eq(ShipmentDetail::getMaterialCode, materialCode)
.eq(ShipmentDetail::getProPackaging, proPackaging).eq(ShipmentDetail::getLevel, level).eq(ShipmentDetail::getColor, color)
.eq(ShipmentDetail::getProductSchedule, productSchedule);
|
|
1023
|
ShipmentDetail shipmentDetail = shipmentDetailService.getOne(shipmentDetailLambdaQueryWrapper);
|
|
1024
|
if (shipmentDetail != null) {
|
|
1025
1026
1027
|
BigDecimal qty = shipmentDetail.getQty();
qty = qty.add(new BigDecimal(pieceBox));
shipmentDetail.setQty(qty);
|
|
1028
|
shipmentDetailService.updateById(shipmentDetail);
|
|
1029
1030
1031
|
} else {
shipmentDetail = new ShipmentDetail();
shipmentDetail.setShipmentId(shipmentHeader.getId());
|
|
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
|
shipmentDetail.setWarehouseCode(QuantityConstant.DEFAULT_WAREHOUSE);
shipmentDetail.setCompanyCode(QuantityConstant.DEFAULT_COMPANY);
shipmentDetail.setShipmentCode(shipmentHeader.getCode());
shipmentDetail.setMaterialCode(materialCode);
shipmentDetail.setMaterialName(materialName);
shipmentDetail.setMaterialSpec(materialSpec);
shipmentDetail.setMaterialUnit("1001");
shipmentDetail.setQty(new BigDecimal(pieceBox));
shipmentDetail.setBatch(batch);
shipmentDetail.setInventorySts("good");
|
|
1042
|
shipmentDetail.setProductSchedule(productSchedule);
|
|
1043
1044
1045
1046
1047
1048
1049
|
shipmentDetail.setStatus(0);
shipmentDetail.setCreated(DateUtils.getNowDate());
shipmentDetail.setProcessStamp(0 + "");
shipmentDetail.setProPackaging(proPackaging);
shipmentDetail.setColor(color);
shipmentDetail.setLevel(level);
boolean result = shipmentDetailService.save(shipmentDetail);
|
|
1050
|
if (!result) {
|
|
1051
1052
|
throw new ServiceException("补货通知单详情生成失败");
}
|
|
1053
1054
1055
|
}
}
|
|
1056
|
} else {
|
|
1057
|
LambdaQueryWrapper<ShipmentDetail> shipmentDetailLambdaQueryWrapper = Wrappers.lambdaQuery();
|
|
1058
1059
1060
|
shipmentDetailLambdaQueryWrapper.eq(ShipmentDetail::getShipmentCode, taskHeader.getShipmentCode()).eq(ShipmentDetail::getMaterialCode, materialCode)
.eq(ShipmentDetail::getLevel, level).eq(ShipmentDetail::getColor, color).eq(ShipmentDetail::getBatch, batch)
.eq(ShipmentDetail::getProductSchedule, productSchedule).eq(ShipmentDetail::getProPackaging, proPackaging);
|
|
1061
1062
1063
1064
|
ShipmentDetail shipmentDetail = shipmentDetailService.getOne(shipmentDetailLambdaQueryWrapper);
shipmentDetail.setTaskQty(shipmentDetail.getTaskQty().subtract(BigDecimal.valueOf(size)));
shipmentDetailService.updateById(shipmentDetail);
}
|
|
1065
|
|
|
1066
|
return AjaxResult.success("成功");
|
|
1067
|
}
|
|
1068
|
|
|
1069
1070
1071
|
@Override
public AjaxResult codeSubstitution(String boxCode, String toBoxCode, String containerCode) {
|
|
1072
|
// 1.备货区替换 找查备货区库存有没有对应箱码 没有就报错
|
|
1073
|
LambdaQueryWrapper<InventoryDetail> inventoryDetailLambdaQueryWrapper = Wrappers.lambdaQuery();
|
|
1074
1075
|
inventoryDetailLambdaQueryWrapper.eq(InventoryDetail::getZoneCode, QuantityConstant.ZONE_STOCK_UP).eq(InventoryDetail::getContainerCode, containerCode)
.eq(InventoryDetail::getBoxCode, boxCode);
|
|
1076
|
List<InventoryDetail> inventoryDetails = inventoryDetailService.list(inventoryDetailLambdaQueryWrapper);
|
|
1077
|
if (inventoryDetails.size() < 1) {
|
|
1078
1079
|
return AjaxResult.error("条码不存在于备货区 请到wms库存内确定下");
}
|
|
1080
|
for (InventoryDetail inventoryDetail : inventoryDetails) {
|
|
1081
1082
1083
1084
1085
1086
|
inventoryDetail.setBoxCode(toBoxCode);
inventoryDetailService.updateById(inventoryDetail);
}
return AjaxResult.success("替换成功");
}
|
|
1087
|
|
|
1088
|
@Override
|
|
1089
|
public AjaxResult inventory(String boxCode, String containerCode, String chipCode) {
|
|
1090
|
|
|
1091
|
// 先判断有没有这个对应的出库任务主表
|
|
1092
|
LambdaQueryWrapper<TaskHeader> taskHeaderLambdaQueryWrapper = Wrappers.lambdaQuery();
|
|
1093
1094
|
taskHeaderLambdaQueryWrapper.eq(TaskHeader::getContainerCode, containerCode).eq(TaskHeader::getTaskType, QuantityConstant.TASK_TYPE_CYCLECOUNT)
.ne(TaskHeader::getStatus, QuantityConstant.TASK_STATUS_COMPLETED);
|
|
1095
|
TaskHeader taskHeader = taskHeaderService.getOne(taskHeaderLambdaQueryWrapper);
|
|
1096
|
if (taskHeader == null) {
|
|
1097
|
return AjaxResult.error("任务不存在");
|
|
1098
1099
|
}
|
|
1100
|
// 如果没有就是新增的 库存添加
|
|
1101
|
LambdaQueryWrapper<InventoryDetail> inventoryDetailLambdaQueryWrapper = Wrappers.lambdaQuery();
|
|
1102
|
inventoryDetailLambdaQueryWrapper.eq(InventoryDetail::getContainerCode, taskHeader.getContainerCode());
|
|
1103
1104
|
List<InventoryDetail> inventoryDetails = inventoryDetailService.list(inventoryDetailLambdaQueryWrapper);
|
|
1105
1106
1107
1108
|
int 标识 = 0;
for (InventoryDetail inventoryDetail : inventoryDetails) {
if (inventoryDetail.getBoxCode().equals(boxCode)) {
标识 = 1;
|
|
1109
1110
1111
1112
1113
1114
1115
1116
1117
|
}
}
InventoryDetail inventoryDetail = inventoryDetails.get(0);
LambdaQueryWrapper<ProPackaging> proPackagingLambdaQueryWrapper = Wrappers.lambdaQuery();
proPackagingLambdaQueryWrapper.eq(ProPackaging::getNumber, inventoryDetail.getProPackaging());
ProPackaging proPackaging = proPackagingService.getOne(proPackagingLambdaQueryWrapper);
|
|
1118
|
// 1.判断明细有没有对应的
|
|
1119
|
LambdaQueryWrapper<TaskDetail> taskDetailLambdaQueryWrapper = Wrappers.lambdaQuery();
|
|
1120
|
taskDetailLambdaQueryWrapper.eq(TaskDetail::getTaskId, taskHeader.getId()).eq(TaskDetail::getBoxCode, boxCode);
|
|
1121
1122
|
List<TaskDetail> taskDetails = taskDetailService.list(taskDetailLambdaQueryWrapper);
|
|
1123
1124
|
if (taskDetails.size() < 1) {
if (标识 == 1) {
|
|
1125
1126
|
throw new ServiceException("请勿重复扫");
}
|
|
1127
|
if (chipCode.isEmpty()) {
|
|
1128
1129
|
throw new ServiceException("盘盈请手动输入片码");
}
|
|
1130
|
for (int i = 0; i < proPackaging.getPieceBox(); i++) {
|
|
1131
1132
|
inventoryDetail.setId(null);
inventoryDetail.setBoxCode(boxCode);
|
|
1133
1134
|
inventoryDetail.setChipCode1(chipCode);
inventoryDetail.setChipCode2("盘盈片码");
|
|
1135
1136
|
inventoryDetailService.save(inventoryDetail);
}
|
|
1137
1138
|
} else {
for (TaskDetail taskDetail : taskDetails) {
|
|
1139
1140
|
taskDetailService.removeById(taskDetail);
}
|
|
1141
1142
1143
1144
|
}
return AjaxResult.success("成功");
}
|
|
1145
1146
|
@Override
public AjaxResult boxCodeInsert(String boxCode, String toBoxCode) {
|
|
1147
|
|
|
1148
|
// 1.先在平库找到对应库存明细
|
|
1149
|
LambdaQueryWrapper<InventoryDetail> inventoryDetailLambdaQueryWrapper = Wrappers.lambdaQuery();
|
|
1150
|
inventoryDetailLambdaQueryWrapper.eq(InventoryDetail::getBoxCode, boxCode).eq(InventoryDetail::getZoneCode, QuantityConstant.ZONE_STOCK_UP)
|
|
1151
|
.eq(InventoryDetail::getUserDef1, "整箱出库");
|
|
1152
|
List<InventoryDetail> inventoryDetails = inventoryDetailService.list(inventoryDetailLambdaQueryWrapper);
|
|
1153
|
if (inventoryDetails.size() < 1) {
|
|
1154
1155
1156
1157
1158
|
return AjaxResult.error("没在平库找到您对应扫的箱码");
}
InventoryDetail inventoryDetail = inventoryDetails.get(0);
|
|
1159
|
// 查出这一箱是多少片 防止这一箱码反复出库找错
|
|
1160
1161
1162
1163
1164
1165
1166
1167
1168
|
LambdaQueryWrapper<ProPackaging> proPackagingLambdaQueryWrapper = Wrappers.lambdaQuery();
proPackagingLambdaQueryWrapper.eq(ProPackaging::getNumber, inventoryDetail.getProPackaging());
ProPackaging proPackaging = proPackingService.getOne(proPackagingLambdaQueryWrapper);
if (proPackaging == null) {
return AjaxResult.error("没有包装信息");
}
int pieceBox = proPackaging.getPieceBox();
LambdaQueryWrapper<InventoryHistoryDetail> inventoryHistoryDetailLambdaQueryWrapper = Wrappers.lambdaQuery();
|
|
1169
1170
|
inventoryHistoryDetailLambdaQueryWrapper.eq(InventoryHistoryDetail::getBoxCode, toBoxCode).orderByDesc(InventoryHistoryDetail::getId)
.last(" limit " + pieceBox);
|
|
1171
1172
|
List<InventoryHistoryDetail> inventoryHistoryDetails = inventoryHistoryDetailService.list(inventoryHistoryDetailLambdaQueryWrapper);
|
|
1173
|
for (InventoryHistoryDetail inventoryHistoryDetail : inventoryHistoryDetails) {
|
|
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
|
inventoryDetail.setId(null);
inventoryDetail.setBoxCode(inventoryHistoryDetail.getBoxCode());
inventoryDetail.setChipCode1(inventoryHistoryDetail.getChipCode1());
inventoryDetail.setMaterialName(inventoryHistoryDetail.getMaterialName());
inventoryDetail.setMaterialCode(inventoryHistoryDetail.getMaterialCode());
inventoryDetail.setMaterialSpec(inventoryHistoryDetail.getMaterialSpec());
inventoryDetail.setMaterialUnit(inventoryHistoryDetail.getMaterialUnit());
inventoryDetail.setColor(inventoryHistoryDetail.getColor());
inventoryDetail.setLevel(inventoryHistoryDetail.getLevel());
inventoryDetail.setBatch(inventoryHistoryDetail.getBatch());
inventoryDetail.setInventorySts(inventoryHistoryDetail.getInventorySts());
inventoryDetail.setProPackaging(inventoryHistoryDetail.getProPackaing());
inventoryDetail.setProductSchedule(inventoryHistoryDetail.getProductSchedule());
inventoryDetailService.save(inventoryDetail);
}
|
|
1189
|
|
|
1190
|
return AjaxResult.success("插入成功");
|
|
1191
1192
|
}
|
|
1193
|
@Override
|
|
1194
1195
1196
|
public AjaxResult bulkDelivery(String chipCode, String boxCode, String shipmentCode) {
// 根据库存明细找查 条件片码跟容器号 要防止有重复片码情况(补码跟退货入库不对可能造成 前端入库没验证要防止前端重复片码)
// 1.查询片码是否存在这个托盘,必须要存在才执行
|
|
1197
|
LambdaQueryWrapper<InventoryDetail> inventoryDetailLambdaQueryWrapper = Wrappers.lambdaQuery();
|
|
1198
|
inventoryDetailLambdaQueryWrapper.eq(InventoryDetail::getBoxCode, boxCode).eq(InventoryDetail::getChipCode1, chipCode).last("limit 1");
|
|
1199
|
InventoryDetail inventoryDetail = inventoryDetailService.getOne(inventoryDetailLambdaQueryWrapper);
|
|
1200
|
if (inventoryDetail == null) {
|
|
1201
|
return AjaxResult.error("库存明细里面没有这个对应的片码箱码");
|
|
1202
1203
|
}
|
|
1204
|
// 2.根据明细找到主表 主表数量减去箱数
|
|
1205
|
InventoryHeader inventoryHeader = inventoryHeaderService.getById(inventoryDetail.getInventoryHeaderId());
|
|
1206
|
if (inventoryHeader == null) {
|
|
1207
1208
1209
|
return AjaxResult.error("库存头不存在");
}
|
|
1210
|
// 5.1先查到任务 根据任务找到出库单
|
|
1211
|
LambdaQueryWrapper<TaskHeader> taskHeaderLambdaQueryWrapper = Wrappers.lambdaQuery();
|
|
1212
|
taskHeaderLambdaQueryWrapper.eq(TaskHeader::getShipmentCode, shipmentCode).ne(TaskHeader::getStatus, QuantityConstant.TASK_STATUS_COMPLETED).last("limit 1");
|
|
1213
1214
|
TaskHeader taskHeader = taskHeaderService.getOne(taskHeaderLambdaQueryWrapper);
|
|
1215
1216
1217
1218
1219
1220
1221
1222
1223
|
LambdaQueryWrapper<ProPackaging> proPackagingLambdaQueryWrapper = Wrappers.lambdaQuery();
proPackagingLambdaQueryWrapper.eq(ProPackaging::getNumber, inventoryHeader.getProPackaging());
ProPackaging proPackaging = proPackingService.getOne(proPackagingLambdaQueryWrapper);
if (proPackaging == null) {
return AjaxResult.error("没有包装信息");
}
int pieceBox = proPackaging.getPieceBox();
inventoryHeader.setBoxQty(inventoryHeader.getBoxQty().subtract(BigDecimal.valueOf(1)));
inventoryHeader.setTotalQty(inventoryHeader.getTotalQty().subtract(BigDecimal.valueOf(pieceBox)));
|
|
1224
|
inventoryHeader.setTotalLines(inventoryHeader.getTotalLines() - pieceBox);
|
|
1225
|
String code = MessageFormat.format("{0}{1}", "LT", String.format("%d", Calendar.getInstance().getTimeInMillis()));
|
|
1226
|
|
|
1227
1228
|
int inventoryid = inventoryHeader.getId();
if (inventoryHeader.getTotalQty().subtract(BigDecimal.valueOf(pieceBox)).compareTo(new BigDecimal(1)) == -1) {
|
|
1229
|
inventoryHeaderService.removeById(inventoryHeader);
|
|
1230
|
} else {
|
|
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
|
inventoryHeaderService.updateById(inventoryHeader);
inventoryHeader.setId(null);
inventoryHeader.setContainerCode(code);
inventoryHeader.setLocationCode(code);
inventoryHeader.setZoneCode(QuantityConstant.ZONE_E);
inventoryHeader.setBoxQty(BigDecimal.valueOf(0));
inventoryHeader.setTotalQty(BigDecimal.valueOf(pieceBox - 1));
inventoryHeader.setTotalLines(1);
inventoryHeader.setRoadWays("0");
inventoryHeader.setContainerStatus(QuantityConstant.STATUS_CONTAINER_SOME);
inventoryHeaderService.save(inventoryHeader);
}
|
|
1245
|
// 3.根据主表找查明细
|
|
1246
|
LambdaQueryWrapper<InventoryDetail> inventoryDetailLambdaQueryWrapper1 = Wrappers.lambdaQuery();
|
|
1247
|
inventoryDetailLambdaQueryWrapper1.eq(InventoryDetail::getInventoryHeaderId, inventoryid).eq(InventoryDetail::getBoxCode, inventoryDetail.getBoxCode());
|
|
1248
1249
|
List<InventoryDetail> inventoryDetails = inventoryDetailService.list(inventoryDetailLambdaQueryWrapper1);
|
|
1250
|
// 4.去除主表id 库位 容器 状态 库区保存
|
|
1251
1252
1253
1254
1255
1256
|
// 5.删除刚刚那个1步查出片码的 写入为第4步的主表
inventoryDetails.removeIf(inventoryDetail1 -> inventoryDetail1.getId().equals(inventoryDetail.getId()));
inventoryDetailService.removeById(inventoryDetail.getId());
for (InventoryDetail inventoryDetail1 : inventoryDetails) {
inventoryDetail1.setInventoryHeaderId(inventoryHeader.getId());
|
|
1257
1258
|
inventoryDetail1.setLocationCode(code);
inventoryDetail1.setContainerCode(code);
|
|
1259
1260
1261
|
inventoryDetailService.updateById(inventoryDetail1);
}
|
|
1262
|
// 5.出库单 调拨单数量+1 修改状态
|
|
1263
|
|
|
1264
|
// 5.2查询出库单
|
|
1265
|
LambdaQueryWrapper<ShipmentDetail> shipmentDetailLambdaQueryWrapper = Wrappers.lambdaQuery();
|
|
1266
1267
1268
1269
|
shipmentDetailLambdaQueryWrapper.eq(ShipmentDetail::getShipmentCode, shipmentCode).eq(ShipmentDetail::getMaterialCode, inventoryHeader.getMaterialCode())
.eq(ShipmentDetail::getMaterialName, inventoryHeader.getMaterialName()).eq(ShipmentDetail::getBatch, inventoryHeader.getBatch())
.eq(ShipmentDetail::getProPackaging, inventoryHeader.getProPackaging()).eq(ShipmentDetail::getProductSchedule, inventoryHeader.getProductSchedule())
.eq(ShipmentDetail::getLevel, inventoryHeader.getLevel()).eq(ShipmentDetail::getColor, inventoryHeader.getColor());
|
|
1270
1271
1272
1273
1274
|
ShipmentDetail shipmentDetail = shipmentDetailService.getOne(shipmentDetailLambdaQueryWrapper);
shipmentDetail.setTaskQty(shipmentDetail.getTaskQty().add(BigDecimal.valueOf(1)));
shipmentDetailService.updateById(shipmentDetail);
ShipmentHeader shipmentHeader = shipmentHeaderService.getById(shipmentDetail.getShipmentId());
|
|
1275
|
|
|
1276
|
if (shipmentHeader.getLastStatus() >= QuantityConstant.RECEIPT_HEADER_POSTING) {
|
|
1277
1278
1279
|
throw new ServiceException("当前订单状态不可出散片");
}
|
|
1280
|
LambdaQueryWrapper<ShipmentDetail> shipmentDetailLambdaQueryWrapper1 = Wrappers.lambdaQuery();
|
|
1281
|
shipmentDetailLambdaQueryWrapper1.eq(ShipmentDetail::getShipmentCode, shipmentCode);
|
|
1282
1283
|
List<ShipmentDetail> shipmentDetailList = shipmentDetailService.list(shipmentDetailLambdaQueryWrapper1);
|
|
1284
1285
1286
1287
|
int 标识9 = 0;
for (ShipmentDetail shipment : shipmentDetailList) {
if (shipment.getQty().compareTo(shipment.getTaskQty()) != 0) {
标识9 = 1;
|
|
1288
1289
1290
|
}
}
|
|
1291
|
if (标识9 == 0) {
|
|
1292
1293
1294
1295
|
shipmentHeader.setLastStatus(QuantityConstant.SHIPMENT_HEADER_COMPLETED);
shipmentHeader.setFirstStatus(QuantityConstant.SHIPMENT_HEADER_COMPLETED);
shipmentHeaderService.updateById(shipmentHeader);
}
|
|
1296
|
|
|
1297
|
// 5.3查询入库单
|
|
1298
|
LambdaQueryWrapper<ReceiptHeader> receiptHeaderLambda = Wrappers.lambdaQuery();
|
|
1299
|
receiptHeaderLambda.eq(ReceiptHeader::getShipmentCode, shipmentCode).eq(ReceiptHeader::getReceiptType, QuantityConstant.RECEIPT_TYPE_DIRECT_TRANSGER);
|
|
1300
1301
|
ReceiptHeader receiptHeader = receiptHeaderService.getOne(receiptHeaderLambda);
|
|
1302
|
ReceiptDetail receiptDetail = new ReceiptDetail();
|
|
1303
|
|
|
1304
|
if (receiptHeader == null && inventoryDetail.getQty().intValue() == 1) {
|
|
1305
|
AjaxResult result = receiptHeaderService.createDirectTransferReceipt(shipmentHeader);
|
|
1306
|
ReceiptHeader receiptHeader1 = receiptHeaderService.getById((int)result.getData());
|
|
1307
|
receiptHeader = receiptHeader1;
|
|
1308
|
LambdaQueryWrapper<ReceiptDetail> receiptDetailLambdaQueryWrapper = Wrappers.lambdaQuery();
|
|
1309
|
receiptDetailLambdaQueryWrapper.eq(ReceiptDetail::getReceiptId, receiptHeader1.getId()).last(" limit 1");
|
|
1310
|
receiptDetail = receiptDetailService.getOne(receiptDetailLambdaQueryWrapper);
|
|
1311
|
|
|
1312
1313
1314
1315
|
int 标识2 = 0;
for (ShipmentDetail shipment : shipmentDetailList) {
if (shipment.getQty().compareTo(shipment.getTaskQty()) != 0) {
标识2 = 1;
|
|
1316
1317
1318
1319
|
}
}
|
|
1320
1321
|
if (标识2 == 0) {
if (receiptHeader1.getLastStatus().intValue() < QuantityConstant.RECEIPT_HEADER_POSTING) {
|
|
1322
1323
1324
1325
|
receiptHeader1.setLastStatus(QuantityConstant.RECEIPT_HEADER_POSTING);
receiptHeader1.setFirstStatus(QuantityConstant.RECEIPT_HEADER_POSTING);
receiptHeaderService.updateById(receiptHeader1);
}
|
|
1326
|
}
|
|
1327
|
|
|
1328
|
} else {
|
|
1329
|
LambdaQueryWrapper<ReceiptDetail> receiptDetailLambdaQueryWrapper = Wrappers.lambdaQuery();
|
|
1330
|
receiptDetailLambdaQueryWrapper.eq(ReceiptDetail::getMaterialCode, inventoryHeader.getMaterialCode())
|
|
1331
1332
1333
|
.eq(ReceiptDetail::getMaterialName, inventoryHeader.getMaterialName()).eq(ReceiptDetail::getBatch, inventoryHeader.getBatch())
.eq(ReceiptDetail::getProPackaging, inventoryHeader.getProPackaging()).eq(ReceiptDetail::getProductSchedule, inventoryHeader.getProductSchedule())
.eq(ReceiptDetail::getLevel, inventoryHeader.getLevel()).eq(ReceiptDetail::getReceiptId, receiptHeader.getId());
|
|
1334
1335
1336
1337
|
receiptDetail = receiptDetailService.getOne(receiptDetailLambdaQueryWrapper);
receiptDetail.setTaskQty(receiptDetail.getTaskQty().add(BigDecimal.valueOf(1)));
receiptDetailService.updateById(receiptDetail);
|
|
1338
1339
|
LambdaQueryWrapper<ReceiptDetail> receiptDetailLambdaQueryWrapper1 = Wrappers.lambdaQuery();
|
|
1340
|
receiptDetailLambdaQueryWrapper1.eq(ReceiptDetail::getReceiptId, receiptHeader.getId());
|
|
1341
1342
|
List<ReceiptDetail> details = receiptDetailService.list(receiptDetailLambdaQueryWrapper1);
|
|
1343
1344
1345
1346
|
int 标识1 = 0;
for (ReceiptDetail receiptDetail2 : details) {
if (receiptDetail2.getQty().compareTo(receiptDetail2.getTaskQty()) != 0) {
标识1 = 1;
|
|
1347
1348
|
}
}
|
|
1349
1350
|
if (标识1 == 0) {
if (receiptHeader.getLastStatus().intValue() < QuantityConstant.RECEIPT_HEADER_POSTING) {
|
|
1351
1352
1353
1354
|
receiptHeader.setLastStatus(QuantityConstant.RECEIPT_HEADER_POSTING);
receiptHeader.setFirstStatus(QuantityConstant.RECEIPT_HEADER_POSTING);
receiptHeaderService.updateById(receiptHeader);
}
|
|
1355
|
}
|
|
1356
|
|
|
1357
1358
|
}
|
|
1359
|
if (receiptHeader.getLastStatus().equals(QuantityConstant.RECEIPT_HEADER_POSTING)) {
|
|
1360
1361
|
pdaService.createSPShipment(Collections.singletonList(shipmentHeader));
}
|
|
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
|
InventoryHistoryHeader inventoryHistoryHandler = new InventoryHistoryHeader();
inventoryHistoryHandler.setId(inventoryHeader.getId());
inventoryHistoryHandler.setContainerCode(inventoryHeader.getContainerCode());
inventoryHistoryHandler.setWarehouseCode(inventoryHeader.getWarehouseCode());
inventoryHistoryHandler.setLocationCode(inventoryHeader.getLocationCode());
inventoryHistoryHandler.setZoneCode(inventoryHeader.getZoneCode());
inventoryHistoryHandler.setContainerStatus(inventoryHeader.getContainerStatus());
inventoryHistoryHandler.setCompanyCode(inventoryHeader.getCompanyCode());
inventoryHistoryHandler.setStack(inventoryHeader.getStack());
inventoryHistoryHandler.setMaterialCode(inventoryHeader.getMaterialCode());
inventoryHistoryHandler.setMaterialName(inventoryHeader.getMaterialName());
inventoryHistoryHandler.setMaterialSpec(inventoryHeader.getMaterialSpec());
inventoryHistoryHandler.setMaterialUnit(inventoryHeader.getMaterialUnit());
inventoryHistoryHandler.setLevel(inventoryHeader.getLevel());
inventoryHistoryHandler.setColor(inventoryHeader.getColor());
inventoryHistoryHandler.setProPackaging(inventoryHeader.getProPackaging());
inventoryHistoryHandler.setProductSchedule(inventoryHeader.getProductSchedule());
inventoryHistoryHandler.setBatch(inventoryHeader.getBatch());
inventoryHistoryHandler.setReceiptCode(receiptHeader.getCode());
inventoryHistoryHandler.setShipmentCode(shipmentHeader.getCode());
inventoryHistoryHandler.setOrderCode(shipmentHeader.getReferCode());
inventoryHistoryHandler.setOrderName(shipmentHeader.getCustomerName());
inventoryHistoryHandler.setTotalQty(BigDecimal.ZERO);
inventoryHistoryHandler.setTotalLines(0);
inventoryHistoryHandler.setUserDef1("销售出库");
inventoryHistoryHeaderService.save(inventoryHistoryHandler);
|
|
1389
|
// 6.出库的单片插入到追溯表
|
|
1390
1391
1392
1393
|
InventoryHistoryDetail inventoryHistoryDetail = new InventoryHistoryDetail();
inventoryHistoryDetail.setInventoryHistoryHeaderId(inventoryHistoryHandler.getId());
inventoryHistoryDetail.setWarehouseCode("CS0001");
inventoryHistoryDetail.setZoneCode("D");
|
|
1394
|
inventoryHistoryDetail.setContainerCode(inventoryDetail.getContainerCode());
|
|
1395
|
if (taskHeader != null) {
|
|
1396
|
inventoryHistoryDetail.setLocationCode(taskHeader.getFromLocation());
|
|
1397
|
} else {
|
|
1398
1399
|
inventoryHistoryDetail.setLocationCode("散片区E");
}
|
|
1400
1401
1402
1403
1404
1405
1406
|
inventoryHistoryDetail.setCompanyCode(QuantityConstant.DEFAULT_COMPANY);
inventoryHistoryDetail.setChipCode1(inventoryDetail.getChipCode1());
inventoryHistoryDetail.setMaterialCode(inventoryDetail.getMaterialCode());
inventoryHistoryDetail.setMaterialName(inventoryDetail.getMaterialName());
inventoryHistoryDetail.setMaterialSpec(inventoryDetail.getMaterialSpec());
inventoryHistoryDetail.setMaterialUnit(inventoryDetail.getMaterialUnit());
inventoryHistoryDetail.setProPackaing(inventoryDetail.getProPackaging());
|
|
1407
1408
1409
1410
|
inventoryHistoryDetail.setProductSchedule(inventoryDetail.getProductSchedule());// 排产订单
inventoryHistoryDetail.setProductSize(inventoryDetail.getProductSize());// 产品规格
inventoryHistoryDetail.setLevel(inventoryDetail.getLevel());// 等级
inventoryHistoryDetail.setColor(inventoryDetail.getColor());// 色号
|
|
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
|
inventoryHistoryDetail.setQty(BigDecimal.ONE);
inventoryHistoryDetail.setTaskQty(BigDecimal.ZERO);
inventoryHistoryDetail.setBatch(inventoryDetail.getBatch());
inventoryHistoryDetail.setReceiptCode(inventoryDetail.getReceiptCode());
inventoryHistoryDetail.setBoxCode(inventoryDetail.getBoxCode());
inventoryHistoryDetail.setInventorySts(QuantityConstant.QUALITY_GOOD);
inventoryHistoryDetail.setCreatedBy(QuantityConstant.PLATFORM_WMS);
inventoryHistoryDetail.setLastUpdatedBy(QuantityConstant.PLATFORM_WMS);
inventoryHistoryDetail.setReceiptDetailId(receiptDetail.getId());
inventoryHistoryDetail.setUserDef1("退货入库");
inventoryHistoryDetailService.save(inventoryHistoryDetail);
|
|
1422
|
return AjaxResult.success("单片出库成功");
|
|
1423
1424
|
}
|
|
1425
1426
|
@Override
public AjaxResult chipCode(String boxCode) {
|
|
1427
|
// 1.立库 或 平库
|
|
1428
1429
1430
|
LambdaQueryWrapper<InventoryDetail> inventoryDetailLambdaQueryWrapper = Wrappers.lambdaQuery();
inventoryDetailLambdaQueryWrapper.eq(InventoryDetail::getBoxCode, boxCode);
List<InventoryDetail> inventoryDetails = inventoryDetailService.list(inventoryDetailLambdaQueryWrapper);
|
|
1431
|
if (inventoryDetails.size() > 0) {
|
|
1432
1433
1434
1435
|
List<String> ChipS = inventoryDetails.stream().map(t -> t.getChipCode1()).distinct().collect(Collectors.toList());
return AjaxResult.success(ChipS);
}
|
|
1436
|
// 2.出库缓存表
|
|
1437
|
LambdaQueryWrapper<InventoryHistoryDetail> inventoryHistoryDetailLambdaQueryWrapper = Wrappers.lambdaQuery();
|
|
1438
|
inventoryHistoryDetailLambdaQueryWrapper.eq(InventoryHistoryDetail::getBoxCode, boxCode);
|
|
1439
|
List<InventoryHistoryDetail> inventoryHistoryDetails = inventoryHistoryDetailService.list(inventoryHistoryDetailLambdaQueryWrapper);
|
|
1440
|
if (inventoryHistoryDetails.size() > 0) {
|
|
1441
1442
1443
1444
1445
1446
1447
|
List<String> ChipS = inventoryHistoryDetails.stream().map(t -> t.getChipCode1()).distinct().collect(Collectors.toList());
return AjaxResult.success(ChipS);
}
return AjaxResult.error("没有查到对应片码");
}
|
|
1448
1449
1450
|
@Override
public AjaxResult goOnline(String port, String barcode) {
Map<String, Object> paramMap = new HashMap();
|
|
1451
1452
|
paramMap.put("port", port);
paramMap.put("barcode", barcode);
|
|
1453
|
String jsonParam = JSON.toJSONString(paramMap);
|
|
1454
|
String url = addressService.selectAddress(QuantityConstant.WCS_PUSH_ARTIFICIAL);
|
|
1455
|
String result = OkHttpUtils.bodypost(url, jsonParam);
|
|
1456
|
if (com.huaheng.common.utils.StringUtils.isEmpty(result)) {
|
|
1457
1458
1459
|
throw new ServiceException("接口地址错误或返回为空");
}
AjaxResult ajaxResult = JSON.parseObject(result, AjaxResult.class);
|
|
1460
|
if (ajaxResult.getCode() != HttpConstant.OK) {
|
|
1461
1462
|
return AjaxResult.error(ajaxResult.getMsg());
}
|
|
1463
|
return AjaxResult.success("请求wcs成功");
|
|
1464
1465
|
}
|
|
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
|
// @Override
// public AjaxResult generateDoc(String boxCode, String containerCode) {
// //出砖
// //1.新建出库单
//
// ShipmentHeader shipmentHeader=new ShipmentHeader();
// shipmentHeader.setCompanyCode(QuantityConstant.DEFAULT_COMPANY);
// shipmentHeader.setShipmentType(QuantityConstant.SHIPMENT_TYPE_BH);
// shipmentHeader.setWarehouseCode(QuantityConstant.DEFAULT_WAREHOUSE);
// String code = shipmentHeaderService.createCode(shipmentHeader.getShipmentType());
// shipmentHeader.setId(null);
// shipmentHeader.setLastUpdated(null);
// shipmentHeader.setLastUpdatedBy("WMS");
// shipmentHeader.setFirstStatus(0);
// shipmentHeader.setLastStatus(0);
// shipmentHeader.setCreated(null);
// shipmentHeader.setCreatedBy("WMS");
// shipmentHeader.setCode(code);
// boolean result = shipmentHeaderService.save(shipmentHeader);
//
// ShipmentDetail shipmentDetail=new ShipmentDetail();
// shipmentDetail.setId(null);
// shipmentDetail.setShipmentId(shipmentHeader.getId());
// shipmentDetail.setWarehouseCode(QuantityConstant.DEFAULT_WAREHOUSE);
// shipmentDetail.setCompanyCode(QuantityConstant.DEFAULT_COMPANY);
// shipmentDetail.setShipmentCode(shipmentHeader.getCode());
// shipmentDetail.setMaterialCode(materialCode);
// shipmentDetail.setQty(BigDecimal.valueOf(1));
// shipmentDetail.setBatch(batch);
// shipmentDetail.setInventorySts(QuantityConstant.QUALITY_GOOD);
// shipmentDetail.setProPackaging(proPackaging);
// shipmentDetail.setProductSchedule(productSchedule);
// shipmentDetail.setLevel(level);
// shipmentDetail.setColor(color);
// shipmentDetail.setMaterialSpec(materialSpec);
// shipmentDetail.setMaterialName(materialName);
// boolean save = shipmentDetailService.save(shipmentDetail);
//
//
//
// int lastStatus = shipmentHeader.getLastStatus();
// if(lastStatus == QuantityConstant.SHIPMENT_HEADER_SHIPPING) {
// return AjaxResult.error("出库单正在出库中");
// }
// LambdaQueryWrapper<ShipmentDetail> shipmentDetailLambdaQueryWrapper = Wrappers.lambdaQuery();
// shipmentDetailLambdaQueryWrapper.eq(ShipmentDetail::getShipmentId, shipmentHeader.getId());
// List<ShipmentDetail> shipmentDetailList = shipmentDetailService.list(shipmentDetailLambdaQueryWrapper);
// if(shipmentDetailList.size() == 0) {
// return AjaxResult.error("根据出库单,没有找到出库单详情");
// }
// AjaxResult ajaxResult = shipmentContainerHeaderService.autoShipmentCombination(shipmentDetailList);
// if(ajaxResult.hasErr()) {
// return ajaxResult;
// }
//
// List<Integer> list = (List<Integer>)ajaxResult.getData();
// list = list.stream().distinct().collect(Collectors.toList());
// if(list.size() == 0) {
// return AjaxResult.error("出库单已经出库完毕");
// }
// long shipmentOrder = System.currentTimeMillis();
// int sequenceNumber = list.size();
// int sequence = 0;
// for(int id : list) {
// sequence++;
// ShipmentContainerHeader shipmentContainerHeader = shipmentContainerHeaderService.getById(id);
// if(shipmentContainerHeader == null) {
// throw new ServiceException("没有找到出库表头:" + id);
// }
// shipmentContainerHeader.setPortGroup(QuantityConstant.PORTGROUP_P10);
// shipmentContainerHeaderService.updateById(shipmentContainerHeader);
// AjaxResult ajaxResults = shipmentTaskService.createSortingShipmentTaskFromShipmentContainer(
// id, shipmentOrder, sequence, sequenceNumber);
// if (ajaxResults.hasErr()) {
// throw new ServiceException("任务生成失败");
// }
// Object data = ajaxResults.getData();
// int i = Integer.parseInt(data.toString());
// TaskHeader taskHeader = taskHeaderService.getById(Integer.parseInt(data.toString()));
// taskHeader.setShipmentOrder(taskHeader.getShipmentOrder()-1000000000);
// taskHeader.setPriority(9999);
// taskHeaderService.updateById(taskHeader);
// }
// shipmentHeader.setFirstStatus(QuantityConstant.SHIPMENT_HEADER_SHIPPING);
// shipmentHeader.setLastStatus(QuantityConstant.SHIPMENT_HEADER_SHIPPING);
// shipmentHeaderService.updateById(shipmentHeader);
//
// return AjaxResult.success("处理成功");
// }
|
|
1556
|
}
|