Commit 571aded1 LN

API010 增加重试逻辑. API002超时改为2分钟。api009返回key改为大小写兼容。

1 个父辈 aa69b9a4
...@@ -215,4 +215,13 @@ public class Constants { ...@@ -215,4 +215,13 @@ public class Constants {
* 镁光url地址:http://istio-ingressgateway-istio-system.apps.ose-dev45.micron.com/ * 镁光url地址:http://istio-ingressgateway-istio-system.apps.ose-dev45.micron.com/
*/ */
public static final String CACHE_Micron_AppAddr ="CACHE_Micron_AppAddr"; public static final String CACHE_Micron_AppAddr ="CACHE_Micron_AppAddr";
/**
*API010运行自动retry次数
*/
public static final String CACHE_API_RetryCount ="CACHE_API_RetryCount";
/**
*API010自动retry的间隔(seconds)
*/
public static final String CACHE_API_RetryInterval ="CACHE_API_RetryInterval";
} }
...@@ -356,7 +356,10 @@ public class HttpHelper { ...@@ -356,7 +356,10 @@ public class HttpHelper {
} }
public static MicronResult postMicronJson(String url, Map<String, Object> params) throws ApiException { public static MicronResult postMicronJson(String url, Map<String, Object> params ) throws ApiException {
return postMicronJson(url,params,60000);
}
public static MicronResult postMicronJson(String url, Map<String, Object> params,int timeOutMs) throws ApiException {
try { try {
if (ObjectUtil.isEmpty(url)) { if (ObjectUtil.isEmpty(url)) {
return new MicronResult(); return new MicronResult();
...@@ -380,7 +383,7 @@ public class HttpHelper { ...@@ -380,7 +383,7 @@ public class HttpHelper {
} }
try { try {
CloseableHttpClient httpClient = HttpClients.createDefault(); CloseableHttpClient httpClient = HttpClients.createDefault();
RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(CONNECTION_TIMEOUT).setConnectionRequestTimeout(60000).setSocketTimeout(60000).build(); RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(CONNECTION_TIMEOUT).setConnectionRequestTimeout(timeOutMs).setSocketTimeout(timeOutMs).build();
httpPost.setConfig(requestConfig); httpPost.setConfig(requestConfig);
CloseableHttpResponse response = httpClient.execute(httpPost); CloseableHttpResponse response = httpClient.execute(httpPost);
HttpEntity entity = response.getEntity(); HttpEntity entity = response.getEntity();
......
...@@ -175,7 +175,15 @@ public class DataCache { ...@@ -175,7 +175,15 @@ public class DataCache {
} }
return null; return null;
} }
public <T> T getCache(String cacheKey,T defValue) {
Object value = cacheMap.get(cacheKey);
if (value != null) {
return (T) value;
}else {
updateCache(cacheKey,defValue);
return defValue;
}
}
public OrderSetting getOrderSetting() { public OrderSetting getOrderSetting() {
OrderSetting orderSetting = getCache(Constants.CACHE_OrderSetting); OrderSetting orderSetting = getCache(Constants.CACHE_OrderSetting);
if (orderSetting == null) { if (orderSetting == null) {
......
...@@ -100,6 +100,8 @@ public class SettingsController { ...@@ -100,6 +100,8 @@ public class SettingsController {
xrayTest=false; xrayTest=false;
dataCache.updateCache(Constants.CACHE_XRAY_TEST,xrayTest); dataCache.updateCache(Constants.CACHE_XRAY_TEST,xrayTest);
} }
int retryCount=dataCache.getCache(Constants.CACHE_API_RetryCount,3);
int retryInterval=dataCache.getCache(Constants.CACHE_API_RetryInterval,30);
String micronAppAddr=dataCache.getCache(Constants.CACHE_Micron_AppAddr); String micronAppAddr=dataCache.getCache(Constants.CACHE_Micron_AppAddr);
SysSettingsDto dto = new SysSettingsDto(); SysSettingsDto dto = new SysSettingsDto();
dto.setStartJob(startJob); dto.setStartJob(startJob);
...@@ -115,6 +117,8 @@ public class SettingsController { ...@@ -115,6 +117,8 @@ public class SettingsController {
dto.setInputCheck(inputCheck); dto.setInputCheck(inputCheck);
dto.setXRayTest(xrayTest); dto.setXRayTest(xrayTest);
dto.setMicronAppAddr(micronAppAddr); dto.setMicronAppAddr(micronAppAddr);
dto.setRetryCount(retryCount);
dto.setRetryInterval(retryInterval);
return dto; return dto;
} }
...@@ -135,12 +139,14 @@ public class SettingsController { ...@@ -135,12 +139,14 @@ public class SettingsController {
dataCache.updateCache(Constants.CACHE_INPUT_CHECK,sysSettingsDto.isInputCheck()); dataCache.updateCache(Constants.CACHE_INPUT_CHECK,sysSettingsDto.isInputCheck());
dataCache.updateCache(Constants.CACHE_XRAY_TEST,sysSettingsDto.isXRayTest()); dataCache.updateCache(Constants.CACHE_XRAY_TEST,sysSettingsDto.isXRayTest());
dataCache.updateCache(Constants.CACHE_Micron_AppAddr,sysSettingsDto.getMicronAppAddr()); dataCache.updateCache(Constants.CACHE_Micron_AppAddr,sysSettingsDto.getMicronAppAddr());
dataCache.updateCache(Constants.CACHE_API_RetryInterval,sysSettingsDto.getRetryInterval());
dataCache.updateCache(Constants.CACHE_API_RetryCount,sysSettingsDto.getRetryCount());
log.info("更改系统设置:stopout=" + sysSettingsDto.isStopOut() + ",stopjob=" + sysSettingsDto.isStartJob() + ",sluggishDay=" + sysSettingsDto.getSluggishDay() log.info("更改系统设置:stopout=" + sysSettingsDto.isStopOut() + ",stopjob=" + sysSettingsDto.isStartJob() + ",sluggishDay=" + sysSettingsDto.getSluggishDay()
+ ",expiresDay=" + sysSettingsDto.getExpiresDay() + ",capacityWarn=" + sysSettingsDto.getCapacityWarn() + ",backUpMonth=" + sysSettingsDto.getBackUpMonth() + + ",expiresDay=" + sysSettingsDto.getExpiresDay() + ",capacityWarn=" + sysSettingsDto.getCapacityWarn() + ",backUpMonth=" + sysSettingsDto.getBackUpMonth() +
" ,sameBarcodeSettings=" + sysSettingsDto.getSameBarcodeSettings()+", apiTest="+sysSettingsDto.isApiTest()+",xrayBypass="+sysSettingsDto.isXrayBypass()+ " ,sameBarcodeSettings=" + sysSettingsDto.getSameBarcodeSettings()+", apiTest="+sysSettingsDto.isApiTest()+",xrayBypass="+sysSettingsDto.isXrayBypass()+
",expiredateVerify=" + sysSettingsDto.isExpiredateVerify()+",inputCheck="+sysSettingsDto.isInputCheck()+",isXRayTest="+sysSettingsDto.isXRayTest() ",expiredateVerify=" + sysSettingsDto.isExpiredateVerify()+",inputCheck="+sysSettingsDto.isInputCheck()+",isXRayTest="+sysSettingsDto.isXRayTest()
+",CACHE_Micron_AppAddr="+sysSettingsDto.getMicronAppAddr()); +",CACHE_Micron_AppAddr="+sysSettingsDto.getMicronAppAddr()+", CACHE_API_RetryCount="+sysSettingsDto.getRetryCount()+", CACHE_API_RetryInterval="+sysSettingsDto.getRetryInterval());
micronConfig.UpdateAddr(sysSettingsDto.getMicronAppAddr()); micronConfig.UpdateAddr(sysSettingsDto.getMicronAppAddr());
String msg = MessageUtils.getText("smfcore.saveOk", servletRequest.getLocale(), "保存成功"); String msg = MessageUtils.getText("smfcore.saveOk", servletRequest.getLocale(), "保存成功");
return ResultBean.newOkResult(msg); return ResultBean.newOkResult(msg);
......
...@@ -48,4 +48,8 @@ public class SysSettingsDto implements Serializable { ...@@ -48,4 +48,8 @@ public class SysSettingsDto implements Serializable {
@ApiModelProperty("Xray点料测试功能") @ApiModelProperty("Xray点料测试功能")
private boolean xRayTest = false; private boolean xRayTest = false;
@ApiModelProperty("API010retry次数")
private int retryCount = 3;
@ApiModelProperty("API010retry间隔")
private int retryInterval = 30;
} }
...@@ -316,7 +316,7 @@ public class MicronApi { ...@@ -316,7 +316,7 @@ public class MicronApi {
String paramStr = JsonUtil.toJsonStr(paramsMap); String paramStr = JsonUtil.toJsonStr(paramsMap);
log.info("调用MES接口 API002: url=" + url + ",body=" + paramStr + ""); log.info("调用MES接口 API002: url=" + url + ",body=" + paramStr + "");
MicronResult result = HttpHelper.postMicronJson(url, paramsMap); MicronResult result = HttpHelper.postMicronJson(url, paramsMap,2*60*1000);
// "error": <ErrCode>, // "error": <ErrCode>,
// "message": <ErrMessage>, // "message": <ErrMessage>,
...@@ -825,13 +825,41 @@ public class MicronApi { ...@@ -825,13 +825,41 @@ public class MicronApi {
public static List<TrackStatus> Api010(String operationId, List<Material> materialList) { public static List<TrackStatus> Api010(String operationId, List<Material> materialList) {
// Http Status code:
// 200 - Success
// {
// "trasactionId": <TransactionId>,
// "tag":
// [
// <tagKey1> : <tagValue1>,
// <tagKey2> : <tagValue2>,
// ...
// ],
// "status" "InProgress|Completed
// "trackStatus":
// [
// {
// "serialNum": <SerialNum>,
// "partNumber": <PartNumber>
// "SAPsuccess": true|False,
// "MESsuccess": true|False,
// "description": <description>
// },
// {
// ...
// }
// ]
// }
//出库前预扣 //出库前预扣
List<TrackStatus> statusList = new ArrayList<>(); List<TrackStatus> statusList = new ArrayList<>();
if (Debug) { if (Debug) {
for (Material m : for (Material m :
materialList) { materialList) {
TrackStatus trackStatus = new TrackStatus(); TrackStatus trackStatus = new TrackStatus();
trackStatus.setSuccess(false); // trackStatus.setSuccess(false);
trackStatus.setSapSuccess(false);
trackStatus.setMesSuccess(false);
trackStatus.setDescription("api010 fail"); trackStatus.setDescription("api010 fail");
trackStatus.setMaterialStatus("fail"); trackStatus.setMaterialStatus("fail");
trackStatus.setPartNumber(m.getPartNumber()); trackStatus.setPartNumber(m.getPartNumber());
...@@ -841,6 +869,9 @@ public class MicronApi { ...@@ -841,6 +869,9 @@ public class MicronApi {
return statusList; return statusList;
} }
int retryCount = dataCache.getCache(Constants.CACHE_API_RetryCount, 3);
int retryInterval = dataCache.getCache(Constants.CACHE_API_RetryInterval, 30);
String url = config.getUrl(config.api_name_010); String url = config.getUrl(config.api_name_010);
try { try {
...@@ -849,7 +880,10 @@ public class MicronApi { ...@@ -849,7 +880,10 @@ public class MicronApi {
paramMap.put("materials", materialList); paramMap.put("materials", materialList);
String paramStr = JsonUtil.toJsonStr(paramMap); String paramStr = JsonUtil.toJsonStr(paramMap);
log.info("调用MES接口 API010: url=" + url + ",body=" + paramStr + "");
for (int i = 1; i <= retryCount; i++) {
log.info("第" + i + "调用MES接口 API010: url=" + url + ",body=" + paramStr + "");
MicronResult micronResult = HttpHelper.postMicronJson(url, paramMap); MicronResult micronResult = HttpHelper.postMicronJson(url, paramMap);
// JSONObject jsonObject = JSONObject.parseObject(micronResult.getResponseData()); // JSONObject jsonObject = JSONObject.parseObject(micronResult.getResponseData());
...@@ -858,6 +892,13 @@ public class MicronApi { ...@@ -858,6 +892,13 @@ public class MicronApi {
String errMsg = getDErrorMsg(micronResult); String errMsg = getDErrorMsg(micronResult);
if (micronResult.isOk()) { if (micronResult.isOk()) {
String status = micronResult.getResult("status", false);
if (status.toLowerCase().equals("InProgress".toLowerCase())) {
//等待30秒重发一次,最多重发
log.info("第" + i + "调用MES接口 API010: url=" + url + ",body=" + paramStr + "返回status=InProgress,等待 " + retryInterval + "秒后重发");
Thread.sleep(retryInterval * 60);
continue;
}
List<Object> objects = micronResult.getResult("trackStatus", false); List<Object> objects = micronResult.getResult("trackStatus", false);
for (Object obj : for (Object obj :
objects) { objects) {
...@@ -870,7 +911,9 @@ public class MicronApi { ...@@ -870,7 +911,9 @@ public class MicronApi {
for (Material m : for (Material m :
materialList) { materialList) {
TrackStatus trackStatus = new TrackStatus(); TrackStatus trackStatus = new TrackStatus();
trackStatus.setSuccess(false); // trackStatus.setSuccess(false);
trackStatus.setMesSuccess(false);
trackStatus.setSapSuccess(false);
trackStatus.setDescription(errMsg); trackStatus.setDescription(errMsg);
trackStatus.setMaterialStatus("Fail"); trackStatus.setMaterialStatus("Fail");
trackStatus.setPartNumber(m.getPartNumber()); trackStatus.setPartNumber(m.getPartNumber());
...@@ -878,14 +921,15 @@ public class MicronApi { ...@@ -878,14 +921,15 @@ public class MicronApi {
statusList.add(trackStatus); statusList.add(trackStatus);
} }
} }
break;
} else if (ObjectUtil.isNotEmpty(errMsg)) { } else if (ObjectUtil.isNotEmpty(errMsg)) {
log.info("API010 ,接口通信失败:" + errMsg); log.info("API010 ,接口通信失败:" + errMsg);
throw new ApiException(errMsg); throw new ApiException(errMsg);
} else { } else {
log.info("API010 ,接口通信失败"); log.info("API010 ,接口通信失败");
throw new ApiException("smfcore.api.fail", "{0} Failed to get data", new String[]{"API010 : " + micronResult.getResponseData()}); throw new ApiException("smfcore.api.fail", "{0} Failed to get data", new String[]{"API010 : " + micronResult.getResponseData()});
} }
}
//statusList = micronResult.getResult("trackStatus"); //statusList = micronResult.getResult("trackStatus");
} catch (Exception e) { } catch (Exception e) {
log.error(url + "出错", e); log.error(url + "出错", e);
...@@ -894,6 +938,81 @@ public class MicronApi { ...@@ -894,6 +938,81 @@ public class MicronApi {
} }
private static List<TrackStatus> Api010Send(String operationId, List<Material> materialList) {
//出库前预扣
List<TrackStatus> statusList = new ArrayList<>();
// if (Debug) {
// for (Material m :
// materialList) {
// TrackStatus trackStatus = new TrackStatus();
// trackStatus.setSuccess(false);
// trackStatus.setDescription("api010 fail");
// trackStatus.setMaterialStatus("fail");
// trackStatus.setPartNumber(m.getPartNumber());
// trackStatus.setSerialNum(m.getSerialNum());
// statusList.add(trackStatus);
// }
// return statusList;
// }
//
// String url = config.getUrl(config.api_name_010);
// try {
//
// Map<String, Object> paramMap = new HashMap<>();
// paramMap.put("operationId", operationId);
// paramMap.put("materials", materialList);
//
// String paramStr = JsonUtil.toJsonStr(paramMap);
// log.info("调用MES接口 API010: url=" + url + ",body=" + paramStr + "");
//
// MicronResult micronResult = HttpHelper.postMicronJson(url, paramMap);
//// JSONObject jsonObject = JSONObject.parseObject(micronResult.getResponseData());
//// String trackStatus = jsonObject.getString("trackStatus");
//// 0712 API-010 Out Body: Remove materialStatus node
//
// String errMsg = getDErrorMsg(micronResult);
// if (micronResult.isOk()) {
// String status=micronResult.getResult("status",false);
// if(status.equals("InProgress"))
// {
// //等待30秒重发一次,最多重发
// }
// List<Object> objects = micronResult.getResult("trackStatus", false);
// for (Object obj :
// objects) {
// TrackStatus s = JsonUtil.toObj(JsonUtil.toJsonStr(obj), TrackStatus.class);
// statusList.add(s);
// }
// if (statusList != null && statusList.size() > 0) {
// return statusList;
// } else if (statusList == null || statusList.size() <= 0) {
// for (Material m :
// materialList) {
// TrackStatus trackStatus = new TrackStatus();
// trackStatus.setSuccess(false);
// trackStatus.setDescription(errMsg);
// trackStatus.setMaterialStatus("Fail");
// trackStatus.setPartNumber(m.getPartNumber());
// trackStatus.setSerialNum(m.getSerialNum());
// statusList.add(trackStatus);
// }
// }
// } else if (ObjectUtil.isNotEmpty(errMsg)) {
// log.info("API010 ,接口通信失败:" + errMsg);
// throw new ApiException(errMsg);
//
// } else {
// log.info("API010 ,接口通信失败");
// throw new ApiException("smfcore.api.fail", "{0} Failed to get data", new String[]{"API010 : " + micronResult.getResponseData()});
// }
// //statusList = micronResult.getResult("trackStatus");
// } catch (Exception e) {
// log.error(url + "出错", e);
// }
return statusList;
}
public static String Api011(String mode, String userName, String source) { public static String Api011(String mode, String userName, String source) {
if( Debug){ if( Debug){
return mode+"_test_operationId"; return mode+"_test_operationId";
......
...@@ -25,6 +25,12 @@ public class TrackStatus implements Serializable { ...@@ -25,6 +25,12 @@ public class TrackStatus implements Serializable {
private String serialNum; private String serialNum;
private String partNumber; private String partNumber;
private String materialStatus; private String materialStatus;
private boolean Success; // private boolean Success;
private boolean sapSuccess;
private boolean mesSuccess;
private String description; private String description;
public boolean isSuccess(){
return isMesSuccess()&&isSapSuccess();
}
} }
...@@ -207,6 +207,16 @@ public class MicronResult implements Serializable { ...@@ -207,6 +207,16 @@ public class MicronResult implements Serializable {
public static String GetMapValue(Map<String,Object> map,String key){ public static String GetMapValue(Map<String,Object> map,String key){
Object obj =map.get(key); Object obj =map.get(key);
if(obj==null){ if(obj==null){
for (String mapKey :
map.keySet()) {
if( ObjectUtil.isNotEmpty(mapKey)&&ObjectUtil.isNotEmpty(key)&& mapKey.toLowerCase().equals(key.toLowerCase())) {
obj = map.get(mapKey);
if (ObjectUtil.isNotEmpty(obj)) {
return obj.toString();
}
}
}
return ""; return "";
} }
return obj.toString(); return obj.toString();
......
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!