Commit c833ac2b sunke

扫码料架入库推荐库位

添加日语
尾料先出改为数量小的先出
清理库位时更新库存
1 个父辈 5dabe5bb
package com.myproject.bean;
import org.mockito.cglib.core.Local;
import java.util.Locale;
/**
......@@ -12,6 +14,8 @@ public enum Language {
ENGLISH("en","English"),
//zh_CN 中文
ZH_CN("zh-CN","中文"),
//日语
Japan("jp","日本語"),
;
......@@ -39,18 +43,22 @@ public enum Language {
this.value = value;
}
public Locale getLocale(){
public static Locale getLocale(String langueLabel){
Locale preferredLocale = null;
if (label != null && !label.isEmpty()) {
int indexOfUnderscore = label.indexOf('-');
if (langueLabel != null && !langueLabel.isEmpty()) {
int indexOfUnderscore = langueLabel.indexOf('-');
if (indexOfUnderscore != -1) {
String language = label.substring(0, indexOfUnderscore);
String country = label.substring(indexOfUnderscore + 1);
String language = langueLabel.substring(0, indexOfUnderscore);
String country = langueLabel.substring(indexOfUnderscore + 1);
preferredLocale = new Locale(language, country);
} else {
preferredLocale = new Locale(label);
preferredLocale = new Locale(langueLabel);
}
}
return preferredLocale;
}
public Locale getLocale(){
return getLocale(label);
}
}
package com.myproject.bean.utils;
import com.google.common.base.Strings;
import com.myproject.bean.Language;
import com.myproject.bean.update.AlarmInfo;
import com.myproject.util.StorageConstants;
......@@ -39,6 +40,11 @@ public class StatusBean {
//服务器默认这些按钮都为不可用状态,只有收到对应的enable时,按钮才可以进行点击
private Map<String, String> data = new HashMap<>();
/**
* 提示消息,key为en, zh_CN, jp等,消息为对应语言的消息
*/
private Map<String, String> msgData = new HashMap<>();
/// <summary>
/// 整体料仓状态
/// 1=正常运行中
......@@ -60,16 +66,6 @@ public class StatusBean {
* 英文提示消息
*/
public String msgEn = "";
/**
* 提示消息类型
*/
public String msgCode="";
/**
* 消息参数
*/
public String[] msgParam;
/// <summary>
/// 包含的多个 BOX 的状态信息
/// </summary>
......@@ -321,20 +317,17 @@ public class StatusBean {
this.msg = msg;
}
public String getMsgCode() {
return msgCode;
}
public void setMsgCode(String msgCode) {
this.msgCode = msgCode;
}
public String[] getMsgParam() {
return msgParam;
}
public void setMsgParam(String[] msgParam) {
this.msgParam = msgParam;
public void setShowMsg(Locale local){
String lang = local.getLanguage();
String showMsg = msgData.get(lang);
if(showMsg == null){
if(Language.ENGLISH.getLabel().contains(lang)){
showMsg = msgEn;
}else{
showMsg = msg;
}
}
this.msg = showMsg;
}
public Map<Integer, BoxStatusBean> getBoxStatus() {
......@@ -436,4 +429,20 @@ public class StatusBean {
public void setMsgEn(String msgEn) {
this.msgEn = msgEn;
}
public Map<String, String> getMsgData() {
return msgData;
}
public void setMsgData(Map<String, String> msgData) {
this.msgData = msgData;
}
public String getDoorReelSingnal() {
String doorReelSignal = getFromData("doorReelSignal");
if(Strings.isNullOrEmpty(doorReelSignal)){
doorReelSignal = "-1";
}
return doorReelSignal;
}
}
......@@ -414,7 +414,7 @@ public class StoragePosManagerImpl implements IStoragePosManager {
}else if(StorageConstants.CHECKOUT_TYPE.FIFO.equals(checkoutType)){//严格的先进先出
sort = new Sort(Sort.Direction.ASC, "canCheckOutTime").and(new Sort(Sort.Direction.DESC, "barcode.usedCount"));
}else if(StorageConstants.CHECKOUT_TYPE.USED_FIRST.equals(checkoutType)){//尾料优先
sort = new Sort(Sort.Direction.DESC, "barcode.usedCount").and(new Sort(Sort.Direction.ASC, "canCheckOutTime"));
sort = new Sort(Sort.Direction.ASC, "barcode.amount").and(new Sort(Sort.Direction.ASC, "canCheckOutTime"));
}else if(StorageConstants.CHECKOUT_TYPE.PRODUCE_DATE.equals(checkoutType)){
//先生产先出
sort = new Sort(Sort.Direction.ASC, "barcode.produceDate").and(new Sort(Sort.Direction.ASC, "canCheckOutTime"));
......
......@@ -79,6 +79,9 @@ public class BarcodeRule {
}
log.info("分割符为:"+newRule.separator+"长度为:"+tempArr.length);
if(tempArr.length == 0){
tempArr = new String[]{ruleStr};
}
for (int i=0; i<tempArr.length; i++) {
String fieldValue = tempArr[i];
......@@ -126,15 +129,19 @@ public class BarcodeRule {
}
}
if(!newRule.expireYear_item.hasThisField() && !newRule.expireMonth_item.hasThisField() && !newRule.expireDay_item.hasThisField()&& !newRule.expireDate_item.hasThisField()){
if(!newRule.expireDate_item.matchRule(fieldValue,i)){
if(newRule.expireDate_item.matchRule(fieldValue,i)){
log.info("expireDate: 为" + newRule.expireDate_item.toString());
}
}
if(!newRule.expireYear_item.hasThisField() && !newRule.expireMonth_item.hasThisField() && !newRule.expireDay_item.hasThisField()){
if(newRule.expireYear_item.matchRule(fieldValue,i)){
log.info("expireYear: 为" + newRule.expireYear_item.toString());
}else if(newRule.expireMonth_item.matchRule(fieldValue,i)){
log.info("expireMonth: 为" + newRule.expireMonth_item.toString());
}else if(newRule.expireDay_item.matchRule(fieldValue,i)){
log.info("expireDay: 为" + newRule.expireDay_item.toString());
}else if(newRule.expireDate_item.matchRule(fieldValue,i)){
log.info("expireDate: 为" + newRule.expireDate_item.toString());
}
}
}
......@@ -198,11 +205,11 @@ public class BarcodeRule {
private int prefix = -1;
/**
*长度,0表示为变长,正值表示从前面截取,负值表示从后面开始截取,前缀和后缀及长度都有效时,需要验证字串总长度
* 例一: QTY[-1,5,-1]取前5位作为数量
* 例二: QTY[-1,-5,-1]取后5位作为数量
* 例三: QTY[1,5,-1]去除前面第1位后,取前5位作为数量
* 例四: QTY[-1,-5,1]去除后面第1位后,取后5位作为数量
* 例五: QTY[1,0,-1]去除前面1位后,剩余的作为数量
* 例一: QTY[0,5,0]取前5位作为数量
* 例二: QTY[0,-5,0]取后5位作为数量
* 例三: QTY[1,5,0]去除前面第1位后,取前5位作为数量
* 例四: QTY[0,-5,1]去除后面第1位后,取后5位作为数量
* 例五: QTY[1,0,0]去除前面1位后,剩余的作为数量
* 例六: QTY[0,5,3]去除前面0位和后面3位,剩余的5位作为数量,也就是说只能为8位
*/
private int length = 0;
......@@ -279,6 +286,9 @@ public class BarcodeRule {
try{
if(index != -1){
String codeValue = codeArr[index];
if(codeValue.length() < prefix + suffix){
return null;
}
//如果有前缀和后缀
if(prefix > 0){
codeValue = codeValue.substring(prefix);
......@@ -408,16 +418,20 @@ public class BarcodeRule {
codeBean.setError("error.barcode.noRule","解析规则未定义");
return codeBean;
}
String[] codeArr = codeStr.split(separator);
//条码与规则长度对应不上
if(codeArr.length != length){
log.info("条码["+codeStr+"]与规则【"+ruleStr+"】长度不同");
codeBean.setError("error.barcode.wrongLength",new String[]{}, "条码["+codeStr+"]长度错误");
return codeBean;
}else{
codeArr = codeStr.split(separator,length);
String[] codeArr = new String[]{codeStr};
if(!Strings.isNullOrEmpty(separator)){
codeArr = codeStr.split(separator);
//条码与规则长度对应不上
if(codeArr.length != length){
log.info("条码["+codeStr+"]与规则【"+ruleStr+"】长度不同");
codeBean.setError("error.barcode.wrongLength",new String[]{}, "条码["+codeStr+"]长度错误");
return codeBean;
}else{
codeArr = codeStr.split(separator,length);
}
}
Barcode b = new Barcode();
String reelId = "";
......@@ -555,12 +569,16 @@ public class BarcodeRule {
// codeStr = "=1+0x0-0x0=A0002";
//阳光电源
rule = "[RI]_PN_3_QTYxxxx";
//rule = "[RI]_PN_PRODATEyyMMdd_QTY[0:5:4]";
rule = "[RI]_PN_PRODATEyyMMdd_QTY[0:5:4]";
codeStr = "4500065747_CS000069_180101_030000041";
codeStr = "4500089600_DC000045_190528_003000006";
//佳世达
//rule ="BATCH;PRODATEyyyyMMdd[1:8:-1]EXPD[-1:-4:-1];PN[1:12:-1]SP[13:5:-1]QTY[-1:-5:-1];RI";
//codeStr = "L00002019090199951797;E20190901 0365;B8C.R2003.V81506072019090103000;R506072019102200356";
//博郎 QR = [VEE PN] + [Quantity] + [UID] + [Expire date] + [MSD level] + [Light class] + [Color class] + [Forward voltage] + [00000000]
// codeStr = "001967370080049250852020112000010P130BT200MH00000000";
//
// rule = "PN[0:8:-1]QTY[8:5:-1]RI[13:7:-1]EXPDATEyyyyMMdd[20:8:-1]MSL[28:4:-1]BATCH[32:4:-1]SP[36:4:-1]";
// //佳世达
// rule ="BATCH;PRODATEyyyyMMdd[1:8:-1]EXPD[-1:-4:-1];PN[1:12:-1]SP[13:5:-1]QTY[-1:-5:-1];RI";
// codeStr = "L00002019090199951797;E20190901 0365;B8C.R2003.V81506072019090103000;R506072019102200356";
BarcodeRule br = BarcodeRule.newRule(rule);
Barcode b = br.toCodeBean(codeStr).getBarcode();
if(b != null){
......@@ -570,13 +588,12 @@ public class BarcodeRule {
System.out.println("BATCH:"+b.getBatch());
System.out.println("MSL:"+b.getMsl());
System.out.println("EXPDATE:"+b.getExpireDate());
System.out.println("Supllier:"+b.getProvider());
}else{
log.info("解析失败");
}
System.out.println(String.format("%08d", Long.valueOf("002")));
// URI uri = new URI("smb://materialtower:Flextronics1@10.222.42.48/materialtower/re20190822161258_result.txt");
// String smbFileName = uri.getScheme() + "://" + uri.getHost() + "" + uri.getPath() + "abc.txt";
......
......@@ -5,6 +5,7 @@ import com.google.common.collect.Lists;
import com.google.common.collect.Sets;
import com.myproject.bean.CodeBean;
import com.myproject.bean.json.InventoryItem;
import com.myproject.bean.json.ShelfOperateBean;
import com.myproject.bean.json.UsageItem;
import com.myproject.bean.update.Barcode;
import com.myproject.bean.update.DataLog;
......@@ -47,11 +48,9 @@ public class CodeShelfController extends BaseController {
@Autowired
protected IBarcodeManager barcodeManager;
@Autowired
private IDataLogDao dataLogDao;
//上一次入库的库位,用于扫下一条码时灭灯
private static Map<String,StoragePos> lastPutinPosMap = new ConcurrentHashMap<>();
private static Map<String,ShelfOperateBean> shelfPutInBeanMap = new ConcurrentHashMap<>();
@RequestMapping("/storage/codeShelf")
public String cabinetView(HttpServletRequest request, HttpSession httpSession){
......@@ -97,19 +96,42 @@ public class CodeShelfController extends BaseController {
* 关闭上一个入库库位(与给定库位一致才进行关闭)
*/
private void closeLastPutInPos(String sessionId, String posNameToCheck){
StoragePos lastPutinPos= lastPutinPosMap.get(sessionId);
if(lastPutinPos != null){
boolean needToClose = true;
if(posNameToCheck != null && !posNameToCheck.isEmpty()){
//相同的库位才进行关闭
needToClose = lastPutinPos.getPosName().equals(posNameToCheck);
ShelfOperateBean operateBean= shelfPutInBeanMap.get(sessionId);
if(operateBean != null){
StoragePos posToClose = operateBean.getPosToClose();
if(posToClose != null){
boolean needToClose = true;
if(posNameToCheck != null && !posNameToCheck.isEmpty()){
//相同的库位才进行关闭
needToClose = posToClose.getPosName().equals(posNameToCheck);
}
if(needToClose){
log.info(sessionId + "关闭库位:"+ posToClose.getPosName());
operateBean.setPosToClose(null);
shelfPutInBeanMap.put(sessionId, operateBean);
opPosLight("close", posToClose, "");
}
}
if(needToClose){
log.info(sessionId + "关闭库位:"+ lastPutinPos.getPosName());
lastPutinPosMap.remove(sessionId);
opPosLight("close", lastPutinPos, "");
}
for (ShelfOperateBean shelfOperateBean : shelfPutInBeanMap.values()) {
if(shelfOperateBean.timeOut()){
String removedSessionId = shelfOperateBean.getSessionId();
log.info("料架入库缓存["+shelfOperateBean.getSessionId()+"]长时间未操作,清理缓存");
shelfPutInBeanMap.remove(removedSessionId);
}
}
}
private ShelfOperateBean getOperateBean(String sessionId){
ShelfOperateBean operateBean= shelfPutInBeanMap.get(sessionId);
if(operateBean == null){
operateBean = new ShelfOperateBean();
operateBean.setSessionId(sessionId);
shelfPutInBeanMap.put(sessionId, operateBean);
}
return operateBean;
}
/**
......@@ -119,22 +141,29 @@ public class CodeShelfController extends BaseController {
@ResponseBody
public String outFromShelf(HttpServletRequest request, HttpSession httpSession){
String sessionId = httpSession.getId();
closeLastPutInPos(sessionId, null);
String codeStr = request.getParameter("code");
int delayCloseTime = 30000;
String putInColor = "red";
if(!Strings.isNullOrEmpty(codeStr)){
StoragePos pos = storagePosManager.getByPosName(codeStr);
if(pos != null){
closeLastPutInPos(sessionId, null);
//扫描的为库位条码,库位中没有物料的话点亮库位灯
Storage currentStorage = dataCache.getStorageById(pos.getStorageId());
if(currentStorage == null || !currentStorage.isCodeShelf()){
return getText("shelf.msg.notFound",request.getLocale(),"未找到料架");
}
if(pos.getBarcode() != null){
return "库位中已有物料";
return getText("shelf.msg.hasReel",new String[]{pos.getPosName()}, request.getLocale(),"库位中["+pos.getPosName()+"]已有物料");
}else{
//设置上一个入库操作库位
lastPutinPosMap.put(sessionId, pos);
return "OK操作成功,请扫描要放入的物料";
openAndCloseLights(sessionId, pos,putInColor,delayCloseTime);
ShelfOperateBean operateBean = getOperateBean(sessionId);
operateBean.setOpPos(pos);
operateBean.setPosToClose(pos);
operateBean.setLastPosId(pos.getId());
shelfPutInBeanMap.put(sessionId, operateBean);
return "OK" + getText("shelf.msg.tipScanReel",new String[]{pos.getPosName()}, request.getLocale(),"库位["+pos.getPosName()+"]操作成功,请扫描要放入的物料");
}
}else{
//扫的是物料条码
......@@ -150,7 +179,7 @@ public class CodeShelfController extends BaseController {
//5秒内同一个条码忽略
Date usedDate = barcode.getUsedDate();
if(usedDate != null && now - usedDate.getTime() < 5000){
return "条码操作频繁,请稍后再试";
return getText("shelf.msg.fastop",request.getLocale(),"条码操作频繁,请稍后再试");
}
StoragePos inPos = storagePosManager.getByBarcodeId(barcode.getId());
......@@ -167,20 +196,51 @@ public class CodeShelfController extends BaseController {
}
//入库
StoragePos lastPutinPos= lastPutinPosMap.get(sessionId);
if(lastPutinPos == null){
return "请先扫描库位码";
ShelfOperateBean operateBean = getOperateBean(sessionId);
StoragePos opPos= operateBean.getOpPos();
if(opPos == null){
//查找下一库位,下一库位已有任务或者下一库位已有料呀者下一库位尺寸不符合,必须重新扫库位码
String lastPosId = operateBean.getLastPosId();
if(Strings.isNullOrEmpty(lastPosId)){
return getText("shelf.msg.scanPos",request.getLocale(),"请先扫描库位码");
}
Long nextPosId = Long.valueOf(lastPosId) + 1;
StoragePos nextPos = storagePosManager.get(String.valueOf(nextPosId));
if(nextPos != null){
Collection<String> excludePosIds = taskService.excludePosIds();
if(excludePosIds.contains(nextPos.getId())){
return getText("shelf.nextPos.hasTask",new String[]{nextPos.getPosName()},request.getLocale(), "下一库位["+nextPos.getPosName()+"]已有任务,请重新扫描库位码");
}
if(nextPos.getBarcode() != null){
return getText("shelf.nextPos.hasReel",new String[]{nextPos.getPosName()},request.getLocale(), "下一库位["+nextPos.getPosName()+"]已有物料,请重新扫描库位码");
}
Storage storage = dataCache.getStorageById(nextPos.getStorageId());
if(!storage.canPutInPos(barcode.getPlateSize(),barcode.getHeight(), nextPos.getW(), nextPos.getH())){
String reelSize = barcode.getPlateSize() + "x" + barcode.getHeight();
String posSize = nextPos.getW() + "x" + nextPos.getH();
return getText("shelf.nextPos.hasReel",new String[]{nextPos.getPosName(),posSize, reelSize},request.getLocale(), "下一库位["+nextPos.getPosName()+"]尺寸["+posSize+"]与料盘尺寸["+reelSize+"]不符,请重新扫描库位码");
}
opPos = nextPos;
openAndCloseLights(sessionId, opPos,putInColor,delayCloseTime);
operateBean.setOpPos(opPos);
operateBean.setPosToClose(opPos);
operateBean.setLastPosId(opPos.getId());
shelfPutInBeanMap.put(sessionId, operateBean);
}
}
int delayCloseTime = 30000;
String color = "red";
if(lastPutinPos != null){
log.info(barcode.getPartNumber()+" [ "+barcode.getBarcode()+" ] " + "入库到:" + lastPutinPos.getPosName());
lastPutinPos.setCanCheckOutTime(System.currentTimeMillis() + delayCloseTime);
taskService.addTaskToFinished(lastPutinPos,barcode,null);
openAndCloseLights(sessionId, lastPutinPos,color,delayCloseTime);
lastPutinPosMap.put(sessionId, lastPutinPos);
return "OK"+getText("shelf.msg.inOk",new String[]{lastPutinPos.getPosName()},request.getLocale(),"操作成功,请放入库位["+lastPutinPos.getPosName()+"]");
if(opPos != null){
log.info(barcode.getPartNumber()+" [ "+barcode.getBarcode()+" ] " + "入库到:" + opPos.getPosName());
opPos.setCanCheckOutTime(System.currentTimeMillis() + delayCloseTime);
taskService.addTaskToFinished(opPos,barcode,null);
operateBean.setOpPos(null);
shelfPutInBeanMap.put(sessionId, operateBean);
return "OK"+getText("shelf.msg.inOk",new String[]{opPos.getPosName()},request.getLocale(),"操作成功,请放入库位["+opPos.getPosName()+"]");
}else{
//库位没找到
String sizeInfo = barcode.getPlateSize()+" x "+ barcode.getHeight();
......@@ -284,8 +344,8 @@ public class CodeShelfController extends BaseController {
@ResponseBody
public StoragePos getCurrentPos(HttpSession httpSession){
String sessionId = httpSession.getId();
StoragePos currentPos = lastPutinPosMap.get(sessionId);
return currentPos;
ShelfOperateBean operateBean = getOperateBean(sessionId);
return operateBean.getOpPos();
}
}
......@@ -72,7 +72,8 @@ public class StoragePosUpdateController extends BaseUpdateController {
barcodeManager.save(barcode);
storagePos.setBarcode(null);
storagePos.setUsed(false);
storagePosManager.save(storagePos);
storagePos = storagePosManager.save(storagePos);
dataCache.updateInventory(storagePos,barcode);
}
return "";
......
......@@ -5,6 +5,8 @@ import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
import com.myproject.bean.CodeBean;
import com.myproject.bean.Language;
import com.myproject.bean.json.UsageItem;
import com.myproject.bean.update.*;
import com.myproject.bean.utils.BoxStatusBean;
import com.myproject.bean.utils.StatusBean;
......@@ -16,6 +18,7 @@ import com.myproject.manager.IStoragePosManager;
import com.myproject.util.DateUtil;
import com.myproject.util.StorageConstants;
import com.myproject.webapp.controller.storage.BaseController;
import com.myproject.webapp.filter.LocaleFilter;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.core.util.Integers;
......@@ -355,9 +358,21 @@ public class MesApiController extends BaseController {
@RequestMapping(value = "/status")
@ResponseBody
public Map<String,Object> status(HttpServletRequest request) {
Map<String,Object> results = Maps.newHashMap();
for (Storage storage : dataCache.getAllStorage().values()){
public List<Map<String,Object>> status(HttpServletRequest request) {
String cid = request.getParameter("cid");
Locale localeZh = Language.ZH_CN.getLocale();
Locale localeEn = Language.ENGLISH.getLocale();
Collection<Storage> storageList = Lists.newArrayList();
if(Strings.isNullOrEmpty(cid)){
storageList.addAll(dataCache.getAllStorage().values());
}else{
Storage storage = dataCache.getStorage(cid);
storageList.add(storage);
}
List<Map<String,Object>> results = Lists.newArrayList();
for (Storage storage : storageList){
StatusBean statusBean = taskService.getStatus(storage.getCid());
Map<Integer, BoxStatusBean> boxStatusMap = statusBean.getBoxStatus();
int status = -1;
......@@ -366,18 +381,50 @@ public class MesApiController extends BaseController {
if(boxStatusBean != null){
status = boxStatusBean.getStatus();
}
}
int storageStatus = status;
if(status == StorageConstants.STATUS.OFFLINE || statusBean.timeOut()){
//离线
storageStatus = -1;
}
results.put(storage.getName(), storageStatus);
String msg = statusBean.getMsg();
String msgEn = statusBean.getMsgEn();
Exception e = taskService.getServerException(storage.getCid());
if(e != null){
if(e instanceof ValidateException){
msg = getText(e.getMessage(),((ValidateException) e).getParams(), localeZh ,e.getMessage());
msgEn = getText(e.getMessage(),((ValidateException) e).getParams(), localeEn ,e.getMessage());
}else{
msg = e.getMessage();
msgEn = e.getMessage();
}
}
Map<String,Object> itemMap = new HashMap<>();
itemMap.put("cid", storage.getCid());
itemMap.put("name", storage.getName());
itemMap.put("status",storageStatus);
itemMap.put("msg",msg);
itemMap.put("msgEn",msgEn);
itemMap.put("doorReelSignal",statusBean.getDoorReelSingnal());
Map<String,Object> emptySlotMap = Maps.newHashMap();
Map<String,Object> totalSlotMap = Maps.newHashMap();
Map<String, UsageItem> usageMap = storage.getUsageMap();
for (UsageItem usageItem : usageMap.values()) {
String sizeStr = usageItem.getSizeStr();
int total = usageItem.getTotalCount();
int used = usageItem.getUsedCount();
totalSlotMap.put(sizeStr,total);
emptySlotMap.put(sizeStr,total - used);
}
itemMap.put("emptySlot",emptySlotMap);
itemMap.put("totalSlot",totalSlotMap);
results.add(itemMap);
}
return results;
}
private Date toDate(String dateStr){
try {
return DateUtil.toDate(dateStr,"yyyyMMddHHmmss");
......
......@@ -50,7 +50,7 @@ public class StatusController extends BaseController{
private StatusBean getStatus(String cid, HttpServletRequest request){
StatusBean statusBean = taskService.getStatus(cid);
statusBean.setShowMsg(request.getLocale());
Exception e = taskService.getServerException(cid);
if(e != null){
if(e instanceof ValidateException){
......@@ -63,6 +63,7 @@ public class StatusController extends BaseController{
}
}
//log.debug("Get cid: " + cid + " status: " + statusBean.getStatus() + " and error: " + statusBean.getError());
return statusBean;
}
......
......@@ -2,6 +2,7 @@ package com.myproject.webapp.filter;
import com.google.common.base.Strings;
import com.myproject.Constants;
import com.myproject.bean.Language;
import com.myproject.model.User;
import org.springframework.context.i18n.LocaleContextHolder;
import org.springframework.security.core.Authentication;
......@@ -40,7 +41,7 @@ public class LocaleFilter extends OncePerRequestFilter {
String locale = request.getParameter("locale");
Locale preferredLocale = getPreFerredLocale(locale);
Locale preferredLocale = Language.getLocale(locale);
SecurityContextImpl securityContextImpl = (SecurityContextImpl) request
.getSession().getAttribute("SPRING_SECURITY_CONTEXT");
......@@ -83,7 +84,7 @@ public class LocaleFilter extends OncePerRequestFilter {
if(preferredLocale == null){//没有设置过,使用用户设置的 Locale
if(loginUser != null){
preferredLocale = getPreFerredLocale(loginUser.getLanguage());
preferredLocale = Language.getLocale(loginUser.getLanguage());
}
}
......@@ -109,19 +110,4 @@ public class LocaleFilter extends OncePerRequestFilter {
// Reset thread-bound LocaleContext.
LocaleContextHolder.setLocaleContext(null);
}
private Locale getPreFerredLocale(String locale){
Locale preferredLocale = null;
if (locale != null && !locale.isEmpty()) {
int indexOfUnderscore = locale.indexOf('-');
if (indexOfUnderscore != -1) {
String language = locale.substring(0, indexOfUnderscore);
String country = locale.substring(indexOfUnderscore + 1);
preferredLocale = new Locale(language, country);
} else {
preferredLocale = new Locale(locale);
}
}
return preferredLocale;
}
}
## Do NOT delete! Keep this line to avoid the native2ascii UTF-8 BOM bug. See #APF-639
user.status=\u5F53\u524D\u7528\u6237:
user.logout=\u9000\u51FA
# -- validator errors --
errors.invalid={0} \u65E0\u6548\u3002
errors.maxlength={0} \u4E0D\u80FD\u5927\u4E8E {1} \u4E2A\u5B57\u7B26\u3002
errors.minlength={0} \u4E0D\u80FD\u5C11\u4E8E {1} \u4E2A\u5B57\u7B26\u3002
errors.range={0} \u672A\u5728 {1} \u4E0E {2} \u8303\u56F4\u5185\u3002
errors.required={0} \u4E3A\u5FC5\u586B\u9879\u3002
errors.byte={0} \u5FC5\u987B\u4E3Abyte\u7C7B\u578B\u3002
errors.date={0} \u4E0D\u662F\u6709\u6548\u65E5\u671F\u683C\u5F0F\u3002
errors.double={0} \u5FC5\u987B\u4E3Adouble\u7C7B\u578B\u3002
errors.float={0} \u5FC5\u987B\u4E3Afloat\u7C7B\u578B\u3002
errors.integer={0} \u5FC5\u987B\u4E3A\u4E00\u6570\u503C\u3002
errors.long={0} \u5FC5\u987B\u4E3Along\u7C7B\u578B\u3002
errors.short={0} \u5FC5\u987B\u4E3Ashort\u7C7B\u578B\u3002
errors.creditcard={0} \u4E3A\u65E0\u6548\u4FE1\u7528\u5361\u53F7\u3002
errors.email={0} \u4E3A\u65E0\u6548\u90AE\u4EF6\u5730\u5740\u3002
errors.phone={0} \u4E3A\u65E0\u6548\u7535\u8BDD\u53F7\u7801\u3002
errors.zip={0} \u4E3A\u65E0\u6548\u90AE\u653F\u7F16\u7801\u3002
# -- other errors --
errors.cancel=\u64CD\u4F5C\u88AB\u53D6\u6D88\u3002
errors.detail={0}
errors.general=\u64CD\u4F5C\u672A\u5B8C\u6210\u3002\u8BE6\u7EC6\u539F\u56E0\u5982\u4E0B\u3002
errors.token=\u8BF7\u6C42\u672A\u5B8C\u5168\u5904\u7406\u3002\u64CD\u4F5C\u987A\u5E8F\u9519\u8BEF\u3002
errors.none=\u65E0\u9519\u8BEF\u6D88\u606F\uFF0C\u8BF7\u68C0\u67E5\u670D\u52A1\u5668\u65E5\u5FD7\u6587\u4EF6\u3002
errors.password.mismatch=\u65E0\u6548\u7528\u6237\u540D\u6216\u5BC6\u7801\uFF0C\u8BF7\u91CD\u8BD5\u3002
errors.conversion=\u5728web\u5C42\u6570\u636E\u5230\u4E1A\u52A1\u5C42\u6570\u636E\u7684\u8F6C\u6362\u8FC7\u7A0B\u4E2D\uFF0C\u53D1\u751F\u4E86\u4E00\u4E2A\u9519\u8BEF\u3002
errors.twofields={0} \u5B57\u6BB5\u4E0E {1} \u5B57\u6BB5\u7684\u503C\u5FC5\u987B\u4E00\u81F4\u3002
errors.existing.user=\u7528\u6237\u540D ({0}) \u6216e-mail\u5730\u5740 ({1}) \u5DF2\u5B58\u5728\u3002\u8BF7\u518D\u6B21\u5C1D\u8BD5\u4E0D\u540C\u540D\u79F0\u3002
# -- success messages --
user.added=\u7528\u6237 {0} \u7684\u4FE1\u606F\u6DFB\u52A0\u6210\u529F\u3002
user.deleted=\u7528\u6237 {0} \u7684\u4FE1\u606F\u5220\u9664\u6210\u529F\u3002
user.registered=\u6CE8\u518C\u6210\u529F\uFF0C\u60A8\u53EF\u4EE5\u5F00\u59CB\u4F7F\u7528\u7CFB\u7EDF\u3002
user.saved=\u60A8\u7684\u4FE1\u606F\u5DF2\u6210\u529F\u66F4\u65B0\u3002
user.updated.byAdmin=\u7528\u6237 {0} \u7684\u4FE1\u606F\u5DF2\u6210\u529F\u66F4\u65B0\u3002
newuser.email.message={0} \u4E3A\u60A8\u6210\u529F\u521B\u5EFA\u4E86\u4E00\u4E2AAppFuse\u5E10\u53F7\u3002\u60A8\u7684\u7528\u6237\u540D\u548C\u5BC6\u7801\u4FE1\u606F\u5982\u4E0B\uFF1A
reload.succeeded=\u5DF2\u7ECF\u6210\u529F\u91CD\u8F7D.
# -- error page messages --
errorPage.title=\u7CFB\u7EDF\u9519\u8BEF
errorPage.heading=\u54E6\uFF01
404.title=\u9875\u9762\u672A\u627E\u5230
404.message=\u8BF7\u6C42\u7684\u9875\u9762\u672A\u627E\u5230\u3002\u60A8\u53EF\u4EE5\u9009\u62E9\u8FD4\u56DE\u5230 <a href="{0}">\u4E3B\u83DC\u5355</a>\u3002\u6216\u8005\u9009\u62E9\u5728\u6B64\u4F11\u606F\u4E00\u4E0B\uFF0C\u5FD8\u6389\u521A\u624D\u7684\u6CAE\u4E27\uFF0C\u6B23\u8D4F\u4E00\u4E2A\u7F8E\u4E3D\u7684\u56FE\u7247\uFF1F
403.title=\u8BBF\u95EE\u88AB\u62D2\u7EDD
403.message=\u60A8\u5F53\u524D\u89D2\u8272\u65E0\u6743\u9650\u67E5\u770B\u6B64\u9875\u9762\u3002\u8BF7\u8054\u7CFB\u7CFB\u7EDF\u7BA1\u7406\u5458\uFF0C\u83B7\u5F97\u76F8\u5E94\u7684\u6743\u9650\u6216\u8005\u8FD4\u56DE\u5230<a href="{0}">\u4E3B\u83DC\u5355</a>\u3002\u6B64\u523B\uFF0C\u8BA9\u6211\u4EEC\u5148\u653E\u677E\u4E00\u4E0B\u5427\uFF1F
# -- login --
login.title=\u767B\u5F55
login.heading=\u767B\u5F55
login.rememberMe=\u8BA9\u7CFB\u7EDF\u8BB0\u4F4F\u6211
login.signup=\u4E0D\u662F\u6CE8\u518C\u7528\u6237? <a href="{0}">\u7533\u8BF7</a> \u4E00\u4E2A\u5E10\u53F7\u3002
login.passwordHint=\u5FD8\u8BB0\u4E86\u5BC6\u7801? \u8BA9\u7CFB\u7EDF\u5C06 <a href="?" onmouseover="window.status='\u7CFB\u7EDF\u53D1\u9001\u5BC6\u7801\u63D0\u793A\u3002'; return true" onmouseout="window.status=''; return true" title="\u7CFB\u7EDF\u53D1\u9001\u5BC6\u7801\u63D0\u793A\u3002" onclick="passwordHint(); return false">\u5BC6\u7801\u63D0\u793A\u4FE1\u606F\u5DF2e-mail\u5F62\u5F0F\u53D1\u9001\u7ED9\u60A8</a>\u3002
login.passwordHint.sent={0} \u7684\u5BC6\u7801\u63D0\u793A\u5DF2\u6210\u529F\u53D1\u9001\u5230 {1}\u3002
login.passwordHint.error=\u7528\u6237\u540D {0} \u5728\u7CFB\u7EDF\u6570\u636E\u5E93\u4E2D\u672A\u627E\u5230\u3002
# -- home --
home.title=\u4E3B\u83DC\u5355
home.heading=\u6B22\u8FCE\uFF01
home.message=\u606D\u559C\uFF0C\u60A8\u767B\u5F55\u6210\u529F\uFF01\u60A8\u53EF\u4EE5\u9009\u62E9\u6267\u884C\u4EE5\u4E0B\u64CD\u4F5C\uFF1A
home.activeUsers=\u5728\u7EBF\u7528\u6237
# -- menu/link messages --
menu.admin=\u7CFB\u7EDF\u7BA1\u7406
menu.admin.users=\u67E5\u770B\u7528\u6237
menu.admin.reload=\u91CD\u8F7D\u9009\u9879
menu.selectFile=\u4E0A\u4F20\u6587\u4EF6
# -- form labels --
label.username=\u7528\u6237\u540D
label.password=\u5BC6\u7801
# -- general values --
icon.information=\u4FE1\u606F
icon.information.img=/images/iconInformation.gif
icon.email=E-Mail
icon.email.img=/images/iconEmail.gif
icon.warning=\u8B66\u544A
icon.warning.img=/images/iconWarning.gif
date.format=MM/dd/yyyy
# -- role form --
roleForm.name=\u540D\u79F0
# -- user profile page --
userProfile.title=\u7528\u6237\u8BBE\u7F6E
userProfile.heading=\u7528\u6237\u7B80\u8981\u4FE1\u606F
userProfile.message=\u8BF7\u6309\u5982\u4E0B\u8868\u683C\u66F4\u65B0\u60A8\u7684\u4FE1\u606F\u3002
userProfile.admin.message=\u60A8\u53EF\u4EE5\u6309\u5982\u4E0B\u8868\u683C\uFF0C\u66F4\u65B0\u7528\u6237\u7684\u4FE1\u606F\u3002
userProfile.showMore=\u67E5\u770B\u66F4\u591A\u4FE1\u606F
userProfile.accountSettings=\u5E10\u6237\u8BBE\u7F6E
userProfile.assignRoles=\u5206\u914D\u89D2\u8272
userProfile.cookieLogin=\u60A8\u65E0\u6CD5\u66F4\u6539\u5BC6\u7801\uFF0C\u56E0\u4E3A\u60A8\u9009\u62E9\u4E86 \u8BA9\u7CFB\u7EDF\u8BB0\u4F4F\u6211 \u9009\u9879\u3002\u8BF7\u9000\u51FA\u7CFB\u7EDF\uFF0C\u518D\u6B21\u767B\u5F55\u5C1D\u8BD5\u66F4\u6539\u5BC6\u7801\u3002
# -- user form --
user.address.address=\u5730\u5740
user.availableRoles=\u53EF\u7528\u89D2\u8272
user.address.city=\u57CE\u5E02
user.address.country=\u56FD\u5BB6
user.email=E-Mail
user.firstName=\u540D
user.id=Id
user.lastName=\u59D3
user.password=\u5BC6\u7801
user.confirmPassword=\u786E\u8BA4\u5BC6\u7801
user.phoneNumber=\u7535\u8BDD
user.address.postalCode=\u90AE\u7F16
user.address.province=\u5DDE\u7701
user.roles=\u5F53\u524D\u89D2\u8272
user.username=\u7528\u6237\u540D
user.website=\u7F51\u5740
user.visitWebsite=\u6253\u5F00
user.passwordHint=\u5BC6\u7801\u63D0\u793A
user.enabled=\u4F7F\u80FD
user.accountExpired=\u5230\u671F
user.accountLocked=\u9501\u7740
user.credentialsExpired=\u5BC6\u7801\u5230\u671F\u4E86
# -- user list page --
userList.title=\u7528\u6237\u5217\u8868
userList.heading=\u5728\u7EBF\u7528\u6237
userList.nousers=<span>\u6CA1\u627E\u5230\u7528\u6237\u3002</span>
# -- user self-registration --
signup.title=\u6CE8\u518C
signup.heading=\u65B0\u7528\u6237\u6CE8\u518C
signup.message=\u8BF7\u8F93\u5165\u7528\u6237\u4FE1\u606F\u3002
signup.email.subject=AppFuse \u5E10\u6237\u4FE1\u606F
signup.email.message=\u60A8\u5DF2\u6210\u529F\u6CE8\u518C\u5230 AppFuse\u3002\u60A8\u7684\u7528\u6237\u540D\u548C\u5BC6\u7801\u4FE1\u606F\u5982\u4E0B\uFF1A
# -- upload page messages --
maxLengthExceeded=\u9009\u62E9\u4E0A\u4F20\u7684\u6587\u4EF6\u8FC7\u5927\u3002\u6700\u5927\u5141\u8BB8\u503C\u4E3A 2 MB\u3002
upload.title=\u6587\u4EF6\u4E0A\u4F20
upload.heading=\u4E0A\u4F20\u4E00\u6587\u4EF6
upload.message=\u4E3B\u8981\u7CFB\u7EDF\u5141\u8BB8\u4E0A\u4F20\u6587\u4EF6\u7684\u6700\u5927\u503C\u4E3A 2 MB\u3002
uploadForm.name=\u91CD\u547D\u540D\u6587\u4EF6
uploadForm.file=\u9009\u62E9\u6587\u4EF6
# -- display page messages --
display.title=\u6587\u4EF6\u4E0A\u4F20\u6210\u529F\uFF01
display.heading=\u6587\u4EF6\u4FE1\u606F
# -- active users page --
activeUsers.title=\u6D3B\u52A8\u7528\u6237\u5217\u8868
activeUsers.heading=\u5728\u7EBF\u7528\u6237
activeUsers.message=\u5217\u8868\u4E3A\u5DF2\u6210\u529F\u767B\u5F55\u7684\u3001session\u4E3A\u8FC7\u671F\u7684\u7528\u6237\u3002
activeUsers.fullName=\u5168\u540D
# JSF-only messages, remove if not using JSF
javax.faces.component.UIInput.REQUIRED={0} \u4E3A\u5FC5\u586B\u9879\u3002
activeUsers.summary=\u627E\u5230 {0} \u4E2A\u7528\u6237\uFF0C\u663E\u793A {1} \u4E2A\u7528\u6237\uFF0C\u4ECE {2} \u5230 {3}\u3002 {4} / {5} \u9875
button.login=\u767B\u5F55
chart.solder.used=\u7269\u6599\u6D88\u8017
chart.solder.stock=\u7269\u6599\u5E93\u5B58
chart.temperature=\u6E29\u5EA6
chart.humidity=\u6E7F\u5EA6
areaView.stockWaring=\u5E93\u5B58\u9884\u8B66
areaView.batch=\u6279\u6B21
areaView.tasks=\u4EFB\u52A1
menu.findout=\u67E5\u627E\u51FA\u5E93
menu.inRule=\u5165\u5E93\u7B56\u7565
menu.outRule=\u51FA\u5E93\u7B56\u7565
menu.system.settings=\u7CFB\u7EDF\u8BBE\u7F6E
menu.system=\u7CFB\u7EDF
menu.bigdata=\u5927\u6570\u636E
menu.bigdata.runStatus=\u8FD0\u884C\u7EDF\u8BA1
menu.bigdata.inOutList=\u51FA\u5165\u5E93\u8BB0\u5F55
menu.bigdata.dataReport=\u6570\u636E\u62A5\u544A
menu.bigdata.dataLog=\u7269\u6599\u65E5\u5FD7
menu.bigdata.errorLog=\u5F02\u5E38\u5206\u6790
menu.barCode.settings=\u6761\u7801\u8BBE\u7F6E
menu.box=\u4E91\u6599\u4ED3
menu.box.manage=\u6599\u4ED3\u7BA1\u7406
menu.box.virtualStorage=\u865A\u62DF\u4ED3
menu.box.liteBox=SMD BOX LITE
menu.box.boxi=SMD BOXi
menu.cloud.inventory=\u5E93\u5B58\u6C47\u603B
menu.cloud.numModify=\u6570\u91CF\u6821\u51C6
menu.order=\u8F7B\u5DE5\u5355
menu.order.management=\u5DE5\u5355\u7BA1\u7406
menu.product=\u4EA7\u54C1\u4FE1\u606F
menu.product.component=\u5143\u5668\u4EF6\u4FE1\u606F
menu.product.solder=\u9521\u818F\u4FE1\u606F
menu.product.pcb=PCB \u4FE1\u606F
menu.product.others=\u5176\u4ED6\u7269\u6599\u4FE1\u606F
menu.product.fixture=\u5939\u5177\u4FE1\u606F
menu.kanban=KANBAN
allBoxView.kanban=\u770B\u677F
allBoxView.temperature=\u6E29\u5EA6
allBoxView.humidity=\u6E7F\u5EA6
allBoxView.boxStatus=\u6599\u4ED3\u72B6\u6001
allBoxView.capacity=\u5BB9\u91CF
allBoxView.used=\u5DF2\u4F7F\u7528
allBoxView.lastPage=\u4E0A\u4E00\u9875
allBoxView.nextPage=\u4E0B\u4E00\u9875
allBoxView.findAndOut=\u67E5\u627E\u51FA\u5E93
allBoxView.outTitle=\u51FA\u5E93
allBoxView.noReel=\u65E0\u53EF\u7528\u7684\u7269\u6599
allBoxView.msg.title=\u63D0\u793A
allBoxView.msg.cancelMsg=\u786E\u5B9A\u8981\u53D6\u6D88\u4EFB\u52A1\u5417?
checkoutSettings.title=\u51FA\u5E93\u7B56\u7565
checkoutSettings.mode=\u51FA\u5E93\u65B9\u5F0F
checkoutSettings.mode.expireFirst=\u5148\u8FC7\u671F\u5148\u51FA
checkoutSettings.mode.usedFirst=\u5C3E\u6599\u5148\u51FA
checkoutSettings.mode.fifo=\u5148\u8FDB\u5148\u51FA
checkoutSettings.mode.efficiency=\u6548\u7387\u4F18\u5148
boxView.range=\u8303\u56F4
boxView.openDoor=\u6253\u5F00\u95E8\u9501
boxView.closeDoor=\u5173\u95ED\u95E8\u9501
boxView.startBatchIn=\u5F00\u59CB\u6279\u91CF\u5165\u5E93
boxView.takeOutReel=\u53D6\u51FA\u51FA\u5E93\u6599\u76D8
boxView.takeDoorReel=\u95E8\u53E3\u6599\u76D8\u5DF2\u53D6\u51FA
boxView.singleOut=\u5355\u76D8\u51FA\u5E93
boxView.doorStatus=\u4ED3\u95E8\u72B6\u6001
allBoxView.msg.cancelFinished=\u53D6\u6D88\u6210\u529F
boxView.taskCancel=\u5DF2\u53D6\u6D88
boxView.taskExcuting=\u6B63\u5728\u6267\u884C
boxView.taskFinished=\u5DF2\u5B8C\u6210
boxView.taskWaiting=\u7B49\u5F85\u4E2D
boxView.cancelTask=\u53D6\u6D88
solder.type=\u9521\u818F\u7C7B\u578B
solder.type.noLead=\u65E0\u94C5
solder.type.lead=\u6709\u94C5
solder.model=\u578B\u53F7
solder.encapsulation=\u5305\u88C5\u65B9\u5F0F
solder.encapsulation.tube=\u7BA1\u88C5
solder.encapsulation.can=\u7F50\u88C5
solder.storageCondition=\u51B0\u7BB1\u5B58\u50A8\u6761\u4EF6
solder.maxStorageTime=\u5BA4\u6E29\u6700\u591A\u5B58\u50A8\u65F6\u95F4
solder.hour=\u5C0F\u65F6
solder.warmTime=\u56DE\u6E29\u65F6\u95F4
solder.maxStoreNum=\u6700\u5927\u5B58\u50A8\u91CF
solder.storageTime=\u5F00\u5C01\u540E\u53EF\u4EE5\u4FDD\u5B58\u65F6\u95F4
solder.minStoreNum=\u6700\u5C0F\u5B58\u50A8\u91CF
solder.storeNum=\u5B58\u50A8\u91CF
pcb.validPeriod=\u6709\u6548\u671F
pcb.fixtureNumber=\u5939\u5177\u7F16\u53F7
pcb.family=Family
solder.updateTitle=\u9521\u818F\u8BE6\u60C5
pcb.updateTitle=PCB\u8BE6\u60C5
otherComponent.updateTitle=\u5176\u4ED6\u7269\u6599\u8BE6\u60C5
fixture.updateTitle=\u5939\u5177\u8BE6\u60C5
otherComponent.expensive=\u8D35\u91CD\u7269\u6599
fixture.type=\u5939\u5177\u7C7B\u578B
settings.showRange=\u663E\u793A\u8303\u56F4
settings.humiture=\u6E29\u6E7F\u5EA6
settings.pcbEmail=PCB\u8FC7\u671F\u90AE\u4EF6\u63D0\u9192
btn.test=\u6D4B\u8BD5
settings.api=API \u8BBE\u7F6E
settings.api.inNotifaction=\u5165\u5E93\u901A\u77E5
settings.api.outNotifaction=\u51FA\u5E93\u901A\u77E5
settings.pcbEmail.everyday=\u6BCF\u65E5
settings.pcbEmail.reminder=\u63D0\u9192
settings.pcbEmail.reminderDay=\u5929\u524D\u63D0\u9192
settings.pcbEmail.expire=PCB\u8FC7\u671F
settings.pcbEmail.adress=Emails (\u591A\u4E2A\u7528;\u53F7\u9694\u5F00)
barCodeSettings.rule=\u6761\u7801\u89C4\u5219
barCodeSettings.ruleNotes=\u8BF4\u660E\:\u5206\u5272\u7B26\u4E3A\u5355\u4E2A\u5B57\u7B26,\u53EF\u7528\u5B57\u6BB5\u6709\: PN\u4E3A\u7269\u6599\u7F16\u53F7\u5373 PartNumber, RI \u4E3A\u552F\u4E00\u7801\u5373ReelId,\u5F53\u552F\u4E00\u7801\u4E3A\u6761\u7801\u7684\u6240\u6709\u5185\u5BB9\u65F6\u4F7F\u7528[RI], QTY \u4E3A\u6570\u91CF, SP \u4E3A\u4F9B\u5E94\u5546, BATCH \u4E3A\u6279\u6B21, PRODATEyyyyMMdd\u4E3A\u751F\u4EA7\u65E5\u671F, EXPDATEyyyyMMdd\u4E3A\u8FC7\u671F\u65E5\u671F, xx\u6216\u7A7A\u4E3A\u65E0\u5BF9\u5E94\u7684\u5B57\u6BB5,\u5176\u4E2D\u5FC5\u987B\u542B\u6709PN\u548C RI, QTY\u4E3A\u7A7A\u65F6\u4F7F\u7528\u6863\u6848\u7684\u5C01\u88C5\u6570\u91CF
barCodeSettings.print=\u6761\u7801\u6253\u5370
barCodeSettings.print.pageSize=\u7EB8\u5F20\u5C3A\u5BF8
barCodeSettings.print.height=\u9AD8
barCodeSettings.print.width=\u5BBD
barcode.updateTitle=\u6761\u7801\u8BE6\u60C5
btn.view=\u67E5\u770B
runStatus.throughput=\u541E\u5410\u91CF
runStatus.alarmInfo=\u62A5\u8B66\u4FE1\u606F
runStatus.alarmTimes=\u62A5\u8B66\u6B21\u6570
runStatus.alarmLastTime=\u62A5\u8B66\u6301\u7EED\u65F6\u95F4
runStatus.minutes=\u5206\u949F
runStatus.times=\u6B21
select.all=\u6240\u6709
inOutList.in=\u5165\u5E93
inOutList.out=\u51FA\u5E93
inOutList.operate=\u64CD\u4F5C
inOutList.type=\u7C7B\u578B
inOutList.type.component=\u5143\u5668\u4EF6
inOutList.type.solder=\u9521\u818F
inOutList.type.pcb=PCB
inOutList.type.others=\u5176\u4ED6
inOutList.time=\u65F6\u95F4
inOutList.inOper=\u5165\u5E93\u4EBA
inOutList.outOper=\u51FA\u5E93\u4EBA
inOutList.inDate=\u5165\u5E93\u65F6\u95F4
inOutList.outDate=\u51FA\u5E93\u65F6\u95F4
alarmInfo.position=\u4F4D\u7F6E
alarmInfo.detail=\u62A5\u8B66\u8BE6\u60C5
alarmInfo.type=\u62A5\u8B66\u7C7B\u578B
alarmInfo.time=\u62A5\u8B66\u65F6\u95F4
alarmInfo.endTime=\u89E3\u9664\u65F6\u95F4
dataLog.status=\u72B6\u6001
dataLog.batch=\u6307\u5B9A\u6279\u6B21
dataLog.orderSource=\u6307\u4EE4\u6765\u6E90
inventory.lockTitle=\u9501\u5B9A/\u5E93\u5B58
inventory.find=\u67E5\u627E
specifiedBatch.name=\u540D\u79F0
specifiedBatch.bottom=\u7248\u5E95
specifiedBatch.top=\u7248\u9762
specifiedBatch.task=\u4EFB\u52A1
specifiedBatch.status=\u72B6\u6001
specifiedBatch.createDate=\u521B\u5EFA\u65E5\u671F
specifiedBatch.startIn=\u5F00\u59CB\u5165\u5E93
specifiedBatch.addOutTasks=\u52A0\u5165\u51FA\u5E93\u5217\u8868
specifiedBatch.stopIn=\u505C\u6B62\u5165\u5E93
inOutList.type.solderFixture=\u9521\u818F\u5939\u5177
inOutList.type.pcbFixture=PCB\u5939\u5177
storagePosFind.outSelect=\u51FA\u5E93\u6240\u9009\u4ED3\u4F4D
storagePosFind.outInaction=\u5446\u6EDE\u6599\u51FA\u5E93
storagePosFind.daysAgo=\u5929\u524D
storagePosFind.index=\u5E8F\u53F7
storagePosFind.inFixture=\u6240\u5728\u5939\u5177
inOutList.type.fixture=\u5939\u5177
barcode.produceDate=\u751F\u4EA7\u65E5\u671F
barcode.expireDate=\u8FC7\u671F\u65F6\u95F4
barcode.inStoreRemainTime=\u5728\u5E93/\u5269\u4F59\u65F6\u95F4
virtualStorage.taskList=\u4EFB\u52A1\u5217\u8868
virtualStorage.positionList=\u4ED3\u4F4D\u5217\u8868
virtualStorage.position=\u4F4D\u7F6E
dataReport.print=\u6253\u5370
dataReport.solderUsage=\u7269\u6599\u6D88\u8017\u91CF
dataReport.solderOverdue=\u9521\u818F\u8D85\u671F\u62A5\u5E9F\u6570\u91CF
dataReport.solderStock=\u9521\u818F\u5B9E\u65F6\u5E93\u5B58
dataReport.pcbStock=PCB\u5B9E\u65F6\u5E93\u5B58
dataReport.pcbOverdue=PCB\u8D85\u671F\u62A5\u5E9F\u6570\u91CF
dataReport.solderStock.warming=\u6B63\u5728\u56DE\u6E29
dataReport.solderStock.soonToExpire=\u5373\u5C06\u8FC7\u671F
dataReport.solderStock.invalid=\u5931\u6548
dataReport.overduePcb=\u8FC7\u671FPCB
runStatus.solderOutgoing=\u9521\u818F\u51FA\u5E93\u91CF
runStatus.pcbOutgoing=PCB\u51FA\u5E93\u91CF
runStatus.pcbWarehousing=PCB\u5165\u5E93\u91CF
runStatus.solderWarehousing=\u9521\u818F\u5165\u5E93\u91CF
show.desktop=\u7535\u8111
show.table=\u5E73\u677F
menu.system.maintenance=\u8BBE\u5907\u7EF4\u62A4
maintenance.device.1_device_inoutAxis=\u8FDB\u51FA\u8F74
maintenance.device.1_device_middleAxis=\u65CB\u8F6C\u8F74
maintenance.device.1_device_updownAxis=\u4E0A\u4E0B\u8F74
maintenance.nextTime=\u4E0B\u6B21\u7EF4\u62A4\u65F6\u95F4
maintenance.deviceName=\u8BBE\u5907\u540D\u79F0
maintenance.runTime=\u8FD0\u884C\u65F6\u957F
maintenance.status=\u5F53\u524D\u72B6\u6001
maintenance.status.0=\u505C\u6B62
maintenance.status.1=\u8FD0\u52A8\u4E2D
maintenance.device.1_device_batchAxis=\u6279\u91CF\u4E0A\u4E0B\u6599\u8F74
button.maintenance.finished=\u4FDD\u517B\u5B8C\u6210
settings.maintenanceDays=\u5907\u4EFD\u5468\u671F
settings.backupPath=\u5907\u4EFD\u8DEF\u5F84
settings.backupHours=\u5907\u4EFD\u5468\u671F
button.backup=\u5907\u4EFD
button.restore=\u8FD8\u539F
time.seconds=\u79D2
time.minutes=\u5206\u949F
time.hours=\u5C0F\u65F6
time.days=\u5929
system.backup.noPath=\u8BF7\u5148\u8BBE\u7F6E\u5907\u4EFD\u8DEF\u5F84
settings.backup.versions=\u7248\u672C\u5217\u8868
settings.restore.warning=\u8B66\u544A\:\u8FD8\u539F\u540E,\u7CFB\u7EDF\u5C06\u8FD8\u539F\u5230\u6B64\u7248\u672C,\u4E14\u8BE5\u64CD\u4F5C\u4E0D\u53EF\u6062\u590D\!\!\!
settings.restore.confirm=\u786E\u5B9A\u8981\u8FD8\u539F\u5230\u6B64\u7248\u672C
settings.restore.success=\u64CD\u4F5C\u6210\u529F
checkout.sucess=\u52A0\u5165\u51FA\u5E93\u4EFB\u52A1\u5217\u8868\u6210\u529F
runStatus.stockOut=\u51FA\u5E93\u91CF
runStatus.stockIn=\u5165\u5E93\u91CF
checkoutSettings.mode.produceDate=\u751F\u4EA7\u65E5\u671F\u4F18\u5148
\ No newline at end of file
......@@ -332,44 +332,10 @@ alarm.expire.title=Expire Alarm
alarm.expire.msg=The amount of expire material is [{0}]
client.inSuddenStop=Emergency Stop
client.NoAIr=No air signal
client.PreConnectFail=Startup failure\uFF1Apress Axis connect failed.
client.CloseError=Lock failed\uFF1Athe put in device is not closed.
client.startFail=Startup failure: emergency stop is not opened
client.startFailAir=Startup failure: no air pressure signal
client.InoutAlarm=The in out axis is alarm!
client.OpenAxisFail=Failed to open axis {0}
client.AutoReset=Resetting
client.AxisAlarm=Motion axis {0} alarm
client.OutStoreError=Providing format error{0}
client.WaitSingleTimeOut=Wait signal {0}={1} timeout
client.AxisHomeMoveAlarm=The movement {0} axis {1} receives the origin completion signal, the current position [{2}], the error is too large
client.AxisMoveAlarm=Movement {0} axis {1} target position [{2}] current position {3} error is too large
client.MoveTimeOut=[{0}]Timeout{1}[{2}]
client.XiLiaoError=Sucker suction failure
client.InStoreError=put in format error[barcode:{0}] pos:[{1}]
client.InStoreNoPosition=no pos found\uFF1Abarcode:[{0}] pos:[{1}]
client.WaitInstoreTimeOut=[{0}] timeout [wait to store][{1} seconds]
client.HasWare=there is a reel on the fork
client.NoCodeMsg=No barcode is found, please check the reel
client.InStoreNoCode=No barcode is found, send the reel out
client.MoveTimeOut_01=[{0}][motion]timeout\uFF0C{1} seconds waited
client.MoveTimeOut_02=[{0}][waiting IO signal]timeout\uFF0C{1} seconds waited
client.MoveTimeOut_03=[{0}][waiting time]timeout\uFF0C{1} seconds waited
client.MoveTimeOut_04=[{0}][target pos]timeout\uFF0C{1} seconds waited
client.MoveTimeOut_05=[{0}][press axis motion]timeout\uFF0C{1} seconds waited
client.MoveTimeOut_06=[{0}][origin signal]timeout\uFF0C{1} seconds waited
client.MoveTimeOut_07=[{0}][get height]timeout\uFF0C{1} seconds waited
client.MoveTimeOut_08=[{0}][waiting axis limit signal]timeout\uFF0C{1} seconds waited
client.MoveTimeOut_09=[{0}][waiting axis positive limit signal]timeout\uFF0C{1} seconds waited
client.MoveTimeOut_10=[{0}][loading axis stopping]timeout\uFF0C{1} seconds waited
client.MoveTimeOut_11=[{0}][scanning]timeout\uFF0C{1} seconds waited
client.MoveTimeOut_12=[{0}][putting/taking reel]timeout\uFF0C{1} seconds waited
client.MoveTimeOut_13=[{0}][send reel]timeout\uFF0C{1} seconds waited
settings.api.checkBarcode=Check Barcode
settings.api.orderFileDir=Order File Folder
settings.remind.title=Remind Setting
settings.remind.deadday=days dead metiral remind
shelf.btn.closeAll=Close All Lights
shelf.btn.posCheck=Database Check
......@@ -382,6 +348,13 @@ shelf.msg.noTask=Failed\: the material is in [{0}], but no task for it.
shelf.msg.outError=No material is found.
shelf.msg.inOk=Please put the material in the location [{0}]
shelf.msg.inError=No suitable location for [{0}] is found.
shelf.msg.hasReel=There position [{0}] already has material
shelf.msg.tipScanReel=Please scan the material to put in [{0}]
shelf.msg.fastop=Barcode operate is too fast
shelf.msg.scanPos=Please scan the position code
shelf.nextPos.hasTask=Next Position [{0}] already has task, please scan a new position code.
shelf.nextPos.hasReel=Next Position [{0}] already has material, please scan a new position code.
shelf.nextPos.wrongSize=Next Position [{0}] size [{1}] is different from material size [{2}] please scan a new position code.
order.out.set=set of materials
order.out.surplus=surplus material
......@@ -431,4 +404,5 @@ error.barcode.wrongPn=The partnumber is wrong
error.barcode.pnNotExist=x Component {0} does not exist
error.barcode.errorSize=x The reel has no size.
error.storage.noPosFind=No availble position is found.
msg.line.putIn=Put [{0}] into [{1}]
\ No newline at end of file
msg.line.putIn=Put [{0}] into [{1}]
delete.confirm=Are you sure to delete?
\ No newline at end of file
......@@ -320,42 +320,6 @@ batch.btn.singleIn=Single In
batch.btn.closeDoor=Close Door
client.inSuddenStop=Emergency Stop
client.NoAIr=No air signal
client.PreConnectFail=Startup failure\uFF1Apress Axis connect failed.
client.CloseError=Lock failed\uFF1Athe put in device is not closed.
client.startFail=Startup failure: emergency stop is not opened
client.startFailAir=Startup failure: no air pressure signal
client.InoutAlarm=The in out axis is alarm!
client.OpenAxisFail=Failed to open axis {0}
client.AutoReset=Resetting
client.AxisAlarm=Motion axis {0} alarm
client.OutStoreError=Providing format error{0}
client.WaitSingleTimeOut=Wait signal {0}={1} timeout
client.AxisHomeMoveAlarm=The movement {0} axis {1} receives the origin completion signal, the current position [{2}], the error is too large
client.AxisMoveAlarm=Movement {0} axis {1} target position [{2}] current position {3} error is too large
client.MoveTimeOut=[{0}]Timeout{1}[{2}]
client.XiLiaoError=Sucker suction failure
client.InStoreError=put in format error[barcode:{0}] pos:[{1}]
client.InStoreNoPosition=no pos found\uFF1Abarcode:[{0}] pos:[{1}]
client.WaitInstoreTimeOut=[{0}] timeout [wait to store][{1} seconds]
client.HasWare=there is a reel on the fork
client.NoCodeMsg=No barcode is found, please check the reel
client.InStoreNoCode=No barcode is found, send the reel out
client.MoveTimeOut_01=[{0}][motion]timeout\uFF0C{1} seconds waited
client.MoveTimeOut_02=[{0}][waiting IO signal]timeout\uFF0C{1} seconds waited
client.MoveTimeOut_03=[{0}][waiting time]timeout\uFF0C{1} seconds waited
client.MoveTimeOut_04=[{0}][target pos]timeout\uFF0C{1} seconds waited
client.MoveTimeOut_05=[{0}][press axis motion]timeout\uFF0C{1} seconds waited
client.MoveTimeOut_06=[{0}][origin signal]timeout\uFF0C{1} seconds waited
client.MoveTimeOut_07=[{0}][get height]timeout\uFF0C{1} seconds waited
client.MoveTimeOut_08=[{0}][waiting axis limit signal]timeout\uFF0C{1} seconds waited
client.MoveTimeOut_09=[{0}][waiting axis positive limit signal]timeout\uFF0C{1} seconds waited
client.MoveTimeOut_10=[{0}][loading axis stopping]timeout\uFF0C{1} seconds waited
client.MoveTimeOut_11=[{0}][scanning]timeout\uFF0C{1} seconds waited
client.MoveTimeOut_12=[{0}][putting/taking reel]timeout\uFF0C{1} seconds waited
client.MoveTimeOut_13=[{0}][send reel]timeout\uFF0C{1} seconds waited
settings.api.checkBarcode=Check Barcode
settings.api.orderFileDir=Order File Folder
user.cabinetAssign=Cabinet Assign
......@@ -427,4 +391,13 @@ error.barcode.pnNotExist=x Component {0} does not exist
error.barcode.errorSize=x The reel has no size.
error.storage.noStorage=There is no storage can use.
error.storage.noPosFind=No availble position is found.
msg.line.putIn=Put [{0}] into [{1}]
\ No newline at end of file
msg.line.putIn=Put [{0}] into [{1}]
shelf.msg.hasReel=There position [{0}] already has material
shelf.msg.tipScanReel=Please scan the material to put in [{0}]
shelf.msg.fastop=Barcode operate is too fast
shelf.msg.scanPos=Please scan the position code
shelf.nextPos.hasTask=Next Position [{0}] already has task, please scan a new position code.
shelf.nextPos.wrongSize=Next Position [{0}] size [{1}] is different from material size [{2}] please scan a new position code.
shelf.nextPos.hasReel=Next Position [{0}] already has material, please scan a new position code.
settings.remind.title=Remind Setting
settings.remind.deadday=days dead metiral remind
menu.home=\u9996\u9875
menu.workOrder=\u8F7B\u5DE5\u5355
menu.workOrder.search=\u5DE5\u5355\u67E5\u8BE2
menu.workOrder.new=\u65B0\u5EFA\u5DE5\u5355
menu.component=\u4EA7\u54C1\u7BA1\u7406
menu.component.bom=BOM\u7BA1\u7406
menu.component.search=\u6599\u4EF6\u6863\u6848\u7BA1\u7406
menu.component.inventory=\u5E93\u5B58\u7BA1\u7406
menu.cloud=\u7269\u6599\u4E91
menu.cloud.storage=\u4E91\u4ED3\u5E93
menu.cloud.checkOut=\u6599\u4EF6\u67E5\u627E\u51FA\u5E93
menu.barCode=\u6761\u5F62\u7801
menu.barCode.new=\u65B0\u5EFA\u6761\u7801
menu.barCode.search=\u6761\u7801\u67E5\u8BE2
menu.batch = \u6279\u6B21
menu.batch.feeder = \u7AD9\u4F4D\u5217\u8868
menu.batch.specifiedBatch=\u6307\u5B9A\u6279\u6B21
menu.user=\u6743\u9650\u7BA1\u7406
menu.user.account=\u8D26\u6237\u7BA1\u7406
menu.user.role=\u89D2\u8272\u7BA1\u7406
menu.help=\u5E2E\u52A9
menu.dataLog.search=\u65E5\u5FD7\u7BA1\u7406
menu.boxManager=\u6599\u4ED3\u7BA1\u7406
top.menu.profile=\u8D44\u6599\u7F16\u8F91
top.menu.logout=\u6CE8\u9500
home.kanban=\u770B\u677F
home.chart.component=\u6599\u4EF6\u5206\u5E03
home.chart.component.overview=\u6982\u89C8
home.chart.component.componentAmount=\u6570\u91CF
home.chart.component.positionNum=\u6240\u5360\u4ED3\u4F4D
home.chart.storage=\u4ED3\u4F4D\u5229\u7528\u7387
home.chart.storage.total=\u603B\u4ED3\u4F4D\u6570
home.chart.storage.useage=\u5DF2\u4F7F\u7528
home.chart.storage.empty=\u7A7A\u95F2
workOrder.title=\u5DE5\u5355\u7BA1\u7406
workOrder.subtitle=\u67E5\u627E\u5DE5\u5355
workOrder.update.title=\u5DE5\u5355\u7BA1\u7406
workOrder.update.subtitle=\u5DE5\u5355\u8BE6\u60C5
workOrder.list=\u5DE5\u5355\u5217\u8868
workOrder.saveSuccess=\u5DE5\u5355\u4FDD\u5B58\u6210\u529F
workOrder.deleteSuccess=\u5DE5\u5355\u5220\u9664\u6210\u529F
workOrder.checkoutSuccess=\u5DE5\u5355\u51FA\u5E93\u6210\u529F
workOrder.workOrder=\u5DE5\u5355
workOrder.name=\u5DE5\u5355\u53F7
workOrder.amount=\u6570\u91CF
workOrder.error.amount=\u5DE5\u5355\u6570\u91CF\u5FC5\u987B\u5927\u4E8E0
checkOut.componentName=\u6599\u4EF6\u540D\u79F0
checkOut.pos=\u4ED3\u4F4D
checkOut.operate=\u64CD\u4F5C
component.search.subtitle=\u6599\u4EF6\u5217\u8868
component.list=\u6599\u4EF6\u5217\u8868
component.update.subtitle=\u6599\u4EF6\u8BE6\u60C5
component.item.name=\u6599\u4EF6
component.name=\u6599\u4EF6\u540D\u79F0
component.partNumber=\u6599\u4EF6\u7F16\u53F7
component.plateSize=\u6599\u76D8\u5C3A\u5BF8
component.height=\u6599\u76D8\u9AD8\u5EA6
component.amount=\u5C01\u88C5\u6570\u91CF
component.encapsulation=\u5C01\u88C5
component.unit=\u5355\u4F4D
component.unitCost=\u5355\u8017
component.provider=\u4F9B\u5E94\u5546
component.providerNumber=\u4F9B\u5E94\u5546\u7F16\u53F7
component.producer=\u5382\u5546
component.producerNumber=\u5382\u5546\u7F16\u53F7
component.msl=MSL \u7B49\u7EA7
component.productionType=\u5143\u5668\u4EF6\u578B\u53F7
component.description=\u6599\u4EF6\u63CF\u8FF0
component.partNumber.exist=\u6599\u4EF6\u7F16\u53F7\u5DF2\u5B58\u5728
component.pic=\u56FE\u7247
component.saveSuccess=\u6599\u4EF6\u4FDD\u5B58\u6210\u529F
component.deleteSuccess=\u6599\u4EF6\u5220\u9664\u6210\u529F
component.name.empty=\u6599\u4EF6\u540D\u4E0D\u80FD\u4E3A\u7A7A
component.partNumber.empty=\u6599\u4EF6\u7F16\u53F7\u4E0D\u80FD\u4E3A\u7A7A
component.error.bomUsed=\u6599\u4EF6\u5DF2\u88ABBOM\u4F7F\u7528\uFF0C\u65E0\u6CD5\u5220\u9664
component.error.notExist=\u6599\u4EF6{0}\u4E0D\u5B58\u5728\uFF0C\u8BF7\u68C0\u67E5\u6570\u636E\u662F\u5426\u6B63\u786E\u3002
component.error.notFound=\u65E0\u6CD5\u627E\u5230\u6B64\u6599\u4EF6
component.smdAlarmValue=SMD\u9884\u8B66\u503C
barcode.search.subtitle=\u6761\u7801\u67E5\u627E
barcode.item.name=\u6761\u7801
barcode.print=\u6253\u5370
barcode.update.subtitle=\u6761\u7801\u8BE6\u60C5
barcode.barcode=\u6761\u7801\u7F16\u53F7
barcode.partNumber=\u6599\u4EF6\u7F16\u53F7
barcode.amount=\u6570\u91CF
barcode.plateSize=\u6599\u76D8\u5C3A\u5BF8
barcode.height=\u6599\u76D8\u9AD8\u5EA6
barcode.provider=\u4F9B\u5E94\u5546
barcode.batch=\u6279\u6B21
barcode.expireDate=\u8FC7\u671F\u65E5\u671F
barcode.saveSuccess=\u6761\u7801\u4FE1\u606F\u4FDD\u5B58\u6210\u529F
barcode.deleteSuccess=\u6761\u7801\u4FE1\u606F\u5220\u9664\u6210\u529F
barcode.storage.input=\u8BF7\u8F93\u5165\u5165\u5E93\u6761\u7801
barcode.error.unique=\u6761\u7801{0}\u5DF2\u88AB\u4F7F\u7528
barcode.error.empty=\u6761\u7801\u4E3A\u7A7A\uFF0C\u8BF7\u68C0\u67E5\u6761\u7801\u6570\u636E\u662F\u5426\u6B63\u786E
barcode.error.partNumber.empty=\u6761\u7801{0}\u5173\u8054\u7684\u6599\u4EF6\u4E3A\u7A7A\uFF0C\u8BF7\u68C0\u67E5\u6570\u636E\u662F\u5426\u6B63\u786E
barcode.error.amount.negative=\u6761\u7801{0}\u5173\u8054\u7684\u6599\u4EF6\u6570\u91CF\u5FC5\u987B\u5927\u4E8E0
barcode.error.component.notExist=\u6761\u7801{0}\u5173\u8054\u7684\u6599\u4EF6\u4E0D\u5B58\u5728\uFF0C\u8BF7\u68C0\u67E5\u6570\u636E\u662F\u5426\u6B63\u786E\u3002
barcode.error.notExist=\u6761\u7801{0}\u4E0D\u5B58\u5728
barcode.error.inStorage=\u6761\u7801{0}\u5DF2\u5728\u5E93\u4E2D
barcode.error.slotExist=\u6761\u7801\u5BF9\u5E94\u7684\u6599\u4EF6\u672A\u5165\u5E93
barcode.memo=\u5907\u6CE8
dataLog.operator=\u64CD\u4F5C\u4EBA
storage.search.subtitle=\u6599\u4ED3\u67E5\u627E
storage.item.name=\u6599\u4ED3
storage.slotAmount=\u4ED3\u4F4D\u6570\u91CF
storage.update.subtitle=\u6599\u4ED3\u8BE6\u60C5
storage.status=\u72B6\u6001
storage.chart.temperature=\u6E29\u5EA6
storage.chart.humidity=\u6E7F\u5EA6
storage.status.1=\u8BBE\u5907\u8054\u673A
storage.status.2=\u6025\u505C
storage.status.3=\u6545\u969C\u4E2D
storage.status.4=\u8B66\u544A
storage.status.5=\u8C03\u8BD5\u4E2D
storage.status.6=\u5165\u5E93\u6267\u884C\u4E2D
storage.status.7=\u6599\u76D8\u5165\u4ED3\u4F4D\u5B8C\u6210
storage.status.8=\u5165\u5E93\u5931\u8D25
storage.status.9=\u51FA\u5E93\u6267\u884C\u4E2D
storage.status.10=\u51FA\u4ED3\u4F4D\u5B8C\u6210
storage.status.11=\u51FA\u5E93\u5B8C\u6210
storage.status.12=\u79FB\u683D\u4E2D
storage.status.13=\u539F\u70B9\u8FD4\u56DE\u4E2D
sotrage.status.999=\u79BB\u7EBF
storage.type=\u7C7B\u578B
storage.type.auto=\u5355\u53F0\u81EA\u52A8
storage.type.manual=\u624B\u52A8
storage.type.line=\u6D41\u6C34\u7EBF
storage.type.virtual=\u865A\u62DF\u4ED3
storage.type.online=\u5728\u7EBF\u4ED3(\u4E0A\u4E0B\u5C42)
storage.type.batch=\u6279\u91CF\u6599\u4ED3
storage.type.shelf=\u667A\u80FD\u6599\u67B6
storage.type.cabinet=\u667A\u80FD\u6599\u67DC
storage.compatibility=\u517C\u5BB9\u6027
storage.enable=\u662F\u5426\u53EF\u7528
storage.enable.yes=\u662F
storage.enable.no=\u5426
storage.enable.prohibit=\u7981\u7528
storage.enable.enable=\u542F\u7528
storage.posSize=\u4ED3\u4F4D\u5C3A\u5BF8
storage.clearPos=\u6E05\u7A7A\u4ED3\u4F4D
storage.clearAllPos=\u6E05\u7A7A\u6240\u6709\u4ED3\u4F4D
storage.clearPos.msg=\u6B64\u64CD\u4F5C\u4F1A\u6E05\u7A7A\u6240\u6709\u4ED3\u4F4D\u4E2D\u7684\u5E93\u5B58,\u4E14\u4E0D\u53EF\u6062\u590D,\u8BF7\u786E\u4FDD\u6599\u4ED3\u4E2D\u7684\u7269\u6599\u5DF2\u53D6\u51FA. \u786E\u5B9A\u8981\u6E05\u7A7A\u6240\u6709\u4ED3\u4F4D\u5417\uFF1F
storage.match.exactMatch=\u5B8C\u5168\u5339\u914D
storage.match.fullyCompatible=\u5B8C\u5168\u517C\u5BB9
storage.match.sizeCompatible=\u540C\u5C3A\u5BF8\u517C\u5BB9
storage.name=\u540D\u79F0
storage.cid=\u5BA2\u6237\u7AEF\u7F16\u53F7
storage.boxCount=Box\u6570\u91CF
storage.slotList=\u4ED3\u4F4D\u5217\u8868
storagePos.name=\u4ED3\u4F4D\u7F16\u53F7
storagePos.priority=\u4F18\u5148\u7EA7
storagePos.width=\u5BBD\u5EA6
storagePos.height=\u9AD8\u5EA6
storagePos.layer=\u5C42\u6570
storagePos.update=\u8BF7\u66F4\u65B0\u4ED3\u4F4D\u4FE1\u606F
storagePos.saveSuccess=\u4ED3\u4F4D\u4FE1\u606F\u4FDD\u5B58\u6210\u529F
storage.saveSuccess=\u6599\u4ED3\u4FE1\u606F\u4FDD\u5B58\u6210\u529F
storage.error.notExist=\u4ED3\u5E93\u4E0D\u5B58\u5728\uFF0C\u8BF7\u65B0\u5EFA\u4ED3\u4F4D\u540E\u64CD\u4F5C
storage.error.unique=\u4ED3\u5E93\u540D\u5DF2\u88AB\u4F7F\u7528\uFF0C\u8BF7\u6539\u540D\u540E\u91CD\u65B0\u4FDD\u5B58
storage.error.full=\u4ED3\u5E93\u5DF2\u6EE1\uFF0C\u8BF7\u66F4\u6362\u4ED3\u5E93\u540E\u518D\u5B58\u50A8
storage.error.cidUnique=\u4ED3\u5E93\u5BA2\u6237\u7AEF\u7F16\u53F7\u5FC5\u987B\u4E3A\u552F\u4E00
errors.upload.fileNotExist=\u4E0A\u4F20\u7684\u6587\u4EF6\u4E0D\u5B58\u5728\uFF0C\u8BF7\u91CD\u65B0\u4E0A\u4F20
button.add=\u65B0\u589E
button.return=\u8FD4\u56DE\u5217\u8868
button.delete=\u5220\u9664
button.edit=\u7F16\u8F91
button.save=\u4FDD\u5B58
button.upload=\u4E0A\u4F20
button.view=\u67E5\u770B
button.reset=\u91CD\u7F6E
button.search=\u67E5\u8BE2
button.cancel=\u53D6\u6D88
button.putin=\u5165\u5E93
button.checkout=\u51FA\u5E93
button.uploadFile=\u4E0A\u4F20\u6570\u636E\u6587\u4EF6
button.end=\u7ED3\u675F
file.title=\u8BF7\u4E0A\u4F20\u6570\u636E\u6587\u4EF6
authority.component.manage=\u6599\u4EF6\u7BA1\u7406
authority.bom.manage= BOM \u7BA1\u7406
authority.workorder.manage=\u5DE5\u5355\u7BA1\u7406
authority.barcode.manage=\u6761\u7801\u7BA1\u7406
authority.storage.manage=\u6599\u4ED3\u7BA1\u7406
authority.role.manage=\u89D2\u8272\u7BA1\u7406
authority.user.manage=\u7528\u6237\u7BA1\u7406
authority.stockOut=\u51FA\u5165\u5E93
authority.feeder=\u5DE5\u5355\u7BA1\u7406
authority.specifiedBatch=\u6307\u5B9A\u6279\u6B21\u7BA1\u7406
authority.virtual=\u865A\u62DF\u4ED3\u7BA1\u7406
authority.feeder.view=\u5DE5\u5355\u67E5\u770B
authority.valuable.out=\u8D35\u91CD\u7269\u6599\u51FA\u5E93
authority.dataLog=\u8FD0\u884C\u6570\u636E
error.save=\u4FDD\u5B58\u51FA\u9519,\u8BF7\u68C0\u67E5
role.search.subtitle=\u89D2\u8272\u5217\u8868
role.update.subtitle=\u89D2\u8272\u8BE6\u60C5
role.update.name=\u89D2\u8272\u540D\u79F0
role.update.description=\u63CF\u8FF0
role.update.authorities=\u6743\u9650
required.role.authorities=\u81F3\u5C11\u9009\u62E9\u4E00\u4E2A\u6743\u9650
user.item.name=\u7528\u6237
user.search.subtitle=\u67E5\u627E\u7528\u6237
user.search.param=\u67E5\u627E\u5173\u952E\u5B57
user.update.subtitle=\u7528\u6237\u8BE6\u60C5
user.username=\u7528\u6237\u540D
user.initPwd=\u521D\u59CB\u5BC6\u7801
user.password=\u5BC6\u7801
user.firstName=\u540D
user.lastName=\u59D3
user.fullName=\u59D3\u540D
user.role=\u89D2\u8272
user.language=\u8BED\u8A00
user.email=\u90AE\u7BB1
user.authCode=\u6388\u6743\u7801
user.writeCard=\u5199\u5165\u5361\u7247
user.profile.edit=\u8D44\u6599\u7F16\u8F91
profile.password.subtitle=\u4FEE\u6539\u5BC6\u7801
updatePassword.currentPassword.label=\u5F53\u524D\u5BC6\u7801
updatePassword.newPassword.label=\u65B0\u5BC6\u7801
updatePassword.invalidPassword=\u4F60\u8F93\u5165\u7684\u5F53\u524D\u5BC6\u7801\u4E0D\u6B63\u786E
updatePassword.success=\u5BC6\u7801\u66F4\u65B0\u6210\u529F
updatePassword.changePasswordButton=\u66F4\u65B0\u5BC6\u7801
updatePassword.changePasswordLink = \u4FEE\u6539\u5BC6\u7801
menu.area.search=\u533A\u57DF
area.search.subtitle=\u533A\u57DF\u5217\u8868
area.name=\u533A\u57DF\u540D\u79F0
area.storages=\u6599\u4ED3
area.putInEndTime=\u5165\u5E93\u622A\u6B62\u65F6\u95F4
area.view.subtitle=\u533A\u57DF\u76D1\u63A7
area.item.name=\u533A\u57DF
option.none=----\u8BF7\u9009\u62E9----
storage.area=\u533A\u57DF
storage.name.empty=\u6599\u4ED3\u540D\u79F0\u4E0D\u80FD\u4E3A\u7A7A
storage.area.empty=\u6599\u4ED3\u6240\u5C5E\u533A\u57DF\u4E0D\u80FD\u4E3A\u7A7A
component.auto.scancode=\u626B\u7801\u586B\u5199
component.plate.size=\u6599\u76D8\u5C3A\u5BF8
component.amount.empty=\u6570\u91CF\u4E0D\u80FD\u4E3A\u7A7A
component.plateSize.empty=\u6599\u76D8\u5C3A\u5BF8\u4E0D\u80FD\u4E3A\u7A7A
component.height.empty=\u6599\u76D8\u9AD8\u5EA6\u4E0D\u80FD\u4E3A\u7A7A
plate.size.customer=\u81EA\u5B9A\u4E49\u5C3A\u5BF8
datetime.pattern=yyyy-MM-dd HH:mm
date.format=yyyy-MM-dd
button.addto.checkout=\u52A0\u5165\u5230\u51FA\u5E93\u961F\u5217
dataLog.search.subtitle=\u51FA\u5165\u5E93\u65E5\u5FD7
dataLog.partNumber=\u6599\u4EF6\u7F16\u7801
dataLog.storageName=\u6599\u4ED3\u540D\u79F0
dataLog.num=\u6570\u91CF
dataLog.type=\u7C7B\u578B
dataLog.date=\u65E5\u671F
dataLog.item.name=\u51FA\u5165\u5E93\u65E5\u5FD7
dataLog.checkout={0}[\u6570\u91CF:{1}]\u4ECE[{2}]\u51FA\u5E93
dataLog.putIn={0}[\u6570\u91CF:{1}]\u5165\u5E93\u5230[{2}]
dataLog.list=\u65E5\u5FD7\u5217\u8868
cabinet.card=\u8BF7\u5237\u5361
cabinet.exit=\u9000\u51FA
cabinet.pos=\u5F53\u524D\u4ED3\u4F4D
cabinet.in=\u5165\u6599
cabinet.out=\u51FA\u6599
cabinet.error.validOp=\u975E\u6CD5\u64CD\u4F5C:\u65E0\u6CD5\u5F00\u95E8
cabinet.error.openMoreDoor=\u65E0\u6CD5\u540C\u65F6\u6253\u5F00\u591A\u4E2A\u67DC\u95E8
cabinet.error.noCard=\u975E\u6CD5\u64CD\u4F5C: \u672A\u5237\u5361,\u65E0\u6CD5\u5F00\u95E8
cabinet.error.posError=\u975E\u6CD5\u64CD\u4F5C: \u672A\u627E\u5230\u67DC\u95E8
cabinet.error.noAuth=\u65E0\u6743\u64CD\u4F5C,\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458
cabinet.error.noCode=\u6761\u7801\u4E0D\u5B58\u5728
cabinet.error.noPos=\u5E93\u4F4D\u4E0D\u5B58\u5728
cabinet.msg.closeDoor=\u5173\u95E8\u540E\u64CD\u4F5C\u81EA\u52A8\u7ED3\u675F
cabinet.msg.finish=\u64CD\u4F5C\u5B8C\u6210
op.1=\u5165\u5E93
op.2=\u51FA\u5E93
op.status.none=
op.status.wait=\u7B49\u5F85\u4E2D
op.status.executing=\u6B63\u5728\u6267\u884C
op.status.pause=\u5DF2\u6682\u505C
op.status.finished=\u5DF2\u5B8C\u6210
op.status.cancel=\u5DF2\u53D6\u6D88
op.status.end=\u5DF2\u7ED3\u675F
boxChart.confirm=\u786E\u8BA4\u5165\u5E93
boxChart.rescan=\u91CD\u65B0\u626B\u7801
boxChart.pcbIn=PCB \u5165\u5E93
boxChart.pcbOut=PCB \u51FA\u5E93
boxChart.solderOut=\u9521\u818F\u51FA\u5E93
boxChart.solderIn=\u9521\u818F\u5165\u5E93
boxChart.noCode=\u672A\u626B\u63CF\u5230\u6761\u7801
authority.stockIn.more=\u8D85\u989D\u5165\u5E93
chart.showType.YEAR=\u5E74\u4EFD
chart.showType.MONTH=\u6708\u4EFD
chart.showType.DAY=\u5929
alarm.humidity.msg=\u6E7F\u5EA6\: {0} \u8D85\u51FA\u8303\u56F4[{1}-{2}]
alarm.temperature.msg=\u6E29\u5EA6\: {0} \u8D85\u51FA\u8303\u56F4[{1}-{2}]
batch.btn.singleOut=\u5355\u76D8\u51FA\u5E93
batch.btn.batchOut=\u6279\u91CF\u51FA\u5E93
batch.btn.singleIn=\u5355\u76D8\u5165\u5E93
batch.btn.closeDoor=\u5173\u95ED\u4ED3\u95E8
settings.api.checkBarcode=\u6761\u7801\u68C0\u67E5 API
settings.api.orderFileDir=\ \u5DE5\u5355\u6587\u4EF6\u5939
user.cabinetAssign=\u6599\u67DC\u5206\u914D
cabinet.error.wrongPos=\u8BE5\u7269\u6599\u4E0D\u5728\u6B64\u4F4D\u7F6E
cabinet.error.noOp=\u5F00\u95E8\u671F\u95F4\u65E0\u51FA\u5165\u5E93\u64CD\u4F5C
alarm.store.msg={0} \u7684\u5E93\u5B58\u91CF[{1}]\u8D85\u51FA\u8BBE\u7F6E\u8303\u56F4 [{2}-{3}]
alarm.store.title=\u5E93\u5B58\u9884\u8B66
alarm.inaction.title=\u5446\u6EDE\u7269\u6599\u63D0\u9192
alarm.inaction.msg={0}\u5929\u524D\u5446\u6EDE\u7269\u6599\u6570\u91CF\u4E3A[{1}],\u8BF7\u53CA\u65F6\u5904\u7406
alarm.expire.title=\u8FC7\u671F\u63D0\u9192
alarm.expire.msg=\u5373\u5C06\u6216\u5DF2\u8FC7\u671F\u7269\u6599\u6570\u91CF\u4E3A[{0}],\u8BF7\u53CA\u65F6\u5904\u7406
component.validDay=\u6709\u6548\u671F(\u5929)
shelf.btn.closeAll=\u5173\u95ED\u6240\u6709\u706F
shelf.btn.posCheck=\u5E93\u4F4D\u68C0\u67E5
shelf.size.title=\u9009\u62E9\u6599\u76D8\u5C3A\u5BF8
shelf.msg.opSucess=\u64CD\u4F5C\u6210\u529F
shelf.msg.notFound=\u672A\u627E\u5230\u6599\u67B6
shelf.msg.outError=\u64CD\u4F5C\u5931\u8D25,\u672A\u627E\u5230\u53EF\u4EE5\u51FA\u5E93\u7684\u7269\u6599
shelf.msg.outOk=\u64CD\u4F5C\u6210\u529F,\u8BF7\u4ECE\u5E93\u4F4D[{0}]\u4E2D\u53D6\u51FA\u7269\u6599
shelf.msg.inOk=\u64CD\u4F5C\u6210\u529F,\u8BF7\u653E\u5165\u5E93\u4F4D[{0}]
shelf.msg.inError=\u672A\u627E\u5230\u9002\u5408[{0}]\u7684\u5E93\u4F4D
shelf.msg.outConfirm=\u5E93\u4F4D[{0}]\u51FA\u5E93\u5B8C\u6210.
shelf.msg.noTask=\u64CD\u4F5C\u5931\u8D25,\u5DF2\u5728\u5E93\u4F4D[{0}]\u4E2D,\u672A\u627E\u5230\u5BF9\u5E94\u7684\u51FA\u5E93\u4EFB\u52A1
component.generateBarcode=\u751F\u6210\u6761\u7801
order.out.set=\u5957\u6599\u51FA\u5E93
order.out.surplus=\u5C3E\u6599\u51FA\u5E93
order.inventory=\u5E93\u5B58
export.csv=\u5BFC\u51FA\u5230CSV
workOrder.date=\u65E5\u671F
workOrder.waitOut=\u7B49\u5F85\u51FA\u5E93
workOrder.setExecute=\u5957\u6599\u51FA\u5E93\u4E2D
workOrder.setFinish=\u5957\u6599\u5DF2\u5B8C\u6210
workOrder.surplusExecute=\u5C3E\u6599\u51FA\u5E93\u4E2D
workOrder.surplusFinish=\u5C3E\u6599\u5DF2\u5B8C\u6210
workOrder.supplementaryExecute=\u8865\u6599\u4E2D
workOrder.supplementaryFinish=\u8865\u6599\u5B8C\u6210
storage.virtual.addPos=\u589E\u52A0\u4ED3\u4F4D
storage.virtual.pnlimit=\u6307\u5B9A\u7269\u7F16
storage.virtual.numlimit=\u53EF\u653E\u6599\u76D8\u6570\u91CF
storage.virtual.pnEmpty=\u6307\u5B9A\u7269\u7F16\u4E0D\u80FD\u4E3A\u7A7A
storage.virtual.posEmpty=\u4ED3\u4F4D\u7F16\u53F7\u4E0D\u80FD\u4E3A\u7A7A
storage.virtual.numEmpty=\u53EF\u653E\u6599\u76D8\u6570\u91CF\u4E0D\u80FD\u4E3A\u7A7A
storage.virtual.numErrory=\u53EF\u653E\u6599\u76D8\u6570\u91CF\u5FC5\u987B\u4E3A\u5927\u4E8E0\u7684\u6570\u5B57
stroage.error.merge=\u5408\u5E76\u5E93\u4F4D\u4EC5\u9002\u7528\u7684\u667A\u80FD\u6599\u67B6
barcode.error.noRi=\u7F16\u7801\u89C4\u5219\u4E2D\u5FC5\u987B\u5305\u542B RI \u548C PN
barcode.error.notFound=\u672A\u627E\u5230\u76F8\u5173\u6761\u7801
error.pos.inQueue=\u4F4D\u7F6E[{0}]\u5DF2\u5728\u64CD\u4F5C\u961F\u5217\u4E2D,\u64CD\u4F5C\u5931\u8D25
error.barcode.inQueue=\u4E8C\u7EF4\u7801\:[{0}]\u5DF2\u5728\u64CD\u4F5C\u961F\u5217\u4E2D,\u64CD\u4F5C\u5931\u8D25
error.barcode.empty=\u672A\u626B\u63CF\u5230\u6761\u7801
error.barcode.many=\u53D1\u73B0\u591A\u4E2A\u6709\u6548\u6761\u7801
error.storage.unavailable=\u6599\u4ED3[{0}]\u4E0D\u53EF\u7528
error.storage.noPos=\u65E0\u53EF\u7528\u7684\u6599\u683C[{0}],\u65E0\u6CD5\u7EE7\u7EED\u653E\u5165
error.storage.noPosFind=\u672A\u627E\u5230\u53EF\u7528\u7684\u4ED3\u4F4D
error.barcode.wrongSize=\u6599\u76D8\u5C3A\u5BF8[{0}]\u4E0D\u7B26
error.barcode.executing=\u6761\u7801[{0}]\u7684\u4EFB\u52A1\u6B63\u5728\u6267\u884C
error.pos.notExist=\u5E93\u4F4D\u3010{0}\u3011\u4E0D\u5B58\u5728,\u65E0\u6CD5\u5165\u5E93
error.pos.hasReel=\u5E93\u4F4D\u3010{0}\u3011\u4E2D\u5DF2\u6709\u7269\u6599,\u65E0\u6CD5\u5165\u5E93
error.pos.wrong=\u5E93\u4F4D\u3010{0}\u3011\u4E0E\u6599\u4ED3[{1}]\u4E0D\u5339\u914D,\u65E0\u6CD5\u5165\u5E93
error.pos.sizeNotMatch=\u6599\u76D8\u5C3A\u5BF8[{0}]\u4E0E\u5E93\u4F4D{1}\u5C3A\u5BF8[{2}]\u4E0D\u7B26,\u65E0\u6CD5\u5165\u5E93
error.barcode.invalid={0} \u4E0D\u662F\u6709\u6548\u7684\u6761\u7801
error.barcode.expired=\u7269\u6599\u5DF2\u8FC7\u671F,\u65E0\u6CD5\u5165\u5E93.
error.barcode.wrongQty=\u6599\u76D8[{0}]\u6570\u91CF[{1}]\u9519\u8BEF.
error.barcode.inStorage=\u6599\u76D8[0]\u5DF2\u5728\u6599\u4ED3[1]\u7684\u5E93\u4F4D[2]\u4E2D
error.barcode.noRule=\u6761\u7801\u89E3\u6790\u89C4\u5219\u672A\u5B9A\u4E49
error.barcode.wrongLength=\u6761\u7801[{0}]\u957F\u5EA6\u9519\u8BEF
error.barcode.noField=\u6761\u7801\u89E3\u6790\u5931\u8D25,\u672A\u627E\u5230{0}\u5B57\u6BB5
error.barcode.wrongPn=PartNumber\u4E0D\u4E00\u81F4
error.barcode.pnNotExist=x\u6863\u6848 {0} \u4E0D\u5B58\u5728
error.barcode.errorSize=x \u6599\u76D8\u672A\u8BBE\u7F6E\u5C3A\u5BF8
error.storage.noStorage=\u65E0\u53EF\u7528\u7684\u6599\u4ED3
msg.line.putIn=[{0}]\u51C6\u5907\u5165\u5E93\u5230[{1}]
shelf.msg.hasReel=\u5E93\u4F4D[{0}]\u4E2D\u5DF2\u6709\u7269\u6599
shelf.msg.tipScanReel=\u5E93\u4F4D[{0}]\u64CD\u4F5C\u6210\u529F,\u8BF7\u626B\u63CF\u8981\u653E\u5165\u7684\u7269\u6599
shelf.msg.fastop=\u6761\u7801\u64CD\u4F5C\u9891\u7E41,\u8BF7\u7A0D\u540E\u518D\u8BD5
shelf.msg.scanPos=\u8BF7\u5148\u626B\u63CF\u5E93\u4F4D\u7801
shelf.nextPos.hasTask=\u4E0B\u4E00\u5E93\u4F4D[{0}]\u5DF2\u6709\u4EFB\u52A1,\u8BF7\u91CD\u65B0\u626B\u63CF\u5E93\u4F4D\u7801
shelf.nextPos.wrongSize=\u4E0B\u4E00\u5E93\u4F4D[{0}]\u5C3A\u5BF8[{1}]\u4E0E\u6599\u76D8\u5C3A\u5BF8[{2}]\u4E0D\u7B26,\u8BF7\u91CD\u65B0\u626B\u63CF\u5E93\u4F4D\u7801
shelf.nextPos.hasReel=\u4E0B\u4E00\u5E93\u4F4D[{0}]\u5DF2\u6709\u7269\u6599,\u8BF7\u91CD\u65B0\u626B\u63CF\u5E93\u4F4D\u7801
settings.remind.title=\u63D0\u9192\u8BBE\u7F6E
settings.remind.deadday=\u5929\u524D\u5446\u6EDE\u7269\u6599\u63D0\u9192
\ No newline at end of file
......@@ -317,42 +317,6 @@ batch.btn.batchOut=\u6279\u91CF\u51FA\u5E93
batch.btn.singleIn=\u5355\u76D8\u5165\u5E93
batch.btn.closeDoor=\u5173\u95ED\u4ED3\u95E8
client.inSuddenStop=\u6536\u5230\u6025\u505C\u4FE1\u53F7,\u62A5\u8B66\u6025\u505C
client.NoAIr=\u672A\u68C0\u6D4B\u5230\u6C14\u538B\u4FE1\u53F7
client.PreConnectFail=\u542F\u52A8\u5931\u8D25\uFF1A\u538B\u7D27\u8F74\u8FDE\u63A5\u5931\u8D25
client.CloseError=\u9501\u95E8\u5931\u8D25\uFF1A\u8BF7\u5148\u5173\u95ED\u4E0A\u6599\u673A\u6784
client.startFail=\u542F\u52A8\u5931\u8D25\uFF1A\u6025\u505C\u672A\u5F00
client.startFailAir=\u542F\u52A8\u5931\u8D25:\u6CA1\u6709\u6C14\u538B\u4FE1\u53F7
client.InoutAlarm=\u8FDB\u51FA\u8F74\u62A5\u8B66\uFF01\u590D\u4F4D\u5931\u8D25\uFF0C\u8BF7\u68C0\u67E5!
client.OpenAxisFail=\u6253\u5F00\u8F74{0}\u5931\u8D25
client.AutoReset=\u6536\u5230\u590D\u4F4D\u4FE1\u53F7\uFF0C\u81EA\u52A8\u590D\u4F4D
client.AxisAlarm=\u8FD0\u52A8\u8F74{0}\u62A5\u8B66
client.OutStoreError=\u51FA\u5E93\u683C\u5F0F\u9519\u8BEF{0}
client.WaitSingleTimeOut=\u7B49\u5F85\u4FE1\u53F7{0}={1}\u8D85\u65F6
client.AxisHomeMoveAlarm=\u8FD0\u52A8{0}\u8F74{1}\u6536\u5230\u539F\u70B9\u5B8C\u6210\u4FE1\u53F7\uFF0C\u5F53\u524D\u4F4D\u7F6E[{2}]\uFF0C\u8BEF\u5DEE\u8FC7\u5927\uFF0C\u9700\u8981\u62A5\u8B66
client.AxisMoveAlarm=\u8FD0\u52A8{0}\u8F74{1}\u76EE\u6807\u4F4D\u7F6E[{2}]\u5F53\u524D\u4F4D\u7F6E{3}\u8BEF\u5DEE\u8FC7\u5927\uFF0C\u9700\u8981\u62A5\u8B66
client.MoveTimeOut=[{0}]\u8D85\u65F6{1}[{2}]\u79D2
client.XiLiaoError=\u5438\u76D8\u5438\u6599\u5931\u8D25
client.InStoreError=\u5165\u5E93\u5E93\u4F4D\u683C\u5F0F\u9519\u8BEF\uFF1A\u6761\u7801[{0}]\u5E93\u4F4D\u53F7[{1}]
client.InStoreNoPosition=\u5165\u5E93\u672A\u627E\u5230\u5E93\u4F4D\uFF1A\u6761\u7801[{0}]\u5E93\u4F4D\u53F7[{1}]
client.WaitInstoreTimeOut[{0}]\u8D85\u65F6[\u7B49\u5F85\u53EF\u4EE5\u5165\u5E93][{1}\u79D2]
client.HasWare=\u53C9\u5B50\u6599\u76D8\u68C0\u6D4B\u6709\u6599\uFF0C\u8BF7\u68C0\u67E5
client.NoCodeMsg=\u672A\u626B\u5230\u4E8C\u7EF4\u7801\uFF0C\u8BF7\u91CD\u65B0\u653E\u5165\u6599\u76D8
client.InStoreNoCode=\u672A\u626B\u5230\u4E8C\u7EF4\u7801\uFF0C\u9700\u8981\u5C06\u6599\u76D8\u9001\u51FA
client.MoveTimeOut_01=[{0}][\u4F3A\u670D\u8FD0\u52A8]\u8D85\u65F6\uFF0C\u5DF2\u7B49\u5F85{1}\u79D2
client.MoveTimeOut_02=[{0}][IO\u4FE1\u53F7\u7B49\u5F85]\u8D85\u65F6\uFF0C\u5DF2\u7B49\u5F85{1}\u79D2
client.MoveTimeOut_03=[{0}][\u65F6\u95F4\u7B49\u5F85]\u8D85\u65F6\uFF0C\u5DF2\u7B49\u5F85{1}\u79D2
client.MoveTimeOut_04=[{0}][\u7535\u94A2\u76EE\u6807\u4F4D\u7F6E]\u8D85\u65F6\uFF0C\u5DF2\u7B49\u5F85{1}\u79D2
client.MoveTimeOut_05=[{0}][\u538B\u7D27\u8F74\u8FD0\u52A8]\u8D85\u65F6\uFF0C\u5DF2\u7B49\u5F85{1}\u79D2
client.MoveTimeOut_06=[{0}][\u8F74\u539F\u70B9\u4FE1\u53F7\u4EAE]\u8D85\u65F6\uFF0C\u5DF2\u7B49\u5F85{1}\u79D2
client.MoveTimeOut_07=[{0}][\u83B7\u53D6\u6599\u76D8\u9AD8\u5EA6]\u8D85\u65F6\uFF0C\u5DF2\u7B49\u5F85{1}\u79D2
client.MoveTimeOut_08=[{0}][\u7B49\u5F85\u4F3A\u670D\u8D1F\u9650\u4F4D]\u8D85\u65F6\uFF0C\u5DF2\u7B49\u5F85{1}\u79D2
client.MoveTimeOut_09=[{0}][\u7B49\u5F85\u4F3A\u670D\u6B63\u9650\u4F4D]\u8D85\u65F6\uFF0C\u5DF2\u7B49\u5F85{1}\u79D2
client.MoveTimeOut_10=[{0}][\u4E0A\u6599\u8F74\u8FD0\u52A8\u505C\u6B62]\u8D85\u65F6\uFF0C\u5DF2\u7B49\u5F85{1}\u79D2
client.MoveTimeOut_11=[{0}][\u626B\u7801\u7ED3\u675F]\u8D85\u65F6\uFF0C\u5DF2\u7B49\u5F85{1}\u79D2
client.MoveTimeOut_12=[{0}][\u64CD\u4F5C\u4EBA\u5458\u653E\u5165/\u62FF\u8D70\u6599\u76D8]\u8D85\u65F6\uFF0C\u5DF2\u7B49\u5F85{1}\u79D2
client.MoveTimeOut_13=[{0}][\u7B49\u5F85\u9001\u6599\u7ED3\u675F]\u8D85\u65F6\uFF0C\u5DF2\u7B49\u5F85{1}\u79D2
settings.api.checkBarcode=\u6761\u7801\u68C0\u67E5 API
settings.api.orderFileDir=\ \u5DE5\u5355\u6587\u4EF6\u5939
user.cabinetAssign=\u6599\u67DC\u5206\u914D
......@@ -423,4 +387,13 @@ error.barcode.wrongPn=PartNumber\u4E0D\u4E00\u81F4
error.barcode.pnNotExist=x\u6863\u6848 {0} \u4E0D\u5B58\u5728
error.barcode.errorSize=x \u6599\u76D8\u672A\u8BBE\u7F6E\u5C3A\u5BF8
error.storage.noStorage=\u65E0\u53EF\u7528\u7684\u6599\u4ED3
msg.line.putIn=[{0}]\u51C6\u5907\u5165\u5E93\u5230[{1}]
\ No newline at end of file
msg.line.putIn=[{0}]\u51C6\u5907\u5165\u5E93\u5230[{1}]
shelf.msg.hasReel=\u5E93\u4F4D[{0}]\u4E2D\u5DF2\u6709\u7269\u6599
shelf.msg.tipScanReel=\u5E93\u4F4D[{0}]\u64CD\u4F5C\u6210\u529F,\u8BF7\u626B\u63CF\u8981\u653E\u5165\u7684\u7269\u6599
shelf.msg.fastop=\u6761\u7801\u64CD\u4F5C\u9891\u7E41,\u8BF7\u7A0D\u540E\u518D\u8BD5
shelf.msg.scanPos=\u8BF7\u5148\u626B\u63CF\u5E93\u4F4D\u7801
shelf.nextPos.hasTask=\u4E0B\u4E00\u5E93\u4F4D[{0}]\u5DF2\u6709\u4EFB\u52A1,\u8BF7\u91CD\u65B0\u626B\u63CF\u5E93\u4F4D\u7801
shelf.nextPos.wrongSize=\u4E0B\u4E00\u5E93\u4F4D[{0}]\u5C3A\u5BF8[{1}]\u4E0E\u6599\u76D8\u5C3A\u5BF8[{2}]\u4E0D\u7B26,\u8BF7\u91CD\u65B0\u626B\u63CF\u5E93\u4F4D\u7801
shelf.nextPos.hasReel=\u4E0B\u4E00\u5E93\u4F4D[{0}]\u5DF2\u6709\u7269\u6599,\u8BF7\u91CD\u65B0\u626B\u63CF\u5E93\u4F4D\u7801
settings.remind.title=\u63D0\u9192\u8BBE\u7F6E
settings.remind.deadday=\u5929\u524D\u5446\u6EDE\u7269\u6599\u63D0\u9192
\ No newline at end of file
......@@ -654,7 +654,7 @@
var options = {};
//入库
var showStr = partNumber + "["+barcode+"]${in_label}"+posStr;
var showStr = partNumber + " ["+barcode+"] ${in_label}" + posStr;
var status = data[item].status.toLowerCase();
......@@ -667,7 +667,7 @@
options['icon']='fa fa-database';
if(data[item].type == 2){//出库
options['icon']='fa fa-sign-out';
showStr = partNumber + "["+barcode+"]${out_label}"+posStr;
showStr = partNumber + "["+barcode+"]${out_label}" + posStr;
}else{
options['onClick']= modifyClick;
}
......@@ -701,7 +701,7 @@
if(data[item].sourceName){
sourceStr = "<br/>${source_label} " + data[item].sourceStr;
}
options['msg']= showStr + statusMsg + data[item].locInfo + sourceStr;
options['msg']= showStr + statusMsg + sourceStr;
var task = cidTasks[taskId];
if(!task){
......
......@@ -101,14 +101,14 @@
<div class="portlet-title">
<div class="caption">
<i class="icon-bell font-green-haze"></i>
<span class="caption-subject bold uppercase font-green-haze"><fmt:message key="提醒设置"/></span>
<span class="caption-subject bold uppercase font-green-haze"><fmt:message key="settings.remind.title"/></span>
</div>
</div>
<div class="portlet-body" style="padding-left: 30px;">
<div class="form-group form-inline">
<div class="input-group margin-top-10">
<form:input path="inactionDay" cssClass="form-control input-small"/>
<span class="input-group-addon"><fmt:message key="天前呆滞物料提醒"/></span>
<span class="input-group-addon"><fmt:message key="settings.remind.deadday"/></span>
</div>
</div>
<%--<div class="form-group form-inline">--%>
......
......@@ -12,67 +12,69 @@
<div class="row">
<div class="col-md-12">
<ul class="timeline">
<li class="timeline-green">
<div class="timeline-time">
<span class="date">
2017 </span>
<span class="time">
05-27 </span>
</div>
<div class="timeline-icon">
<i class="fa fa-clock-o"></i>
</div>
<div class="timeline-body">
<div class="timeline-content">
<ul>
<li>二维码纸张大小系统设置</li>
<li>出库贵重物料(半自动仓中的物料和添加料件档案时勾选了贵重物料选项的料)时需输入授权码.用户是否有贵重物料出库权限需要在角色中配置,同一站位列表或批次只需输入一次授权</li>
</ul>
</div>
</div>
</li>
<li class="timeline-blue">
<div class="timeline-time">
<span class="date">
2017 </span>
<span class="time">
05-11 </span>
</div>
<div class="timeline-icon">
<i class="fa fa-clock-o"></i>
</div>
<div class="timeline-body">
<div class="timeline-content">
<ul>
<li>报警信息记录统计</li>
<li>每日吞吐量统计图表</li>
<li>增加出库方式的系统设置:效率优先/先进先出/尾料优先</li>
</ul>
</div>
</div>
</li>
<li class="timeline-yellow timeline-noline">
<div class="timeline-time">
<span class="date">
2017 </span>
<span class="time">
04-20 </span>
</div>
<div class="timeline-icon">
<i class="fa fa-clock-o"></i>
</div>
<div class="timeline-body">
<div class="timeline-content">
<ul>
<li>指定批次页面描述信息修改</li>
<li>扫码显示站位列表时添加线体信息</li>
<li>库存预警详情打印</li>
<li>自动生成条码信息及条码打印优化</li>
<li>云仓库监控页面扫码获取站位列表字体大小调整</li>
</ul>
</div>
</div>
</li>
<%--<li class="timeline-green">--%>
<%--<div class="timeline-time">--%>
<%--<span class="date">--%>
<%--2020 </span>--%>
<%--<span class="time">--%>
<%--06-24 </span>--%>
<%--</div>--%>
<%--<div class="timeline-icon">--%>
<%--<i class="fa fa-clock-o"></i>--%>
<%--</div>--%>
<%--<div class="timeline-body">--%>
<%--<div class="timeline-content">--%>
<%--<ul>--%>
<%--<li>版本 V20200624</li>--%>
<%--<li>尾料先出按数量计算尾料</li>--%>
<%--<li>扫码料架会自动查找一下个库位,如果下一个库位已有物料或者尺寸不合适时,需要重新扫库位码</li>--%>
<%--<li>SISO料仓门口料盘信号提供给机器人</li>--%>
<%--</ul>--%>
<%--</div>--%>
<%--</div>--%>
<%--</li>--%>
<%--<li class="timeline-blue">--%>
<%--<div class="timeline-time">--%>
<%--<span class="date">--%>
<%--2017 </span>--%>
<%--<span class="time">--%>
<%--05-11 </span>--%>
<%--</div>--%>
<%--<div class="timeline-icon">--%>
<%--<i class="fa fa-clock-o"></i>--%>
<%--</div>--%>
<%--<div class="timeline-body">--%>
<%--<div class="timeline-content">--%>
<%--<ul>--%>
<%--<li>报警信息记录统计</li>--%>
<%--<li>每日吞吐量统计图表</li>--%>
<%--<li>增加出库方式的系统设置:效率优先/先进先出/尾料优先</li>--%>
<%--</ul>--%>
<%--</div>--%>
<%--</div>--%>
<%--</li>--%>
<%--<li class="timeline-yellow timeline-noline">--%>
<%--<div class="timeline-time">--%>
<%--<span class="date">--%>
<%--2017 </span>--%>
<%--<span class="time">--%>
<%--04-20 </span>--%>
<%--</div>--%>
<%--<div class="timeline-icon">--%>
<%--<i class="fa fa-clock-o"></i>--%>
<%--</div>--%>
<%--<div class="timeline-body">--%>
<%--<div class="timeline-content">--%>
<%--<ul>--%>
<%--<li>指定批次页面描述信息修改</li>--%>
<%--<li>扫码显示站位列表时添加线体信息</li>--%>
<%--<li>库存预警详情打印</li>--%>
<%--<li>自动生成条码信息及条码打印优化</li>--%>
<%--<li>云仓库监控页面扫码获取站位列表字体大小调整</li>--%>
<%--</ul>--%>
<%--</div>--%>
<%--</div>--%>
<%--</li>--%>
<%--<li class="timeline-green">
<div class="timeline-time">
<span class="date">
......
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!