|
1
2
|
package com.huaheng.pc.task.taskDetail.service;
|
|
3
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
4
5
6
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.huaheng.common.constant.QuantityConstant;
import com.huaheng.common.exception.service.ServiceException;
|
|
7
8
|
import com.huaheng.common.support.Convert;
import com.huaheng.common.utils.StringUtils;
|
|
9
|
import com.huaheng.common.utils.Wrappers;
|
|
10
11
|
import com.huaheng.common.utils.security.ShiroUtils;
import com.huaheng.framework.web.domain.AjaxResult;
|
|
12
13
|
import com.huaheng.pc.config.FilterConfigDetail.domain.FilterConfigDetail;
import com.huaheng.pc.config.FilterConfigDetail.service.FilterConfigDetailService;
|
|
14
15
|
import com.huaheng.pc.config.cycleCountPreference.domain.CycleCountPreference;
import com.huaheng.pc.config.cycleCountPreference.service.CycleCountPreferenceService;
|
|
16
17
|
import com.huaheng.pc.config.material.domain.Material;
import com.huaheng.pc.config.material.service.MaterialService;
|
|
18
19
20
21
|
import com.huaheng.pc.config.receiptPreference.domain.ReceiptPreference;
import com.huaheng.pc.config.receiptPreference.service.ReceiptPreferenceService;
import com.huaheng.pc.config.shipmentPreference.domain.ShipmentPreference;
import com.huaheng.pc.config.shipmentPreference.service.ShipmentPreferenceService;
|
|
22
23
|
import com.huaheng.pc.inventory.cycleCountDetail.domain.CycleCountDetail;
import com.huaheng.pc.inventory.cycleCountDetail.service.CycleCountDetailService;
|
|
24
25
|
import com.huaheng.pc.inventory.inventoryDetail.domain.InventoryDetail;
import com.huaheng.pc.inventory.inventoryDetail.service.InventoryDetailService;
|
|
26
|
import com.huaheng.pc.receipt.receiptContainerDetail.domain.ReceiptContainerDetail;
|
|
27
28
29
30
31
32
33
34
35
36
37
38
|
import com.huaheng.pc.receipt.receiptContainerDetail.service.ReceiptContainerDetailService;
import com.huaheng.pc.receipt.receiptDetail.domain.ReceiptDetail;
import com.huaheng.pc.receipt.receiptDetail.service.ReceiptDetailService;
import com.huaheng.pc.receipt.receiptHeader.domain.ReceiptHeader;
import com.huaheng.pc.receipt.receiptHeader.service.ReceiptHeaderService;
import com.huaheng.pc.shipment.shipmentContainerDetail.domain.ShipmentContainerDetail;
import com.huaheng.pc.shipment.shipmentContainerDetail.service.ShipmentContainerDetailService;
import com.huaheng.pc.shipment.shipmentDetail.domain.ShipmentDetail;
import com.huaheng.pc.shipment.shipmentDetail.service.ShipmentDetailService;
import com.huaheng.pc.shipment.shipmentHeader.domain.ShipmentHeader;
import com.huaheng.pc.shipment.shipmentHeader.service.ShipmentHeaderService;
import com.huaheng.pc.system.user.service.IUserService;
|
|
39
40
|
import com.huaheng.pc.task.taskDetail.domain.TaskDetail;
import com.huaheng.pc.task.taskDetail.mapper.TaskDetailMapper;
|
|
41
42
|
import com.huaheng.pc.task.taskHeader.domain.TaskHeader;
import com.huaheng.pc.task.taskHeader.service.TaskHeaderService;
|
|
43
|
import org.springframework.stereotype.Service;
|
|
44
45
|
import org.springframework.transaction.annotation.Transactional;
|
|
46
|
import javax.annotation.Resource;
|
|
47
|
import java.math.BigDecimal;
|
|
48
|
import java.util.ArrayList;
|
|
49
|
import java.util.Arrays;
|
|
50
|
import java.util.List;
|
|
51
|
|
|
52
|
@Service
|
|
53
|
public class TaskDetailServiceImpl extends ServiceImpl<TaskDetailMapper, TaskDetail> implements TaskDetailService {
|
|
54
|
|
|
55
56
57
58
59
|
@Resource
private CycleCountDetailService cycleCountDetailService;
@Resource
private CycleCountPreferenceService cycleCountPreferenceService;
|
|
60
61
62
63
64
65
66
67
|
@Resource
private TaskHeaderService taskHeaderService;
@Resource
private ReceiptPreferenceService receiptPreferenceService;
@Resource
private ShipmentPreferenceService shipmentPreferenceService;
@Resource
private FilterConfigDetailService filterConfigDetailService;
|
|
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
|
@Resource
private InventoryDetailService inventoryDetailService;
@Resource
private IUserService userService;
@Resource
private ReceiptContainerDetailService receiptContainerDetailService;
@Resource
private ReceiptHeaderService receiptHeaderService;
@Resource
private ReceiptDetailService receiptDetailService;
@Resource
private ShipmentHeaderService shipmentHeaderService;
@Resource
private ShipmentContainerDetailService shipmentContainerDetailService;
@Resource
private ShipmentDetailService shipmentDetailService;
|
|
84
85
|
@Resource
private MaterialService materialService;
|
|
86
|
|
|
87
88
89
|
/**
* 盘点任务首选项
|
|
90
|
*
|
|
91
92
93
94
95
96
97
98
99
|
* @param taskDetailList
* @return
*/
@Transactional
@Override
public List<TaskDetail> preferenceRealize(List<TaskDetail> taskDetailList) {
/*查出盘点明细,找出盘点首选项,根据首选项显示字段*/
List<TaskDetail> taskDetails = new ArrayList<>();
|
|
100
|
for (TaskDetail item : taskDetailList) {
|
|
101
102
103
104
105
106
|
//盘点明细
CycleCountDetail cycleCountDetailtemp = new CycleCountDetail();
cycleCountDetailtemp.setCycleCountHeadCode(item.getBillCode());
cycleCountDetailtemp.setId(item.getBillDetailId());
LambdaQueryWrapper<CycleCountDetail> detailLambdaQueryWrapper = Wrappers.lambdaQuery(cycleCountDetailtemp);
CycleCountDetail cycleCountDetail = cycleCountDetailService.getOne(detailLambdaQueryWrapper);
|
|
107
|
if (cycleCountDetail == null) {
|
|
108
109
110
111
112
113
114
115
|
throw new SecurityException("没有找到子任务对应的盘点明细!");
}
//找盘点首选项
CycleCountPreference cycleCountPreferenceTemp = new CycleCountPreference();
cycleCountPreferenceTemp.setCode(cycleCountDetail.getPreferenceCode());
cycleCountPreferenceTemp.setWarehouseCode(cycleCountDetail.getWarehouseCode());
LambdaQueryWrapper<CycleCountPreference> preferenceLambdaQueryWrapper = Wrappers.lambdaQuery(cycleCountPreferenceTemp);
CycleCountPreference cycleCountPreference = cycleCountPreferenceService.getOne(preferenceLambdaQueryWrapper);
|
|
116
|
if (cycleCountPreference == null) {
|
|
117
118
119
|
throw new SecurityException("没有找到盘点首选项!");
}
//根据首选项判断数据
|
|
120
|
if (cycleCountPreference.getPromptLocation() == false) {
|
|
121
122
123
124
|
//库位
item.setFromLocation("");
item.setToLocation("");
}
|
|
125
|
if (cycleCountPreference.getPromptLpn() == false) {
|
|
126
127
128
|
//容器
item.setContainerCode("");
}
|
|
129
|
if (cycleCountPreference.getPromptItem() == false) {
|
|
130
131
132
133
|
//物料
item.setMaterialCode("");
item.setMaterialName("");
item.setMaterialUnit("");
|
|
134
|
item.setMaterialSpec("");
|
|
135
|
}
|
|
136
|
if (cycleCountPreference.getPromptQuantity() == false) {
|
|
137
138
139
140
141
142
143
144
|
//系统数量
item.setQty(null);
}
taskDetails.add(item);
}
return taskDetails;
}
|
|
145
|
/**
|
|
146
147
|
* 任务位置拣货单打印
* 根据任务头表id查询任务明细,根据上架或拣货货规则排序
|
|
148
|
*
|
|
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
|
* @param ids 头表id数组
* @return
*/
@Override
public List<TaskDetail> findByTaskId(Integer[] ids) {
Integer taskType = taskHeaderService.getById(ids[0]).getTaskType();
String filterConfigCode = "";
if (taskType.equals(QuantityConstant.TASK_TYPE_WHOLERECEIPT) || taskType.equals(QuantityConstant.TASK_TYPE_SUPPLEMENTRECEIPT)) {
ReceiptPreference receiptPreference = receiptPreferenceService.list().get(0);
filterConfigCode = receiptPreference.getListingRules();
}
if (taskType.equals(QuantityConstant.TASK_TYPE_WHOLESHIPMENT) || taskType.equals(QuantityConstant.TASK_TYPE_SORTINGSHIPMENT)) {
ShipmentPreference shipmentPreference = shipmentPreferenceService.list().get(0);
filterConfigCode = shipmentPreference.getShipmentPickingRule();
}
FilterConfigDetail filterConfigDetail = new FilterConfigDetail();
if (StringUtils.isNotEmpty(filterConfigCode)) {
LambdaQueryWrapper<FilterConfigDetail> detailQueryWrapper = Wrappers.lambdaQuery();
detailQueryWrapper.eq(FilterConfigDetail::getCode, filterConfigCode);
filterConfigDetail = filterConfigDetailService.getOne(detailQueryWrapper);
}
|
|
170
171
|
//Integer数组转object数组
Object[] objects = new Object[ids.length];
|
|
172
173
174
|
try {
for (int i = 0; i < ids.length; i++) {
Object a = (ids[i]);
|
|
175
176
|
objects[i] = a;
}
|
|
177
|
} catch (Exception e) {
|
|
178
179
|
throw new ServiceException(e.toString());
}
|
|
180
|
LambdaQueryWrapper<TaskDetail> queryWrapper = Wrappers.lambdaQuery();
|
|
181
|
queryWrapper
|
|
182
|
.in(TaskDetail::getTaskId, objects)
|
|
183
184
185
186
187
|
.last(StringUtils.isNotEmpty(filterConfigDetail.getStatement()), filterConfigDetail.getStatement());
return this.list(queryWrapper);
}
/**
|
|
188
|
* 根据任务头表id查询任务明细
|
|
189
|
*
|
|
190
191
192
193
194
195
196
197
198
|
* @param id
* @return
*/
@Override
public List<TaskDetail> findByTaskId(Integer id) {
LambdaQueryWrapper<TaskDetail> queryWrapper = Wrappers.lambdaQuery();
queryWrapper.eq(TaskDetail::getTaskId, id);
return this.list(queryWrapper);
}
|
|
199
|
|
|
200
|
@Override
|
|
201
|
public void createTaskDetailByReceipt(TaskHeader task, ReceiptContainerDetail item) {
|
|
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
|
TaskDetail taskDetail = new TaskDetail();
taskDetail.setTaskId(task.getId());
taskDetail.setTaskType(task.getTaskType());
taskDetail.setInternalTaskType(QuantityConstant.TASK_INTENERTYPE_RECEIPT);
taskDetail.setWarehouseCode(task.getWarehouseCode());
taskDetail.setAllocationId(item.getId());
taskDetail.setCompanyCode(task.getCompanyCode());
taskDetail.setMaterialCode(item.getMaterialCode());
taskDetail.setMaterialName(item.getMaterialName());
taskDetail.setMaterialSpec(item.getMaterialSpec());
taskDetail.setMaterialUnit(item.getMaterialUnit());
taskDetail.setInventorySts(item.getInventorySts());
taskDetail.setBillCode(item.getReceiptCode());
taskDetail.setBillDetailId(item.getReceiptDetailId());
taskDetail.setQty(item.getQty());
taskDetail.setContainerCode(task.getContainerCode());
taskDetail.setFromLocation(task.getFromLocation());
|
|
219
|
taskDetail.setGoodsShelfNo(task.getGoodsShelfNo());
|
|
220
|
if (task.getToLocation() != null) {
|
|
221
222
|
taskDetail.setToLocation(task.getToLocation());
}
|
|
223
|
String receiptCode = item.getReceiptCode();
|
|
224
225
|
ReceiptHeader receiptHeader = receiptHeaderService.getOne(new LambdaQueryWrapper<ReceiptHeader>()
.eq(ReceiptHeader::getCode, receiptCode)
|
|
226
|
.eq(ReceiptHeader::getWarehouseCode, item.getWarehouseCode())
|
|
227
|
);
|
|
228
229
|
taskDetail.setReferenceCode(receiptHeader.getReferCode());
|
|
230
231
|
taskDetail.setBatch(item.getBatch());
taskDetail.setProjectNo(item.getProjectNo());
|
周鸿
authored
|
232
|
taskDetail.setColor(item.getColor());
|
|
233
234
235
236
|
if (!this.save(taskDetail)) {
throw new ServiceException("生成任务明细失败");
}
}
|
|
237
|
|
|
238
239
240
|
@Override
public List<TaskDetail> selectListEntityUndone(TaskDetail taskDetail) {
LambdaQueryWrapper<TaskDetail> queryWrapper = Wrappers.lambdaQuery();
|
|
241
242
243
244
245
|
queryWrapper.eq(StringUtils.isNotEmpty(taskDetail.getContainerCode()), TaskDetail::getContainerCode, taskDetail.getContainerCode());
queryWrapper.le(StringUtils.isNotNull(taskDetail.getStatus()), TaskDetail::getStatus, taskDetail.getStatus());
queryWrapper.eq(StringUtils.isNotNull(taskDetail.getNumber()), TaskDetail::getNumber, taskDetail.getNumber());
queryWrapper.eq(StringUtils.isNotEmpty(taskDetail.getWarehouseCode()), TaskDetail::getWarehouseCode, taskDetail.getWarehouseCode());
queryWrapper.ne(TaskDetail::getTaskType, QuantityConstant.TASK_TYPE_EMPTYSHIPMENT);
|
|
246
247
|
return this.list(queryWrapper);
}
|
|
248
|
|
|
249
250
251
|
@Override
public List<TaskDetail> selectListByGoodshelf(TaskDetail taskDetail) {
LambdaQueryWrapper<TaskDetail> queryWrapper = Wrappers.lambdaQuery();
|
|
252
253
254
255
256
|
queryWrapper.eq(StringUtils.isNotEmpty(taskDetail.getContainerCode()), TaskDetail::getContainerCode, taskDetail.getContainerCode());
queryWrapper.eq(StringUtils.isNotNull(taskDetail.getStatus()), TaskDetail::getStatus, taskDetail.getStatus());
queryWrapper.eq(StringUtils.isNotNull(taskDetail.getNumber()), TaskDetail::getNumber, taskDetail.getNumber());
queryWrapper.eq(StringUtils.isNotEmpty(taskDetail.getWarehouseCode()), TaskDetail::getWarehouseCode, taskDetail.getWarehouseCode());
queryWrapper.lt(TaskDetail::getStatus, 100);
|
|
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
|
return this.list(queryWrapper);
}
@Override
public void updateByInventory(TaskDetail taskDetail) {
InventoryDetail inventory = new InventoryDetail();
inventory.setContainerCode(taskDetail.getContainerCode());
try {
inventory.setCompanyCode(taskDetail.getCompanyCode());
} catch (Exception e) {
e.printStackTrace();
}
inventory.setWarehouseCode(taskDetail.getWarehouseCode());
inventory.setMaterialCode(taskDetail.getMaterialCode());
List<InventoryDetail> inventories = inventoryDetailService.selectListEntityByEqual(inventory);
BigDecimal number = inventoryDetailService.addQty(inventories);
|
|
273
|
taskDetail.setWarehouseQty(number);
|
|
274
|
if (QuantityConstant.TASK_TYPE_WHOLESHIPMENT == taskDetail.getTaskType() || QuantityConstant.TASK_TYPE_SORTINGSHIPMENT == taskDetail.getTaskType()) {
|
|
275
276
277
278
279
|
if (number.compareTo(taskDetail.getQty()) > 0) {
taskDetail.setRemainder((number.subtract(taskDetail.getQty())));
} else {
taskDetail.setRemainder(new BigDecimal(0));
}
|
|
280
|
} else if (QuantityConstant.TASK_TYPE_WHOLERECEIPT == taskDetail.getTaskType() || QuantityConstant.TASK_TYPE_SUPPLEMENTRECEIPT == taskDetail.getTaskType()) {
|
|
281
|
taskDetail.setRemainder((number.add(taskDetail.getQty())));
|
|
282
|
} else {
|
|
283
|
taskDetail.setRemainder((number.add(taskDetail.getQty())));
|
|
284
|
}
|
|
285
|
|
|
286
287
|
Material material = materialService.getMaterialByCode(taskDetail.getMaterialCode());
if (material != null) {
|
|
288
|
taskDetail.setMaterialOldCode(material.getUserDef1());
|
|
289
290
|
taskDetail.setMaterialSpec(material.getSpec());
taskDetail.setMaterialName(material.getName());
|
|
291
|
}
|
|
292
|
taskDetail.setLastUpdatedBy(ShiroUtils.getUserName());
|
|
293
294
295
296
297
|
inventoryDetailService.selectUwarehouse(taskDetail);
}
@Override
public void updateTask(TaskDetail taskDetail, BigDecimal number) {
|
|
298
|
if (taskDetail.getTaskType().equals("s")) {
|
|
299
|
//修改出库子单据,修改出库组盘明细
|
|
300
301
|
ShipmentDetail shipmentDetail = shipmentDetailService.getById(taskDetail.getBillDetailId());
if (shipmentDetail == null) {
|
|
302
303
304
305
|
throw new ServiceException("找不到子单");
}
shipmentDetail.setStatus(200);
shipmentDetail.setQtyCompleted(shipmentDetail.getQtyCompleted().subtract(taskDetail.getQty()).add(number));
|
|
306
|
if (!shipmentDetailService.updateById(shipmentDetail)) {
|
|
307
|
throw new ServiceException("修改子单据失败");
|
|
308
309
|
}
;
|
|
310
|
|
|
311
312
|
ShipmentHeader shipmentHeader = shipmentHeaderService.getById(taskDetail.getBillId());
if (shipmentHeader == null) {
|
|
313
314
|
throw new ServiceException("找不到主单");
}
|
|
315
|
if (shipmentHeader.getLastStatus() > 200) {
|
|
316
|
shipmentHeader.setLastStatus(200);
|
|
317
|
if (!shipmentHeaderService.updateById(shipmentHeader)) {
|
|
318
319
320
321
|
throw new ServiceException("修改主单据失败");
}
}
//修改出库组盘明细
|
|
322
323
|
ShipmentContainerDetail shipmentContainerDetail = shipmentContainerDetailService.getById(taskDetail.getAllocationId());
if (shipmentContainerDetail == null) {
|
|
324
325
326
|
throw new ServiceException("找不到组盘明细");
}
shipmentContainerDetail.setQty(number);
|
|
327
|
if (!shipmentContainerDetailService.updateById(shipmentContainerDetail)) {
|
|
328
|
throw new ServiceException("修改组盘明细失败");
|
|
329
330
331
|
}
;
} else {
|
|
332
|
//修改入库子单据,修改入库组盘明细
|
|
333
334
|
ReceiptDetail receiptDetail = receiptDetailService.getById(taskDetail.getBillDetailId());
if (receiptDetail == null) {
|
|
335
336
|
throw new ServiceException("找不到子单");
}
|
|
337
|
receiptDetail.setStatus((short) 200);
|
|
338
|
receiptDetail.setTaskQty(receiptDetail.getTaskQty().subtract(taskDetail.getQty()).add(number));
|
|
339
|
if (!receiptDetailService.updateById(receiptDetail)) {
|
|
340
|
throw new ServiceException("修改子单据失败");
|
|
341
342
|
}
;
|
|
343
|
|
|
344
345
|
ReceiptHeader receiptHeader = receiptHeaderService.getById(taskDetail.getBillId());
if (receiptHeader == null) {
|
|
346
347
|
throw new ServiceException("找不到主单");
}
|
|
348
|
if (receiptHeader.getLastStatus() > 200) {
|
|
349
|
receiptHeader.setLastStatus(200);
|
|
350
|
if (!receiptHeaderService.updateById(receiptHeader)) {
|
|
351
352
353
354
|
throw new ServiceException("修改主单据失败");
}
}
//修改出库组盘明细
|
|
355
356
|
ReceiptContainerDetail receiptContainerDetail = receiptContainerDetailService.getById(taskDetail.getAllocationId());
if (receiptContainerDetail == null) {
|
|
357
358
359
|
throw new ServiceException("找不到组盘明细");
}
receiptContainerDetail.setQty(number);
|
|
360
|
if (!receiptContainerDetailService.updateById(receiptContainerDetail)) {
|
|
361
|
throw new ServiceException("修改组盘明细失败");
|
|
362
363
|
}
;
|
|
364
365
366
|
}
//修改子任务
taskDetail.setQty(number);
|
|
367
|
if (!this.updateById(taskDetail)) {
|
|
368
369
370
371
372
|
throw new ServiceException("修改子任务失败");
}
}
public List<TaskDetail> selectByIdList(List<Integer> ids) {
|
|
373
|
if (ids == null) {
|
|
374
375
376
377
378
379
380
|
return null;
}
String[] idArray = ids.toArray(new String[ids.size()]);
LambdaQueryWrapper<TaskDetail> queryWrapper = Wrappers.lambdaQuery();
queryWrapper.in(TaskDetail::getId, idArray);
return this.list(queryWrapper);
}
|
|
381
|
|
|
382
383
|
@Override
public AjaxResult updateTaskDetail(String ids, String code) {
|
|
384
|
if (StringUtils.isEmpty(ids) || StringUtils.isEmpty(code)) {
|
|
385
386
387
|
return AjaxResult.error("容器编码不能为空!");
}
List<Integer> idList = Arrays.asList(Convert.toIntArray(ids));
|
|
388
|
if (idList.isEmpty()) {
|
|
389
390
|
return AjaxResult.error("任务详情id不能为空值!");
}
|
|
391
392
|
List<TaskDetail> taskDetails = this.selectByIdList(idList);
if (taskDetails.isEmpty()) {
|
|
393
394
|
return AjaxResult.error("未查询到任务详情!");
}
|
|
395
|
taskDetails.forEach(item -> {
|
|
396
397
398
399
400
401
|
item.setContainerCode(code);
item.setLastUpdatedBy(ShiroUtils.getLoginName());
});
this.updateContainerCode(taskDetails);
return AjaxResult.success("容器修改成功!");
}
|
|
402
|
|
|
403
|
public int updateContainerCode(List<TaskDetail> list) {
|
|
404
|
if (list.isEmpty()) {
|
|
405
406
|
return 0;
}
|
|
407
|
for (int a = 0; a < list.size(); a++) {
|
|
408
409
|
LambdaQueryWrapper<TaskDetail> queryWrapper = Wrappers.lambdaQuery();
queryWrapper.in(TaskDetail::getId, list.get(a).getId());
|
|
410
|
TaskDetail taskDetail = new TaskDetail();
|
|
411
|
taskDetail.setLastUpdatedBy(list.get(a).getLastUpdatedBy());
|
|
412
|
this.update(taskDetail, queryWrapper);
|
|
413
414
415
416
|
}
return 1;
}
|
|
417
|
}
|