|
1
2
3
4
|
package com.huaheng.pc.task.taskHeader.service;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
|
5
|
import com.huaheng.api.wcs.domain.TaskReceiptCompleteDomain;
|
|
6
|
import com.huaheng.api.wcs.service.warecellAllocation.WarecellAllocationService;
|
|
7
8
9
|
import com.huaheng.common.constant.QuantityConstant;
import com.huaheng.common.exception.service.ServiceException;
import com.huaheng.common.utils.StringUtils;
|
|
10
|
import com.huaheng.common.utils.Wrappers;
|
|
11
12
13
14
15
16
|
import com.huaheng.common.utils.security.ShiroUtils;
import com.huaheng.framework.web.domain.AjaxResult;
import com.huaheng.pc.config.container.domain.Container;
import com.huaheng.pc.config.container.service.ContainerService;
import com.huaheng.pc.config.location.domain.Location;
import com.huaheng.pc.config.location.service.LocationService;
|
|
17
18
19
20
|
import com.huaheng.pc.config.material.domain.Material;
import com.huaheng.pc.config.material.service.MaterialService;
import com.huaheng.pc.config.materialMultiple.domain.MaterialMultiple;
import com.huaheng.pc.config.materialMultiple.service.MaterialMultipleServiceImpl;
|
|
21
|
import com.huaheng.pc.config.materialWarnning.service.IMaterialWarningService;
|
|
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
import com.huaheng.pc.inventory.inventoryDetail.domain.InventoryDetail;
import com.huaheng.pc.inventory.inventoryDetail.service.InventoryDetailService;
import com.huaheng.pc.inventory.inventoryHeader.domain.InventoryHeader;
import com.huaheng.pc.inventory.inventoryHeader.service.InventoryHeaderService;
import com.huaheng.pc.inventory.inventoryTransaction.domain.InventoryTransaction;
import com.huaheng.pc.inventory.inventoryTransaction.service.InventoryTransactionService;
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;
import com.huaheng.pc.task.taskDetail.domain.TaskDetail;
import com.huaheng.pc.task.taskDetail.service.TaskDetailService;
import com.huaheng.pc.task.taskHeader.domain.TaskHeader;
|
|
39
|
import com.huaheng.pc.task.taskHeader.mapper.TaskHeaderMapper;
|
|
40
41
42
43
44
|
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.math.BigDecimal;
|
|
45
46
|
import java.text.MessageFormat;
import java.util.*;
|
|
47
48
49
|
/**
* 入库任务创建和完成
|
|
50
|
*
|
|
51
|
* @author mahua
|
|
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
|
* @date 2020/7/6
*/
@Service
public class ReceiptTaskService {
@Resource
private TaskHeaderService taskHeaderService;
@Resource
private TaskDetailService taskDetailService;
@Resource
private InventoryHeaderService inventoryHeaderService;
@Resource
private InventoryDetailService inventoryDetailService;
@Resource
private InventoryTransactionService inventoryTransactionService;
@Resource
private ReceiptHeaderService receiptHeaderService;
@Resource
private ReceiptDetailService receiptDetailService;
@Resource
private ReceiptContainerDetailService receiptContainerDetailService;
@Resource
private ReceiptContainerHeaderService receiptContainerHeaderService;
@Resource
|
|
76
77
|
private TaskHeaderMapper taskHeaderMapper;
@Resource
|
|
78
79
80
|
private ContainerService containerService;
@Resource
private LocationService locationService;
|
|
81
82
83
84
|
@Resource
private MaterialService materialService;
@Resource
private MaterialMultipleServiceImpl materialMultipleService;
|
|
85
86
|
@Resource
private IMaterialWarningService materialWarningService;
|
|
87
88
|
@Resource
private WarecellAllocationService warecellAllocationService;
|
|
89
90
|
@Resource
private BackInvokeService backInvokeService;
|
|
91
92
93
94
95
|
/**
* 创建入库任务(整盘入库、补充入库)
*
* @param ids 入库组盘头表id
|
|
96
|
* @return AjaxResult 创建结果
|
|
97
98
99
|
*/
@Transactional(rollbackFor = Exception.class)
public AjaxResult createReceiptTask(List<Integer> ids) {
|
|
100
|
List<String> taskIds = new ArrayList<>();
|
|
101
102
|
for (Integer id : ids) {
ReceiptContainerHeader receiptContainerHeader = receiptContainerHeaderService.getById(id);
|
|
103
|
//检查组盘信息,托盘是否锁定,锁定容器,检查组盘明细
|
|
104
|
checkReceiptTask(receiptContainerHeader, id);
|
|
105
|
//查询入库组盘明细
|
|
106
|
LambdaQueryWrapper<ReceiptContainerDetail> lam = Wrappers.lambdaQuery();
|
|
107
108
|
lam.eq(ReceiptContainerDetail::getReceiptContainerId, id);
lam.lt(ReceiptContainerDetail::getStatus, QuantityConstant.RECEIPT_CONTAINER_TASK);
|
|
109
110
|
List<ReceiptContainerDetail> list = receiptContainerDetailService.list(lam);
// List<ReceiptContainerDetail> list = receiptContainerDetailService.getReceiptContainerDetailByHeaderId(id);
|
|
111
112
113
|
if (list.isEmpty()) {
throw new ServiceException("id:" + id + "的入库组盘,没有组盘明细,请先组盘!");
}
|
|
114
115
116
|
String containerCode = receiptContainerHeader.getContainerCode();
Container container = containerService.getContainerByCode(containerCode);
|
|
117
|
if (StringUtils.isNotNull(container) && ("D".equals(container.getContainerType()) || "A".equals(container.getContainerType()))) {
|
|
118
119
120
121
122
123
124
125
126
127
|
receiptContainerHeader.setToLocation(container.getLocationCode());
receiptContainerHeader.setFromLocation(container.getLocationCode());
receiptContainerHeader.setTaskType(QuantityConstant.TASK_TYPE_SUPPLEMENTRECEIPT);
receiptContainerHeaderService.updateById(receiptContainerHeader);
for (ReceiptContainerDetail receiptContainerDetail : list) {
receiptContainerDetail.setLocationCode(container.getLocationCode());
receiptContainerDetail.setTaskType(QuantityConstant.TASK_TYPE_SUPPLEMENTRECEIPT);
}
receiptContainerDetailService.updateBatchById(list);
}
|
|
128
129
|
//检查库位容器,修改状态
checkLocationContainer(receiptContainerHeader);
|
|
130
|
if (receiptContainerHeader.getStatus() <= QuantityConstant.RECEIPT_CONTAINER_TASK.intValue()) {
|
|
131
132
133
134
135
|
if (receiptContainerHeader.getStatus() < QuantityConstant.RECEIPT_CONTAINER_TASK) {
receiptContainerHeader.setStatus(QuantityConstant.RECEIPT_CONTAINER_TASK);
receiptContainerHeaderService.updateById(receiptContainerHeader);
}
//添加任务主表
|
|
136
|
TaskHeader task = taskHeaderService.createTaskByReceipt(receiptContainerHeader);
|
|
137
138
|
LambdaQueryWrapper<TaskHeader> lambdaQuery = Wrappers.lambdaQuery();
lambdaQuery.lt(TaskHeader::getStatus, QuantityConstant.TASK_STATUS_COMPLETED);
|
|
139
140
|
lambdaQuery.eq(TaskHeader::getContainerCode, containerCode);
lambdaQuery.eq(TaskHeader::getInternalTaskType, 100);
|
|
141
142
|
lambdaQuery.last("limit 1");
lambdaQuery.orderByDesc(TaskHeader::getId);
|
|
143
144
145
|
TaskHeader taskHeader = taskHeaderService.getOne(lambdaQuery);
if (taskHeader != null) {
task = taskHeader;
|
|
146
|
}
|
|
147
|
task.setGoodsShelfNo(container.getGoodsShelfNo());
|
|
148
149
|
if (task.getWarehouseCode().equals(QuantityConstant.WAREHOUSE_CS) && containerCode.startsWith("S")) {
task.setPort("P1004");
|
|
150
|
}
|
|
151
|
if (taskHeaderService.saveOrUpdate(task)) {
|
|
152
153
|
//添加任务明细表
for (ReceiptContainerDetail item : list) {
|
|
154
|
// 保存任务详情
|
|
155
|
taskDetailService.createTaskDetailByReceipt(task, item);
|
|
156
157
158
159
160
161
162
|
//更新入库组盘明细状态
item.setStatus(QuantityConstant.RECEIPT_CONTAINER_TASK);
if (!receiptContainerDetailService.updateById(item)) {
throw new ServiceException("更新入库组盘明细状态出错");
}
|
|
163
|
/* 修改明细状态为上架*/
|
|
164
165
166
167
168
169
170
171
|
ReceiptDetail receiptDetail = receiptDetailService.getById(item.getReceiptDetailId());
receiptDetail.setProcessStamp(String.valueOf(QuantityConstant.RECEIPT_HEADER_SHELF));
if (!receiptDetailService.updateById(receiptDetail)) {
throw new ServiceException("更新入库单详情失败");
}
//更新头表状态
receiptDetailService.updateReceiptHeaderLastStatus(receiptDetail.getReceiptId());
}
|
|
172
173
|
String taskId = String.valueOf(task.getId());
taskIds.add(taskId);
|
|
174
|
//昆山pk库区和xn库区直接完成任务
|
|
175
176
|
if (task.getWarehouseCode().equals(QuantityConstant.WAREHOUSE_KS)) {
if (task.getZoneCode().equals("PK") || task.getZoneCode().equals("XN")) {
|
|
177
|
AjaxResult ajaxResult = taskHeaderService.completeTask(task);
|
|
178
179
|
if (!ajaxResult.hasErr()) {
try {
|
|
180
|
backInvokeService.invokeBack(Integer.valueOf(task.getId()));
|
|
181
|
} catch (Exception e) {
|
|
182
183
184
185
|
e.printStackTrace();
}
}
|
|
186
187
|
}
}
|
|
188
189
190
191
192
|
} else {
throw new ServiceException("任务生成失败");
}
}
}
|
|
193
|
return AjaxResult.success("生成上架任务成功").setData(taskIds);
|
|
194
|
}
|
|
195
196
197
198
199
|
/**
* 检查组盘信息,托盘是否锁定,锁定容器,检查组盘明细
*/
public void checkReceiptTask(ReceiptContainerHeader receiptContainerHeader, Integer id) {
|
|
200
201
202
203
204
205
206
|
if (receiptContainerHeader == null) {
throw new ServiceException("id:" + id + "的入库组盘不存在!");
}
if (!receiptContainerHeader.getWarehouseCode().equals(ShiroUtils.getWarehouseCode())) {
throw new ServiceException("id:" + id + "的入库组盘不能在" + ShiroUtils.getWarehouseCode() + "仓库操作");
}
Container container = containerService.getContainerByCode(receiptContainerHeader.getContainerCode());
|
|
207
|
if (container.getStatus().equals(QuantityConstant.STATUS_CONTAINER_LOCK)) {
|
|
208
|
// throw new ServiceException("托盘已经锁定,不能生成任务,托盘号:"+receiptContainerHeader.getContainerCode());
|
|
209
210
211
212
213
|
}
//锁定容器
containerService.updateStatus(receiptContainerHeader.getContainerCode(),
QuantityConstant.STATUS_CONTAINER_LOCK, container.getWarehouseCode());
}
|
|
214
215
216
217
218
219
|
/**
* 检查库位容器,修改状态
*/
public void checkLocationContainer(ReceiptContainerHeader receiptContainerHeader) {
if (StringUtils.isNotEmpty(receiptContainerHeader.getFromLocation())) {
|
|
220
221
222
223
|
locationService.updateStatus(receiptContainerHeader.getFromLocation(),
QuantityConstant.STATUS_LOCATION_LOCK);
}
String locationCode = receiptContainerHeader.getToLocation();
|
|
224
|
if (StringUtils.isNotEmpty(locationCode)) {
|
|
225
226
227
|
locationService.updateStatus(locationCode, QuantityConstant.STATUS_LOCATION_LOCK);
Location desLocation = locationService.getLocationByCode(locationCode);
String loginWarehouse = ShiroUtils.getWarehouseCode();
|
|
228
|
if (!desLocation.getWarehouseCode().equals(loginWarehouse)) {
|
|
229
230
|
throw new ServiceException("库位对应仓库不对");
}
|
|
231
|
/*if (taskHeaderService.getUncompleteTaskInNear(desLocation) > 0) {
|
|
232
|
throw new ServiceException("目标库位:" + desLocation + "旁边存在任务,请完成任务以后再分配");
|
|
233
|
}*/
|
|
234
235
|
}
}
|
|
236
|
|
|
237
|
|
|
238
239
|
/**
* 自动生成容器编码
|
|
240
|
*
|
|
241
242
243
|
* @return 容器编码
*/
@Transactional
|
|
244
|
public String createContainer() {
|
|
245
246
247
248
249
250
251
252
253
254
255
256
257
|
String code = MessageFormat.format("{0}{1}",
"LS",
String.format("%d", Calendar.getInstance().getTimeInMillis()));
Container container = new Container();
container.setCode(code);
container.setWarehouseCode(ShiroUtils.getWarehouseCode());
container.setCompanyCode(ShiroUtils.getCompanyCodeList().get(0));
container.setContainerType("LS");
container.setCreatedBy(ShiroUtils.getLoginName());
container.setLastUpdated(new Date());
container.setLastUpdatedBy(ShiroUtils.getLoginName());
container.setEnable(true);
container.setStatus(QuantityConstant.STATUS_CONTAINER_EMPTY);
|
|
258
|
if (!containerService.save(container)) {
|
|
259
260
261
262
263
|
throw new ServiceException("新增容器失败");
}
return code;
}
|
|
264
265
|
/**
* 完成入库任务
|
|
266
|
*
|
|
267
268
|
* @param task 任务
* @return AjaxResult 完成入库任务结果
|
|
269
270
271
|
*/
@Transactional(rollbackFor = Exception.class)
public AjaxResult completeReceiptTask(TaskHeader task) {
|
|
272
|
|
|
273
274
275
|
/* 判断任务状态*/
if (task.getStatus().equals(QuantityConstant.TASK_STATUS_COMPLETED)) {
return AjaxResult.error("任务已完成");
|
|
276
|
}
|
|
277
278
279
|
if (StringUtils.isEmpty(task.getToLocation())) {
throw new ServiceException("任务" + task.getId() + "没有目的库位,执行中止");
}
|
|
280
|
String warehouseCode = task.getWarehouseCode();
|
|
281
282
283
284
285
|
BigDecimal totalQty = BigDecimal.ZERO;
List<TaskDetail> taskDetailList = taskDetailService.findByTaskId(task.getId());
if (taskDetailList.isEmpty()) {
throw new ServiceException("任务明细为空");
}
|
|
286
|
InventoryHeader inventoryHeader = null;
|
|
287
|
//补充入库把原来库存详情库位换成最新的库位
|
|
288
|
inventoryHeader = checkSUPPLEMENTRECEIPT(task, inventoryHeader, warehouseCode);
|
|
289
|
if (StringUtils.isNull(inventoryHeader)) {
|
|
290
|
inventoryHeader = inventoryHeaderService.getByContainerLocation(task.getToLocation(), task.getContainerCode(), warehouseCode);
|
|
291
|
}
|
|
292
293
|
/* 如果库存 头明细不存在则新增库存头表记录*/
if (StringUtils.isNull(inventoryHeader)) {
|
|
294
|
inventoryHeader = this.saveInventeryByTask(task, warehouseCode);
|
|
295
296
297
|
}
if (StringUtils.isNull(inventoryHeader)) {
throw new ServiceException("库存添加失败");
|
|
298
|
}
|
|
299
|
/* 遍历任务明细,修改关联的入库组盘、入库单状态、添加库存*/
|
|
300
|
TaskReceiptCompleteDomain taskReceiptCompleteDomain = new TaskReceiptCompleteDomain();
|
|
301
302
|
taskReceiptCompleteDomain.setTotalQty(inventoryHeader.getTotalQty());
taskReceiptCompleteDomain.setInventoryHeader(inventoryHeader);
|
|
303
304
305
306
|
List<ReceiptContainerDetail> receiptContainerDetails = new ArrayList<>();
List<ReceiptDetail> receiptDetails = new ArrayList<>();
List<TaskDetail> taskDetails = new ArrayList<>();
Set<Integer> receiptHeaderIdSet = new HashSet<>();
|
|
307
308
|
for (TaskDetail taskDetail : taskDetailList) {
if (taskDetail.getStatus() < QuantityConstant.TASK_STATUS_COMPLETED) {
|
|
309
|
// totalQty = totalQty.add(taskDetail.getQty());
|
|
310
311
312
|
/*查询入库单明细*/
ReceiptDetail receiptDetail = receiptDetailService.getById(taskDetail.getBillDetailId());
if (StringUtils.isNotNull(receiptDetail)) {
|
|
313
|
taskReceiptCompleteDomain = this.addInventoryDetail(taskDetail, receiptDetail, inventoryHeader, taskReceiptCompleteDomain);
|
|
314
315
|
//修改组盘表状态为完成
ReceiptContainerDetail receiptContainerDetail = new ReceiptContainerDetail();
|
|
316
|
receiptContainerDetail.setId(taskDetail.getAllocationId());
|
|
317
|
receiptContainerDetail.setStatus(QuantityConstant.RECEIPT_CONTAINER_FINISHED);
|
|
318
|
receiptContainerDetail.setLastUpdatedBy(receiptDetail.getCreatedBy());
|
|
319
|
receiptContainerDetails.add(receiptContainerDetail);
|
|
320
321
|
} else {
throw new ServiceException("未找到id:" + taskDetail.getBillDetailId() + "入库单明细");
|
|
322
|
}
|
|
323
|
receiptDetail.setProcessStamp(String.valueOf(QuantityConstant.RECEIPT_HEADER_POSTING));
|
|
324
|
if (StringUtils.isNull(receiptDetail.getBackQty())) {
|
|
325
|
receiptDetail.setBackQty(BigDecimal.ZERO.add(taskDetail.getQty()));
|
|
326
|
} else {
|
|
327
328
|
receiptDetail.setBackQty(receiptDetail.getBackQty().add(taskDetail.getQty()));
}
|
|
329
330
331
332
|
receiptDetails.add(receiptDetail);
// receiptDetailService.updateById(receiptDetail);
receiptHeaderIdSet.add(receiptDetail.getReceiptId());
// receiptDetailService.updateReceiptHeaderLastStatus(receiptDetail.getReceiptId());
|
|
333
|
materialWarningService.materialWarning(taskDetail.getMaterialCode(), taskDetail.getCompanyCode(), task.getWarehouseCode());
|
|
334
|
taskDetail.setStatus(QuantityConstant.TASK_STATUS_COMPLETED);
|
|
335
336
|
taskDetails.add(taskDetail);
// taskDetailService.updateById(taskDetail);
|
|
337
|
}
|
|
338
|
}
|
|
339
340
341
342
343
344
|
taskReceiptCompleteDomain.setReceiptDetailList(receiptDetails);
taskReceiptCompleteDomain.setTaskDetailList(taskDetails);
taskReceiptCompleteDomain.setReceiptHeaderIdSet(receiptHeaderIdSet);
taskReceiptCompleteDomain.setReceiptContainerDetailList(receiptContainerDetails);
//save批量提交数据
saveOrUpdateTaskCompleteTable(taskReceiptCompleteDomain);
|
|
345
|
//修改库位状态和对应的容器
|
|
346
|
locationService.updateContainerCodeAndStatus(task.getToLocation(), task.getContainerCode(), QuantityConstant.STATUS_LOCATION_EMPTY, warehouseCode);
|
|
347
348
349
350
|
//修改任务主表状态,因为立库任务表单头只对应一个货箱,表单详情的任务会同时完成
task.setStatus(QuantityConstant.TASK_STATUS_COMPLETED);
|
|
351
|
task.setCompleteStatus(1);
|
|
352
353
|
LambdaUpdateWrapper<TaskHeader> taskHeaderLambdaUpdateWrapper = Wrappers.lambdaUpdate();
taskHeaderLambdaUpdateWrapper.eq(TaskHeader::getId, task.getId());
|
|
354
|
if (!taskHeaderService.update(task, taskHeaderLambdaUpdateWrapper)) {
|
|
355
356
357
|
throw new ServiceException("更新任务主表失败");
}
|
|
358
359
|
//修改容器状态和对应的库位
Container container = new Container();
|
|
360
|
container.setLocationCode(task.getToLocation());
|
|
361
|
container.setStatus(QuantityConstant.STATUS_CONTAINER_SOME);
|
|
362
363
|
LambdaUpdateWrapper<Container> containerLambdaUpdateWrapper = Wrappers.lambdaUpdate();
containerLambdaUpdateWrapper.eq(Container::getCode, task.getContainerCode());
|
|
364
|
containerLambdaUpdateWrapper.eq(Container::getWarehouseCode, task.getWarehouseCode());
|
|
365
366
367
368
369
370
371
|
if (!containerService.update(container, containerLambdaUpdateWrapper)) {
throw new ServiceException("更新容器失败");
}
//修改入库组盘头表状态
ReceiptContainerHeader receiptContainerHeader = new ReceiptContainerHeader();
receiptContainerHeader.setId(task.getAllocationHeadId());
|
|
372
|
receiptContainerHeader.setLastUpdatedBy(task.getCreatedBy());
|
|
373
|
receiptContainerHeader.setStatus(QuantityConstant.RECEIPT_CONTAINER_FINISHED);
|
|
374
375
376
|
if (!receiptContainerHeaderService.updateById(receiptContainerHeader)) {
throw new ServiceException("更新入库组盘头表状态失败");
}
|
|
377
|
return AjaxResult.success();
|
|
378
379
|
}
|
|
380
381
|
public InventoryHeader checkSUPPLEMENTRECEIPT(TaskHeader task, InventoryHeader inventoryHeader, String warehouseCode) {
if (task.getTaskType().equals(QuantityConstant.TASK_TYPE_SUPPLEMENTRECEIPT)) {
|
|
382
383
384
385
386
|
LambdaQueryWrapper<InventoryHeader> lambdaQueryWrapper = Wrappers.lambdaQuery();
lambdaQueryWrapper.eq(InventoryHeader::getWarehouseCode, warehouseCode)
.eq(InventoryHeader::getLocationCode, task.getFromLocation())
.eq(InventoryHeader::getContainerCode, task.getContainerCode());
lambdaQueryWrapper.last("limit 1");
|
|
387
388
|
inventoryHeader = inventoryHeaderService.getOne(lambdaQueryWrapper);
if (inventoryHeader != null) {
|
|
389
390
|
String locationCode = inventoryHeader.getLocationCode();
Location location = locationService.getLocationByCode(locationCode, warehouseCode);
|
|
391
392
393
|
// location.setContainerCode("");
// location.setStatus(QuantityConstant.STATUS_LOCATION_EMPTY);
// locationService.updateById(location);
|
|
394
395
396
397
398
399
|
inventoryHeader.setLocationCode(task.getToLocation());
inventoryHeaderService.updateById(inventoryHeader);
LambdaQueryWrapper<InventoryDetail> lambdaQueryWrapper2 = Wrappers.lambdaQuery();
lambdaQueryWrapper2.eq(InventoryDetail::getWarehouseCode, warehouseCode)
.eq(InventoryDetail::getInventoryHeaderId, inventoryHeader.getId());
List<InventoryDetail> inventoryDetails = inventoryDetailService.list(lambdaQueryWrapper2);
|
|
400
401
|
if (inventoryDetails != null && inventoryDetails.size() > 0) {
for (InventoryDetail inventoryDetail : inventoryDetails) {
|
|
402
403
404
405
406
407
408
409
410
411
|
inventoryDetail.setLocationCode(task.getToLocation());
inventoryDetail.setZoneCode(location.getZoneCode());
inventoryDetailService.updateById(inventoryDetail);
}
}
}
}
return inventoryHeader;
}
|
|
412
413
|
/**
* 添加库存明细与库存交易记录
|
|
414
415
416
|
*
* @param taskDetail 任务明细
* @param receiptDetail 入库单明细
|
|
417
|
* @param inventoryHeader 库存头表
|
|
418
|
* @return 任务数量
|
|
419
|
*/
|
|
420
|
private TaskReceiptCompleteDomain addInventoryDetail(TaskDetail taskDetail, ReceiptDetail receiptDetail,
|
|
421
|
InventoryHeader inventoryHeader, TaskReceiptCompleteDomain taskReceiptCompleteDomain) {
|
|
422
|
|
|
423
424
|
List<InventoryDetail> inventoryDetailList = taskReceiptCompleteDomain.getInventoryDetailList();
List<InventoryTransaction> inventoryTransactionList = taskReceiptCompleteDomain.getInventoryTransactionList();
|
|
425
|
|
|
426
|
String warehouseCode = inventoryHeader.getWarehouseCode();
|
|
427
|
/*该入库明细是否已存在库存明细记录,已存在更新数量、不存在新增记录*/
|
|
428
|
LambdaQueryWrapper<InventoryDetail> inventory = Wrappers.lambdaQuery();
|
|
429
430
|
inventory.eq(InventoryDetail::getContainerCode, inventoryHeader.getContainerCode())
.eq(InventoryDetail::getWarehouseCode, warehouseCode)
|
|
431
432
433
|
.eq(InventoryDetail::getLocationCode, inventoryHeader.getLocationCode())
.eq(InventoryDetail::getMaterialCode, taskDetail.getMaterialCode())
.eq(InventoryDetail::getCompanyCode, taskDetail.getCompanyCode())
|
|
434
|
.eq(InventoryDetail::getBatch, taskDetail.getBatch())
|
|
435
436
|
.eq(InventoryDetail::getReceiptDetailId, taskDetail.getBillDetailId());
InventoryDetail inventoryDetail = inventoryDetailService.getOne(inventory);
|
|
437
|
Material material = materialService.getMaterialByCode(receiptDetail.getMaterialCode(), warehouseCode);
|
|
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
|
/*单位换算*/
BigDecimal receiptQty = taskDetail.getQty();
if (StringUtils.isNotEmpty(receiptDetail.getMaterialUnit()) &&
StringUtils.isNotEmpty(material.getUnit()) &&
!receiptDetail.getMaterialUnit().equals(material.getUnit())) {
LambdaQueryWrapper<MaterialMultiple> queryWrapper = Wrappers.lambdaQuery();
queryWrapper.eq(MaterialMultiple::getMaterialCode, receiptDetail.getMaterialCode())
.eq(MaterialMultiple::getUnitId1, receiptDetail.getMaterialUnit())
.eq(MaterialMultiple::getUnitId2, material.getUnit());
MaterialMultiple materialMultiple = materialMultipleService.getOne(queryWrapper);
if (StringUtils.isNull(materialMultiple)) {
throw new ServiceException("入库单单位与物料绑定主单位不一致且单位换算不存在");
} else {
receiptQty = receiptQty.multiply(materialMultiple.getMultiple());
}
}
|
|
454
455
|
if (StringUtils.isNotNull(inventoryDetail)) {
inventoryDetail.setQty(inventoryDetail.getQty().add(taskDetail.getQty()));
|
|
456
|
} else {
|
|
457
|
// ReceiptHeader receiptHeader = receiptHeaderService.getById(receiptDetail.getReceiptId());
|
|
458
459
460
|
inventoryDetail = new InventoryDetail();
inventoryDetail.setInventoryHeaderId(inventoryHeader.getId());
inventoryDetail.setWarehouseCode(taskDetail.getWarehouseCode());
|
|
461
|
|
|
462
|
ReceiptHeader receiptHeader = receiptHeaderService.getById(receiptDetail.getReceiptId());
|
|
463
464
465
|
inventoryDetail.setUWarehouseCode(receiptHeader.getUWarehouseCode());
// inventoryDetail.
|
|
466
|
inventoryDetail.setZoneCode(inventoryHeader.getZoneCode());
|
|
467
468
469
470
471
472
|
inventoryDetail.setCompanyCode(taskDetail.getCompanyCode());
inventoryDetail.setLocationCode(taskDetail.getToLocation());
inventoryDetail.setContainerCode(taskDetail.getContainerCode());
inventoryDetail.setMaterialCode(taskDetail.getMaterialCode());
inventoryDetail.setMaterialName(taskDetail.getMaterialName());
inventoryDetail.setMaterialSpec(taskDetail.getMaterialSpec());
|
|
473
474
|
inventoryDetail.setMaterialUnit(material.getUnit());
inventoryDetail.setQty(receiptQty);
|
|
475
|
inventoryDetail.setTaskQty(new BigDecimal(0));
|
|
476
|
inventoryDetail.setInventorySts(QuantityConstant.GOOD);
|
|
477
|
inventoryDetail.setSupplierCode(receiptDetail.getSupplierCode());
|
|
478
|
inventoryDetail.setReferCode(receiptHeader.getReferCode());
|
|
479
480
481
|
inventoryDetail.setReferDetailId(receiptDetail.getReferLineNum());
inventoryDetail.setBatch(receiptDetail.getBatch());
inventoryDetail.setLot(receiptDetail.getLot());
|
|
482
483
|
inventoryDetail.setProjectNo(receiptDetail.getProjectNo());
inventoryDetail.setMoCode(receiptDetail.getMoCode());
|
|
484
|
inventoryDetail.setGoodsShelfNo(taskDetail.getGoodsShelfNo());
|
|
485
486
|
if (taskDetail.getWarehouseCode().equals("KS0001")) {
Container container = containerService.getContainerByCode(taskDetail.getContainerCode(), taskDetail.getWarehouseCode());
|
|
487
|
inventoryDetail.setUWarehouseCode(container.getUWarehouseCode());
|
|
488
|
} else {
|
|
489
490
|
inventoryDetail.setUWarehouseCode(receiptDetail.getUWarehouseCode());
}
|
|
491
492
493
494
495
496
|
inventoryDetail.setManufactureDate(receiptDetail.getManufactureDate());
inventoryDetail.setExpirationDate(receiptDetail.getExpirationDate());
inventoryDetail.setAgingDate(receiptDetail.getAgingDate());
inventoryDetail.setAttribute1(receiptDetail.getAttribute1());
inventoryDetail.setAttribute2(receiptDetail.getAttribute2());
inventoryDetail.setAttribute3(receiptDetail.getAttribute3());
|
|
497
|
inventoryDetail.setReceiptCode(receiptDetail.getReceiptCode());
|
|
498
|
inventoryDetail.setReceiptDetailId(receiptDetail.getId());
|
|
499
|
inventoryHeader.setTotalLines(inventoryHeader.getTotalLines() + 1);
|
|
500
501
502
|
}
if (!inventoryDetailService.saveOrUpdate(inventoryDetail)) {
throw new ServiceException("保存库存明细失败");
|
|
503
|
}
|
|
504
505
|
// inventoryHeader.setTotalQty(inventoryHeader.getTotalQty().add(taskDetail.getQty()));
// inventoryHeaderService.updateById(inventoryHeader);
|
|
506
507
508
509
510
511
512
513
514
515
|
//记录库存交易记录
InventoryTransaction inventoryTransaction = new InventoryTransaction();
inventoryTransaction.setTransactionType(QuantityConstant.INVENTORY_TRANSACTION_RECEIPT);
inventoryTransaction.setWarehouseCode(taskDetail.getWarehouseCode());
inventoryTransaction.setCompanyCode(taskDetail.getCompanyCode());
inventoryTransaction.setLocationCode(inventoryHeader.getLocationCode());
inventoryTransaction.setContainerCode(inventoryHeader.getContainerCode());
inventoryTransaction.setMaterialCode(taskDetail.getMaterialCode());
inventoryTransaction.setMaterialName(taskDetail.getMaterialName());
inventoryTransaction.setMaterialSpec(taskDetail.getMaterialSpec());
|
|
516
|
inventoryTransaction.setMaterialUnit(material.getUnit());
|
|
517
518
519
520
521
|
inventoryTransaction.setBillCode(taskDetail.getBillCode());
inventoryTransaction.setBillDetailId(taskDetail.getBillDetailId());
inventoryTransaction.setBatch(receiptDetail.getBatch());
inventoryTransaction.setLot(receiptDetail.getLot());
inventoryTransaction.setInventorySts(receiptDetail.getInventorySts());
|
|
522
|
inventoryTransaction.setTaskQty(receiptQty);
|
|
523
|
inventoryTransaction.setInventoryDetailId(inventoryDetail.getId());
|
|
524
525
526
527
|
inventoryTransaction.setMoCode(inventoryDetail.getMoCode());
inventoryTransaction.setUWarehouseCode(inventoryDetail.getUWarehouseCode());
inventoryTransaction.setGoodsShelfNo(inventoryDetail.getGoodsShelfNo());
inventoryTransaction.setZoneCode(inventoryDetail.getZoneCode());
|
|
528
|
inventoryTransaction.setReferCode(taskDetail.getReferenceCode());
|
|
529
530
531
532
533
534
|
inventoryDetailList.add(inventoryDetail);
inventoryTransactionList.add(inventoryTransaction);
taskReceiptCompleteDomain.setInventoryDetailList(inventoryDetailList);
taskReceiptCompleteDomain.setInventoryTransactionList(inventoryTransactionList);
taskReceiptCompleteDomain.setTotalQty(taskReceiptCompleteDomain.getTotalQty().add(taskDetail.getQty()));
|
|
535
|
|
|
536
537
538
|
return taskReceiptCompleteDomain;
}
|
|
539
540
|
/**
* 根据保存库存
|
|
541
|
*
|
|
542
543
544
545
|
* @param task
* @param warehouseCode
* @return
*/
|
|
546
|
public InventoryHeader saveInventeryByTask(TaskHeader task, String warehouseCode) {
|
|
547
|
InventoryHeader inventoryHeader = new InventoryHeader();
|
|
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
|
inventoryHeader.setWarehouseCode(warehouseCode);
inventoryHeader.setLocationCode(task.getToLocation());
Location location = locationService.getLocationByCode(task.getToLocation(), warehouseCode);
inventoryHeader.setZoneCode(location.getZoneCode());
inventoryHeader.setTotalWeight(task.getWeight());
inventoryHeader.setContainerCode(task.getContainerCode());
inventoryHeader.setContainerStatus(QuantityConstant.STATUS_CONTAINER_SOME);
inventoryHeader.setTotalQty(new BigDecimal(0));
inventoryHeader.setTotalLines(0);
inventoryHeader.setLocking(1);
inventoryHeader.setEnable(1);
inventoryHeader.setCompanyCode(task.getCompanyCode());
inventoryHeader.setCreated(new Date());
inventoryHeader.setCreatedBy("");
inventoryHeader.setLastUpdated(new Date());
inventoryHeader.setLastUpdatedBy("");
if (!inventoryHeaderService.save(inventoryHeader)) {
throw new ServiceException("添加库存单失败");
}
|
|
567
|
return inventoryHeader;
|
|
568
569
|
}
|
|
570
571
572
573
574
575
576
577
578
|
public void saveOrUpdateTaskCompleteTable(TaskReceiptCompleteDomain taskReceiptCompleteDomain) {
List<InventoryTransaction> inventoryTransactionList = taskReceiptCompleteDomain.getInventoryTransactionList();
List<InventoryDetail> inventoryDetailList = taskReceiptCompleteDomain.getInventoryDetailList();
List<ReceiptDetail> receiptDetailList = taskReceiptCompleteDomain.getReceiptDetailList();
List<TaskDetail> taskDetails = taskReceiptCompleteDomain.getTaskDetailList();
List<ReceiptContainerDetail> receiptContainerDetailList = taskReceiptCompleteDomain.getReceiptContainerDetailList();
InventoryHeader inventoryHeader = taskReceiptCompleteDomain.getInventoryHeader();
Set<Integer> receiptHeaderIdSet = taskReceiptCompleteDomain.getReceiptHeaderIdSet();
BigDecimal totalQty = taskReceiptCompleteDomain.getTotalQty();
|
|
579
|
|
|
580
|
if (inventoryDetailList != null && inventoryDetailList.size() > 0) {
|
|
581
582
583
584
|
inventoryDetailService.saveOrUpdateBatch(inventoryDetailList);
}
inventoryHeader.setTotalQty(totalQty);
inventoryHeaderService.saveOrUpdate(inventoryHeader);
|
|
585
586
|
if (inventoryTransactionList != null && inventoryTransactionList.size() > 0) {
|
|
587
588
|
inventoryTransactionService.saveBatch(inventoryTransactionList);
}
|
|
589
|
if (receiptDetailList != null && receiptDetailList.size() > 0) {
|
|
590
591
|
receiptDetailService.updateBatchById(receiptDetailList);
}
|
|
592
|
if (taskDetails != null && taskDetails.size() > 0) {
|
|
593
594
|
taskDetailService.updateBatchById(taskDetails);
}
|
|
595
|
if (receiptContainerDetailList != null && receiptContainerDetailList.size() > 0) {
|
|
596
|
receiptContainerDetailService.updateBatchById(receiptContainerDetailList);
|
|
597
|
}
|
|
598
|
receiptDetailService.updateReceiptHeaderLastStatusV2(receiptHeaderIdSet);
|
|
599
600
|
}
}
|