From 9c094af56e63348c55adddeee00be696a0af78c4 Mon Sep 17 00:00:00 2001
From: Junjie <fallin.jie@qq.com>
Date: 星期六, 21 三月 2026 16:42:37 +0800
Subject: [PATCH] #
---
src/main/resources/mapper/BasStationMapper.xml | 1
src/main/java/com/zy/core/utils/StationOperateProcessUtils.java | 13 ++++
src/main/resources/sql/20260321_add_out_task_limit_to_asr_bas_station.sql | 24 ++++++++
src/main/webapp/static/js/basStation/basStation.js | 36 ++++++++++++
src/main/java/com/zy/asrs/entity/BasStation.java | 7 ++
src/main/java/com/zy/core/utils/DualCrnOperateProcessUtils.java | 30 ++++++++++
src/main/java/com/zy/core/utils/CrnOperateProcessUtils.java | 31 ++++++++++
7 files changed, 142 insertions(+), 0 deletions(-)
diff --git a/src/main/java/com/zy/asrs/entity/BasStation.java b/src/main/java/com/zy/asrs/entity/BasStation.java
index 5c5dac5..ddf4bfc 100644
--- a/src/main/java/com/zy/asrs/entity/BasStation.java
+++ b/src/main/java/com/zy/asrs/entity/BasStation.java
@@ -109,6 +109,13 @@
@TableField("station_alias")
private String stationAlias;
+ /**
+ * 鍑哄簱浠诲姟涓婇檺
+ */
+ @ApiModelProperty(value= "鍑哄簱浠诲姟涓婇檺")
+ @TableField("out_task_limit")
+ private Integer outTaskLimit;
+
public BasStation() {}
public BasStation(Integer status,Integer wrkNo,String inEnable,String outEnable,Long createBy,Date createTime,Long updateBy,Date updateTime,String memo,Integer stationLev) {
diff --git a/src/main/java/com/zy/core/utils/CrnOperateProcessUtils.java b/src/main/java/com/zy/core/utils/CrnOperateProcessUtils.java
index 3e5a8e6..903d756 100644
--- a/src/main/java/com/zy/core/utils/CrnOperateProcessUtils.java
+++ b/src/main/java/com/zy/core/utils/CrnOperateProcessUtils.java
@@ -8,10 +8,12 @@
import com.core.exception.CoolException;
import com.zy.asrs.domain.enums.NotifyMsgType;
import com.zy.asrs.domain.param.CreateLocMoveTaskParam;
+import com.zy.asrs.entity.BasStation;
import com.zy.asrs.entity.BasCrnp;
import com.zy.asrs.entity.LocMast;
import com.zy.asrs.entity.WrkMast;
import com.zy.asrs.service.BasCrnpService;
+import com.zy.asrs.service.BasStationService;
import com.zy.asrs.service.LocMastService;
import com.zy.asrs.service.WrkMastService;
import com.zy.asrs.utils.NotifyUtils;
@@ -49,6 +51,8 @@
private BasCrnpService basCrnpService;
@Autowired
private LocMastService locMastService;
+ @Autowired
+ private BasStationService basStationService;
@Autowired
private RedisUtil redisUtil;
@Autowired
@@ -340,6 +344,9 @@
);
for (WrkMast wrkMast : wrkMasts) {
+ if (isOutboundTargetStationTaskLimitReached(wrkMast)) {
+ continue;
+ }
if (!allowBatchOutboundExecute(wrkMast)) {
continue;
}
@@ -526,6 +533,10 @@
Integer crnNo = basCrnp.getCrnNo();
+ if (isOutboundTargetStationTaskLimitReached(wrkMast)) {
+ return false;
+ }
+
if (!allowBatchOutboundExecute(wrkMast)) {
return false;
}
@@ -663,6 +674,26 @@
return false;
}
+ private boolean isOutboundTargetStationTaskLimitReached(WrkMast wrkMast) {
+ if (wrkMast == null || wrkMast.getStaNo() == null) {
+ return false;
+ }
+ BasStation basStation = basStationService.getById(wrkMast.getStaNo());
+ if (basStation == null || basStation.getOutTaskLimit() == null || basStation.getOutTaskLimit() < 0) {
+ return false;
+ }
+ int currentStationTaskCount = stationOperateProcessUtils.getCurrentOutboundTaskCountByTargetStation(wrkMast.getStaNo());
+ if (currentStationTaskCount >= basStation.getOutTaskLimit()) {
+ News.taskInfo(wrkMast.getWrkNo(),
+ "鐩爣鍑哄簱绔�:{} 宸茶揪鍑哄簱浠诲姟涓婇檺锛屽綋鍓�={}锛屼笂闄�={}",
+ wrkMast.getStaNo(),
+ currentStationTaskCount,
+ basStation.getOutTaskLimit());
+ return true;
+ }
+ return false;
+ }
+
private int getSystemConfigInt(String code, int defaultValue) {
Object systemConfigMapObj = redisUtil.get(RedisKeyType.SYSTEM_CONFIG_MAP.key);
if (systemConfigMapObj == null) {
diff --git a/src/main/java/com/zy/core/utils/DualCrnOperateProcessUtils.java b/src/main/java/com/zy/core/utils/DualCrnOperateProcessUtils.java
index d697601..db09977 100644
--- a/src/main/java/com/zy/core/utils/DualCrnOperateProcessUtils.java
+++ b/src/main/java/com/zy/core/utils/DualCrnOperateProcessUtils.java
@@ -7,10 +7,12 @@
import com.core.exception.CoolException;
import com.zy.asrs.domain.enums.NotifyMsgType;
import com.zy.asrs.domain.param.CreateLocMoveTaskParam;
+import com.zy.asrs.entity.BasStation;
import com.zy.asrs.entity.BasDualCrnp;
import com.zy.asrs.entity.LocMast;
import com.zy.asrs.entity.WrkMast;
import com.zy.asrs.service.BasDualCrnpService;
+import com.zy.asrs.service.BasStationService;
import com.zy.asrs.service.LocMastService;
import com.zy.asrs.service.WrkMastService;
import com.zy.asrs.utils.NotifyUtils;
@@ -53,6 +55,8 @@
@Autowired
private LocMastService locMastService;
@Autowired
+ private BasStationService basStationService;
+ @Autowired
private RedisUtil redisUtil;
@Autowired
private WmsOperateUtils wmsOperateUtils;
@@ -60,6 +64,8 @@
private CommonService commonService;
@Autowired
private NotifyUtils notifyUtils;
+ @Autowired
+ private StationOperateProcessUtils stationOperateProcessUtils;
//鍏ュ嚭搴� ===>> 鍙屽伐浣嶅爢鍨涙満鍏ュ嚭搴撲綔涓氫笅鍙�
public synchronized void dualCrnIoExecute() {
@@ -549,6 +555,10 @@
Integer crnNo = basDualCrnp.getCrnNo();
+ if (isOutboundTargetStationTaskLimitReached(wrkMast)) {
+ return null;
+ }
+
for (StationObjModel stationObjModel : outStationList) {
StationThread stationThread = (StationThread) SlaveConnection.get(SlaveType.Devp, stationObjModel.getDeviceNo());
if (stationThread == null) {
@@ -629,6 +639,26 @@
return null;
}
+ private boolean isOutboundTargetStationTaskLimitReached(WrkMast wrkMast) {
+ if (wrkMast == null || wrkMast.getStaNo() == null) {
+ return false;
+ }
+ BasStation basStation = basStationService.getById(wrkMast.getStaNo());
+ if (basStation == null || basStation.getOutTaskLimit() == null || basStation.getOutTaskLimit() < 0) {
+ return false;
+ }
+ int currentStationTaskCount = stationOperateProcessUtils.getCurrentOutboundTaskCountByTargetStation(wrkMast.getStaNo());
+ if (currentStationTaskCount >= basStation.getOutTaskLimit()) {
+ News.taskInfo(wrkMast.getWrkNo(),
+ "鐩爣鍑哄簱绔�:{} 宸茶揪鍑哄簱浠诲姟涓婇檺锛屽綋鍓�={}锛屼笂闄�={}",
+ wrkMast.getStaNo(),
+ currentStationTaskCount,
+ basStation.getOutTaskLimit());
+ return true;
+ }
+ return false;
+ }
+
private synchronized SendDualCrnCommandParam crnExecuteLocMove(BasDualCrnp basDualCrnp, DualCrnThread dualCrnThread, WrkMast wrkMast, int station) {
DualCrnProtocol dualCrnProtocol = dualCrnThread.getStatus();
if (dualCrnProtocol == null) {
diff --git a/src/main/java/com/zy/core/utils/StationOperateProcessUtils.java b/src/main/java/com/zy/core/utils/StationOperateProcessUtils.java
index 485ef91..0f90d81 100644
--- a/src/main/java/com/zy/core/utils/StationOperateProcessUtils.java
+++ b/src/main/java/com/zy/core/utils/StationOperateProcessUtils.java
@@ -586,6 +586,19 @@
return countCurrentStationTask();
}
+ public synchronized int getCurrentOutboundTaskCountByTargetStation(Integer stationId) {
+ if (stationId == null) {
+ return 0;
+ }
+ return (int) wrkMastService.count(new QueryWrapper<WrkMast>()
+ .eq("io_type", WrkIoType.OUT.id)
+ .eq("sta_no", stationId)
+ .in("wrk_sts",
+ WrkStsType.OUTBOUND_RUN.sts,
+ WrkStsType.OUTBOUND_RUN_COMPLETE.sts,
+ WrkStsType.STATION_RUN.sts));
+ }
+
// 妫�娴嬪嚭搴撴帓搴�
public synchronized void checkStationOutOrder() {
List<BasDevp> basDevps = basDevpService.list(new QueryWrapper<BasDevp>());
diff --git a/src/main/resources/mapper/BasStationMapper.xml b/src/main/resources/mapper/BasStationMapper.xml
index df720ea..d9af751 100644
--- a/src/main/resources/mapper/BasStationMapper.xml
+++ b/src/main/resources/mapper/BasStationMapper.xml
@@ -17,6 +17,7 @@
<result column="station_lev" property="stationLev" />
<result column="device_no" property="deviceNo" />
<result column="station_alias" property="stationAlias" />
+ <result column="out_task_limit" property="outTaskLimit" />
</resultMap>
diff --git a/src/main/resources/sql/20260321_add_out_task_limit_to_asr_bas_station.sql b/src/main/resources/sql/20260321_add_out_task_limit_to_asr_bas_station.sql
new file mode 100644
index 0000000..a99fd9e
--- /dev/null
+++ b/src/main/resources/sql/20260321_add_out_task_limit_to_asr_bas_station.sql
@@ -0,0 +1,24 @@
+-- asr_bas_station 澧炲姞鍑哄簱浠诲姟涓婇檺閰嶇疆
+-- 鐢ㄩ�旓細鎸夋渶缁堝嚭搴撶珯闄愬埗鍫嗗灈鏈哄彲鍚屾椂鏀捐鐨勫湪閫斿嚭搴撲换鍔℃暟
+-- 閫傜敤鏁版嵁搴擄細MySQL
+
+SET @current_db := DATABASE();
+
+SET @out_task_limit_exists := (
+ SELECT COUNT(1)
+ FROM information_schema.COLUMNS
+ WHERE TABLE_SCHEMA = @current_db
+ AND TABLE_NAME = 'asr_bas_station'
+ AND COLUMN_NAME = 'out_task_limit'
+);
+
+SET @add_out_task_limit_sql := IF(
+ @out_task_limit_exists = 0,
+ 'ALTER TABLE asr_bas_station ADD COLUMN out_task_limit INT NULL COMMENT ''鍑哄簱浠诲姟涓婇檺锛�<0鎴朜ULL琛ㄧず涓嶉檺鍒讹紝0琛ㄧず绂佹鏂板嚭搴�'' AFTER station_alias',
+ 'SELECT ''column out_task_limit already exists'' '
+);
+PREPARE stmt_out_task_limit FROM @add_out_task_limit_sql;
+EXECUTE stmt_out_task_limit;
+DEALLOCATE PREPARE stmt_out_task_limit;
+
+SHOW COLUMNS FROM asr_bas_station LIKE 'out_task_limit';
diff --git a/src/main/webapp/static/js/basStation/basStation.js b/src/main/webapp/static/js/basStation/basStation.js
index 0ef3129..cd29b53 100644
--- a/src/main/webapp/static/js/basStation/basStation.js
+++ b/src/main/webapp/static/js/basStation/basStation.js
@@ -238,6 +238,24 @@
checkboxInactiveRaw: 'N'
},
{
+ field: 'outTaskLimit',
+ columnName: 'out_task_limit',
+ label: '鍑哄簱浠诲姟涓婇檺',
+ tableProp: 'outTaskLimit',
+ exportField: 'outTaskLimit',
+ kind: 'text',
+ valueType: 'number',
+ required: false,
+ primaryKey: false,
+ sortable: false,
+ textarea: false,
+ minWidth: 130,
+ enumOptions: [],
+ foreignQuery: '',
+ checkboxActiveRaw: '1',
+ checkboxInactiveRaw: '0'
+ },
+ {
field: 'stationId',
columnName: 'station_id',
label: '缂栥��銆�鍙�',
@@ -470,6 +488,24 @@
foreignQuery: '',
checkboxActiveRaw: 'Y',
checkboxInactiveRaw: 'N'
+ },
+ {
+ field: 'outTaskLimit',
+ columnName: 'out_task_limit',
+ label: '鍑哄簱浠诲姟涓婇檺',
+ tableProp: 'outTaskLimit',
+ exportField: 'outTaskLimit',
+ kind: 'text',
+ valueType: 'number',
+ required: false,
+ primaryKey: false,
+ sortable: false,
+ textarea: false,
+ minWidth: 130,
+ enumOptions: [],
+ foreignQuery: '',
+ checkboxActiveRaw: '1',
+ checkboxInactiveRaw: '0'
}
]);
--
Gitblit v1.9.1