From b781dc511b21b80b14befe87d42eced1cce59d1f Mon Sep 17 00:00:00 2001
From: vincentlu <t1341870251@gmail.com>
Date: 星期二, 30 十二月 2025 13:58:52 +0800
Subject: [PATCH] #
---
zy-acs-manager/src/main/resources/mapper/manager/StaMapper.xml | 56 ++++++++++++++++--
zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/MainService.java | 2
zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/TransferStationHandler.java | 60 ++++++++++++++++---
zy-acs-manager/src/main/java/com/zy/acs/manager/manager/mapper/SegmentMapper.java | 2
zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/AgvService.java | 2
zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/SegmentServiceImpl.java | 5 +
zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/SegmentService.java | 2
zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/AgvServiceImpl.java | 7 +
zy-acs-manager/src/main/resources/mapper/manager/SegmentMapper.xml | 16 +++++
version/doc/RCS输送线逻辑梳理.xmind | 0
10 files changed, 129 insertions(+), 23 deletions(-)
diff --git "a/version/doc/RCS\350\276\223\351\200\201\347\272\277\351\200\273\350\276\221\346\242\263\347\220\206.xmind" "b/version/doc/RCS\350\276\223\351\200\201\347\272\277\351\200\273\350\276\221\346\242\263\347\220\206.xmind"
index 9455b83..97added 100644
--- "a/version/doc/RCS\350\276\223\351\200\201\347\272\277\351\200\273\350\276\221\346\242\263\347\220\206.xmind"
+++ "b/version/doc/RCS\350\276\223\351\200\201\347\272\277\351\200\273\350\276\221\346\242\263\347\220\206.xmind"
Binary files differ
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/MainService.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/MainService.java
index ed78f93..de18b2a 100644
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/MainService.java
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/MainService.java
@@ -296,7 +296,7 @@
return o2.getPriority() - o1.getPriority();
}
});
- Integer backpack = agvService.getBackpack(agv);
+ Integer backpack = agvService.getBackpack(agvId);
if (taskList.size() > backpack) {
taskList = taskList.subList(0, backpack);
}
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..d49dbc8 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,7 +10,7 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
-import java.util.Date;
+import java.util.Objects;
// man_segment: start_time, end_time
/**
@@ -29,6 +30,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 +45,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 +63,48 @@
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);
+ int countRemainingBackpack = segmentService.countRemainingBackpack(currSeg.getTravelId(), agvId);
+ if (countRemainingBackpack >= backpack) {
+ return false;
+ }
+
+ // 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;
+ }
+
+ // timeout
+ return (now - preEndTime) < PLACE_DELAY_MS;
+ }
return false;
}
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/mapper/SegmentMapper.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/mapper/SegmentMapper.java
index 2e8d2d0..5c3d29f 100644
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/mapper/SegmentMapper.java
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/mapper/SegmentMapper.java
@@ -10,4 +10,6 @@
List<String> getGroupNo(@Param("state")String state, @Param("agvId")Long agvId, @Param("groupNo")String groupNo);
+ int countRemainingBackpack(@Param("travelId") Long travelId, @Param("agvId") Long agvId);
+
}
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/AgvService.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/AgvService.java
index 8d9b662..6bc4935 100644
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/AgvService.java
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/AgvService.java
@@ -38,7 +38,7 @@
List<VehicleDto> getVehicleDtoList(List<String> noIncluded);
- Integer getBackpack(Agv agv);
+ Integer getBackpack(Long agvId);
Agv findByPosition(Long codeId);
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/SegmentService.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/SegmentService.java
index 7afa287..d6177fd 100644
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/SegmentService.java
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/SegmentService.java
@@ -28,4 +28,6 @@
Segment getCurrRunningSeg(Long agvId, Long codeId);
+ int countRemainingBackpack(Long travelId, Long agvId);
+
}
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/AgvServiceImpl.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/AgvServiceImpl.java
index 9f155e7..72fe8ab 100644
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/AgvServiceImpl.java
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/AgvServiceImpl.java
@@ -266,11 +266,14 @@
}
@Override
- public Integer getBackpack(Agv agv) {
+ public Integer getBackpack(Long agvId) {
+ if (null == agvId) {
+ return 0;
+ }
// if (null != agv.getStage()) {
// return agv.getStage();
// }
- AgvModel agvModel = agvModelService.getByAgvId(agv.getId());
+ AgvModel agvModel = agvModelService.getByAgvId(agvId);
assert null != agvModel;
return agvModel.getBackpack();
}
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/SegmentServiceImpl.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/SegmentServiceImpl.java
index 7398f70..343256d 100644
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/SegmentServiceImpl.java
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/SegmentServiceImpl.java
@@ -163,4 +163,9 @@
return segments.stream().findFirst().orElse(null);
}
+ @Override
+ public int countRemainingBackpack(Long travelId, Long agvId) {
+ return this.baseMapper.countRemainingBackpack(agvId, travelId);
+ }
+
}
diff --git a/zy-acs-manager/src/main/resources/mapper/manager/SegmentMapper.xml b/zy-acs-manager/src/main/resources/mapper/manager/SegmentMapper.xml
index 7981c07..4cba666 100644
--- a/zy-acs-manager/src/main/resources/mapper/manager/SegmentMapper.xml
+++ b/zy-acs-manager/src/main/resources/mapper/manager/SegmentMapper.xml
@@ -23,6 +23,22 @@
</where>
</sql>
+ <select id="countRemainingBackpack" resultType="int">
+ SELECT
+ COUNT(DISTINCT backpack)
+ FROM man_segment
+ WHERE 1=1
+ AND agv_id = #{agvId}
+ <if test="travelId != null">
+ AND travel_id = #{travelId}
+ </if>
+ AND deleted = 0
+ AND status = 1
+ AND backpack IS NOT NULL
+ AND backpack > 0
+ AND state != 'FINISH'
+ </select>
+
<select id="getGroupNo" resultType="java.lang.String">
SELECT group_id
FROM (
diff --git a/zy-acs-manager/src/main/resources/mapper/manager/StaMapper.xml b/zy-acs-manager/src/main/resources/mapper/manager/StaMapper.xml
index e7d2297..320304f 100644
--- a/zy-acs-manager/src/main/resources/mapper/manager/StaMapper.xml
+++ b/zy-acs-manager/src/main/resources/mapper/manager/StaMapper.xml
@@ -7,10 +7,17 @@
SET rsv_in_cnt = rsv_in_cnt + #{qty},
update_time = NOW()
WHERE id = #{staId}
+ AND deleted = 0
+ AND status = 1
+ AND (capacity - rsv_in_cnt) >= #{qty}
+ </update>
+<!-- UPDATE man_sta
+ SET rsv_in_cnt = rsv_in_cnt + #{qty},
+ update_time = NOW()
+ WHERE id = #{staId}
AND deleted = 0
AND status = 1
- AND (capacity - occ_cnt - rsv_in_cnt) >= #{qty}
- </update>
+ AND (capacity - occ_cnt - rsv_in_cnt) >= #{qty}-->
<update id="releaseReserveIn">
UPDATE man_sta
@@ -25,13 +32,20 @@
<update id="confirmReserveIn">
UPDATE man_sta
SET rsv_in_cnt = rsv_in_cnt - #{qty},
- occ_cnt = occ_cnt + #{qty},
update_time = NOW()
WHERE id = #{staId}
AND deleted = 0
AND status = 1
AND rsv_in_cnt >= #{qty}
</update>
+<!-- UPDATE man_sta
+ SET rsv_in_cnt = rsv_in_cnt - #{qty},
+ occ_cnt = occ_cnt + #{qty},
+ update_time = NOW()
+ WHERE id = #{staId}
+ AND deleted = 0
+ AND status = 1
+ AND rsv_in_cnt >= #{qty}-->
<update id="tryReserveOut">
UPDATE man_sta
@@ -40,8 +54,15 @@
WHERE id = #{staId}
AND deleted = 0
AND status = 1
- AND (occ_cnt - rsv_out_cnt) >= #{qty}
+ AND (capacity - rsv_out_cnt) >= #{qty}
</update>
+<!-- UPDATE man_sta
+ SET rsv_out_cnt = rsv_out_cnt + #{qty},
+ update_time = NOW()
+ WHERE id = #{staId}
+ AND deleted = 0
+ AND status = 1
+ AND (occ_cnt - rsv_out_cnt) >= #{qty}-->
<update id="releaseReserveOut">
UPDATE man_sta
@@ -56,14 +77,21 @@
<update id="confirmReserveOut">
UPDATE man_sta
SET rsv_out_cnt = rsv_out_cnt - #{qty},
+ update_time = NOW()
+ WHERE id = #{staId}
+ AND deleted = 0
+ AND status = 1
+ AND rsv_out_cnt >= #{qty}
+ </update>
+<!-- UPDATE man_sta
+ SET rsv_out_cnt = rsv_out_cnt - #{qty},
occ_cnt = occ_cnt - #{qty},
update_time = NOW()
WHERE id = #{staId}
AND deleted = 0
AND status = 1
AND rsv_out_cnt >= #{qty}
- AND occ_cnt >= #{qty}
- </update>
+ AND occ_cnt >= #{qty}-->
<select id="selectAvailableOutSta" resultType="com.zy.acs.manager.manager.entity.Sta">
SELECT *
@@ -71,8 +99,14 @@
WHERE 1=1
AND deleted = 0
AND status = 1
- AND (IFNULL(occ_cnt, 0) - IFNULL(rsv_out_cnt, 0)) >= #{minAvailableQty}
+ AND (IFNULL(capacity, 0) - IFNULL(rsv_out_cnt, 0)) >= #{minAvailableQty}
</select>
+<!-- SELECT *
+ FROM man_sta
+ WHERE 1=1
+ AND deleted = 0
+ AND status = 1
+ AND (IFNULL(occ_cnt, 0) - IFNULL(rsv_out_cnt, 0)) >= #{minAvailableQty}-->
<select id="selectAvailableInSta" resultType="com.zy.acs.manager.manager.entity.Sta">
SELECT *
@@ -80,8 +114,14 @@
WHERE 1=1
AND deleted = 0
AND status = 1
- AND (IFNULL(capacity, 0) - IFNULL(occ_cnt, 0) - IFNULL(rsv_in_cnt, 0)) >= #{minAvailableQty}
+ AND (IFNULL(capacity, 0) - IFNULL(rsv_in_cnt, 0)) >= #{minAvailableQty}
</select>
+<!-- SELECT *
+ FROM man_sta
+ WHERE 1=1
+ AND deleted = 0
+ AND status = 1
+ AND (IFNULL(capacity, 0) - IFNULL(occ_cnt, 0) - IFNULL(rsv_in_cnt, 0)) >= #{minAvailableQty}-->
<!-- 鍏宠仈鏌ヨsql -->
<sql id="selectSql">
--
Gitblit v1.9.1