diff --git a/src/main/java/com/gaotao/modules/automatedWarehouse/mapper/WcsIntegrationMapper.java b/src/main/java/com/gaotao/modules/automatedWarehouse/mapper/WcsIntegrationMapper.java index 584a9a3..536ce6e 100644 --- a/src/main/java/com/gaotao/modules/automatedWarehouse/mapper/WcsIntegrationMapper.java +++ b/src/main/java/com/gaotao/modules/automatedWarehouse/mapper/WcsIntegrationMapper.java @@ -203,6 +203,14 @@ public interface WcsIntegrationMapper { */ void insertTransportTask(WmsTransportTask task); void insertOrderTask(WmsOrderTask task); + + /** + * @Description 删除运输任务(根据taskNo)- rqrq + * @param taskNo 任务编号 + * @author rqrq + * @date 2025/11/17 + */ + void deleteTransportTask(@Param("taskNo") String taskNo); /** * 检查站点是否有栈板 - AI制作 @@ -530,6 +538,15 @@ public interface WcsIntegrationMapper { void updateWTTToLocationForId(@Param("site") String site,@Param("taskNo") String taskNo, @Param("toLocation") String toLocation); + + /** + * @Description 更新运输任务的目标区域 - rqrq + * @param taskNo 任务编号 + * @param toArea 目标区域 + * @author rqrq + * @date 2025/11/17 + */ + void updateTransportTaskToArea(@Param("site") String site,@Param("taskNo") String taskNo, @Param("toArea") String toArea); /** * 获取AGV站点状态 - AI制作 */ diff --git a/src/main/java/com/gaotao/modules/automatedWarehouse/service/impl/AutoTaskServiceImpl.java b/src/main/java/com/gaotao/modules/automatedWarehouse/service/impl/AutoTaskServiceImpl.java index 28b9d11..d518f35 100644 --- a/src/main/java/com/gaotao/modules/automatedWarehouse/service/impl/AutoTaskServiceImpl.java +++ b/src/main/java/com/gaotao/modules/automatedWarehouse/service/impl/AutoTaskServiceImpl.java @@ -531,9 +531,27 @@ public class AutoTaskServiceImpl implements AutoTaskService { ); if(lockResult == 0){ - // 乐观锁更新失败,说明站点已被其他线程占用 - rqrq - System.out.println("警告:乐观锁更新目标站点状态失败,站点可能已被占用 - rqrq"); - // 注意:这里不抛出异常,允许创建预约任务,但目标站点可能不是空闲状态 - rqrq + // 乐观锁更新失败,说明站点已被其他线程占用,自动改为区域预约 - rqrq + System.out.println("警告:乐观锁更新目标站点状态失败,站点已被占用,自动改为区域预约 - rqrq"); + + // 查询目标站点的区域信息 - rqrq + AgvStation targetStation = wcsIntegrationMapper.getAgvStation(inData.getToLocation()); + if(targetStation != null && StringUtils.hasText(targetStation.getAreaType())){ + String areaType = targetStation.getAreaType(); + System.out.println("查询到目标站点所属区域 - rqrq,areaType=" + areaType); + + // 更新任务记录的to_location为null,to_area为区域代码 - rqrq + wcsIntegrationMapper.updateWTTToLocationForId(inData.getSite(), task.getTaskNo(), null); + wcsIntegrationMapper.updateTransportTaskToArea(inData.getSite(),task.getTaskNo(), areaType); + + System.out.println("已自动改为区域预约 - rqrq,toArea=" + areaType); + } else { + // 查询不到区域信息,回滚并抛出异常 - rqrq + System.out.println("错误:无法获取目标站点的区域信息 - rqrq"); + wcsIntegrationMapper.updateAgvStationStatus(inData.getFromLocation(), 1, "有货"); + wcsIntegrationMapper.deleteTransportTask(task.getTaskNo()); + throw new RuntimeException("目标站点【" + inData.getToLocation() + "】已被占用且无法获取区域信息,无法创建预约任务"); + } } else { System.out.println("成功更新目标站点状态为待放货 - rqrq"); } diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index acdcff2..7aa65cd 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -114,8 +114,8 @@ custom: wcs-board-api: 'http://172.28.1.18:7003/api/' rfid-url: 'http://172.28.1.XX:7003/api/' # 分切区配置 - rqrq - cutting-area-warehouse: 'Z999' # 分切区仓库编码 - cutting-area-location: '' # 分切区库位编码(为空表示不限定库位) + cutting-area-warehouse: 'W04' # 分切区仓库编码 + cutting-area-location: 'RM1DA0601' # 分切区库位编码(为空表示不限定库位) # WMS消息队列配置 wms: diff --git a/src/main/resources/mapper/automatedWarehouse/WcsIntegrationMapper.xml b/src/main/resources/mapper/automatedWarehouse/WcsIntegrationMapper.xml index a0acd83..882b962 100644 --- a/src/main/resources/mapper/automatedWarehouse/WcsIntegrationMapper.xml +++ b/src/main/resources/mapper/automatedWarehouse/WcsIntegrationMapper.xml @@ -456,6 +456,11 @@ #{createdBy}, #{createdTime}, #{updatedTime}, N'未执行', #{palletType},#{wcsTaskId} ) + + + + DELETE FROM wms_transport_task WHERE task_no = #{taskNo} + INSERT INTO wms_order_task ( @@ -1062,6 +1067,13 @@ update wms_transport_task set to_location=#{toLocation} where site=#{site} and task_no=#{taskNo} + + + + UPDATE wms_transport_task + SET to_area = #{toArea} + WHERE task_no = #{taskNo} and site=#{site} +