|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
package com.huaheng.api.general.service;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.huaheng.api.general.domain.ReceiptDomain;
import com.huaheng.common.constant.QuantityConstant;
import com.huaheng.common.exception.service.ServiceException;
import com.huaheng.common.utils.StringUtils;
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;
import com.huaheng.pc.config.material.domain.Material;
import com.huaheng.pc.config.material.service.MaterialService;
|
|
17
|
import com.huaheng.pc.inventory.inventoryDetail.service.InventoryDetailService;
|
|
18
19
20
21
22
23
24
25
26
27
28
29
30
|
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.domain.ReceiptContainerView;
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;
import com.huaheng.pc.task.taskHeader.service.TaskHeaderService;
|
|
31
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
|
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
@Component
@Transactional
public class ReceiptContainerApiService {
@Resource
private ReceiptHeaderService receiptHeaderService;
@Resource
private ReceiptDetailService receiptDetailService;
@Resource
private ContainerService containerService;
@Resource
private TaskHeaderService taskHeaderService;
@Resource
private TaskDetailService taskDetailService;
@Resource
private MaterialService materialService;
@Resource
private ReceiptContainerHeaderService receiptContainerHeaderService;
@Resource
private ReceiptContainerDetailService receiptContainerDetailService;
@Resource
private LocationService locationService;
|
|
60
61
|
@Autowired
private InventoryDetailService inventoryDetailService;
|
|
62
63
64
65
66
67
68
69
70
|
/**
* 入库组盘,生成任务
*
* @param receiptDomain 入库组盘
* @return 是否下发成功
*/
@Transactional(rollbackFor = Exception.class)
|
|
71
|
public AjaxResult saveReceiptContainer(ReceiptDomain receiptDomain) {
|
|
72
|
String companyCode = receiptDomain.getReceiptHeader().getCompanyCode();
|
|
73
74
75
|
ReceiptHeader receiptHeaders = receiptDomain.getReceiptHeader();
List<ReceiptDetail> details = receiptDomain.getReceiptDetails();
int taskId = 0;
|
|
76
77
78
|
if (receiptHeaders == null || details == null) {
return AjaxResult.error("入库主单或入库子单为空");
}
|
|
79
|
if (StringUtils.isEmpty(receiptHeaders.getZoneCode())) {
|
|
80
81
|
return AjaxResult.error("库区为空");
}
|
|
82
|
String zoneCode = receiptHeaders.getZoneCode();
|
|
83
84
|
String containerCode = receiptHeaders.getContainerCode();
String locationCode = receiptHeaders.getLocationCode();
|
|
85
|
if (StringUtils.isEmpty(containerCode)) {
|
|
86
87
88
89
90
|
return AjaxResult.error("容器为空");
}
LambdaQueryWrapper<Container> containerQueryWrapper = Wrappers.lambdaQuery();
containerQueryWrapper.eq(Container::getCode, containerCode);
Container container = containerService.getOne(containerQueryWrapper);
|
|
91
|
if (container == null) {
|
|
92
93
94
95
|
return AjaxResult.error("不存在这个托盘");
}
//保存入库信息和组盘信息和任务信息
ReceiptContainerView record = new ReceiptContainerView();
|
|
96
|
record.setContainerCode(containerCode);
|
|
97
|
record.setLocationCode(locationCode);
|
|
98
|
record.setTaskType((short) 100);
|
|
99
100
|
record.setCompanyCode(details.get(0).getCompanyCode());
receiptContainerHeaderService.checkContainer(record);
|
|
101
|
if (locationCode != null) {
|
|
102
103
104
|
receiptContainerHeaderService.mobileCheckLocationCode(record);
}
// 保存ReceiptHeader,没有则生成,有则返回id
|
|
105
|
int receiptHeaderId = receiptHeaderService.createHeader(companyCode, receiptHeaders.getZoneCode());
|
|
106
107
|
ReceiptHeader receiptHeader = receiptHeaderService.getById(receiptHeaderId);
// 保存ReceiptDetail
|
|
108
109
|
List<Integer> receiptDetailIds = insertReceiptDetail(receiptHeaderId, details, companyCode);
if (receiptDetailIds != null && receiptDetailIds.size() > 0) {
|
|
110
|
//保存ReceiptContainerHeader
|
|
111
112
|
ReceiptContainerHeader containerHeader = insertReceiptContainerHeader(details.get(0), container, locationCode, zoneCode);
if (containerHeader != null && containerHeader.getId() > 0) {
|
|
113
|
// 保存ReceiptcContainerDetail
|
|
114
115
|
List<Integer> receiptContainerDetailIds = insertReceiptcContainerDetail(containerHeader.getId(), receiptHeaderId, receiptDetailIds, details, container);
if (receiptContainerDetailIds != null && receiptContainerDetailIds.size() > 0) {
|
|
116
|
//保存任务task
|
|
117
|
taskId = saveTaskHeader(container, containerHeader);
|
|
118
119
120
121
122
123
124
125
126
127
128
129
130
131
|
} else {
return AjaxResult.error("入库组盘失败");
}
} else {
return AjaxResult.error("插入入库容器表单头失败");
}
} else {
return AjaxResult.error("插入入库明细表单失败");
}
return AjaxResult.success().setData(taskId);
}
/**
* 保存ReceiptDetail
|
|
132
|
*
|
|
133
134
|
* @return
*/
|
|
135
|
public List<Integer> insertReceiptDetail(int headerId, List<ReceiptDetail> receiptDetails, String companyCode) {
|
|
136
137
|
List<Integer> mReceiptDetailIds = new ArrayList<>();
ReceiptHeader receiptHeader = receiptHeaderService.getById(headerId);
|
|
138
|
for (ReceiptDetail receiptBill : receiptDetails) {
|
|
139
140
|
ReceiptDetail receiptDetail = receiptBill;
receiptDetail.setId(null);
|
|
141
|
receiptDetail.setWarehouseCode(ShiroUtils.getWarehouseCode());
|
|
142
143
144
|
receiptDetail.setCompanyCode(companyCode);
receiptDetail.setReceiptId(receiptHeader.getId());
receiptDetail.setReceiptCode(receiptHeader.getCode());
|
|
145
|
receiptDetail.setInventorySts(receiptDetail.getInventorySts() == null ? QuantityConstant.GOOD : receiptDetail.getInventorySts());
|
|
146
|
Material material = materialService.getMaterialByCode(receiptDetail.getMaterialCode(),
|
|
147
148
149
150
151
152
153
|
receiptHeader.getWarehouseCode());
receiptDetail.setMaterialName(material.getName());
receiptDetail.setMaterialSpec(material.getSpec());
receiptDetail.setMaterialUnit(material.getUnit());
receiptDetail.setAbcClass(material.getAbcClass());
receiptDetail.setMaterialType(material.getMaterialType());
|
|
154
155
156
157
158
|
if (StringUtils.isNotEmpty(receiptDetail.getRollNumber())) {
boolean tag = inventoryDetailService.isRollNumber(null, receiptDetail);
if (tag) {
// 卷号已存在
throw new ServiceException(receiptDetail.getRollNumber() + "卷号已存在");
|
|
159
160
|
}
}
|
|
161
|
receiptDetail.setInventorySts(QuantityConstant.GOOD);
|
|
162
|
receiptDetail.setQty(receiptBill.getQty());
|
|
163
|
receiptDetail.setTaskQty(receiptBill.getQty());
|
|
164
165
166
|
receiptDetail.setCreatedBy(QuantityConstant.LOGINNAME);
receiptDetail.setLastUpdatedBy(QuantityConstant.LOGINNAME);
receiptDetail.setDeleted(false);
|
|
167
|
|
|
168
169
170
171
172
|
receiptDetailService.save(receiptDetail);
mReceiptDetailIds.add(receiptDetail.getId());
}
return mReceiptDetailIds;
}
|
|
173
|
|
|
174
175
|
/**
* ReceiptContainerHeader
|
|
176
|
*
|
|
177
178
|
* @return
*/
|
|
179
|
public ReceiptContainerHeader insertReceiptContainerHeader(ReceiptDetail receiptDetail, Container container, String locationCode, String zoneCode) {
|
|
180
181
182
183
184
|
String receiptContainerCode = container.getCode();
String companyCode = receiptDetail.getCompanyCode();
ReceiptContainerHeader recorder = new ReceiptContainerHeader();
recorder.setContainerCode(receiptContainerCode);
recorder.setToLocation(locationCode);
|
|
185
|
recorder.setWarehouseCode(ShiroUtils.getWarehouseCode());
|
|
186
187
|
recorder.setCompanyCode(companyCode);
//如果该容器已绑定库位,则补充入库TASK_TYPE_SUPPLEMENTRECEIPT,否则整盘入库TASK_TYPE_WHOLERECEIPT
|
|
188
|
if (StringUtils.isEmpty(container.getLocationCode())) {
|
|
189
|
recorder.setTaskType(QuantityConstant.TASK_TYPE_WHOLERECEIPT);
|
|
190
|
} else {
|
|
191
|
recorder.setTaskType(QuantityConstant.TASK_TYPE_SUPPLEMENTRECEIPT);
|
|
192
|
recorder.setFromLocation(container.getLocationCode());
|
|
193
194
195
196
197
198
199
200
201
202
203
204
205
|
}
recorder.setStatus(QuantityConstant.RECEIPT_CONTAINER_BUILD);
recorder.setCreatedBy(QuantityConstant.LOGINNAME);
recorder.setLastUpdatedBy(QuantityConstant.LOGINNAME);
recorder.setZoneCode(zoneCode);
LambdaQueryWrapper<ReceiptContainerHeader> receiptContainerHeaderLambada = Wrappers.lambdaQuery();
receiptContainerHeaderLambada.eq(ReceiptContainerHeader::getContainerCode, receiptContainerCode)
.eq(ReceiptContainerHeader::getCompanyCode, companyCode)
.eq(ReceiptContainerHeader::getTaskType, String.valueOf(QuantityConstant.TASK_TYPE_WHOLERECEIPT))
.eq(ReceiptContainerHeader::getStatus, 0);
ReceiptContainerHeader receiptContainerHeader = receiptContainerHeaderService.getOne(receiptContainerHeaderLambada);
|
|
206
|
if (receiptContainerHeader == null) {
|
|
207
208
209
210
211
212
213
214
215
216
|
receiptContainerHeaderService.save(recorder);
} else {
return recorder;
}
locationService.updateStatus(locationCode, QuantityConstant.STATUS_LOCATION_LOCK);
containerService.updateLocationCodeAndStatus(receiptContainerCode,
locationCode, QuantityConstant.STATUS_CONTAINER_SOME);
return recorder;
}
|
|
217
|
|
|
218
219
|
/**
* ReceiptcContainerDetail
|
|
220
|
*
|
|
221
222
223
|
* @return
*/
public List<Integer> insertReceiptcContainerDetail(int headerId, int receiptId,
|
|
224
225
|
List<Integer> receiptDetailId, List<ReceiptDetail> receiptDetails,
Container container) {
|
|
226
227
228
|
List<Integer> mReceiptContainerIds = new ArrayList<>();
ReceiptHeader receiptHeader = receiptHeaderService.getById(receiptId);
|
|
229
|
if (receiptHeader == null) {
|
|
230
231
|
throw new ServiceException("没有找到入库单表头!");
}
|
|
232
|
for (int i = 0; i < receiptDetails.size(); i++) {
|
|
233
234
235
|
ReceiptDetail receiptDetail = receiptDetails.get(i);
Material condition2 = new Material();
condition2.setCode(receiptDetail.getMaterialCode());
|
|
236
|
condition2.setWarehouseCode(ShiroUtils.getWarehouseCode());
|
|
237
238
239
240
|
condition2.setDeleted(false);
condition2.setEnable(true);
LambdaQueryWrapper<Material> lambdaQueryWrapper = Wrappers.lambdaQuery();
lambdaQueryWrapper.eq(Material::getCode, receiptDetail.getMaterialCode())
|
|
241
|
.eq(Material::getWarehouseCode, ShiroUtils.getWarehouseCode());
|
|
242
243
|
Material material = materialService.getOne(lambdaQueryWrapper);
ReceiptContainerDetail record = new ReceiptContainerDetail();
|
|
244
245
|
record.setWarehouseCode(ShiroUtils.getWarehouseCode());
record.setCompanyCode(ShiroUtils.getCompanyCodeList().get(0));
|
|
246
247
248
249
250
251
252
253
254
|
record.setReceiptContainerId(headerId);
record.setRollNumber(receiptDetail.getRollNumber());
record.setReceiptCode(receiptHeader.getCode());
record.setReceiptId(receiptId);
record.setReceiptDetailId(receiptDetailId.get(i));
record.setMaterialCode(receiptDetail.getMaterialCode());
record.setMaterialName(material.getName());
record.setMaterialUnit(material.getUnit());
record.setMaterialSpec(material.getSpec());
|
|
255
|
record.setQty(receiptDetail.getQty());
|
|
256
257
258
259
260
261
|
record.setContainerCode(container.getCode());
record.setTaskType(QuantityConstant.TASK_TYPE_WHOLERECEIPT);
record.setContainerType(container.getContainerType());
record.setInventorySts(receiptDetail.getInventorySts());
record.setLot(receiptDetail.getLot());
record.setBatch(receiptDetail.getBatch());
|
|
262
|
record.setContainerDetailNumber(receiptDetail.getContainerDetailNumber());
|
|
263
264
265
266
267
268
269
270
271
|
record.setRollNumber(receiptDetail.getRollNumber());
record.setCreatedBy(QuantityConstant.LOGINNAME);
record.setLastUpdatedBy(QuantityConstant.LOGINNAME);
LambdaQueryWrapper<ReceiptContainerDetail> detailyWrapper = Wrappers.lambdaQuery();
detailyWrapper.eq(ReceiptContainerDetail::getReceiptContainerId, headerId)
.eq(ReceiptContainerDetail::getReceiptCode, receiptHeader.getCode())
.eq(ReceiptContainerDetail::getRollNumber, receiptDetail.getRollNumber());
ReceiptContainerDetail receiptContainerDetail = receiptContainerDetailService.getOne(detailyWrapper);
|
|
272
|
if (receiptContainerDetail == null) {
|
|
273
274
275
276
277
278
279
280
281
282
283
|
receiptContainerDetailService.save(record);
mReceiptContainerIds.add(record.getId());
} else {
mReceiptContainerIds.add(receiptContainerDetail.getId());
}
}
return mReceiptContainerIds;
}
/**
* 生成任务
|
|
284
|
*
|
|
285
286
287
288
|
* @param container
* @param receiptContainerHeader
* @return
*/
|
|
289
290
|
public int saveTaskHeader(Container container, ReceiptContainerHeader receiptContainerHeader) {
int taskId = 0;
|
|
291
292
293
|
//锁定容器
containerService.updateStatus(receiptContainerHeader.getContainerCode(),
QuantityConstant.STATUS_CONTAINER_LOCK, container.getWarehouseCode());
|
|
294
|
if (StringUtils.isNotEmpty(receiptContainerHeader.getFromLocation())) {
|
|
295
296
297
298
299
|
//锁定库位
locationService.updateStatus(receiptContainerHeader.getFromLocation(),
QuantityConstant.STATUS_LOCATION_LOCK);
}
String locationCode = receiptContainerHeader.getToLocation();
|
|
300
|
if (StringUtils.isNotEmpty(locationCode)) {
|
|
301
302
|
locationService.updateStatus(locationCode, QuantityConstant.STATUS_LOCATION_LOCK);
Location desLocation = locationService.getLocationByCode(locationCode);
|
|
303
|
String loginWarehouse = ShiroUtils.getWarehouseCode();
|
|
304
|
if (!desLocation.getWarehouseCode().equals(loginWarehouse)) {
|
|
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
|
throw new ServiceException("库位对应仓库不对");
}
if (taskHeaderService.getUncompleteTaskInNear(desLocation) > 0) {
throw new ServiceException("目标库位:" + desLocation + "旁边存在任务,请完成任务以后再分配");
}
}
//查询入库组盘明细
LambdaQueryWrapper<ReceiptContainerDetail> containerDetailLambda = Wrappers.lambdaQuery();
containerDetailLambda.eq(ReceiptContainerDetail::getReceiptContainerId, receiptContainerHeader.getId());
List<ReceiptContainerDetail> list = receiptContainerDetailService.list(containerDetailLambda);
if (list.isEmpty()) {
throw new ServiceException("没有组盘明细,请先组盘!");
}
if (receiptContainerHeader.getStatus() == QuantityConstant.RECEIPT_CONTAINER_BUILD.intValue()) {
if (receiptContainerHeader.getStatus() < QuantityConstant.RECEIPT_CONTAINER_TASK) {
receiptContainerHeader.setStatus(QuantityConstant.RECEIPT_CONTAINER_TASK);
receiptContainerHeaderService.updateById(receiptContainerHeader);
}
//添加任务主表
TaskHeader task = new TaskHeader();
task.setAllocationHeadId(receiptContainerHeader.getId());
task.setInternalTaskType(QuantityConstant.TASK_INTENERTYPE_RECEIPT);
task.setWarehouseCode(receiptContainerHeader.getWarehouseCode());
task.setZoneCode(receiptContainerHeader.getZoneCode());
task.setCompanyCode(receiptContainerHeader.getCompanyCode());
task.setStatus(QuantityConstant.TASK_STATUS_BUILD);
task.setTaskType(receiptContainerHeader.getTaskType());
task.setFromLocation(receiptContainerHeader.getFromLocation());
|
|
335
|
if (receiptContainerHeader.getToLocation() != null) {
|
|
336
337
338
|
task.setToLocation(receiptContainerHeader.getToLocation());
}
Location location = locationService.getLocationByCode(
|
|
339
|
task.getToLocation(), ShiroUtils.getWarehouseCode());
|
|
340
|
if (location != null) {
|
|
341
342
343
344
345
346
347
348
349
350
|
task.setZoneCode(location.getZoneCode());
}
task.setContainerCode(receiptContainerHeader.getContainerCode());
task.setRecvDock(receiptContainerHeader.getRecvDock());
task.setPort(receiptContainerHeader.getPort());
task.setCreatedBy(QuantityConstant.LOGINNAME);
task.setLastUpdatedBy(QuantityConstant.LOGINNAME);
if (taskHeaderService.save(task)) {
taskId = task.getId();
//TaskDetail
|
|
351
|
saveTaskDetail(task, list);
|
|
352
353
354
355
356
357
358
|
} else {
throw new ServiceException("任务生成失败");
}
}
return taskId;
}
|
|
359
|
public void saveTaskDetail(TaskHeader task, List<ReceiptContainerDetail> list) {
|
|
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
|
//添加任务明细表
for (ReceiptContainerDetail item : list) {
TaskDetail taskDetail = new TaskDetail();
taskDetail.setTaskId(task.getId());
taskDetail.setTaskType(task.getTaskType());
taskDetail.setInternalTaskType(QuantityConstant.TASK_INTENERTYPE_RECEIPT);
taskDetail.setWarehouseCode(task.getWarehouseCode());
taskDetail.setAllocationId(item.getId());
taskDetail.setCompanyCode(task.getCompanyCode());
taskDetail.setMaterialCode(item.getMaterialCode());
taskDetail.setMaterialName(item.getMaterialName());
taskDetail.setMaterialSpec(item.getMaterialSpec());
taskDetail.setMaterialUnit(item.getMaterialUnit());
taskDetail.setInventorySts(item.getInventorySts());
taskDetail.setRollNumber(item.getRollNumber());
|
|
375
|
taskDetail.setContainerDetailNumber(item.getContainerDetailNumber());
|
|
376
377
378
379
380
|
taskDetail.setBillCode(item.getReceiptCode());
taskDetail.setBillDetailId(item.getReceiptDetailId());
taskDetail.setQty(item.getQty());
taskDetail.setContainerCode(task.getContainerCode());
taskDetail.setFromLocation(task.getFromLocation());
|
|
381
|
if (task.getToLocation() != null) {
|
|
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
|
taskDetail.setToLocation(task.getToLocation());
}
taskDetail.setBatch(item.getBatch());
taskDetail.setProjectNo(item.getProjectNo());
taskDetail.setCreatedBy(QuantityConstant.LOGINNAME);
taskDetail.setLastUpdatedBy(QuantityConstant.LOGINNAME);
if (!taskDetailService.save(taskDetail)) {
throw new ServiceException("生成任务明细失败");
}
//更新入库组盘明细状态
item.setStatus(QuantityConstant.RECEIPT_CONTAINER_TASK);
if (!receiptContainerDetailService.updateById(item)) {
throw new ServiceException("更新入库组盘明细状态出错");
}
/* 修改明细状态为上架*/
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());
}
}
}
|