MesCallbackService.java
7.82 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
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
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
package com.huaheng.api.mes.service;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.huaheng.api.mes.domain.MesNearExpiryInspectionBody;
import com.huaheng.api.mes.domain.MesNearExpiryInspectionItem;
import com.huaheng.api.mes.domain.MesNearExpiryInspectionRequest;
import com.huaheng.api.mes.domain.PushBoxStatusItem;
import com.huaheng.common.constant.QuantityConstant;
import com.huaheng.common.utils.StringUtils;
import com.huaheng.common.utils.restful.RestUtil;
import com.huaheng.framework.web.domain.AjaxResult;
import com.huaheng.pc.config.address.service.AddressService;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.Collections;
import java.util.List;
/**
* MES回调服务。
*/
@Service
public class MesCallbackService {
private static final int MES_SUCCESS_CODE = 1;
private static final int MES_NEAR_EXPIRY_SUCCESS_CODE = 200;
/**
* 成品箱已入库状态。
*/
public static final String BOX_STATUS_INBOUND = "已入库";
@Resource
private AddressService addressService;
/**
* WMS上架完成后,向MES推送成品箱入库状态。
*
* @param qrcode 成品箱码(箱标签)
* @return MES响应结果
*/
public AjaxResult pushProductBoxInboundStatus(String qrcode) {
PushBoxStatusItem item = new PushBoxStatusItem();
item.setQrcode(qrcode);
item.setBoxstatus(BOX_STATUS_INBOUND);
return pushBoxStatus(Collections.singletonList(item));
}
/**
* 向MES推送成品箱状态。
*
* @param items 箱状态列表,每项包含 qrcode、boxstatus
* @return MES响应结果(code、msg、data 与接口一致)
*/
public AjaxResult pushBoxStatus(List<PushBoxStatusItem> items) {
if (StringUtils.isEmpty(items)) {
return AjaxResult.error("推送明细不能为空");
}
for (PushBoxStatusItem item : items) {
if (item == null) {
return AjaxResult.error("推送明细项不能为空");
}
if (StringUtils.isEmpty(item.getQrcode())) {
return AjaxResult.error("成品箱码不能为空");
}
if (StringUtils.isEmpty(item.getBoxstatus())) {
return AjaxResult.error("成品箱状态不能为空");
}
}
String jsonParam = JSON.toJSONString(items);
try {
String url = addressService.selectAddress(QuantityConstant.ADDRESS_MES_CALLBACK,
QuantityConstant.DEFAULT_WAREHOUSE, QuantityConstant.DEFAULT_AREA);
ResponseEntity<JSONObject> result = RestUtil.request_post(url, QuantityConstant.DEFAULT_WAREHOUSE, jsonParam);
if (result == null || result.getBody() == null) {
return AjaxResult.error("调用MES推送成品入库状态接口失败,接口地址错误或返回为空");
}
JSONObject body = result.getBody();
int code = body.getIntValue("code");
String msg = body.getString("msg");
Object data = body.get("data");
if (code == MES_SUCCESS_CODE) {
return AjaxResult.success(msg, data);
}
return AjaxResult.error(msg, data);
} catch (Exception e) {
return AjaxResult.error(e.getMessage());
}
}
/**
* 向MES推送临期检验送检数据。
*
* @param requests 送检请求列表,结构与MES接口报文一致
* @return MES响应结果(code、success、msg、data)
*/
public AjaxResult pushNearExpiryInspection(List<MesNearExpiryInspectionRequest> requests) {
AjaxResult validateResult = validateNearExpiryInspectionRequests(requests);
if (validateResult != null) {
return validateResult;
}
String jsonParam = JSON.toJSONString(requests);
try {
String url = addressService.selectAddress(QuantityConstant.ADDRESS_MES_CALLBACK,
QuantityConstant.DEFAULT_WAREHOUSE, QuantityConstant.DEFAULT_AREA);
ResponseEntity<JSONObject> result = RestUtil.request_post(url, QuantityConstant.DEFAULT_WAREHOUSE, jsonParam);
if (result == null || result.getBody() == null) {
return AjaxResult.error("调用MES临期检验送检接口失败,接口地址错误或返回为空");
}
JSONObject body = result.getBody();
int code = body.getIntValue("code");
boolean success = body.getBooleanValue("success");
String msg = body.getString("msg");
Object data = body.get("data");
if (code == MES_NEAR_EXPIRY_SUCCESS_CODE && success) {
return AjaxResult.success(msg, data);
}
return AjaxResult.error(msg, data);
} catch (Exception e) {
return AjaxResult.error(e.getMessage());
}
}
private AjaxResult validateNearExpiryInspectionRequests(List<MesNearExpiryInspectionRequest> requests) {
if (StringUtils.isEmpty(requests)) {
return AjaxResult.error("送检请求不能为空");
}
for (MesNearExpiryInspectionRequest request : requests) {
if (request == null) {
return AjaxResult.error("送检请求项不能为空");
}
if (StringUtils.isEmpty(request.getCompanyId())) {
return AjaxResult.error("组织id不能为空");
}
if (StringUtils.isEmpty(request.getEntId())) {
return AjaxResult.error("企业代号不能为空");
}
if (StringUtils.isEmpty(request.getBillNo())) {
return AjaxResult.error("单据号不能为空");
}
if (StringUtils.isEmpty(request.getBody())) {
return AjaxResult.error("送检明细不能为空");
}
for (MesNearExpiryInspectionBody bodyItem : request.getBody()) {
AjaxResult bodyValidateResult = validateNearExpiryInspectionBody(bodyItem);
if (bodyValidateResult != null) {
return bodyValidateResult;
}
}
}
return null;
}
private AjaxResult validateNearExpiryInspectionBody(MesNearExpiryInspectionBody bodyItem) {
if (bodyItem == null) {
return AjaxResult.error("送检明细项不能为空");
}
if (StringUtils.isEmpty(bodyItem.getMaterial())) {
return AjaxResult.error("物料号不能为空");
}
if (bodyItem.getQty() == null) {
return AjaxResult.error("物料数量不能为空");
}
if (StringUtils.isEmpty(bodyItem.getDefine1())) {
return AjaxResult.error("平库/立库标识不能为空");
}
if (StringUtils.isEmpty(bodyItem.getSourceXc())) {
return AjaxResult.error("来源标识不能为空");
}
if (StringUtils.isEmpty(bodyItem.getWarehouseCode())) {
return AjaxResult.error("仓库编码不能为空");
}
if (StringUtils.isEmpty(bodyItem.getDeliveryDate())) {
return AjaxResult.error("送检日期不能为空");
}
if (StringUtils.isEmpty(bodyItem.getItem())) {
return AjaxResult.error("标签明细不能为空");
}
for (MesNearExpiryInspectionItem item : bodyItem.getItem()) {
if (item == null) {
return AjaxResult.error("标签明细项不能为空");
}
if (item.getQty() == null) {
return AjaxResult.error("标签数量不能为空");
}
if (StringUtils.isEmpty(item.getQrcode())) {
return AjaxResult.error("二维码不能为空");
}
}
return null;
}
}