Commit 1e2338bd zshaohui

1.退库上架传完整条码

2.获取可用料格加缓存
1 个父辈 05db7f97
......@@ -265,7 +265,7 @@ public class CDeviceController {
else if (MaterialUtil.ticketReturn(materialStr)){
log.info(materialStr+"绑定单据退库上架,barcode为:"+barcode.getBarcode());
TicketReturn ticketReturn = MaterialUtil.getTicketReturnInfo(materialStr);
TicketUpResult ticketUp = LuxsanApi.ticketUp(new TicketUpRequest(CommonUtil.plantCode, ticketReturn.getTicket(), ticketReturn.getTicketItem(), binCodeStr, Arrays.asList(barcode.getBarcode()),barcode.getAmount()));
TicketUpResult ticketUp = LuxsanApi.ticketUp(new TicketUpRequest(CommonUtil.plantCode, ticketReturn.getTicket(), ticketReturn.getTicketItem(), binCodeStr, Arrays.asList(barcode.getFullCode()),barcode.getAmount()));
barcode.setLabelId(ticketUp.getLABEL_ID());
}
......@@ -784,29 +784,8 @@ public class CDeviceController {
return ResultBean.newErrorResult(-1,"",stackerId+"未找到可用料箱");
}
//判断AGV是上的料箱有几个
int count = 0;
List<DataLog> allTasks = taskService.getAllTasks();
for (DataLog dataLog : allTasks) {
if (dataLog.isCheckOutTask() && (dataLog.getStatus().equals(OP_STATUS.WAIT.name()))
|| dataLog.getStatus().equals(OP_STATUS.EXECUTING.name())
|| dataLog.getStatus().equals(OP_STATUS.OUT_ON_AGV.name())) {
if (TaskCurrentLoc.In1_FeedingInlet.equals(dataLog.getLoc())
|| TaskCurrentLoc.In2_FeedingInlet.equals(dataLog.getLoc())
|| TaskCurrentLoc.In_FeedingInlet.equals(dataLog.getLoc())) {
count = count + 1;
}
}
}
if (count < 4) {
try {
log.info("AGV上的料箱数量小于4,呼叫一个空料箱出来");
String materialSize = MaterialUtil.getMaterialSize(stackerId);
BoxHandleUtil.callEmptyBox(materialSize, TaskCurrentLoc.In_FeedingInlet, stackerBarcode.getWarehouseCode(), new ArrayList<>());
} catch (Exception e) {
log.info("呼叫空箱报错:" + e.getMessage());
}
}
callAgvTask(stackerId, stackerBarcode);
log.info("入料机构获取可用料格:"+stackerId+"返回的数据为:"+JSON.toJSONString(validBin));
return ResultBean.newOkResult(validBin);
}
......@@ -1029,6 +1008,32 @@ public class CDeviceController {
return ResultBean.newOkResult(boxBarcode.getHeightMap());
}
private synchronized void callAgvTask(String stackerId, Barcode stackerBarcode) {
//判断AGV是上的料箱有几个
int count = 0;
List<DataLog> allTasks = taskService.getAllTasks();
for (DataLog dataLog : allTasks) {
if (dataLog.isCheckOutTask() && (dataLog.getStatus().equals(OP_STATUS.WAIT.name()))
|| dataLog.getStatus().equals(OP_STATUS.EXECUTING.name())
|| dataLog.getStatus().equals(OP_STATUS.OUT_ON_AGV.name())) {
if (TaskCurrentLoc.In1_FeedingInlet.equals(dataLog.getLoc())
|| TaskCurrentLoc.In2_FeedingInlet.equals(dataLog.getLoc())
|| TaskCurrentLoc.In_FeedingInlet.equals(dataLog.getLoc())) {
count = count + 1;
}
}
}
log.info("入料机构获取可用料格:"+stackerId+"AGV上的箱子数为:"+count);
if (count < 4) {
try {
log.info("AGV上的料箱数量小于4,呼叫一个空料箱出来");
String materialSize = MaterialUtil.getMaterialSize(stackerId);
BoxHandleUtil.callEmptyBox(materialSize, TaskCurrentLoc.In_FeedingInlet, stackerBarcode.getWarehouseCode(), new ArrayList<>());
} catch (Exception e) {
log.info("呼叫空箱报错:" + e.getMessage());
}
}
}
private void generatePutInTask(Barcode barcode, Barcode boxBarcode,String status) {
......
......@@ -276,7 +276,9 @@ public class CtuDeviceController {
|| TaskCurrentLoc.Out1_FeedingInlet.equals(loc)
|| TaskCurrentLoc.Out2_FeedingInlet.equals(loc)
) {
dataLog.setStatus(loc);
if (dataLog.isCheckOutTask()) {
dataLog.setStatus(loc);
}
}
if (dataLog.isExecuting() || dataLog.isWait()){
taskService.updateQueueTask(dataLog);
......
......@@ -38,11 +38,21 @@ public class BinCacheUtil {
BinCacheUtil.taskService = service;
}
public static long time = 0l;
public static Map<String, String> cacheBinCodeMap = null;
public static boolean canPutInBinCode(String binCode, String warehouseCode) {
Map<String, String> cacheMap = binCodeCacheMap(warehouseCode);
if (cacheBinCodeMap == null || time == 0l || System.currentTimeMillis() - time > 1000*60*10){
cacheBinCodeMap = binCodeCacheMap(warehouseCode);
time = System.currentTimeMillis();
log.info("获取可用料箱,缓存可能为空,时间可能为空,当前时间与上一次时间相差10分钟:"+(System.currentTimeMillis() - time));
}
//判断code是否相同
String code = cacheMap.get(binCode);
String code = cacheBinCodeMap.get(binCode);
if (StringUtils.isNotEmpty(code)) {
if (code.equals(warehouseCode)) {
//binCodeUpdateTime = System.currentTimeMillis();
......@@ -113,12 +123,12 @@ public class BinCacheUtil {
String barcode = stackerBarcode.getBarcode();
String materialSize = MaterialUtil.getMaterialSize(barcode);
log.info("收到料串信息为:" + barcode + "尺寸为:" + materialSize);
log.info("入料机构获取可用料格,收到料串信息为:" + barcode + "尺寸为:" + materialSize);
//判断当前工作的料箱能不能放入
if (StringUtils.isNotEmpty(binListStr)) {
log.info(barcode+"正在工作的料格为:" + binListStr);
log.info("入料机构获取可用料格:"+barcode+"正在工作的料格为:" + binListStr);
String[] binStr = binListStr.split(",");
List<String> binCodeList = getValidBinList(stackerBarcode, Arrays.asList(binStr));
......@@ -150,11 +160,11 @@ public class BinCacheUtil {
//如果不为空,返回
if (validBinList != null && !validBinList.isEmpty()) {
log.info(barcode+"获取到可用料格为:" + JSON.toJSONString(validBinList));
String resultStr = validBinList.get(0);
boxCode = BoxHandleUtil.getBoxStr(resultStr, false);
boxLoc = source;
stackerLoc = source;
log.info("入料机构获取到当前正在工作的料格"+barcode+"获取到可用料格为:" + JSON.toJSONString(validBinList));
return new ValidBin(boxCode, boxLoc, stackerLoc, validBinList);
}
}
......@@ -162,7 +172,7 @@ public class BinCacheUtil {
//如果呼叫的空箱没有可用的,查找出库任务,在流水线上的
if (validBinList == null || validBinList.isEmpty()) {
log.info("未找到当前工作的料格,开始寻找正在当前工位上的料箱");
log.info("入料机构获取到未找到当前工作的料格"+barcode+"开始寻找正在当前工位上的料箱");
List<String> emptyBoxList = new ArrayList<>();
......@@ -171,7 +181,7 @@ public class BinCacheUtil {
for (DataLog dataLog : allTasks) {
if (dataLog.isCheckOutTask() && !dataLog.isCancel() && !dataLog.isFinished()) {
if (source.equals(dataLog.getCurrentLoc())) {
log.info(barcode + "找到当前工位上的料箱为:" + dataLog.getBarcode() + ",位置为:" + dataLog.getCurrentLoc());
//log.info(barcode + "找到当前工位上的料箱为:" + dataLog.getBarcode() + ",位置为:" + dataLog.getCurrentLoc());
emptyBoxList.add(dataLog.getBarcode());
}
}
......@@ -212,11 +222,11 @@ public class BinCacheUtil {
//如果不为空,返回
if (validBinList != null && !validBinList.isEmpty()) {
log.info(barcode+"获取到可用料格为:" + JSON.toJSONString(validBinList));
String resultStr = validBinList.get(0);
boxCode = BoxHandleUtil.getBoxStr(resultStr, false);
boxLoc = source;
stackerLoc = source;
log.info("入料机构获取到当前工位上的料格"+barcode+"获取到可用料格为:" + JSON.toJSONString(validBinList));
return new ValidBin(boxCode, boxLoc, stackerLoc, validBinList);
}
}
......@@ -227,7 +237,7 @@ public class BinCacheUtil {
//如果不可以放入,则判断当前呼叫空箱物料是否可以放入
if (validBinList == null || validBinList.isEmpty()) {
log.info("未找到当前工位上的料箱,开始寻找呼叫空箱");
log.info("入料机构未找到当前工位上的料箱"+barcode+"开始寻找已经呼叫过空箱");
List<String> callEmptyBoxList = new ArrayList<>();
......@@ -239,7 +249,6 @@ public class BinCacheUtil {
&& !TaskCurrentLoc.In2_FeedingInlet.equals(dataLog.getCurrentLoc())
) {
if (TaskCurrentLoc.In_FeedingInlet.equals(dataLog.getLoc()) || source.equals(dataLog.getLoc()) ) {
log.info(barcode+"查找出来呼叫空箱的箱子为:" + dataLog.getBarcode());
callEmptyBoxList.add(dataLog.getBarcode());
}
}
......@@ -288,7 +297,6 @@ public class BinCacheUtil {
List<DataLog> taskList = taskService.getAllTasks();
for (DataLog dataLog : taskList) {
if (dataLog.getBarcode().equals(boxStr) && dataLog.isCheckOutTask() && !dataLog.isCancel()) {
log.info(barcode+"获取到可用料格为:" + JSON.toJSONString(validBinList));
String loc = "";
if (StringUtils.isEmpty(dataLog.getLoc())) {
loc = source;
......@@ -313,6 +321,7 @@ public class BinCacheUtil {
boxCode = boxStr;
boxLoc = loc;
stackerLoc = loc;
log.info("入料机构获取已经呼叫过的空箱:"+barcode+"获取到可用料格为:" + JSON.toJSONString(validBinList));
return new ValidBin(boxCode, boxLoc, stackerLoc, validBinList);
}
}
......@@ -323,7 +332,7 @@ public class BinCacheUtil {
if (validBinList == null || validBinList.isEmpty()) {
log.info("都未找到,开始寻找空箱");
log.info("入料机构获取可用料格"+barcode+"都未找到,开始寻找空箱");
String outLet = "0";
if (TaskCurrentLoc.In2_FeedingInlet.equals(source)) {
......@@ -347,7 +356,7 @@ public class BinCacheUtil {
List<String> binCodeList = getValidBinList(stackerBarcode, binList);
if (binCodeList != null && !binCodeList.isEmpty()) {
log.info("寻找到空箱为:" + boxStr);
log.info("入料机构获取可用料格"+barcode+"寻找到空箱为:" + boxStr);
for (String binCode : binCodeList) {
if ("7".equals(materialSize)) {
......@@ -373,6 +382,7 @@ public class BinCacheUtil {
boxCode = boxStr;
boxLoc = source;
stackerLoc = source;
log.info("入料机构获取可用料格:"+barcode+"通过呼叫空箱呼叫的可用料格为:"+ JSON.toJSONString(validBinList));
return new ValidBin(boxCode, boxLoc, stackerLoc, validBinList);
}
}
......@@ -382,17 +392,23 @@ public class BinCacheUtil {
private static List<String> getValidBinList(Barcode stackerBarcode, List<String> binList) {
List<String> validBinList = new ArrayList<>();
Barcode boxBarcode = null;
StoragePos pos = null;
for (String binId : binList) {
String boxStr = BoxHandleUtil.getBoxStr(binId, true);
Barcode boxBarcode = codeResolve.resolveOneValideBarcode(boxStr);
if (boxBarcode == null){
boxBarcode = codeResolve.resolveOneValideBarcode(boxStr);
}
//为料箱分配一个库位,直接放到库位中, 如果没有库位, 那么这个料箱不允许使用
StoragePos pos = BoxHandleUtil.locOnePos(boxBarcode);
if (pos == null) {
pos = BoxHandleUtil.locOnePos(boxBarcode);
}
if (pos != null) {
String canPutIn = BinCacheUtil.canMaterialPutInBin(stackerBarcode, boxBarcode, binId);
if (canPutIn.isEmpty()) {
validBinList.add(binId);
} else {
log.info(canPutIn);
//log.info(canPutIn);
}
}
}
......
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!