|
1
2
|
package com.huaheng.pc.receipt.receiptContainerHeader.service;
|
|
3
|
import com.alibaba.fastjson.JSONException;
|
|
4
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
5
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
6
7
|
import com.huaheng.common.constant.QuantityConstant;
import com.huaheng.common.exception.service.ServiceException;
|
|
8
|
import com.huaheng.common.utils.StringUtils;
|
周鸿
authored
|
9
|
import com.huaheng.common.utils.Wrappers;
|
|
10
11
|
import com.huaheng.common.utils.security.ShiroUtils;
import com.huaheng.framework.web.domain.AjaxResult;
|
|
12
|
import com.huaheng.framework.web.service.ConfigService;
|
|
13
|
import com.huaheng.mobile.receipt.ReceiptBill;
|
|
14
15
|
import com.huaheng.pc.config.company.domain.CompanyU8;
import com.huaheng.pc.config.company.service.CompanyU8Service;
|
|
16
17
|
import com.huaheng.pc.config.configValue.domain.ConfigValue;
import com.huaheng.pc.config.configValue.mapper.ConfigValueMapper;
|
|
18
19
20
21
22
23
|
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;
|
|
24
25
|
import com.huaheng.pc.config.receiptPreference.domain.ReceiptPreference;
import com.huaheng.pc.config.receiptPreference.mapper.ReceiptPreferenceMapper;
|
|
26
27
|
import com.huaheng.pc.inventory.inventoryDetail.domain.InventoryDetail;
import com.huaheng.pc.inventory.inventoryDetail.service.InventoryDetailService;
|
|
28
29
|
import com.huaheng.pc.receipt.receiptContainerDetail.domain.ReceiptContainerDetail;
import com.huaheng.pc.receipt.receiptContainerDetail.service.ReceiptContainerDetailService;
|
|
30
|
import com.huaheng.pc.receipt.receiptContainerHeader.domain.ReceiptContainerHeader;
|
|
31
|
import com.huaheng.pc.receipt.receiptContainerHeader.domain.ReceiptContainerView;
|
|
32
|
import com.huaheng.pc.receipt.receiptContainerHeader.mapper.ReceiptContainerHeaderMapper;
|
|
33
34
35
36
|
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;
|
|
37
38
|
import com.huaheng.pc.shipment.shipmentContainerHeader.domain.ShipmentContainerHeader;
import com.huaheng.pc.shipment.shipmentContainerHeader.service.ShipmentContainerHeaderService;
|
|
39
|
import com.huaheng.pc.srm.service.FinishedProductService;
|
|
40
|
import com.huaheng.pc.system.dict.service.IDictDataService;
|
|
41
42
|
import com.huaheng.pc.task.taskDetail.domain.TaskDetail;
import com.huaheng.pc.task.taskDetail.service.TaskDetailService;
|
|
43
44
45
46
47
48
49
50
|
import com.huaheng.pc.task.taskHeader.domain.TaskHeader;
import com.huaheng.pc.task.taskHeader.service.TaskHeaderService;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.text.MessageFormat;
|
|
51
|
import java.util.*;
|
|
52
53
54
55
|
/**
* @author huaheng
*/
|
|
56
|
@Service
|
周鸿
authored
|
57
|
public class ReceiptContainerHeaderServiceImpl extends ServiceImpl<ReceiptContainerHeaderMapper, ReceiptContainerHeader> implements ReceiptContainerHeaderService {
|
|
58
|
|
|
59
60
61
62
63
64
65
66
67
68
69
70
71
72
|
@Resource
private TaskHeaderService taskHeaderService;
@Resource
private LocationService locationService;
@Resource
private ReceiptDetailService receiptDetailService;
@Resource
private ReceiptContainerDetailService receiptContainerDetailService;
@Resource
private MaterialService materialService;
@Resource
private ContainerService containerService;
@Resource
private ReceiptHeaderService receiptHeaderService;
|
|
73
74
|
@Resource
private InventoryDetailService inventoryDetailService;
|
|
75
76
77
78
|
@Resource
private ReceiptPreferenceMapper receiptPreferenceMapper;
@Resource
private ConfigValueMapper configValueMapper;
|
|
79
80
|
@Resource
private ConfigService configService;
|
|
81
82
|
@Resource
private ShipmentContainerHeaderService shipmentContainerHeaderService;
|
|
83
84
85
86
|
@Resource
private CompanyU8Service companyU8Service;
@Resource
private FinishedProductService finishedProductService;
|
|
87
88
|
@Resource
private IDictDataService dictDataService;
|
|
89
90
|
@Resource
private TaskDetailService taskDetailService;
|
|
91
|
|
|
92
|
|
|
93
94
|
/**
* 保存入库组盘
|
|
95
96
97
98
99
100
|
* param receiptCode 入库单编码
* param containerCode 容器编码
* param receiptDetailId 入库单详情id
* param locationCode 库位编码
* param qty 收货数量
* param locatingRule 定位规则
|
周鸿
authored
|
101
|
*
|
|
102
103
104
|
* @return 是否保存成功
*/
@Override
|
|
105
|
@Transactional(rollbackFor = Exception.class)
|
|
106
|
public AjaxResult saveContainer(ReceiptContainerView receivingDamain) {
|
周鸿
authored
|
107
108
109
110
111
112
|
String receiptCode = receivingDamain.getReceiptCode();
String containerCode = receivingDamain.getContainerCode();
Integer receiptDetailId = receivingDamain.getReceiptDetailId();
String locationCode = receivingDamain.getLocationCode();
BigDecimal qty = receivingDamain.getQty();
String locatingRule = receivingDamain.getLocatingRule();
|
|
113
|
ReceiptDetail detail = receiptDetailService.getById(receiptDetailId);
|
|
114
|
|
|
115
|
BigDecimal receiptQty = detail.getQty().subtract(detail.getTaskQty());
|
周鸿
authored
|
116
117
|
if (receiptQty.compareTo(qty) < 0) {
return AjaxResult.error("入库明细可用数量" + receiptQty + ",收货数量" + qty + ";不允许超收");
|
|
118
|
}
|
|
119
|
|
周鸿
authored
|
120
121
|
if (ShiroUtils.getWarehouseCode().equals("KS0001")) {
if (StringUtils.isEmpty(detail.getUWarehouseCode())) {
|
|
122
123
124
|
throw new ServiceException("该单据没有关联u8仓库");
}
}
|
|
125
126
|
//检查容器编码合法性
Integer taskType = checkContainer(containerCode, detail.getMaterialCode());
|
周鸿
authored
|
127
|
switch (taskType) {
|
|
128
129
|
case 1:
//创建临时容器
|
|
130
131
|
// containerCode = createContainer();
// taskType = QuantityConstant.TASK_TYPE_WHOLERECEIPT;
|
|
132
133
134
|
throw new ServiceException("没有容器");
case 2:
throw new ServiceException("该物料不能放在这个容器上,请检查该物料是否可以混放");
|
|
135
|
case 3:
|
|
136
|
return AjaxResult.error("该物料不能放在这个容器或货架上,该容器已被其他操作员使用");
|
|
137
|
default:
|
周鸿
authored
|
138
139
140
|
if (taskType == 0) {
throw new ServiceException("容器状态未知");
}
|
|
141
142
143
144
|
break;
}
/*if (taskType == 1) {
|
|
145
|
throw new ServiceException("没有容器");
|
|
146
|
} else if (taskType == 2) {
|
|
147
148
|
throw new ServiceException("该物料不能放在这个容器上,请检查该物料是否可以混放");
} else {
|
|
149
|
if (taskType == 0){ throw new ServiceException("容器状态未知"); }
|
|
150
|
}*/
|
|
151
|
|
|
152
|
if (QuantityConstant.TASK_TYPE_SUPPLEMENTRECEIPT == taskType.intValue()) {
|
|
153
|
Container container = containerService.getContainerByCode(containerCode);
|
|
154
155
|
if (StringUtils.isNotNull(container) && StringUtils.isNotEmpty(container.getLocationCode())) {
locationCode = container.getLocationCode();
|
|
156
|
}
|
|
157
|
}
|
|
158
159
|
//检查库位编码合法性
checkLocationCode(locationCode, containerCode, taskType);
|
|
160
|
|
|
161
|
int unCompleteCombineNumber = shipmentContainerHeaderService.getUnCompleteCombineNumber(containerCode);
|
周鸿
authored
|
162
|
if (unCompleteCombineNumber > 0) {
|
|
163
164
|
throw new ServiceException("该托盘已经用于出库组盘");
}
|
|
165
166
167
168
|
/* 新建保存组盘头表记录*/
//根据容器编码查询组盘表头记录
LambdaQueryWrapper<ReceiptContainerHeader> lambda = Wrappers.lambdaQuery();
lambda.eq(ReceiptContainerHeader::getContainerCode, containerCode)
|
周鸿
authored
|
169
|
.le(ReceiptContainerHeader::getStatus, QuantityConstant.RECEIPT_CONTAINER_TASK);
|
|
170
171
|
lambda.last("limit 1");
ReceiptContainerHeader receiptContainerHeader = this.getOne(lambda);
|
|
172
|
|
|
173
|
// ReceiptContainerHeader receiptContainerHeader = new ReceiptContainerHeader();
|
|
174
|
//当size大于等于1表示容器已经有组盘了
|
周鸿
authored
|
175
|
if (receiptContainerHeader == null) {
|
|
176
|
ReceiptDetail receiptDetail = receiptDetailService.getById(receiptDetailId);
|
|
177
|
// 创建组盘头表
|
周鸿
authored
|
178
179
|
receiptContainerHeader = createReceiptContainerHeader(receiptContainerHeader, containerCode, locationCode, receiptDetail, taskType, locatingRule);
if (!this.save(receiptContainerHeader)) {
|
|
180
181
182
|
throw new ServiceException("入库组盘头表保存失败");
}
} else {
|
|
183
|
// receiptContainerHeader = list.get(0);
|
周鸿
authored
|
184
|
if (receiptContainerHeader.getStatus() > QuantityConstant.RECEIPT_CONTAINER_TASK && receiptContainerHeader.getStatus() < QuantityConstant.RECEIPT_CONTAINER_FINISHED) {
|
|
185
186
187
|
throw new ServiceException("容器已经生成任务,不能放物料了!");
}
}
|
|
188
|
// List<ReceiptContainerHeader> receiptContainerHeaders = this.list(lambda);
|
|
189
190
191
192
|
/* 更新入库单详情的收货数量*/
//根据入库单详情id查询入库详情
ReceiptDetail receiptDetail = receiptDetailService.getById(receiptDetailId);
receiptDetail.setId(receiptDetailId);
|
|
193
|
receiptDetail.setTaskQty(qty.add(receiptDetail.getTaskQty()));
|
|
194
|
//更新入库单详情的收货数量
|
周鸿
authored
|
195
|
if (!receiptDetailService.updateById(receiptDetail)) {
|
|
196
197
198
199
|
throw new ServiceException("更新入库单详情失败");
}
receiptDetail = receiptDetailService.getById(receiptDetailId);
|
|
200
|
//save组盘明细
|
|
201
|
receiptContainerDetailAdd(receiptContainerHeader, receiptDetail, qty, containerCode, locationCode);
|
|
202
|
//如果单据数量等于已收数量,更新入库详情状态和入库单状态
|
周鸿
authored
|
203
204
|
if (receiptDetail.getQty().compareTo(receiptDetail.getTaskQty()) == 0) {
if (StringUtils.isNotEmpty(locationCode)) {
|
|
205
206
207
208
|
receiptDetail.setProcessStamp(QuantityConstant.RECEIPT_HEADER_POSITION.toString());
} else {
receiptDetail.setProcessStamp(QuantityConstant.RECEIPT_HEADER_RECEIVING.toString());
}
|
周鸿
authored
|
209
|
if (!receiptDetailService.updateById(receiptDetail)) {
|
|
210
211
212
213
|
throw new ServiceException("更新入库详情处理标记失败");
}
ReceiptDetail receiptDetail1 = receiptDetailService.queryflow(receiptDetail);
|
周鸿
authored
|
214
|
if (!receiptDetailService.updateById(receiptDetail1)) {
|
|
215
216
217
218
|
throw new ServiceException("更新入库详情下一流程失败");
}
}
receiptDetailService.updateReceiptHeaderLastStatus(receiptDetail.getReceiptId());
|
|
219
|
return AjaxResult.success("组盘成功");
|
|
220
221
|
}
|
|
222
|
public ReceiptContainerHeader createReceiptContainerHeader(ReceiptContainerHeader receiptContainerHeader
|
周鸿
authored
|
223
|
, String containerCode, String locationCode, ReceiptDetail receiptDetail, Integer taskType, String locatingRule) {
|
|
224
|
Container container = containerService.getContainerByCode(containerCode);
|
周鸿
authored
|
225
|
if (ShiroUtils.getWarehouseCode().equals("KS0001")) {
|
|
226
227
228
|
if (!container.getCompanyCode().equals(receiptDetail.getCompanyCode())) {
throw new ServiceException("容器货主属性和单据不一致,请换容器");
}
|
周鸿
authored
|
229
|
if (StringUtils.isNotEmpty(receiptDetail.getUWarehouseCode()) && StringUtils.isNotEmpty(container.getUWarehouseCode())) {
|
|
230
231
232
233
234
|
if (!container.getUWarehouseCode().equals(receiptDetail.getUWarehouseCode())) {
throw new ServiceException("容器仓库属性和单据不一致,请换容器");
}
}
}
|
周鸿
authored
|
235
|
receiptContainerHeader = new ReceiptContainerHeader();
|
|
236
237
238
|
receiptContainerHeader.setWarehouseCode(ShiroUtils.getWarehouseCode());
receiptContainerHeader.setCompanyCode(receiptDetail.getCompanyCode());
receiptContainerHeader.setContainerCode(containerCode);
|
|
239
|
|
|
240
241
|
receiptContainerHeader.setContainerType(container.getContainerType());
receiptContainerHeader.setTaskType(taskType);
|
|
242
|
//判断地面托盘
|
周鸿
authored
|
243
|
if ("D".equals(container.getContainerType())) {
|
|
244
245
246
247
|
receiptContainerHeader.setToLocation(container.getLocationCode());
receiptContainerHeader.setFromLocation(container.getLocationCode());
taskType = QuantityConstant.TASK_TYPE_SUPPLEMENTRECEIPT;
}
|
周鸿
authored
|
248
|
if (ShiroUtils.getWarehouseCode().equals(QuantityConstant.WAREHOUSE_KS)) {
|
|
249
250
251
252
|
//U8工单领料齐套验证
ksCheckMesReceipt(receiptDetail);
}
|
|
253
254
|
if (taskType.equals(QuantityConstant.TASK_TYPE_SUPPLEMENTRECEIPT)) {
receiptContainerHeader.setFromLocation(container.getLocationCode());
|
|
255
|
Location location = locationService.getLocationByCode(container.getLocationCode());
|
周鸿
authored
|
256
|
String value = dictDataService.getDictValueByLabel(QuantityConstant.RULE_TASK_LOCATION, location.getZoneCode(), ShiroUtils.getWarehouseCode());
|
|
257
|
int taskLocationRule = Integer.parseInt(value);
|
|
258
|
if (taskLocationRule == QuantityConstant.RULE_TASK_SET_LOCATION) {
|
|
259
260
261
|
receiptContainerHeader.setToLocation(container.getLocationCode());
}
} else {
|
|
262
|
// receiptContainerHeader.setPort("P1004");
|
|
263
264
265
266
267
268
269
270
|
receiptContainerHeader.setToLocation(locationCode);
}
receiptContainerHeader.setProjectNo(receiptDetail.getProjectNo());
receiptContainerHeader.setCreatedBy(ShiroUtils.getLoginName());
receiptContainerHeader.setLastUpdatedBy(ShiroUtils.getLoginName());
receiptContainerHeader.setLocatingRule(locatingRule);
return receiptContainerHeader;
}
|
周鸿
authored
|
271
|
|
|
272
|
//U8工单领料齐套验证
|
周鸿
authored
|
273
274
275
|
public void ksCheckMesReceipt(ReceiptDetail receiptDetail) {
ReceiptHeader receiptHeader = receiptHeaderService.getById(receiptDetail.getReceiptId());
if (receiptHeader.getReceiptType().equals("SI") && StringUtils.isNotEmpty(receiptDetail.getReferLineNum())) {
|
|
276
277
278
|
CompanyU8 companyWu = new CompanyU8();
companyWu.setCompanyCode(receiptHeader.getCompanyCode());
companyWu = companyU8Service.getByCode(companyWu);
|
周鸿
authored
|
279
|
if (companyWu == null) {
|
|
280
281
282
|
throw new ServiceException("入库单对应的U8账套不存在");
}
Map detailMap = new HashMap();
|
周鸿
authored
|
283
284
285
|
detailMap.put("MODID", receiptDetail.getReferLineNum());
detailMap.put("iQuantity", receiptDetail.getQty().subtract(receiptDetail.getTaskQty()));
detailMap.put("itemcode", receiptDetail.getMaterialCode());
|
|
286
287
288
289
|
List<Map> maps = new ArrayList<>();
maps.add(detailMap);
|
周鸿
authored
|
290
291
292
|
Map<String, Object> map = new HashMap();
map.put("CompanyCode", companyWu.getUCompanyCode());
map.put("details", maps);
|
|
293
|
AjaxResult ajaxResult = finishedProductService.checkMesReceipt(map);
|
周鸿
authored
|
294
|
if (ajaxResult.hasErr()) {
|
|
295
296
297
298
|
throw new ServiceException(ajaxResult.getMsg());
}
}
}
|
|
299
|
|
|
300
|
/**
|
|
301
|
* 超收检查
|
周鸿
authored
|
302
|
*
|
|
303
304
305
|
* @param detail
* @param qty
*/
|
周鸿
authored
|
306
|
private void checkOverReceiving(ReceiptDetail detail, BigDecimal qty) {
|
|
307
|
BigDecimal _total = detail.getTaskQty().add(qty);
|
周鸿
authored
|
308
|
if (_total.compareTo(detail.getQty()) <= 0) {
|
|
309
310
311
312
313
|
//收货量<=明细总量
return;
}
ConfigValue configValue = configValueMapper.getConfigValue(ShiroUtils.getWarehouseCode(), "receipt");
|
周鸿
authored
|
314
315
|
ReceiptPreference preference = receiptPreferenceMapper.getReceiptPreference(ShiroUtils.getWarehouseCode(), configValue.getValue());
if (!preference.getAllowOverReceiving()) {
|
|
316
317
318
319
320
321
322
|
//入库首选项配置为不允许超收
throw new ServiceException(String.format("不允许超收"));
}
//超收比例
BigDecimal _over_rate = new BigDecimal(String.valueOf(1 + preference.getAllowOverReceivingQty() / 100.0));
//超收量上限
|
周鸿
authored
|
323
324
|
BigDecimal _total_over = detail.getQty().multiply(_over_rate);
if (_total_over.compareTo(_total) >= 0) {
|
|
325
326
327
328
329
330
|
//在入库首选项的超收范围内
return;
}
//超过了入库首选项配置的超收比例
throw new ServiceException(String.format("超收上限是: %s%",
|
周鸿
authored
|
331
|
_over_rate.multiply(new BigDecimal(100))));
|
|
332
333
334
|
}
/**
|
|
335
|
* 批量撤销入库组盘
|
周鸿
authored
|
336
|
*
|
huhai
authored
|
337
338
|
* @param ids 容器头表标识列表
* @return true 全部取消成功
|
|
339
340
|
*/
@Override
|
|
341
|
@Transactional(rollbackFor = Exception.class)
|
|
342
343
344
|
public Boolean cancelByIds(List<Integer> ids) {
for (Integer id : ids) {
//如果已生成任务则不允许取消组盘
|
周鸿
authored
|
345
|
if (this.getById(id).getStatus() < QuantityConstant.RECEIPT_CONTAINER_TASK) {
|
|
346
347
348
349
350
351
|
//根据组盘头表id查询组盘明细表
LambdaQueryWrapper<ReceiptContainerDetail> containerDetailLambda = Wrappers.lambdaQuery();
containerDetailLambda.eq(ReceiptContainerDetail::getReceiptContainerId, id);
List<ReceiptContainerDetail> receiptContainerDetails = receiptContainerDetailService.list(containerDetailLambda);
//查询入库单明细,减去已收数量,更新单据
|
周鸿
authored
|
352
|
for (ReceiptContainerDetail receiptContainerDetail : receiptContainerDetails) {
|
|
353
|
ReceiptDetail receiptDetail = receiptDetailService.getById(receiptContainerDetail.getReceiptDetailId());
|
|
354
|
receiptDetail.setTaskQty(receiptDetail.getTaskQty().subtract(receiptContainerDetail.getQty()));
|
周鸿
authored
|
355
356
357
|
if (!receiptDetailService.updateById(receiptDetail)) {
throw new ServiceException("回滚入库明细失败");
}
|
|
358
359
360
361
362
363
364
365
366
|
containerDetailLambda = Wrappers.lambdaQuery();
containerDetailLambda.eq(ReceiptContainerDetail::getReceiptId, receiptContainerDetail.getReceiptId());
List<ReceiptContainerDetail> containerDetailList = receiptContainerDetailService.list(containerDetailLambda);
//如果是临时容器,取消组盘时删除容器表
containerService.removeContainer(receiptContainerDetail.getContainerType(), receiptContainerDetail.getContainerCode());
//如果入库组盘没有该入库单的组盘信息,回滚入库单状态
|
周鸿
authored
|
367
|
if (containerDetailList == null) {
|
|
368
369
370
371
372
373
|
ReceiptHeader receiptHeader = new ReceiptHeader();
receiptHeader.setId(receiptContainerDetail.getReceiptId());
receiptHeader.setFirstStatus(QuantityConstant.RECEIPT_HEADER_RECEIVING);
receiptHeader.setLastStatus(QuantityConstant.RECEIPT_HEADER_RECEIVING);
receiptHeader.setLastUpdatedBy(ShiroUtils.getLoginName());
|
周鸿
authored
|
374
375
376
|
if (!receiptHeaderService.updateById(receiptHeader)) {
throw new ServiceException("回滚头表状态失败");
}
|
|
377
378
|
}
|
周鸿
authored
|
379
380
|
if (!receiptContainerDetailService.removeById(receiptContainerDetail.getId())) {
throw new ServiceException("删除入库组盘明细表失败,id是" + receiptContainerDetail.getId());
|
|
381
382
383
|
}
}
//删除入库组盘头表
|
周鸿
authored
|
384
|
if (!this.removeById(id)) {
|
|
385
386
387
388
389
390
391
392
393
394
395
396
|
throw new ServiceException("删除入库组盘头表失败");
}
} else {
throw new ServiceException("已生成任务不允许取消");
}
}
return true;
}
/**
* 检查容器状态
*
|
huhai
authored
|
397
398
|
* @param record 容器实列
* @return 成功 ;可以使用容器
|
|
399
400
401
402
403
|
*/
@Override
public AjaxResult checkContainer(ReceiptContainerView record) {
//容器都是单据SN码,每个入库单都是新增容器
|
|
404
|
if (com.huaheng.common.utils.StringUtils.isEmpty(record.getContainerCode())) {
|
|
405
406
407
|
throw new ServiceException("容器不能为空");
}
|
|
408
|
if (taskHeaderService.UncompleteCount(record.getContainerCode()).intValue() > 0) {
|
|
409
410
411
412
413
414
415
416
417
418
419
420
|
throw new ServiceException("容器已经存在任务,请更换容器");
}
return AjaxResult.success("");
}
@Override
public AjaxResult batchSave(List<ReceiptContainerView> list) {
if (list.size() < 1) {
throw new ServiceException("收货明细是空!");
}
checkContainer(list.get(0));
|
|
421
|
|
|
422
423
|
AjaxResult ajaxResult = null;
for (ReceiptContainerView receiptContainerView : list) {
|
|
424
|
/* ReceivingDamain receivingDamain=new ReceivingDamain();
|
|
425
|
com.huaheng.common.utils.bean.BeanUtils.copyBeanProp(receivingDamain, receiptContainerView);
|
|
426
|
receivingDamain.setContainerCode(receiptContainerView.getReceiptContainerCode());*/
|
|
427
|
|
|
428
|
ajaxResult = saveContainer(receiptContainerView);
|
|
429
430
|
}
return ajaxResult;
|
|
431
432
|
}
|
|
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
|
@Override
public AjaxResult PDAbatchSave(List<ReceiptContainerView> list) {
if (list.size() < 1) {
throw new ServiceException("收货明细是空!");
}
checkContainer(list.get(0));
AjaxResult ajaxResult = null;
for (ReceiptContainerView receiptContainerView : list) {
/* ReceivingDamain receivingDamain=new ReceivingDamain();
com.huaheng.common.utils.bean.BeanUtils.copyBeanProp(receivingDamain, receiptContainerView);
receivingDamain.setContainerCode(receiptContainerView.getReceiptContainerCode());*/
ajaxResult = PDAsaveContainer(receiptContainerView);
}
return ajaxResult;
}
|
周鸿
authored
|
450
|
|
|
451
452
|
/**
* 移动端校验库位
|
周鸿
authored
|
453
|
*
|
|
454
455
456
457
458
|
* @param record
* @return
*/
@Override
public Boolean mobileCheckLocationCode(ReceiptContainerView record) {
|
|
459
|
return checkLocationCode(record.getLocationCode(), record.getContainerCode(), Integer.valueOf(record.getTaskType()));
|
|
460
461
462
463
|
}
/**
* 检查容器编码合法性
|
周鸿
authored
|
464
|
*
|
huhai
authored
|
465
|
* @param containerCode 容器编码
|
周鸿
authored
|
466
|
* @param materialCode 物料编码
|
|
467
468
469
470
|
* @return 返回容器状态,如果需自动生成容器编码返回1
*/
@Transactional
public Integer checkContainer(String containerCode, String materialCode) {
|
|
471
|
Material material = materialService.getMaterialByCode(materialCode);
|
周鸿
authored
|
472
473
474
475
|
if (StringUtils.isEmpty(containerCode)) {
if (material.getAutoGenSerialNum() == 0) {
return 1;
//需自动生成容器编码
|
|
476
477
478
479
|
} else {
throw new ServiceException("容器不能为空");
}
}
|
|
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
|
/**
* 判断物料是否可以放在当前容器
*/
if (!material.getIsMix()) {
LambdaQueryWrapper<InventoryDetail> queryWrapper = Wrappers.lambdaQuery();
queryWrapper.eq(InventoryDetail::getContainerCode, containerCode);
/* 该容器已存物料数*/
int inventoryDetailCount = inventoryDetailService.count(queryWrapper);
LambdaQueryWrapper<InventoryDetail> lambdaQueryWrapper = Wrappers.lambdaQuery();
lambdaQueryWrapper.eq(InventoryDetail::getContainerCode, containerCode)
.eq(InventoryDetail::getMaterialCode, materialCode);
/* 该容器存放该物料的记录数*/
int inventoryDetailMaterialCount = inventoryDetailService.count(lambdaQueryWrapper);
/* 存放多种物料时返回*/
if (inventoryDetailCount != inventoryDetailMaterialCount) {
return 2;
}
}
|
|
498
499
|
LambdaQueryWrapper<Container> lambda = Wrappers.lambdaQuery();
lambda.eq(Container::getCode, containerCode);
|
|
500
|
lambda.eq(Container::getWarehouseCode, ShiroUtils.getWarehouseCode());
|
|
501
|
Container container = containerService.getOne(lambda);
|
周鸿
authored
|
502
|
if (container == null) {
|
|
503
504
|
throw new ServiceException("该容器编号不存在");
}
|
周鸿
authored
|
505
506
|
if (ShiroUtils.getWarehouseCode().equals("KS0001")) {
if (!ShiroUtils.getCompanyCodeList().contains(container.getCompanyCode())) {
|
|
507
508
|
throw new ServiceException("该操作员没有此容器的操作权限");
}
|
周鸿
authored
|
509
|
if (StringUtils.isEmpty(container.getUWarehouseCode())) {
|
|
510
511
|
throw new ServiceException("该容器没有关联u8仓库");
}
|
|
512
|
}
|
周鸿
authored
|
513
|
if (container.getStatus().equals(QuantityConstant.STATUS_CONTAINER_LOCK)) {
|
|
514
|
// throw new ServiceException("容器已经锁定,不能再组盘");
|
|
515
|
}
|
|
516
517
|
//检查该容器编码是否已存任务
LambdaQueryWrapper<TaskHeader> lambdaQueryWrapper = Wrappers.lambdaQuery();
|
|
518
519
520
521
|
lambdaQueryWrapper.eq(TaskHeader::getContainerCode, containerCode)
.lt(TaskHeader::getStatus, QuantityConstant.TASK_STATUS_COMPLETED)
.ge(TaskHeader::getStatus, QuantityConstant.TASK_STATUS_RELEASE)
.eq(TaskHeader::getWarehouseCode, ShiroUtils.getWarehouseCode());
|
周鸿
authored
|
522
|
if (taskHeaderService.count(lambdaQueryWrapper) > 0) {
|
|
523
|
throw new ServiceException("容器已经存在任务,请更换容器");
|
|
524
|
}
|
|
525
526
|
//昆山检查该容器或者货架编码是否已存任务
checkKSContainerORShelf(container);
|
|
527
|
|
周鸿
authored
|
528
|
if (StringUtils.isEmpty(container.getLocationCode())) {
|
|
529
|
return QuantityConstant.TASK_TYPE_WHOLERECEIPT;
|
周鸿
authored
|
530
531
532
|
} else if (StringUtils.isNotEmpty(container.getStatus())
&& (container.getStatus().equals(QuantityConstant.STATUS_CONTAINER_EMPTY)
|| container.getStatus().equals(QuantityConstant.STATUS_CONTAINER_SOME))) {
|
|
533
|
return QuantityConstant.TASK_TYPE_SUPPLEMENTRECEIPT;
|
|
534
|
} else if (QuantityConstant.STATUS_CONTAINER_FULL.equals(container.getStatus())) {
|
|
535
|
throw new ServiceException("该容器已满,请更换容器");
|
周鸿
authored
|
536
537
|
} else if (StringUtils.isNotEmpty(container.getStatus())
&& container.getStatus().equals(QuantityConstant.STATUS_CONTAINER_LOCK)) {
|
|
538
|
//当容器锁住时,同一个用户可以再次组盘
|
|
539
540
|
LambdaQueryWrapper<TaskHeader> lambdaQuery = Wrappers.lambdaQuery();
lambdaQuery.lt(TaskHeader::getStatus, QuantityConstant.TASK_STATUS_COMPLETED);
|
周鸿
authored
|
541
542
543
544
|
lambdaQuery.eq(TaskHeader::getInternalTaskType, 100);
lambdaQuery.eq(TaskHeader::getContainerCode, containerCode);
if (ShiroUtils.getWarehouseCode().equals("KS0001")) {
lambdaQuery.eq(TaskHeader::getCreatedBy, ShiroUtils.getUserName());
|
|
545
|
}
|
|
546
547
|
lambdaQuery.last("limit 1");
lambdaQuery.orderByDesc(TaskHeader::getId);
|
周鸿
authored
|
548
549
|
TaskHeader taskHeader = taskHeaderService.getOne(lambdaQuery);
if (taskHeader != null) {
|
|
550
551
|
return taskHeader.getTaskType();
}
|
|
552
|
return 3;
|
|
553
554
555
556
|
}
return 0;
}
|
|
557
|
|
周鸿
authored
|
558
559
560
|
public void checkKSContainerORShelf(Container container) {
if (StringUtils.isNotEmpty(ShiroUtils.getWarehouseCode())
&& ShiroUtils.getWarehouseCode().equals(QuantityConstant.WAREHOUSE_KS)) {
|
|
561
|
LambdaQueryWrapper<TaskHeader> lambdaQueryWrapper1 = Wrappers.lambdaQuery();
|
周鸿
authored
|
562
563
|
if (container.getZoneCode().equals("AGV")) {
if (StringUtils.isEmpty(container.getGoodsShelfNo())) {
|
|
564
565
|
throw new ServiceException("该容器没有绑定货架");
}
|
|
566
|
lambdaQueryWrapper1.eq(TaskHeader::getGoodsShelfNo, container.getGoodsShelfNo());
|
周鸿
authored
|
567
|
} else {
|
|
568
569
570
571
572
|
lambdaQueryWrapper1.eq(TaskHeader::getContainerCode, container.getCode());
}
lambdaQueryWrapper1.eq(TaskHeader::getStatus, QuantityConstant.TASK_STATUS_BUILD);
lambdaQueryWrapper1.eq(TaskHeader::getWarehouseCode, ShiroUtils.getWarehouseCode());
lambdaQueryWrapper1.last("limit 1");
|
周鸿
authored
|
573
574
575
576
|
TaskHeader task = taskHeaderService.getOne(lambdaQueryWrapper1);
if (task != null) {
if (task.getCreatedBy().equals(ShiroUtils.getUserName())) {
} else {
|
|
577
578
579
580
581
582
|
throw new ServiceException("容器或货架已经存在任务,请更换容器");
}
}
}
}
|
|
583
584
|
/**
* 检查库位是否合法
|
周鸿
authored
|
585
586
|
*
* @param locationCode 库位编码
|
|
587
|
* @param containerCode 容器编码
|
周鸿
authored
|
588
|
* @param taskType 任务类型
|
|
589
590
591
592
593
594
|
* @return
*/
@Transactional
Boolean checkLocationCode(String locationCode, String containerCode, Integer taskType) {
//如果选了库位,就要校验库位和已经组盘的库位是否一致,避免重入库
if (StringUtils.isEmpty(locationCode)) {
|
周鸿
authored
|
595
|
if (QuantityConstant.TASK_TYPE_SUPPLEMENTRECEIPT == taskType.intValue()) {
|
|
596
597
|
throw new ServiceException("补充入库,必须填写库位");
} else {
|
|
598
|
return true;
|
|
599
600
601
|
}
}
|
|
602
|
Location location = locationService.getLocationByCode(locationCode, ShiroUtils.getWarehouseCode());
|
|
603
604
605
|
if (location == null) {
throw new ServiceException("库位不存在!");
}
|
周鸿
authored
|
606
|
if (!QuantityConstant.STATUS_LOCATION_EMPTY.equals(location.getStatus())) {
|
|
607
|
// throw new ServiceException("库位不是空闲状态!");
|
|
608
|
}
|
|
609
|
if (QuantityConstant.TASK_TYPE_WHOLERECEIPT == taskType.intValue()) {
|
|
610
|
if (StringUtils.isNotEmpty(location.getContainerCode())) {
|
|
611
|
throw new ServiceException("库位(" + locationCode + ")有容器(" + location.getContainerCode() + "),不能整盘入库!");
|
|
612
613
|
}
}
|
周鸿
authored
|
614
615
|
if (QuantityConstant.TASK_TYPE_SUPPLEMENTRECEIPT == taskType.intValue()) {
if (StringUtils.isEmpty(location.getContainerCode())) {
|
|
616
617
|
throw new ServiceException("库位(" + locationCode + ")没有容器,不能补充入库!");
} else if (!location.getContainerCode().equals(containerCode)) {
|
周鸿
authored
|
618
|
throw new ServiceException("库位(" + containerCode + ")对应的容器是:" + location.getContainerCode() + ",请重选库位!");
|
|
619
620
621
622
623
624
625
|
}
}
return true;
}
/**
* 增加组盘明细记录
|
周鸿
authored
|
626
|
*
|
|
627
|
* @param
|
|
628
|
* @param receiptDetail 入库详情
|
周鸿
authored
|
629
|
* @param qty 收货数量
|
|
630
631
632
|
* @param containerCode 容器编码
*/
@Transactional
|
周鸿
authored
|
633
|
public void receiptContainerDetailAdd(ReceiptContainerHeader receiptContainerHeader, ReceiptDetail receiptDetail, BigDecimal qty, String containerCode, String locationCode) {
|
|
634
|
int receiptContainerHeaderId = receiptContainerHeader.getId();
|
|
635
636
637
638
639
640
|
LambdaQueryWrapper<ReceiptContainerDetail> lambda = Wrappers.lambdaQuery();
lambda.eq(ReceiptContainerDetail::getReceiptContainerId, receiptContainerHeaderId)
.eq(ReceiptContainerDetail::getReceiptId, receiptDetail.getReceiptId())
.eq(ReceiptContainerDetail::getReceiptDetailId, receiptDetail.getId())
.last("Limit 1");
ReceiptContainerDetail receiptContainerDetail = receiptContainerDetailService.getOne(lambda);
|
|
641
642
643
644
645
|
//查询容器
LambdaQueryWrapper<Container> containerLambda = Wrappers.lambdaQuery();
containerLambda.eq(Container::getCode, containerCode)
.eq(Container::getWarehouseCode, ShiroUtils.getWarehouseCode());
Container container = containerService.getOne(containerLambda);
|
周鸿
authored
|
646
|
if (receiptContainerDetail == null) {
|
|
647
648
649
650
651
652
|
//查询入库头表
LambdaQueryWrapper<ReceiptHeader> receiptHeaderLambda = Wrappers.lambdaQuery();
receiptHeaderLambda.eq(ReceiptHeader::getId, receiptDetail.getReceiptId())
.eq(ReceiptHeader::getCode, receiptDetail.getReceiptCode());
ReceiptHeader receiptHeader = receiptHeaderService.getOne(receiptHeaderLambda);
|
|
653
|
|
|
654
655
656
|
receiptContainerDetail = new ReceiptContainerDetail();
receiptContainerDetail.setReceiptContainerId(receiptContainerHeaderId);
receiptContainerDetail.setWarehouseCode(ShiroUtils.getWarehouseCode());
|
|
657
|
receiptContainerDetail.setUWarehouseCode(receiptHeader.getUWarehouseCode());
|
|
658
659
|
receiptContainerDetail.setReceiptId(receiptDetail.getReceiptId());
receiptContainerDetail.setReceiptDetailId(receiptDetail.getId());
|
|
660
|
receiptContainerDetail.setTaskType(receiptContainerHeader.getTaskType());
|
|
661
662
663
664
665
666
667
668
669
670
|
receiptContainerDetail.setReceiptCode(receiptDetail.getReceiptCode());
receiptContainerDetail.setReceiptType(receiptHeader.getReceiptType());
receiptContainerDetail.setLocationCode(locationCode);
receiptContainerDetail.setContainerCode(container.getCode());
receiptContainerDetail.setContainerType(container.getContainerType());
receiptContainerDetail.setCompanyCode(receiptDetail.getCompanyCode());
receiptContainerDetail.setMaterialCode(receiptDetail.getMaterialCode());
receiptContainerDetail.setMaterialName(receiptDetail.getMaterialName());
receiptContainerDetail.setMaterialSpec(receiptDetail.getMaterialSpec());
receiptContainerDetail.setMaterialUnit(receiptDetail.getMaterialUnit());
|
|
671
|
receiptContainerDetail.setQty(qty);
|
|
672
673
674
675
676
677
678
679
680
681
|
receiptContainerDetail.setSupplierCode(receiptDetail.getSupplierCode());
receiptContainerDetail.setBatch(receiptDetail.getBatch());
receiptContainerDetail.setLot(receiptDetail.getLot());
receiptContainerDetail.setProjectNo(receiptDetail.getProjectNo());
receiptContainerDetail.setManufactureDate(receiptDetail.getManufactureDate());
receiptContainerDetail.setExpirationDate(receiptDetail.getExpirationDate());
receiptContainerDetail.setAgingDate(receiptDetail.getAgingDate());
receiptContainerDetail.setInventorySts(receiptDetail.getInventorySts());
receiptContainerDetail.setCreatedBy(ShiroUtils.getLoginName());
receiptContainerDetail.setLastUpdatedBy(ShiroUtils.getLoginName());
|
|
682
|
receiptContainerDetail.setSyncMms(0);
|
|
683
|
receiptContainerDetail.setZoneCode(container.getZoneCode());
|
周鸿
authored
|
684
685
|
receiptContainerDetail.setColor(receiptDetail.getColor());
if (!receiptContainerDetailService.save(receiptContainerDetail)) {
|
|
686
687
688
|
throw new ServiceException("保存入库组盘详情失败");
}
} else {
|
|
689
|
receiptContainerDetail.setQty(receiptContainerDetail.getQty().add(qty));
|
|
690
|
receiptContainerDetail.setZoneCode(container.getZoneCode());
|
周鸿
authored
|
691
|
if (!receiptContainerDetailService.updateById(receiptContainerDetail)) {
|
|
692
693
694
695
696
697
698
699
700
|
throw new ServiceException("更新入库组盘详情失败");
}
}
}
/**
* 自动生成容器编码
|
周鸿
authored
|
701
|
*
|
|
702
703
704
|
* @return 容器编码
*/
@Transactional
|
周鸿
authored
|
705
|
public String createContainer() {
|
|
706
707
708
709
710
711
712
713
714
715
716
717
|
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);
|
|
718
|
container.setStatus(QuantityConstant.STATUS_CONTAINER_EMPTY);
|
周鸿
authored
|
719
|
if (!containerService.save(container)) {
|
|
720
721
722
723
|
throw new ServiceException("新增容器失败");
}
return code;
}
|
|
724
725
726
727
728
729
730
731
732
|
@Override
@Transactional
public int insertTodayReceiptContainerHeader(ReceiptBill receiptBill, String receiptCode) {
String receiptContainerCode = receiptBill.getReceiptContainerCode();
String locationCode = receiptBill.getLocationCode();
String companyCode = receiptBill.getCompanyCode();
ReceiptContainerHeader recorder = new ReceiptContainerHeader();
recorder.setContainerCode(receiptContainerCode);
|
|
733
|
recorder.setToLocation(locationCode);
|
|
734
735
|
recorder.setWarehouseCode(ShiroUtils.getWarehouseCode());
recorder.setCompanyCode(companyCode);
|
|
736
|
recorder.setTaskType(QuantityConstant.TASK_TYPE_WHOLERECEIPT);
|
|
737
|
recorder.setStatus(QuantityConstant.RECEIPT_CONTAINER_BUILD);
|
|
738
|
recorder.setCreatedBy(ShiroUtils.getLoginName());
|
|
739
|
recorder.setLastUpdatedBy(ShiroUtils.getLoginName());
|
|
740
741
742
743
744
745
746
747
|
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 = getOne(receiptContainerHeaderLambada);
|
周鸿
authored
|
748
|
if (receiptContainerHeader == null) {
|
|
749
750
751
752
753
|
save(recorder);
} else {
return receiptContainerHeader.getId();
}
|
|
754
755
756
|
locationService.updateStatus(locationCode, QuantityConstant.STATUS_LOCATION_LOCK);
containerService.updateLocationCodeAndStatus(receiptContainerCode,
locationCode, QuantityConstant.STATUS_CONTAINER_SOME);
|
|
757
758
|
return recorder.getId();
}
|
|
759
760
761
|
/**
* 取消入库任务
|
周鸿
authored
|
762
|
*
|
|
763
764
765
766
|
* @param id 入库组盘头id
* @return
*/
@Override
|
|
767
|
@Transactional
|
|
768
769
770
771
772
|
public AjaxResult cancelReceipt(Integer id) {
/**
* 回滚组盘主表状态
*/
ReceiptContainerHeader receiptContainerHeader = new ReceiptContainerHeader();
|
|
773
|
receiptContainerHeader.setStatus(QuantityConstant.RECEIPT_CONTAINER_BUILD);
|
|
774
|
receiptContainerHeader.setId(id);
|
周鸿
authored
|
775
|
if (!updateById(receiptContainerHeader)) {
|
|
776
777
778
779
780
781
782
783
784
785
|
throw new ServiceException("回滚入库组盘头表失败");
}
/**
* 回滚组盘明细状态
*/
LambdaQueryWrapper<ReceiptContainerDetail> lambdaQueryWrapper = Wrappers.lambdaQuery();
lambdaQueryWrapper.eq(ReceiptContainerDetail::getReceiptContainerId, id);
List<ReceiptContainerDetail> containerDetailList = receiptContainerDetailService.list(lambdaQueryWrapper);
for (ReceiptContainerDetail containerDetail : containerDetailList) {
|
|
786
|
containerDetail.setStatus(QuantityConstant.RECEIPT_CONTAINER_BUILD);
|
|
787
|
}
|
周鸿
authored
|
788
|
if (containerDetailList != null && containerDetailList.size() > 0 && !receiptContainerDetailService.updateBatchById(containerDetailList)) {
|
|
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
|
throw new ServiceException("回滚入库组盘明细失败");
}
/**
* 回滚入库单头表、入库单明细状态
*/
for (ReceiptContainerDetail containerDetail : containerDetailList) {
ReceiptHeader receiptHeader = receiptHeaderService.getById(containerDetail.getReceiptId());
receiptHeader.setLastStatus(QuantityConstant.RECEIPT_HEADER_WAIT);
ReceiptDetail receiptDetail = receiptDetailService.getById(containerDetail.getReceiptDetailId());
receiptDetail.setProcessStamp(String.valueOf(QuantityConstant.RECEIPT_HEADER_WAIT));
if (!receiptHeaderService.updateById(receiptHeader)) {
throw new ServiceException("回滚入库单头表失败");
}
if (!receiptDetailService.updateById(receiptDetail)) {
throw new ServiceException("回滚入库单明细失败");
}
}
return AjaxResult.success("成功");
}
|
|
809
810
811
812
813
814
815
816
|
@Override
public int getUnCompleteCombineNumber(String containerCode) {
LambdaQueryWrapper<ReceiptContainerHeader> receiptContainerHeaderLambdaQueryWrapper = Wrappers.lambdaQuery();
receiptContainerHeaderLambdaQueryWrapper.eq(ReceiptContainerHeader::getContainerCode, containerCode)
.lt(ReceiptContainerHeader::getStatus, QuantityConstant.RECEIPT_CONTAINER_FINISHED);
int number = 0;
List<ReceiptContainerHeader> receiptContainerHeaderList = list(receiptContainerHeaderLambdaQueryWrapper);
|
周鸿
authored
|
817
|
if (receiptContainerHeaderList != null && receiptContainerHeaderList.size() > 0) {
|
|
818
819
820
821
822
823
824
825
826
827
828
829
830
|
number = receiptContainerHeaderList.size();
}
return number;
}
@Override
public List<ReceiptContainerHeader> getUnCompleteCombineList() {
LambdaQueryWrapper<ReceiptContainerHeader> receiptContainerHeaderLambdaQueryWrapper = Wrappers.lambdaQuery();
receiptContainerHeaderLambdaQueryWrapper
.lt(ReceiptContainerHeader::getStatus, QuantityConstant.RECEIPT_CONTAINER_FINISHED);
List<ReceiptContainerHeader> receiptContainerHeaderList = list(receiptContainerHeaderLambdaQueryWrapper);
return receiptContainerHeaderList;
}
|
|
831
|
|
|
832
|
@Override
|
|
833
834
|
public ReceiptContainerHeader selectFirstEntity(ReceiptContainerHeader query) {
LambdaQueryWrapper<ReceiptContainerHeader> lamb = Wrappers.lambdaQuery();
|
周鸿
authored
|
835
836
837
|
lamb.eq(StringUtils.isNotNull(query.getStatus()), ReceiptContainerHeader::getStatus, query.getStatus());
lamb.eq(StringUtils.isNotEmpty(query.getContainerCode()), ReceiptContainerHeader::getContainerCode, query.getContainerCode());
lamb.eq(StringUtils.isNotEmpty(query.getWarehouseCode()), ReceiptContainerHeader::getWarehouseCode, query.getWarehouseCode());
|
|
838
839
840
|
lamb.last("limit 1");
return this.getOne(lamb);
}
|
周鸿
authored
|
841
|
|
|
842
843
844
|
@Override
public List<ReceiptContainerHeader> selectFirstEntityList(ReceiptContainerHeader query) {
LambdaQueryWrapper<ReceiptContainerHeader> lamb = Wrappers.lambdaQuery();
|
周鸿
authored
|
845
846
847
|
lamb.eq(StringUtils.isNotNull(query.getStatus()), ReceiptContainerHeader::getStatus, query.getStatus());
lamb.eq(StringUtils.isNotEmpty(query.getContainerCode()), ReceiptContainerHeader::getContainerCode, query.getContainerCode());
lamb.eq(StringUtils.isNotEmpty(query.getWarehouseCode()), ReceiptContainerHeader::getWarehouseCode, query.getWarehouseCode());
|
|
848
849
850
851
|
return this.list(lamb);
}
@Override
|
周鸿
authored
|
852
|
public AjaxResult clearContainerHeader() {
|
|
853
854
855
856
857
|
LambdaQueryWrapper<ReceiptContainerHeader> receiptContainerHeaderLambdaQueryWrapper = Wrappers.lambdaQuery();
receiptContainerHeaderLambdaQueryWrapper.eq(ReceiptContainerHeader::getStatus,
QuantityConstant.RECEIPT_CONTAINER_BUILD);
List<ReceiptContainerHeader> receiptContainerHeaderList =
this.list(receiptContainerHeaderLambdaQueryWrapper);
|
周鸿
authored
|
858
|
for (ReceiptContainerHeader receiptContainerHeader : receiptContainerHeaderList) {
|
|
859
860
861
862
|
Date date = receiptContainerHeader.getCreated();
Date now = new Date();
int fore = date.getDay();
int day = now.getDay();
|
周鸿
authored
|
863
|
if (fore != day) {
|
|
864
865
866
867
868
869
870
871
872
|
this.removeById(receiptContainerHeader);
}
}
LambdaQueryWrapper<ReceiptContainerHeader> receiptContainerHeaderLambdaQueryWrapper1 = Wrappers.lambdaQuery();
receiptContainerHeaderLambdaQueryWrapper1.eq(ReceiptContainerHeader::getStatus,
QuantityConstant.RECEIPT_CONTAINER_TASK);
List<ReceiptContainerHeader> receiptContainerHeaderList1 =
this.list(receiptContainerHeaderLambdaQueryWrapper1);
|
周鸿
authored
|
873
|
for (ReceiptContainerHeader receiptContainerHeader : receiptContainerHeaderList1) {
|
|
874
875
876
877
878
879
880
|
String containerCode = receiptContainerHeader.getContainerCode();
LambdaQueryWrapper<TaskHeader> taskHeaderLambdaQueryWrapper = Wrappers.lambdaQuery();
taskHeaderLambdaQueryWrapper.lt(TaskHeader::getStatus, QuantityConstant.TASK_STATUS_COMPLETED)
.in(TaskHeader::getTaskType, QuantityConstant.TASK_TYPE_WHOLERECEIPT,
QuantityConstant.TASK_TYPE_SUPPLEMENTRECEIPT)
.eq(TaskHeader::getContainerCode, containerCode);
List<TaskHeader> taskHeaderList = taskHeaderService.list(taskHeaderLambdaQueryWrapper);
|
周鸿
authored
|
881
|
if (taskHeaderList.size() == 0) {
|
|
882
883
884
885
886
887
888
889
890
891
|
receiptContainerHeader.setStatus(QuantityConstant.RECEIPT_CONTAINER_FINISHED);
this.updateById(receiptContainerHeader);
}
}
LambdaQueryWrapper<ShipmentContainerHeader> shipmentContainerHeaderLambdaQueryWrapper = Wrappers.lambdaQuery();
shipmentContainerHeaderLambdaQueryWrapper.eq(ShipmentContainerHeader::getStatus,
QuantityConstant.SHIPMENT_CONTAINER_BUILD);
List<ShipmentContainerHeader> shipmentContainerHeaderList =
shipmentContainerHeaderService.list(shipmentContainerHeaderLambdaQueryWrapper);
|
周鸿
authored
|
892
|
for (ShipmentContainerHeader shipmentContainerHeader : shipmentContainerHeaderList) {
|
|
893
894
895
896
|
Date date = shipmentContainerHeader.getCreated();
Date now = new Date();
int fore = date.getDay();
int day = now.getDay();
|
周鸿
authored
|
897
|
if (fore != day) {
|
|
898
899
900
901
902
903
904
905
906
|
shipmentContainerHeaderService.removeById(shipmentContainerHeader);
}
}
LambdaQueryWrapper<ShipmentContainerHeader> shipmentContainerHeaderLambdaQueryWrapper1 = Wrappers.lambdaQuery();
shipmentContainerHeaderLambdaQueryWrapper1.eq(ShipmentContainerHeader::getStatus,
QuantityConstant.SHIPMENT_CONTAINER_TASK);
List<ShipmentContainerHeader> shipmentContainerHeaderList1 =
shipmentContainerHeaderService.list(shipmentContainerHeaderLambdaQueryWrapper1);
|
周鸿
authored
|
907
|
for (ShipmentContainerHeader shipmentContainerHeader : shipmentContainerHeaderList1) {
|
|
908
909
910
911
912
913
914
|
String containerCode = shipmentContainerHeader.getContainerCode();
LambdaQueryWrapper<TaskHeader> taskHeaderLambdaQueryWrapper = Wrappers.lambdaQuery();
taskHeaderLambdaQueryWrapper.lt(TaskHeader::getStatus, QuantityConstant.TASK_STATUS_COMPLETED)
.in(TaskHeader::getTaskType, QuantityConstant.TASK_TYPE_WHOLESHIPMENT,
QuantityConstant.TASK_TYPE_SORTINGSHIPMENT)
.eq(TaskHeader::getContainerCode, containerCode);
List<TaskHeader> taskHeaderList = taskHeaderService.list(taskHeaderLambdaQueryWrapper);
|
周鸿
authored
|
915
|
if (taskHeaderList.size() == 0) {
|
|
916
917
918
919
920
921
|
shipmentContainerHeader.setStatus(QuantityConstant.SHIPMENT_CONTAINER_FINISHED);
shipmentContainerHeaderService.updateById(shipmentContainerHeader);
}
}
return AjaxResult.success();
}
|
|
922
|
|
|
923
|
@Override
|
|
924
|
@Transactional(rollbackFor = Exception.class)
|
|
925
926
927
928
|
public AjaxResult quickNoListReceipt(List<ReceiptBill> receiptBills) {
if (receiptBills == null || receiptBills.size() <= 0) {
throw new JSONException("没有收货信息");
}
|
周鸿
authored
|
929
|
boolean flag = true;
|
|
930
931
932
933
|
String containerCode = receiptBills.get(0).getReceiptContainerCode();
String locationCode = receiptBills.get(0).getLocationCode();
Container container = new Container();
container.setCode(containerCode);
|
|
934
|
container.setWarehouseCode(ShiroUtils.getWarehouseCode());
|
|
935
936
937
938
939
940
941
942
|
container = containerService.selectFirstEntity(container);
if (container == null) {
throw new JSONException("不存在这个托盘");
}
if (locationCode != null && locationCode.equals(container.getLocationCode())) {
//查询未完成的入库任务
List<TaskHeader> tasks = taskHeaderService.selectNofinishReceiptTaskBycontainer(container.getCode());
TaskHeader task = tasks.get(0);
|
周鸿
authored
|
943
|
if (tasks == null && tasks.size() < 1) {
|
|
944
945
|
throw new JSONException("没有找到托盘对应的任务");
}
|
周鸿
authored
|
946
|
int receiptHeaderId = receiptHeaderService.createTodayHeader(receiptBills.get(0).getCompanyCode(), container.getUWarehouseCode());
|
|
947
948
|
ReceiptHeader receiptHeader = receiptHeaderService.getById(receiptHeaderId);
List<Integer> receiptDetailIds = receiptDetailService.insertTodayReceiptDetail(receiptHeaderId,
|
周鸿
authored
|
949
|
receiptBills, false, receiptBills.get(0).getCompanyCode());
|
|
950
951
952
953
954
955
956
957
|
ReceiptContainerHeader receiptContainerHeader = new ReceiptContainerHeader();
receiptContainerHeader.setContainerCode(containerCode);
receiptContainerHeader.setWarehouseCode(ShiroUtils.getWarehouseCode());
receiptContainerHeader.setTaskType(200);
receiptContainerHeader.setCompanyCode(receiptBills.get(0).getCompanyCode());
receiptContainerHeader.setFromLocation(container.getLocationCode());
receiptContainerHeader.setCreatedBy(ShiroUtils.getLoginName());
receiptContainerHeader.setStatus(10);
|
|
958
|
if (!this.save(receiptContainerHeader)) {
|
|
959
960
961
962
963
964
965
|
throw new ServiceException("入库组盘头表保存失败");
}
receiptHeader.setFirstStatus(200);
receiptHeader.setLastStatus(200);
receiptHeaderService.updateById(receiptHeader);
task.setAllocationHeadId(receiptContainerHeader.getId());
taskHeaderService.updateById(task);
|
周鸿
authored
|
966
967
|
List<Integer> receiptContainerDetailIds = new ArrayList<>();
receiptDetailIds.forEach(id -> {
|
|
968
969
970
971
972
973
974
|
ReceiptDetail receiptDetail = receiptDetailService.getById(id);
ReceiptContainerDetail receiptContainerDetail = new ReceiptContainerDetail();
receiptContainerDetail.setReceiptContainerId(receiptContainerHeader.getId());
receiptContainerDetail.setReceiptId(receiptHeader.getId());
receiptContainerDetail.setReceiptDetailId(receiptDetail.getId());
receiptContainerDetail.setReceiptCode(receiptHeader.getCode());
|
周鸿
authored
|
975
|
Material material = materialService.getMaterialByCode(receiptDetail.getMaterialCode(), ShiroUtils.getWarehouseCode());
|
|
976
977
978
979
980
981
982
983
984
985
986
|
receiptContainerDetail.setMaterialCode(material.getCode());
receiptContainerDetail.setMaterialName(material.getName());
receiptContainerDetail.setMaterialSpec(material.getSpec());
receiptContainerDetail.setQty(receiptDetail.getQty());
receiptContainerDetail.setCreatedBy(ShiroUtils.getLoginName());
receiptContainerDetailService.save(receiptContainerDetail);
receiptContainerDetailIds.add(receiptContainerDetail.getId());
});
|
周鸿
authored
|
987
|
receiptContainerDetailIds.forEach(id -> {
|
|
988
989
|
ReceiptContainerDetail receiptContainerDetail = receiptContainerDetailService.getById(id);
TaskDetail taskDetail = new TaskDetail();
|
|
990
991
992
|
taskDetail.setTaskId(task.getId());
taskDetail.setTaskType(QuantityConstant.TASK_TYPE_SUPPLEMENTRECEIPT);
taskDetail.setInternalTaskType(QuantityConstant.TASK_INTENERTYPE_RECEIPT);
|
|
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
|
taskDetail.setContainerCode(containerCode);
taskDetail.setWarehouseCode(ShiroUtils.getWarehouseCode());
taskDetail.setCompanyCode(receiptBills.get(0).getCompanyCode());
taskDetail.setMaterialCode(receiptContainerDetail.getMaterialCode());
taskDetail.setMaterialName(receiptContainerDetail.getMaterialName());
taskDetail.setBillId(receiptHeader.getId());
taskDetail.setBillCode(receiptHeader.getCode());
taskDetail.setBillDetailId(receiptContainerDetail.getReceiptDetailId());
taskDetail.setQty(receiptContainerDetail.getQty());
taskDetail.setFromLocation(task.getFromLocation());
taskDetail.setAllocationId(receiptContainerDetail.getId());
taskDetail.setFromZone("LK");
taskDetail.setToZone("LK");
taskDetail.setCompanyCode(task.getCompanyCode());
taskDetailService.save(taskDetail);
});
}
return AjaxResult.success("收货成功");
}
|
|
1012
1013
1014
1015
1016
1017
|
//这个方法主要用agv库的补充入,不校验托盘情况
@Override
@Transactional(rollbackFor = Exception.class)
public AjaxResult PDAsaveContainer(ReceiptContainerView receivingDamain) {
|
周鸿
authored
|
1018
1019
1020
1021
1022
1023
|
String receiptCode = receivingDamain.getReceiptCode();
String containerCode = receivingDamain.getContainerCode();
Integer receiptDetailId = receivingDamain.getReceiptDetailId();
String locationCode = receivingDamain.getLocationCode();
BigDecimal qty = receivingDamain.getQty();
String locatingRule = receivingDamain.getLocatingRule();
|
|
1024
1025
1026
|
ReceiptDetail detail = receiptDetailService.getById(receiptDetailId);
BigDecimal receiptQty = detail.getQty().subtract(detail.getTaskQty());
|
周鸿
authored
|
1027
1028
|
if (receiptQty.compareTo(qty) < 0) {
return AjaxResult.error("入库明细可用数量" + receiptQty + ",收货数量" + qty + ";不允许超收");
|
|
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
|
}
//检查容器编码合法性
Container container = containerService.getContainerByCode(containerCode);
if (StringUtils.isNotNull(container) && StringUtils.isNotEmpty(container.getLocationCode())) {
locationCode = container.getLocationCode();
}
//检查库位编码合法性
int unCompleteCombineNumber = shipmentContainerHeaderService.getUnCompleteCombineNumber(containerCode);
|
周鸿
authored
|
1041
|
if (unCompleteCombineNumber > 0) {
|
|
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
|
throw new ServiceException("该托盘已经用于出库组盘");
}
/* 新建保存组盘头表记录*/
//根据容器编码查询组盘表头记录
LambdaQueryWrapper<ReceiptContainerHeader> lambda = Wrappers.lambdaQuery();
lambda.eq(ReceiptContainerHeader::getContainerCode, containerCode)
.le(ReceiptContainerHeader::getStatus, QuantityConstant.RECEIPT_CONTAINER_TASK);
lambda.last("limit 1");
ReceiptContainerHeader receiptContainerHeader = this.getOne(lambda);
// ReceiptContainerHeader receiptContainerHeader = new ReceiptContainerHeader();
//当size大于等于1表示容器已经有组盘了
|
周鸿
authored
|
1054
|
if (receiptContainerHeader == null) {
|
|
1055
1056
|
ReceiptDetail receiptDetail = receiptDetailService.getById(receiptDetailId);
// 创建组盘头表
|
周鸿
authored
|
1057
1058
|
receiptContainerHeader = createReceiptContainerHeader(receiptContainerHeader, containerCode, locationCode, receiptDetail, 200, locatingRule);
if (!this.save(receiptContainerHeader)) {
|
|
1059
1060
1061
1062
|
throw new ServiceException("入库组盘头表保存失败");
}
} else {
// receiptContainerHeader = list.get(0);
|
周鸿
authored
|
1063
|
if (receiptContainerHeader.getStatus() > QuantityConstant.RECEIPT_CONTAINER_TASK && receiptContainerHeader.getStatus() < QuantityConstant.RECEIPT_CONTAINER_FINISHED) {
|
|
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
|
throw new ServiceException("容器已经生成任务,不能放物料了!");
}
}
// List<ReceiptContainerHeader> receiptContainerHeaders = this.list(lambda);
/* 更新入库单详情的收货数量*/
//根据入库单详情id查询入库详情
ReceiptDetail receiptDetail = receiptDetailService.getById(receiptDetailId);
receiptDetail.setId(receiptDetailId);
receiptDetail.setTaskQty(qty.add(receiptDetail.getTaskQty()));
//更新入库单详情的收货数量
|
周鸿
authored
|
1074
|
if (!receiptDetailService.updateById(receiptDetail)) {
|
|
1075
1076
1077
1078
1079
1080
1081
|
throw new ServiceException("更新入库单详情失败");
}
receiptDetail = receiptDetailService.getById(receiptDetailId);
//save组盘明细
receiptContainerDetailAdd(receiptContainerHeader, receiptDetail, qty, containerCode, locationCode);
//如果单据数量等于已收数量,更新入库详情状态和入库单状态
|
周鸿
authored
|
1082
1083
|
if (receiptDetail.getQty().compareTo(receiptDetail.getTaskQty()) == 0) {
if (StringUtils.isNotEmpty(locationCode)) {
|
|
1084
1085
1086
1087
|
receiptDetail.setProcessStamp(QuantityConstant.RECEIPT_HEADER_POSITION.toString());
} else {
receiptDetail.setProcessStamp(QuantityConstant.RECEIPT_HEADER_RECEIVING.toString());
}
|
周鸿
authored
|
1088
|
if (!receiptDetailService.updateById(receiptDetail)) {
|
|
1089
1090
1091
1092
|
throw new ServiceException("更新入库详情处理标记失败");
}
ReceiptDetail receiptDetail1 = receiptDetailService.queryflow(receiptDetail);
|
周鸿
authored
|
1093
|
if (!receiptDetailService.updateById(receiptDetail1)) {
|
|
1094
1095
1096
1097
1098
1099
|
throw new ServiceException("更新入库详情下一流程失败");
}
}
receiptDetailService.updateReceiptHeaderLastStatus(receiptDetail.getReceiptId());
return AjaxResult.success("组盘成功");
}
|
|
1100
|
}
|