Commit 5f460c1c LN

新功能:MBR,REQ,GR,MCL

1 个父辈 00042f65
...@@ -828,7 +828,11 @@ public class RobotBoxHandler extends BaseDeviceHandler { ...@@ -828,7 +828,11 @@ public class RobotBoxHandler extends BaseDeviceHandler {
if (!inList.isValidRfid(rfid)) { if (!inList.isValidRfid(rfid)) {
return barcode; return barcode;
} }
//如果入库单已手动结束,不再接收新任务
if(inList.isManualFinish()){
log.info("当前入库单[" + inList.getName() + "]已手动结束,不需要再验证:"+barcode.getBarcode());
return barcode;
}
operationId = inList.getOperationId(); operationId = inList.getOperationId();
if (ObjectUtil.isEmpty(operationId)) { if (ObjectUtil.isEmpty(operationId)) {
......
...@@ -71,6 +71,11 @@ public class InList extends BasePo implements Serializable { ...@@ -71,6 +71,11 @@ public class InList extends BasePo implements Serializable {
private String operationId=""; private String operationId="";
/** /**
* 已手动确认结束
*/
private boolean manualFinish=false;
/**
* ReqId * ReqId
*/ */
private String reqId=""; private String reqId="";
......
package com.neotel.smfcore.custom.micron1053.api; package com.neotel.smfcore.custom.micron1053.api;
import cn.hutool.core.util.ObjectUtil; 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.ApiException;
import com.neotel.smfcore.common.exception.ValidateException; import com.neotel.smfcore.common.exception.ValidateException;
import com.neotel.smfcore.common.utils.Constants; import com.neotel.smfcore.common.utils.Constants;
import com.neotel.smfcore.common.utils.DateUtil; import com.neotel.smfcore.common.utils.DateUtil;
import com.neotel.smfcore.common.utils.HttpHelper; import com.neotel.smfcore.common.utils.HttpHelper;
import com.neotel.smfcore.common.utils.JsonUtil; 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.manager.IBarcodeManager;
import com.neotel.smfcore.core.barcode.service.po.Barcode; import com.neotel.smfcore.core.barcode.service.po.Barcode;
import com.neotel.smfcore.core.device.util.DataCache; import com.neotel.smfcore.core.device.util.DataCache;
...@@ -220,41 +219,26 @@ public class MicronApi { ...@@ -220,41 +219,26 @@ public class MicronApi {
} }
private static String getDErrorMsg(MicronResult result) throws ApiException { private static String getDErrorMsg(MicronResult result) throws ApiException {
return result.getDErrorMsg();
// String errMsg = ""; // 551 - Invalid MBR
// Object errCode = -1; // 550 - SAP Down
// String detail = ""; // 552 - Invalid REQ
// try { // 553 - Invalid GR
// // 550 - SAP Down
// // "error": <ErrCode>,
//// "message": <ErrMessage>, String msg= result.getDErrorMsg();
//// "detail": <ErrDetail> if(ObjectUtil.isEmpty(msg)&&result!=null){
// if( result.getHttpCode()==551){
// errMsg = result.getResult("message", false); return "Invalid MBR";
// if (ObjectUtil.isEmpty(errMsg)) { }else if( result.getHttpCode()==551){
// errMsg = ""; return "SAP Down";
// } else { }else if( result.getHttpCode()==552){
// errMsg = "message:" + errMsg; return "Invalid REQ";
// } }else if( result.getHttpCode()==553){
// errCode = result.getResult("error", false); return "Invalid GR";
// }
// if (ObjectUtil.isEmpty(errCode)) { }
// errCode = ""; return msg;
// } 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();
// }
} }
public static Map<String,String> API002(String rfid, String operationId, List<StoragePos> storagePos) { public static Map<String,String> API002(String rfid, String operationId, List<StoragePos> storagePos) {
...@@ -1046,49 +1030,74 @@ public class MicronApi { ...@@ -1046,49 +1030,74 @@ public class MicronApi {
return false; return false;
} }
public static boolean Api101(String id, String operationId, String skipSap) { private static ResultBean Api100(String apiName,String url) {
String url = config.getUrl(config.api_name_101);
url = MessageFormat.format(url,id,operationId,skipSap);
if (Debug) {
log.info("调试状态直接返回true, 调用MES接口 " + apiName + ": url=" + url + " ");
return ResultBean.newOkResult(true);
}
try { try {
log.info("调用MES接口 API101: url=" + url + " "); log.info("调用MES接口 " + apiName + ": url=" + url + " ");
MicronResult result = HttpHelper.getMicronJson(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) { } catch (ApiException e) {
log.error(url + "出错", 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); String url = config.getUrl(config.api_name_102);
url = MessageFormat.format(url, id, operationId); url = MessageFormat.format(url, id, operationId);
return Api100("API102",url);
try {
log.info("调用MES接口 API102: url=" + url + " ");
MicronResult result = HttpHelper.getMicronJson(url);
return true;
} catch (ApiException e) {
log.error(url + "出错", e);
}
return false;
} }
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); String url = config.getUrl(config.api_name_103);
url = MessageFormat.format(url, purchaseOrder, packagingSlip, operationId, skipSap); url = MessageFormat.format(url, purchaseOrder, packagingSlip, operationId, skipSap);
return Api100("API102",url);
try {
log.info("调用MES接口 API103: url=" + url + " ");
MicronResult result = HttpHelper.getMicronJson(url);
return true;
} catch (ApiException e) {
log.error(url + "出错", e);
}
return false;
} }
public static String Api201(String linePrepOrderId, String operationId) { public static String Api201(String linePrepOrderId, String operationId) {
......
...@@ -128,6 +128,11 @@ public class LoadingUtil { ...@@ -128,6 +128,11 @@ public class LoadingUtil {
if (inList == null) { if (inList == null) {
return; return;
} }
//如果入库单已手动结束,不再接收新任务
if(inList.isManualFinish()){
log.info("AddInListItem 当前入库[" + inList.getName() + "]已手动结束,不添加新物料:"+barcode.getBarcode());
return;
}
inList.addRfid(rfid); inList.addRfid(rfid);
inList.setStatus(INLIST_STATUS.ABNORMAL); inList.setStatus(INLIST_STATUS.ABNORMAL);
...@@ -415,7 +420,10 @@ public class LoadingUtil { ...@@ -415,7 +420,10 @@ public class LoadingUtil {
return true; 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()) { for (InListItem item : inList.getInListItems()) {
if (item.getRfid().equals(rfid) && item.getState() == INITEM_STATUS.Cancel && ObjectUtil.isNotEmpty(item.getRi())&&ObjectUtil.isNotEmpty(item.getPosName())) { 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 { ...@@ -431,7 +439,11 @@ public class LoadingUtil {
List<InListItem> inListItems = new ArrayList<>(); List<InListItem> inListItems = new ArrayList<>();
boolean isEnd = true; boolean isEnd = true;
if (inList.getRfidList().size() < inList.getShelfNum()) { if(manualFinish){
inList.setManualFinish(manualFinish);
}
else if (inList.getRfidList().size() < inList.getShelfNum()) {
isEnd = false; isEnd = false;
} }
for (InListItem item : for (InListItem item :
...@@ -473,21 +485,14 @@ public class LoadingUtil { ...@@ -473,21 +485,14 @@ public class LoadingUtil {
} }
inList.setInListItems(inListItems); inList.setInListItems(inListItems);
if (isEnd) { if (isEnd) {
log.info("更新 入库单[" + inList.getName() + "] 状态改为 OK"); log.info("更新 入库单[" + inList.getName() + "] manualFinish=["+manualFinish+"] 状态改为 OK");
inList.setStatus(INLIST_STATUS.OK); inList.setStatus(INLIST_STATUS.OK);
} else { } else {
log.info("更新 入库单[" + inList.getName() + "] 状态改为 ABNORMAL"); log.info("更新 入库单[" + inList.getName() + "] manualFinish=["+manualFinish+"] 状态改为 ABNORMAL");
inList.setStatus(INLIST_STATUS.ABNORMAL); inList.setStatus(INLIST_STATUS.ABNORMAL);
} }
inList = inListManager.save(inList); inList = inListManager.save(inList);
inListCache.addInListToMap(inList); inListCache.addInListToMap(inList);
//判断是否全部完成
/*if (isEnd) {
log.info(" 入库单[" + inList.getName() + "]:任务已全部完成,清空当前loadinginfo");
dataCache.updateCache(Constants.CACHE_LOADING, new LoadingInfo());
}*/
return true; return true;
} }
public boolean Retry() { public boolean Retry() {
...@@ -571,4 +576,39 @@ public class LoadingUtil { ...@@ -571,4 +576,39 @@ public class LoadingUtil {
return ""; 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 ...@@ -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.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.xray.offline={0}\u9700\u8981\u70B9\u6599\uFF0C\u70B9\u6599\u673A\u4E0D\u5728\u7EBF
smfcore.micron.nodata=\u672A\u627E\u5230\u4FE1\u606F 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.micron.apiClose=Not yet open
smfcore.api.error=api.error: error={0},message={1},detial={2} smfcore.api.error=api.error: error={0},message={1},detial={2}
smfcore.api.toXray={0}\u9700\u8981\u53BB\u70B9\u6599 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 ...@@ -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.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.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.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.onlyOneTray=\u4E0D\u53EF\u540C\u65F6\u653E\u5165\u591A\u76D8\u7269\u6599:{0}
#smfclient.nlp.cannotFindPos={0}\u672A\u627E\u5230\u5E93\u4F4D:{1} #smfclient.nlp.cannotFindPos={0}\u672A\u627E\u5230\u5E93\u4F4D:{1}
#smfclient.nlp.inputOk={0}\u5165\u5E93\u5230{1}\u6210\u529F #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 ...@@ -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.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.error.noRetryReel=No material found to retry
smfcore.micron.inlistCannotAbort=Operation failed: there are still inbound tasks to be completed 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 \ 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 \ No newline at end of file
...@@ -356,4 +356,5 @@ smfcore.error.barcode.hastask=Serial No.(S)[0] already have storage task ...@@ -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.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.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.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 \ 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 \ No newline at end of file
...@@ -356,4 +356,5 @@ smfcore.error.barcode.hastask=Serial No.(S)[0] already have storage task ...@@ -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.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.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.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 \ 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 \ No newline at end of file
...@@ -357,4 +357,5 @@ smfcore.selfAudit.hasOutTask=\u5E93\u4F4D[{0}]\u5DF2\u6709\u51FA\u5E93\u4EFB\u52 ...@@ -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.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.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.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 \ 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 \ No newline at end of file
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!