|
1
2
|
package com.huaheng.api.erp.controller;
|
|
3
|
import com.alibaba.fastjson.JSON;
|
|
4
5
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
6
|
import com.google.zxing.WriterException;
|
|
7
8
9
|
import com.huaheng.api.erp.domain.MaterialDomain;
import com.huaheng.api.erp.domain.PDAInventory;
import com.huaheng.api.erp.domain.PrintDomain;
|
|
10
|
import com.huaheng.api.tv.domain.ProjectBean;
|
|
11
12
|
import com.huaheng.api.wcs.domain.LabelDomain;
import com.huaheng.api.wcs.domain.LabelingDomain;
|
|
13
|
import com.huaheng.common.constant.HttpConstant;
|
|
14
|
import com.huaheng.common.constant.QuantityConstant;
|
|
15
|
import com.huaheng.common.exception.service.ServiceException;
|
|
16
|
import com.huaheng.common.utils.QRCodeGenerator;
|
|
17
|
import com.huaheng.common.utils.StringUtils;
|
|
18
|
import com.huaheng.common.utils.http.OkHttpUtils;
|
|
19
|
import com.huaheng.framework.aspectj.lang.annotation.ApiLogger;
|
|
20
|
import com.huaheng.framework.aspectj.lang.constant.ProcessCode;
|
|
21
22
|
import com.huaheng.framework.web.controller.BaseController;
import com.huaheng.framework.web.domain.AjaxResult;
|
|
23
|
import com.huaheng.framework.web.service.ConfigService;
|
|
24
25
|
import com.huaheng.pc.config.address.domain.Address;
import com.huaheng.pc.config.address.service.AddressService;
|
|
26
27
|
import com.huaheng.pc.config.proPackaging.domain.ProPackaging;
import com.huaheng.pc.config.proPackaging.service.IProPackagingService;
|
|
28
29
30
31
32
|
import com.huaheng.pc.inventory.inventoryDetail.domain.InventoryDetail;
import com.huaheng.pc.receipt.receiptContainerDetail.domain.ReceiptContainerDetail;
import com.huaheng.pc.receipt.receiptContainerDetail.service.ReceiptContainerDetailService;
import com.huaheng.pc.receipt.receiptContainerHeader.domain.ReceiptContainerHeader;
import com.huaheng.pc.receipt.receiptContainerHeader.service.ReceiptContainerHeaderService;
|
|
33
34
|
import com.huaheng.pc.receipt.receiptHeader.domain.ReceiptHeader;
import com.huaheng.pc.receipt.receiptHeader.service.ReceiptHeaderService;
|
|
35
36
37
38
|
import com.huaheng.pc.shipment.shipmentHeader.domain.ShipmentHeader;
import com.huaheng.pc.shipment.shipmentHeader.service.ShipmentHeaderService;
import com.huaheng.pc.task.taskHeader.domain.TaskHeader;
import com.huaheng.pc.task.taskHeader.service.TaskHeaderService;
|
|
39
|
import com.huaheng.pc.tool.ChooseWrapperService;
|
|
40
|
import io.swagger.annotations.ApiOperation;
|
|
41
42
43
44
|
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
|
|
45
46
47
|
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
|
|
48
|
import java.io.IOException;
|
|
49
50
51
|
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
|
|
52
53
54
|
import java.util.Map;
import java.util.Optional;
import java.util.stream.Collectors;
|
|
55
56
57
58
59
60
61
62
63
64
65
|
/**
* @author lty
*/
@RestController
@RequestMapping("/API/WMS/v2")
public class WinController extends BaseController {
@Resource
TaskHeaderService taskHeaderService;
@Resource
|
|
66
67
|
AddressService addressService;
@Resource
|
|
68
69
70
71
|
ShipmentHeaderService shipmentHeaderService;
@Resource
ReceiptContainerHeaderService receiptContainerHeaderService;
@Resource
|
|
72
73
|
ReceiptHeaderService receiptHeaderService;
@Resource
|
|
74
|
private ChooseWrapperService chooseWrapper;
|
|
75
|
@Resource
|
|
76
77
|
private ConfigService configService;
@Resource
|
|
78
|
IProPackagingService proPackingService;
|
|
79
80
81
82
|
@PostMapping("/printLabel")
@ApiOperation("请求打印数据")
@ResponseBody
|
|
83
84
85
|
@ApiLogger(apiName = "请求打印数据", from = "win or wcs")
public AjaxResult printLabel(@RequestBody Map<String, String> map) {
String containerCode = map.get("containerCode");
|
|
86
|
String taskNo = map.get("taskNo");
|
|
87
88
|
if (StringUtils.isEmpty(containerCode)) {
|
|
89
|
containerCode = configService.getKey(QuantityConstant.LABEL_SCANNING);
|
|
90
91
92
93
94
|
}
// 1.根据托盘找对应任务下发里面数据 再挖明细
LambdaQueryWrapper<ReceiptContainerDetail> receiptContainerDetailLambdaQueryWrapper = Wrappers.lambdaQuery();
receiptContainerDetailLambdaQueryWrapper.eq(ReceiptContainerDetail::getContainerCode, containerCode);
|
|
95
96
97
|
List<ReceiptContainerDetail> receiptContainerDetails = chooseWrapper.receiptContainerDetailService(receiptContainerDetailLambdaQueryWrapper);
if (receiptContainerDetails.isEmpty()) {
throw new ServiceException("数据不存在");
|
|
98
|
}
|
|
99
100
|
ReceiptHeader receiptHeader = receiptHeaderService.getById(receiptContainerDetails.get(0).getReceiptId());
|
|
101
|
LambdaQueryWrapper<ShipmentHeader> shipmentHeaderLambdaQueryWrapper = Wrappers.lambdaQuery();
|
|
102
|
shipmentHeaderLambdaQueryWrapper.eq(ShipmentHeader::getCode, receiptHeader.getShipmentCode());
|
|
103
104
105
106
|
ShipmentHeader shipmentHeader = shipmentHeaderService.getOne(shipmentHeaderLambdaQueryWrapper);
PrintDomain printDomain = new PrintDomain();
if (StringUtils.isNotEmpty(shipmentHeader.getReferCode())) {
|
|
107
108
|
// erp单号
|
|
109
110
111
112
113
114
|
printDomain.setErpCode(shipmentHeader.getReferCode());
} else {
printDomain.setErpCode("不存在");
}
if (StringUtils.isNotEmpty(shipmentHeader.getCustomerName())) {
|
|
115
|
// 客户名称
|
|
116
117
118
119
120
121
|
printDomain.setName(shipmentHeader.getCustomerName());
} else {
printDomain.setName("不存在");
}
printDomain.setCode(shipmentHeader.getCode());
|
|
122
|
printDomain.setContainerCode(containerCode);
|
|
123
|
|
|
124
|
|
|
125
|
Map<String, Long> countMap =
|
|
126
127
|
receiptContainerDetails.stream().collect(Collectors.groupingBy(detail -> detail.getMaterialCode() + "_" + detail.getBatch()
+ "_" + detail.getColor() + "_" + detail.getProPackaging() + "_" + detail.getProductSchedule() + "_" + detail.getLevel(), Collectors.counting()));
|
|
128
|
|
|
129
|
List<MaterialDomain> materialDomains = new ArrayList<>();
|
|
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
|
List<LabelDomain> labelDomains = new ArrayList<>();
// 订单号
String A = "|A=" + shipmentHeader.getCode();
String C = "", D = "", F = "", G = "", H = "", I = "", B = "", E = "";
// 条码
String J = "|J=" + containerCode;
String M = "|M=" + containerCode;
if (StringUtils.isNotEmpty(shipmentHeader.getCustomerName())) {
// 规格
B = "|B=" + shipmentHeader.getCustomerName();
} else {
B = "|B=不存在";
}
if (StringUtils.isNotEmpty(shipmentHeader.getReferCode())) {
// 客户名称
E = "|E=" + shipmentHeader.getReferCode();
} else {
E = "|E=不存在";
}
|
|
152
|
|
|
153
154
|
// 中转计数
String s = "";
|
|
155
|
|
|
156
|
for (String key : countMap.keySet()) {
|
|
157
|
// 不可能为空
|
|
158
159
|
Optional<ReceiptContainerDetail> receiptContainerDetailsList = receiptContainerDetails.stream()
.filter(d -> key.contains(d.getMaterialCode())
|
|
160
161
162
163
|
&& key.contains(d.getLevel())
&& key.contains(d.getColor())
&& key.contains(d.getProPackaging())
&& key.contains(d.getProductSchedule()))
|
|
164
165
166
|
.findFirst();
ReceiptContainerDetail receiptContainerDetail = receiptContainerDetailsList.get();
|
|
167
|
MaterialDomain materialDomain = new MaterialDomain();
|
|
168
169
|
materialDomain.setMaterialCode(receiptContainerDetail.getMaterialCode());
materialDomain.setMaterialName(receiptContainerDetail.getMaterialName());
|
|
170
|
switch (receiptContainerDetail.getLevel()) {
|
|
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
|
case QuantityConstant.PREMIUM_PRODUCTS_LEVEL:
materialDomain.setLevel("优等品");
receiptContainerDetail.setLevel("优等品");
break;
case QuantityConstant.FIRST_GRADE_LEVEL:
materialDomain.setLevel("一等品");
receiptContainerDetail.setLevel("一等品");
break;
case QuantityConstant.ACCEPTABLE_PRODUCT_LEVEL:
materialDomain.setLevel("合格品");
receiptContainerDetail.setLevel("合格品");
break;
default:
materialDomain.setLevel(receiptContainerDetail.getLevel());
}
|
|
187
|
materialDomain.setColor(receiptContainerDetail.getColor());
|
|
188
189
190
191
192
193
194
|
LambdaQueryWrapper<ProPackaging> proPackagingLambdaQueryWrapper = Wrappers.lambdaQuery();
proPackagingLambdaQueryWrapper.eq(ProPackaging::getNumber, receiptContainerDetail.getProPackaging());
ProPackaging proPackaging = proPackingService.getOne(proPackagingLambdaQueryWrapper);
if (proPackaging == null) {
return AjaxResult.error("没有包装信息");
}
int pieceBox = proPackaging.getPieceBox();
|
|
195
|
materialDomain.setBox(countMap.get(key).intValue() / pieceBox);
|
|
196
|
materialDomain.setScattered(countMap.get(key).intValue());
|
|
197
|
materialDomains.add(materialDomain);
|
|
198
199
|
LabelDomain labelDomain = new LabelDomain();
|
|
200
201
|
labelDomain.setH(countMap.get(key).intValue()/pieceBox);
labelDomain.setI(countMap.get(key).intValue());
|
|
202
203
204
205
206
|
labelDomain.setC(receiptContainerDetail.getMaterialCode());
labelDomain.setD(receiptContainerDetail.getMaterialName());
labelDomain.setF(receiptContainerDetail.getLevel());
labelDomain.setG(receiptContainerDetail.getColor());
labelDomains.add(labelDomain);
|
|
207
208
|
}
|
|
209
210
|
for (int i = 0; i < labelDomains.size(); i++) {
C = C + "|C" + s + "=" + labelDomains.get(i).getC();
|
|
211
212
|
D = D + "|D" + s + "=" + labelDomains.get(i).getD();
;
|
|
213
214
215
216
217
|
F = F + "|F" + s + "=" + labelDomains.get(i).getF();
G = G + "|G" + s + "=" + labelDomains.get(i).getG();
H = H + "|H" + s + "=" + labelDomains.get(i).getH();
s = "" + (i + 1);
}
|
|
218
219
|
I = I + "|I=";
String stack = "";
|
|
220
|
printDomain.setMaterial(materialDomains);
|
|
221
|
if (StringUtils.isNotEmpty(taskNo)) {
|
|
222
|
|
|
223
224
225
|
LambdaQueryWrapper<TaskHeader> lambdaQueryWrapper = Wrappers.lambdaQuery();
lambdaQueryWrapper.eq(TaskHeader::getContainerCode, containerCode)
.ne(TaskHeader::getPortGroup, QuantityConstant.PORTGROUP_P30);
|
|
226
|
TaskHeader taskHeader = taskHeaderService.getOne(lambdaQueryWrapper);
|
|
227
|
|
|
228
|
String IP = "";
|
|
229
230
231
|
switch (taskHeader.getStack()) {
case QuantityConstant.STACK_HUI_ZI:
stack = "2";
|
|
232
|
break;
|
|
233
234
|
case QuantityConstant.STACK_GONG_ZI:
stack = "1";
|
|
235
|
break;
|
|
236
237
|
case QuantityConstant.STACK_PING_FANG:
stack = "1";
|
|
238
|
break;
|
|
239
240
241
242
243
|
case QuantityConstant.STACK_SHU_FANG:
stack = "0";
return AjaxResult.success().setData(stack);
default:
AjaxResult.error("不存在的剁型");
|
|
244
|
}
|
|
245
246
|
IP = addressService.selectAddress(""+taskHeader.getStack(), taskHeader.getWarehouseCode(), null);
|
|
247
248
249
250
251
|
LabelingDomain labelingDomain = new LabelingDomain();
labelingDomain.setIp(IP);
String data = "";
labelingDomain.setPort(QuantityConstant.PRINT_PORE);
labelingDomain.setText("SLA|JIANYI1" + A + B + E + J + C + D + F + G + H + I + M + "|");
|
|
252
253
254
255
256
257
258
259
260
261
262
|
String url = addressService.selectAddress(QuantityConstant.ADDRESS_WCS_TASK_LABEL, taskHeader.getWarehouseCode(), null);
String jsonParam = JSON.toJSONString(labelingDomain);
String result = OkHttpUtils.bodypost(url, jsonParam);
if (StringUtils.isEmpty(result)) {
throw new ServiceException("接口地址错误或返回为空,刷新贴标条码超时");
}
AjaxResult ajaxResult = JSON.parseObject(result, AjaxResult.class);
if (ajaxResult.getCode() != HttpConstant.OK) {
throw new ServiceException(ajaxResult.getMsg());
}
|
|
263
|
data = (String) ajaxResult.getData();
|
|
264
265
266
|
if (!data.contains("ACK")) {
throw new ServiceException("请求贴标机数据不成功");
}
|
|
267
|
return AjaxResult.success().setData(stack);
|
|
268
|
}
|
|
269
270
271
|
return AjaxResult.success(printDomain);
}
|
|
272
273
|
/**
* @author lty
|
|
274
|
* //生成dataMatrix类型二维码
|
|
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
|
*/
@GetMapping(value = "/imageDmx/{text}")
public ResponseEntity<byte[]> getImageDmx(@PathVariable("text") String text) {
byte[] qrcode = null;
try {
qrcode = QRCodeGenerator.getDataMatrixImage(text, 210, 210);
} catch (WriterException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
// Set headers
final HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.IMAGE_JPEG);
return new ResponseEntity<byte[]>(qrcode, headers, HttpStatus.CREATED);
}
|
|
293
|
}
|