Commit e8f5305b zshaohui

1.移库问题修改

2.获取不到料串目的地修改
1 个父辈 a8bc1204
...@@ -837,7 +837,7 @@ public class DeviceController { ...@@ -837,7 +837,7 @@ public class DeviceController {
// 2024-05-18 16:55:46.593 INFO [DeviceController.java:862] - 查找到锁定的外侧库位为目标库位:20768B_02_B01_008 // 2024-05-18 16:55:46.593 INFO [DeviceController.java:862] - 查找到锁定的外侧库位为目标库位:20768B_02_B01_008
String checkOutPosName = paramMap.get("checkOutPosName"); String checkOutPosName = paramMap.get("checkOutPosName");
String needMovePosName = paramMap.get("needMovePosName"); String needMovePosName = paramMap.get("needMovePosName");
log.info("出库的库位为:"+checkOutPosName+",需要移动的库位为:"+needMovePosName); log.info("出库的库位为:" + checkOutPosName + ",需要移动的库位为:" + needMovePosName);
StoragePos checkOutPos = storagePosManager.getByPosName(checkOutPosName); StoragePos checkOutPos = storagePosManager.getByPosName(checkOutPosName);
if (checkOutPos == null) { if (checkOutPos == null) {
return ResultBean.newErrorResult(-1, "smfcore.valueNotExist", "{0}[{1}]不存在", new String[]{"posName", checkOutPosName}); return ResultBean.newErrorResult(-1, "smfcore.valueNotExist", "{0}[{1}]不存在", new String[]{"posName", checkOutPosName});
...@@ -850,7 +850,7 @@ public class DeviceController { ...@@ -850,7 +850,7 @@ public class DeviceController {
//如果barcode不为空,则提前锁定目标库位 //如果barcode不为空,则提前锁定目标库位
boolean hasReel = true; boolean hasReel = true;
Barcode barcode = needMovePos.getBarcode(); Barcode barcode = needMovePos.getBarcode();
String posName=""; String posName = "";
if (barcode != null) { if (barcode != null) {
// Storage storage = dataCache.getStorageById(checkOutPos.getStorageId()); // Storage storage = dataCache.getStorageById(checkOutPos.getStorageId());
// ReelLockPosInfo reelLocInfo = new ReelLockPosInfo(); // ReelLockPosInfo reelLocInfo = new ReelLockPosInfo();
...@@ -862,139 +862,160 @@ public class DeviceController { ...@@ -862,139 +862,160 @@ public class DeviceController {
// log.info("提前锁定库位:" + checkOutPos.getPosName() + ",barcode为:" + barcode.getBarcode()); // log.info("提前锁定库位:" + checkOutPos.getPosName() + ",barcode为:" + barcode.getBarcode());
//有料,先查找锁定的lockS库位,有的话返回 //有料,先查找锁定的lockS库位,有的话返回
ReelLockPosInfo lockPosInfo= ReelLockPosUtil.getLockPosInfoByCode(getLockPosSKey(needMovePos.getStorageId())); ReelLockPosInfo lockPosInfo = ReelLockPosUtil.getLockPosInfoByCode(getLockPosSKey(needMovePos.getStorageId()));
if(lockPosInfo!=null&&ObjectUtil.isNotEmpty(lockPosInfo.getLockPosName())){ if (lockPosInfo != null && ObjectUtil.isNotEmpty(lockPosInfo.getLockPosName())) {
posName=lockPosInfo.getLockPosName(); posName = lockPosInfo.getLockPosName();
log.info("查找到锁定的内侧库位为目标库位:"+posName+" "); log.info("查找到锁定的内侧库位为目标库位:" + posName + " ");
} StoragePos pos = storagePosManager.getByPosName(posName);
else{ if (pos != null) {
lockPosInfo=ReelLockPosUtil.getLockPosInfoByCode(getLockPosKey(needMovePos.getStorageId())); if (pos.getW() != needMovePos.getW() && pos.getH() != needMovePos.getH()) {
if(lockPosInfo!=null&&ObjectUtil.isNotEmpty(lockPosInfo.getLockPosName())){ log.info(posName+"对应的w{},h{}与移动的宽{},高{}不一致,重新找",pos.getW(),pos.getH(),needMovePos.getW(),needMovePos.getH());
posName=lockPosInfo.getLockPosName(); posName = "";
log.info("查找到锁定的外侧库位为目标库位:"+posName+" "); }
}else{ } else {
//查找一个库位号 posName = "";
StoragePos pos = null; }
int loopCount=0; }
List<Storage> storageList=new ArrayList<>(); if (StringUtils.isEmpty(posName)) {
Storage storage=dataCache.getStorageById(needMovePos.getStorageId()); lockPosInfo = ReelLockPosUtil.getLockPosInfoByCode(getLockPosKey(needMovePos.getStorageId()));
storageList.add(storage); if (lockPosInfo != null && ObjectUtil.isNotEmpty(lockPosInfo.getLockPosName())) {
List<String> cidList=new ArrayList<>(); posName = lockPosInfo.getLockPosName();
cidList.add(storage.getCid()); log.info("查找到锁定的外侧库位为目标库位:" + posName + " ");
while (pos == null){ StoragePos pos = storagePosManager.getByPosName(posName);
loopCount++; if (pos != null) {
if(loopCount>=10 ){ if (pos.getW() != needMovePos.getW() && pos.getH() != needMovePos.getH()) {
log.info(barcode.getBarcode()+"已循环查找10次 直接跳出循环"); log.info(posName+"对应的w{},h{}与移动的宽{},高{}不一致,重新找",pos.getW(),pos.getH(),needMovePos.getW(),needMovePos.getH());
} posName = "";
//优先找B结束的,如果没有再找F的 }
String endStr = "B"; } else {
pos = taskService.findEmptyPosForMoveIn(storageList, barcode, "", "",needMovePosName,endStr); posName = "";
if (pos == null){ }
endStr = "F"; }
pos = taskService.findEmptyPosForMoveIn(storageList, barcode, "", "",needMovePosName,endStr); }
break;
} if (StringUtils.isEmpty(posName)) {
if (pos == null){ //查找一个库位号
break; StoragePos pos = null;
} int loopCount = 0;
List<Storage> storageList = new ArrayList<>();
//如果是以S结尾的,则判断不带S的有没有料 Storage storage = dataCache.getStorageById(needMovePos.getStorageId());
posName = pos.getPosName(); storageList.add(storage);
String wPosName=""; List<String> cidList = new ArrayList<>();
if (posName.endsWith("B") || posName.endsWith("b")){ cidList.add(storage.getCid());
log.info(posName+"以B结尾,需要判断外层有没有物料"); while (pos == null) {
wPosName = posName.substring(0,posName.length()-1); loopCount++;
wPosName= wPosName +"F"; if (loopCount >= 10) {
StoragePos storagePos = storagePosManager.getByPosName(wPosName); log.info(barcode.getBarcode() + "已循环查找10次 直接跳出循环");
if (storagePos != null){ }
if (storagePos.getBarcode() != null){ //优先找B结束的,如果没有再找F的
log.info("查找到目标库位:"+pos.getPosName()+" 的外侧库位"+wPosName+"有物料信息,重新查找库位 "); String endStr = "B";
ReelLockPosInfo reelLocInfo = new ReelLockPosInfo(); pos = taskService.findEmptyPosForMoveIn(storageList, barcode, "", "", needMovePosName, endStr);
reelLocInfo.setBarcode(pos.getId()); if (pos == null) {
reelLocInfo.setCid(dataCache.getStorageById(pos.getStorageId()).getCid()); endStr = "F";
reelLocInfo.setLockPosName(pos.getPosName()); pos = taskService.findEmptyPosForMoveIn(storageList, barcode, "", "", needMovePosName, endStr);
reelLocInfo.setLockPosId(pos.getId()); break;
ReelLockPosUtil.addReelLockPosInfo(reelLocInfo,cidList); }
pos = null; if (pos == null) {
posName=""; break;
}else { }
log.info("查找到目标库位:"+pos.getPosName()+" 且外侧库位" + wPosName + "无料,锁定两个库位 :" + pos.getPosName() + "=" +
getLockPosSKey(needMovePos.getStorageId()) + ",wPosName=" + getLockPosKey(needMovePos.getStorageId())); //如果是以S结尾的,则判断不带S的有没有料
//是内侧库位,且外侧库位也无料,锁定两个库位 posName = pos.getPosName();
AddLock(pos,getLockPosSKey(needMovePos.getStorageId()),cidList); String wPosName = "";
if (posName.endsWith("B") || posName.endsWith("b")) {
AddLock(storagePos,getLockPosKey(needMovePos.getStorageId()),cidList); log.info(posName + "以B结尾,需要判断外层有没有物料");
wPosName = posName.substring(0, posName.length() - 1);
//如果外侧有任务,则改成新库位一样的 wPosName = wPosName + "F";
DataLog dataLog = null; StoragePos storagePos = storagePosManager.getByPosName(wPosName);
for (DataLog queueTask : taskService.getQueueTasks()) { if (storagePos != null) {
if (barcode.getBarcode().equals(queueTask)){ if (storagePos.getBarcode() != null) {
dataLog = queueTask; log.info("查找到目标库位:" + pos.getPosName() + " 的外侧库位" + wPosName + "有物料信息,重新查找库位 ");
break; ReelLockPosInfo reelLocInfo = new ReelLockPosInfo();
} reelLocInfo.setBarcode(pos.getId());
} reelLocInfo.setCid(dataCache.getStorageById(pos.getStorageId()).getCid());
if (dataLog != null){ reelLocInfo.setLockPosName(pos.getPosName());
log.info("posName:[{}],barcode为[{}]有任务,需要重新设置任务库位:[{}]",dataLog.getPosName(),barcode.getBarcode(),pos.getPosName()); reelLocInfo.setLockPosId(pos.getId());
dataLog.setPosName(pos.getPosName()); ReelLockPosUtil.addReelLockPosInfo(reelLocInfo, cidList);
dataLog.setPosId(pos.getId()); pos = null;
if (dataLog.isExecuting() || dataLog.isWait()){ posName = "";
dataLog.setStatus(OP_STATUS.WAIT.name()); } else {
taskService.updateQueueTask(dataLog); log.info("查找到目标库位:" + pos.getPosName() + " 且外侧库位" + wPosName + "无料,锁定两个库位 :" + pos.getPosName() + "=" +
} else { getLockPosSKey(needMovePos.getStorageId()) + ",wPosName=" + getLockPosKey(needMovePos.getStorageId()));
taskService.updateFinishedTask(dataLog); //是内侧库位,且外侧库位也无料,锁定两个库位
} AddLock(pos, getLockPosSKey(needMovePos.getStorageId()), cidList);
}
AddLock(storagePos, getLockPosKey(needMovePos.getStorageId()), cidList);
}
} //如果外侧有任务,则改成新库位一样的
}else { DataLog dataLog = null;
//是外侧库位,直接锁定外侧库位 for (DataLog queueTask : taskService.getQueueTasks()) {
log.info("查找到外侧库位作为目标库位,锁定库位 :" + pos.getPosName() + "=" + getLockPosKey(needMovePos.getStorageId())); if (barcode.getBarcode().equals(queueTask)) {
dataLog = queueTask;
AddLock(pos,getLockPosKey(needMovePos.getStorageId()),cidList); break;
}
//如果外侧有任务,则改成新库位一样的 }
DataLog dataLog = null; if (dataLog != null) {
for (DataLog queueTask : taskService.getQueueTasks()) { log.info("posName:[{}],barcode为[{}]有任务,需要重新设置任务库位:[{}]", dataLog.getPosName(), barcode.getBarcode(), pos.getPosName());
if (barcode.getBarcode().equals(queueTask)){ dataLog.setPosName(pos.getPosName());
dataLog = queueTask; dataLog.setPosId(pos.getId());
break; if (dataLog.isExecuting() || dataLog.isWait()) {
} dataLog.setStatus(OP_STATUS.WAIT.name());
} taskService.updateQueueTask(dataLog);
if (dataLog != null){ } else {
log.info("posName:[{}],barcode为[{}]有任务,需要重新设置任务库位:[{}]",dataLog.getPosName(),barcode.getBarcode(),pos.getPosName()); taskService.updateFinishedTask(dataLog);
dataLog.setPosName(pos.getPosName()); }
dataLog.setPosId(pos.getId()); }
if (dataLog.isExecuting() || dataLog.isWait()){
dataLog.setStatus(OP_STATUS.WAIT.name()); }
taskService.updateQueueTask(dataLog); }
} else { } else {
taskService.updateFinishedTask(dataLog); //是外侧库位,直接锁定外侧库位
} log.info("查找到外侧库位作为目标库位,锁定库位 :" + pos.getPosName() + "=" + getLockPosKey(needMovePos.getStorageId()));
}
} AddLock(pos, getLockPosKey(needMovePos.getStorageId()), cidList);
}
} //如果外侧有任务,则改成新库位一样的
} DataLog dataLog = null;
for (DataLog queueTask : taskService.getQueueTasks()) {
if (barcode.getBarcode().equals(queueTask)) {
dataLog = queueTask;
break;
}
}
if (dataLog != null) {
log.info("posName:[{}],barcode为[{}]有任务,需要重新设置任务库位:[{}]", dataLog.getPosName(), barcode.getBarcode(), pos.getPosName());
dataLog.setPosName(pos.getPosName());
dataLog.setPosId(pos.getId());
if (dataLog.isExecuting() || dataLog.isWait()) {
dataLog.setStatus(OP_STATUS.WAIT.name());
taskService.updateQueueTask(dataLog);
} else {
taskService.updateFinishedTask(dataLog);
}
}
}
}
}
//然后找lock库位,有的话返回 //然后找lock库位,有的话返回
//没库位查找一个库位,如果是里面的,判断外面需要没料 //没库位查找一个库位,如果是里面的,判断外面需要没料
//如果是外面的锁定为Lock //如果是外面的锁定为Lock
} else { else {
hasReel = false; hasReel = false;
}
} }
Map<String, Object> resultMap = new HashMap<>(); Map<String, Object> resultMap = new HashMap<>();
resultMap.put("hasReel", hasReel); resultMap.put("hasReel", hasReel);
if (hasReel){ if (hasReel) {
resultMap.put("barcode", barcode.getBarcode()); resultMap.put("barcode", barcode.getBarcode());
resultMap.put("partNumber",barcode.getPartNumber()); resultMap.put("partNumber", barcode.getPartNumber());
if(ObjectUtil.isEmpty(posName)){ if (ObjectUtil.isEmpty(posName)) {
return ResultBean.newErrorResult(-1, "smfcore.shelf.msg.inError", "未找到适合[{0}]的库位", new String[]{"posName", needMovePosName}); return ResultBean.newErrorResult(-1, "smfcore.shelf.msg.inError", "未找到适合[{0}]的库位", new String[]{"posName", needMovePosName});
}else{ } else {
resultMap.put("posName", posName); resultMap.put("posName", posName);
} }
} }
return ResultBean.newOkResult(resultMap); return ResultBean.newOkResult(resultMap);
} }
......
...@@ -121,8 +121,9 @@ public class StackerController { ...@@ -121,8 +121,9 @@ public class StackerController {
List<Storage> noMsdStorageList = new ArrayList<>(); List<Storage> noMsdStorageList = new ArrayList<>();
for (Storage storage : dataCache.getAllStorage().values()) { for (Storage storage : dataCache.getAllStorage().values()) {
if (StringUtils.isNotEmpty(storageCid)){ if (StringUtils.isNotEmpty(storageCid)){
if (storageCid.equals(storage.getCid())); if (storageCid.equals(storage.getCid())) {
continue; continue;
}
} }
if (!msdCidList.contains(storage.getCid())) { if (!msdCidList.contains(storage.getCid())) {
noMsdStorageList.add(storage); noMsdStorageList.add(storage);
...@@ -136,8 +137,9 @@ public class StackerController { ...@@ -136,8 +137,9 @@ public class StackerController {
List<Storage> msdStorageList = new ArrayList<>(); List<Storage> msdStorageList = new ArrayList<>();
for (Storage storage : dataCache.getAllStorage().values()) { for (Storage storage : dataCache.getAllStorage().values()) {
if (StringUtils.isNotEmpty(storageCid)){ if (StringUtils.isNotEmpty(storageCid)){
if (storageCid.equals(storage.getCid())); if (storageCid.equals(storage.getCid())) {
continue; continue;
}
} }
if (msdCidList.contains(storage.getCid())) { if (msdCidList.contains(storage.getCid())) {
msdStorageList.add(storage); msdStorageList.add(storage);
......
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!