|
1
2
3
|
package com.huaheng.pc.shipment.shippingCombination.controller;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
4
|
import com.huaheng.common.constant.QuantityConstant;
|
|
5
|
import com.huaheng.common.exception.service.ServiceException;
|
|
6
|
import com.huaheng.common.support.Convert;
|
|
7
|
import com.huaheng.common.utils.StringUtils;
|
|
8
|
import com.huaheng.common.utils.Wrappers;
|
|
9
|
import com.huaheng.common.utils.security.ShiroUtils;
|
|
10
11
|
import com.huaheng.framework.aspectj.lang.annotation.Log;
import com.huaheng.framework.aspectj.lang.constant.BusinessType;
|
|
12
13
14
|
import com.huaheng.framework.web.controller.BaseController;
import com.huaheng.framework.web.domain.AjaxResult;
import com.huaheng.framework.web.page.TableDataInfo;
|
|
15
|
import com.huaheng.pc.config.shipmentPreference.service.ShipmentPreferenceService;
|
|
16
17
|
import com.huaheng.pc.config.warehouse.domain.WarehouseU8;
import com.huaheng.pc.config.warehouse.service.WarehouseU8Service;
|
|
18
|
import com.huaheng.pc.inventory.inventoryDetail.domain.InventoryDetail;
|
|
19
|
import com.huaheng.pc.receipt.receiptContainerHeader.service.ReceiptContainerHeaderService;
|
|
20
21
|
import com.huaheng.pc.shipment.shipmentContainerDetail.service.ShipmentContainerDetailService;
import com.huaheng.pc.shipment.shipmentContainerHeader.domain.ShipmentCombinationModel;
|
|
22
|
import com.huaheng.pc.shipment.shipmentContainerHeader.domain.ShipmentContainerHeader;
|
|
23
24
25
26
27
28
|
import com.huaheng.pc.shipment.shipmentContainerHeader.service.ShipmentContainerHeaderService;
import com.huaheng.pc.shipment.shipmentDetail.domain.ShipmentDetail;
import com.huaheng.pc.shipment.shipmentDetail.service.ShipmentDetailServiceImpl;
import com.huaheng.pc.shipment.shipmentHeader.domain.ShipmentHeader;
import com.huaheng.pc.shipment.shipmentHeader.service.ShipmentHeaderService;
import com.huaheng.pc.shipment.shippingCombination.service.ShippingCombinationService;
|
|
29
|
import com.huaheng.pc.task.taskHeader.domain.ShipmentTaskCreateModel;
|
|
30
|
import com.huaheng.pc.task.taskHeader.service.ShipmentTaskService;
|
huhai
authored
|
31
|
import com.huaheng.pc.task.taskHeader.service.TaskHeaderService;
|
|
32
33
34
35
36
|
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.*;
|
|
37
|
import javax.annotation.Resource;
|
|
38
|
import java.util.Arrays;
|
|
39
|
import java.util.List;
|
|
40
|
import java.util.stream.Collectors;
|
|
41
42
43
44
45
46
47
|
@Controller
@RequestMapping("/shipment/shippingCombination")
public class ShippingCombinationController extends BaseController {
private String prefix = "shipment/shippingCombination";
|
|
48
|
|
|
49
|
@Resource
|
|
50
|
ShipmentDetailServiceImpl shipmentDetailService;
|
|
51
|
@Resource
|
|
52
|
ShippingCombinationService shippingCombinationService;
|
|
53
|
@Resource
|
|
54
|
ShipmentContainerHeaderService shipmentContainerHeaderService;
|
|
55
|
@Resource
|
|
56
|
ShipmentContainerDetailService shipmentContainerDetailService;
|
|
57
|
@Resource
|
|
58
|
ShipmentHeaderService shipmentHeaderService;
|
|
59
|
@Resource
|
|
60
|
ShipmentPreferenceService shipmentPreferenceService;
|
|
61
|
@Resource
|
|
62
|
TaskHeaderService taskHeaderService;
|
|
63
|
@Resource
|
|
64
65
66
|
ShipmentTaskService shipmentTaskService;
@Resource
ReceiptContainerHeaderService receiptContainerHeaderService;
|
|
67
68
|
@Resource
private WarehouseU8Service warehouseU8Service;
|
|
69
|
|
|
70
71
|
/**
|
|
72
73
|
* 打开出库组盘页面
*
|
|
74
75
76
77
78
79
|
* @param shipmentCode
* @param map
* @return
*/
@RequiresPermissions("shipment:shippingCombination:view")
@GetMapping()
|
|
80
|
public String ShippingCombination(String shipmentCode, ModelMap map) {
|
|
81
|
map.put("code", shipmentCode);
|
|
82
|
if (ShiroUtils.getWarehouseCode().equals(QuantityConstant.WAREHOUSE_KS)) {
|
|
83
84
|
return prefix + "/shippingCombination-new";
}
|
|
85
|
return prefix + "/shippingCombination";
|
|
86
87
88
89
|
}
/**
* 获取单据列表
|
|
90
|
*
|
|
91
92
93
94
95
|
* @param code
* @return
*/
@GetMapping("/listShipmentDetail")
@ResponseBody
|
|
96
97
|
public AjaxResult listShipmentDetail(String code) {
if (StringUtils.isEmpty(code)) {
|
|
98
99
100
|
return null;
}
LambdaQueryWrapper<ShipmentDetail> lambdaQueryWrapper = Wrappers.lambdaQuery();
|
|
101
102
103
104
|
lambdaQueryWrapper.eq(ShipmentDetail::getShipmentCode, code)
.in(ShipmentDetail::getCompanyCode, ShiroUtils.getCompanyCodeList())
.eq(ShipmentDetail::getWarehouseCode, ShiroUtils.getWarehouseCode());
List<ShipmentDetail> shipmentDetails = shipmentDetailService.list(lambdaQueryWrapper);
|
|
105
106
107
108
109
|
return AjaxResult.success(shipmentDetails);
}
/**
|
|
110
|
* 获取能出库的库存列表
|
|
111
|
*
|
|
112
113
114
115
116
|
* @param code,id
* @return
*/
@PostMapping("/getInventory")
@ResponseBody
|
|
117
|
public TableDataInfo getInventory(String code, Integer id) {
|
|
118
|
//找到主单
|
|
119
120
121
|
ShipmentHeader shipmentHeader = shipmentHeaderService.getOne(new LambdaQueryWrapper<ShipmentHeader>()
.eq(ShipmentHeader::getCode, code)
.eq(ShipmentHeader::getWarehouseCode, ShiroUtils.getWarehouseCode()));
|
|
122
|
|
|
123
|
if (shipmentHeader == null) {
|
|
124
125
126
|
throw new ServiceException("找不到主单");
}
//找到子单
|
|
127
|
ShipmentDetail shipmentDetail = new ShipmentDetail();
|
|
128
|
shipmentDetail = shipmentDetailService.getById(id);
|
|
129
|
if (shipmentDetail == null) {
|
|
130
131
132
|
throw new ServiceException("找不到子单");
}
|
|
133
|
List<InventoryDetail> list = shippingCombinationService.getInventorys(shipmentDetail);
|
|
134
|
if (list.isEmpty()) {
|
|
135
136
|
throw new ServiceException("该物料没有库存或没有符合出库规则的库存");
}
|
|
137
138
|
list.forEach(s -> {
if (!StringUtils.isAnyEmpty(s.getUWarehouseCode(), s.getWarehouseCode(), s.getCompanyCode())) {
|
|
139
140
141
142
143
144
145
146
147
148
149
|
WarehouseU8 warehouseU8 = warehouseU8Service.getOne(new LambdaQueryWrapper<WarehouseU8>()
.eq(WarehouseU8::getUWarehouseCode, s.getUWarehouseCode())
.eq(WarehouseU8::getWarehouseCode, s.getWarehouseCode())
.eq(WarehouseU8::getCompanyCode, s.getCompanyCode())
.last("limit 1")
);
if (warehouseU8 != null) {
s.setUWarehouseName(warehouseU8.getUWarehouseName());
}
}
});
|
|
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
|
// List<InventoryDetail> removeList = new ArrayList<>();
// for(InventoryDetail item : list){
// item.setQty(item.getQty().subtract(item.getTaskQty()));
// //查询容器有无任务,返回任务头状态大于10的任务数
// Integer number = taskHeaderService.UncompleteCount(item.getContainerCode());
// if(number >= 1) {
// removeList.add(item);
// }
// }
// //查询所有小于上架完成的入库组盘头 (status<20)
// List<ReceiptContainerHeader> unCompleteCombineList = receiptContainerHeaderService.getUnCompleteCombineList();
// if(unCompleteCombineList != null && unCompleteCombineList.size() > 0) {
// for(ReceiptContainerHeader receiptContainerHeader : unCompleteCombineList) {
// String containerCode = receiptContainerHeader.getContainerCode();
// for(InventoryDetail item : list) {
// if(containerCode.equals(item.getContainerCode())) {
// if(!removeList.contains(item)) {
// removeList.add(item);
// }
// break;
// }
// }
// }
// }
// list.removeAll(removeList);
|
|
175
176
177
178
179
|
return getDataTable(list);
}
/**
|
|
180
|
* 保存组盘
|
|
181
|
*
|
|
182
183
184
185
|
* @param shipmentCombinationModel
* @return
*/
@RequiresPermissions("shipment:shippingCombination:combination")
|
|
186
|
@PostMapping("/addcombination")
|
|
187
|
@ResponseBody
|
|
188
|
public AjaxResult addcombination(ShipmentCombinationModel shipmentCombinationModel) {
|
周鸿
authored
|
189
190
|
String taskKey = "addcombination";
AjaxResult ajaxResult = handleMultiProcessV1(taskKey, new MultiProcessListener() {
|
|
191
192
|
@Override
public AjaxResult doProcess() {
|
|
193
|
ShipmentContainerHeader shipmentContainerHeader =
|
|
194
195
196
|
shipmentContainerHeaderService.combination(shipmentCombinationModel);
ShipmentTaskCreateModel shipmentTask = new ShipmentTaskCreateModel();
shipmentTask.setShipmentContainerHeaderIds(shipmentContainerHeader.getId());
|
|
197
198
199
|
//表头
List<Integer> idList = Arrays.asList(Convert.toIntArray(shipmentContainerHeader.getId().toString()));
|
|
200
201
|
if (shipmentContainerHeader.getStatus() >= QuantityConstant.TASK_STATUS_RELEASE) {
return AjaxResult.success("OK!");
|
|
202
|
// return AjaxResult.error("出库货箱编码(" + shipmentContainerHeader.getContainerCode() + ")已经生成任务,请不要重复生成,操作中止");
|
|
203
204
|
}
shipmentContainerHeaderService.createTask(idList);
|
|
205
206
207
208
|
return AjaxResult.success(shipmentContainerHeader.getId());
}
});
return ajaxResult;
|
|
209
210
|
}
|
|
211
|
/**
|
|
212
|
* 自动组盘并生成任务
|
|
213
|
*
|
|
214
215
216
217
|
* @param shipmentCode
* @return
*/
@RequiresPermissions("shipment:shippingCombination:combination")
|
|
218
|
@PostMapping("/autoCombinationAndCreateTask")
|
|
219
|
@ResponseBody
|
|
220
|
public AjaxResult autoCombinationAndCreateTask(String shipmentCode) {
|
周鸿
authored
|
221
222
|
String taskKey = "autoCombinationAndCreateTask";
AjaxResult ajaxResult = handleMultiProcessV1(taskKey, new MultiProcessListener() {
|
|
223
224
225
|
@Override
public AjaxResult doProcess() {
AjaxResult ajaxResult = shipmentContainerHeaderService.autoCombination(shipmentCode);
|
周鸿
authored
|
226
|
// System.out.println(ShiroUtils.getUserName());
|
|
227
|
LambdaQueryWrapper<ShipmentContainerHeader> shipmentContainerHeader = Wrappers.lambdaQuery();
|
|
228
|
shipmentContainerHeader.eq(ShipmentContainerHeader::getStatus, QuantityConstant.SHIPMENT_CONTAINER_BUILD);
|
周鸿
authored
|
229
|
shipmentContainerHeader.eq(ShipmentContainerHeader::getCreatedBy, ShiroUtils.getUserName());
|
|
230
231
|
List<ShipmentContainerHeader> shipmentContainerHeaders = shipmentContainerHeaderService.list(shipmentContainerHeader);
for (ShipmentContainerHeader item : shipmentContainerHeaders) {
|
|
232
233
234
235
236
|
// ShipmentTaskCreateModel shipmentTask = new ShipmentTaskCreateModel();
// shipmentTask.setShipmentContainerHeaderIds(item.getId());
// AjaxResult ajaxResults = shipmentTaskService.createTaskFromShipmentContainers(shipmentTask);
List<Integer> idList = Arrays.asList(Convert.toIntArray(item.getId().toString()));
AjaxResult ajaxResults = shipmentContainerHeaderService.createTask(idList);
|
|
237
238
|
if (ajaxResults.hasErr()) {
throw new ServiceException("任务生成失败:" + ajaxResults.getMsg());
|
|
239
240
241
|
}
}
return ajaxResult;
|
|
242
|
}
|
|
243
|
});
|
|
244
245
246
|
return ajaxResult;
}
|
|
247
248
|
/**
* 自动组盘并生成任务
|
|
249
|
*
|
|
250
251
252
253
254
255
256
|
* @param shipmentCode
* @return
*/
@RequiresPermissions("shipment:shippingCombination:combination")
@PostMapping("/autoCombination")
@ResponseBody
public AjaxResult autoCombination(String shipmentCode) {
|
|
257
258
259
260
261
262
263
|
AjaxResult ajaxResult = handleMultiProcess(new MultiProcessListener() {
@Override
public AjaxResult doProcess() {
return shipmentContainerHeaderService.autoCombination(shipmentCode);
}
});
return ajaxResult;
|
|
264
|
}
|
|
265
266
|
|
|
267
268
|
/**
* 取消组盘
|
|
269
270
271
272
273
274
275
|
*
* @param shipmentContainerDetailIds
* @return
*/
@RequiresPermissions("shipment:shippingCombination:remove")
@PostMapping("/cancelCombination")
@ResponseBody
|
|
276
|
public AjaxResult cancelCombination(@RequestBody List<Integer> shipmentContainerDetailIds) {
|
|
277
278
279
280
281
282
283
|
AjaxResult ajaxResult = handleMultiProcess(new MultiProcessListener() {
@Override
public AjaxResult doProcess() {
return shipmentContainerHeaderService.cancelCombinationDetail(shipmentContainerDetailIds);
}
});
return ajaxResult;
|
|
284
|
}
|
|
285
|
|
|
286
287
288
289
290
|
/**
* 获取出库组盘信息
*/
@ResponseBody
@PostMapping("/getShipmentInfoByCode")
|
|
291
292
|
@Log(title = "出库-获取出库组盘信息", operating = "获取出库组盘信息", action = BusinessType.OTHER)
public AjaxResult getShipmentInfoByCode(String code) {
|
|
293
294
295
296
297
298
299
300
|
AjaxResult result = shipmentContainerHeaderService.getShipmentInfoByCode(code);
return result;
}
/**
* 选择出库口
*/
@GetMapping("/chooseStation/{ids}")
|
|
301
|
public String chooseStation(@PathVariable("ids") String ids, ModelMap mmap) {
|
|
302
303
304
305
306
307
308
|
List<Integer> idList = Arrays.asList(Convert.toIntArray(ids));
List<Integer> idsList = idList.stream().distinct().collect(Collectors.toList());
ShipmentContainerHeader shipmentContainerHeader = shipmentContainerHeaderService.getById(idsList.get(0));
String containerCode = shipmentContainerHeader.getContainerCode();
mmap.put("containerCode", containerCode);
mmap.put("id", ids);
int taskType = shipmentContainerHeader.getTaskType().intValue();
|
|
309
310
|
if (taskType == QuantityConstant.TASK_TYPE_WHOLESHIPMENT ||
taskType == QuantityConstant.TASK_TYPE_EMPTYSHIPMENT) {
|
|
311
|
mmap.put("type", QuantityConstant.STATION_OUT);
|
|
312
|
} else if (taskType == QuantityConstant.TASK_TYPE_SUPPLEMENTRECEIPT ||
|
|
313
314
315
316
317
318
319
320
321
322
323
324
325
|
taskType == QuantityConstant.TASK_TYPE_SORTINGSHIPMENT ||
taskType == QuantityConstant.TASK_TYPE_VIEW ||
taskType == QuantityConstant.TASK_TYPE_CYCLECOUNT) {
mmap.put("type", QuantityConstant.STATION_PICK);
} else {
throw new ServiceException("任务类型不需要选站台");
}
return prefix + "/chooseStation";
}
@Log(title = "设置站台", operating = "设置站台", action = BusinessType.GRANT)
@PostMapping("/setStation")
@ResponseBody
|
|
326
|
public AjaxResult setStation(String ids, String type, String containerCode, String port) {
|
|
327
328
|
List<Integer> idList = Arrays.asList(Convert.toIntArray(ids));
List<Integer> idsList = idList.stream().distinct().collect(Collectors.toList());
|
|
329
|
for (Integer id : idsList) {
|
|
330
331
332
333
334
335
336
337
|
LambdaQueryWrapper<ShipmentContainerHeader> shipmentContainerHeaderLambdaQueryWrapper = Wrappers.lambdaQuery();
shipmentContainerHeaderLambdaQueryWrapper.eq(ShipmentContainerHeader::getId, id);
ShipmentContainerHeader shipmentContainerHeader1 = shipmentContainerHeaderService.getOne(shipmentContainerHeaderLambdaQueryWrapper);
shipmentContainerHeader1.setPort(port);
shipmentContainerHeaderService.update(shipmentContainerHeader1, shipmentContainerHeaderLambdaQueryWrapper);
}
return createTask(ids);
}
|
|
338
|
|
|
339
340
341
342
|
/**
* 生成任务
*/
@RequiresPermissions("shipment:container:add")
|
|
343
344
|
@Log(title = "出库-任务生成", operating = "批量生成任务", action = BusinessType.UPDATE)
@PostMapping("/createTask")
|
|
345
|
@ResponseBody
|
|
346
|
public AjaxResult createTask(String ids) {
|
|
347
348
349
350
351
352
353
354
|
AjaxResult ajaxResult = new AjaxResult();
if (StringUtils.isEmpty(ids)) {
return AjaxResult.error("id不能为空");
}
List<Integer> idList = Arrays.asList(Convert.toIntArray(ids));
for (Integer id : idList) {
//获取表头
ShipmentContainerHeader shipmentContainerHeader = shipmentContainerHeaderService.getById(id);
|
|
355
|
if (shipmentContainerHeader == null) {
|
|
356
357
|
return AjaxResult.error("出库货箱id:" + id + "未找到,操作中止");
}
|
|
358
|
if (shipmentContainerHeader.getStatus() >= QuantityConstant.TASK_STATUS_RELEASE) {
|
|
359
|
// return AjaxResult.error("出库货箱编码(" + shipmentContainerHeader.getContainerCode() + ")已经生成任务,请不要重复生成,操作中止");
|
|
360
361
|
}
}
|
|
362
363
364
365
366
367
368
369
|
AjaxResult ajaxResult1 = handleMultiProcess(new MultiProcessListener() {
@Override
public AjaxResult doProcess() {
AjaxResult ajaxResult = shipmentContainerHeaderService.createTask(idList);
return ajaxResult;
}
});
return ajaxResult1;
|
|
370
|
}
|
|
371
|
}
|