diff --git a/youchain-system/src/main/java/com/youchain/basicdata/service/impl/StockServiceImpl.java b/youchain-system/src/main/java/com/youchain/basicdata/service/impl/StockServiceImpl.java index a84c1b8..e9f6592 100644 --- a/youchain-system/src/main/java/com/youchain/basicdata/service/impl/StockServiceImpl.java +++ b/youchain-system/src/main/java/com/youchain/basicdata/service/impl/StockServiceImpl.java @@ -678,10 +678,36 @@ public class StockServiceImpl implements StockService { throw new BadRequestException("未找到相应任务记录!"); } Task task = taskService.toEntity(taskDto);//Dto转实体 - if (!orderNumber.equals(task.getItemKey().getOrderNumber())) { - throw new BadRequestException("扫描的箱号与分配的箱号不一致!"); + if (orderNumber.equals(task.getItemKey().getOrderNumber())) { + return task; + }else{ + //重新分配 + return reassignTask(task, orderNumber); } + + } + /** + * 重新分配任务 + */ + private Task reassignTask(Task task, String orderNumber) { + Inventory dstinventory = inventoryRepository.findByOrderNumber(orderNumber,task.getSrcStockCode()); + if(dstinventory==null){ + throw new BadRequestException(orderNumber+"箱号无库存,请更换箱号!"); + } + double kyQty = dstinventory.getQuantity()-dstinventory.getQueuedQty(); + if(kyQty, Jpa "(:type = 'ITEM' and inv.itemKey.item.id = :itemId) or " + "(:type = 'WAREHOUSE'))") List getInvForPlan(String type, Long areaId, Long itemId); + @Query("from Inventory inv where inv.itemKey.orderNumber=:orderNumber and inv.stockCode=:stockCode ") + Inventory findByOrderNumber(String orderNumber, String stockCode); } diff --git a/youchain-system/src/main/java/com/youchain/businessdata/service/AgvTaskService.java b/youchain-system/src/main/java/com/youchain/businessdata/service/AgvTaskService.java index e5a7890..1d2fb75 100644 --- a/youchain-system/src/main/java/com/youchain/businessdata/service/AgvTaskService.java +++ b/youchain-system/src/main/java/com/youchain/businessdata/service/AgvTaskService.java @@ -134,4 +134,11 @@ public interface AgvTaskService { */ void agvTaskCallback(AgvTask agvTask, String status, String containerCode); + /** + * 叫料反空车至备料缓存区 + * + * @param goodType 小件/大件 + */ + void callEmptyStock(String goodType); + } diff --git a/youchain-system/src/main/java/com/youchain/businessdata/service/impl/AgvTaskServiceImpl.java b/youchain-system/src/main/java/com/youchain/businessdata/service/impl/AgvTaskServiceImpl.java index 00b7c1e..fb15061 100644 --- a/youchain-system/src/main/java/com/youchain/businessdata/service/impl/AgvTaskServiceImpl.java +++ b/youchain-system/src/main/java/com/youchain/businessdata/service/impl/AgvTaskServiceImpl.java @@ -69,6 +69,7 @@ public class AgvTaskServiceImpl implements AgvTaskService { private final AsnDetailService asnDetailService; private final StockRepository stockRepository; private final PickRepository pickRepository; + @Override public Map queryAll(AgvTaskQueryCriteria criteria, Pageable pageable) { Page page = agvTaskRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root, criteria, criteriaBuilder), pageable); @@ -409,6 +410,33 @@ public class AgvTaskServiceImpl implements AgvTaskService { } + @Override + public void callEmptyStock(String goodType) { + String srcAreaCode = "小件".equals(goodType) ? AreaNameDic.JLQ : AreaNameDic.JLQ; + String dstAreaCode = "小件".equals(goodType) ? AreaNameDic.XJFBCQ : AreaNameDic.DJFBCQ; + + List emptyStock = stockRepository.findByEnmptyStock(srcAreaCode); + if (emptyStock.isEmpty()) { + return; + } + + Stock stock = emptyStock.get(0); + Point srcPoint = stock.getPoint(); + Point endPoint = pointService.findByCode(null, BaseStatus.FREE, BaseStatus.BOX, dstAreaCode, null, null); + + if (endPoint == null) { + return; + } + + AgvTask agvTask = new AgvTask(BizStatus.CALL_RETURN, stock.getCode(), srcPoint.getCode(), endPoint.getCode(), BizStatus.OPEN, "RACK_MOVE"); + agvTaskRepository.save(agvTask); + sendAgvTaskHJImpl(agvTask); + + endPoint.setStatus(BaseStatus.USED); + pointService.update(endPoint); + + } + private void handleUpContainer(AgvTask agvTask, String containerCode) { //顶升释放起点位置状态及容器绑定的起点位置 Point startPoint = pointService.findByCode(agvTask.getStartSlotCode(), null, null, null, null, null); @@ -439,7 +467,11 @@ public class AgvTaskServiceImpl implements AgvTaskService { handleFbq(taskList, stock, endPoint);//备料完成 break; case AreaNameDic.JLQ: - handleJl(stock, endPoint,agvTask);//叫料完成 + handleJl(stock, endPoint, agvTask);//叫料完成 + break; + case AreaNameDic.XJFBCQ: + case AreaNameDic.DJFBCQ: + handleCPXXAndCPRK(endPoint, stock);//叫料返空完成 break; case AreaNameDic.CPXXQ: case AreaNameDic.CPRKQ: @@ -583,7 +615,7 @@ public class AgvTaskServiceImpl implements AgvTaskService { * * @param stock */ - private void handleJl(Stock stock, Point endPoint,AgvTask agvTask) { + private void handleJl(Stock stock, Point endPoint, AgvTask agvTask) { List inventoryList = inventoryService.queryInventory(stock); if (!inventoryList.isEmpty()) { inventoryService.deleteAll(inventoryList.stream().map(Inventory::getId).toArray(Long[]::new)); @@ -593,17 +625,17 @@ public class AgvTaskServiceImpl implements AgvTaskService { endPoint.setStatus(BaseStatus.USED); pointService.update(endPoint); - Pick pick=pickRepository.findByPickCode(agvTask.getLineSlotCode()); - if(pick!=null){ + Pick pick = pickRepository.findByPickCode(agvTask.getLineSlotCode()); + if (pick != null) { pick.setStatus(BizStatus.CLOSE); pickRepository.save(pick); } //回传MES - } + /** * 更新库存 * diff --git a/youchain-system/src/main/java/com/youchain/businessdata/service/impl/PickServiceImpl.java b/youchain-system/src/main/java/com/youchain/businessdata/service/impl/PickServiceImpl.java index a943173..fd7d978 100644 --- a/youchain-system/src/main/java/com/youchain/businessdata/service/impl/PickServiceImpl.java +++ b/youchain-system/src/main/java/com/youchain/businessdata/service/impl/PickServiceImpl.java @@ -354,10 +354,15 @@ public class PickServiceImpl implements PickService { agvTask = new AgvTask(BizStatus.PICK, task.getSrcStockCode(), task.getSrcPointCode(), task.getDstPointCode(), BizStatus.OPEN, "FORKLIFT_MOVE"); agvTaskRepository.save(agvTask); agvTaskService.sendAgvTaskCCImpl(agvTask); + + } task.setAgvTask(agvTask); task.setTaskStatus(agvTask.getStatus()); taskRepository.save(task); + + //叫料区是否有空车,呼叫到备料缓存区 + agvTaskService.callEmptyStock(task.getPickDetail().getItem().getGoodType()); } /*更新出库单状态*/ pick.setStatus(BizStatus.PICKUP); diff --git a/youchain-system/src/main/java/com/youchain/utils/BizStatus.java b/youchain-system/src/main/java/com/youchain/utils/BizStatus.java index c046467..30004f4 100644 --- a/youchain-system/src/main/java/com/youchain/utils/BizStatus.java +++ b/youchain-system/src/main/java/com/youchain/utils/BizStatus.java @@ -142,6 +142,12 @@ public interface BizStatus { */ String CALL_PICK = "CALL_PICK"; + /** + * 任务类型-叫料反空 + * + */ + String CALL_RETURN = "CALL_RETURN"; + /** * 库存日志-移位