Commit b5bbc12e sunke

Merge remote-tracking branch 'origin/master'

2 个父辈 c56351d1 572aa503
......@@ -83,10 +83,10 @@ public class GlobalExceptionHandler {
@ExceptionHandler(value = ValidateException.class)
public ResponseEntity<ApiError> validateException(HttpServletRequest servlet,ValidateException e){
String language= servlet.getLocale().getLanguage();
// String language= servlet.getLocale().getLanguage();
// 打印堆栈信息
//log.error(ThrowableUtil.getStackTrace(e));
String targetMsg=messageUtils.getText(e.getMsgKey(),e.getMsgParam(),new Locale(language) ,e.getDefaultMsg());
String targetMsg=messageUtils.getText(e.getMsgKey(),e.getMsgParam(),servlet.getLocale() ,e.getDefaultMsg());
return buildResponseEntity(ApiError.error(e.getStatus(),targetMsg));
}
......
......@@ -3,6 +3,7 @@ package com.neotel.smfcore.core.device.bean;
import com.google.common.base.Strings;
import com.neotel.smfcore.core.device.enums.BOX_STATUS;
import com.neotel.smfcore.core.system.service.po.AlarmInfo;
import lombok.ToString;
import java.util.*;
......@@ -14,6 +15,7 @@ import java.util.*;
3,IO报警,信号超时,io电器定义(电器定义),
4,电钢报警,1=上下电钢,
*/
@ToString
public class StatusBean {
/// <summary>
......
......@@ -465,23 +465,24 @@ public class BaseDeviceHandler implements IDeviceHandler {
}
protected StatusBean handleInOutFinished(StatusBean statusBean) {
// Map<Integer, BoxStatusBean> statusOfBoxes = statusBean.getBoxStatus();
// if (statusOfBoxes != null) {
// for (BoxStatusBean boxStatus : statusOfBoxes.values()) {
// try {
// //出库入库完成处理
// int status = boxStatus.getStatus();
// String posName = boxStatus.getPosId();
// if (!Strings.isNullOrEmpty(posName)) {//客户端发一次完成之后,会发空的 posName,不需要处理
// if (BOX_STATUS.IN_FINISHED == status) {//入仓完成
// finishedPutIn(statusBean.getCid(),posName);
// } else if (BOX_STATUS.IN_FAILED == status) {//入库失败
// //暂不处理
// } else if (BOX_STATUS.OUT_FINISHED == status) {//出仓完成
// finishedOutPos(statusBean.getCid(),posName);
// } else if (BOX_STATUS.OUT_END == status) {//出库完成(放到仓门口
// //暂不处理
// } else if (BOX_STATUS.REWARM_TAKING_END == status) {
Map<String, BoxStatusBean> statusOfBoxes = statusBean.getBoxStatus();
if (statusOfBoxes != null) {
for (BoxStatusBean boxStatus : statusOfBoxes.values()) {
try {
//出库入库完成处理
int status = boxStatus.getStatus();
String posName = boxStatus.getPosId();
if (!Strings.isNullOrEmpty(posName)) {//客户端发一次完成之后,会发空的 posName,不需要处理
if (BOX_STATUS.IN_FINISHED == status) {//入仓完成
finishedPutIn(statusBean.getCid(),posName);
} else if (BOX_STATUS.IN_FAILED == status) {//入库失败
//暂不处理
} else if (BOX_STATUS.OUT_FINISHED == status) {//出仓完成
finishedOutPos(statusBean.getCid(),posName);
} else if (BOX_STATUS.OUT_END == status) {//出库完成(放到仓门口
//暂不处理
}
// else if (BOX_STATUS.REWARM_TAKING_END == status) {
// //回温取料完成, 将库位清空
// DataLog takingTask = taskService.findExecutingTask(statusBean.getCid(), boxStatus.getPosId());
// if (takingTask == null) {
......@@ -545,12 +546,12 @@ public class BaseDeviceHandler implements IDeviceHandler {
// DataLog mixTask = findExecutingTask(statusBean.getCid(), boxStatus.getPosId());
// mixEnd(mixTask);
// }
// }
// } catch (ValidateException e) {
// log.error("更新状态时出错" + e.getMessage());
// }
// }
// }
}
} catch (ValidateException e) {
log.error("更新状态时出错" + e.getMessage());
}
}
}
return statusBean;
}
......@@ -794,9 +795,8 @@ public class BaseDeviceHandler implements IDeviceHandler {
}
@Override
public DeviceType getDeviceType() {
return DeviceType.AUTO;
return DeviceType.DEFAULT;
}
}
package com.neotel.smfcore.core.device.handler.impl;
import com.neotel.smfcore.core.device.api.IOpAuthApi;
import com.neotel.smfcore.core.device.bean.StatusBean;
import com.neotel.smfcore.core.device.enums.OP;
import com.neotel.smfcore.core.storage.enums.DeviceType;
import com.neotel.smfcore.core.storage.service.po.Storage;
import lombok.ToString;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import javax.servlet.http.HttpServletRequest;
import java.util.List;
@Service
@Slf4j
public class SisoBoxHandler extends BaseDeviceHandler {
public SisoBoxHandler(List<IOpAuthApi> apiList) {
super(apiList);
}
@Override
public StatusBean handleClientRequest(StatusBean statusBean, HttpServletRequest request) {
String cid = statusBean.getCid();
Storage storage = dataCache.getStorage(cid);
if (storage == null) {
log.error("料仓cid: [" + cid + "]不存在");
return null;
}
handleMsg(statusBean);
statusBean = saveAlarmAndHumidity(statusBean);
statusBean = handleInOutFinished(statusBean);
StatusBean humidityResult = handleHumidity(statusBean);
if (humidityResult != null) {
return humidityResult;
}
if (statusBean.getOp() == OP.PUT_IN) {
log.debug("入库:" + statusBean.toString());
statusBean = putInLine(storage, statusBean);
} else {
//查看是否有要出库的操作
statusBean =taskService.checkOut(storage, statusBean);
}
return statusBean;
}
@Override
public DeviceType getDeviceType() {
return DeviceType.AUTO;
}
}
......@@ -88,8 +88,12 @@ public enum DeviceType {
/**
* 13 SMD-DUO(DUO料仓)
*/
SMD_DUO("storage.type.smdDuo")
SMD_DUO("storage.type.smdDuo"),
/**
* 14 (默认料仓)
*/
DEFAULT("storage.type.default")
;
private String key;
......
......@@ -6,7 +6,9 @@ import com.google.common.collect.Maps;
import com.neotel.smfcore.common.exception.ValidateException;
import com.neotel.smfcore.common.utils.SecurityUtils;
import com.neotel.smfcore.common.utils.StorageConstants;
import com.neotel.smfcore.core.barcode.service.manager.IBarcodeManager;
import com.neotel.smfcore.core.barcode.service.po.Barcode;
import com.neotel.smfcore.core.device.bean.StatusBean;
import com.neotel.smfcore.core.device.enums.OP;
import com.neotel.smfcore.core.device.enums.OP_STATUS;
import com.neotel.smfcore.core.storage.service.po.Storage;
......@@ -29,6 +31,8 @@ public class TaskService {
@Autowired
protected IDataLogDao dataLogDao;
@Autowired
protected IBarcodeManager barcodeManager;
@Autowired
private List<ITaskListener> taskListenerList = new ArrayList<>();
......@@ -249,5 +253,131 @@ public class TaskService {
}
return null;
}
/**
* 是否有正在执行的任务
*
* @return
*/
private boolean hasExecutingTask(String cid, int type) {
for (DataLog task : taskMap.values()) {
if (type == task.getType() && task.getCid().equals(cid)) {
return true;
}
}
return false;
}
/**
* 为 box 分配出库任务
*/
private DataLog findCheckoutBoxTask(Storage storage) {
String cid=storage.getCid();
int checkoutSize = 0;
Collection<DataLog> allTasks = taskMap.values();
for (DataLog task : allTasks) {
if (!task.isCheckOutTask()) {
continue;
}
//如果该BOX在已执行任务中已经有入库任务,不再分配直接返回
if (cid.equals(task.getCid()) && task.isExecuting()) {
if (task.isPutInTask()) {
log.error("cid[" + cid + "]已有入库任务,不可再分配出库任务");
return null;
} else if (task.needReSendToClient() && task.isCheckOutTask()) {//超过30秒仍未完成的出库再次发送到客户端
log.error("cid[" + cid + "]的出库任务[" + task.getPosName() + "]超过60秒仍未完成,重新发送到客户端!");
task.setUpdateDate(new Date());
return task;
}
//只能同时有两个正在执行的出库任务,如果超过两个不再分配了
if (task.isCheckOutTask()) {
checkoutSize++;
if (checkoutSize >= 2) {
//log.error("cid["+cid + "]的BOX["+ boxId+"]的出库任务已经超过2个,不再分配!");
return null;
}
}
}
}
//指定紧急单盘出库的优先出库,否则按批量出库处理
DataLog singleOutTask = null;
DataLog outTask = null;
for (DataLog task : allTasks) {//优先分配单盘任务和没有工单的任务
if (cid.equals(task.getCid()) && task.isCheckOutTask() && task.isWait()) {
String posName = task.getPosName();
if (!Strings.isNullOrEmpty(posName)) {//有库位号
if (task.isSingleOut()) {
//单盘优先出库
if (singleOutTask == null || task.getCreateDate().before(singleOutTask.getCreateDate())) {
singleOutTask = task;
}
} else {
if (outTask == null || task.getCreateDate().before(outTask.getCreateDate())) {
outTask = task;
}
}
}
}
}
if (singleOutTask != null) {
log.info("分配优先(单盘或无工单)出库任务" + singleOutTask.getBarcode() + "[" + singleOutTask.getPosName() + "]到 " + cid);
return singleOutTask;
}
return outTask;
}
/**
* 出库处理
*/
public StatusBean checkOut(Storage storage,StatusBean statusBean ) {
try {
String cid = storage.getCid();
//有入库任务的料仓不分配出库任务
if (!hasExecutingTask(cid, OP.PUT_IN)) {
DataLog task = findCheckoutBoxTask(storage);
if (task != null) {
//从等待列表中删除,加入到执行列表中
log.info("分配出库任务" + task.getBarcode() + "[" + task.getPosName() + "]到 " + cid);
task.setStatus(OP_STATUS.EXECUTING.name());
taskMap.put(task.getId(), task);
task = dataLogDao.save(task);
statusBean.setOp(OP.CHECKOUT);
String posName = task.getPosName();
Barcode codeObj = barcodeManager.findByBarcode(task.getBarcode());
int plateW = 0;
int plateH = 0;
//是否是单盘出库,批量上下料使用
boolean isSingleOut = task.isSingleOut();
if (codeObj != null) {
plateW = codeObj.getPlateSize();
plateH = codeObj.getHeight();
if (codeObj.isOnlySingleOut()) {
log.info(codeObj.getBarcode() + " 只能单盘出库");
isSingleOut = true;
}
} else {
log.warn("出库无料仓位" + storage.getName() + "[" + posName + "]");
}
statusBean.addPosInfo(task.getBarcode(), posName, plateW, plateH, isSingleOut);
log.info("出库" + storage.getName() + "[" + posName + "]物料[" + task.getBarcode() + "]" + isSingleOut + "发送到客户端" + cid);
}
}
String posId = statusBean.getData().get("posId");
if (!Strings.isNullOrEmpty(posId)) {
log.info("SEQ:" + statusBean.getSeq() + "出库库位信息:[" + posId + "]发送到客户端");
}
} catch (Exception e) {
log.error("出库出错", e);
}
return statusBean;
}
}
smfcode.valueCanotNull={0}\u4E0D\u80FD\u4E3A\u7A7A
smfcode.feleFormatError=\u6587\u4EF6\u683C\u5F0F\u9519\u8BEF\uFF01, \u4EC5\u652F\u6301{0}\u683C\u5F0F
smfcode.valueAlreadyExist={0}[{1}]\u5DF2\u5B58\u5728
smfcode.valueNotExist={0}[{1}]\u4E0D\u5B58\u5728
smfcode.fileToLong=\u6587\u4EF6\u8D85\u51FA\u89C4\u5B9A\u5927\u5C0F
smfcode.fileError=\u6587\u4EF6\u89E3\u6790\u5931\u8D25
smfcode.valueNotFind=\u672A\u627E\u5230{0}[{1}]
smfcode.humidityValueError=\u6E29\u5EA6\u8303\u56F4\u6570\u636E\u9519\u8BEF
smfcode.humidityShowValueError=\u6E29\u5EA6\u663E\u793A\u8303\u56F4\u6570\u636E\u9519\u8BEF
smfcode.temperatureValueError=\u6E7F\u5EA6\u8303\u56F4\u6570\u636E\u9519\u8BEF
smfcode.temperatureShowValueError=\u6E7F\u5EA6\u663E\u793A\u8303\u56F4\u6570\u636E\u9519\u8BEF
smfcode.notActivated=\u8D26\u53F7\u672A\u6FC0\u6D3B
smfcode.userInfoError=\u7528\u6237\u4FE1\u606F\u4E0D\u5B8C\u6574
smfcode.noaccess=\u65E0\u6743\u9650\u4FEE\u6539\u6B64\u89D2\u8272\u7684\u83DC\u5355
smfcode.notSelRole=\u8BF7\u8981\u4FEE\u6539\u7684\u9009\u62E9\u89D2\u8272
smfcode.posIsused=\u6599\u4ED3[{0}]\u7684\u5E93\u4F4D[{1}}]\u6709\u6599[{2}],\u5220\u9664\u5931\u8D25
smfcode.thePosIsused= \u5E93\u4F4D[{0}]\u6709\u6599[{1}],\u4E0D\u80FD\u5220\u9664
smfcode.groupWithStorage=\u7EC4[{0}]\u5DF2\u548C\u8BBE\u5907\u5173\u8054
smfcode.groupWithUser=\u7EC4[{0}]\u5DF2\u548C\u7528\u6237\u5173\u8054
smfcode.canotDelSelf=\u5220\u9664\u7528\u6237\uFF1A\u4E0D\u80FD\u5220\u9664\u81EA\u5DF1
smfcode.canotDelUser=\u5220\u9664\u7528\u6237\uFF1A\u6B64\u7528\u6237\u4E0D\u80FD\u5220\u9664
smfcode.oldPwdError=\u4FEE\u6539\u5931\u8D25\uFF0C\u65E7\u5BC6\u7801\u9519\u8BEF
smfcode.newPwdError=\u65B0\u5BC6\u7801\u4E0D\u80FD\u4E0E\u65E7\u5BC6\u7801\u76F8\u540C
smfcode.pwdError=\u4FEE\u6539\u90AE\u7BB1\u5931\u8D25\uFF0C\u5BC6\u7801\u9519\u8BEF
smfcode.hasNoAccess=\u65E0\u6743\u9650\u4FEE\u6539\u6B64\u7528\u6237\u4FE1\u606F
smfcode.noAccessUpdate=\u6CA1\u6709\u5220\u9664\u83DC\u5355\u7684\u6743\u9650
smfcode.roleCannotDel=\u89D2\u8272[{0}]\u6709[{1}]\u4E2A\u7528\u6237\u5173\u8054\u6539\u89D2\u8272,\u4E0D\u80FD\u5220\u9664
smfcore.notFindPos=\u672A\u627E\u5230\u9501\u5B9A\u5E93\u4F4D
smfcore.error.barcode.empty=\u672A\u626B\u5230\u6761\u7801
smfcore.error.barcode.many=\u627E\u5230\u591A\u4E2A\u6709\u6548\u6761\u7801,\u65E0\u6CD5\u5165\u5E93
smfcore.error.barcode.expired=\u7269\u6599\u5DF2\u8FC7\u671F,\u65E0\u6CD5\u5165\u5E93.
smfcore.allBoxView.noReel=\u5E93\u4F4D\u4E2D\u65E0\u7269\u6599
smfcode.error.barcode.many=\u627E\u5230\u591A\u4E2A\u6709\u6548\u7684\u6761\u7801
smfcode.error.barcode.noValidCode=\u65E0\u6548\u7684\u6761\u7801
smfcore.error.barcode.noValidCode={0}\u4E0D\u662F\u6709\u6548\u7684\u6761\u7801
smfcode.error.barcode.executing=\u6761\u7801[{0}}]\u4EFB\u52A1\u6B63\u5728\u6267\u884C
smfcode.error.pos.notExist=\u5E93\u4F4D[{0}]\u4E0D\u5B58\u5728,\u65E0\u6CD5\u5165\u5E93
smfcode.error.pos.wrong=\u5E93\u4F4D[{0}]\u4E0E\u6599\u4ED3[{1}}]\u4E0D\u5339\u914D,\u65E0\u6CD5\u5165\u5E93
smfcode.error.pos.hasReel=\u5E93\u4F4D[{0}]\u4E2D\u5DF2\u6709\u7269\u6599,\u65E0\u6CD5\u5165\u5E93
smfcode.error.pos.sizeNotMatch=\u6599\u76D8\u5C3A\u5BF8[{0}}]\u4E0E\u5E93\u4F4D{1}\u5C3A\u5BF8[{2}]\u4E0D\u7B26,\u65E0\u6CD5\u5165\u5E93
smfcode.error.storage.offline=\u6599\u4ED3[{0}]\u79BB\u7EBF
smfcode.error.barcode.invalid=\u6761\u7801\u65E0\u6548
smfcode.error.barcode.wrongSize=\u5C3A\u5BF8[{0}]\u4E0D\u7B26
smfcode.error.barcode.wrongQty=\u6761\u7801[{0}]\u5BF9\u5E94\u7684\u6570\u91CF<=0\u4E3A: {1}
smfcode.error.barcode.taskNotEnd=\u6599\u76D8[{0}]\u7684\u64CD\u4F5C\u672A\u5B8C\u6210,\u65E0\u6CD5\u6267\u884C\u5165\u5E93\u64CD\u4F5C
smfcode.error.columnNotExist=\u5FC5\u987B\u5305\u542B[{0}\u5217
smfcore.storage.error.notExist=\u672A\u627E\u5230\u6599\u4ED3{0}
smfcode.error.barcode.inQueue=\u4E8C\u7EF4\u7801[{0}]\u5DF2\u5728\u64CD\u4F5C\u961F\u5217\u4E2D\uFF0C\u64CD\u4F5C\u5931\u8D25
smfcode.error.pos.inQueue=\u4F4D\u7F6E:[{0}}]\u5DF2\u5728\u64CD\u4F5C\u961F\u5217\u4E2D,\u64CD\u4F5C\u5931\u8D25
smfcode.columnNotExist=\u5FC5\u987B\u5305\u542B[{0}\u5217
smfcore.conotUpdate=\u7528\u6237\u540Dadmin\u4E0D\u80FD\u4FEE\u6539
smfcore.unfinished=\u6761\u7801[{0}]\u7684\u4EFB\u52A1\u8FD8\u672A\u7ED3\u675F
smfcode.valueCanotNull={0}\u306F\u7A7A\u3067\u306F\u306A\u3044
smfcode.feleFormatError=\u30D5\u30A1\u30A4\u30EB\u30D5\u30A9\u30FC\u30DE\u30C3\u30C8\u30A8\u30E9\u30FC\u3067\u3059 {0}\u5F62\u5F0F\u306E\u307F\u30B5\u30DD\u30FC\u30C8\u3057\u3066\u3044\u307E\u3059
smfcode.valueAlreadyExist={0}[{1}] \u65E2\u306B\u5B58\u5728\u3059\u308B
smfcode.valueNotExist={0}[{1}]\u304C\u5B58\u5728\u3057\u307E\u305B\u3093
smfcode.fileToLong=\u30D5\u30A1\u30A4\u30EB\u8D85\u904E\u30B5\u30A4\u30BA
smfcode.fileError=\u30D5\u30A1\u30A4\u30EB\u306E\u30D1\u30FC\u30B7\u30F3\u30B0\u306B\u5931\u6557\u3057\u307E\u3057\u305F
smfcode.valueNotFind=\u898B\u3064\u304B\u308A\u307E\u305B\u3093\u3067\u3057\u305F{0}[{1}]
smfcode.hudidityValueError=\u6E29\u5EA6\u7BC4\u56F2\u30C7\u30FC\u30BF\u30A8\u30E9\u30FC
smfcode.hudidityShowValueError=\u6E29\u5EA6\u8868\u793A\u7BC4\u56F2\u30C7\u30FC\u30BF\u30A8\u30E9\u30FC
smfcode.temperatureValueError=\u6E7F\u5EA6\u7BC4\u56F2\u30C7\u30FC\u30BF\u30A8\u30E9\u30FC
smfcode.temperatureShowValueError=\u6E7F\u5EA6\u306E\u8868\u793A\u7BC4\u56F2\u30C7\u30FC\u30BF\u30A8\u30E9\u30FC
smfcode.notActivated=\u30A2\u30AB\u30A6\u30F3\u30C8\u304C\u6709\u52B9\u306B\u306A\u3063\u3066\u3044\u306A\u3044
smfcode.userInfoError=\u30E6\u30FC\u30B6\u30FC\u60C5\u5831\u306E\u4E0D\u5099
smfcode.noaccess=\u3053\u306E\u30ED\u30FC\u30EB\u306E\u30E1\u30CB\u30E5\u30FC\u3092\u5909\u66F4\u3059\u308B\u6A29\u9650\u304C\u306A\u3044
smfcode.notSelRole=\u5909\u66F4\u3059\u308B\u5F79\u5272\u3092\u9078\u629E\u3057\u3066\u304F\u3060\u3055\u3044
smfcode.posIsused=\u30D3\u30F3[{0}]\u306B\u306F\u30D3\u30F3[{1}}][{2}]\u306E\u6750\u6599\u304C\u3042\u308A\u307E\u3059\u304C\u3001\u524A\u9664\u306B\u5931\u6557\u3057\u307E\u3057\u305F
smfcode.thePosIsused= \u30E9\u30A4\u30D6\u30E9\u30EA\u306E\u30D3\u30C3\u30C8[{0}]\u306B\u8CC7\u6599[{1}]\u304C\u3042\u308A\u3001\u524A\u9664\u3067\u304D\u306A\u3044
smfcode.groupWithStorage=\u30B0\u30EB\u30FC\u30D7[{0}]\u304C\u30C7\u30D0\u30A4\u30B9\u306B\u95A2\u9023\u4ED8\u3051\u3089\u308C\u3066\u3044\u308B
smfcode.groupWithUser=\u30B0\u30EB\u30FC\u30D7[{0}]\u304C\u30E6\u30FC\u30B6\u30FC\u306B\u95A2\u9023\u4ED8\u3051\u3089\u308C\u3066\u3044\u308B
smfcode.canotDelSelf=\u81EA\u5206\u3092\u524A\u9664\u3067\u304D\u306A\u3044
smfcode.canotDelUser=\u3053\u306E\u30E6\u30FC\u30B6\u30FC\u306F\u524A\u9664\u3067\u304D\u307E\u305B\u3093
smfcode.oldPwdError=\u5909\u66F4\u5931\u6557\u3001\u53E4\u3044\u30D1\u30B9\u30EF\u30FC\u30C9\u30A8\u30E9\u30FC
smfcode.newPwdError=\u65B0\u3057\u3044\u30D1\u30B9\u30EF\u30FC\u30C9\u306F\u53E4\u3044\u30D1\u30B9\u30EF\u30FC\u30C9\u3068\u540C\u3058\u3067\u3042\u3063\u3066\u306F\u306A\u3089\u306A\u3044
smfcode.pwdError=\u30E1\u30FC\u30EB\u30A2\u30C9\u30EC\u30B9\u306E\u5909\u66F4\u306B\u5931\u6557\u3057\u305F\u3001\u30D1\u30B9\u30EF\u30FC\u30C9\u304C\u9055\u3046
smfcode.hasNoAccess=\u3053\u306E\u30E6\u30FC\u30B6\u30FC\u60C5\u5831\u3092\u5909\u66F4\u3059\u308B\u6A29\u9650\u304C\u306A\u3044
smfcode.noAccessUpdate=\u30E1\u30CB\u30E5\u30FC\u3092\u524A\u9664\u3059\u308B\u6A29\u9650\u304C\u306A\u3044
smfcode.roleCannotDel=\u30ED\u30FC\u30EB[{0}]\u306B\u306F[{1}]\u4EBA\u306E\u30E6\u30FC\u30B6\u30FC\u304C\u95A2\u9023\u4ED8\u3051\u3089\u308C\u3066\u304A\u308A\u3001\u524A\u9664\u3059\u308B\u3053\u3068\u306F\u3067\u304D\u307E\u305B\u3093
smfcore.notFindPos=\u30ED\u30C3\u30AF\u3055\u308C\u305F\u30B9\u30C8\u30EC\u30FC\u30B8\u30B9\u30DA\u30FC\u30B9\u304C\u898B\u3064\u304B\u3089\u306A\u3044
smfcore.error.barcode.empty=\u30D0\u30FC\u30B3\u30FC\u30C9\u304C\u30B9\u30AD\u30E3\u30F3\u3055\u308C\u306A\u3044
smfcore.error.barcode.many=\u8907\u6570\u306E\u6709\u52B9\u306A\u30D0\u30FC\u30B3\u30FC\u30C9\u304C\u898B\u3064\u304B\u308A\u307E\u3057\u305F\u304C\u3001\u5728\u5EAB\u306F\u3042\u308A\u307E\u305B\u3093
smfcore.error.barcode.expired=\u6750\u6599\u304C\u53E4\u304F\u3066\u5728\u5EAB\u304C\u306A\u3044
smfcore.allBoxView.noReel=\u4FDD\u7BA1\u4E2D\u306E\u7D20\u6750\u304C\u306A\u3044
smfcode.error.barcode.many=\u8907\u6570\u306E\u6709\u52B9\u306A\u30D0\u30FC\u30B3\u30FC\u30C9\u306E\u691C\u7D22
smfcode.error.barcode.noValidCode=\u7121\u52B9\u306A\u30D0\u30FC\u30B3\u30FC\u30C9
smfcore.error.barcode.noValidCode={0}\u306F\u6709\u52B9\u306A\u30D0\u30FC\u30B3\u30FC\u30C9\u3067\u306F\u3042\u308A\u307E\u305B\u3093
smfcode.error.barcode.executing=\u30D0\u30FC\u30B3\u30FC\u30C9 [{0}}] \u30BF\u30B9\u30AF\u304C\u5B9F\u884C\u3055\u308C\u3066\u3044\u307E\u3059
smfcode.error.pos.notExist=[{0}]\u306E\u30DD\u30B8\u30B7\u30E7\u30F3\u304C\u5B58\u5728\u3057\u306A\u3044\u305F\u3081\u3001\u5165\u529B\u3067\u304D\u307E\u305B\u3093
smfcode.error.pos.copse=\u30D9\u30A4[{0}]\u306F\u30D3\u30F3[{1}]\u3068\u4E00\u81F4\u3057\u306A\u3044\u305F\u3081\u3001\u30B9\u30C8\u30C3\u30AF\u3067\u304D\u307E\u305B\u3093
smfcode.error.pos.hasReel=\u6750\u6599\u306F\u65E2\u306B\u30D3\u30F3[{0}]\u306B\u5165\u3063\u3066\u304A\u308A\u3001\u5165\u529B\u3067\u304D\u307E\u305B\u3093
smfcode.error.pos.sizeNotMatch=\u30D1\u30EC\u30C3\u30C8[{0}]\u306E\u30B5\u30A4\u30BA\u304C\u53CE\u7D0D\u30B9\u30DA\u30FC\u30B9[{1}][{2}]\u306E\u30B5\u30A4\u30BA\u306B\u5BFE\u5FDC\u3057\u3066\u304A\u3089\u305A\u3001\u53CE\u7D0D\u3067\u304D\u307E\u305B\u3093
smfcode.error.storage.offline=\u30D3\u30F3 [{0}] \u30AA\u30D5\u30E9\u30A4\u30F3
smfcode.error.barcode.invalid=\u30D0\u30FC\u30B3\u30FC\u30C9\u304C\u7121\u52B9\u3067\u3059
smfcode.error.barcode.wrongSize=\u30B5\u30A4\u30BA[{0}]\u304C\u4E00\u81F4\u3057\u306A\u3044
smfcode.error.barcode.wrongQty=<=0\u306B\u5BFE\u5FDC\u3059\u308B\u30D0\u30FC\u30B3\u30FC\u30C9[{0}]\u306E\u6570\u306F\uFF1A{1}\u3067\u3059
smfcode.error.barcode.taskNotEnd=\u30D1\u30EC\u30C3\u30C8[{0}]\u306B\u5BFE\u3059\u308B\u64CD\u4F5C\u304C\u5B8C\u4E86\u3057\u3066\u304A\u3089\u305A\u3001\u53CE\u7D0D\u64CD\u4F5C\u304C\u3067\u304D\u307E\u305B\u3093
smfcode.error.columnNotExist=[{0}\u5217\u3092\u542B\u3080\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059
smfcore.storage.error.notExist=\u30D3\u30F3\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093\u3067\u3057\u305F{0}
smfcode.error.barcode.inQueue=QR\u30B3\u30FC\u30C9[{0}]\u306F\u3059\u3067\u306B\u64CD\u4F5C\u30AD\u30E5\u30FC\u306B\u5165\u3063\u3066\u304A\u308A\u3001\u64CD\u4F5C\u306B\u5931\u6557\u3057\u307E\u3057\u305F
smfcode.error.pos.inQueue=\u30DD\u30B8\u30B7\u30E7\u30F3 :[{0}} \u304C\u30AD\u30E5\u30FC\u306B\u5165\u3063\u3066\u3044\u307E\u3059\u304C\u3001\u64CD\u4F5C\u306B\u5931\u6557\u3057\u307E\u3057\u305F
smfcode.columnNotExist=0}\u5217\u3092\u542B\u3080\u3053\u3068
smfcore.conotUpdate=\u30E6\u30FC\u30B6\u30FC\u540Dadmin\u306F\u5909\u66F4\u3067\u304D\u307E\u305B\u3093
smfcore.unfinished=\u30D0\u30FC\u30B3\u30FC\u30C9[{0}]\u306E\u30BF\u30B9\u30AF\u306F\u307E\u3060\u7D42\u4E86\u3057\u3066\u3044\u307E\u305B\u3093
smfcore.ok=ok
smfcore.shelfNotExist={0}\u5BF9\u5E94\u7684\u6599\u67B6\u4E0D\u5B58\u5728
smfcore.inputError=\u5165\u5E93\u51FA\u9519:{0}
smfcore.checkoutError=\u51FA\u5E93\u51FA\u9519:{0}
smfcore.notask=No task in this order
smfcore.taskCount=total task is :{0}
smfcore.noconnecttion=no connecttion
smfcore.loadMaterialFailed=loading material failed:{0}
smfcore.checkNg=checking material is ng:{0}
smfcore.loadMaterialFinished=loading material is finished: {0}
smfcore.shelfNotExist={0}\u5BFE\u5FDC\u3059\u308B\u68DA\u304C\u5B58\u5728\u3057\u306A\u3044
smfcore.inputError=\u30A8\u30F3\u30C8\u30EA\u30A8\u30E9\u30FC\uFF1A{0}
smfcore.checkoutError=\u30A2\u30A6\u30C8\u30D0\u30A6\u30F3\u30C9\u30A8\u30E9\u30FC\uFF1A{0}
smfcore.notask=\u5272\u308A\u5F53\u3066\u306E\u306A\u3044\u6CE8\u6587
smfcore.taskCount=\u30BF\u30B9\u30AF\u306E\u7DCF\u6570 :{0}
smfcore.noconnecttion=\u672A\u63A5\u7D9A
smfcore.loadMaterialFailed=\u30C7\u30D0\u30A4\u30B9\u306E\u8AAD\u307F\u8FBC\u307F\u306B\u5931\u6557\u3057\u307E\u3057\u305F:{0}
smfcore.checkNg=\u30C7\u30D0\u30A4\u30B9\u306E\u8A8D\u8A3C\u306B\u5931\u6557\u3057\u307E\u3057\u305F:{0}
smfcore.loadMaterialFinished=\u30C7\u30D0\u30A4\u30B9\u306E\u8AAD\u307F\u8FBC\u307F\u5B8C\u4E86\uFF1A{0}
smfcore.lockMaterial=\u30ED\u30C3\u30AD\u30F3\u30B0\u7D20\u6750
smfcore.lightGroup=\u30E9\u30C3\u30AF\u306E\u30B0\u30EB\u30FC\u30D4\u30F3\u30B0
smfcore.order=\u4F5C\u696D\u6307\u793A\u7BA1\u7406
smfcore.workOrder=\u4F5C\u696D\u6307\u793A
smfcore.singleOuput=\u8ABF\u3079\u308B
smfcore.system=\u8A2D\u5B9A
smfcore.bunker=\u30B5\u30A4\u30ED\u7BA1\u7406
smfcore.storagePos=\u30B9\u30C8\u30EC\u30FC\u30B8\u7BA1\u7406
smfcore.menu=\u30E1\u30CB\u30E5\u30FC\u7BA1\u7406
smfcore.materiel =\u30DE\u30C6\u30EA\u30A2\u30EB\u30DE\u30CD\u30B8\u30E1\u30F3\u30C8
smfcore.componentParts=\u30B3\u30F3\u30DD\u30FC\u30CD\u30F3\u30C8
smfcore.barcode=\u30D0\u30FC\u30B3\u30FC\u30C9
smfcore.log=\u30ED\u30B0\u7BA1\u7406
smfcore.taskLog=\u30DE\u30C6\u30EA\u30A2\u30EB\u30ED\u30B0
smfcore.user=\u30E6\u30FC\u30B6\u30FC\u7BA1\u7406
smfcore.peoples=\u30E6\u30FC\u30B6\u30FC\u7BA1\u7406
smfcore.role=\u5F79\u5272\u7BA1\u7406
\ No newline at end of file
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!