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}
+