From 5b686555ac1b0a632fb1da7fd5ec717e79041c37 Mon Sep 17 00:00:00 2001
From: vincentlu <t1341870251@gmail.com>
Date: 星期四, 22 一月 2026 10:12:43 +0800
Subject: [PATCH] #

---
 zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/TravelServiceImpl.java |   91 +++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 90 insertions(+), 1 deletions(-)

diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/TravelServiceImpl.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/TravelServiceImpl.java
index 7010598..2006b40 100644
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/TravelServiceImpl.java
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/TravelServiceImpl.java
@@ -1,7 +1,10 @@
 package com.zy.acs.manager.manager.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.zy.acs.framework.common.Cools;
+import com.zy.acs.framework.exception.CoolException;
 import com.zy.acs.manager.manager.entity.Segment;
 import com.zy.acs.manager.manager.entity.Travel;
 import com.zy.acs.manager.manager.enums.SegmentStateType;
@@ -9,13 +12,13 @@
 import com.zy.acs.manager.manager.mapper.TravelMapper;
 import com.zy.acs.manager.manager.service.SegmentService;
 import com.zy.acs.manager.manager.service.TravelService;
-import com.zy.acs.framework.exception.CoolException;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.util.Date;
 import java.util.List;
+import java.util.Objects;
 
 @Slf4j
 @Service("travelService")
@@ -60,4 +63,90 @@
         }
     }
 
+    @Override
+    public Travel findRunningTravel(Long agvId) {
+        return this.getOne(new LambdaQueryWrapper<Travel>()
+                .eq(Travel::getAgvId, agvId)
+                .eq(Travel::getState, TravelStateType.RUNNING.toString())
+                .orderByDesc(Travel::getCreateTime)
+                .last("limit 1")
+        );
+    }
+
+    @Override
+    public Travel findRollerWaitingTravel(Long agvId, Long code) {
+        return this.getOne(new LambdaQueryWrapper<Travel>()
+                .eq(Travel::getAgvId, agvId)
+                .eq(Travel::getState, TravelStateType.RUNNING.toString())
+                .eq(Travel::getRollerWaiting, 1)
+                .eq(Travel::getRollerWaitingCode, code)
+                .orderByDesc(Travel::getCreateTime)
+                .last("limit 1")
+        );
+    }
+
+    @Override
+    public Boolean hasRollerWaiting(Long agvId) {
+        if (null == agvId) {
+            return false;
+        }
+        return 0 < this.count(new LambdaQueryWrapper<Travel>()
+                .eq(Travel::getAgvId, agvId)
+                .eq(Travel::getState, TravelStateType.RUNNING.toString())
+                .eq(Travel::getRollerWaiting, 1)
+        );
+    }
+
+    @Override
+    public Boolean markRollerWaiting(Long travelId, Long codeId) {
+        if (Cools.isEmpty(travelId, codeId)) {
+            return false;
+        }
+        Travel travel = this.getById(travelId);
+        if (travel == null) {
+            return false;
+        }
+        if (!TravelStateType.RUNNING.toString().equals(travel.getState())) {
+            return false;
+        }
+        if (travel.getRollerWaiting() == 1
+                && Objects.equals(travel.getRollerWaitingCode(), codeId)) {
+            return true;
+        }
+        travel.setRollerWaiting(1);
+        travel.setRollerWaitingCode(codeId);
+        if (!this.updateById(travel)) {
+            log.error("travel [{}] failed to mark roller waiting (code={})", travelId, codeId);
+            return false;
+        }
+        return true;
+    }
+
+    @Override
+    public Boolean clearRollerWaiting(Long travelId) {
+        if (null == travelId) {
+            return false;
+        }
+        Travel travel = this.getById(travelId);
+        if (travel == null) {
+            return false;
+        }
+//        if (!TravelStateType.RUNNING.toString().equals(travel.getState())) {
+//            return false;
+//        }
+        if (travel.getRollerWaiting() == 0 && Cools.isEmpty(travel.getRollerWaitingCode())) {
+            return true;
+        }
+        if (!this.update(
+                new LambdaUpdateWrapper<Travel>()
+                        .eq(Travel::getId, travelId)
+                        .set(Travel::getRollerWaiting, 0)
+                        .set(Travel::getRollerWaitingCode, null)
+        )) {
+            log.error("travel [{}] failed to clear roller waiting", travelId);
+            return false;
+        }
+        return true;
+    }
+
 }

--
Gitblit v1.9.1