diff --git a/src/main/java/com/gaotao/config/WmsTaskLimitConfig.java b/src/main/java/com/gaotao/config/WmsTaskLimitConfig.java
index a802b1b..2d2939d 100644
--- a/src/main/java/com/gaotao/config/WmsTaskLimitConfig.java
+++ b/src/main/java/com/gaotao/config/WmsTaskLimitConfig.java
@@ -17,6 +17,11 @@ public class WmsTaskLimitConfig {
*/
private Integer maxUnfinishedCallTasksPerArea = 3;
+ /**
+ * Z103区域允许的最大入库并行任务数量 - rqrq
+ */
+ private Integer maxParallelInboundTasksZ103 = 2;
+
public Integer getMaxUnfinishedCallTasksPerArea() {
return maxUnfinishedCallTasksPerArea;
}
@@ -24,5 +29,13 @@ public class WmsTaskLimitConfig {
public void setMaxUnfinishedCallTasksPerArea(Integer maxUnfinishedCallTasksPerArea) {
this.maxUnfinishedCallTasksPerArea = maxUnfinishedCallTasksPerArea;
}
+
+ public Integer getMaxParallelInboundTasksZ103() {
+ return maxParallelInboundTasksZ103;
+ }
+
+ public void setMaxParallelInboundTasksZ103(Integer maxParallelInboundTasksZ103) {
+ this.maxParallelInboundTasksZ103 = maxParallelInboundTasksZ103;
+ }
}
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 df45d80..2256d29 100644
--- a/src/main/java/com/gaotao/modules/automatedWarehouse/mapper/WcsIntegrationMapper.java
+++ b/src/main/java/com/gaotao/modules/automatedWarehouse/mapper/WcsIntegrationMapper.java
@@ -280,6 +280,16 @@ public interface WcsIntegrationMapper {
*/
Integer countUnfinishedCallTasksByArea(@Param("site") String site, @Param("areaType") String areaType);
+ /**
+ * @Description 统计指定区域运行中的运输任务数量(状态为"已创建"或"已下达")- rqrq
+ * @param site 工厂编码
+ * @param toArea 目标区域
+ * @return 运行中的运输任务数量
+ * @author rqrq
+ * @date 2025/11/27
+ */
+ Integer countRunningTransportTasksByArea(@Param("site") String site, @Param("toArea") String toArea);
+
/**
* 根据站点代码获取站点信息 - 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 5d0e124..8d60271 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
@@ -1,6 +1,7 @@
package com.gaotao.modules.automatedWarehouse.service.impl;
import com.gaotao.common.utils.AgvClientUtil;
+import com.gaotao.config.WmsTaskLimitConfig;
import com.gaotao.modules.api.entity.CallPalletRequest;
import com.gaotao.modules.api.entity.NeedPalletTask;
import com.gaotao.modules.api.service.WcsApiService;
@@ -40,6 +41,8 @@ public class AutoTaskServiceImpl implements AutoTaskService {
private AgvClientUtil agvClientUtil;
@Autowired
private AgvTaskMapper agvTaskMapper; // 添加AgvTaskMapper注入 - rqrq
+ @Autowired
+ private WmsTaskLimitConfig wmsTaskLimitConfig; // 注入任务限制配置 - rqrq
/**
* @Description 栈板万能预约任务 - rqrq
@@ -923,10 +926,37 @@ public class AutoTaskServiceImpl implements AutoTaskService {
else if(StringUtils.hasText(wmsTransportTask.getToArea())){
System.out.println("处理指定区域预约任务 - rqrq,toArea=" + wmsTransportTask.getToArea());
+ // 如果区域是Z103,采用并发控制策略:允许配置的最大并行数 - rqrq
+ if("Z103".equals(wmsTransportTask.getToArea())){
+ System.out.println("Z103区域入库任务,检查并发数量 - rqrq");
+
+ // 从配置中获取最大并行数 - rqrq
+ Integer maxParallelTasks = wmsTaskLimitConfig.getMaxParallelInboundTasksZ103();
+
+ // 统计Z103区域运行中的任务数量(状态为"已创建"或"已下发")- rqrq
+ Integer runningCount = wcsIntegrationMapper.countRunningTransportTasksByArea(
+ wmsTransportTask.getSite(),
+ wmsTransportTask.getToArea()
+ );
+
+ System.out.println("Z103区域当前运行中任务数:" + (runningCount != null ? runningCount : 0) +
+ ",配置的最大并行数:" + maxParallelTasks + " - rqrq");
+
+ // 如果运行中任务数已达到配置的最大值,返回null等待 - rqrq
+ if(runningCount != null && runningCount >= maxParallelTasks){
+ System.out.println("Z103区域运行中任务已达上限(" + maxParallelTasks + "个),等待下次处理 - rqrq");
+ return null;
+ }
+
+ // 如果运行中任务数小于最大值,返回固定站点D2 - rqrq
+ System.out.println("Z103区域运行中任务数未达上限,分配固定站点D2 - rqrq");
+ return "D2";
+ }
+
+ // 如果区域不是Z103,按原逻辑查询空闲站点 - rqrq
// 最多重试3次,防止死循环 - rqrq
int maxRetries = 3;
for(int i = 0; i < maxRetries; i++){
- //如果区域不是Z103 那么查询空闲站点 如果区域是Z103 只要管控同时有几个入库任务就行
// 查询该区域下的空闲站点(status_db=0)- rqrq
String idleStation = wcsIntegrationMapper.findFirstFreeStationByAreaId(wmsTransportTask.getToArea());
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
index 3310d1c..76fa247 100644
--- a/src/main/resources/application.yml
+++ b/src/main/resources/application.yml
@@ -142,6 +142,7 @@ wms:
task:
limit:
max-unfinished-call-tasks-per-area: 3 # 每个区域允许的最大未完成立库取货call料任务数量
+ max-parallel-inbound-tasks-z103: 2 # Z103区域允许的最大入库并行任务数量
# 定时任务开关配置
scheduler:
diff --git a/src/main/resources/mapper/automatedWarehouse/WcsIntegrationMapper.xml b/src/main/resources/mapper/automatedWarehouse/WcsIntegrationMapper.xml
index 1568b77..4d71191 100644
--- a/src/main/resources/mapper/automatedWarehouse/WcsIntegrationMapper.xml
+++ b/src/main/resources/mapper/automatedWarehouse/WcsIntegrationMapper.xml
@@ -599,6 +599,15 @@
AND wot.source_type = '立库取货'
+
+
+