From 3bb3a6268339027643b3e85b5162f78788b30086 Mon Sep 17 00:00:00 2001
From: vincentlu <t1341870251@gmail.com>
Date: 星期二, 13 一月 2026 07:56:05 +0800
Subject: [PATCH] #
---
zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/TransferStationHandler.java | 76 ++++++++++++++++++++++++++++++++------
1 files changed, 64 insertions(+), 12 deletions(-)
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/TransferStationHandler.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/TransferStationHandler.java
index bd00fa4..ff1ea3f 100644
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/TransferStationHandler.java
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/TransferStationHandler.java
@@ -1,5 +1,6 @@
package com.zy.acs.manager.core.service;
+import com.zy.acs.manager.core.domain.TaskPosDto;
import com.zy.acs.manager.manager.entity.Code;
import com.zy.acs.manager.manager.entity.Segment;
import com.zy.acs.manager.manager.entity.Sta;
@@ -9,9 +10,11 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
-import java.util.Date;
+import java.util.List;
+import java.util.Objects;
-// man_segment: start_time, end_time
+// man_segment: start_time, end_time, alter table man_segment
+// add roller_waiting int(1) default 0 null comment '婊氱瓛绾跨瓑寰�' after end_time;
/**
* alter table man_sta
* add capacity int null comment '妲戒綅鏁�' after angle;
@@ -29,6 +32,9 @@
@Service
public class TransferStationHandler {
+ private static final long LOAD_DELAY_MS = 15000L; // load ( inbound ) delay timeout
+ private static final long PLACE_DELAY_MS = 15000L; // place ( outbound ) delay timeout
+
@Autowired
private SegmentService segmentService;
@Autowired
@@ -41,15 +47,16 @@
private StaService staService;
/**
- *
+ * 鍙栬揣锛堝叆搴擄級锛氬湪鍙栧畬绗竴涓揣鐨勬椂鍊欙紝鎷呭績婊氱瓛杈撻�佺嚎浼氭湁涓嬩竴涓揣鐗╋紝鎵�浠ュ缓璁瓵GV鍦ㄥ師鍦扮瓑寰呬竴娈垫椂闂�
+ * 鏀捐揣锛堝嚭搴擄級锛氬彲鑳芥鏃禔GV涓婇潰鍏朵粬鑳岀瘬鐨勬枡绠变篃鏄嚭搴撳埌杩欎釜婊氱瓛杈撻�佺嚎锛屾墍浠ョ瓑杈撻�佺嚎鎶婄涓�涓枡绠辫繍璧颁箣鍚庯紝鍐嶆斁绗簩涓�
+ * 瑕佸仛 ready-for-next
*/
- // return is need wait
- public boolean hasDelayAtSta(Segment segment) {
- if (segment == null) {
+ public boolean hasDelayAtSta(Segment currSeg) {
+ if (currSeg == null) {
throw new NullPointerException("segment is null in hasDelayAtSta.");
}
// 鍒ゆ柇AGV鏄惁鍦ㄦ粴鍔ㄨ緭閫佺嚎鍓�
- Code currentCode = agvDetailService.getCurrentCode(segment.getAgvId());
+ Code currentCode = agvDetailService.getCurrentCode(currSeg.getAgvId());
if (null == currentCode) {
return false;
}
@@ -58,15 +65,60 @@
return false;
}
// 濡傛灉涓虹涓�涓猻egment锛堟病鏈塸revious segment锛夛紝鍒欎笉闇�瑕佺瓑寰�
- Segment preSeg = segmentService.getPreviousStepOfFinish(segment.getTravelId(), segment.getSerial());
- if (preSeg == null) {
+ Segment preSeg = segmentService.getPreviousStepOfFinish(currSeg.getTravelId(), currSeg.getSerial());
+ if (preSeg == null || null == preSeg.getEndTime()) {
return false;
}
- Date preSegEndTime = preSeg.getEndTime();
- if (null == preSegEndTime) {
+
+ TaskPosDto.PosType currPosType = TaskPosDto.PosType.of(currSeg.getPosType());
+ TaskPosDto.PosType prePosType = TaskPosDto.PosType.of(preSeg.getPosType());
+ if (prePosType == null || currPosType == null) {
return false;
}
- Date now = new Date();
+ long preEndTime = preSeg.getEndTime().getTime();
+ long now = System.currentTimeMillis();
+ Long agvId = currSeg.getAgvId();
+
+ // inbound
+ if (prePosType.equals(TaskPosDto.PosType.ORI_STA)) {
+
+ // 鑳岀瘬鏈弧鎵嶇瓑
+ Integer backpack = agvService.getBackpack(agvId);
+ List<Integer> usedBackpacks = segmentService.selectUsedBackpacks(currSeg.getTravelId(), agvId);
+ if (usedBackpacks.size() >= backpack) {
+ return false;
+ }
+
+ // sign waiting
+ if (currSeg.getRollerWaiting() == 0) {
+ currSeg.setRollerWaiting(1);
+ segmentService.updateById(currSeg);
+ }
+
+ // timeout
+ return (now - preEndTime) < LOAD_DELAY_MS;
+ }
+
+ // outbound
+ if (prePosType == TaskPosDto.PosType.DEST_STA) {
+
+ // 杩炵画鍚屽彛鎵嶇瓑
+ if (currPosType != TaskPosDto.PosType.DEST_STA) {
+ return false;
+ }
+ if (!Objects.equals(preSeg.getEndNode(), currSeg.getEndNode())) {
+ return false;
+ }
+
+ // sign waiting
+ if (currSeg.getRollerWaiting() == 0) {
+ currSeg.setRollerWaiting(1);
+ segmentService.updateById(currSeg);
+ }
+
+ // timeout
+ return (now - preEndTime) < PLACE_DELAY_MS;
+ }
return false;
}
--
Gitblit v1.9.1