From 852664df1caf38831793b341edcada9dd7b6c22a Mon Sep 17 00:00:00 2001
From: Junjie <fallin.jie@qq.com>
Date: 星期三, 06 五月 2026 19:28:33 +0800
Subject: [PATCH] #dfs
---
src/main/java/com/zy/core/utils/DualCrnOperateProcessUtils.java | 191 +++++++++++++++++++++++++++++++++++------------
1 files changed, 140 insertions(+), 51 deletions(-)
diff --git a/src/main/java/com/zy/core/utils/DualCrnOperateProcessUtils.java b/src/main/java/com/zy/core/utils/DualCrnOperateProcessUtils.java
index 834800b..0ffb9f9 100644
--- a/src/main/java/com/zy/core/utils/DualCrnOperateProcessUtils.java
+++ b/src/main/java/com/zy/core/utils/DualCrnOperateProcessUtils.java
@@ -33,6 +33,8 @@
import com.zy.core.model.param.SendDualCrnCommandParam;
import com.zy.core.model.protocol.DualCrnProtocol;
import com.zy.core.model.protocol.StationProtocol;
+import com.zy.core.task.MainProcessLane;
+import com.zy.core.task.MainProcessTaskSubmitter;
import com.zy.core.thread.DualCrnThread;
import com.zy.core.thread.StationThread;
import org.springframework.beans.factory.annotation.Autowired;
@@ -72,6 +74,8 @@
private WrkAnalysisService wrkAnalysisService;
@Autowired
private StationCommandDispatcher stationCommandDispatcher;
+ @Autowired
+ private MainProcessTaskSubmitter mainProcessTaskSubmitter;
private static final String CRN_OUT_REQUIRE_STATION_OUT_ENABLE_CONFIG = "crnOutRequireStationOutEnable";
@@ -79,38 +83,42 @@
public synchronized void dualCrnIoExecute() {
List<BasDualCrnp> basDualCrnps = basDualCrnpService.list(new QueryWrapper<>());
for (BasDualCrnp basDualCrnp : basDualCrnps) {
- DualCrnThread dualCrnThread = (DualCrnThread) SlaveConnection.get(SlaveType.DualCrn, basDualCrnp.getCrnNo());
- if(dualCrnThread == null){
- continue;
- }
-
- DualCrnProtocol dualCrnProtocol = dualCrnThread.getStatus();
- if(dualCrnProtocol == null){
- continue;
- }
-
- List<WrkMast> wrkMasts = wrkMastService.list(new QueryWrapper<WrkMast>()
- .eq("dual_crn_no", basDualCrnp.getCrnNo())
- .in("wrk_sts", WrkStsType.INBOUND_RUN.sts, WrkStsType.OUTBOUND_RUN.sts, WrkStsType.LOC_MOVE_RUN.sts)
- );
- if(wrkMasts.size() >= 2){
- continue;
- }
-
- if(dualCrnProtocol.getMode() != DualCrnModeType.AUTO.id) {
- continue;
- }
-
- if(dualCrnProtocol.getAlarm() != 0) {
- continue;
- }
-
- if(dualCrnProtocol.getTaskSend() != 0 || dualCrnProtocol.getTaskSendTwo() != 0) {
- continue;
- }
-
- this.crnExecute(basDualCrnp, dualCrnThread);
+ dualCrnIoExecute(basDualCrnp);
}
+ }
+
+ public void dualCrnIoExecute(BasDualCrnp basDualCrnp) {
+ DualCrnThread dualCrnThread = (DualCrnThread) SlaveConnection.get(SlaveType.DualCrn, basDualCrnp.getCrnNo());
+ if(dualCrnThread == null){
+ return;
+ }
+
+ DualCrnProtocol dualCrnProtocol = dualCrnThread.getStatus();
+ if(dualCrnProtocol == null){
+ return;
+ }
+
+ List<WrkMast> wrkMasts = wrkMastService.list(new QueryWrapper<WrkMast>()
+ .eq("dual_crn_no", basDualCrnp.getCrnNo())
+ .in("wrk_sts", WrkStsType.INBOUND_RUN.sts, WrkStsType.OUTBOUND_RUN.sts, WrkStsType.LOC_MOVE_RUN.sts)
+ );
+ if(wrkMasts.size() >= 2){
+ return;
+ }
+
+ if(dualCrnProtocol.getMode() != DualCrnModeType.AUTO.id) {
+ return;
+ }
+
+ if(dualCrnProtocol.getAlarm() != 0) {
+ return;
+ }
+
+ if(dualCrnProtocol.getTaskSend() != 0 || dualCrnProtocol.getTaskSendTwo() != 0) {
+ return;
+ }
+
+ this.crnExecute(basDualCrnp, dualCrnThread);
}
private synchronized void crnExecute(BasDualCrnp basDualCrnp, DualCrnThread dualCrnThread) {
@@ -552,6 +560,10 @@
return null;
}
+ if (isConveyorStationTaskLimitReached()) {
+ return null;
+ }
+
if (station == 1) {
if (dualCrnProtocol.getTaskNo() > 0) {
News.taskInfo(wrkMast.getWrkNo(), "宸ヤ綅1绯荤粺鍐呴儴璁板綍鏈変换鍔�");
@@ -673,6 +685,22 @@
return false;
}
+ private boolean isConveyorStationTaskLimitReached() {
+ int conveyorStationTaskLimit = getSystemConfigInt("conveyorStationTaskLimit", 30);
+ if (conveyorStationTaskLimit <= 0) {
+ return false;
+ }
+
+ int currentStationTaskCount = stationOperateProcessUtils.getCurrentStationTaskCount();
+ if (currentStationTaskCount >= conveyorStationTaskLimit) {
+ News.warn("杈撻�佺珯鐐逛换鍔℃暟閲忚揪鍒颁笂闄愶紝宸插仠姝㈠弻宸ヤ綅鍫嗗灈鏈轰换鍔′笅鍙戙�傚綋鍓嶄换鍔℃暟={}锛屼笂闄�={}",
+ currentStationTaskCount,
+ conveyorStationTaskLimit);
+ return true;
+ }
+ return false;
+ }
+
private synchronized SendDualCrnCommandParam crnExecuteLocMove(BasDualCrnp basDualCrnp, DualCrnThread dualCrnThread, WrkMast wrkMast, int station) {
DualCrnProtocol dualCrnProtocol = dualCrnThread.getStatus();
if (dualCrnProtocol == null) {
@@ -742,33 +770,78 @@
public synchronized void dualCrnIoExecuteFinish() {
List<BasDualCrnp> basDualCrnps = basDualCrnpService.list(new QueryWrapper<>());
for (BasDualCrnp basDualCrnp : basDualCrnps) {
- DualCrnThread dualCrnThread = (DualCrnThread) SlaveConnection.get(SlaveType.DualCrn, basDualCrnp.getCrnNo());
- if(dualCrnThread == null){
- continue;
- }
+ dualCrnIoExecuteFinish(basDualCrnp);
+ }
+ }
- DualCrnProtocol dualCrnProtocol = dualCrnThread.getStatus();
- if(dualCrnProtocol == null){
- continue;
- }
+ public void dualCrnIoExecuteFinish(BasDualCrnp basDualCrnp) {
+ DualCrnThread dualCrnThread = (DualCrnThread) SlaveConnection.get(SlaveType.DualCrn, basDualCrnp.getCrnNo());
+ if(dualCrnThread == null){
+ return;
+ }
- if(dualCrnProtocol.getMode() != DualCrnModeType.AUTO.id) {
- continue;
- }
+ DualCrnProtocol dualCrnProtocol = dualCrnThread.getStatus();
+ if(dualCrnProtocol == null){
+ return;
+ }
- if(dualCrnProtocol.getAlarm() != 0) {
- continue;
- }
+ if(dualCrnProtocol.getMode() != DualCrnModeType.AUTO.id) {
+ return;
+ }
- if((dualCrnProtocol.getTaskNo() > 0 && dualCrnProtocol.getDeviceTaskNo() > 0) && dualCrnProtocol.getTaskSend() == 0 && dualCrnProtocol.getStatus().equals(DualCrnStatusType.WAITING.id)) {
- executeFinish(basDualCrnp, dualCrnThread, dualCrnProtocol, dualCrnProtocol.getTaskNo(), 1);
- continue;
- }
+ if(dualCrnProtocol.getAlarm() != 0) {
+ return;
+ }
- if((dualCrnProtocol.getTaskNoTwo() > 0 && dualCrnProtocol.getDeviceTaskNoTwo() > 0) && dualCrnProtocol.getTaskSendTwo() == 0 && dualCrnProtocol.getStatusTwo().equals(DualCrnStatusType.WAITING.id)) {
- executeFinish(basDualCrnp, dualCrnThread, dualCrnProtocol, dualCrnProtocol.getTaskNoTwo(), 2);
+ if((dualCrnProtocol.getTaskNo() > 0 && dualCrnProtocol.getDeviceTaskNo() > 0) && dualCrnProtocol.getTaskSend() == 0 && dualCrnProtocol.getStatus().equals(DualCrnStatusType.WAITING.id)) {
+ executeFinish(basDualCrnp, dualCrnThread, dualCrnProtocol, dualCrnProtocol.getTaskNo(), 1);
+ return;
+ }
+
+ if((dualCrnProtocol.getTaskNoTwo() > 0 && dualCrnProtocol.getDeviceTaskNoTwo() > 0) && dualCrnProtocol.getTaskSendTwo() == 0 && dualCrnProtocol.getStatusTwo().equals(DualCrnStatusType.WAITING.id)) {
+ executeFinish(basDualCrnp, dualCrnThread, dualCrnProtocol, dualCrnProtocol.getTaskNoTwo(), 2);
+ }
+ }
+
+ public void submitDualCrnIoTasks(long minIntervalMs) {
+ submitDualCrnIoTasks(MainProcessLane.DUAL_CRN_IO, minIntervalMs);
+ }
+
+ public void submitDualCrnIoTasks(MainProcessLane lane, long minIntervalMs) {
+ List<BasDualCrnp> basDualCrnps = basDualCrnpService.list(new QueryWrapper<>());
+ for (BasDualCrnp basDualCrnp : basDualCrnps) {
+ Integer crnNo = basDualCrnp == null ? null : basDualCrnp.getCrnNo();
+ if (crnNo == null) {
continue;
}
+ mainProcessTaskSubmitter.submitKeyedSerialTask(
+ lane,
+ crnNo,
+ "dualCrnIoExecute",
+ minIntervalMs,
+ () -> dualCrnIoExecute(basDualCrnp)
+ );
+ }
+ }
+
+ public void submitDualCrnIoExecuteFinishTasks(long minIntervalMs) {
+ submitDualCrnIoExecuteFinishTasks(MainProcessLane.DUAL_CRN_IO_FINISH, minIntervalMs);
+ }
+
+ public void submitDualCrnIoExecuteFinishTasks(MainProcessLane lane, long minIntervalMs) {
+ List<BasDualCrnp> basDualCrnps = basDualCrnpService.list(new QueryWrapper<>());
+ for (BasDualCrnp basDualCrnp : basDualCrnps) {
+ Integer crnNo = basDualCrnp == null ? null : basDualCrnp.getCrnNo();
+ if (crnNo == null) {
+ continue;
+ }
+ mainProcessTaskSubmitter.submitKeyedSerialTask(
+ lane,
+ crnNo,
+ "dualCrnIoExecuteFinish",
+ minIntervalMs,
+ () -> dualCrnIoExecuteFinish(basDualCrnp)
+ );
}
}
@@ -925,6 +998,22 @@
return getSystemConfigBoolean(CRN_OUT_REQUIRE_STATION_OUT_ENABLE_CONFIG, true);
}
+ private int getSystemConfigInt(String code, int defaultValue) {
+ Object systemConfigMapObj = redisUtil.get(RedisKeyType.SYSTEM_CONFIG_MAP.key);
+ if (!(systemConfigMapObj instanceof Map)) {
+ return defaultValue;
+ }
+ try {
+ Object value = ((Map<?, ?>) systemConfigMapObj).get(code);
+ if (value == null) {
+ return defaultValue;
+ }
+ return Integer.parseInt(String.valueOf(value).trim());
+ } catch (Exception ignore) {
+ return defaultValue;
+ }
+ }
+
private boolean getSystemConfigBoolean(String code, boolean defaultValue) {
Object systemConfigMapObj = redisUtil.get(RedisKeyType.SYSTEM_CONFIG_MAP.key);
if (!(systemConfigMapObj instanceof Map)) {
--
Gitblit v1.9.1