Commit a67e51bc LN

Outside Shelf Dispatch 和ControlledDispatch 新界面接口调整

1 个父辈 2ff2619c
package com.neotel.smfcore.common.bean; package com.neotel.smfcore.common.bean;
import cn.hutool.core.util.ObjectUtil;
import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonIgnore;
import com.neotel.smfcore.common.utils.SecurityUtils; import com.neotel.smfcore.common.utils.SecurityUtils;
import com.neotel.smfcore.core.language.util.MessageUtils; import com.neotel.smfcore.core.language.util.MessageUtils;
...@@ -32,8 +33,11 @@ public class ResultBean<T> { ...@@ -32,8 +33,11 @@ public class ResultBean<T> {
result.setMsgKey(msgKey); result.setMsgKey(msgKey);
result.setParams(params); result.setParams(params);
result.setMsg(MessageUtils.getText(msgKey, params, new Locale(SecurityUtils.getCurrentUserLanguage()), msg)); result.setMsg(MessageUtils.getText(msgKey, params, new Locale(SecurityUtils.getCurrentUserLanguage()), msg));
if (writeLog) { if (writeLog ) {
log.info(result.getMsg()); String showmsg=result.getMsg();
if(ObjectUtil.isNotEmpty(showmsg)){
log.info(showmsg);
}
} }
return result; return result;
} }
......
...@@ -35,6 +35,7 @@ import com.neotel.smfcore.custom.micron1053.api.bean.Material; ...@@ -35,6 +35,7 @@ import com.neotel.smfcore.custom.micron1053.api.bean.Material;
import com.neotel.smfcore.custom.micron1053.api.bean.MaterialStatus; import com.neotel.smfcore.custom.micron1053.api.bean.MaterialStatus;
import com.neotel.smfcore.custom.micron1053.api.bean.TrackStatus; import com.neotel.smfcore.custom.micron1053.api.bean.TrackStatus;
import com.neotel.smfcore.custom.micron1053.task.enums.OrderItemStatus; import com.neotel.smfcore.custom.micron1053.task.enums.OrderItemStatus;
import com.neotel.smfcore.custom.micron1053.util.MicronDataCache;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.query.Criteria; import org.springframework.data.mongodb.core.query.Criteria;
...@@ -90,7 +91,7 @@ public class LiteOrderCache { ...@@ -90,7 +91,7 @@ public class LiteOrderCache {
if (now - order.getCreateDate().getTime() > 7 * 24 * 60 * 60 * 1000) { if (now - order.getCreateDate().getTime() > 7 * 24 * 60 * 60 * 1000) {
//7天前的需求单,关闭,并解绑 //7天前的需求单,关闭,并解绑
log.info("需求单 =[" + order.getOrderNo() + "]为7天前,关闭并解绑工单"); log.info("需求单 =[" + order.getOrderNo() + "]为7天前,关闭并解绑工单");
closeOrder(order.getOrderNo()); closeLiteOrder(order);
} else { } else {
addOrderToMap(order); addOrderToMap(order);
...@@ -272,6 +273,20 @@ public class LiteOrderCache { ...@@ -272,6 +273,20 @@ public class LiteOrderCache {
} }
} }
} }
else{
Query query2 = new Query(Criteria.where("barcode.lockId").is(order.getOrderNo()));
List<StoragePos> posList = storagePosManager.findByQuery(query2);
for (StoragePos pos:
posList) {
if(pos.getBarcode()==null){
continue;
}
pos.getBarcode().setLockId(null);
pos.getBarcode().setLockName(null);
storagePosManager.save(pos);
log.info("工单" + order.getOrderNo() + "已关闭,解除物料锁定:" + pos.getBarcode().getBarcode() + ",所在库位:" + pos.getPosName());
}
}
} catch (Exception exception) { } catch (Exception exception) {
log.error("工单" + order.getOrderNo() + "关闭时,解除锁定物料出错:", exception); log.error("工单" + order.getOrderNo() + "关闭时,解除锁定物料出错:", exception);
...@@ -312,10 +327,10 @@ public class LiteOrderCache { ...@@ -312,10 +327,10 @@ public class LiteOrderCache {
List<LiteOrderItem> items = new ArrayList<>(); List<LiteOrderItem> items = new ArrayList<>();
for (LiteOrderItem orderItem : order.getOrderItems()) { for (LiteOrderItem orderItem : order.getOrderItems()) {
if (orderItem.getId().equals(task.getSubSourceId())) { if (orderItem.getSelectItems().size() >= 0) {
orderItem.updateSelItemS(task.getBarcode(), OrderItemStatus.cancel, "Cancel");
} else if (orderItem.getId().equals(task.getSubSourceId())) {
orderItem.setStatus(OrderItemStatus.cancel); orderItem.setStatus(OrderItemStatus.cancel);
} else if (orderItem.getSelectItems().size() >= 0) {
orderItem.updateSelItemS(task.getSubSourceId(), OrderItemStatus.cancel, "Cancel");
} }
items.add(orderItem); items.add(orderItem);
} }
...@@ -324,7 +339,8 @@ public class LiteOrderCache { ...@@ -324,7 +339,8 @@ public class LiteOrderCache {
liteOrderMap.put(orderNo, order); liteOrderMap.put(orderNo, order);
//如果是preTask,不需要重新出库 //如果是preTask,不需要重新出库
if (ObjectUtil.isNotEmpty(order.getMode())) { //普通工单需要自动补发出库。
if (ObjectUtil.isEmpty(order.getMode())) {
checkoutAgain(task, order); checkoutAgain(task, order);
} }
} else if (task.isFinished()) { } else if (task.isFinished()) {
...@@ -334,11 +350,8 @@ public class LiteOrderCache { ...@@ -334,11 +350,8 @@ public class LiteOrderCache {
List<LiteOrderItem> items = new ArrayList<>(); List<LiteOrderItem> items = new ArrayList<>();
for (LiteOrderItem liteOrderItem : order.getOrderItems()) { for (LiteOrderItem liteOrderItem : order.getOrderItems()) {
boolean isItemTask = false; boolean isItemTask = false;
if (liteOrderItem.getId().equals(orderItemId)) { if(liteOrderItem.getSelectItems().size()>0) {
isItemTask = true; boolean result = liteOrderItem.updateSelItemS(task.getBarcode(), OrderItemStatus.finish, "");
liteOrderItem.setStatus(OrderItemStatus.finish);
} else {
boolean result = liteOrderItem.updateSelItemS(task.getSubSourceId(), OrderItemStatus.finish, "");
if (result) { if (result) {
isItemTask = true; isItemTask = true;
//如果全部完成,更改任务状态为完成 //如果全部完成,更改任务状态为完成
...@@ -347,6 +360,9 @@ public class LiteOrderCache { ...@@ -347,6 +360,9 @@ public class LiteOrderCache {
liteOrderItem.setStatus(OrderItemStatus.finish); liteOrderItem.setStatus(OrderItemStatus.finish);
} }
} }
}else if (liteOrderItem.getId().equals(orderItemId)) {
isItemTask = true;
liteOrderItem.setStatus(OrderItemStatus.finish);
} }
if (isItemTask) { if (isItemTask) {
log.info("工单[" + orderNo + "]的任务" + task.getPartNumber() + "[" + task.getBarcode() + "]出库完成,已完成数量+1=" + order.getFinishedReelCount() + "/" + order.getTaskReelCount()); log.info("工单[" + orderNo + "]的任务" + task.getPartNumber() + "[" + task.getBarcode() + "]出库完成,已完成数量+1=" + order.getFinishedReelCount() + "/" + order.getTaskReelCount());
...@@ -372,12 +388,8 @@ public class LiteOrderCache { ...@@ -372,12 +388,8 @@ public class LiteOrderCache {
items = new ArrayList<>(); items = new ArrayList<>();
for (LiteOrderItem liteOrderItem : order.getOrderItems()) { for (LiteOrderItem liteOrderItem : order.getOrderItems()) {
boolean isItemTask = false; boolean isItemTask = false;
if (liteOrderItem.getId().equals(orderItemId)) { if(liteOrderItem.getSelectItems().size()>0) {
isItemTask = true; boolean result = liteOrderItem.updateSelItemS(task.getBarcode(), newS, msg);
liteOrderItem.setStatus(newS);
liteOrderItem.setExecutFailReason(msg);
} else {
boolean result = liteOrderItem.updateSelItemS(task.getSubSourceId(), newS, msg);
if (result) { if (result) {
isItemTask = true; isItemTask = true;
//如果全部完成,更改任务状态为完成 //如果全部完成,更改任务状态为完成
...@@ -386,6 +398,10 @@ public class LiteOrderCache { ...@@ -386,6 +398,10 @@ public class LiteOrderCache {
liteOrderItem.setStatus(OrderItemStatus.notify_success); liteOrderItem.setStatus(OrderItemStatus.notify_success);
} }
} }
}else if (liteOrderItem.getId().equals(orderItemId)) {
isItemTask = true;
liteOrderItem.setStatus(newS);
liteOrderItem.setExecutFailReason(msg);
} }
if (isItemTask) { if (isItemTask) {
log.info("工单[" + orderNo + "]的任务" + task.getPartNumber() + "[" + task.getBarcode() + "]完成,API007结果:" + msg + ",更新状态=" + newS); log.info("工单[" + orderNo + "]的任务" + task.getPartNumber() + "[" + task.getBarcode() + "]完成,API007结果:" + msg + ",更新状态=" + newS);
...@@ -725,19 +741,8 @@ public class LiteOrderCache { ...@@ -725,19 +741,8 @@ public class LiteOrderCache {
return task; return task;
} }
/** public String closeLiteOrder(LiteOrder liteOrder) {
* 关闭工单 String orderNo=liteOrder.getOrderNo();
*
* @param orderNo
*/
public String closeOrder(String orderNo) {
LiteOrder liteOrder = liteOrderMap.get(orderNo);
if (liteOrder == null) {
liteOrder = liteOrderManager.findByOrderNo(orderNo);
if (liteOrder == null) {
return "smfcore.order.out.notFound";
}
}
//有任务的工单不能关闭 //有任务的工单不能关闭
List<DataLog> allTask = taskService.getAllTasks(); List<DataLog> allTask = taskService.getAllTasks();
for (DataLog task : allTask for (DataLog task : allTask
...@@ -756,11 +761,27 @@ public class LiteOrderCache { ...@@ -756,11 +761,27 @@ public class LiteOrderCache {
log.info("关闭工单[" + orderNo + "]成功"); log.info("关闭工单[" + orderNo + "]成功");
liteOrder.setClosed(true); liteOrder.setClosed(true);
liteOrder.setStatus(LITEORDER_STATUS.CLOSED);
liteOrderManager.save(liteOrder); liteOrderManager.save(liteOrder);
smfApi.onOrderStatusChange(liteOrder); smfApi.onOrderStatusChange(liteOrder);
clearOrderLock(liteOrder); clearOrderLock(liteOrder);
return "smfcore.order.close.success"; return "smfcore.order.close.success";
} }
/**
* 关闭工单
*
* @param orderNo
*/
public String closeOrder(String orderNo) {
LiteOrder liteOrder = liteOrderMap.get(orderNo);
if (liteOrder == null) {
liteOrder = liteOrderManager.findByOrderNo(orderNo);
if (liteOrder == null) {
return "smfcore.order.out.notFound";
}
}
return closeLiteOrder(liteOrder);
}
/** /**
* 工单详情补料出库 * 工单详情补料出库
...@@ -1031,24 +1052,14 @@ public class LiteOrderCache { ...@@ -1031,24 +1052,14 @@ public class LiteOrderCache {
return "smfcore.order.hasClose"; return "smfcore.order.hasClose";
} }
//先查找是否已经锁定过库位,如果已经锁定过,出锁定的库位 // //先查找是否已经锁定过库位,如果已经锁定过,出锁定的库位
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();
} // }
boolean outBom = false; boolean outBom = false;
log.info("开始为工单挑料[" + orderNo + "] "); log.info("开始为工单挑料[" + orderNo + "] ");
// cacheOrder.setTaskReelCount(0);
// cacheOrder.setTaskFinishedTime(-1);
// cacheOrder.setFinishedReelCount(0);
//不需要更改工单状态
// if (outBom) {
// cacheOrder.setStatus(LITEORDER_STATUS.BOM);
// } else {
// cacheOrder.setStatus(LITEORDER_STATUS.TAILS);
// }
//liteOrderMap.put(cacheOrder.getOrderNo(), cacheOrder);
int taskReelCount = 0; int taskReelCount = 0;
CHECKOUT_TYPE checkoutType = dataCache.getCheckOutType(); CHECKOUT_TYPE checkoutType = dataCache.getCheckOutType();
List<String> availableStorageIds = dataCache.getAvailableStorageIds(); List<String> availableStorageIds = dataCache.getAvailableStorageIds();
...@@ -1098,6 +1109,7 @@ public class LiteOrderCache { ...@@ -1098,6 +1109,7 @@ public class LiteOrderCache {
log.info("工单[" + orderNo + "]RI出库,任务数[" + taskReelCount + "]出库位置仓位【" + pos.getPosName() + "】RI=[" + pos.getBarcode().getBarcode() + "]已在操作队列中,跳过不处理"); log.info("工单[" + orderNo + "]RI出库,任务数[" + taskReelCount + "]出库位置仓位【" + pos.getPosName() + "】RI=[" + pos.getBarcode().getBarcode() + "]已在操作队列中,跳过不处理");
break; break;
} }
orderItem.setPn(pos.getBarcode().getPartNumber());
} else { } else {
log.info("工单[" + orderNo + "]RI出库时,库存中未找到料盘[" + reelId + "]"); log.info("工单[" + orderNo + "]RI出库时,库存中未找到料盘[" + reelId + "]");
} }
...@@ -1114,24 +1126,17 @@ public class LiteOrderCache { ...@@ -1114,24 +1126,17 @@ public class LiteOrderCache {
assignNum = assignNum + pos.getBarcode().getAmount(); assignNum = assignNum + pos.getBarcode().getAmount();
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());
// DataLog task = newTask(pos) ;
//
// task.setSourceId(cacheOrder.getId());
// task.setSourceName(cacheOrder.getOrderNo());
// task.setSubSourceId(orderItem.getId());
// task.setSubSourceInfo(orderItem.getFeederInfo());
// task.setType(OP.CHECKOUT);
// task.setLightColor(nextColor.getRgb());
// task.setStatus(OP_STATUS.WAIT.name());
// task.setSingleOut(singleOut);
//// task = dataLogDao.save(task);
// taskService.addTaskToExecute(task);
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());
LiteOrderItem selItem = new LiteOrderItem(); LiteOrderItem selItem = new LiteOrderItem();
selItem.setRi(pos.getBarcode().getBarcode()); selItem.setRi(pos.getBarcode().getBarcode());
selItem.setPn(pos.getBarcode().getPartNumber());
selItem.setStatus(OrderItemStatus.wait);
selItem.setNeedNum(pos.getBarcode().getAmount()); selItem.setNeedNum(pos.getBarcode().getAmount());
selItem.setOutNum(pos.getBarcode().getAmount());
//物料类型
String mtype = MicronDataCache.GetReelType(pos.getBarcode().getPlateSize(), pos.getBarcode().getHeight());
selItem.updateAppendData("mtype",mtype);
selectReelItems.add(selItem); selectReelItems.add(selItem);
allBarcodes.add(pos.getBarcode()); allBarcodes.add(pos.getBarcode());
findPosList.add(pos.getId() ); findPosList.add(pos.getId() );
...@@ -1154,20 +1159,23 @@ public class LiteOrderCache { ...@@ -1154,20 +1159,23 @@ public class LiteOrderCache {
Map<String, MaterialStatus> apiResultMap = MicronApi.Api009(cacheOrder.getOperationId(), lineId, allBarcodes); Map<String, MaterialStatus> apiResultMap = MicronApi.Api009(cacheOrder.getOperationId(), lineId, allBarcodes);
List<LiteOrderItem> finItem=new ArrayList<>();
List<StoragePos> lockPos = new ArrayList<>(); List<StoragePos> lockPos = new ArrayList<>();
taskReelCount=0;
for (LiteOrderItem item : for (LiteOrderItem item :
newItems) { newItems) {
item.setOutNum(0); item.setOutNum(0);
item.setOutReelCount(0); item.setOutReelCount(0);
int outNum = 0; int outNum = 0;
int outReelCount = 0; int outReelCount = 0;
List<LiteOrderItem> selItemList=new ArrayList<>();
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 [" + reelItem.getPn() + "] RI [" + reelItem.getRi() + "] API009 验证成功,更改状态为 CheckOk ,锁定库位【" + pos.getPosName() + "】");
pos.getBarcode().setLockId(cacheOrder.getOrderNo()); pos.getBarcode().setLockId(cacheOrder.getOrderNo());
...@@ -1175,6 +1183,7 @@ public class LiteOrderCache { ...@@ -1175,6 +1183,7 @@ public class LiteOrderCache {
storagePosManager.save(pos); storagePosManager.save(pos);
outNum += pos.getBarcode().getAmount(); outNum += pos.getBarcode().getAmount();
outReelCount += 1; outReelCount += 1;
taskReelCount+=1;
} }
else if(s!=null && s.isReserved()){ else if(s!=null && s.isReserved()){
String str=s.getDescription(); String str=s.getDescription();
...@@ -1188,7 +1197,7 @@ public class LiteOrderCache { ...@@ -1188,7 +1197,7 @@ public class LiteOrderCache {
reelItem.setExecutFailReason("no result "); reelItem.setExecutFailReason("no result ");
reelItem.setStatus(OrderItemStatus.CheckFail); reelItem.setStatus(OrderItemStatus.CheckFail);
log.info("工单【" + orderNo + "】PN [" + item.getPn() + "] RI [" + item.getRi() + "] API009 验证失败,更改状态为 CheckFail"); log.info("工单【" + orderNo + "】PN [" + reelItem.getPn() + "] RI [" + reelItem.getRi() + "] API009 验证失败,更改状态为 CheckFail");
} }
else { else {
String str= s.getDescription(); String str= s.getDescription();
...@@ -1197,30 +1206,33 @@ public class LiteOrderCache { ...@@ -1197,30 +1206,33 @@ public class LiteOrderCache {
} }
reelItem.setExecutFailReason(str); reelItem.setExecutFailReason(str);
reelItem.setStatus(OrderItemStatus.CheckFail); reelItem.setStatus(OrderItemStatus.CheckFail);
log.info("工单【" + orderNo + "】PN [" + item.getPn() + "] RI [" + item.getRi() + "] API009 验证失败,更改状态为 CheckFail"); log.info("工单【" + orderNo + "】PN [" + reelItem.getPn() + "] RI [" + reelItem.getRi() + "] API009 验证失败,更改状态为 CheckFail");
} }
selItemList.add(reelItem);
} }
item.setSelectItems(selItemList);
item.setOutNum(outNum); item.setOutNum(outNum);
item.setOutReelCount(outReelCount); item.setOutReelCount(outReelCount);
//判断是否缺料
if(outNum>=item.getNeedNum()&&outReelCount>=item.getNeedReelCount()){
//已有足够物料
item.setStatus(OrderItemStatus.CheckOk);
}else{
//缺料
item.setStatus(OrderItemStatus.shortage);
}
liteOrderItemManager.save(item); liteOrderItemManager.save(item);
finItem.add(item);
} }
//锁定库位 cacheOrder.setOrderItems(finItem);
cacheOrder.setOrderItems(newItems);
cacheOrder.setTaskReelCount(taskReelCount); cacheOrder.setTaskReelCount(taskReelCount);
cacheOrder.setTotalTaskReelCount(cacheOrder.getTotalTaskReelCount() + taskReelCount); cacheOrder.setTotalTaskReelCount(cacheOrder.getTotalTaskReelCount() + taskReelCount);
log.info("工单[" + orderNo + "]任务分配结束,任务数[" + taskReelCount + "]"); liteOrderManager.save(cacheOrder);
// smfApi.onOrderStatusChange(cacheOrder); addOrderToMap(cacheOrder);
// //有需要出库的 log.info("工单[" + orderNo + "]物料验证结束,验证成功盘数[" + taskReelCount + "]");
// if (taskReelCount <= 0) {
// finishedOrderTasks(cacheOrder);
// }
//
// liteOrderManager.save(cacheOrder);
//
// liteOrderMap.put(cacheOrder.getOrderNo(), cacheOrder);
if (taskReelCount <= 0) { if (taskReelCount <= 0) {
//return "工单无可执行的任务"; //return "工单无可执行的任务";
return "smfcore.order.out.noTask"; return "smfcore.order.out.noTask";
...@@ -1228,13 +1240,44 @@ public class LiteOrderCache { ...@@ -1228,13 +1240,44 @@ public class LiteOrderCache {
return ""; return "";
} }
public LiteOrderItem NewSelItem(StoragePos pos){
LiteOrderItem selItem = new LiteOrderItem();
selItem.setRi(pos.getBarcode().getBarcode());
selItem.setPn(pos.getBarcode().getPartNumber());
selItem.setStatus(OrderItemStatus.wait);
selItem.setNeedNum(pos.getBarcode().getAmount());
selItem.setOutNum(pos.getBarcode().getAmount());
//物料类型
String mtype = MicronDataCache.GetReelType(pos.getBarcode().getPlateSize(), pos.getBarcode().getHeight());
selItem.updateAppendData("mtype",mtype);
return selItem;
}
public boolean dispatchOrderIsCheckOk(LiteOrder liteOrder) {
//判断是否所有pn都已经有足够的物料
boolean isCheckOk = true;
for (LiteOrderItem item :
liteOrder.getOrderItems()) {
if (item.getStatus().equalsIgnoreCase(OrderItemStatus.shortage)) {
isCheckOk = false;
break;
}
}
return isCheckOk;
}
public synchronized String dispatchCheckOut(LiteOrder order, boolean isRetry,boolean isOver) { public synchronized String dispatchCheckOut(LiteOrder order, boolean isRetry,boolean isOver) {
ORDER_COLOR nextColor = getNextColor();
if (nextColor == null) {
log.info("执行工单[" + order.getOrderNo() + "] 时,已达最大可执行工单数");
throw new ValidateException("order.out.maxOrder", "已达最大可执行工单数");
}
String resultMsg="smfcore.label.noReel"; String resultMsg="smfcore.label.noReel";
log.info("dispatchCheckOut 出库单[" + order.getOrderNo() + "] operatetionId [" + order.getOperationId() + "]开始出库,isRetry="+isRetry+",isOver="+isOver); log.info("dispatchCheckOut 出库单[" + order.getOrderNo() + "] operatetionId [" + order.getOperationId() + "]开始出库,isRetry="+isRetry+",isOver="+isOver);
int taskReelCount = 0;
List<String> needOutBarcode = new ArrayList<>(); List<String> needOutBarcode = new ArrayList<>();
for (LiteOrderItem item : for (LiteOrderItem item :
...@@ -1264,8 +1307,14 @@ public class LiteOrderCache { ...@@ -1264,8 +1307,14 @@ public class LiteOrderCache {
return resultMsg; return resultMsg;
} }
order.setStatus(LITEORDER_STATUS.TAILS); order.setStatus(LITEORDER_STATUS.TAILS);
int taskReelCount = 0;
if(isRetry){
taskReelCount=order.getTaskReelCount();
log.info("dispatchCheckOut 出库单[" + order.getOrderNo() + "] operatetionId [" + order.getOperationId() + "] retry出库,原来任务数=" + taskReelCount);
}else{
order.setTaskReelCount(0); order.setTaskReelCount(0);
order.setFinishedReelCount(0); order.setFinishedReelCount(0);
}
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<>();
...@@ -1283,8 +1332,13 @@ public class LiteOrderCache { ...@@ -1283,8 +1332,13 @@ public class LiteOrderCache {
for (LiteOrderItem orderItem : order.getOrderItems()) { for (LiteOrderItem orderItem : order.getOrderItems()) {
int outNum = 0; int outNum = 0;
int outReelCount = 0; int outReelCount = 0;
if(isRetry){
outNum=orderItem.getOutNum();
outReelCount=orderItem.getOutReelCount();
}
List<LiteOrderItem> newSelItems = new ArrayList<>(); List<LiteOrderItem> newSelItems = new ArrayList<>();
for (LiteOrderItem selItem : for (LiteOrderItem selItem :
orderItem.getSelectItems()) { orderItem.getSelectItems()) {
......
...@@ -123,12 +123,15 @@ public class DefaultOrderFileListener implements IOrderFileListener { ...@@ -123,12 +123,15 @@ public class DefaultOrderFileListener implements IOrderFileListener {
itemMap = readExcelFile(fileName, orderFile.getAbsolutePath()); itemMap = readExcelFile(fileName, orderFile.getAbsolutePath());
} }
//新增为一个工单 if(ObjectUtil.isEmpty(reason)){
String orderName = reason; reason="";
if(ObjectUtil.isEmpty(reason)) {
List<LiteOrder> orders = liteOrderManager.findByQuery(new Query(Criteria.where("mode").is(mode)));
orderName = mode + (orders.size() + 1);
} }
//新增为一个工单
String orderName = mode+"_"+reason+"_"+operId;
// if(ObjectUtil.isEmpty(reason)) {
// List<LiteOrder> orders = liteOrderManager.findByQuery(new Query(Criteria.where("mode").is(mode)));
// orderName = mode + (orders.size() + 1);
// }
LiteOrder dbOrder = liteOrderManager.findByOrderNo(orderName); LiteOrder dbOrder = liteOrderManager.findByOrderNo(orderName);
if (dbOrder != null) { if (dbOrder != null) {
...@@ -137,7 +140,7 @@ public class DefaultOrderFileListener implements IOrderFileListener { ...@@ -137,7 +140,7 @@ public class DefaultOrderFileListener implements IOrderFileListener {
String newOrderNo = orderName + "-" + format.format(new Date()); String newOrderNo = orderName + "-" + format.format(new Date());
dbOrder = liteOrderManager.findByOrderNo(newOrderNo); dbOrder = liteOrderManager.findByOrderNo(newOrderNo);
if (dbOrder == null) { if (dbOrder == null) {
orderName=newOrderNo;
} else { } else {
log.info("watchOrderDir,mode=[" + mode + "],reason=[" + reason + "]:数据库中已存在工单号为[" + orderName + "],忽略文件:" + orderFile.getAbsolutePath()); log.info("watchOrderDir,mode=[" + mode + "],reason=[" + reason + "]:数据库中已存在工单号为[" + orderName + "],忽略文件:" + orderFile.getAbsolutePath());
//resultFile = new File(localDir+File.separator + "error",backupFileName); //resultFile = new File(localDir+File.separator + "error",backupFileName);
......
...@@ -2,6 +2,7 @@ package com.neotel.smfcore.core.order.service.po; ...@@ -2,6 +2,7 @@ package com.neotel.smfcore.core.order.service.po;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import com.neotel.smfcore.common.base.BasePo; import com.neotel.smfcore.common.base.BasePo;
import com.neotel.smfcore.custom.micron1053.task.enums.OrderItemStatus;
import lombok.Data; import lombok.Data;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.data.annotation.Transient; import org.springframework.data.annotation.Transient;
...@@ -9,6 +10,7 @@ import org.springframework.data.mongodb.core.index.Indexed; ...@@ -9,6 +10,7 @@ import org.springframework.data.mongodb.core.index.Indexed;
import org.springframework.data.mongodb.core.mapping.Document; import org.springframework.data.mongodb.core.mapping.Document;
import java.io.Serializable; import java.io.Serializable;
import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
...@@ -120,16 +122,46 @@ public class LiteOrderItem extends BasePo implements Serializable ,Comparable<Li ...@@ -120,16 +122,46 @@ public class LiteOrderItem extends BasePo implements Serializable ,Comparable<Li
* 自定义的附加字段,key=字段名,value=值 * 自定义的附加字段,key=字段名,value=值
*/ */
public Map<String,String> appendData = new HashMap<>(); public Map<String,String> appendData = new HashMap<>();
/**
* 添加或更新自定义附加信息
* @param appendKey
* @param appendValue
*/
public void updateAppendData(String appendKey, String appendValue){
appendData.put(appendKey, appendValue);
}
/**
* 获取自定义附加信息
* @param appendKey
* @param <T>
* @return
*/
public <T> T getAppendData(String appendKey){
Object value = appendData.get(appendKey);
if(value != null){
return (T)value;
}
return null;
}
public List<LiteOrderItem> selectItems; public List<LiteOrderItem> selectItems;
public boolean updateSelItemS(String subItemId,String selItemStatus,String reason) { public List<LiteOrderItem> getSelectItems(){
if(selectItems==null){
return new ArrayList<>();
}
return selectItems;
}
public boolean updateSelItemS(String barcode,String selItemStatus,String reason) {
try { try {
if (selectItems == null || selectItems.size() <= 0) { if (selectItems == null || selectItems.size() <= 0) {
return false; return false;
} }
for (int i = 0; i < selectItems.size(); i++) { for (int i = 0; i < selectItems.size(); i++) {
if (selectItems.get(i).getId().equals(subItemId)) { if (selectItems.get(i).getRi().equals(barcode)) {
selectItems.get(i).setStatus(selItemStatus); selectItems.get(i).setStatus(selItemStatus);
if (ObjectUtil.isNotEmpty(reason)) { if (ObjectUtil.isNotEmpty(reason)) {
selectItems.get(i).setExecutFailReason(reason); selectItems.get(i).setExecutFailReason(reason);
...@@ -161,4 +193,24 @@ public class LiteOrderItem extends BasePo implements Serializable ,Comparable<Li ...@@ -161,4 +193,24 @@ public class LiteOrderItem extends BasePo implements Serializable ,Comparable<Li
} }
return this.getId().compareTo(o.getId()); return this.getId().compareTo(o.getId());
} }
public boolean isSuccess(){
return status.equalsIgnoreCase(OrderItemStatus.executing)||
status.equalsIgnoreCase(OrderItemStatus.wait)||
status.equalsIgnoreCase(OrderItemStatus.notify_success)||
status.equalsIgnoreCase(OrderItemStatus.finish)
||status.equalsIgnoreCase(OrderItemStatus.CheckOk);
}
public boolean isNg() {
return status.equalsIgnoreCase(OrderItemStatus.executFail)||
status.equalsIgnoreCase(OrderItemStatus.CheckFail)||
status.equalsIgnoreCase(OrderItemStatus.cancel)
||status.equalsIgnoreCase(OrderItemStatus.Reserved);
}
public boolean isTranFail() {
return status.equalsIgnoreCase(OrderItemStatus.notify_fail);
}
} }
...@@ -1004,6 +1004,9 @@ public class MicronApi { ...@@ -1004,6 +1004,9 @@ public class MicronApi {
public static boolean Api012(String operationId, String action) { public static boolean Api012(String operationId, String action) {
if(Debug){
return true;
}
String url = config.getUrl(config.api_name_012); String url = config.getUrl(config.api_name_012);
url = MessageFormat.format(url, operationId); url = MessageFormat.format(url, operationId);
......
package com.neotel.smfcore.custom.micron1053.loading.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class MaterialDispatchDto implements Serializable {
@ApiModelProperty("物料类型")
private String materialType;
@ApiModelProperty("成功盘数")
private int successQty;
@ApiModelProperty("NG盘数")
private int ng;
@ApiModelProperty("失败盘数")
private int failure;
}
package com.neotel.smfcore.custom.micron1053.loading.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class SelReelDetialDto implements Serializable {
@ApiModelProperty("PN")
private String pn;
@ApiModelProperty("RI")
private String ri;
@ApiModelProperty("qty")
private int qty;
@ApiModelProperty("状态,CheckOK的不可勾选,Reserved 和CheckFail 的可勾选")
private String status;
@ApiModelProperty("执行失败原因")
private String executFailReason;
}
package com.neotel.smfcore.custom.micron1053.task; package com.neotel.smfcore.custom.micron1053.task;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import com.google.common.base.Strings;
import com.neotel.smfcore.common.bean.ResultBean; import com.neotel.smfcore.common.bean.ResultBean;
import com.neotel.smfcore.common.exception.ValidateException; import com.neotel.smfcore.common.exception.ValidateException;
import com.neotel.smfcore.common.utils.Constants; import com.neotel.smfcore.common.utils.Constants;
...@@ -8,9 +9,9 @@ import com.neotel.smfcore.common.utils.FileUtil; ...@@ -8,9 +9,9 @@ import com.neotel.smfcore.common.utils.FileUtil;
import com.neotel.smfcore.common.utils.SecurityUtils; import com.neotel.smfcore.common.utils.SecurityUtils;
import com.neotel.smfcore.common.utils.StringUtils; import com.neotel.smfcore.common.utils.StringUtils;
import com.neotel.smfcore.core.barcode.service.po.Barcode; import com.neotel.smfcore.core.barcode.service.po.Barcode;
import com.neotel.smfcore.core.device.enums.OP;
import com.neotel.smfcore.core.device.enums.OP_STATUS; import com.neotel.smfcore.core.device.enums.OP_STATUS;
import com.neotel.smfcore.core.device.util.DataCache; import com.neotel.smfcore.core.device.util.DataCache;
import com.neotel.smfcore.core.inList.service.po.InListItem;
import com.neotel.smfcore.core.order.LiteOrderCache; import com.neotel.smfcore.core.order.LiteOrderCache;
import com.neotel.smfcore.core.order.enums.LITEORDER_STATUS; import com.neotel.smfcore.core.order.enums.LITEORDER_STATUS;
import com.neotel.smfcore.core.order.service.manager.ILiteOrderItemManager; import com.neotel.smfcore.core.order.service.manager.ILiteOrderItemManager;
...@@ -27,11 +28,14 @@ import com.neotel.smfcore.core.system.service.po.DataLog; ...@@ -27,11 +28,14 @@ import com.neotel.smfcore.core.system.service.po.DataLog;
import com.neotel.smfcore.core.system.util.TaskService; import com.neotel.smfcore.core.system.util.TaskService;
import com.neotel.smfcore.custom.micron1053.api.MicronApi; import com.neotel.smfcore.custom.micron1053.api.MicronApi;
import com.neotel.smfcore.custom.micron1053.api.bean.MaterialStatus; import com.neotel.smfcore.custom.micron1053.api.bean.MaterialStatus;
import com.neotel.smfcore.custom.micron1053.loading.dto.MaterialDispatchDto;
import com.neotel.smfcore.custom.micron1053.loading.dto.MaterialDtialDto;
import com.neotel.smfcore.custom.micron1053.loading.dto.SelReelDetialDto;
import com.neotel.smfcore.custom.micron1053.task.bean.DispatchItemMapper; import com.neotel.smfcore.custom.micron1053.task.bean.DispatchItemMapper;
import com.neotel.smfcore.custom.micron1053.task.bean.dto.DispatchItemDto;
import com.neotel.smfcore.custom.micron1053.task.bean.dto.ItemDetialDto; import com.neotel.smfcore.custom.micron1053.task.bean.dto.ItemDetialDto;
import com.neotel.smfcore.custom.micron1053.task.bean.dto.TaskDto; import com.neotel.smfcore.custom.micron1053.task.bean.dto.TaskDto;
import com.neotel.smfcore.custom.micron1053.task.enums.OrderItemStatus; import com.neotel.smfcore.custom.micron1053.task.enums.OrderItemStatus;
import com.neotel.smfcore.custom.micron1053.util.MicronDataCache;
import com.neotel.smfcore.security.annotation.AnonymousAccess; import com.neotel.smfcore.security.annotation.AnonymousAccess;
import com.neotel.smfcore.security.bean.FileProperties; import com.neotel.smfcore.security.bean.FileProperties;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
...@@ -55,32 +59,11 @@ import java.util.stream.Collectors; ...@@ -55,32 +59,11 @@ import java.util.stream.Collectors;
@RequestMapping("/rest/micron/dispatch") @RequestMapping("/rest/micron/dispatch")
@RequiredArgsConstructor @RequiredArgsConstructor
public class MicronDispatchController { public class MicronDispatchController {
//
// @ApiOperation("上传工单") @Autowired
// @PostMapping(value = "/upload") private ILiteOrderManager liteOrderManager;
// @AnonymousAccess @Autowired
// public ResultBean updateAvatar(@RequestParam MultipartFile orderFile) { private DataCache dataCache;
//
// String csv = "csv";
// String excel="xlsx";
// String fileType = FileUtil.getExtensionName(orderFile.getOriginalFilename());
// String fileName = FileUtil.getFileNameNoEx(orderFile.getOriginalFilename());
// if (fileType != null &&(!csv.contains(fileType))&&(!excel.contains(fileType)) ) {
// throw new ValidateException("smfcore.feleFormatError", "文件格式错误!, 仅支持{0}格式", new String[]{csv+","+excel});
// }
// File folder = new File(properties.getPath(), "pos");
// File localFile = FileUtil.upload(orderFile, folder.getAbsolutePath());
// boolean result = orderFileWatch.handleOrderFile(localFile);
// if (result) {
// return ResultBean.newOkResult("smfcore.order.uploadOK", "工单上传成功");
// } else {
// return ResultBean.newErrorResult(-1,"smfcore.order.uploadFailure","上传失败");
// }
// }
@Autowired
private ILiteOrderManager liteOrderManager;
@Autowired
private DataCache dataCache;
@Autowired @Autowired
private IDataLogManager dataLogManager; private IDataLogManager dataLogManager;
@Autowired @Autowired
...@@ -99,23 +82,32 @@ private DataCache dataCache; ...@@ -99,23 +82,32 @@ private DataCache dataCache;
private TaskService taskService; private TaskService taskService;
@Autowired @Autowired
private IStoragePosManager storagePosManager; private IStoragePosManager storagePosManager;
private String Mode_RACK="RACK";
private TaskDto getTaskDtoByMode(String mode){ private TaskDto getTaskDtoByMode(String mode) {
TaskDto dto = new TaskDto(); TaskDto dto = new TaskDto();
//记录 //记录
String key = Constants.CACHE_DISPATCH + mode; String key = Constants.CACHE_DISPATCH + mode;
//先从缓存中获取数据 //先从缓存中获取数据
try{ try {
dto = dataCache.getCache(key); dto = dataCache.getCache(key);
return dto; return dto;
}catch (Exception ex){ } catch (Exception ex) {
return null; return null;
} }
} }
private boolean NeedInputLineId(String mode){
if(mode.equalsIgnoreCase(Mode_RACK)){
return false;
}
return true;
}
@ApiOperation("点 Outside Shelf Dispatch 或 Controlled Dispatch 按钮,调用此接口获取出库页详情") @ApiOperation("点 Outside Shelf Dispatch 或 Controlled Dispatch 按钮,调用此接口获取出库页详情")
@AnonymousAccess @AnonymousAccess
@GetMapping("/getList") @GetMapping("/getList")
...@@ -129,26 +121,29 @@ private IStoragePosManager storagePosManager; ...@@ -129,26 +121,29 @@ private IStoragePosManager storagePosManager;
}//判断是否生成,未关闭的工单 }//判断是否生成,未关闭的工单
TaskDto dto = getTaskDtoByMode(mode); TaskDto dto = getTaskDtoByMode(mode);
//获取是否有此类型的工单信息 //获取是否有此类型的工单信息
//code=0,,如果已经存在,直接返回列表页面 //code=0,,如果已经存在,调用获取页面数据接口获取列表数据
//code=1,没有数据,OutSide按钮进入上传工单页面 ,ControlledDispatch 按钮进入选择Pn或上传工单页面 //code=1,没有数据,OutSide按钮进入上传工单页面 ,ControlledDispatch 按钮进入选择Pn或上传工单页面
//code=2,ControlledDispatch 进入输入lineID页面 //code=2,ControlledDispatch 进入输入lineID页面
List<LiteOrderItem> itemList = getLiteOrderItemList(mode); // List<LiteOrderItem> itemList = getLiteOrderItemList(mode);
if (dto!=null &&ObjectUtil.isNotEmpty(dto.getOperationId()) && ObjectUtil.isNotEmpty(dto.getLineId()) && itemList != null && !itemList.isEmpty()) { // if (dto!=null &&ObjectUtil.isNotEmpty(dto.getOperationId()) && ObjectUtil.isNotEmpty(dto.getLineId()) && itemList != null && !itemList.isEmpty()) {
//已存在,直接返回列表页面 // //已存在,直接返回列表页面
List<DispatchItemDto> list = dispatchItemMapper.toDto(itemList); // List<DispatchItemDto> list = dispatchItemMapper.toDto(itemList);
return ResultBean.newOkResult(list); // return ResultBean.newOkResult(list);
LiteOrder order = getOrderByMode(mode);
if (dto != null && ObjectUtil.isNotEmpty(dto.getOperationId()) && ObjectUtil.isNotEmpty(dto.getLineId()) && order != null) {
return getTaskInfo(order);
} else { } else {
if (dto != null && ObjectUtil.isNotEmpty(dto.getOperationId())) { if (dto != null && ObjectUtil.isNotEmpty(dto.getOperationId())) {
if(ObjectUtil.isNotEmpty(dto.getLineId())||(mode.equals("RACK"))){ if (ObjectUtil.isNotEmpty(dto.getLineId()) || (!NeedInputLineId(mode))) {
//已有 operationId ,需要进入上传工单页面 //已有 operationId ,需要进入上传工单页面
return ResultBean.newErrorResult(1, "", ""); return ResultBean.newErrorResult(1, "", "", new String[]{}, false);
}else { } else {
//已有 operationId ,没有lineID,需要输入lineID //已有 operationId ,没有lineID,需要输入lineID
return ResultBean.newErrorResult(2, "", ""); return ResultBean.newErrorResult(2, "", "", new String[]{}, false);
} }
} else { } else {
...@@ -162,11 +157,21 @@ private IStoragePosManager storagePosManager; ...@@ -162,11 +157,21 @@ private IStoragePosManager storagePosManager;
if (StringUtils.isNotBlank(operationId)) { if (StringUtils.isNotBlank(operationId)) {
dto.setOperationId(operationId); dto.setOperationId(operationId);
dto.setLineId("");
dataCache.updateCache(Constants.CACHE_DISPATCH + mode, dto); dataCache.updateCache(Constants.CACHE_DISPATCH + mode, dto);
MicronApi.ActionUpdate(operationId,MicronApi.START); MicronApi.ActionUpdate(operationId, MicronApi.START);
//需要输入lineID //判断是否是RACK
return ResultBean.newErrorResult(2, "", "");
if (ObjectUtil.isNotEmpty(dto.getLineId()) || (!NeedInputLineId(mode))) {
//已有 operationId ,需要进入上传工单页面
return ResultBean.newErrorResult(1, "", "", new String[]{}, false);
} else {
//已有 operationId ,没有lineID,需要输入lineID
return ResultBean.newErrorResult(2, "", "", new String[]{}, false);
}
} else { } else {
return ResultBean.newErrorResult(-1, "smfcore.api.fail", "Api011 获取数据失败", new String[]{"API011"}); return ResultBean.newErrorResult(-1, "smfcore.api.fail", "Api011 获取数据失败", new String[]{"API011"});
} }
...@@ -176,11 +181,120 @@ private IStoragePosManager storagePosManager; ...@@ -176,11 +181,120 @@ private IStoragePosManager storagePosManager;
} }
private ResultBean getTaskInfo(LiteOrder order) {
//如果工单还未出库
if (order.isNew()) {
//返回可以勾选的物料及已验证成功的物料列表
List<SelReelDetialDto> reelDetialDtos = getReelDetialList(order);
ResultBean resultBean = ResultBean.newErrorResult(3, "", "", new String[]{}, false);
resultBean.setData(reelDetialDtos);
return resultBean;
} else {
//返回出库信息
List<MaterialDispatchDto> materialDispatchDtos = getOrderMaterialList(order);
ResultBean resultBean = ResultBean.newErrorResult(4, "", "", new String[]{}, false);
resultBean.setData(materialDispatchDtos);
return resultBean;
}
}
private List<SelReelDetialDto> getReelDetialList(LiteOrder order) {
List<SelReelDetialDto> reelDetialDtos = new ArrayList<>();
//先取已验证过的数据
for (LiteOrderItem item :
order.getOrderItems()) {
for (LiteOrderItem selItem :
item.getSelectItems()) {
SelReelDetialDto dto = new SelReelDetialDto(selItem.getPn(), selItem.getRi(), selItem.getOutNum(), selItem.getStatus(), selItem.getExecutFailReason());
reelDetialDtos.add(dto);
}
}
for (LiteOrderItem item :
order.getOrderItems()) {
if(ObjectUtil.isNotEmpty(item.getRi())){
}
//判断是否需要勾选其他物料
else if (item.getOutNum() < item.getNeedNum()|| item.getNeedReelCount()<item.getSelectItems().size()) {
//需要勾选
CHECKOUT_TYPE checkoutType = dataCache.getCheckOutType();
List<String> availableStorageIds = dataCache.getAvailableStorageIds();
Collection<String> excludePosIds = liteOrderCache.excludeOutPosIds();
List<StoragePos> otherPosList = storagePosManager.findInStoragesByPN(excludePosIds, item.getPn(), checkoutType);
for (StoragePos pos :
otherPosList) {
SelReelDetialDto dto = new SelReelDetialDto(pos.getBarcode().getPartNumber(), pos.getBarcode().getBarcode(), pos.getBarcode().getAmount(), "", "");
reelDetialDtos.add(dto);
}
}
}
// if (MicronApi.Debug) {
// if (reelDetialDtos.size() <= 0) {
// for (int i = 0; i < 5; i++) {
// String ok = (i <= 1) ? "CheckOk" : "CheckFail";
// SelReelDetialDto dto = new SelReelDetialDto("PN" + i, "barcode" + i, i * 100, ok, "msg" + i);
// reelDetialDtos.add(dto);
// }
// for (int i = 6; i < 9; i++) {
// SelReelDetialDto dto = new SelReelDetialDto("PN" + i, "barcode" + i, i * 100, "", "");
// reelDetialDtos.add(dto);
// }
// }
// }
return reelDetialDtos;
}
private List<MaterialDispatchDto> getOrderMaterialList(LiteOrder order) {
Map<String, MaterialDispatchDto> dtoMap = new HashMap<>();
for (LiteOrderItem item :
order.getOrderItems()) {
for (LiteOrderItem selItem : item.getSelectItems()) {
String mtype = selItem.getAppendData("mtype");
MaterialDispatchDto dto = dtoMap.getOrDefault(mtype, new MaterialDispatchDto(mtype, 0, 0, 0));
// if (item.isSuccess()) {
// } else
if (selItem.isNg()) {
dto.setNg(dto.getNg() + 1);
} else if (selItem.isTranFail()) {
dto.setFailure(dto.getFailure() + 1);
} else {
dto.setSuccessQty(dto.getSuccessQty() + 1);
}
dtoMap.put(dto.getMaterialType(), dto);
}
}
List<MaterialDispatchDto> resultList = new ArrayList<>();
for (MaterialDispatchDto dto : dtoMap.values()) {
resultList.add(dto);
}
// if (resultList.size() <= 0 && MicronApi.Debug) {
// resultList.add(new MaterialDispatchDto(MicronDataCache.PIZZABOX, 2, 3, 9));
// resultList.add(new MaterialDispatchDto(MicronDataCache.REEL, 23, 2, 54));
// resultList.add(new MaterialDispatchDto(MicronDataCache.PCB, 22, 2, 52));
// }
return resultList;
}
@ApiOperation("Submit 选择工单文件后确认上传 mode=RACK时需要输入reason,mode=CTRLDISPATCH时reason传空字符串 ") @ApiOperation("Submit 选择工单文件后确认上传 mode=RACK时需要输入reason,mode=CTRLDISPATCH时reason传空字符串 ")
@AnonymousAccess @AnonymousAccess
@PostMapping("/submit") @PostMapping("/submit")
public ResultBean outSideSubmit( @RequestParam MultipartFile orderFile,@RequestParam String mode,@RequestParam String reason ) { public ResultBean outSideSubmit(@RequestParam MultipartFile orderFile, @RequestParam String mode, @RequestParam String reason) {
try { try {
// public ResultBean outSideSubmit(@RequestBody String mode,@RequestBody String reason ,@RequestBody MultipartFile orderFile) { // public ResultBean outSideSubmit(@RequestBody String mode,@RequestBody String reason ,@RequestBody MultipartFile orderFile) {
...@@ -197,7 +311,7 @@ private IStoragePosManager storagePosManager; ...@@ -197,7 +311,7 @@ private IStoragePosManager storagePosManager;
return ResultBean.newErrorResult(-1, "smfcore.micron.operationFailure", "操作失败"); return ResultBean.newErrorResult(-1, "smfcore.micron.operationFailure", "操作失败");
} }
//判断是否生成,未关闭的工单 //判断是否生成,未关闭的工单
if (ObjectUtil.isEmpty(dto.getOperationId()) || ObjectUtil.isEmpty(dto.getLineId())) { if (ObjectUtil.isEmpty(dto.getOperationId()) ||(NeedInputLineId(dto.getMode()) && ObjectUtil.isEmpty(dto.getLineId()))) {
log.info("outSideSubmit 操作失败,taskDto数据不完整"); log.info("outSideSubmit 操作失败,taskDto数据不完整");
return ResultBean.newErrorResult(-1, "smfcore.micron.operationFailure", "操作失败"); return ResultBean.newErrorResult(-1, "smfcore.micron.operationFailure", "操作失败");
} }
...@@ -218,18 +332,8 @@ private IStoragePosManager storagePosManager; ...@@ -218,18 +332,8 @@ private IStoragePosManager storagePosManager;
dto.setLineId(reason); dto.setLineId(reason);
} }
String lineId = dto.getLineId(); String lineId = dto.getLineId();
dataCache.updateCache(Constants.CACHE_DISPATCH + mode, dto); dataCache.updateCache(Constants.CACHE_DISPATCH + mode, dto);
return NewOrderProcess(mode, lineId);
//工单上传成功,开始挑料
LiteOrder order = getOrderByMode(mode);
liteOrderCache.OrderReady(order.getOrderNo(), lineId);
// ,直接返回列表页面
List<LiteOrderItem> itemList = getLiteOrderItemList(mode);
List<DispatchItemDto> list = dispatchItemMapper.toDto(itemList);
return ResultBean.newOkResult(list);
} else { } else {
return ResultBean.newErrorResult(-1, "smfcore.micron.operationFailure", "操作失败"); return ResultBean.newErrorResult(-1, "smfcore.micron.operationFailure", "操作失败");
...@@ -242,11 +346,27 @@ private IStoragePosManager storagePosManager; ...@@ -242,11 +346,27 @@ private IStoragePosManager storagePosManager;
} }
} }
private ResultBean NewOrderProcess(String mode, String lineId ) {
//工单上传成功,开始挑料
LiteOrder order = getOrderByMode(mode);
liteOrderCache.OrderReady(order.getOrderNo(), lineId);
if (liteOrderCache.dispatchOrderIsCheckOk(order)) {
log.info(order.getOrderNo() + "工单已备料完成,直接出料");
//直接开始出库
liteOrderCache.dispatchCheckOut(order, false, false);
}
return getTaskInfo(order);
}
@ApiOperation("Controlled Dispatch 输入lineID后调用此方法") @ApiOperation("Controlled Dispatch 输入lineID后调用此方法")
@AnonymousAccess @AnonymousAccess
@PostMapping("/controlledDisSure") @PostMapping("/controlledDisSure")
public ResultBean controlledDisSure( @RequestParam String mode,@RequestParam String lineId ) { public ResultBean controlledDisSure(@RequestParam String mode, @RequestParam String lineId) {
//判断是否验证 //判断是否验证
if (!MicronApi.isEnable()) { if (!MicronApi.isEnable()) {
return ResultBean.newErrorResult(9, "smfcore.micron.apiClose", " Not yet open"); return ResultBean.newErrorResult(9, "smfcore.micron.apiClose", " Not yet open");
...@@ -259,11 +379,13 @@ private IStoragePosManager storagePosManager; ...@@ -259,11 +379,13 @@ private IStoragePosManager storagePosManager;
//code=1,没有数据,OutSide按钮进入上传工单页面 ,ControlledDispatch 按钮进入选择Pn或上传工单页面 //code=1,没有数据,OutSide按钮进入上传工单页面 ,ControlledDispatch 按钮进入选择Pn或上传工单页面
//code=2,ControlledDispatch 进入输入lineID页面 //code=2,ControlledDispatch 进入输入lineID页面
//code=-1:出错提示信息 //code=-1:出错提示信息
List<LiteOrderItem> itemList = getLiteOrderItemList(mode); // List<LiteOrderItem> itemList = getLiteOrderItemList(mode);
if (itemList != null && !itemList.isEmpty()) { LiteOrder order = getOrderByMode(mode);
//已存在,直接返回列表页面 if (order != null && !order.getOrderItems().isEmpty()) {
List<DispatchItemDto> list = dispatchItemMapper.toDto(itemList); // //已存在,直接返回列表页面
return ResultBean.newOkResult(list); // List<DispatchItemDto> list = dispatchItemMapper.toDto(itemList);
// return ResultBean.newOkResult(list);
return getTaskInfo(order);
} else { } else {
...@@ -274,7 +396,7 @@ private IStoragePosManager storagePosManager; ...@@ -274,7 +396,7 @@ private IStoragePosManager storagePosManager;
dto.setLineId(lineId); dto.setLineId(lineId);
//调用API201 //调用API201
String result = MicronApi.Api201(lineId, dto.getOperationId()); String result = MicronApi.Api201(lineId, dto.getOperationId());
if (ObjectUtil.isEmpty( result)) { if (ObjectUtil.isEmpty(result)) {
//成功 //成功
dto.setLineId(lineId); dto.setLineId(lineId);
dataCache.updateCache(Constants.CACHE_DISPATCH + mode, dto); dataCache.updateCache(Constants.CACHE_DISPATCH + mode, dto);
...@@ -296,7 +418,7 @@ private IStoragePosManager storagePosManager; ...@@ -296,7 +418,7 @@ private IStoragePosManager storagePosManager;
if (StringUtils.isNotBlank(operationId)) { if (StringUtils.isNotBlank(operationId)) {
dto.setOperationId(operationId); dto.setOperationId(operationId);
dataCache.updateCache(Constants.CACHE_DISPATCH + mode, dto); dataCache.updateCache(Constants.CACHE_DISPATCH + mode, dto);
MicronApi.ActionUpdate(operationId,MicronApi.START); MicronApi.ActionUpdate(operationId, MicronApi.START);
} else { } else {
return ResultBean.newErrorResult(-1, "smfcore.api.fail", "Api011 获取数据失败", new String[]{"API011"}); return ResultBean.newErrorResult(-1, "smfcore.api.fail", "Api011 获取数据失败", new String[]{"API011"});
} }
...@@ -308,7 +430,7 @@ private IStoragePosManager storagePosManager; ...@@ -308,7 +430,7 @@ private IStoragePosManager storagePosManager;
@ApiOperation("Controlled Dispatch ,勾选Pn出库提交") @ApiOperation("Controlled Dispatch ,勾选Pn出库提交")
@AnonymousAccess @AnonymousAccess
@PostMapping("/pnSubmit") @PostMapping("/pnSubmit")
public ResultBean pnSubmit(@RequestBody Set< TacticsOutDto > outDtoSet) { public ResultBean pnSubmit(@RequestBody Set<TacticsOutDto> outDtoSet) {
try { try {
//判断是否验证 //判断是否验证
if (!MicronApi.isEnable()) { if (!MicronApi.isEnable()) {
...@@ -370,17 +492,7 @@ private IStoragePosManager storagePosManager; ...@@ -370,17 +492,7 @@ private IStoragePosManager storagePosManager;
liteOrder = liteOrderManager.createWithItems(liteOrder); liteOrder = liteOrderManager.createWithItems(liteOrder);
liteOrderCache.addOrderToMap(liteOrder); liteOrderCache.addOrderToMap(liteOrder);
return NewOrderProcess(mode, taskDto.getLineId());
//开始挑料
LiteOrder order = getOrderByMode(mode);
liteOrderCache.OrderReady(order.getOrderNo(), taskDto.getLineId());
// ,直接返回列表页面
List<LiteOrderItem> itemList = getLiteOrderItemList(mode);
List<DispatchItemDto> list = dispatchItemMapper.toDto(itemList);
return ResultBean.newOkResult(list);
} catch (Exception exception) { } catch (Exception exception) {
log.error(exception.toString()); log.error(exception.toString());
return ResultBean.newErrorResult(-1, exception.toString(), exception.toString()); return ResultBean.newErrorResult(-1, exception.toString(), exception.toString());
...@@ -388,87 +500,92 @@ private IStoragePosManager storagePosManager; ...@@ -388,87 +500,92 @@ private IStoragePosManager storagePosManager;
} }
// @ApiOperation("可用列表详情,点详情时,发送itemId,获取详细信息")
// @PostMapping("/itemDetial")
@ApiOperation("可用列表详情,点详情时,发送itemId,获取详细信息") // @AnonymousAccess
@PostMapping("/itemDetial") // public ResultBean itemDetial(@RequestBody Map<String,Object> params) {
@AnonymousAccess //
public ResultBean itemDetial(@RequestBody Map<String,Object> params) { // String mode = params.get("mode").toString();
// String itemId = params.get("itemId").toString();
String mode = params.get("mode").toString(); // log.info(" itemDetial :mode=" + mode + ", itemId=" + itemId);
String itemId = params.get("itemId").toString(); // //判断有没有生成任务
log.info(" itemDetial :mode=" + mode + ", itemId=" + itemId); // LiteOrder order = getOrderByMode(mode);
//判断有没有生成任务 // if (order == null) {
LiteOrder order = getOrderByMode(mode); // return ResultBean.newErrorResult(-1, "smfcore.micron.operationFailure", "操作失败");
if (order == null) { // }
return ResultBean.newErrorResult(-1, "smfcore.micron.operationFailure", "操作失败"); //
} // List<LiteOrderItem> items = order.getOrderItems().stream()
// .filter(item -> (item.getId().equals(itemId)))
List<LiteOrderItem> items = order.getOrderItems().stream() // .collect(Collectors.toList());
.filter(item -> (item.getId().equals(itemId))) //
.collect(Collectors.toList()); // if (items.size() <= 0) {
// return ResultBean.newErrorResult(-1, "smfcore.micron.notFound", "未找到数据");
if (items.size() <= 0) { // }
return ResultBean.newErrorResult(-1, "smfcore.micron.notFound", "未找到数据"); //
} // LiteOrderItem selItem = items.get(0);
//
LiteOrderItem selItem = items.get(0); // List<ItemDetialDto> detialDtos = new ArrayList<>();
//
List<ItemDetialDto> detialDtos = new ArrayList<>(); // for (LiteOrderItem item : selItem.getSelectItems()
// ) {
for (LiteOrderItem item : selItem.getSelectItems() // ItemDetialDto dto = new ItemDetialDto(item.getRi(), item.getNeedNum(), item.getStatus(),item.getExecutFailReason());
) { // detialDtos.add(dto);
ItemDetialDto dto = new ItemDetialDto(item.getRi(), item.getNeedNum(), item.getStatus(),item.getExecutFailReason()); // }
detialDtos.add(dto); //
} // //判断是否需要勾选其他物料
// if (selItem.getOutNum() < selItem.getNeedNum()) {
//判断是否需要勾选其他物料 // //需要勾选
if (selItem.getOutNum() < selItem.getNeedNum()) { //
//需要勾选 // CHECKOUT_TYPE checkoutType = dataCache.getCheckOutType();
// List<String> availableStorageIds = dataCache.getAvailableStorageIds();
CHECKOUT_TYPE checkoutType = dataCache.getCheckOutType(); // Collection<String> excludePosIds = liteOrderCache.excludeOutPosIds();
List<String> availableStorageIds = dataCache.getAvailableStorageIds(); // List<StoragePos> otherPosList = storagePosManager.findInStoragesByPN(excludePosIds, selItem.getPn(), checkoutType);
Collection<String> excludePosIds = liteOrderCache.excludeOutPosIds(); //
List<StoragePos> otherPosList = storagePosManager.findInStoragesByPN(excludePosIds, selItem.getPn(), checkoutType); // for (StoragePos pos :
// otherPosList) {
for (StoragePos pos : //
otherPosList) { // ItemDetialDto dto = new ItemDetialDto(pos.getBarcode().getBarcode(), pos.getBarcode().getAmount(), "","");
// detialDtos.add(dto);
ItemDetialDto dto = new ItemDetialDto(pos.getBarcode().getBarcode(), pos.getBarcode().getAmount(), "",""); // }
detialDtos.add(dto); // }
} //
} // if(MicronApi.Debug){
// if(detialDtos.size()<=0){
if(MicronApi.Debug){ // for (int i=0;i<5;i++) {
if(detialDtos.size()<=0){ // String ok = (i <= 1) ? "CheckOk" : "CheckFail";
for (int i=0;i<5;i++) { // ItemDetialDto dto = new ItemDetialDto("barcode" + i, i * 100, ok, "msg" + i);
String ok = (i <= 1) ? "CheckOk" : "CheckFail"; // detialDtos.add(dto);
ItemDetialDto dto = new ItemDetialDto("barcode" + i, i * 100, ok, "msg" + i); // }
detialDtos.add(dto); // for (int i=6;i<9;i++) {
} // ItemDetialDto dto = new ItemDetialDto("barcode" + i, i * 100, "", "");
for (int i=6;i<9;i++) { // detialDtos.add(dto);
ItemDetialDto dto = new ItemDetialDto("barcode" + i, i * 100, "", ""); // }
detialDtos.add(dto); // }
} // }
} //
} // //判断是否需要勾选
//
//判断是否需要勾选 // return ResultBean.newOkResult(detialDtos);
// }
return ResultBean.newOkResult(detialDtos);
}
@ApiOperation("勾选列表中的Ri,确认提交") @ApiOperation("勾选列表中的Ri,确认提交")
@PostMapping("/itemSubmit") @PostMapping("/itemSubmit")
@AnonymousAccess @AnonymousAccess
public ResultBean itemSubmit(@RequestBody Map<String,Object> params) { public ResultBean itemSubmit(@RequestBody Map<String, Object> params) {
try { try {
String mode = params.get("mode").toString(); String mode = params.get("mode").toString();
String itemId = params.get("itemId").toString(); String itemId = "";
if (params.containsKey("itemId")) {
itemId = params.get("itemId").toString();
}
Object overrideOut = params.get("isOverride");
boolean isOver = false;
if (ObjectUtil.isNotEmpty(overrideOut) && overrideOut.toString().equalsIgnoreCase("true")) {
isOver = true;
}
List<Object> selectRiList = (List<Object>) params.get("submitRIS"); List<Object> selectRiList = (List<Object>) params.get("submitRIS");
log.info(" itemDetial :mode=" + mode + ", itemId=" + itemId); log.info(" itemDetial :mode=" + mode + ", itemId=" + itemId+"");
//判断有没有生成任务 //判断有没有生成任务
LiteOrder order = getOrderByMode(mode); LiteOrder order = getOrderByMode(mode);
if (order == null) { if (order == null) {
...@@ -479,17 +596,6 @@ private IStoragePosManager storagePosManager; ...@@ -479,17 +596,6 @@ private IStoragePosManager storagePosManager;
log.info("pnSubmit 操作失败,taskDto数据不完整"); log.info("pnSubmit 操作失败,taskDto数据不完整");
return ResultBean.newErrorResult(-1, "smfcore.micron.operationFailure", "操作失败"); return ResultBean.newErrorResult(-1, "smfcore.micron.operationFailure", "操作失败");
} }
List<LiteOrderItem> items = order.getOrderItems().stream()
.filter(item -> (item.getId().equals(itemId)))
.collect(Collectors.toList());
if (items.size() <= 0) {
return ResultBean.newErrorResult(-1, "smfcore.micron.notFound", "未找到数据");
}
for (LiteOrderItem item :
items) {
if (item.getId().equals(itemId)) {
List<Barcode> allBarcodes = new ArrayList<>(); List<Barcode> allBarcodes = new ArrayList<>();
//查找到详情,循环RI,生成API009数据 //查找到详情,循环RI,生成API009数据
for (Object ri : for (Object ri :
...@@ -499,18 +605,33 @@ private IStoragePosManager storagePosManager; ...@@ -499,18 +605,33 @@ private IStoragePosManager storagePosManager;
allBarcodes.add(pos.getBarcode()); allBarcodes.add(pos.getBarcode());
} }
} }
//调用API009 //调用API009
Map<String, MaterialStatus> apiResultMap = MicronApi.Api009(order.getOperationId(), taskDto.getLineId(), allBarcodes); Map<String, MaterialStatus> apiResultMap = MicronApi.Api009(order.getOperationId(), taskDto.getLineId(), allBarcodes);
List<LiteOrderItem> newItems = new ArrayList<>();
for (LiteOrderItem item :
order.getOrderItems()) {
List<Barcode> itemBarcode = allBarcodes.stream()
.filter(barcode -> (barcode.getPartNumber().equals(item.getPn())))
.collect(Collectors.toList());
List<LiteOrderItem> selectReelItems = item.selectItems; List<LiteOrderItem> selectReelItems = item.selectItems;
for (Barcode barcode : for (Barcode barcode :
allBarcodes) { itemBarcode) {
LiteOrderItem reelItem = new LiteOrderItem();
StoragePos pos = storagePosManager.getByBarcode(barcode.getBarcode()); StoragePos pos = storagePosManager.getByBarcode(barcode.getBarcode());
reelItem.setRi(pos.getBarcode().getBarcode()); LiteOrderItem reelItem = null;
reelItem.setNeedNum(pos.getBarcode().getAmount()); List<LiteOrderItem> findes = selectReelItems.stream()
.filter(obj -> (obj.getRi().equals(barcode.getBarcode()))).collect(Collectors.toList());
if (findes.size() > 0) {
reelItem = findes.get(0);
}
//如果是之前验证成功的,直接跳过
if (reelItem == null) {
reelItem = liteOrderCache.NewSelItem(pos);
} else if (reelItem.isSuccess() && (!reelItem.getStatus().equalsIgnoreCase(OrderItemStatus.wait))) {
continue;
}
MaterialStatus s = apiResultMap.get(barcode.getBarcode()); MaterialStatus s = apiResultMap.get(barcode.getBarcode());
if (s != null && s.isAvailable()) { if (s != null && s.isAvailable()) {
...@@ -523,6 +644,8 @@ private IStoragePosManager storagePosManager; ...@@ -523,6 +644,8 @@ private IStoragePosManager storagePosManager;
pos.getBarcode().setLockName(item.getPn()); pos.getBarcode().setLockName(item.getPn());
storagePosManager.save(pos); storagePosManager.save(pos);
item.setOutNum(item.getOutNum() + pos.getBarcode().getAmount()); item.setOutNum(item.getOutNum() + pos.getBarcode().getAmount());
item.setOutReelCount(item.getOutReelCount() + 1);
order.setTaskReelCount(order.getTaskReelCount() + 1);
} else if (s != null && s.isReserved()) { } else if (s != null && s.isReserved()) {
String str = s.getDescription(); String str = s.getDescription();
...@@ -545,15 +668,21 @@ private IStoragePosManager storagePosManager; ...@@ -545,15 +668,21 @@ private IStoragePosManager storagePosManager;
selectReelItems.add(reelItem); selectReelItems.add(reelItem);
} }
item.setSelectItems(selectReelItems); item.setSelectItems(selectReelItems);
liteOrderItemManager.save(item); liteOrderItemManager.save(item);
newItems.add(item);
} }
} order.setOrderItems(newItems);
liteOrderManager.save(order);
liteOrderCache.addOrderToMap(order);
//返回新增列表
log.info(order.getOrderNo() + "已勾选物料完成,直接出料");
//直接开始出库
liteOrderCache.dispatchCheckOut(order, false, isOver);
return getTaskInfo(order);
//判断是否需要勾选 //判断是否需要勾选
return ResultBean.newOkResult(""); // return ResultBean.newOkResult("");
} catch (Exception exception) { } catch (Exception exception) {
...@@ -563,11 +692,10 @@ private IStoragePosManager storagePosManager; ...@@ -563,11 +692,10 @@ private IStoragePosManager storagePosManager;
} }
@ApiOperation("工单确认出库") @ApiOperation("工单确认出库")
@PostMapping("/checkOut") @PostMapping("/checkOut")
@AnonymousAccess @AnonymousAccess
public ResultBean checkOut(@RequestBody Map<String,Object> params) { public ResultBean checkOut(@RequestBody Map<String, Object> params) {
try { try {
String mode = params.get("mode").toString(); String mode = params.get("mode").toString();
Object overrideOut = params.get("isOverride"); Object overrideOut = params.get("isOverride");
...@@ -602,72 +730,31 @@ private IStoragePosManager storagePosManager; ...@@ -602,72 +730,31 @@ private IStoragePosManager storagePosManager;
@ApiOperation("重试按钮") @ApiOperation("重试按钮")
@PostMapping("/retry") @PostMapping("/retry")
@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();
Object overrideOut=params.get("isOverride"); Object overrideOut = params.get("isOverride");
boolean isOver=false; boolean isOver = false;
if(ObjectUtil.isNotEmpty(overrideOut)&&overrideOut.toString().equalsIgnoreCase("true")) { if (ObjectUtil.isNotEmpty(overrideOut) && overrideOut.toString().equalsIgnoreCase("true")) {
isOver = true; isOver = true;
} }
log.info(" retry :mode=" + mode + ",重新出库, isOver="+isOver); log.info(" retry :mode=" + mode + ",重新出库, isOver=" + isOver);
//判断有没有生成任务 //判断有没有生成任务
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", "操作失败");
} }
String msg= liteOrderCache.dispatchCheckOut(order,true,isOver); String msg = liteOrderCache.dispatchCheckOut(order, true, isOver);
if(ObjectUtil.isNotEmpty(msg)){ if (ObjectUtil.isNotEmpty(msg)) {
return ResultBean.newErrorResult(-1,msg,msg); return ResultBean.newErrorResult(-1, msg, msg);
} }
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 String CloseOrder(LiteOrder order) {
try { try {
...@@ -684,7 +771,10 @@ private IStoragePosManager storagePosManager; ...@@ -684,7 +771,10 @@ private IStoragePosManager storagePosManager;
if (sItem.getStatus() == OrderItemStatus.notify_fail || sItem.getStatus() == OrderItemStatus.cancel || sItem.getStatus() == OrderItemStatus.executing) { if (sItem.getStatus() == OrderItemStatus.notify_fail || sItem.getStatus() == OrderItemStatus.cancel || sItem.getStatus() == OrderItemStatus.executing) {
List<DataLog> dataLogList = dataLogManager.findByQuery(new List<DataLog> dataLogList = dataLogManager.findByQuery(new
Query(Criteria.where("subSourceId").is(sItem.getId())).addCriteria(Criteria.where("status").is(OP_STATUS.FINISHED.name()))); Query(
Criteria.where("subSourceId").is(orderItem.getId())).
addCriteria(Criteria.where("status").is(OP_STATUS.FINISHED.name())).
addCriteria(Criteria.where("barcode").is(sItem.getRi())));
if (dataLogList.size() > 0) { if (dataLogList.size() > 0) {
needSendList.addAll(dataLogList); needSendList.addAll(dataLogList);
...@@ -717,12 +807,13 @@ private IStoragePosManager storagePosManager; ...@@ -717,12 +807,13 @@ private IStoragePosManager storagePosManager;
MicronApi.ActionUpdate(order.getOperationId(), MicronApi.ABORT); MicronApi.ActionUpdate(order.getOperationId(), MicronApi.ABORT);
} }
liteOrderCache.clearOrderLock(order); liteOrderCache.clearOrderLock(order);
return "";
} }
@ApiOperation("放弃出库") @ApiOperation("放弃出库")
@PostMapping("/abort") @PostMapping("/abort")
@AnonymousAccess @AnonymousAccess
public ResultBean abort(@RequestBody Map<String,Object> params) { public ResultBean abort(@RequestBody Map<String, Object> params) {
String mode = params.get("mode").toString(); String mode = params.get("mode").toString();
log.info(" abort :mode=" + mode); log.info(" abort :mode=" + mode);
...@@ -734,38 +825,33 @@ private IStoragePosManager storagePosManager; ...@@ -734,38 +825,33 @@ private IStoragePosManager storagePosManager;
return ResultBean.newErrorResult(-1, "smfcore.micron.operationFailure", "操作失败"); return ResultBean.newErrorResult(-1, "smfcore.micron.operationFailure", "操作失败");
} }
if (order != null) { if (order != null) {
List<LiteOrderItem> liteOrderItemList = order.getOrderItems(); //有任务的工单不能关闭
List<LiteOrderItem> newList = new ArrayList<>(); List<DataLog> allTask = taskService.getAllTasks();
for (DataLog task : allTask
for (LiteOrderItem orderItem :
liteOrderItemList) {
if (orderItem.getStatus() == OrderItemStatus.notify_fail) {
List<DataLog> dataLogList = dataLogManager.findByQuery(new Query(Criteria.where("subSourceId").is(orderItem.getId())));
//如果任务未结束,结束任务
for (DataLog dataLog : dataLogList
) { ) {
if (dataLog.isExecuting()) { if (OP.CHECKOUT == task.getType() && (!task.isEnd())) {
//更新工单状态
String taskSourceName = task.getSourceName();
if (!Strings.isNullOrEmpty(taskSourceName) && order.getOrderNo().equals(taskSourceName)) {
if (task.isExecuting()||task.isWait()) {
taskService.cancelTask(dataLog.getId()); log.info("abort 终止出库,mode=" + mode + ",还有正在执行的任务:barcode=" + task.getBarcode() + ",posName=" + task.getPosName());
log.info("abort 终止出库,mode=" + mode + ",取消正在执行的出库任务:barcode=" + dataLog.getBarcode() + ",posName=" + dataLog.getPosName()); // taskService.cancelTask(task.getId());
return ResultBean.newErrorResult(-1, "smfcore.order.close.taskNotEnd", "操作失败,工单还有未完成的任务");
} }
} }
orderItem.setStatus(OrderItemStatus.cancel);
orderItem = liteOrderItemManager.save(orderItem);
newList.add(orderItem);
log.info(" abort :barcode=[" + orderItem.getPn() + "] 取消出库任务");
} }
} }
log.info("abort 终止出库,mode=" + mode + ",取消正在执行的出库任务:关闭工单=" + order.getOrderNo());
CloseOrder(order);
}else {
String key = Constants.CACHE_DISPATCH +mode; String msg = CloseOrder(order);
log.info("abort 终止出库,mode=" + mode + ",取消正在执行的出库任务:关闭工单=" + order.getOrderNo() + ",结果=" + msg);
} else {
String key = Constants.CACHE_DISPATCH + mode;
log.info("abort mode=" + mode + " 清空 key=" + key + " 的cache,更改action=ABORT"); log.info("abort mode=" + mode + " 清空 key=" + key + " 的cache,更改action=ABORT");
MicronApi.ActionUpdate(order.getOperationId(),MicronApi.ABORT ); MicronApi.ActionUpdate(taskDto.getOperationId(), MicronApi.ABORT);
dataCache.updateCache(key, ""); dataCache.updateCache(key, "");
} }
return ResultBean.newOkResult(""); return ResultBean.newOkResult("");
...@@ -774,7 +860,7 @@ private IStoragePosManager storagePosManager; ...@@ -774,7 +860,7 @@ private IStoragePosManager storagePosManager;
public LiteOrder getOrderByMode(String mode) { public LiteOrder getOrderByMode(String mode) {
Collection<LiteOrder> liteOrder = liteOrderCache.getAllLiteOrder(); Collection<LiteOrder> liteOrder = liteOrderCache.getAllLiteOrder();
for (LiteOrder order : liteOrder) { for (LiteOrder order : liteOrder) {
if (ObjectUtil.isNotEmpty(order.getMode())&& mode.equals(order.getMode()) && !order.isClosed()) { if (ObjectUtil.isNotEmpty(order.getMode()) && mode.equals(order.getMode()) && !order.isClosed()) {
return order; return order;
} }
...@@ -782,11 +868,62 @@ private IStoragePosManager storagePosManager; ...@@ -782,11 +868,62 @@ private IStoragePosManager storagePosManager;
return null; return null;
} }
public List<LiteOrderItem> getLiteOrderItemList(String mode) {
LiteOrder order=getOrderByMode(mode); @ApiOperation("点击对应物料的数量, 获取料盘详细数据")
if(order!=null){ @GetMapping("/reelDetial")
return order.getOrderItems(); @AnonymousAccess
public ResultBean reelDetial(@RequestParam Map<String, Object> params) {
//参数:mType 物料类型:pcb/shoebox/pizzaBox/reel/tray
//参数:state 状态: success/failure/ng
//参数:mode (点大按钮时的mode)
String mType = params.get("mType").toString();
String state = params.get("state").toString();
String mode = params.get("mode").toString();
LiteOrder order = getOrderByMode(mode);
List<MaterialDtialDto> dtos = new ArrayList<>();
for (LiteOrderItem item :
order.getOrderItems()) {
if (item.getSelectItems() == null) {
continue;
} }
return null; for (LiteOrderItem selItem :
item.getSelectItems()) {
try {
String mtype = selItem.getAppendData("mtype");
if (mtype.equalsIgnoreCase(mType)) {
boolean is = false;
if (selItem.isSuccess() && state.equalsIgnoreCase("success")) {
is = true;
} else if (selItem.isNg() && state.equalsIgnoreCase("ng")) {
is = true;
} else if (selItem.isTranFail() && state.equalsIgnoreCase("failure")) {
is = true;
} }
if (is) {
MaterialDtialDto dto = new MaterialDtialDto(selItem.getRi(), selItem.getPn(), new Date(), "",
selItem.getOutNum(), 0, 0, "", "", "", "", selItem.getExecutFailReason(), selItem.getStatus());
dtos.add(dto);
}
}
} catch (Exception exception) {
log.error("error :" + exception.toString());
}
}
}
return ResultBean.newOkResult(dtos);
}
// public List<LiteOrderItem> getLiteOrderItemList(String mode) {
// LiteOrder order=getOrderByMode(mode);
// if(order!=null){
// return order.getOrderItems();
// }
// return null;
// }
} }
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!