Commit 9b2ffc51 sunke

標記顏色的部分報錯代碼118(入料失敗,載台有料,tower夾爪未在載台區域內,手臂取料丟NG箱,掃碼異常,無儲位 厚度 直徑異常等),其餘為設備本體故障,但載…

…台無料報錯代碼218, 入料流程,設備報錯,載台有料,tower夾爪未在載台區域內,滿足取料條件,也要歸類118範圍內.
1 个父辈 cb78b722
......@@ -13,6 +13,7 @@ import com.myproject.manager.IBarcodeManager;
import com.myproject.manager.IStoragePosManager;
import com.myproject.util.DateUtil;
import com.myproject.util.PLATE_SIZE;
import com.myproject.util.StorageConstants;
import com.myproject.util.XmlUtil;
import com.myproject.webapp.controller.webService.DataCache;
import com.myproject.webapp.controller.webService.ITaskService;
......@@ -100,7 +101,7 @@ public class ServiceHandle {
* @return
*/
private XmlResultWrapper.XmlResult GetTowers() {
log.info("收到GetTowers指令");
log.debug("收到GetTowers指令");
XmlResultWrapper.XmlResult xmlResult = new XmlResultWrapper.XmlResult();
xmlResult.Errorcode = "0";
xmlResult.Message = "GetTowers";
......@@ -133,7 +134,7 @@ public class ServiceHandle {
*/
private XmlResultWrapper.XmlResult GetTowerInformation(String xmlData) {
String towerId = XmlUtil.getNodeBody("Parameter", xmlData);
log.info("收到GetTowerInformation指令:towerId=" + towerId);
log.debug("收到GetTowerInformation指令:towerId=" + towerId);
XmlResultWrapper.XmlResult xmlResult = new XmlResultWrapper.XmlResult("0", "GetTowerInformation");
List<XmlResultWrapper.TowerBaseInformation> towers = new ArrayList<>();
......@@ -149,7 +150,7 @@ public class ServiceHandle {
}else{
tower.OnlineStatus = "Offline";
}
tower.StatusCode = "-1";
tower.StatusCode = "18";
tower.StatusText = "Offline";
tower.Temperature = "25";
tower.Humidity = "25";
......@@ -157,20 +158,80 @@ public class ServiceHandle {
Map<Integer, BoxStatusBean> boxStatusMap = statusBean.getBoxStatus();
if(boxStatusMap != null && !boxStatusMap.isEmpty()){
BoxStatusBean boxStatus = boxStatusMap.get(1);
tower.StatusCode = boxStatus.getStatus() + "";
tower.StatusText = tower.StatusCode;
int status = boxStatus.getStatus();
String statusCode = "26";
String statusText = "Ready";
if(status == StorageConstants.BOX_STATUS.PUTIN){
statusCode = "1031";
statusText = "Loading material";
} else if(status == StorageConstants.BOX_STATUS.IN_FINISHED){
statusCode = "1032";
statusText = "Material put in Terminal from Outside";
}else if(status == StorageConstants.BOX_STATUS.CHECKOUT){
statusCode = "1041";
statusText = "Unloading material";
}else if(status == StorageConstants.BOX_STATUS.OUT_FINISHED || status == StorageConstants.BOX_STATUS.OUT_END){
//这里状态11是放到仓门口
statusCode = "1042";
statusText = "Unloaded Material from Tower";
}
if(status== StorageConstants.BOX_STATUS.EMERGENCY || statusBean.getStatus() == StorageConstants.STATUS.EMERGENCY){
//急停
statusCode = "310218";
statusText = "Emergency";
}else if(status== StorageConstants.BOX_STATUS.PROBLEM || statusBean.getStatus() == StorageConstants.STATUS.PROBLEM){
statusCode = "310218";
statusText = "Problem";
}else{
String alarmMsg = statusBean.getMsg();
if(Strings.isNotBlank(alarmMsg)) {
if (statusBean.getStatus() == StorageConstants.STATUS.WARNING){
//客户端有报警消息
statusCode = "310999";
}else{
//客户端有硬件故障
statusCode = "310218";
}
statusText = statusBean.getMsg();
}
}
Exception exception = taskService.getServerException(statusBean.getCid());
if(exception != null){
String doorHasReel = statusBean.getDoorReelSingnal();
if(doorHasReel.equals("1")){
//门口有信号,并且有服务器异常信息,认为是入库失败
statusCode = "310118";
statusText = exception.getMessage();
}else{
log.info(statusBean.getCid() + "门口已无料盘信号,清理异常消息");
taskService.removeServerException(statusBean.getCid());
}
}
tower.StatusCode = statusCode;
tower.StatusText = statusText;
tower.Temperature = boxStatus.getTemperature();
tower.Humidity = boxStatus.getHumidity();
}
tower.StatusCode = "26";
tower.StatusText = "Ready";
//tower.StatusCode = "26";
//tower.StatusText = "Ready";
List<PlateSizeBean> plateSizes = storagePosManager.getStoragePosUsage(storage.getId());
Map<String, XmlResultWrapper.Slot> slotMap = new HashMap<>();
for (PlateSizeBean sizeBean : plateSizes) {
PLATE_SIZE psize = sizeBean.getPlateSize();
String slotname = "s"+ psize.getW() + psize.getH();
String slotname = "s"+ psize.getW() + "t" +psize.getH();
//墨西哥需要添加;
//slotname="s"+psize.getW()+"_" + psize.getH();
XmlResultWrapper.Slot slot = slotMap.get(slotname);
if(slot == null){
slot = new XmlResultWrapper.Slot();
......@@ -476,10 +537,10 @@ public class ServiceHandle {
XmlResultWrapper.XmlResult xmlResult = new XmlResultWrapper.XmlResult("0", "SimulateStartButton");
//singleReelIn 或 openLock
for (String cid : taskService.allStatus().keySet()) {
StorageDataController.addOp(cid,"singleReelIn", "singleReelIn");
log.info(cid + "开门");
}
// for (String cid : taskService.allStatus().keySet()) {
// StorageDataController.addOp(cid,"singleReelIn", "singleReelIn");
// log.info(cid + "开门");
// }
return xmlResult;
}
......
......@@ -69,10 +69,11 @@ public class WebServiceClient {
return "";
}
public static void NotifyCarrierUnload(String barcode, String cid){
public static String NotifyCarrierUnload(String barcode, String cid){
log.info("通知["+barcode+"] 出库完成");
String commandStr = "<XmlCommand><Command>NotifyCarrierUnload</Command><Parameter><FieldList><Field key=\"CARRIER\" value=\""+barcode+"\" /><Field key=\"TOWER\" value=\""+cid+"\" /></FieldList></Parameter></XmlCommand>";
exeCommand(commandStr);
String result = exeCommand(commandStr);
return result;
}
// public static Barcode RequestCarrierData(String barcode){
......
......@@ -22,7 +22,8 @@ public class AdapterService
extends Service
{
private static String wsdlStr = "http://10.42.23.228/WCF_ForSTSys2.0/AdapterService.svc?wsdl";
//private static String wsdlStr = "http://10.42.23.228/WCF_ForSTSys2.0/AdapterService.svc?wsdl";
private static String wsdlStr = "http://10.49.200.122:5556/WCF_ForSTSys2.0/AdapterService.svc?wsdl";
private static URL ADAPTERSERVICE_WSDL_LOCATION;
private static WebServiceException ADAPTERSERVICE_EXCEPTION;
private static QName ADAPTERSERVICE_QNAME = new QName("http://tempuri.org/", "AdapterService");
......
......@@ -296,7 +296,7 @@ public class DataLog extends BaseMongoBean /*implements Comparable<DataLog>*/ {
* 超过5分钟的已完成,已取消的任务都不再
*/
public boolean needRemoveFromCache(){
if(isFinished() || isCancel()){
if(isFinished() || isCancel() || isEnd()){
if(System.currentTimeMillis() - super.getUpdateDate().getTime() > 3 * 60 * 1000){
return true;
}
......@@ -309,7 +309,7 @@ public class DataLog extends BaseMongoBean /*implements Comparable<DataLog>*/ {
* @return
*/
public boolean needRemoveFromShow(){
if(isFinished() || isCancel()){
if(isFinished() || isCancel() || isEnd()){
if(System.currentTimeMillis() - super.getUpdateDate().getTime() > 25 * 1000){
return true;
}
......
......@@ -428,4 +428,12 @@ public class StatusBean {
public void setMsgEn(String msgEn) {
this.msgEn = msgEn;
}
public String getDoorReelSingnal() {
String doorReelSignal = getFromData("doorReelSignal");
if(Strings.isNullOrEmpty(doorReelSignal)){
doorReelSignal = "-1";
}
return doorReelSignal;
}
}
......@@ -46,5 +46,5 @@ public interface IDataLogDao extends IMongoDao {
*/
List<DataLog> findByFeedPosId(String feederPosId);
List<DataLog> findHistory(String barcode, Date startDate, Date endDate);
List<DataLog> findHistory(String barcode, int num);
}
......@@ -151,19 +151,22 @@ public class DataLogDaoImpl extends AbstractMongoDao implements IDataLogDao {
}
@Override
public List<DataLog> findHistory(String barcode, Date startDate, Date endDate) {
public List<DataLog> findHistory(String barcode, int num) {
Criteria c = new Criteria();
if(barcode != null && !barcode.isEmpty()){
c.and("barcode").is(barcode);
}
if(startDate != null){
c.and("createDate").gte(startDate);
}
if(endDate != null){
c.and("updateDate").lte(endDate);
}
return findByQuery(Query.query(c));
//if(startDate != null){
// c.and("createDate").gte(startDate);
//}
// if(endDate != null){
// c.and("updateDate").lte(endDate);
// }
Query q = Query.query(c);
q.limit(num);
q.with(new Sort(Sort.Direction.DESC, "updateDate"));
return findByQuery(q);
}
}
......@@ -417,7 +417,6 @@ public class BarcodeRule {
rule="1@2@3@PPN@5@6@7@8@9@10@xxPRODATEyyMMdd@xxxEXPDATEyyMMdd@13@14@15@16@VSP@3S[RI]@xQTYxxxxxx@20@21@22@23";
rule = "[RI]_PN_PRODATEyyMMdd_QTYxxxx";
BarcodeRule br = BarcodeRule.newRule(rule);
//String codeStr = "[)>@06@12S0002@P5292001000@1P1690215@31P1690215@12V527973628@10VCHN-YANTAI@2P@20P@6D20170626@14D20171223@30PY@ZN@K0@16K0@V815@3SB370000000EZZ@Q500GRM000@20T1@1TMT72543954@2T@1Z@@";
......@@ -431,6 +430,12 @@ public class BarcodeRule {
codeStr = "=7x8=4500065747_CS000069_180101_030000004";
rule = "PN|BATCH|QTY|RI|SP";
codeStr = "=7x8=64.22005.6DL-015402|-20191011|10000|M640154024119FJZ7|YAGEO";
codeStr="=7x8=78.10421.2FL-602371|SB2271867K-2024|10000|M786023712420S2U0|DARFON";
BarcodeRule br = BarcodeRule.newRule(rule);
Barcode b = br.toCodeBean(codeStr).getBarcode();
System.out.println("PN:"+b.getPartNumber());
// System.out.println("RI:"+b.getBarcode());
......
......@@ -148,9 +148,9 @@ public class StorageConstants {
*/
public final static int OUT_FINISHED = 10;
/**
* 11出库失败
* 11出库完成
*/
public final static int OUT_FAILED = 11;
public final static int OUT_END = 11;
/**
* 12出库移栽中
......
......@@ -556,9 +556,10 @@ public class DataCache{
return null;
}
public Storage reloadStorage(Storage storage){
public Storage reloadStorage(Storage storage) throws ValidateException {
List<PlateSizeBean> plateSizeBeanList = storagePosManager.getStoragePosUsage(storage.getId());
storage.initUsage(plateSizeBeanList);
storage = storageManager.save(storage);
allStorage.put(storage.getCid(), storage);
return storage;
}
......
......@@ -50,6 +50,8 @@ public interface ITaskService {
Exception getServerException(String cid);
void removeServerException(String cid);
StatusBean getStatus(String cid);
Map<String, StatusBean> allStatus();
......
......@@ -4,7 +4,12 @@ import com.google.common.base.Strings;
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;
import com.myproject.dao.mongo.IDataLogDao;
import com.myproject.exception.ValidateException;
import com.myproject.manager.IBarcodeManager;
......@@ -13,17 +18,21 @@ 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;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
import java.text.ParseException;
import java.util.*;
import java.util.stream.Collectors;
@Controller
......@@ -86,6 +95,32 @@ public class MesApiController extends BaseController {
return value;
}
@RequestMapping(value = "/barcode")
@ResponseBody
public String barcode(HttpServletRequest request) {
try{
String codeStr = checkParameter(request,"codeStr");
String batch = checkParameter(request,"batch");
log.info("收到MES接口条码更新指令:codeStr="+codeStr + " batch="+batch);
String sizeCodeStr = "=1x1=" + codeStr;
CodeBean codeBean = dataCache.resolveSingleCode(sizeCodeStr);
if(codeBean.isValid()){
Barcode barcode = codeBean.getBarcode();
barcode.setBatch(batch);
barcodeManager.save(barcode);
return "OK";
}else{
return "Error:" + codeBean.getError();
}
}catch (ValidateException ve) {
return "Error:" + ve.getMessage();
}catch (Exception e){
return "Error:" + e.getMessage();
}
}
@RequestMapping(value = "/codeUpdate")
@ResponseBody
public String codeUpdate(HttpServletRequest request) {
......@@ -152,6 +187,12 @@ public class MesApiController extends BaseController {
@ResponseBody
public List<Map<String,Object>> getInventory(HttpServletRequest request){
String storageId = request.getParameter("LOC");
// try {
// String body = request.getReader().lines().collect(Collectors.joining(System.lineSeparator()));
// log.info("body:" + body);
// } catch (IOException e) {
// e.printStackTrace();
// }
List<Map<String,Object>> ReelBarCodes = Lists.newArrayList();
List<StoragePos> poses;
if(!Strings.isNullOrEmpty(storageId)){
......@@ -270,22 +311,34 @@ public class MesApiController extends BaseController {
}
@RequestMapping(value = "/history")
@ResponseBody
public List<Map<String,Object>> history(HttpServletRequest request) {
String bid = request.getParameter("bid");
String start = request.getParameter("start");
String end = request.getParameter("end");
Date startDate = toDate(start);
Date endDate = toDate(end);
// String start = request.getParameter("start");
// String end = request.getParameter("end");
// Date startDate = toDate(start);
// Date endDate = toDate(end);
String numStr = request.getParameter("num");
int num = 20;
if(!Strings.isNullOrEmpty(numStr)){
try{
num = Integer.valueOf(numStr);
}catch (Exception e){
}
}
List<Map<String,Object>> results = Lists.newArrayList();
List<DataLog> datas = dataLogDao.findHistory(bid,startDate,endDate);
List<DataLog> datas = dataLogDao.findHistory(bid,num);
datas.sort(new Comparator<DataLog>() {
@Override
public int compare(DataLog o1, DataLog o2) {
return o1.getCreateDate().compareTo(o2.getCreateDate());
}
});
for (DataLog dataItem : datas){
Map<String,Object> item = Maps.newHashMap();
item.put("barcode",dataItem.getBarcode());
......@@ -293,15 +346,85 @@ public class MesApiController extends BaseController {
item.put("qty",dataItem.getNum());
item.put("type", dataItem.getType());
item.put("opor", dataItem.getOperator());
item.put("pos",dataItem.getPosStr());
item.put("boxName",dataItem.getStorageName());
item.put("posName",dataItem.getPosName());
item.put("source",dataItem.getSourceId());
item.put("status", dataItem.getStatus());
item.put("memo", dataItem.getMemo());
item.put("date", DateUtil.toDateTimeString(dataItem.getCreateDate()));
results.add(item);
}
return results;
}
@RequestMapping(value = "/status")
@ResponseBody
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;
if(boxStatusMap != null){
BoxStatusBean boxStatusBean = boxStatusMap.get(1);
if(boxStatusBean != null){
status = boxStatusBean.getStatus();
}
}
int storageStatus = status;
if(status == StorageConstants.STATUS.OFFLINE || statusBean.timeOut()){
//离线
storageStatus = -1;
}
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");
......
......@@ -154,7 +154,8 @@ public class TaskService implements ITaskService {
List<DataLog> areaFinishedTasks = Lists.newArrayList(finishedTaskMap.values());
List<DataLog> resultTasks = Lists.newArrayList();
for(DataLog task : areaFinishedTasks){
if(task.needRemoveFromCache()){
//这里只清理已完成的入库任务,出库任务等到门口无料盘时再清理
if(task.needRemoveFromCache() && task.isPutInTask()){
finishedTaskMap.remove(task.getBarcode());
}else{
resultTasks.add(task);
......@@ -1108,6 +1109,21 @@ public class TaskService implements ITaskService {
}
}
private void clearFinishedTask(StatusBean statusBean){
String doorHasReel = statusBean.getDoorReelSingnal();
if(!doorHasReel.equals("1")){
//门口没有料盘
String cid = statusBean.getCid();
List<DataLog> finishedTasks = getFinishedTasks();
for (DataLog finishedTask : finishedTasks) {
if(finishedTask.getCid().equals(cid) && finishedTask.isEnd() && finishedTask.needRemoveFromShow()){
log.info("门口已无料盘,清理已完成的任务["+finishedTask.getBarcode()+"]");
finishedTaskMap.remove(finishedTask.getBarcode());
}
}
}
}
/**
* 出库完成 status为 OUT_FINISHED = 10 出仓位完成,设置posId
......@@ -1115,6 +1131,7 @@ public class TaskService implements ITaskService {
* @return
*/
public StatusBean saveStatus(StatusBean statusBeanToSave) {
clearFinishedTask(statusBeanToSave);
String cid = statusBeanToSave.getCid();
StatusBean statusBean = statusMap.get(cid);
boolean needSaveToMongo = false;
......@@ -1223,8 +1240,33 @@ public class TaskService implements ITaskService {
log.warn(statusBeanToSave.getCid() + "出仓位[" + boxStatus.getPosId() + "]完成时任务不存在");
}
}
} else if (StorageConstants.BOX_STATUS.OUT_FAILED == status) {//出库失败
} else if (StorageConstants.BOX_STATUS.OUT_END == status) {//出库到门口,发送通知
//暂不处理
DataLog task = findFinishedTask(statusBeanToSave.getCid(), boxStatus.getPosId());
if(storage != null && task !=null && !task.isCancel()){
if(!task.isEnd()){
task.setStatus(StorageConstants.OP_STATUS.END.name());
finishedTaskMap.put(task.getBarcode(),task);
log.info(task.getBarcode() + "已从库位[" + task.getPosName() + "]放到仓门口");
//finishedTaskMap.remove(task.getBarcode());
//postOutNotification(dataCache.getSettings().getOutNotifyApi(), task.getBarcode(), task.getCid());
if(dataCache.needConnectWeiChuang()){
String result = WebServiceClient.NotifyCarrierUnload(task.getBarcode(),task.getCid());
if(!result.contains("success")){
log.error("第一次发送["+task.getBarcode()+"]放到仓门口通知失败:" + result);
result = WebServiceClient.NotifyCarrierUnload(task.getBarcode(),task.getCid());
if(!result.contains("success")){
log.error("第二次发送["+task.getBarcode()+"]放到仓门口通知失败:" + result);
result = WebServiceClient.NotifyCarrierUnload(task.getBarcode(),task.getCid());
if(!result.contains("success")){
log.error("第三次发送["+task.getBarcode()+"]放到仓门口通知失败:" + result);
}
}
}
}
}
}
}
}
} catch (ValidateException e) {
......@@ -1266,6 +1308,11 @@ public class TaskService implements ITaskService {
return serverExceptions.get(cid);
}
@Override
public void removeServerException(String cid){
serverExceptions.remove(cid);
}
@Override
public StatusBean getStatus(String cid) {
......@@ -1728,14 +1775,14 @@ public class TaskService implements ITaskService {
dataCache.updateInventory(storagePos,barcode);
//通知消息
Storage storage = dataCache.getStorage(task.getCid());
if(storage != null && !task.isCancel()){
//postOutNotification(dataCache.getSettings().getOutNotifyApi(), task.getBarcode(), task.getCid());
if(dataCache.needConnectWeiChuang()){
WebServiceClient.NotifyCarrierUnload(task.getBarcode(),task.getCid());
}
}
// //通知消息
// Storage storage = dataCache.getStorage(task.getCid());
// if(storage != null && !task.isCancel()){
// //postOutNotification(dataCache.getSettings().getOutNotifyApi(), task.getBarcode(), task.getCid());
// if(dataCache.needConnectWeiChuang()){
// WebServiceClient.NotifyCarrierUnload(task.getBarcode(),task.getCid());
// }
// }
//记录日志
......
......@@ -110,7 +110,7 @@ public class LocaleFilter extends OncePerRequestFilter {
LocaleContextHolder.setLocaleContext(null);
}
private Locale getPreFerredLocale(String locale){
public static Locale getPreFerredLocale(String locale){
Locale preferredLocale = null;
if (locale != null && !locale.isEmpty()) {
int indexOfUnderscore = locale.indexOf('-');
......
......@@ -128,7 +128,7 @@ storage.status.7=Material Receiving Completed
storage.status.8=Material Receiving Failed
storage.status.9=Material Retrieval in Porcess
storage.status.10=Materail Retrieval Completed
storage.status.11=Material Retrieval failed
storage.status.11=Material Retrieval End
storage.status.12=Material transfering
storage.status.13=System resetting
sotrage.status.999=Offline
......@@ -422,7 +422,7 @@ error.pos.sizeNotMatch=[1056]The size[{0}] of the reel is not matching the size
error.barcode.invalid=[1057]The barcode [{0}] is invalid.
error.barcode.expired=[1058]The reel is expired.
error.barcode.wrongQty=[1059]The quantity [{1}] of the reel[{0}] is invalid.
error.barcode.inStorage=[1060]The reel [{0}] is already in the location [2] of the stroage [1]
error.barcode.inStorage=[1060]The reel [{0}] is already in the location [{2}] of the stroage [{1}]
error.barcode.noRule=[1061]There is no rule of the barcode is setted.
error.barcode.wrongLength=[1062]The code string [{0}] has wrong length.
error.barcode.noField=[1063]There is no {0} field in the code string.
......
......@@ -128,7 +128,7 @@ storage.status.7=Material Receiving Completed
storage.status.8=Material Receiving Failed
storage.status.9=Material Retrieval in Porcess
storage.status.10=Materail Retrieval Completed
storage.status.11=Material Retrieval failed
storage.status.11=Material Retrieval End
storage.status.12=Material transfering
storage.status.13=System resetting
sotrage.status.999=Offline
......@@ -422,7 +422,7 @@ error.pos.sizeNotMatch=[1056]The size[{0}] of the reel is not matching the size
error.barcode.invalid=[1057]The barcode [{0}] is invalid.
error.barcode.expired=[1058]The reel is expired.
error.barcode.wrongQty=[1059]The quantity [{1}] of the reel[{0}] is invalid.
error.barcode.inStorage=[1060]The reel [{0}] is already in the location [2] of the stroage [1]
error.barcode.inStorage=[1060]The reel [{0}] is already in the location [{2}] of the stroage [{1}]
error.barcode.noRule=[1061]There is no rule of the barcode is setted.
error.barcode.wrongLength=[1062]The code string [{0}] has wrong length.
error.barcode.noField=[1063]There is no {0} field in the code string.
......
......@@ -125,7 +125,7 @@ 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\u5931\u8D25
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
......@@ -414,7 +414,7 @@ error.pos.sizeNotMatch=[1056]\u6599\u76D8\u5C3A\u5BF8[{0}]\u4E0E\u5E93\u4F4D{1}\
error.barcode.invalid=[1057]{0} \u4E0D\u662F\u6709\u6548\u7684\u6761\u7801
error.barcode.expired=[1058]\u7269\u6599\u5DF2\u8FC7\u671F,\u65E0\u6CD5\u5165\u5E93.
error.barcode.wrongQty=[1059]\u6599\u76D8[0]\u6570\u91CF[{1}]\u9519\u8BEF.
error.barcode.inStorage=[1060]\u6599\u76D8[0]\u5DF2\u5728\u6599\u4ED3[1]\u7684\u5E93\u4F4D[2]\u4E2D
error.barcode.inStorage=[1060]\u6599\u76D8[{0}]\u5DF2\u5728\u6599\u4ED3[{1}]\u7684\u5E93\u4F4D[{2}]\u4E2D
error.barcode.noRule=[1061]\u6761\u7801\u89E3\u6790\u89C4\u5219\u672A\u5B9A\u4E49
error.barcode.wrongLength=[1062]\u6761\u7801[{0}]\u957F\u5EA6\u9519\u8BEF
error.barcode.noField=[1063]\u6761\u7801\u89E3\u6790\u5931\u8D25,\u672A\u627E\u5230{0}\u5B57\u6BB5
......
......@@ -798,6 +798,10 @@
}
$(this).attr("style","height:"+itemCount*34+"px;");
lastContent.attr("style","height:"+itemCount*34+"px;");
}else if(index == allContent.size() - 1){
///最后一个
var itemCount = $(this).children(".itembox").size();
$(this).attr("style","height:"+itemCount*34+"px;");
}
});
......
......@@ -12,12 +12,28 @@
<div class="row">
<div class="col-md-12">
<ul class="timeline">
<li class="timeline-yellow timeline-noline">
<div class="timeline-time">
<span class="date"> 2017 </span>
<span class="time"> 10-21 </span>
</div>
<div class="timeline-icon">
<i class="fa fa-clock-o"></i>
</div>
<div class="timeline-body">
<div class="timeline-content">
<ul>
<li>Fixed: 出库到门口时,如果长时间机械手不抓取,会找不到任务的问题</li>
</ul>
</div>
</div>
</li>
<li class="timeline-green">
<div class="timeline-time">
<span class="date">
2017 </span>
2020 </span>
<span class="time">
05-27 </span>
09-23 </span>
</div>
<div class="timeline-icon">
<i class="fa fa-clock-o"></i>
......@@ -25,8 +41,8 @@
<div class="timeline-body">
<div class="timeline-content">
<ul>
<li>二维码纸张大小系统设置</li>
<li>出库贵重物料(半自动仓中的物料和添加料件档案时勾选了贵重物料选项的料)时需输入授权码.用户是否有贵重物料出库权限需要在角色中配置,同一站位列表或批次只需输入一次授权</li>
<li>標記顏色的部分報錯代碼118(入料失敗,載台有料,tower夾爪未在載台區域內,手臂取料丟NG箱,掃碼異常,無儲位 厚度 直徑異常等),其餘為設備本體故障,但載台無料報錯代碼218, 入料流程,設備報錯,載台有料,tower夾爪未在載台區域內,滿足取料條件,也要歸類118範圍內.
</li>
</ul>
</div>
</div>
......@@ -34,29 +50,9 @@
<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>
2020 </span>
<span class="time">
04-20 </span>
09-11 </span>
</div>
<div class="timeline-icon">
<i class="fa fa-clock-o"></i>
......@@ -64,15 +60,33 @@
<div class="timeline-body">
<div class="timeline-content">
<ul>
<li>指定批次页面描述信息修改</li>
<li>扫码显示站位列表时添加线体信息</li>
<li>库存预警详情打印</li>
<li>自动生成条码信息及条码打印优化</li>
<li>云仓库监控页面扫码获取站位列表字体大小调整</li>
<li>尺寸改为s7t8</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!