Commit 5f460c1c LN

新功能:MBR,REQ,GR,MCL

1 个父辈 00042f65
......@@ -828,7 +828,11 @@ public class RobotBoxHandler extends BaseDeviceHandler {
if (!inList.isValidRfid(rfid)) {
return barcode;
}
//如果入库单已手动结束,不再接收新任务
if(inList.isManualFinish()){
log.info("当前入库单[" + inList.getName() + "]已手动结束,不需要再验证:"+barcode.getBarcode());
return barcode;
}
operationId = inList.getOperationId();
if (ObjectUtil.isEmpty(operationId)) {
......
......@@ -71,6 +71,11 @@ public class InList extends BasePo implements Serializable {
private String operationId="";
/**
* 已手动确认结束
*/
private boolean manualFinish=false;
/**
* ReqId
*/
private String reqId="";
......
package com.neotel.smfcore.custom.micron1053.api;
import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSONObject;
import com.neotel.smfcore.common.bean.ResultBean;
import com.neotel.smfcore.common.exception.ApiException;
import com.neotel.smfcore.common.exception.ValidateException;
import com.neotel.smfcore.common.utils.Constants;
import com.neotel.smfcore.common.utils.DateUtil;
import com.neotel.smfcore.common.utils.HttpHelper;
import com.neotel.smfcore.common.utils.JsonUtil;
import com.neotel.smfcore.core.api.listener.BaseSmfApiListener;
import com.neotel.smfcore.core.barcode.service.manager.IBarcodeManager;
import com.neotel.smfcore.core.barcode.service.po.Barcode;
import com.neotel.smfcore.core.device.util.DataCache;
......@@ -220,41 +219,26 @@ public class MicronApi {
}
private static String getDErrorMsg(MicronResult result) throws ApiException {
return result.getDErrorMsg();
// String errMsg = "";
// Object errCode = -1;
// String detail = "";
// try {
//
// // "error": <ErrCode>,
//// "message": <ErrMessage>,
//// "detail": <ErrDetail>
//
// errMsg = result.getResult("message", false);
// if (ObjectUtil.isEmpty(errMsg)) {
// errMsg = "";
// } else {
// errMsg = "message:" + errMsg;
// }
// errCode = result.getResult("error", false);
//
// if (ObjectUtil.isEmpty(errCode)) {
// errCode = "";
// } else {
// errCode = "error:" + errCode;
// }
// detail = result.getResult("detail", false);
// if (ObjectUtil.isEmpty(detail)) {
// detail = "";
// } else {
// detail = "detail:" + detail;
// }
//
// return errCode + ";" + errMsg + ";" + detail;
// } catch (Exception exception) {
// log.error("出错:" + exception);
// return errCode + ";" + errMsg + ";" + detail + ":" + exception.toString();
// }
// 551 - Invalid MBR
// 550 - SAP Down
// 552 - Invalid REQ
// 553 - Invalid GR
// 550 - SAP Down
String msg= result.getDErrorMsg();
if(ObjectUtil.isEmpty(msg)&&result!=null){
if( result.getHttpCode()==551){
return "Invalid MBR";
}else if( result.getHttpCode()==551){
return "SAP Down";
}else if( result.getHttpCode()==552){
return "Invalid REQ";
}else if( result.getHttpCode()==553){
return "Invalid GR";
}
}
return msg;
}
public static Map<String,String> API002(String rfid, String operationId, List<StoragePos> storagePos) {
......@@ -1046,49 +1030,74 @@ public class MicronApi {
return false;
}
public static boolean Api101(String id, String operationId, String skipSap) {
String url = config.getUrl(config.api_name_101);
url = MessageFormat.format(url,id,operationId,skipSap);
private static ResultBean Api100(String apiName,String url) {
if (Debug) {
log.info("调试状态直接返回true, 调用MES接口 " + apiName + ": url=" + url + " ");
return ResultBean.newOkResult(true);
}
try {
log.info("调用MES接口 API101: url=" + url + " ");
log.info("调用MES接口 " + apiName + ": url=" + url + " ");
MicronResult result = HttpHelper.getMicronJson(url);
return true;
String errMsg = getDErrorMsg(result);
if (result.isOk()) {
return ResultBean.newOkResult(true);
} else if (ObjectUtil.isNotEmpty(errMsg)) {
log.error(apiName+" ,接口通信失败:" + errMsg);
return ResultBean.newErrorResult(-1, "smfcore.api.fail", "{0} Failed to get data", new String[]{apiName + " : " + errMsg});
} else {
log.error(apiName+" ,接口通信失败:" + result.getResponseData());
return ResultBean.newErrorResult(-1, "smfcore.api.fail", "{0} Failed to get data", new String[]{apiName + " : " + result.getResponseData()});
}
} catch (ApiException e) {
log.error(url + "出错", e);
return ResultBean.newErrorResult(-1, e.getMsgKey(), e.getDefaultMsg(), e.getMsgParam());
}
}
public static ResultBean Api101(String id, String operationId, String skipSap) {
String url = config.getUrl(config.api_name_101);
url = MessageFormat.format(url, id, operationId, skipSap);
return Api100("API101",url);
// if (Debug) {
// log.info("调试状态直接返回true, 调用MES接口 API101: url=" + url + " ");
// return ResultBean.newOkResult(true);
// }
// try {
// log.info("调用MES接口 API101: url=" + url + " ");
// MicronResult result = HttpHelper.getMicronJson(url);
// String errMsg = getDErrorMsg(result);
// if (result.isOk()) {
// return ResultBean.newOkResult(true);
// } else if (ObjectUtil.isNotEmpty(errMsg)) {
// log.error("API101 ,接口通信失败:" + errMsg);
// return ResultBean.newErrorResult(-1, "smfcore.api.fail", "{0} Failed to get data", new String[]{"Api011 : " + errMsg});
//
// } else {
// log.error("API101 ,接口通信失败:" + result.getResponseData());
// return ResultBean.newErrorResult(-1, "smfcore.api.fail", "{0} Failed to get data", new String[]{"Api011 : " + result.getResponseData()});
// }
//
// } catch (ApiException e) {
// log.error(url + "出错", e);
// return ResultBean.newErrorResult(-1, e.getMsgKey(), e.getDefaultMsg(),e.getMsgParam());
// }
return false;
}
public static boolean Api102(String id, String operationId) {
public static ResultBean Api102(String id, String operationId) {
String url = config.getUrl(config.api_name_102);
url = MessageFormat.format(url, id, operationId);
try {
log.info("调用MES接口 API102: url=" + url + " ");
MicronResult result = HttpHelper.getMicronJson(url);
return true;
} catch (ApiException e) {
log.error(url + "出错", e);
}
return false;
return Api100("API102",url);
}
public static boolean Api103(String purchaseOrder, String packagingSlip, String operationId, String skipSap) {
public static ResultBean Api103( String packagingSlip,String purchaseOrder, String operationId, String skipSap) {
String url = config.getUrl(config.api_name_103);
url = MessageFormat.format(url, purchaseOrder, packagingSlip, operationId, skipSap);
try {
log.info("调用MES接口 API103: url=" + url + " ");
MicronResult result = HttpHelper.getMicronJson(url);
return true;
} catch (ApiException e) {
log.error(url + "出错", e);
}
return false;
return Api100("API102",url);
}
public static String Api201(String linePrepOrderId, String operationId) {
......
......@@ -128,6 +128,11 @@ public class LoadingUtil {
if (inList == null) {
return;
}
//如果入库单已手动结束,不再接收新任务
if(inList.isManualFinish()){
log.info("AddInListItem 当前入库[" + inList.getName() + "]已手动结束,不添加新物料:"+barcode.getBarcode());
return;
}
inList.addRfid(rfid);
inList.setStatus(INLIST_STATUS.ABNORMAL);
......@@ -415,7 +420,10 @@ public class LoadingUtil {
return true;
}
private boolean PushToMes(String rfid, InList inList,List<StoragePos> posList) {
private boolean PushToMes(String rfid, InList inList,List<StoragePos> posList ) {
return PushToMes(rfid,inList,posList,false);
}
private boolean PushToMes(String rfid, InList inList,List<StoragePos> posList,boolean manualFinish) {
for (InListItem item : inList.getInListItems()) {
if (item.getRfid().equals(rfid) && item.getState() == INITEM_STATUS.Cancel && ObjectUtil.isNotEmpty(item.getRi())&&ObjectUtil.isNotEmpty(item.getPosName())) {
......@@ -431,7 +439,11 @@ public class LoadingUtil {
List<InListItem> inListItems = new ArrayList<>();
boolean isEnd = true;
if (inList.getRfidList().size() < inList.getShelfNum()) {
if(manualFinish){
inList.setManualFinish(manualFinish);
}
else if (inList.getRfidList().size() < inList.getShelfNum()) {
isEnd = false;
}
for (InListItem item :
......@@ -473,21 +485,14 @@ public class LoadingUtil {
}
inList.setInListItems(inListItems);
if (isEnd) {
log.info("更新 入库单[" + inList.getName() + "] 状态改为 OK");
log.info("更新 入库单[" + inList.getName() + "] manualFinish=["+manualFinish+"] 状态改为 OK");
inList.setStatus(INLIST_STATUS.OK);
} else {
log.info("更新 入库单[" + inList.getName() + "] 状态改为 ABNORMAL");
log.info("更新 入库单[" + inList.getName() + "] manualFinish=["+manualFinish+"] 状态改为 ABNORMAL");
inList.setStatus(INLIST_STATUS.ABNORMAL);
}
inList = inListManager.save(inList);
inListCache.addInListToMap(inList);
//判断是否全部完成
/*if (isEnd) {
log.info(" 入库单[" + inList.getName() + "]:任务已全部完成,清空当前loadinginfo");
dataCache.updateCache(Constants.CACHE_LOADING, new LoadingInfo());
}*/
return true;
}
public boolean Retry() {
......@@ -571,4 +576,39 @@ public class LoadingUtil {
return "";
}
public InList finish(InList inList) {
//如果没有任何入库信息,直接结束
if(inList.getRfidList().size()<=0&&inList.getInListItems().size()<=0){
inList.setManualFinish(true);
inList.setStatus(INLIST_STATUS.OK);
inList = inListManager.save(inList);
inListCache.addInListToMap(inList);
log.info("finish 入库单[" + inList.getName() + "] 手动结束,当前无任务,设置 manualFinish=true, 状态改为 OK");
return inList;
}
for (String rfid :
inList.getRfidList()) {
List<StoragePos> posList = new ArrayList<>();
//查找所有失败的重新推送
for (InListItem item : inList.getInListItems()) {
if (ObjectUtil.isEmpty(item.getPosName())) {
continue;
}
if (item.getRfid().equals(rfid) && item.getState() == INITEM_STATUS.Fail) {
StoragePos pos = storagePosManager.getByPosName(item.getPosName());
posList.add(pos);
} else if (item.getState() == INITEM_STATUS.PutEnd) {
StoragePos pos = storagePosManager.getByPosName(item.getPosName());
posList.add(pos);
}
}
if (posList.size() > 0) {
PushToMes(rfid, inList, posList);
}
}
return getInlist();
}
}
......@@ -352,7 +352,7 @@ smfcore.expiration.ameExists=\u8FC7\u671F\u914D\u7F6E[{0}]\u5DF2\u5B58\u5728
smfcore.expiration.notExist=\u8FC7\u671F\u914D\u7F6E[{0}]\u4E0D\u5B58\u5728
smfcore.micron.xray.offline={0}\u9700\u8981\u70B9\u6599\uFF0C\u70B9\u6599\u673A\u4E0D\u5728\u7EBF
smfcore.micron.nodata=\u672A\u627E\u5230\u4FE1\u606F
smfcore.api.fail={0} Failed to get data
smfcore.api.fail={0} Failed to get data
smfcore.micron.apiClose=Not yet open
smfcore.api.error=api.error: error={0},message={1},detial={2}
smfcore.api.toXray={0}\u9700\u8981\u53BB\u70B9\u6599
......@@ -362,7 +362,8 @@ smfcore.error.barcode.hastask=\u6761\u7801[0]\u5DF2\u6709\u5165\u5E93\u4EFB\u52A
smfcore.error.barcode.hasOutTask=\u5E8F\u5217\u53F7[0] \u5DF2\u6709\u51FA\u5E93\u4EFB\u52A1\uFF0C\u51FA\u5E93\u524D\u4E0D\u5F97\u5165\u5E93\u76F8\u540C\u5E8F\u5217\u53F7\u7269\u6599
smfcore.error.noRetryReel=No material found to retry
smfcore.micron.inlistCannotAbort=\u64CD\u4F5C\u5931\u8D25\uFF1A\u8FD8\u6709\u5165\u5E93\u4EFB\u52A1\u672A\u5B8C\u6210
smfcore.micron.modeError=\u53C2\u6570\u9519\u8BEF {0} \u5165\u5E93\u8FD8\u672A\u5B8C\u6210
smfcore.micron.modeError= {0} \u5165\u5E93\u672A\u5B8C\u6210
smfcore.micron.inlisttaskNotEnd=\u64CD\u4F5C\u5931\u8D25\uFF1A\u5165\u5E93\u4EFB\u52A1{0}\u672A\u5B8C\u6210
#smfclient.nlp.onlyOneTray=\u4E0D\u53EF\u540C\u65F6\u653E\u5165\u591A\u76D8\u7269\u6599:{0}
#smfclient.nlp.cannotFindPos={0}\u672A\u627E\u5230\u5E93\u4F4D:{1}
#smfclient.nlp.inputOk={0}\u5165\u5E93\u5230{1}\u6210\u529F
......
......@@ -361,4 +361,5 @@ smfcore.error.barcode.hastask=Serial No.(S)[0] already have storage task
smfcore.error.barcode.hasOutTask=Serial No.(S)[0] already have retrieval task, cannot store same Serial No. material before retrieval finish
smfcore.error.noRetryReel=No material found to retry
smfcore.micron.inlistCannotAbort=Operation failed: there are still inbound tasks to be completed
smfcore.micron.modeError=Parameter error. {0} Incoming not finished.
\ No newline at end of file
smfcore.micron.modeError= {0} Loading not finished.
smfcore.micron.inlisttaskNotEnd=Operation Failed: Task {0} Not Completed
\ No newline at end of file
......@@ -356,4 +356,5 @@ smfcore.error.barcode.hastask=Serial No.(S)[0] already have storage task
smfcore.error.barcode.hasOutTask=Serial No.(S)[0] already have retrieval task, cannot store same Serial No. material before retrieval finish
smfcore.error.noRetryReel=No material found to retry
smfcore.micron.inlistCannotAbort=\u64CD\u4F5C\u306B\u5931\u6557\u3057\u307E\u3057\u305F\uFF1A\u5B8C\u4E86\u3059\u3079\u304D\u53D7\u4FE1\u30BF\u30B9\u30AF\u304C\u6B8B\u3063\u3066\u3044\u307E\u3059
smfcore.micron.modeError=\u53C2\u6570\u9519\u8BEF {0} Loading \u8FD8\u672A\u5B8C\u6210
\ No newline at end of file
smfcore.micron.modeError={0} \u5165\u5E93\u672A\u5B8C\u6210
smfcore.micron.inlisttaskNotEnd=\u64CD\u4F5C\u5931\u8D25\uFF1A\u5165\u5E93\u4EFB\u52A1{0}\u672A\u5B8C\u6210
\ No newline at end of file
......@@ -356,4 +356,5 @@ smfcore.error.barcode.hastask=Serial No.(S)[0] already have storage task
smfcore.error.barcode.hasOutTask=\u5E8F\u5217\u53F7[0] \u5DF2\u6709\u51FA\u5E93\u4EFB\u52A1\uFF0C\u51FA\u5E93\u524D\u4E0D\u5F97\u5165\u5E93\u76F8\u540C\u5E8F\u5217\u53F7\u7269\u6599
smfcore.error.noRetryReel=\u6CA1\u6709\u53EF\u4EE5\u91CD\u8BD5\u7684\u7269\u6599
smfcore.micron.inlistCannotAbort=\u64CD\u4F5C\u5931\u8D25\uFF1A\u8FD8\u6709\u5165\u5E93\u4EFB\u52A1\u672A\u5B8C\u6210
smfcore.micron.modeError=\u53C2\u6570\u9519\u8BEF {0} \u5165\u5E93\u8FD8\u672A\u5B8C\u6210
\ No newline at end of file
smfcore.micron.modeError={0} \u5165\u5E93\u672A\u5B8C\u6210
smfcore.micron.inlisttaskNotEnd=\u64CD\u4F5C\u5931\u8D25\uFF1A\u5165\u5E93\u4EFB\u52A1{0}\u672A\u5B8C\u6210
\ No newline at end of file
......@@ -357,4 +357,5 @@ smfcore.selfAudit.hasOutTask=\u5E93\u4F4D[{0}]\u5DF2\u6709\u51FA\u5E93\u4EFB\u52
smfcore.error.barcode.hasOutTask=\u5E8F\u5217\u865F[0] \u5DF2\u6709\u51FA\u5EAB\u4EFB\u52D9\uFF0C\u51FA\u5EAB\u524D\u4E0D\u5F97\u5165\u5EAB\u76F8\u540C\u5E8F\u5217\u865F\u7269\u6599
smfcore.error.noRetryReel=\u6C92\u6709\u53EF\u4EE5\u91CD\u8A66\u7684\u7269\u6599
smfcore.micron.inlistCannotAbort=\u64CD\u4F5C\u5931\u8D25\uFF1A\u8FD8\u6709\u5165\u5E93\u4EFB\u52A1\u672A\u5B8C\u6210
smfcore.micron.modeError=\u53C2\u6570\u9519\u8BEF {0} \u5165\u5E93\u8FD8\u672A\u5B8C\u6210
\ No newline at end of file
smfcore.micron.modeError={0} \u5165\u5E93\u672A\u5B8C\u6210
smfcore.micron.inlisttaskNotEnd=\u64CD\u4F5C\u5931\u8D25\uFF1A\u5165\u5E93\u4EFB\u52A1{0}\u672A\u5B8C\u6210
\ No newline at end of file
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!