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