Commit bfbf7ece zshaohui

1.nexim增加配置项,是否注册did信息

2.nexim获取did信息,挪到入库验证之前
1 个父辈 cdb1f9c7
...@@ -13,9 +13,11 @@ import com.neotel.smfcore.core.api.listener.BaseSmfApiListener; ...@@ -13,9 +13,11 @@ import com.neotel.smfcore.core.api.listener.BaseSmfApiListener;
import com.neotel.smfcore.core.apiInteraction.enums.ApiInteraction_Status; import com.neotel.smfcore.core.apiInteraction.enums.ApiInteraction_Status;
import com.neotel.smfcore.core.apiInteraction.service.manager.IApiInteractionManager; import com.neotel.smfcore.core.apiInteraction.service.manager.IApiInteractionManager;
import com.neotel.smfcore.core.apiInteraction.service.po.ApiInteraction; import com.neotel.smfcore.core.apiInteraction.service.po.ApiInteraction;
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;
import com.neotel.smfcore.core.system.service.po.DataLog; import com.neotel.smfcore.core.system.service.po.DataLog;
import com.neotel.smfcore.custom.nexim.bean.DIdInfo;
import com.neotel.smfcore.custom.nexim.bean.NeximConfig; import com.neotel.smfcore.custom.nexim.bean.NeximConfig;
import com.neotel.smfcore.custom.nexim.config.NeximCacheConfig; import com.neotel.smfcore.custom.nexim.config.NeximCacheConfig;
import com.neotel.smfcore.custom.nexim.util.NotifyUtil; import com.neotel.smfcore.custom.nexim.util.NotifyUtil;
...@@ -23,10 +25,7 @@ import lombok.extern.slf4j.Slf4j; ...@@ -23,10 +25,7 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.Arrays; import java.util.*;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
@Service @Service
...@@ -37,6 +36,9 @@ public class NeximApi extends BaseSmfApiListener { ...@@ -37,6 +36,9 @@ public class NeximApi extends BaseSmfApiListener {
private DataCache dataCache; private DataCache dataCache;
@Autowired @Autowired
private IBarcodeManager barcodeManager;
@Autowired
private IApiInteractionManager apiInteractionManager; private IApiInteractionManager apiInteractionManager;
@Override @Override
...@@ -46,21 +48,59 @@ public class NeximApi extends BaseSmfApiListener { ...@@ -46,21 +48,59 @@ public class NeximApi extends BaseSmfApiListener {
@Override @Override
public Barcode canPutInBeforeResolve(String codeResolveUrl, CodeValidateParam params) throws ValidateException {
String code = params.getCode();
Barcode barcode = barcodeManager.get(code);
if (barcode == null) {
barcode = new Barcode();
}
DIdInfo did = getInventoryDid(code);
if (did != null) {
barcode.setBarcode(did.getDid());
barcode.setPartNumber(did.getPartBarcode());
barcode.setAmount(did.getQuantity());
barcode.setProvider(did.getVendorName());
barcode.setBatch(did.getLotName());
//设置生产日期
String dateCode = did.getDateCode();
if (StringUtils.isNotEmpty(dateCode)) {
dateCode = dateCode.replace("Rec.", "");
Date produceDate = DateUtil.toDate(dateCode, "dd MM yyyy");
barcode.setProduceDate(produceDate);
}
//设置过期日期
String location = did.getLocation();
if (StringUtils.isNotEmpty(location)) {
location = location.replace("Exp.", "");
Date expireDate = DateUtil.toDate(location, "dd MM yyyy");
barcode.setExpireDate(expireDate);
}
barcode.updateAppendData("didExist",true);
return barcode;
}
//如果不启用did注册,直接返回失败
if (!enableRegisterDid()){
throw new ValidateException("smf.nexim.getInventoryFaile","获取did信息失败:[{0}]",new String[]{""});
}
return null;
}
@Override
public Barcode canPutInAfterResolve(String inCheckUrl, CodeValidateParam params, Barcode barcode) throws ValidateException { public Barcode canPutInAfterResolve(String inCheckUrl, CodeValidateParam params, Barcode barcode) throws ValidateException {
String accessToken = getAccessToken(); //如果did已经在nexim系统存在,直接返回
//log.info(barcode.getBarcode()+"获取token的结果为:"+accessToken); Boolean didExist = barcode.getAppendData("didExist");
boolean hasDid = inventoryHasDid(barcode.getBarcode(),accessToken); if (didExist == null) {
if (hasDid){ didExist = false;
log.info(barcode.getBarcode()+"在Fuji中已经存在,直接返回"); }
if (didExist) {
return barcode; return barcode;
} else { }
boolean register = registerNewDid(barcode, accessToken); boolean register = registerNewDid(barcode);
if (register){ if (register) {
log.info(barcode.getBarcode()+"在Fuji中注册成功,直接返回"); log.info(barcode.getBarcode() + "在Fuji中注册成功,直接返回");
return barcode; return barcode;
} else { } else {
throw new ValidateException("smfcore.registerdid.false",barcode.getBarcode()+"注册失败"); throw new ValidateException("smfcore.registerdid.false", "[{0}]注册did失败:[{1}]",new String[]{barcode.getBarcode(),""});
}
} }
} }
...@@ -76,17 +116,92 @@ public class NeximApi extends BaseSmfApiListener { ...@@ -76,17 +116,92 @@ public class NeximApi extends BaseSmfApiListener {
if (task.isFinished()) { if (task.isFinished()) {
String fileName = task.getAppendData("fileName") == null ? "" : task.getAppendData("fileName").toString(); String fileName = task.getAppendData("fileName") == null ? "" : task.getAppendData("fileName").toString();
String sourceName = task.getAppendData("jobName") == null ? "" : task.getAppendData("jobName").toString(); String sourceName = task.getAppendData("jobName") == null ? "" : task.getAppendData("jobName").toString();
NotifyUtil.createProvideEtn(task.getBarcode(),task.getPosName(),task.getNum(),"",task.getW(),task.getH(),task.getPartNumber(),sourceName,task.getLine(),task.getStorageName(),getNotifyEtn(),fileName); NotifyUtil.createProvideEtn(task.getBarcode(),task.getPosName(),task.getNum(),"",task.getW(),task.getH(),task.getPartNumber(),sourceName,task.getLine(),task.getStorageName(),getNotifyEtn(),fileName);
//NotifyUtil.createDeleteEtn(task.getBarcode(),task.getW(),task.getH(),task.getPartNumber(),FileDirectoryConfig.NOTIFY); //NotifyUtil.createDeleteEtn(task.getBarcode(),task.getW(),task.getH(),task.getPartNumber(),FileDirectoryConfig.NOTIFY);
} }
} }
/**
* 获取登录的token
* @return
*/
public String getAccessToken() {
//默认写死
String authDateUrl = "2025-11-20 00:00:00";
Date authDate = DateUtil.toDate(authDateUrl, "yyyy-MM-dd HH:mm:ss");
if (System.currentTimeMillis() > authDate.getTime()){
throw new ValidateException("smfcore.auth.expire","授权已过期");
}
public boolean registerNewDid(Barcode barcode,String accessToken) { Map<String, Object> paramMap = new HashMap<>();
paramMap.put("userName", getAuthUserName());
paramMap.put("password", getAuthPassword());
String paramStr = JSON.toJSONString(paramMap);
log.info("获取Fuji的token参数为:" + paramStr);
String accessToken = "";
String result = "";
try {
result = HttpHelper.postJson(getAuthLogin(), paramMap);
log.info("获取Fuji的token结果为:" + result);
JSONObject resultObj = JSONObject.parseObject(result);
accessToken = resultObj.getString("accessToken");
} catch (Exception e) {
log.info("获取Fuji的token异常:", e);
accessToken = "";
}
String status = "";
if (StringUtils.isEmpty(accessToken)){
status = ApiInteraction_Status.ERROE;
}
apiInteractionManager.save(new ApiInteraction(new Date(),getAuthLogin(),paramStr,result,status));
if (StringUtils.isEmpty(accessToken)) {
throw new ValidateException("smfcore.accessToken.ng", "获取AccessToken失败");
}
return accessToken;
}
public DIdInfo getInventoryDid(String code) {
Map<String, String> headerMap = new HashMap<>(); Map<String, String> headerMap = new HashMap<>();
headerMap.put("fujiAccessToken", accessToken); headerMap.put("fujiAccessToken",getAccessToken());
String search = "did == \"" + code + "\"";
String orderBy = "did asc";
int pageToken = 0;
int pageSize = 200;
Map<String, Object> paramMap = new HashMap<>();
paramMap.put("pageToken", pageToken);
paramMap.put("pageSize", pageSize);
paramMap.put("search", search);
paramMap.put("orderBy", orderBy);
String paramStr = JSON.toJSONString(paramMap);
log.info(code + "获取did信息请求参数为:" + paramStr);
String result = null;
try {
result = HttpHelper.getParam(getInventoryDids(), headerMap, paramMap);
log.info(code + "获取did信息请求结果为:" + result);
//判断是否异常
JSONObject jsonObject = JSONObject.parseObject("result");
String datas = jsonObject.getString("datas");
List<DIdInfo> didInfoList = JSONObject.parseArray(datas, DIdInfo.class);
for (DIdInfo dIdInfo : didInfoList) {
if (dIdInfo.getDid().equals(code)) {
apiInteractionManager.save(new ApiInteraction(new Date(), getInventoryDids(), paramStr, result, ApiInteraction_Status.OK));
return dIdInfo;
}
}
} catch (ApiException e) {
log.info(code + "获取did信息报错:" + e.getMessage());
apiInteractionManager.save(new ApiInteraction(new Date(), getInventoryDids(), paramStr, e.getMessage(), ApiInteraction_Status.ERROE));
throw new ValidateException("smf.nexim.getInventoryFaile", "获取did信息失败:[{0}] ", new String[]{e.getMessage()});
}
return null;
}
public boolean registerNewDid(Barcode barcode) {
Map<String, String> headerMap = new HashMap<>();
headerMap.put("fujiAccessToken", getAccessToken());
Map<String, Object> params = new HashMap<>(); Map<String, Object> params = new HashMap<>();
params.put("did",barcode.getBarcode()); params.put("did",barcode.getBarcode());
...@@ -122,12 +237,12 @@ public class NeximApi extends BaseSmfApiListener { ...@@ -122,12 +237,12 @@ public class NeximApi extends BaseSmfApiListener {
JSONObject resultObj = JSONObject.parseObject(result); JSONObject resultObj = JSONObject.parseObject(result);
Integer addedCount = resultObj.getInteger("addedCount"); Integer addedCount = resultObj.getInteger("addedCount");
if (addedCount != null && addedCount > 0){ if (addedCount != null && addedCount > 0){
apiInteractionManager.save(new ApiInteraction(new Date(),getAuthLogin(),paramStr,result,ApiInteraction_Status.OK)); apiInteractionManager.save(new ApiInteraction(new Date(),inventoryDids(),paramStr,result,ApiInteraction_Status.OK));
return true; return true;
} else { } else {
String details = resultObj.getString("details"); String details = resultObj.getString("details");
apiInteractionManager.save(new ApiInteraction(new Date(),getAuthLogin(),paramStr,result,ApiInteraction_Status.ERROE)); apiInteractionManager.save(new ApiInteraction(new Date(),inventoryDids(),paramStr,result,ApiInteraction_Status.ERROE));
throw new ValidateException("smfcore.registerdid.false",barcode.getBarcode()+"注册失败:"+details); throw new ValidateException("smfcore.registerdid.false","[{0}]注册did失败:[{1}]",new String[]{barcode.getBarcode(),details});
} }
} catch (ApiException e) { } catch (ApiException e) {
log.info("注册Fuji的did失败:",e); log.info("注册Fuji的did失败:",e);
...@@ -136,89 +251,6 @@ public class NeximApi extends BaseSmfApiListener { ...@@ -136,89 +251,6 @@ public class NeximApi extends BaseSmfApiListener {
return false; return false;
} }
public boolean inventoryHasDid(String barcode,String accessToken) {
Map<String, String> headerMap = new HashMap<>();
headerMap.put("fujiAccessToken", accessToken);
String search = "did == \""+barcode+"\"";
String orderBy = "did asc";
int pageToken = 0;
int pageSize = 200;
Map<String, Object> paramMap = new HashMap<>();
paramMap.put("pageToken", pageToken);
paramMap.put("pageSize", pageSize);
paramMap.put("search", search);
paramMap.put("orderBy", orderBy);
String paramStr = JSON.toJSONString(paramMap);
String result = "";
try {
result = HttpHelper.getParam(getInventoryDids(), headerMap, paramMap);
log.info(barcode + "获取Fuji的inventory/dids结果为:" + result);
JSONObject resultObj = JSONObject.parseObject(result);
JSONArray dataArray = resultObj.getJSONArray("datas");
if (dataArray != null && !dataArray.isEmpty()){
for (int i = 0; i < dataArray.size(); i++) {
JSONObject data = dataArray.getJSONObject(i);
if (barcode.equals(data.getString("did"))){
apiInteractionManager.save(new ApiInteraction(new Date(),getAuthLogin(),paramStr,result,ApiInteraction_Status.OK));
return true;
}
}
}
} catch (ApiException e) {
log.info(barcode + "获取Fuji的inventory/dids失败:", e.getMessage());
}
apiInteractionManager.save(new ApiInteraction(new Date(),getAuthLogin(),paramStr,result,ApiInteraction_Status.ERROE));
return false;
}
/**
* 获取登录的token
* @return
*/
public String getAccessToken() {
//默认写死
String authDateUrl = "2025-10-15 00:00:00";
Date authDate = DateUtil.toDate(authDateUrl, "yyyy-MM-dd HH:mm:ss");
if (System.currentTimeMillis() > authDate.getTime()){
throw new ValidateException("smfcore.auth.expire","授权已过期");
}
Map<String, Object> paramMap = new HashMap<>();
paramMap.put("userName", getAuthUserName());
paramMap.put("password", getAuthPassword());
String paramStr = JSON.toJSONString(paramMap);
log.info("获取Fuji的token参数为:" + paramStr);
String accessToken = "";
String result = "";
try {
result = HttpHelper.postJson(getAuthLogin(), paramMap);
log.info("获取Fuji的token结果为:" + result);
JSONObject resultObj = JSONObject.parseObject(result);
accessToken = resultObj.getString("accessToken");
} catch (Exception e) {
log.info("获取Fuji的token异常:", e);
accessToken = "";
}
String status = "";
if (StringUtils.isEmpty(accessToken)){
status = ApiInteraction_Status.ERROE;
}
apiInteractionManager.save(new ApiInteraction(new Date(),getAuthLogin(),paramStr,result,status));
if (StringUtils.isEmpty(accessToken)) {
throw new ValidateException("smfcore.accessToken.ng", "获取AccessToken失败");
}
return accessToken;
}
private String getAuthLogin(){ private String getAuthLogin(){
NeximConfig config = dataCache.getCache(NeximCacheConfig.NeximConfig_Cache_Name); NeximConfig config = dataCache.getCache(NeximCacheConfig.NeximConfig_Cache_Name);
if (config == null) { if (config == null) {
...@@ -267,4 +299,12 @@ public class NeximApi extends BaseSmfApiListener { ...@@ -267,4 +299,12 @@ public class NeximApi extends BaseSmfApiListener {
} }
return config.getOutputEtn(); return config.getOutputEtn();
} }
public boolean enableRegisterDid(){
NeximConfig config = dataCache.getCache(NeximCacheConfig.NeximConfig_Cache_Name);
if (config == null) {
config = new NeximConfig();
}
return config.isRegisterDid();
}
} }
package com.neotel.smfcore.custom.nexim.bean;
import lombok.Data;
@Data
public class DIdInfo {
// 唯一标识
private String did;
// 零件编号(空值)
private String partNumber;
// 零件条形码
private String partBarcode;
// 原始零件条形码
private String originalPartBarcode;
// 数量
private Integer quantity;
// 包装类型
private String packageType;
// 零件出库警告标识
private Integer partsoutWarning;
// 拼接警告标识
private Integer splicingWarning;
// 供应商名称
private String vendorName;
// 批次名称
private String lotName;
// 日期编码
private String dateCode;
// 区域(空值)
private String area;
// 存放位置
private String location;
// 机器(空值)
private String machine;
// 模块编号
private Integer module;
// 阶段编号
private Integer stageNo;
// 槽位编号
private Integer slotNo;
// 创建人
private String createdUser;
// 创建时间
private String createdDate;
// 更新人
private String updatedUser;
// 更新时间
private String updatedDate;
// 干燥状态(未开封)
private String dryStatus;
// 箱寿命(空值)
private String boxLife;
// 备注
private String memo;
// 照明等级(空值)
private String lightingClass;
// 照明限制
private Integer lightingLimit;
// 备注1(空值)
private String note1;
// 备注2(空值)
private String note2;
// 备注3(空值)
private String note3;
// 备注4(空值)
private String note4;
// 是否使用拼接
private Boolean useSplicing;
// 是否使用托盘包装
private Boolean useTrayPackage;
// 托盘堆叠数量
private Integer trayStackCount;
// 托盘拾取位置X坐标
private Integer trayPickupPositionX;
// 托盘拾取位置Y坐标
private Integer trayPickupPositionY;
// 托盘尺寸X
private Integer traySizeX;
// 托盘尺寸Y
private Integer traySizeY;
// floor寿命(空值)
private String floorLife;
}
\ No newline at end of file \ No newline at end of file
...@@ -13,5 +13,6 @@ public class NeximConfig { ...@@ -13,5 +13,6 @@ public class NeximConfig {
private String lastUpdateTime = ""; private String lastUpdateTime = "";
private String inputEto = ""; private String inputEto = "";
private String outputEtn = ""; private String outputEtn = "";
private boolean registerDid = false;
private int time = 10; private int time = 10;
} }
...@@ -2,6 +2,7 @@ package com.neotel.smfcore.custom.nexim.controller; ...@@ -2,6 +2,7 @@ package com.neotel.smfcore.custom.nexim.controller;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.neotel.smfcore.common.bean.ResultBean; import com.neotel.smfcore.common.bean.ResultBean;
import com.neotel.smfcore.common.exception.ValidateException;
import com.neotel.smfcore.common.utils.StringUtils; import com.neotel.smfcore.common.utils.StringUtils;
import com.neotel.smfcore.core.barcode.service.po.Barcode; import com.neotel.smfcore.core.barcode.service.po.Barcode;
import com.neotel.smfcore.core.barcode.utils.CodeResolve; import com.neotel.smfcore.core.barcode.utils.CodeResolve;
...@@ -10,6 +11,7 @@ import com.neotel.smfcore.core.order.LiteOrderCache; ...@@ -10,6 +11,7 @@ import com.neotel.smfcore.core.order.LiteOrderCache;
import com.neotel.smfcore.core.order.service.po.LiteOrder; import com.neotel.smfcore.core.order.service.po.LiteOrder;
import com.neotel.smfcore.core.order.service.po.LiteOrderItem; import com.neotel.smfcore.core.order.service.po.LiteOrderItem;
import com.neotel.smfcore.custom.nexim.NeximApi; import com.neotel.smfcore.custom.nexim.NeximApi;
import com.neotel.smfcore.custom.nexim.bean.DIdInfo;
import com.neotel.smfcore.custom.nexim.bean.NeximConfig; import com.neotel.smfcore.custom.nexim.bean.NeximConfig;
import com.neotel.smfcore.custom.nexim.bean.dto.NeximConfigDto; import com.neotel.smfcore.custom.nexim.bean.dto.NeximConfigDto;
import com.neotel.smfcore.custom.nexim.config.NeximCacheConfig; import com.neotel.smfcore.custom.nexim.config.NeximCacheConfig;
...@@ -63,6 +65,7 @@ public class NeximController { ...@@ -63,6 +65,7 @@ public class NeximController {
config.setTime(newConfig.getTime()); config.setTime(newConfig.getTime());
config.setUserName(newConfig.getUserName()); config.setUserName(newConfig.getUserName());
config.setPassword(newConfig.getPassword()); config.setPassword(newConfig.getPassword());
config.setRegisterDid(newConfig.isRegisterDid());
dataCache.updateCache(NeximCacheConfig.NeximConfig_Cache_Name, config); dataCache.updateCache(NeximCacheConfig.NeximConfig_Cache_Name, config);
return ResultBean.newOkResult(""); return ResultBean.newOkResult("");
} }
...@@ -88,7 +91,7 @@ public class NeximController { ...@@ -88,7 +91,7 @@ public class NeximController {
dto.setEtoUpdateDateStr(getUpdateDate(config.getInputEto())); dto.setEtoUpdateDateStr(getUpdateDate(config.getInputEto()));
dto.setUserName(config.getUserName()); dto.setUserName(config.getUserName());
dto.setPassword(config.getPassword()); dto.setPassword(config.getPassword());
dto.setRegisterDid(config.isRegisterDid());
return ResultBean.newOkResult(dto); return ResultBean.newOkResult(dto);
} }
...@@ -100,15 +103,21 @@ public class NeximController { ...@@ -100,15 +103,21 @@ public class NeximController {
if (StringUtils.isEmpty(code)) { if (StringUtils.isEmpty(code)) {
return ResultBean.newErrorResult(-1, "smfcore.valueCanotNull", "{0}不能为空", new String[]{"code"}); return ResultBean.newErrorResult(-1, "smfcore.valueCanotNull", "{0}不能为空", new String[]{"code"});
} }
//获取did信息
DIdInfo inventoryDid = neximApi.getInventoryDid(code);
if (inventoryDid != null){
return ResultBean.newOkResult("");
}
if (!neximApi.enableRegisterDid()){
throw new ValidateException("smf.nexim.getInventoryFaile","获取did信息失败:[{0}]",new String[]{""});
}
Barcode barcode = codeResolve.resolveCode(code); Barcode barcode = codeResolve.resolveCode(code);
if (barcode == null) { if (barcode == null) {
return ResultBean.newErrorResult(-1, "smfcore.error.barcode.invalid", "{0}不是有效的条码", new String[]{code}); return ResultBean.newErrorResult(-1, "smfcore.error.barcode.invalid", "{0}不是有效的条码", new String[]{code});
} }
boolean hasDid = neximApi.registerNewDid(barcode);
String accessToken = neximApi.getAccessToken(); if (!hasDid) {
boolean hasDid = neximApi.inventoryHasDid(barcode.getBarcode(), accessToken); return ResultBean.newErrorResult(-1,"","");
if (!hasDid){
neximApi.registerNewDid(barcode, accessToken);
} }
return ResultBean.newOkResult(""); return ResultBean.newOkResult("");
} }
......
...@@ -439,3 +439,5 @@ smfcore.auth.expire=\u6388\u6743\u5DF2\u8FC7\u671F ...@@ -439,3 +439,5 @@ smfcore.auth.expire=\u6388\u6743\u5DF2\u8FC7\u671F
smfcore.order.slotNum=\u7AD9\u4F4D\u7F16\u53F7 smfcore.order.slotNum=\u7AD9\u4F4D\u7F16\u53F7
smfcore.reelPosMove.paramerror=\u53C2\u6570\u4E0D\u5B8C\u6574 smfcore.reelPosMove.paramerror=\u53C2\u6570\u4E0D\u5B8C\u6574
smfcore.reelPosMove.posIsNull=\u5E93\u4F4D[{1}]\u4E3A\u7A7A smfcore.reelPosMove.posIsNull=\u5E93\u4F4D[{1}]\u4E3A\u7A7A
smf.nexim.getInventoryFaile=\u83B7\u53D6did\u4FE1\u606F\u5931\u8D25:[{0}]
smfcore.registerdid.false=[{0}]\u6CE8\u518Cdid\u5931\u8D25:[{1}]
...@@ -427,3 +427,5 @@ smfcore.virtual.quantityError=Die zu entnehmende Menge sollte [{0}] betragen ...@@ -427,3 +427,5 @@ smfcore.virtual.quantityError=Die zu entnehmende Menge sollte [{0}] betragen
smfcode.virtual.enter=Bitte scannen Sie den Barcode oder geben Sie ihn ein und best\u00E4tigen Sie mit Enter smfcode.virtual.enter=Bitte scannen Sie den Barcode oder geben Sie ihn ein und best\u00E4tigen Sie mit Enter
smfcore.auth.expire=Die Autorisierung ist abgelaufen smfcore.auth.expire=Die Autorisierung ist abgelaufen
smfcore.order.slotNum=Standnummer smfcore.order.slotNum=Standnummer
smf.nexim.getInventoryFaile=Fehler beim Abrufen der did-Information: [{0}]
smfcore.registerdid.false=[{0}] Registrierung von did fehlgeschlagen:[{1}]
\ No newline at end of file \ No newline at end of file
...@@ -428,3 +428,5 @@ smfcore.virtual.quantityError=The quantity to be removed should be [{0}] ...@@ -428,3 +428,5 @@ smfcore.virtual.quantityError=The quantity to be removed should be [{0}]
smfcode.virtual.enter=Please scan or enter the barcode, then press Enter smfcode.virtual.enter=Please scan or enter the barcode, then press Enter
smfcore.auth.expire=Authorization has expired smfcore.auth.expire=Authorization has expired
smfcore.order.slotNum=Station Number smfcore.order.slotNum=Station Number
smf.nexim.getInventoryFaile=Failed to retrieve did information: [{0}]
smfcore.registerdid.false=[{0}] Failed to register did:[{1}]
\ No newline at end of file \ No newline at end of file
...@@ -427,3 +427,5 @@ smfcore.virtual.quantityError=La quantit\u00E9 \u00E0 retirer doit \u00EAtre [{0 ...@@ -427,3 +427,5 @@ smfcore.virtual.quantityError=La quantit\u00E9 \u00E0 retirer doit \u00EAtre [{0
smfcode.virtual.enter=Veuillez scanner ou saisir le code-barres, puis appuyer sur Entr\u00E9e smfcode.virtual.enter=Veuillez scanner ou saisir le code-barres, puis appuyer sur Entr\u00E9e
smfcore.auth.expire=L'autorisation a expir\u00E9 smfcore.auth.expire=L'autorisation a expir\u00E9
smfcore.order.slotNum=num\u00E9ro de position smfcore.order.slotNum=num\u00E9ro de position
smf.nexim.getInventoryFaile=\u00C9chec de r\u00E9cup\u00E9ration des informations did:[{0}]
smfcore.registerdid.false=[{0}] \u00C9chec de l'enregistrement de did:[{1}]
\ No newline at end of file \ No newline at end of file
...@@ -422,5 +422,7 @@ smfcore.equipment.view.ncgroup=Neo Counter ...@@ -422,5 +422,7 @@ smfcore.equipment.view.ncgroup=Neo Counter
smfcore.virtual.boxInPos=[{0}] \u306F\u65E2\u306B\u30ED\u30B1\u30FC\u30B7\u30E7\u30F3 [{1}] \u306B\u3042\u308A\u307E\u3059\u3002\u5148\u306B\u53D6\u308A\u51FA\u3057\u3066\u304F\u3060\u3055\u3044 smfcore.virtual.boxInPos=[{0}] \u306F\u65E2\u306B\u30ED\u30B1\u30FC\u30B7\u30E7\u30F3 [{1}] \u306B\u3042\u308A\u307E\u3059\u3002\u5148\u306B\u53D6\u308A\u51FA\u3057\u3066\u304F\u3060\u3055\u3044
smfcore.virtual.quantityError=\u53D6\u308A\u51FA\u3057\u6570\u91CF\u306F[{0}]\u3067\u3042\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059 smfcore.virtual.quantityError=\u53D6\u308A\u51FA\u3057\u6570\u91CF\u306F[{0}]\u3067\u3042\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059
smfcode.virtual.enter=\u30D0\u30FC\u30B3\u30FC\u30C9\u3092\u30B9\u30AD\u30E3\u30F3\u3001\u307E\u305F\u306F\u5165\u529B\u5F8C\u3001Enter\u30AD\u30FC\u3092\u62BC\u3057\u3066\u304F\u3060\u3055\u3044 smfcode.virtual.enter=\u30D0\u30FC\u30B3\u30FC\u30C9\u3092\u30B9\u30AD\u30E3\u30F3\u3001\u307E\u305F\u306F\u5165\u529B\u5F8C\u3001Enter\u30AD\u30FC\u3092\u62BC\u3057\u3066\u304F\u3060\u3055\u3044
smfcore.auth.expire = \u8A8D\u8A3C\u304C\u671F\u9650\u5207\u308C\u3067\u3059
smfcore.order.slotNum = \u30B9\u30BF\u30F3\u30C9\u756A\u53F7
\ No newline at end of file \ No newline at end of file
smfcore.auth.expire=\u8A8D\u8A3C\u304C\u671F\u9650\u5207\u308C\u3067\u3059
smfcore.order.slotNum=\u30B9\u30BF\u30F3\u30C9\u756A\u53F7
smf.nexim.getInventoryFaile=did \u60C5\u5831\u306E\u53D6\u5F97\u306B\u5931\u6557\u3057\u307E\u3057\u305F: [{0}]
smfcore.registerdid.false=[{0}] did \u306E\u767B\u9332\u306B\u5931\u6557\u3057\u307E\u3057\u305F:[{1}]
\ No newline at end of file \ No newline at end of file
...@@ -424,3 +424,5 @@ smfcore.virtual.quantityError=\u53D6\u51FA\u6570\u91CF\u5E94\u4E3A[{0}] ...@@ -424,3 +424,5 @@ smfcore.virtual.quantityError=\u53D6\u51FA\u6570\u91CF\u5E94\u4E3A[{0}]
smfcode.virtual.enter=\u8BF7\u626B\u63CF\u6216\u8F93\u5165\u6761\u7801\u540E\u6309\u56DE\u8F66\u786E\u8BA4 smfcode.virtual.enter=\u8BF7\u626B\u63CF\u6216\u8F93\u5165\u6761\u7801\u540E\u6309\u56DE\u8F66\u786E\u8BA4
smfcore.auth.expire=\u6388\u6743\u5DF2\u8FC7\u671F smfcore.auth.expire=\u6388\u6743\u5DF2\u8FC7\u671F
smfcore.order.slotNum=\u7AD9\u4F4D\u7F16\u53F7 smfcore.order.slotNum=\u7AD9\u4F4D\u7F16\u53F7
smf.nexim.getInventoryFaile=\u83B7\u53D6did\u4FE1\u606F\u5931\u8D25:[{0}]
smfcore.registerdid.false=[{0}]\u6CE8\u518Cdid\u5931\u8D25:[{1}]
\ No newline at end of file \ No newline at end of file
...@@ -424,3 +424,5 @@ smfcore.virtual.quantityError=\u53D6\u51FA\u6578\u91CF\u61C9\u70BA[{0}] ...@@ -424,3 +424,5 @@ smfcore.virtual.quantityError=\u53D6\u51FA\u6578\u91CF\u61C9\u70BA[{0}]
smfcode.virtual.enter=\u8ACB\u6383\u63CF\u6216\u8F38\u5165\u689D\u78BC\u5F8C\u6309\u56DE\u8ECA\u78BA\u8A8D smfcode.virtual.enter=\u8ACB\u6383\u63CF\u6216\u8F38\u5165\u689D\u78BC\u5F8C\u6309\u56DE\u8ECA\u78BA\u8A8D
smfcore.auth.expire = \u6388\u6B0A\u5DF2\u904E\u671F smfcore.auth.expire = \u6388\u6B0A\u5DF2\u904E\u671F
smfcore.order.slotNum = \u7AD9\u4F4D\u7DE8\u865F smfcore.order.slotNum = \u7AD9\u4F4D\u7DE8\u865F
smf.nexim.getInventoryFaile=\u53D6\u5F97 did \u8CC7\u8A0A\u5931\u6557:[{0}]
smfcore.registerdid.false=[{0}]\u8A3B\u518Adid\u5931\u6557:[{1}]
\ No newline at end of file \ No newline at end of file
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!