diff --git a/cpte-boot-module/cpte-module-wms/src/main/java/org/cpte/modules/agvTask/mapper/AgvTaskMapper.java b/cpte-boot-module/cpte-module-wms/src/main/java/org/cpte/modules/agvTask/mapper/AgvTaskMapper.java index aac4c69..7b93fde 100644 --- a/cpte-boot-module/cpte-module-wms/src/main/java/org/cpte/modules/agvTask/mapper/AgvTaskMapper.java +++ b/cpte-boot-module/cpte-module-wms/src/main/java/org/cpte/modules/agvTask/mapper/AgvTaskMapper.java @@ -71,7 +71,6 @@ public interface AgvTaskMapper extends BaseMapper { /** * 每个出库工作站和任务数 */ - @Select(value = "select end_code,count(end_code) from data_agv_task where type='OUTBOUND' and status in (1,2) and agv_vendor='TES' group by end_code") List> pointTaskCountMap(); @@ -82,4 +81,13 @@ public interface AgvTaskMapper extends BaseMapper { */ @Select(value = "select * from data_agv_task where type in ('INBOUND','OUTBOUND') and status=2 LIMIT 5") List queryExecuteTopFive(); + + /** + * 根据起点编码验证AGV任务是否存在 + * + * @param startCode 起点 + */ + @Select(value = "select 1 from data_agv_task where start_code = #{startCode} and status in (1,2,3) and type = 'OUTBOUND' LIMIT 1 ") + Integer existsOutAgv(@Param("startCode") String startCode); + } diff --git a/cpte-boot-module/cpte-module-wms/src/main/java/org/cpte/modules/agvTask/mapper/xml/AgvTaskMapper.xml b/cpte-boot-module/cpte-module-wms/src/main/java/org/cpte/modules/agvTask/mapper/xml/AgvTaskMapper.xml index 3493537..9172557 100644 --- a/cpte-boot-module/cpte-module-wms/src/main/java/org/cpte/modules/agvTask/mapper/xml/AgvTaskMapper.xml +++ b/cpte-boot-module/cpte-module-wms/src/main/java/org/cpte/modules/agvTask/mapper/xml/AgvTaskMapper.xml @@ -28,4 +28,19 @@ AND p.order_type in (4,5) AND agv.status IN (1, 2, 3) + + \ No newline at end of file diff --git a/cpte-boot-module/cpte-module-wms/src/main/java/org/cpte/modules/shipping/service/impl/TaskServiceImpl.java b/cpte-boot-module/cpte-module-wms/src/main/java/org/cpte/modules/shipping/service/impl/TaskServiceImpl.java index 269cc80..dc99703 100644 --- a/cpte-boot-module/cpte-module-wms/src/main/java/org/cpte/modules/shipping/service/impl/TaskServiceImpl.java +++ b/cpte-boot-module/cpte-module-wms/src/main/java/org/cpte/modules/shipping/service/impl/TaskServiceImpl.java @@ -260,7 +260,6 @@ public class TaskServiceImpl extends ServiceImpl implements IT //获取所有出库单明细 List pickDetailId = taskList.stream().map(Task::getPickDetailId).distinct().toList(); Map pickDetailMap = pickDetailService.queryByPickDetailIdsToMap(pickDetailId); - List outPoints; for (Task task : taskList) { //起点 Point fromPoint = fromPointMap.get(task.getFromPointId()); @@ -269,8 +268,7 @@ public class TaskServiceImpl extends ServiceImpl implements IT //选择最优且任务数最少的工作站 Point bestOutPoint; if(Set.of(4, 5, 6, 7).contains(pick.getOrderType())){ - outPoints=outCpPoints; - bestOutPoint = selectBestAvailableOutboundPoint(fromPoint, outPoints, pointTaskCountMap); + bestOutPoint = selectBestAvailableOutboundPoint(fromPoint, outCpPoints, pointTaskCountMap); }else{ bestOutPoint=outMjPoints.get(0); } @@ -326,7 +324,7 @@ public class TaskServiceImpl extends ServiceImpl implements IT .filter(point -> pointTaskCountMap.getOrDefault(point.getPointCode(), 0) < 3) .collect(Collectors.toList()); - if (!availablePoints.isEmpty()) { + if (CollectionUtils.isNotEmpty(availablePoints)) { // 在任务数小于3的工作站中选择最优的 return getBestOutboundPoint(fromPoint, availablePoints); } else { diff --git a/cpte-boot-module/cpte-module-wms/src/main/java/org/cpte/modules/shipping/service/processor/AllocateProcessor.java b/cpte-boot-module/cpte-module-wms/src/main/java/org/cpte/modules/shipping/service/processor/AllocateProcessor.java index c332dba..d0eb644 100644 --- a/cpte-boot-module/cpte-module-wms/src/main/java/org/cpte/modules/shipping/service/processor/AllocateProcessor.java +++ b/cpte-boot-module/cpte-module-wms/src/main/java/org/cpte/modules/shipping/service/processor/AllocateProcessor.java @@ -3,6 +3,7 @@ package org.cpte.modules.shipping.service.processor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; +import org.cpte.modules.agvTask.mapper.AgvTaskMapper; import org.cpte.modules.base.entity.*; import org.cpte.modules.base.mapper.AreaMapper; import org.cpte.modules.base.mapper.ItemKeyMapper; @@ -62,6 +63,9 @@ public class AllocateProcessor { @Autowired private InventoryMapper inventoryMapper; + @Autowired + private AgvTaskMapper agvTaskMapper; + @Autowired private IItemService itemService; @@ -946,6 +950,7 @@ public class AllocateProcessor { public List buildMoveTask(List movePoints) { List moveList = new ArrayList<>(); + Map pointMap = movePoints.stream().collect(Collectors.toMap(Point::getId, point -> point)); //库存 List pointIds = movePoints.stream().map(Point::getId).toList(); List moveInventoryList = inventoryMapper.queryByPointIds(pointIds); @@ -967,6 +972,11 @@ public class AllocateProcessor { for (Inventory inv : moveInventoryList) { try { + //如果移位库位已有出库任务则不需要生成移位任务 + Point movePoint = pointMap.get(inv.getPointId()); + if (agvTaskMapper.existsOutAgv(movePoint.getPointCode())!=null) { + continue; + } Item moveItem = moveItemMap.get(inv.getItemId()); Point fromPoint = fromPointMap.get(inv.getPointId()); Stock stock = stockMap.get(inv.getStockId());