Commit d3ed66f7 LN

重试需要从API010预扣开始重试。所有接口失败增加提示

1 个父辈 7f15d5b8
...@@ -92,11 +92,12 @@ public class LiteOrderCache { ...@@ -92,11 +92,12 @@ public class LiteOrderCache {
} }
} }
} }
public void addOrderToMap(LiteOrder order ){
if(order==null|| order.getOrderNo()==null){ public void addOrderToMap(LiteOrder order) {
if (order == null || order.getOrderNo() == null) {
return; return;
} }
if(liteOrderMap.containsKey(order.getOrderNo())){ if (liteOrderMap.containsKey(order.getOrderNo())) {
liteOrderMap.remove(order.getOrderNo()); liteOrderMap.remove(order.getOrderNo());
} }
liteOrderMap.put(order.getOrderNo(), order); liteOrderMap.put(order.getOrderNo(), order);
...@@ -116,19 +117,19 @@ public class LiteOrderCache { ...@@ -116,19 +117,19 @@ public class LiteOrderCache {
private boolean isProcessTimer = false; private boolean isProcessTimer = false;
public void runTimer(){ public void runTimer() {
if(!isProcessTimer){ if (!isProcessTimer) {
isProcessTimer = true; isProcessTimer = true;
try { try {
boolean startJob = dataCache.getCache(Constants.CACHE_StartJob); boolean startJob = dataCache.getCache(Constants.CACHE_StartJob);
if(startJob){ if (startJob) {
//定时执行工单任务 //定时执行工单任务
executeOrderTask(); executeOrderTask();
} }
}catch (Exception e){ } catch (Exception e) {
log.error("需求单定时器执行出错:",e); log.error("需求单定时器执行出错:", e);
}finally { } finally {
isProcessTimer = false; isProcessTimer = false;
} }
} }
...@@ -145,22 +146,22 @@ public class LiteOrderCache { ...@@ -145,22 +146,22 @@ public class LiteOrderCache {
} }
} }
public void executeOrderTask(){ public void executeOrderTask() {
for (LiteOrder order : liteOrderMap.values()) { for (LiteOrder order : liteOrderMap.values()) {
if(order.isClosed()){ if (order.isClosed()) {
continue; continue;
} }
if(order.isNew()||order.isTaskFinished()){ if (order.isNew() || order.isTaskFinished()) {
//判断是否到达时间 //判断是否到达时间
Date curr=new Date(); Date curr = new Date();
if(order.getSDate().before(curr)){ if (order.getSDate().before(curr)) {
//开始自动出库 //开始自动出库
String result= checkOutLiteOrder(order.getOrderNo(),false); String result = checkOutLiteOrder(order.getOrderNo(), false);
if(!ObjectUtil.isEmpty(result)){ if (!ObjectUtil.isEmpty(result)) {
String msg= MessageUtils.getText(result,MessageUtils.getDefaultLocal(),""); String msg = MessageUtils.getText(result, MessageUtils.getDefaultLocal(), "");
log.info("自动执行工单 【"+order.getOrderNo()+"】 失败:"+msg); log.info("自动执行工单 【" + order.getOrderNo() + "】 失败:" + msg);
}else{ } else {
log.info("自动执行工单 【"+order.getOrderNo()+"】 成功"); log.info("自动执行工单 【" + order.getOrderNo() + "】 成功");
} }
break; break;
...@@ -175,18 +176,18 @@ public class LiteOrderCache { ...@@ -175,18 +176,18 @@ public class LiteOrderCache {
ORDER_COLOR nextColor = getNextColor(); ORDER_COLOR nextColor = getNextColor();
if (nextColor == null) { if (nextColor == null) {
log.info("执行工单[" + liteOrder.getOrderNo() + "] 时,已达最大可执行工单数"); log.info("执行工单[" + liteOrder.getOrderNo() + "] 时,已达最大可执行工单数");
throw new ValidateException("order.out.maxOrder","已达最大可执行工单数"); throw new ValidateException("order.out.maxOrder", "已达最大可执行工单数");
} }
//其他出库模式一次性全部生成任务 //其他出库模式一次性全部生成任务
List<StoragePos> lockPosList = storagePosManager.findLockPos(liteOrder.getOrderNo()); List<StoragePos> lockPosList = storagePosManager.findLockPos(liteOrder.getOrderNo());
if(lockPosList==null){ if (lockPosList == null) {
throw new ValidateException("smfcore.notFindPos","未找到锁定库位"); throw new ValidateException("smfcore.notFindPos", "未找到锁定库位");
} }
int taskReelCount = 0; int taskReelCount = 0;
for (StoragePos lockPos : lockPosList) { for (StoragePos lockPos : lockPosList) {
Storage storage = dataCache.getStorageById(lockPos.getStorageId()); Storage storage = dataCache.getStorageById(lockPos.getStorageId());
Barcode barcode = lockPos.getBarcode(); Barcode barcode = lockPos.getBarcode();
DataLog task = new DataLog(storage,barcode,lockPos); DataLog task = new DataLog(storage, barcode, lockPos);
task.setSourceId(liteOrder.getId()); task.setSourceId(liteOrder.getId());
task.setSourceName(liteOrder.getOrderNo()); task.setSourceName(liteOrder.getOrderNo());
...@@ -203,7 +204,7 @@ public class LiteOrderCache { ...@@ -203,7 +204,7 @@ public class LiteOrderCache {
} }
liteOrder.setTaskReelCount(taskReelCount); liteOrder.setTaskReelCount(taskReelCount);
liteOrder.setTotalTaskReelCount(liteOrder.getTotalTaskReelCount()+taskReelCount); liteOrder.setTotalTaskReelCount(liteOrder.getTotalTaskReelCount() + taskReelCount);
liteOrder.setStatus(LITEORDER_STATUS.TAILS); liteOrder.setStatus(LITEORDER_STATUS.TAILS);
log.info("工单[" + liteOrder.getOrderNo() + "]任务分配结束,任务数[" + taskReelCount + "]"); log.info("工单[" + liteOrder.getOrderNo() + "]任务分配结束,任务数[" + taskReelCount + "]");
smfApi.onOrderStatusChange(liteOrder); smfApi.onOrderStatusChange(liteOrder);
...@@ -211,28 +212,28 @@ public class LiteOrderCache { ...@@ -211,28 +212,28 @@ public class LiteOrderCache {
if (taskReelCount <= 0) { if (taskReelCount <= 0) {
//没有任务,直接结束 //没有任务,直接结束
finishedOrderTasks(liteOrder); finishedOrderTasks(liteOrder);
}else{ } else {
//有需要出库的 ,更新状态 //有需要出库的 ,更新状态
liteOrder.setStatus(LITEORDER_STATUS.TAILS); liteOrder.setStatus(LITEORDER_STATUS.TAILS);
} }
liteOrder = liteOrderManager.save(liteOrder); liteOrder = liteOrderManager.save(liteOrder);
liteOrderMap.put(liteOrder.getOrderNo(),liteOrder); liteOrderMap.put(liteOrder.getOrderNo(), liteOrder);
if (taskReelCount <= 0) { if (taskReelCount <= 0) {
return ResultBean.newErrorResult(-1,"smfcore.notask","No task in this order"); return ResultBean.newErrorResult(-1, "smfcore.notask", "No task in this order");
} }
return ResultBean.newOkResult("smfcore.taskCount", "total task is :{0}",new String[]{ taskReelCount+""},""); return ResultBean.newOkResult("smfcore.taskCount", "total task is :{0}", new String[]{taskReelCount + ""}, "");
} }
/** /**
* 结束当前的任务 * 结束当前的任务
*/ */
public void finishedOrderTasks(LiteOrder liteOrder){ public void finishedOrderTasks(LiteOrder liteOrder) {
if(liteOrder.isOutOne()){ if (liteOrder.isOutOne()) {
// setStatus(LITEORDER_STATUS.ONE_FINISHED); // setStatus(LITEORDER_STATUS.ONE_FINISHED);
liteOrder.setClosed(true); liteOrder.setClosed(true);
}else if(liteOrder.isOutBom()){ } else if (liteOrder.isOutBom()) {
liteOrder.setStatus(LITEORDER_STATUS.BOM_FINISHED); liteOrder.setStatus(LITEORDER_STATUS.BOM_FINISHED);
}else if(liteOrder.isOutTails()){ } else if (liteOrder.isOutTails()) {
// setStatus(LITEORDER_STATUS.TAILS_FINISHED); // setStatus(LITEORDER_STATUS.TAILS_FINISHED);
liteOrder.setClosed(true); liteOrder.setClosed(true);
} }
...@@ -241,12 +242,12 @@ public class LiteOrderCache { ...@@ -241,12 +242,12 @@ public class LiteOrderCache {
smfApi.onOrderStatusChange(liteOrder); smfApi.onOrderStatusChange(liteOrder);
} }
public LiteOrder getLiteOrder(String orderNo){ public LiteOrder getLiteOrder(String orderNo) {
LiteOrder order = liteOrderMap.get(orderNo); LiteOrder order = liteOrderMap.get(orderNo);
if (order == null) { if (order == null) {
log.info("缓存中未找到[" + orderNo + "],从数据库中重新加载"); log.info("缓存中未找到[" + orderNo + "],从数据库中重新加载");
order = liteOrderManager.findByOrderNo(orderNo); order = liteOrderManager.findByOrderNo(orderNo);
if(order != null){ if (order != null) {
List<LiteOrderItem> items = liteOrderItemManager.findOrderItems(order.getId()); List<LiteOrderItem> items = liteOrderItemManager.findOrderItems(order.getId());
order.setOrderItems(items); order.setOrderItems(items);
} }
...@@ -283,13 +284,12 @@ public class LiteOrderCache { ...@@ -283,13 +284,12 @@ public class LiteOrderCache {
liteOrderMap.put(orderNo, order); liteOrderMap.put(orderNo, order);
//如果是preTask,不需要重新出库 //如果是preTask,不需要重新出库
if(ObjectUtil.isNotEmpty(order.getMode())) { if (ObjectUtil.isNotEmpty(order.getMode())) {
checkoutAgain(task, order); checkoutAgain(task, order);
} }
} } else if (task.isFinished()) {
else if (task.isFinished()) {
order.setFinishedReelCount(order.getFinishedReelCount() + 1); order.setFinishedReelCount(order.getFinishedReelCount() + 1);
order.setTotalFinishedReelCount(order.getTotalFinishedReelCount()+1); order.setTotalFinishedReelCount(order.getTotalFinishedReelCount() + 1);
String orderItemId = task.getSubSourceId(); String orderItemId = task.getSubSourceId();
List<LiteOrderItem> items = new ArrayList<>(); List<LiteOrderItem> items = new ArrayList<>();
for (LiteOrderItem liteOrderItem : order.getOrderItems()) { for (LiteOrderItem liteOrderItem : order.getOrderItems()) {
...@@ -298,8 +298,8 @@ public class LiteOrderCache { ...@@ -298,8 +298,8 @@ public class LiteOrderCache {
//更新对应条目的已出库数量和出库盘数 //更新对应条目的已出库数量和出库盘数
liteOrderItem.setOutNum(liteOrderItem.getOutNum() + task.getNum()); liteOrderItem.setOutNum(liteOrderItem.getOutNum() + task.getNum());
liteOrderItem.setOutReelCount(liteOrderItem.getOutReelCount() + 1); liteOrderItem.setOutReelCount(liteOrderItem.getOutReelCount() + 1);
liteOrderItem.setTotalOutNum(liteOrderItem.getTotalOutNum()+task.getNum()); liteOrderItem.setTotalOutNum(liteOrderItem.getTotalOutNum() + task.getNum());
liteOrderItem.setTotalOutReelCount(liteOrderItem.getTotalOutReelCount()+1); liteOrderItem.setTotalOutReelCount(liteOrderItem.getTotalOutReelCount() + 1);
liteOrderItem.setStatus(task.getStatus()); liteOrderItem.setStatus(task.getStatus());
liteOrderItem.setLocInfo(task.getLocInfo()); liteOrderItem.setLocInfo(task.getLocInfo());
liteOrderItem.setStatus(OrderItemStatus.finish); liteOrderItem.setStatus(OrderItemStatus.finish);
...@@ -332,7 +332,7 @@ public class LiteOrderCache { ...@@ -332,7 +332,7 @@ public class LiteOrderCache {
//判断位置信息是否以"-"开头,如果是,则获取相同位置的orderItemId,进行通知 //判断位置信息是否以"-"开头,如果是,则获取相同位置的orderItemId,进行通知
// if (StringUtils.isNotBlank(task.getLocInfo()) && task.getLocInfo().startsWith("-")) { // if (StringUtils.isNotBlank(task.getLocInfo()) && task.getLocInfo().startsWith("-")) {
if ( ObjectUtil.isNotEmpty(order.getMode())&& StringUtils.isNotBlank(task.getLocInfo()) ) { if (ObjectUtil.isNotEmpty(order.getMode()) && StringUtils.isNotBlank(task.getLocInfo())) {
String locInfo = task.getLocInfo(); String locInfo = task.getLocInfo();
List<String> itemIdList = new ArrayList<>(); List<String> itemIdList = new ArrayList<>();
...@@ -364,7 +364,6 @@ public class LiteOrderCache { ...@@ -364,7 +364,6 @@ public class LiteOrderCache {
} }
if (!order.isClosed()) { if (!order.isClosed()) {
//工单未关闭的话,检查状态,全部都出完进行关闭 //工单未关闭的话,检查状态,全部都出完进行关闭
boolean closed = true; boolean closed = true;
...@@ -382,19 +381,19 @@ public class LiteOrderCache { ...@@ -382,19 +381,19 @@ public class LiteOrderCache {
} }
} }
//判断是否发送成功 //判断是否发送成功
if(ObjectUtil.isNotEmpty(order.getMode())){ if (ObjectUtil.isNotEmpty(order.getMode())) {
if(liteOrderItem.getStatus()==OrderItemStatus.notify_fail){ if (liteOrderItem.getStatus() == OrderItemStatus.notify_fail) {
closed=false; closed = false;
break; break;
} }
} }
} }
if(closed){ if (closed) {
order.setClosed(closed); order.setClosed(closed);
if(ObjectUtil.isNotEmpty(order.getMode())){ if (ObjectUtil.isNotEmpty(order.getMode())) {
String key=Constants.CACHE_DISPATCH+order.getMode(); String key = Constants.CACHE_DISPATCH + order.getMode();
log.info(" mode="+order.getMode()+"的出库已结束,清空 key="+key+" 的cache"); log.info(" mode=" + order.getMode() + "的出库已结束,清空 key=" + key + " 的cache");
dataCache.updateCache(key,""); dataCache.updateCache(key, "");
} }
} }
} }
...@@ -415,10 +414,10 @@ public class LiteOrderCache { ...@@ -415,10 +414,10 @@ public class LiteOrderCache {
} }
} }
private LiteOrder checkoutAgain(DataLog task,LiteOrder order) { private LiteOrder checkoutAgain(DataLog task, LiteOrder order) {
try{ try {
//出库任务,如果是工单任务,如果此料仓离线,需要补发一盘 //出库任务,如果是工单任务,如果此料仓离线,需要补发一盘
if(ObjectUtil.isNotEmpty(task.getSourceId())) { if (ObjectUtil.isNotEmpty(task.getSourceId())) {
StatusBean bean = DevicesStatusUtil.getStatusBean(task.getCid()); StatusBean bean = DevicesStatusUtil.getStatusBean(task.getCid());
if (bean != null && (!bean.timeOut())) { if (bean != null && (!bean.timeOut())) {
//如果当前料仓在线,不处理 //如果当前料仓在线,不处理
...@@ -431,7 +430,7 @@ public class LiteOrderCache { ...@@ -431,7 +430,7 @@ public class LiteOrderCache {
return order; return order;
} }
if ( order.isClosed() || order.isTaskFinished()) { if (order.isClosed() || order.isTaskFinished()) {
return order; return order;
} }
for (LiteOrderItem item : for (LiteOrderItem item :
...@@ -469,28 +468,28 @@ public class LiteOrderCache { ...@@ -469,28 +468,28 @@ public class LiteOrderCache {
} }
log.info("工单[" + orderNo + "]任务[" + task.getPosName() + "]取消,补发结束,任务数[" + order.getTaskReelCount() + "]");
log.info("工单[" + orderNo + "]任务["+task.getPosName()+"]取消,补发结束,任务数[" + order.getTaskReelCount() + "]");
liteOrderManager.save(order); liteOrderManager.save(order);
liteOrderMap.put(order.getOrderNo(), order); liteOrderMap.put(order.getOrderNo(), order);
}catch (Exception ex){ } catch (Exception ex) {
log.error("任务["+task.getPosName()+"]["+task.getPartNumber()+"]["+task.getBarcode()+"]取消时,对应工单["+task.getSourceId()+"]["+task.getSourceName()+"]补发任务出错:"+ex.getMessage()); log.error("任务[" + task.getPosName() + "][" + task.getPartNumber() + "][" + task.getBarcode() + "]取消时,对应工单[" + task.getSourceId() + "][" + task.getSourceName() + "]补发任务出错:" + ex.getMessage());
} }
return order; return order;
} }
public ORDER_COLOR getNextColor() { public ORDER_COLOR getNextColor() {
//设置颜色 //设置颜色
Set<String> currentColors = new HashSet<>(); Set<String> currentColors = new HashSet<>();
// for (DataLog dataLog :taskService. getQueueTasks()) { // for (DataLog dataLog :taskService. getQueueTasks()) {
// currentColors.add(dataLog.getLightColor()); // currentColors.add(dataLog.getLightColor());
// } // }
for (DataLog dataLog :taskService.getAllTasks()){ for (DataLog dataLog : taskService.getAllTasks()) {
if(dataLog.isFinished()||dataLog.isCancel()||dataLog.isEnd()){ if (dataLog.isFinished() || dataLog.isCancel() || dataLog.isEnd()) {
continue; continue;
} }
if(dataLog.isCheckOutTask() && ObjectUtil.isNotEmpty(dataLog.getSourceId())&&ObjectUtil.isNotEmpty(dataLog.getLightColor())) { if (dataLog.isCheckOutTask() && ObjectUtil.isNotEmpty(dataLog.getSourceId()) && ObjectUtil.isNotEmpty(dataLog.getLightColor())) {
currentColors.add(dataLog.getLightColor()); currentColors.add(dataLog.getLightColor());
} }
} }
...@@ -501,14 +500,15 @@ public class LiteOrderCache { ...@@ -501,14 +500,15 @@ public class LiteOrderCache {
/** /**
* 执行工单出库,批量料仓默认出库到料串上 * 执行工单出库,批量料仓默认出库到料串上
*/ */
public String checkOutLiteOrder(String orderNo, boolean outBom){ public String checkOutLiteOrder(String orderNo, boolean outBom) {
boolean singleOut = false; boolean singleOut = false;
return checkOutLiteOrder(orderNo,outBom,singleOut); return checkOutLiteOrder(orderNo, outBom, singleOut);
} }
/** /**
* 执行工单出库 * 执行工单出库
*/ */
public synchronized String checkOutLiteOrder(String orderNo, boolean outBom,boolean singleOut) { public synchronized String checkOutLiteOrder(String orderNo, boolean outBom, boolean singleOut) {
LiteOrder cacheOrder = liteOrderMap.get(orderNo); LiteOrder cacheOrder = liteOrderMap.get(orderNo);
if (cacheOrder == null) { if (cacheOrder == null) {
...@@ -519,17 +519,16 @@ public class LiteOrderCache { ...@@ -519,17 +519,16 @@ public class LiteOrderCache {
return "smfcore.order.out.notFound"; return "smfcore.order.out.notFound";
} }
if ( !cacheOrder.isTaskFinished() && !cacheOrder.isNew()) { if (!cacheOrder.isTaskFinished() && !cacheOrder.isNew()) {
log.info("工单[" + orderNo + "]正在执行"); log.info("工单[" + orderNo + "]正在执行");
return "smfcore.order.out.executing"; return "smfcore.order.out.executing";
} }
if(cacheOrder.isClosed()) { if (cacheOrder.isClosed()) {
log.info("工单[" + orderNo + "]已关闭,无法出库"); log.info("工单[" + orderNo + "]已关闭,无法出库");
return "smfcore.order.hasClose"; return "smfcore.order.hasClose";
} }
ORDER_COLOR nextColor = getNextColor(); ORDER_COLOR nextColor = getNextColor();
if (nextColor == null) { if (nextColor == null) {
log.info("执行工单[" + orderNo + "] outBom=" + outBom + "时,已达最大可执行工单数"); log.info("执行工单[" + orderNo + "] outBom=" + outBom + "时,已达最大可执行工单数");
...@@ -538,7 +537,7 @@ public class LiteOrderCache { ...@@ -538,7 +537,7 @@ public class LiteOrderCache {
//先查找是否已经锁定过库位,如果已经锁定过,出锁定的库位 //先查找是否已经锁定过库位,如果已经锁定过,出锁定的库位
List<StoragePos> lockPosList = storagePosManager.findLockPos(cacheOrder.getOrderNo()); List<StoragePos> lockPosList = storagePosManager.findLockPos(cacheOrder.getOrderNo());
if(lockPosList!=null&& lockPosList.size()>0){ if (lockPosList != null && lockPosList.size() > 0) {
return checkOutOrder(cacheOrder).getMsgKey(); return checkOutOrder(cacheOrder).getMsgKey();
} }
...@@ -585,22 +584,22 @@ public class LiteOrderCache { ...@@ -585,22 +584,22 @@ public class LiteOrderCache {
String reelId = orderItem.getRi(); String reelId = orderItem.getRi();
String mpn = orderItem.getMpn(); String mpn = orderItem.getMpn();
StoragePos pos = null; StoragePos pos = null;
if(!Strings.isNullOrEmpty(reelId)){ if (!Strings.isNullOrEmpty(reelId)) {
//RI //RI
pos=storagePosManager.getByBarcode(reelId); pos = storagePosManager.getByBarcode(reelId);
if(pos != null){ if (pos != null) {
if(excludePosIds.contains(pos.getId())) { if (excludePosIds.contains(pos.getId())) {
log.info("工单[" + orderNo + "]RI出库,任务数[" + taskReelCount + "]出库位置仓位【" + pos.getPosName() + "】RI=[" + pos.getBarcode().getBarcode() + "]已在操作队列中,跳过不处理"); log.info("工单[" + orderNo + "]RI出库,任务数[" + taskReelCount + "]出库位置仓位【" + pos.getPosName() + "】RI=[" + pos.getBarcode().getBarcode() + "]已在操作队列中,跳过不处理");
break; break;
} }
}else{ } else {
log.info("工单[" + orderNo + "]RI出库时,库存中未找到料盘["+reelId+"]"); log.info("工单[" + orderNo + "]RI出库时,库存中未找到料盘[" + reelId + "]");
} }
}else if (Strings.isNullOrEmpty(reelId) && !Strings.isNullOrEmpty(partNumber)){ } else if (Strings.isNullOrEmpty(reelId) && !Strings.isNullOrEmpty(partNumber)) {
//PN //PN
pos=storagePosManager.findPartNumberInStorages(availableStorageIds,"", partNumber, excludePosIds, checkoutType,orderItem.getAppendData()); pos = storagePosManager.findPartNumberInStorages(availableStorageIds, "", partNumber, excludePosIds, checkoutType, orderItem.getAppendData());
} else if (Strings.isNullOrEmpty(reelId) && Strings.isNullOrEmpty(partNumber) && !Strings.isNullOrEmpty(mpn)){ } else if (Strings.isNullOrEmpty(reelId) && Strings.isNullOrEmpty(partNumber) && !Strings.isNullOrEmpty(mpn)) {
pos=storagePosManager.findMpnInStorages(availableStorageIds, mpn, excludePosIds, checkoutType,orderItem.getAppendData()); pos = storagePosManager.findMpnInStorages(availableStorageIds, mpn, excludePosIds, checkoutType, orderItem.getAppendData());
} }
if (pos == null) { if (pos == null) {
// log.error("未找到可以出库的物料[" + partNumber + "]"); // log.error("未找到可以出库的物料[" + partNumber + "]");
...@@ -610,7 +609,7 @@ public class LiteOrderCache { ...@@ -610,7 +609,7 @@ public class LiteOrderCache {
assignReelCount = assignReelCount + 1; assignReelCount = assignReelCount + 1;
taskReelCount = taskReelCount + 1; taskReelCount = taskReelCount + 1;
log.info("工单[" + orderNo + "],任务数[" + taskReelCount + "]出库位置仓位【" + pos.getPosName() + "】RI=[" + pos.getBarcode().getBarcode() + "] PN=[" + partNumber + "] num:" + pos.getBarcode().getAmount()); log.info("工单[" + orderNo + "],任务数[" + taskReelCount + "]出库位置仓位【" + pos.getPosName() + "】RI=[" + pos.getBarcode().getBarcode() + "] PN=[" + partNumber + "] num:" + pos.getBarcode().getAmount());
DataLog task = newTask(pos) ; DataLog task = newTask(pos);
task.setSourceId(cacheOrder.getId()); task.setSourceId(cacheOrder.getId());
task.setSourceName(cacheOrder.getOrderNo()); task.setSourceName(cacheOrder.getOrderNo());
...@@ -624,7 +623,7 @@ public class LiteOrderCache { ...@@ -624,7 +623,7 @@ public class LiteOrderCache {
taskService.addTaskToExecute(task); taskService.addTaskToExecute(task);
} }
//如果是RI出库,只有一盘,出完就结束 //如果是RI出库,只有一盘,出完就结束
if(!Strings.isNullOrEmpty(reelId)){ if (!Strings.isNullOrEmpty(reelId)) {
break; break;
} }
} }
...@@ -633,7 +632,7 @@ public class LiteOrderCache { ...@@ -633,7 +632,7 @@ public class LiteOrderCache {
} }
cacheOrder.setTaskReelCount(taskReelCount); cacheOrder.setTaskReelCount(taskReelCount);
cacheOrder.setTotalTaskReelCount(cacheOrder.getTotalTaskReelCount()+taskReelCount); cacheOrder.setTotalTaskReelCount(cacheOrder.getTotalTaskReelCount() + taskReelCount);
log.info("工单[" + orderNo + "]任务分配结束,任务数[" + taskReelCount + "]"); log.info("工单[" + orderNo + "]任务分配结束,任务数[" + taskReelCount + "]");
smfApi.onOrderStatusChange(cacheOrder); smfApi.onOrderStatusChange(cacheOrder);
//有需要出库的 //有需要出库的
...@@ -650,6 +649,7 @@ public class LiteOrderCache { ...@@ -650,6 +649,7 @@ public class LiteOrderCache {
} }
return ""; return "";
} }
/** /**
* 防止仓位任务重复,需要排除掉已经分配掉的出库仓位 * 防止仓位任务重复,需要排除掉已经分配掉的出库仓位
*/ */
...@@ -658,7 +658,7 @@ public class LiteOrderCache { ...@@ -658,7 +658,7 @@ public class LiteOrderCache {
List<DataLog> allTasks = taskService.getAllTasks(); List<DataLog> allTasks = taskService.getAllTasks();
Collection<String> operatingPosIds = new HashSet<>(); Collection<String> operatingPosIds = new HashSet<>();
for (DataLog task : allTasks) { for (DataLog task : allTasks) {
if(task.isCheckOutTask()){ if (task.isCheckOutTask()) {
String posId = task.getPosId(); String posId = task.getPosId();
if (!Strings.isNullOrEmpty(posId)) { if (!Strings.isNullOrEmpty(posId)) {
operatingPosIds.add(task.getPosId()); operatingPosIds.add(task.getPosId());
...@@ -671,7 +671,7 @@ public class LiteOrderCache { ...@@ -671,7 +671,7 @@ public class LiteOrderCache {
private DataLog newTask(StoragePos pos) { private DataLog newTask(StoragePos pos) {
Storage storage = dataCache.getStorageById(pos.getStorageId()); Storage storage = dataCache.getStorageById(pos.getStorageId());
DataLog task = new DataLog(storage,pos.getBarcode(),pos); DataLog task = new DataLog(storage, pos.getBarcode(), pos);
String operator = SecurityUtils.getLoginUsername(); String operator = SecurityUtils.getLoginUsername();
task.setOperator(operator); task.setOperator(operator);
return task; return task;
...@@ -679,25 +679,26 @@ public class LiteOrderCache { ...@@ -679,25 +679,26 @@ public class LiteOrderCache {
/** /**
* 关闭工单 * 关闭工单
*
* @param orderNo * @param orderNo
*/ */
public String closeOrder(String orderNo) { public String closeOrder(String orderNo) {
LiteOrder liteOrder = liteOrderMap.get(orderNo); LiteOrder liteOrder = liteOrderMap.get(orderNo);
if (liteOrder == null) { if (liteOrder == null) {
liteOrder=liteOrderManager.findByOrderNo(orderNo); liteOrder = liteOrderManager.findByOrderNo(orderNo);
if(liteOrder==null){ if (liteOrder == null) {
return "smfcore.order.out.notFound"; return "smfcore.order.out.notFound";
} }
} }
//有任务的工单不能关闭 //有任务的工单不能关闭
List<DataLog> allTask=taskService.getAllTasks(); List<DataLog> allTask = taskService.getAllTasks();
for (DataLog task:allTask for (DataLog task : allTask
) { ) {
if (OP.CHECKOUT == task.getType()&&(!task.isEnd())) { if (OP.CHECKOUT == task.getType() && (!task.isEnd())) {
//更新工单状态 //更新工单状态
String taskSourceName = task.getSourceName(); String taskSourceName = task.getSourceName();
if (!Strings.isNullOrEmpty(taskSourceName) && orderNo.equals(taskSourceName)) { if (!Strings.isNullOrEmpty(taskSourceName) && orderNo.equals(taskSourceName)) {
log.info("关闭工单[" + orderNo + "]失败,有未完成的出库任务:"+task.getPosName()); log.info("关闭工单[" + orderNo + "]失败,有未完成的出库任务:" + task.getPosName());
return "smfcore.order.close.taskNotEnd"; return "smfcore.order.close.taskNotEnd";
} }
} }
...@@ -714,6 +715,7 @@ public class LiteOrderCache { ...@@ -714,6 +715,7 @@ public class LiteOrderCache {
/** /**
* 工单详情补料出库 * 工单详情补料出库
*
* @param orderNo * @param orderNo
* @param orderItemId * @param orderItemId
* @return * @return
...@@ -721,46 +723,46 @@ public class LiteOrderCache { ...@@ -721,46 +723,46 @@ public class LiteOrderCache {
public ResultBean orderItemSupplementOut(String orderNo, String orderItemId) { public ResultBean orderItemSupplementOut(String orderNo, String orderItemId) {
LiteOrder cacheOrder = liteOrderMap.get(orderNo); LiteOrder cacheOrder = liteOrderMap.get(orderNo);
if (cacheOrder == null) { if (cacheOrder == null) {
cacheOrder=liteOrderManager.findByOrderNo(orderNo); cacheOrder = liteOrderManager.findByOrderNo(orderNo);
if(cacheOrder==null){ if (cacheOrder == null) {
return ResultBean.newErrorResult(-1, "smfcore.order.out.notFound", "未找到工单"); return ResultBean.newErrorResult(-1, "smfcore.order.out.notFound", "未找到工单");
} }
} }
if(cacheOrder.isClosed()){ if (cacheOrder.isClosed()) {
return ResultBean.newErrorResult(-1, "smfcore.order.hasClose", "工单已关闭"); return ResultBean.newErrorResult(-1, "smfcore.order.hasClose", "工单已关闭");
} }
List<String> orderItemIds = Lists.newArrayList(orderItemId.split(",")); List<String> orderItemIds = Lists.newArrayList(orderItemId.split(","));
String resultMsg = ""; String resultMsg = "";
int outCount = 0; int outCount = 0;
for (LiteOrderItem orderItem:cacheOrder.getOrderItems()) { for (LiteOrderItem orderItem : cacheOrder.getOrderItems()) {
if(orderItemIds.contains(orderItem.getId())){ if (orderItemIds.contains(orderItem.getId())) {
Collection<String> excludePosIds = excludeOutPosIds(); Collection<String> excludePosIds = excludeOutPosIds();
StoragePos pos = null; StoragePos pos = null;
String reelId = orderItem.getRi(); String reelId = orderItem.getRi();
if(Strings.isNullOrEmpty(reelId)){ if (Strings.isNullOrEmpty(reelId)) {
CHECKOUT_TYPE checkoutType = dataCache.getCheckOutType(); CHECKOUT_TYPE checkoutType = dataCache.getCheckOutType();
List<String> availableStorageIds = dataCache.getAvailableStorageIds(); List<String> availableStorageIds = dataCache.getAvailableStorageIds();
String partNumber = orderItem.getPn(); String partNumber = orderItem.getPn();
//PN //PN
pos = storagePosManager.findPartNumberInStorages(availableStorageIds, partNumber, excludePosIds, checkoutType); pos = storagePosManager.findPartNumberInStorages(availableStorageIds, partNumber, excludePosIds, checkoutType);
}else{ } else {
//RI //RI
pos=storagePosManager.getByBarcode(orderItem.getRi()); pos = storagePosManager.getByBarcode(orderItem.getRi());
} }
if (pos == null) { if (pos == null) {
log.info("PN["+orderItem.getRi()+"]RI["+orderItem.getPn()+"]出库时,未找到物料,忽略"); log.info("PN[" + orderItem.getRi() + "]RI[" + orderItem.getPn() + "]出库时,未找到物料,忽略");
//return "smfcore.order.supplementOutFail"; //return "smfcore.order.supplementOutFail";
continue; continue;
} }
if(excludePosIds.contains(pos.getId())) { if (excludePosIds.contains(pos.getId())) {
log.info("工单[" + orderNo + "]RI出库,仓位【" + pos.getPosName() + "】RI=[" + pos.getBarcode().getBarcode() + "]已在操作队列中,跳过不处理"); log.info("工单[" + orderNo + "]RI出库,仓位【" + pos.getPosName() + "】RI=[" + pos.getBarcode().getBarcode() + "]已在操作队列中,跳过不处理");
}else{ } else {
outCount = outCount + 1; outCount = outCount + 1;
log.info("工单[" + orderNo + "]["+orderItem.getId()+"]补料出库:仓位[" + pos.getPosName() + "]RI=[" + pos.getBarcode().getBarcode() + "] PN=[" + orderItem.getPn() + "] num:" + pos.getBarcode().getAmount()); log.info("工单[" + orderNo + "][" + orderItem.getId() + "]补料出库:仓位[" + pos.getPosName() + "]RI=[" + pos.getBarcode().getBarcode() + "] PN=[" + orderItem.getPn() + "] num:" + pos.getBarcode().getAmount());
DataLog task = newTask(pos) ; DataLog task = newTask(pos);
task.setSourceId(cacheOrder.getId()); task.setSourceId(cacheOrder.getId());
task.setSourceName(cacheOrder.getOrderNo()); task.setSourceName(cacheOrder.getOrderNo());
...@@ -770,23 +772,23 @@ public class LiteOrderCache { ...@@ -770,23 +772,23 @@ public class LiteOrderCache {
// task.setLightColor(nextColor.getRgb()); // task.setLightColor(nextColor.getRgb());
task.setStatus(OP_STATUS.WAIT.name()); task.setStatus(OP_STATUS.WAIT.name());
// task = dataLogDao.save(task); // task = dataLogDao.save(task);
try{ try {
taskService.addTaskToExecute(task); taskService.addTaskToExecute(task);
}catch (Exception e){ } catch (Exception e) {
String msg = "工单[" + orderNo + "]["+orderItem.getId()+"]补料出库:仓位[" + pos.getPosName() + "]RI=[" + pos.getBarcode().getBarcode() + "] PN=[" + orderItem.getPn() + "] num:" + pos.getBarcode().getAmount(); String msg = "工单[" + orderNo + "][" + orderItem.getId() + "]补料出库:仓位[" + pos.getPosName() + "]RI=[" + pos.getBarcode().getBarcode() + "] PN=[" + orderItem.getPn() + "] num:" + pos.getBarcode().getAmount();
log.error("补料生成任务出错["+msg+"]:"+e.getMessage()); log.error("补料生成任务出错[" + msg + "]:" + e.getMessage());
} }
} }
} }
} }
if(outCount > 0){ if (outCount > 0) {
cacheOrder.setTaskReelCount(outCount); cacheOrder.setTaskReelCount(outCount);
cacheOrder.setTaskFinishedTime(-1); cacheOrder.setTaskFinishedTime(-1);
cacheOrder.setFinishedReelCount(0); cacheOrder.setFinishedReelCount(0);
liteOrderManager.save(cacheOrder); liteOrderManager.save(cacheOrder);
liteOrderMap.put(cacheOrder.getOrderNo(), cacheOrder); liteOrderMap.put(cacheOrder.getOrderNo(), cacheOrder);
return ResultBean.newErrorResult(0, "smfcore.order.supplement.result", "操作成功,共出库"+outCount+"盘物料"); return ResultBean.newErrorResult(0, "smfcore.order.supplement.result", "操作成功,共出库" + outCount + "盘物料");
} }
return ResultBean.newErrorResult(-1, "smfcore.order.supplementOutFail", "补料出库失败,无可出库料盘"); return ResultBean.newErrorResult(-1, "smfcore.order.supplementOutFail", "补料出库失败,无可出库料盘");
} }
...@@ -825,17 +827,36 @@ public class LiteOrderCache { ...@@ -825,17 +827,36 @@ public class LiteOrderCache {
} }
public synchronized void preTaskCheckOut(LiteOrder order, String operationId, List<Material> materialList) { public synchronized String preTaskCheckOut(LiteOrder order, String operationId, List<Material> materialList,boolean isRetry) {
order.setStatus(LITEORDER_STATUS.TAILS); order.setStatus(LITEORDER_STATUS.TAILS);
order.setTaskReelCount(0); order.setTaskReelCount(0);
order.setFinishedReelCount(0); order.setFinishedReelCount(0);
log.info("preTaskCheckOut 出库单[" + order.getOrderNo() + "] operatetionId [" + order.getOperationId() + "]开始出库"); log.info("preTaskCheckOut 出库单[" + order.getOrderNo() + "] operatetionId [" + order.getOperationId() + "]开始出库,isRetry=" + isRetry);
int taskReelCount = 0; int taskReelCount = 0;
List<StoragePos> storagePosList = new ArrayList<>();
List<String> barcodeList = new ArrayList<>();
if (isRetry) {
materialList = new ArrayList<>();
for (LiteOrderItem orderItem : order.getOrderItems()) {
if (orderItem.getStatus().equals(OrderItemStatus.executFail)) {
Material material = new Material();
material.setSerialNum(orderItem.getRi());
material.setPartNumber(orderItem.getPn());
materialList.add(material);
barcodeList.add(orderItem.getRi());
}
}
if (materialList.size() < 0) {
log.info("preTaskCheckOut 出库单[" + order.getOrderNo() + "] 未找到可以retry的物料");
return "";
}
storagePosList = storagePosManager.findByQuery(new Query(Criteria.where("barcode.barcode").in(barcodeList)));
} else {
//提取barcode //提取barcode
List<String> barcodeList = materialList.stream().map(item -> item.getSerialNum()).collect(Collectors.toList()); barcodeList = materialList.stream().map(item -> item.getSerialNum()).collect(Collectors.toList());
List<StoragePos> storagePosList = storagePosManager.findByQuery(new Query(Criteria.where("barcode.barcode").in(barcodeList))); storagePosList = storagePosManager.findByQuery(new Query(Criteria.where("barcode.barcode").in(barcodeList)));
if (storagePosList != null && !storagePosList.isEmpty()) { if (storagePosList != null && !storagePosList.isEmpty()) {
materialList = storagePosList.stream().map(item -> { materialList = storagePosList.stream().map(item -> {
Material material = new Material(); Material material = new Material();
...@@ -846,6 +867,8 @@ public class LiteOrderCache { ...@@ -846,6 +867,8 @@ public class LiteOrderCache {
} }
//mes提前扣除,扣除成功的直接出库,失败的标记状态 //mes提前扣除,扣除成功的直接出库,失败的标记状态
}
List<TrackStatus> trackStatusList = new ArrayList<>(); List<TrackStatus> trackStatusList = new ArrayList<>();
try { try {
...@@ -867,7 +890,9 @@ public class LiteOrderCache { ...@@ -867,7 +890,9 @@ public class LiteOrderCache {
} else { } else {
orderItem.setNeedNum(storagePos.getBarcode().getAmount()); orderItem.setNeedNum(storagePos.getBarcode().getAmount());
TrackStatus trackStatus = trackStatusList.stream().filter(item -> ri.equals(item.getSerialNum())).findAny().orElse(null); TrackStatus trackStatus = trackStatusList.stream().filter(item -> ri.equals(item.getSerialNum())).findAny().orElse(null);
if (ObjectUtil.isEmpty(orderItem.getPn())) {
orderItem.setPn(storagePos.getBarcode().getPartNumber());
}
if (trackStatus != null && trackStatus.isSuccess()) { if (trackStatus != null && trackStatus.isSuccess()) {
//生成任务 //生成任务
...@@ -882,6 +907,7 @@ public class LiteOrderCache { ...@@ -882,6 +907,7 @@ public class LiteOrderCache {
taskReelCount++; taskReelCount++;
//设置状态.正在出库 //设置状态.正在出库
orderItem.setStatus(OrderItemStatus.executing); orderItem.setStatus(OrderItemStatus.executing);
orderItem.setExecutFailReason("");
log.info("preTaskCheckOut 出库单[" + order.getOrderNo() + "] operatetionId [" + order.getOperationId() + "] ,pn[" + orderItem.getPn() + "] ,RI[" + ri + "] 验证成功,开始出库,累计出库盘数=" + taskReelCount); log.info("preTaskCheckOut 出库单[" + order.getOrderNo() + "] operatetionId [" + order.getOperationId() + "] ,pn[" + orderItem.getPn() + "] ,RI[" + ri + "] 验证成功,开始出库,累计出库盘数=" + taskReelCount);
} else { } else {
...@@ -903,6 +929,21 @@ public class LiteOrderCache { ...@@ -903,6 +929,21 @@ public class LiteOrderCache {
log.info("preTaskCheckOut 出库单[" + order.getOrderNo() + "] operatetionId [" + order.getOperationId() + "] 出库完成,累计任务数=" + taskReelCount); log.info("preTaskCheckOut 出库单[" + order.getOrderNo() + "] operatetionId [" + order.getOperationId() + "] 出库完成,累计任务数=" + taskReelCount);
order.setTaskReelCount(taskReelCount); order.setTaskReelCount(taskReelCount);
order.setTotalTaskReelCount(order.getTotalTaskReelCount() + taskReelCount); order.setTotalTaskReelCount(order.getTotalTaskReelCount() + taskReelCount);
int currTask = 0;
if (isRetry) {
//判断是否之前有未结束任务
List<DataLog> dataLogs = new ArrayList<>();
dataLogs.addAll(taskService.getQueueTasks());
for (DataLog log :
dataLogs) {
if (log.isCheckOutTask() && ObjectUtil.isNotEmpty(log.getSourceId()) && log.getSourceId().equals(order.getId())) {
currTask++;
}
}
if (currTask > 0) {
log.info("dispatchCheckOut 出库单[" + order.getOrderNo() + "] 还有 [" + currTask + "] 未完成的出库任务");
}
}
if (taskReelCount <= 0) { if (taskReelCount <= 0) {
if (order.isOutTails()) { if (order.isOutTails()) {
order.setStatus(LITEORDER_STATUS.TAILS_FINISHED); order.setStatus(LITEORDER_STATUS.TAILS_FINISHED);
...@@ -911,12 +952,13 @@ public class LiteOrderCache { ...@@ -911,12 +952,13 @@ public class LiteOrderCache {
} }
liteOrderManager.save(order); liteOrderManager.save(order);
addOrderToMap(order); addOrderToMap(order);
return "";
} }
/** /**
* 工单挑料,OutSide Shelf Dispatch Controlled Dispatch * 工单挑料,OutSide Shelf Dispatch Controlled Dispatch
*/ */
public synchronized String OrderReady(String orderNo,String lineId ) { public synchronized String OrderReady(String orderNo, String lineId) {
LiteOrder cacheOrder = liteOrderMap.get(orderNo); LiteOrder cacheOrder = liteOrderMap.get(orderNo);
if (cacheOrder == null) { if (cacheOrder == null) {
...@@ -1054,9 +1096,9 @@ public class LiteOrderCache { ...@@ -1054,9 +1096,9 @@ public class LiteOrderCache {
//调用API009进行验证 //调用API009进行验证
Map<String, MaterialStatus> apiResultMap = MicronApi.Api009(cacheOrder.getOperationId(),lineId, allBarcodes); Map<String, MaterialStatus> apiResultMap = MicronApi.Api009(cacheOrder.getOperationId(), lineId, allBarcodes);
List<StoragePos> lockPos=new ArrayList<>(); List<StoragePos> lockPos = new ArrayList<>();
for (LiteOrderItem item : for (LiteOrderItem item :
newItems) { newItems) {
item.setOutNum(0); item.setOutNum(0);
...@@ -1066,7 +1108,7 @@ public class LiteOrderCache { ...@@ -1066,7 +1108,7 @@ public class LiteOrderCache {
for (LiteOrderItem reelItem : for (LiteOrderItem reelItem :
item.getSelectItems()) { item.getSelectItems()) {
MaterialStatus s = apiResultMap.get(reelItem.getRi()); MaterialStatus s = apiResultMap.get(reelItem.getRi());
if (s!=null&& s.isAvailable()) { if (s != null && s.isAvailable()) {
reelItem.setStatus(OrderItemStatus.CheckOk); reelItem.setStatus(OrderItemStatus.CheckOk);
StoragePos pos = storagePosManager.getByBarcode(s.getSerialNum()); StoragePos pos = storagePosManager.getByBarcode(s.getSerialNum());
log.info("工单【" + orderNo + "】PN [" + item.getPn() + "] RI [" + item.getRi() + "] API009 验证成功,更改状态为 CheckOk ,锁定库位【" + pos.getPosName() + "】"); log.info("工单【" + orderNo + "】PN [" + item.getPn() + "] RI [" + item.getRi() + "] API009 验证成功,更改状态为 CheckOk ,锁定库位【" + pos.getPosName() + "】");
...@@ -1112,13 +1154,12 @@ public class LiteOrderCache { ...@@ -1112,13 +1154,12 @@ public class LiteOrderCache {
} }
public synchronized String dispatchCheckOut(LiteOrder order, boolean isRetry) {
public synchronized void dispatchCheckOut(LiteOrder order ) {
order.setStatus(LITEORDER_STATUS.TAILS); order.setStatus(LITEORDER_STATUS.TAILS);
order.setTaskReelCount(0); order.setTaskReelCount(0);
order.setFinishedReelCount(0); order.setFinishedReelCount(0);
log.info("dispatchCheckOut 出库单[" + order.getOrderNo() + "] operatetionId [" + order.getOperationId() + "]开始出库"); log.info("dispatchCheckOut 出库单[" + order.getOrderNo() + "] operatetionId [" + order.getOperationId() + "]开始出库,isRetry="+isRetry);
int taskReelCount = 0; int taskReelCount = 0;
List<String> needOutBarcode = new ArrayList<>(); List<String> needOutBarcode = new ArrayList<>();
...@@ -1127,13 +1168,24 @@ public class LiteOrderCache { ...@@ -1127,13 +1168,24 @@ public class LiteOrderCache {
for (LiteOrderItem selItem : for (LiteOrderItem selItem :
item.getSelectItems()) { item.getSelectItems()) {
if (isRetry) {
if (selItem.getStatus().equals(OrderItemStatus.executFail)) {
//retry检查出库失败的
needOutBarcode.add(selItem.getRi());
}
} else {
if (selItem.getStatus().equals(OrderItemStatus.CheckOk)) { if (selItem.getStatus().equals(OrderItemStatus.CheckOk)) {
//只出checkOK的 //只出checkOK的
needOutBarcode.add(selItem.getRi()); needOutBarcode.add(selItem.getRi());
} }
} }
} }
}
if (needOutBarcode.size() < 0) {
log.info("dispatchCheckOut 出库单[" + order.getOrderNo() + "] 未找到可以retry的物料");
return "";
}
List<StoragePos> storagePosList = storagePosManager.findByQuery(new Query(Criteria.where("barcode.barcode").in(needOutBarcode))); List<StoragePos> storagePosList = storagePosManager.findByQuery(new Query(Criteria.where("barcode.barcode").in(needOutBarcode)));
List<Material> materialList = new ArrayList<>(); List<Material> materialList = new ArrayList<>();
...@@ -1173,11 +1225,12 @@ public class LiteOrderCache { ...@@ -1173,11 +1225,12 @@ public class LiteOrderCache {
taskReelCount++; taskReelCount++;
//设置状态.正在出库 //设置状态.正在出库
selItem.setStatus(OrderItemStatus.executing); selItem.setStatus(OrderItemStatus.executing);
selItem.setExecutFailReason("");
outNum += storagePos.getBarcode().getAmount(); outNum += storagePos.getBarcode().getAmount();
outReelCount += 1; outReelCount += 1;
log.info("dispatchCheckOut 出库单[" + order.getOrderNo() + "] operatetionId [" + order.getOperationId() + "] ,pn[" + orderItem.getPn() + "] ,RI[" + ri + "] 验证成功,开始出库,累计出库盘数=" + taskReelCount); log.info("dispatchCheckOut 出库单[" + order.getOrderNo() + "] operatetionId [" + order.getOperationId() + "] ,pn[" + orderItem.getPn() + "] ,RI[" + ri + "] 验证成功,开始出库,累计出库盘数=" + taskReelCount);
} else { } else {
if(trackStatus!=null){ if (trackStatus != null) {
selItem.setExecutFailReason(trackStatus.getDescription()); selItem.setExecutFailReason(trackStatus.getDescription());
} }
selItem.setStatus(OrderItemStatus.executFail); selItem.setStatus(OrderItemStatus.executFail);
...@@ -1198,7 +1251,24 @@ public class LiteOrderCache { ...@@ -1198,7 +1251,24 @@ public class LiteOrderCache {
log.info("dispatchCheckOut 出库单[" + order.getOrderNo() + "] operatetionId [" + order.getOperationId() + "] 出库完成,累计任务数=" + taskReelCount); log.info("dispatchCheckOut 出库单[" + order.getOrderNo() + "] operatetionId [" + order.getOperationId() + "] 出库完成,累计任务数=" + taskReelCount);
order.setTaskReelCount(taskReelCount); order.setTaskReelCount(taskReelCount);
order.setTotalTaskReelCount(order.getTotalTaskReelCount() + taskReelCount); order.setTotalTaskReelCount(order.getTotalTaskReelCount() + taskReelCount);
if (taskReelCount <= 0) {
int currTask = 0;
if (isRetry) {
//判断是否之前有未结束任务
List<DataLog> dataLogs = new ArrayList<>();
dataLogs.addAll(taskService.getQueueTasks());
for (DataLog log :
dataLogs) {
if (log.isCheckOutTask() && ObjectUtil.isNotEmpty(log.getSourceId()) && log.getSourceId().equals(order.getId())) {
currTask++;
}
}
if (currTask > 0) {
log.info("dispatchCheckOut 出库单[" + order.getOrderNo() + "] 还有 [" + currTask + "] 未完成的出库任务");
}
}
if (taskReelCount <= 0 && currTask <= 0) {
if (order.isOutTails()) { if (order.isOutTails()) {
order.setStatus(LITEORDER_STATUS.TAILS_FINISHED); order.setStatus(LITEORDER_STATUS.TAILS_FINISHED);
} }
...@@ -1206,5 +1276,6 @@ public class LiteOrderCache { ...@@ -1206,5 +1276,6 @@ public class LiteOrderCache {
} }
liteOrderManager.save(order); liteOrderManager.save(order);
addOrderToMap(order); addOrderToMap(order);
return "";
} }
} }
...@@ -203,7 +203,7 @@ public class MicronApi { ...@@ -203,7 +203,7 @@ public class MicronApi {
throw new ApiException("smfcore.api.001." + errmsg, error + ";" + errmsg, new String[]{}); throw new ApiException("smfcore.api.001." + errmsg, error + ";" + errmsg, new String[]{});
} else { } else {
log.info("API001 ,验证失败,获取数据失败:" + errmsg); log.info("API001 ,验证失败,获取数据失败:" + errmsg);
throw new ApiException("smfcore.api.fail", "{0} Failed to get data", new String[]{"API001"}); throw new ApiException("smfcore.api.fail", "{0} Failed to get data", new String[]{"API001 : "+result.getResponseData()});
} }
} }
...@@ -357,7 +357,7 @@ public class MicronApi { ...@@ -357,7 +357,7 @@ public class MicronApi {
} }
else{ else{
log.info("API002 ,接口通信失败"); log.info("API002 ,接口通信失败");
throw new ApiException("smfcore.api.fail", "{0} Failed to get data", new String[]{"API002"}); throw new ApiException("smfcore.api.fail", "{0} Failed to get data", new String[]{"API002 : "+result.getResponseData()});
} }
return resultMap; return resultMap;
} }
...@@ -433,7 +433,7 @@ public class MicronApi { ...@@ -433,7 +433,7 @@ public class MicronApi {
log.info("API004 ,接口通信失败"); log.info("API004 ,接口通信失败");
//throw new ApiException("smfcore.api.fail", "{0} Failed to get data", new String[]{"API004"}); //throw new ApiException("smfcore.api.fail", "{0} Failed to get data", new String[]{"API004"});
String msg = "API004 Failed to get data"; String msg = "API004 : "+result.getResponseData()+" Failed to get data";
Object message = result.getResult("message", false); Object message = result.getResult("message", false);
if (message != null){ if (message != null){
msg = message.toString(); msg = message.toString();
...@@ -453,36 +453,42 @@ public class MicronApi { ...@@ -453,36 +453,42 @@ public class MicronApi {
String url = config.getUrl(config.api_name_005); String url = config.getUrl(config.api_name_005);
List<Material> materialList = new ArrayList<>(); List<Material> materialList = new ArrayList<>();
if( Debug){ if (Debug) {
materialList.add(new Material("serialNum1","partNumber1")); materialList.add(new Material("serialNum1", "partNumber1"));
return materialList; return materialList;
} }
url = MessageFormat.format(url,operationId,linePrepOrderId); url = MessageFormat.format(url, operationId, linePrepOrderId);
try { try {
log.info("调用MES接口 API005: url=" + url + ""); log.info("调用MES接口 API005: url=" + url + "");
MicronResult result = HttpHelper.getMicronJson(url); MicronResult result = HttpHelper.getMicronJson(url);
String errMsg=getDErrorMsg(result); String errMsg = getDErrorMsg(result);
if (result.isOk() ) { if (result.isOk()) {
List<Object> objects = result.getResult("materials",false); List<Object> objects = result.getResult("materials", false);
if(objects==null||objects.size()<=0){ if (objects == null || objects.size() <= 0) {
log.info("API005 ,接口通信失败"); if (ObjectUtil.isNotEmpty(errMsg)) {
throw new ApiException("smfcore.api.fail", "{0} Failed to get data", new String[]{"API005"});
log.info("API005 ,接口通信失败:" + errMsg);
throw new ApiException(errMsg);
} else {
log.info("API005 ,接口通信失败 :" + result.getResponseData());
throw new ApiException("smfcore.api.fail", "{0} Failed to get data", new String[]{"API005 : " + result.getResponseData()});
}
} }
for (Object object : for (Object object :
objects) { objects) {
Material material= JsonUtil.toObj(JsonUtil.toJsonStr( object) ,Material.class); Material material = JsonUtil.toObj(JsonUtil.toJsonStr(object), Material.class);
materialList.add(material); materialList.add(material);
} }
return materialList; return materialList;
} } else if (ObjectUtil.isNotEmpty(errMsg)) {
else if(ObjectUtil.isNotEmpty(errMsg)) {
log.info("API005 ,接口通信失败:" + errMsg); log.info("API005 ,接口通信失败:" + errMsg);
throw new ApiException(errMsg); throw new ApiException(errMsg);
}else{ } else {
log.info("API005 ,接口通信失败"); log.info("API005 ,接口通信失败 :" + result.getResponseData());
throw new ApiException("smfcore.api.fail", "{0} Failed to get data", new String[]{"API005"}); throw new ApiException("smfcore.api.fail", "{0} Failed to get data", new String[]{"API005 : " + result.getResponseData()});
} }
} catch (Exception e) { } catch (Exception e) {
log.error(url + "出错", e); log.error(url + "出错", e);
...@@ -524,8 +530,14 @@ public class MicronApi { ...@@ -524,8 +530,14 @@ public class MicronApi {
List<Object> objects = result.getResult("materials",false); List<Object> objects = result.getResult("materials",false);
if(objects==null||objects.size()<=0){ if(objects==null||objects.size()<=0){
if(ObjectUtil.isNotEmpty(errMsg)){
log.info("API006 ,接口通信失败:" + errMsg);
throw new ApiException(errMsg);
}else{
log.info("API006 ,接口通信失败"); log.info("API006 ,接口通信失败");
throw new ApiException("smfcore.api.fail", "{0} Failed to get data", new String[]{"API006"}); throw new ApiException("smfcore.api.fail", "{0} Failed to get data", new String[]{"API006:"+result.getResponseData()});
}
} }
for (Object object : for (Object object :
objects) { objects) {
...@@ -539,7 +551,7 @@ public class MicronApi { ...@@ -539,7 +551,7 @@ public class MicronApi {
}else{ }else{
log.info("API006 ,接口通信失败"); log.info("API006 ,接口通信失败");
throw new ApiException("smfcore.api.fail", "{0} Failed to get data", new String[]{"API006"}); throw new ApiException("smfcore.api.fail", "{0} Failed to get data", new String[]{"API006:"+result.getResponseData()});
} }
} catch (Exception e) { } catch (Exception e) {
...@@ -603,7 +615,7 @@ public class MicronApi { ...@@ -603,7 +615,7 @@ public class MicronApi {
// throw new ApiException(errMsg); // throw new ApiException(errMsg);
} else { } else {
log.info("API007 ,接口通信失败"); log.info("API007 ,接口通信失败");
throw new ApiException("smfcore.api.fail", "{0} Failed to get data", new String[]{"API007"}); throw new ApiException("smfcore.api.fail", "{0} Failed to get data", new String[]{"API007 : "+micronResult.getResponseData()});
} }
} catch (ApiException e) { } catch (ApiException e) {
...@@ -650,7 +662,7 @@ public class MicronApi { ...@@ -650,7 +662,7 @@ public class MicronApi {
} else { } else {
log.info("API008 ,接口通信失败"); log.info("API008 ,接口通信失败");
throw new ApiException("smfcore.api.fail", "{0} Failed to get data", new String[]{"API008"}); throw new ApiException("smfcore.api.fail", "{0} Failed to get data", new String[]{"API008 : "+micronResult.getResponseData()});
} }
} catch (ApiException e) { } catch (ApiException e) {
log.error(url + "出错", e); log.error(url + "出错", e);
...@@ -731,7 +743,7 @@ public class MicronApi { ...@@ -731,7 +743,7 @@ public class MicronApi {
} else { } else {
log.info("API009 ,接口通信失败"); log.info("API009 ,接口通信失败");
throw new ApiException("smfcore.api.fail", "{0} Failed to get data", new String[]{"API009"}); throw new ApiException("smfcore.api.fail", "{0} Failed to get data", new String[]{"API009: "+micronResult.getResponseData()});
} }
} catch (ApiException e) { } catch (ApiException e) {
log.error(url + "出错", e); log.error(url + "出错", e);
...@@ -741,7 +753,7 @@ public class MicronApi { ...@@ -741,7 +753,7 @@ public class MicronApi {
public static List<TrackStatus> Api010(String operationId, List<Material> materialList) { public static List<TrackStatus> Api010(String operationId, List<Material> materialList) {
//出库前预扣
List<TrackStatus> statusList = new ArrayList<>(); List<TrackStatus> statusList = new ArrayList<>();
if(Debug){ if(Debug){
for (Material m : for (Material m :
...@@ -780,11 +792,6 @@ public class MicronApi { ...@@ -780,11 +792,6 @@ public class MicronApi {
TrackStatus s= JsonUtil.toObj(JsonUtil.toJsonStr( obj) ,TrackStatus.class); TrackStatus s= JsonUtil.toObj(JsonUtil.toJsonStr( obj) ,TrackStatus.class);
statusList.add(s); statusList.add(s);
} }
// if(statusList==null||statusList.size()<=0){
//
// log.info("API010 ,接口通信失败");
// throw new ApiException("smfcore.api.fail", "{0} Failed to get data", new String[]{"API010"});
// }
} }
if( ObjectUtil.isNotEmpty(errMsg)&&( statusList==null||statusList.size()<=0) ){ if( ObjectUtil.isNotEmpty(errMsg)&&( statusList==null||statusList.size()<=0) ){
for (Material m : for (Material m :
...@@ -804,7 +811,7 @@ public class MicronApi { ...@@ -804,7 +811,7 @@ public class MicronApi {
} }
else{ else{
log.info("API010 ,接口通信失败"); log.info("API010 ,接口通信失败");
throw new ApiException("smfcore.api.fail", "{0} Failed to get data", new String[]{"API010"}); throw new ApiException("smfcore.api.fail", "{0} Failed to get data", new String[]{"API010 : "+micronResult.getResponseData()});
} }
//statusList = micronResult.getResult("trackStatus"); //statusList = micronResult.getResult("trackStatus");
} catch (Exception e) { } catch (Exception e) {
...@@ -847,7 +854,7 @@ public class MicronApi { ...@@ -847,7 +854,7 @@ public class MicronApi {
}else{ }else{
log.info("Api011 ,接口通信失败"); log.info("Api011 ,接口通信失败");
throw new ApiException("smfcore.api.fail", "{0} Failed to get data", new String[]{"Api011"}); throw new ApiException("smfcore.api.fail", "{0} Failed to get data", new String[]{"Api011 : "+result.getResponseData()});
} }
} catch (Exception e) { } catch (Exception e) {
log.error(url + "出错", e); log.error(url + "出错", e);
...@@ -946,7 +953,7 @@ public class MicronApi { ...@@ -946,7 +953,7 @@ public class MicronApi {
if (ObjectUtil.isNotEmpty(msg)) { if (ObjectUtil.isNotEmpty(msg)) {
return msg; return msg;
} }
throw new ApiException("smfcore.api.fail", "{0} Failed to get data", new String[]{"Api201"}); throw new ApiException("smfcore.api.fail", "{0} Failed to get data", new String[]{"Api201 : "+result.getResponseData()});
} catch (ApiException e) { } catch (ApiException e) {
log.error(url + "出错", e); log.error(url + "出错", e);
return e.getMessage(); return e.getMessage();
......
...@@ -534,6 +534,7 @@ private IStoragePosManager storagePosManager; ...@@ -534,6 +534,7 @@ private IStoragePosManager storagePosManager;
public ResultBean checkOut(@RequestBody Map<String,Object> params) { public ResultBean checkOut(@RequestBody Map<String,Object> params) {
String mode = params.get("mode").toString(); String mode = params.get("mode").toString();
log.info(" checkOut :mode=" + mode + ",开始确认出库");
//判断有没有生成任务 //判断有没有生成任务
LiteOrder order = getOrderByMode(mode); LiteOrder order = getOrderByMode(mode);
...@@ -542,7 +543,7 @@ private IStoragePosManager storagePosManager; ...@@ -542,7 +543,7 @@ private IStoragePosManager storagePosManager;
} }
//调用API010扣除库存,扣除成功的才可以出库 //调用API010扣除库存,扣除成功的才可以出库
liteOrderCache.dispatchCheckOut(order); liteOrderCache.dispatchCheckOut(order,false);
//工单开始出库 //工单开始出库
...@@ -556,48 +557,58 @@ private IStoragePosManager storagePosManager; ...@@ -556,48 +557,58 @@ private IStoragePosManager storagePosManager;
public ResultBean retry(@RequestBody Map<String,Object> params) { public ResultBean retry(@RequestBody Map<String,Object> params) {
String mode = params.get("mode").toString(); String mode = params.get("mode").toString();
log.info(" retry :mode=" + mode + ",入库完成发送失败的,重新发送,其他状态暂不处理"); log.info(" retry :mode=" + mode + ",重新出库");
//判断有没有生成任务 //判断有没有生成任务
LiteOrder order=getOrderByMode(mode); LiteOrder order = getOrderByMode(mode);
if (order == null) { if (order == null) {
return ResultBean.newErrorResult(-1, "smfcore.micron.operationFailure", "操作失败"); return ResultBean.newErrorResult(-1, "smfcore.micron.operationFailure", "操作失败");
} }
List<LiteOrderItem> liteOrderItemList=order.getOrderItems();
List<LiteOrderItem> orderItems = new ArrayList<>();
boolean canClose=true;
for (LiteOrderItem orderItem :
liteOrderItemList) {
if (orderItem.getStatus() == OrderItemStatus.notify_fail) {
String id = orderItem.getId();
List<DataLog> dataLogList = dataLogManager.findByQuery(new Query(Criteria.where("subSourceId").is(id)));
if (dataLogList != null && !dataLogList.isEmpty()) {
log.info("retry: [" + order.getOrderNo() + "] [" + orderItem.getRi() + "] 重发API007 ");
String msg = MicronApi.Api007(order.getOrderNo(), order.getId(), dataLogList);
if (ObjectUtil.isEmpty(msg)) {
orderItem.setStatus(OrderItemStatus.notify_success);
} else {
orderItem.setExecutFailReason(msg);
orderItem.setStatus(OrderItemStatus.notify_fail);
canClose=false;
}
liteOrderItemManager.save(orderItem);
} liteOrderCache.dispatchCheckOut(order,true);
}else if(orderItem.getStatus()==OrderItemStatus.executing){
canClose=false;
}
orderItems.add(orderItem);
}
order.setOrderItems(orderItems);
if(canClose){
//可以关闭工单
CloseOrder(order);
}else{
liteOrderCache.addOrderToMap(order);
}
return ResultBean.newOkResult(""); return ResultBean.newOkResult("");
// //判断有没有生成任务
// LiteOrder order=getOrderByMode(mode);
// if (order == null) {
// return ResultBean.newErrorResult(-1, "smfcore.micron.operationFailure", "操作失败");
// }
// List<LiteOrderItem> liteOrderItemList=order.getOrderItems();
// List<LiteOrderItem> orderItems = new ArrayList<>();
// boolean canClose=true;
// for (LiteOrderItem orderItem :
// liteOrderItemList) {
// if (orderItem.getStatus() == OrderItemStatus.notify_fail) {
// String id = orderItem.getId();
// List<DataLog> dataLogList = dataLogManager.findByQuery(new Query(Criteria.where("subSourceId").is(id)));
// if (dataLogList != null && !dataLogList.isEmpty()) {
//
// log.info("retry: [" + order.getOrderNo() + "] [" + orderItem.getRi() + "] 重发API007 ");
// String msg = MicronApi.Api007(order.getOrderNo(), order.getId(), dataLogList);
// if (ObjectUtil.isEmpty(msg)) {
// orderItem.setStatus(OrderItemStatus.notify_success);
// } else {
// orderItem.setExecutFailReason(msg);
// orderItem.setStatus(OrderItemStatus.notify_fail);
// canClose=false;
// }
// liteOrderItemManager.save(orderItem);
//
// }
// }else if(orderItem.getStatus()==OrderItemStatus.executing){
// canClose=false;
// }
// orderItems.add(orderItem);
// }
// order.setOrderItems(orderItems);
// if(canClose){
// //可以关闭工单
// CloseOrder(order);
// }else{
//
// liteOrderCache.addOrderToMap(order);
// }
// return ResultBean.newOkResult("");
} }
private void CloseOrder(LiteOrder order) { private void CloseOrder(LiteOrder order) {
......
...@@ -221,7 +221,8 @@ public class MicronPreTaskController { ...@@ -221,7 +221,8 @@ public class MicronPreTaskController {
liteOrderCache.addOrderToMap(liteOrder); liteOrderCache.addOrderToMap(liteOrder);
log.info("submit 勾选后,生成工单:[" + operationId + "][" + mode + "]"); log.info("submit 勾选后,生成工单:[" + operationId + "][" + mode + "]");
//开始查询是否可以出库 //开始查询是否可以出库
liteOrderCache.preTaskCheckOut(liteOrder, operationId, materialList); String msg= liteOrderCache.preTaskCheckOut(liteOrder, operationId, materialList,false);
} }
}catch (Exception ex){ }catch (Exception ex){
...@@ -258,53 +259,65 @@ public class MicronPreTaskController { ...@@ -258,53 +259,65 @@ public class MicronPreTaskController {
@AnonymousAccess @AnonymousAccess
public ResultBean retry(@RequestBody Map<String,Object> params) { public ResultBean retry(@RequestBody Map<String,Object> params) {
String mode=params.get("mode").toString(); String mode = params.get("mode").toString();
log.info(" retry :mode=" + mode + ",入库完成发送失败的,重新发送,其他状态暂不处理"); log.info(" retry :mode=" + mode + ",重新出库");
TaskDto dto = getTaskDtoByMode(mode); TaskDto dto = getTaskDtoByMode(mode);
if (dto == null) { if (dto == null) {
return ResultBean.newErrorResult(-1, "smfcore.micron.operationFailure", "操作失败"); return ResultBean.newErrorResult(-1, "smfcore.micron.operationFailure", "操作失败");
} }
//判断有没有生成任务 //判断有没有生成任务
LiteOrder order=getOrderByMode(mode); LiteOrder order = getOrderByMode(mode);
if (order == null) { if (order == null) {
return ResultBean.newErrorResult(-1, "smfcore.micron.operationFailure", "操作失败"); return ResultBean.newErrorResult(-1, "smfcore.micron.operationFailure", "操作失败");
} }
List<LiteOrderItem> liteOrderItemList=order.getOrderItems(); try {
List<LiteOrderItem> orderItems = new ArrayList<>(); //开始查询是否可以出库
boolean canClose=true; String msg = liteOrderCache.preTaskCheckOut(order, dto.getOperationId(), new ArrayList<>(), true);
for (LiteOrderItem orderItem : if (ObjectUtil.isNotEmpty(msg)) {
liteOrderItemList) { return ResultBean.newErrorResult(-1, msg, "操作失败");
if (orderItem.getStatus() == OrderItemStatus.notify_fail) {
String id = orderItem.getId();
List<DataLog> dataLogList = dataLogManager.findByQuery(new Query(Criteria.where("subSourceId").is(id)));
if (dataLogList != null && !dataLogList.isEmpty()) {
log.info("retry: [" + order.getOrderNo() + "] [" + orderItem.getRi() + "] 重发API007 ");
String msg = MicronApi.Api007(order.getOrderNo(), order.getId(), dataLogList);
if (ObjectUtil.isEmpty(msg)) {
orderItem.setStatus(OrderItemStatus.notify_success);
} else {
orderItem.setExecutFailReason(msg);
orderItem.setStatus(OrderItemStatus.notify_fail);
canClose=false;
} }
liteOrderItemManager.save(orderItem); } catch (Exception ex) {
return ResultBean.newErrorResult(-1, "smfcore.micron.operationFailure", "操作失败");
} }
}else if(orderItem.getStatus()==OrderItemStatus.executing){
canClose=false;
}
orderItems.add(orderItem);
}
order.setOrderItems(orderItems);
if(canClose){
//可以关闭工单
CloseOrder(order);
}else{
liteOrderCache.addOrderToMap(order);
}
return ResultBean.newOkResult(""); return ResultBean.newOkResult("");
// List<LiteOrderItem> liteOrderItemList=order.getOrderItems();
// List<LiteOrderItem> orderItems = new ArrayList<>();
// boolean canClose=true;
// for (LiteOrderItem orderItem :
// liteOrderItemList) {
// if (orderItem.getStatus() == OrderItemStatus.notify_fail) {
// String id = orderItem.getId();
// List<DataLog> dataLogList = dataLogManager.findByQuery(new Query(Criteria.where("subSourceId").is(id)));
// if (dataLogList != null && !dataLogList.isEmpty()) {
//
// log.info("retry: [" + order.getOrderNo() + "] [" + orderItem.getRi() + "] 重发API007 ");
// String msg = MicronApi.Api007(order.getOrderNo(), order.getId(), dataLogList);
// if (ObjectUtil.isEmpty(msg)) {
// orderItem.setStatus(OrderItemStatus.notify_success);
// } else {
// orderItem.setExecutFailReason(msg);
// orderItem.setStatus(OrderItemStatus.notify_fail);
// canClose=false;
// }
// liteOrderItemManager.save(orderItem);
//
// }
// }else if(orderItem.getStatus()==OrderItemStatus.executing){
// canClose=false;
// }
// orderItems.add(orderItem);
// }
// order.setOrderItems(orderItems);
// if(canClose){
// //可以关闭工单
// CloseOrder(order);
// }else{
//
// liteOrderCache.addOrderToMap(order);
// }
// return ResultBean.newOkResult("");
} }
......
...@@ -360,6 +360,7 @@ smfcore.paretoChart=\u5E15\u7D2F\u6258\u56FE ...@@ -360,6 +360,7 @@ smfcore.paretoChart=\u5E15\u7D2F\u6258\u56FE
smfcore.selfAudit.hasOutTask=\u5E93\u4F4D[{0}]\u5DF2\u6709\u51FA\u5E93\u4EFB\u52A1 smfcore.selfAudit.hasOutTask=\u5E93\u4F4D[{0}]\u5DF2\u6709\u51FA\u5E93\u4EFB\u52A1
smfcore.error.barcode.hastask=\u6761\u7801[0]\u5DF2\u6709\u5165\u5E93\u4EFB\u52A1 smfcore.error.barcode.hastask=\u6761\u7801[0]\u5DF2\u6709\u5165\u5E93\u4EFB\u52A1
smfcore.error.barcode.hasOutTask=\u5E8F\u5217\u53F7[0] \u5DF2\u6709\u51FA\u5E93\u4EFB\u52A1\uFF0C\u51FA\u5E93\u524D\u4E0D\u5F97\u5165\u5E93\u76F8\u540C\u5E8F\u5217\u53F7\u7269\u6599 smfcore.error.barcode.hasOutTask=\u5E8F\u5217\u53F7[0] \u5DF2\u6709\u51FA\u5E93\u4EFB\u52A1\uFF0C\u51FA\u5E93\u524D\u4E0D\u5F97\u5165\u5E93\u76F8\u540C\u5E8F\u5217\u53F7\u7269\u6599
smfcore.error.noRetryReel=No material found to retry
#smfclient.nlp.onlyOneTray=\u4E0D\u53EF\u540C\u65F6\u653E\u5165\u591A\u76D8\u7269\u6599:{0} #smfclient.nlp.onlyOneTray=\u4E0D\u53EF\u540C\u65F6\u653E\u5165\u591A\u76D8\u7269\u6599:{0}
#smfclient.nlp.cannotFindPos={0}\u672A\u627E\u5230\u5E93\u4F4D:{1} #smfclient.nlp.cannotFindPos={0}\u672A\u627E\u5230\u5E93\u4F4D:{1}
#smfclient.nlp.inputOk={0}\u5165\u5E93\u5230{1}\u6210\u529F #smfclient.nlp.inputOk={0}\u5165\u5E93\u5230{1}\u6210\u529F
......
...@@ -359,3 +359,4 @@ smfcore.paretoChart=Pareto chart ...@@ -359,3 +359,4 @@ smfcore.paretoChart=Pareto chart
smfcore.selfAudit.hasOutTask=The location [{0}] already has a release task smfcore.selfAudit.hasOutTask=The location [{0}] already has a release task
smfcore.error.barcode.hastask=Serial No.(S)[0] already have storage task smfcore.error.barcode.hastask=Serial No.(S)[0] already have storage task
smfcore.error.barcode.hasOutTask=Serial No.(S)[0] already have retrieval task, cannot store same Serial No. material before retrieval finish smfcore.error.barcode.hasOutTask=Serial No.(S)[0] already have retrieval task, cannot store same Serial No. material before retrieval finish
smfcore.error.noRetryReel=No material found to retry
\ No newline at end of file \ No newline at end of file
...@@ -354,3 +354,4 @@ smfcore.paretoChart=\u30D1\u30EC\u30FC\u30C8\u56F3 ...@@ -354,3 +354,4 @@ smfcore.paretoChart=\u30D1\u30EC\u30FC\u30C8\u56F3
smfcore.selfAudit.hasOutTask=\u5E93\u4F4D[{0}]\u5DF2\u6709\u51FA\u5E93\u4EFB\u52A1 smfcore.selfAudit.hasOutTask=\u5E93\u4F4D[{0}]\u5DF2\u6709\u51FA\u5E93\u4EFB\u52A1
smfcore.error.barcode.hastask=Serial No.(S)[0] already have storage task smfcore.error.barcode.hastask=Serial No.(S)[0] already have storage task
smfcore.error.barcode.hasOutTask=Serial No.(S)[0] already have retrieval task, cannot store same Serial No. material before retrieval finish smfcore.error.barcode.hasOutTask=Serial No.(S)[0] already have retrieval task, cannot store same Serial No. material before retrieval finish
smfcore.error.noRetryReel=No material found to retry
\ No newline at end of file \ No newline at end of file
...@@ -354,3 +354,4 @@ smfcore.paretoChart=\u5E15\u7D2F\u6258\u56FE ...@@ -354,3 +354,4 @@ smfcore.paretoChart=\u5E15\u7D2F\u6258\u56FE
smfcore.selfAudit.hasOutTask=\u5E93\u4F4D[{0}]\u5DF2\u6709\u51FA\u5E93\u4EFB\u52A1 smfcore.selfAudit.hasOutTask=\u5E93\u4F4D[{0}]\u5DF2\u6709\u51FA\u5E93\u4EFB\u52A1
smfcore.error.barcode.hastask=Serial No.(S)[0] already have storage task smfcore.error.barcode.hastask=Serial No.(S)[0] already have storage task
smfcore.error.barcode.hasOutTask=\u5E8F\u5217\u53F7[0] \u5DF2\u6709\u51FA\u5E93\u4EFB\u52A1\uFF0C\u51FA\u5E93\u524D\u4E0D\u5F97\u5165\u5E93\u76F8\u540C\u5E8F\u5217\u53F7\u7269\u6599 smfcore.error.barcode.hasOutTask=\u5E8F\u5217\u53F7[0] \u5DF2\u6709\u51FA\u5E93\u4EFB\u52A1\uFF0C\u51FA\u5E93\u524D\u4E0D\u5F97\u5165\u5E93\u76F8\u540C\u5E8F\u5217\u53F7\u7269\u6599
smfcore.error.noRetryReel=\u6CA1\u6709\u53EF\u4EE5\u91CD\u8BD5\u7684\u7269\u6599
\ No newline at end of file \ No newline at end of file
...@@ -355,3 +355,4 @@ smfcore.micron.apiClose=API\u529F\u80FD\u672A\u5F00\u653E ...@@ -355,3 +355,4 @@ smfcore.micron.apiClose=API\u529F\u80FD\u672A\u5F00\u653E
smfcore.paretoChart=\u5E15\u7D2F\u6258\u5716 smfcore.paretoChart=\u5E15\u7D2F\u6258\u5716
smfcore.selfAudit.hasOutTask=\u5E93\u4F4D[{0}]\u5DF2\u6709\u51FA\u5E93\u4EFB\u52A1 smfcore.selfAudit.hasOutTask=\u5E93\u4F4D[{0}]\u5DF2\u6709\u51FA\u5E93\u4EFB\u52A1
smfcore.error.barcode.hasOutTask=\u5E8F\u5217\u865F[0] \u5DF2\u6709\u51FA\u5EAB\u4EFB\u52D9\uFF0C\u51FA\u5EAB\u524D\u4E0D\u5F97\u5165\u5EAB\u76F8\u540C\u5E8F\u5217\u865F\u7269\u6599 smfcore.error.barcode.hasOutTask=\u5E8F\u5217\u865F[0] \u5DF2\u6709\u51FA\u5EAB\u4EFB\u52D9\uFF0C\u51FA\u5EAB\u524D\u4E0D\u5F97\u5165\u5EAB\u76F8\u540C\u5E8F\u5217\u865F\u7269\u6599
smfcore.error.noRetryReel=\u6C92\u6709\u53EF\u4EE5\u91CD\u8A66\u7684\u7269\u6599
\ No newline at end of file \ No newline at end of file
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!