diff --git a/src/main/java/com/gaotao/modules/automatedWarehouse/entity/AgvStation.java b/src/main/java/com/gaotao/modules/automatedWarehouse/entity/AgvStation.java index 2d19084..ee02f7b 100644 --- a/src/main/java/com/gaotao/modules/automatedWarehouse/entity/AgvStation.java +++ b/src/main/java/com/gaotao/modules/automatedWarehouse/entity/AgvStation.java @@ -33,6 +33,28 @@ import java.math.BigDecimal; * 3. 比对 handling_unit.warehouse_id(条码仓库) * 4. 如果相同则允许扫进,否则报错 * + * + *

⚠️ 特殊站点说明 - D1、D2立库站点:

+ *
+ * D1、D2是立库管理的特殊站点,与普通站点的处理逻辑不同:
+ * 
+ * 1. 状态管理:
+ *    - D1、D2的实际状态由立库PLC管理
+ *    - WMS的status_db字段只做相对记录,不做严格校验
+ *    - 不需要使用乐观锁严格校验状态
+ * 
+ * 2. 动态分配机制:
+ *    - AGV到达D1/D2旁边的等待位时,触发"等待询问"回调
+ *    - WMS调用立库接口warehouseAskStation()询问实际可用站点
+ *    - 立库PLC返回D1或D2(根据实际状态决定)
+ *    - WMS通知AGV修改放货点到立库返回的站点
+ * 
+ * 3. 代码处理:
+ *    - 起始站点(from_location)如果是D1/D2:直接UPDATE状态,不使用乐观锁
+ *    - 目标站点(to_location)如果是D1/D2:预约时使用乐观锁,等待询问时动态分配
+ *    - 普通站点(其他站点):必须使用乐观锁严格校验
+ * 
+
  */
 @Data
 @TableName("agv_station")
@@ -109,6 +131,11 @@ public class AgvStation {
     /**
      * 站点状态数据库值
      * 值为0:空闲   1.有货   2.待放货   3.待取货
+     * 
+     * ⚠️ 特殊说明 - D1、D2立库站点:
+     * - D1、D2的实际状态由立库PLC管理,WMS只做相对记录
+     * - WMS不对D1、D2的status_db做严格校验
+     * - 通过"等待询问"机制实现动态分配 - rqrq
      */
     private Integer statusDb;
 
diff --git a/src/main/java/com/gaotao/modules/automatedWarehouse/service/impl/AgvTaskServiceImpl.java b/src/main/java/com/gaotao/modules/automatedWarehouse/service/impl/AgvTaskServiceImpl.java
index 3c9a620..e0f4c57 100644
--- a/src/main/java/com/gaotao/modules/automatedWarehouse/service/impl/AgvTaskServiceImpl.java
+++ b/src/main/java/com/gaotao/modules/automatedWarehouse/service/impl/AgvTaskServiceImpl.java
@@ -238,15 +238,19 @@ public class AgvTaskServiceImpl implements AgvTaskService {
                 String station = null;
                 log.info("开始处理等待询问回调 - rqrq:目标站点={}", checkTask.getToLocation());
                 
-                // 判断是否为立库站点D1或D2 - rqrq
+                // ⚠️ 判断是否为立库站点D1或D2 - rqrq
+                // D1、D2是立库管理的特殊站点,实际状态由立库PLC管理
+                // WMS通过"等待询问"机制实现动态分配 - rqrq
                 if(checkTask.getToLocation().equals("D1") || checkTask.getToLocation().equals("D2")){
                     log.info("目标站点为立库站点,询问立库分配放货点 - rqrq");
                     
-                    // 更新原目标站点状态为空闲 - rqrq
+                    // 1. 释放WMS的原目标站点状态记录 - rqrq
+                    // 注:此处只是释放WMS的状态记录,不影响立库PLC的实际状态 - rqrq
                     wcsIntegrationMapper.updateAgvStationStatus(checkTask.getToLocation(), 0, "空闲");
-                    log.info("原目标站点{}状态已更新为空闲 - rqrq", checkTask.getToLocation());
+                    log.info("原目标站点{}状态已更新为空闲(WMS相对记录)- rqrq", checkTask.getToLocation());
                     
-                    // 询问立库分配放货点 - rqrq
+                    // 2. 询问立库PLC分配实际可用的放货点 - rqrq
+                    // 立库PLC根据实际状态返回D1或D2 - rqrq
                     WarehouseAskStation askStation = new WarehouseAskStation();
                     askStation.setTaskNo(checkTask.getTaskNo());
                     askStation.setItemNo(checkTask.getItemNo());
@@ -259,9 +263,9 @@ public class AgvTaskServiceImpl implements AgvTaskService {
                         throw new RuntimeException("立库返回放货点有误!!");
                     }
                     
-                    // 更新立库返回的站点状态为待放货 - rqrq
+                    // 3. 更新立库返回的站点状态为待放货(WMS相对记录)- rqrq
                     wcsIntegrationMapper.updateAgvStationStatus(station, 2, "待放货");
-                    log.info("立库返回站点{},状态已更新为待放货 - rqrq", station);
+                    log.info("立库返回站点{},状态已更新为待放货(WMS相对记录)- rqrq", station);
                     
                 } else {
                     // 非立库站点,查询原目标点状态 - rqrq