From ccd6309576bfa66ddf40b8a48202ced37c05333a Mon Sep 17 00:00:00 2001
From: lsh <lsh@163.com>
Date: 星期三, 23 四月 2025 14:32:39 +0800
Subject: [PATCH] *

---
 src/main/java/com/zy/core/enums/RgvStatusType.java                     |    1 
 src/main/java/com/zy/asrs/service/BasDevpPositionService.java          |    8 
 src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java            |   69 ++++++
 src/main/java/com/zy/asrs/mapper/BasDevpPositionMapper.java            |   12 +
 src/main/resources/application-prod.yml                                |    6 
 src/main/java/com/zy/asrs/service/impl/BasDevpPositionServiceImpl.java |   12 +
 src/main/java/com/zy/core/thread/RgvThread.java                        |  299 ++++++++++++++++++++++++-----
 src/main/java/com/zy/core/cache/TaskProtocolCache.java                 |    8 
 src/main/java/com/zy/core/model/RgvSlave.java                          |    4 
 src/main/resources/mapper/BasDevpPositionMapper.xml                    |   14 +
 src/main/java/com/zy/core/model/protocol/RgvTaskProtocol.java          |   25 ++
 src/main/java/com/zy/core/MainProcess.java                             |    2 
 src/main/java/com/zy/core/cache/RgvTaskCache.java                      |   45 ++++
 src/main/java/com/zy/core/model/protocol/RgvProtocol.java              |    9 
 src/main/java/com/zy/asrs/entity/BasDevpPosition.java                  |   52 +++++
 src/main/resources/application.yml                                     |    2 
 16 files changed, 504 insertions(+), 64 deletions(-)

diff --git a/src/main/java/com/zy/asrs/entity/BasDevpPosition.java b/src/main/java/com/zy/asrs/entity/BasDevpPosition.java
new file mode 100644
index 0000000..e1795f8
--- /dev/null
+++ b/src/main/java/com/zy/asrs/entity/BasDevpPosition.java
@@ -0,0 +1,52 @@
+package com.zy.asrs.entity;
+
+import com.baomidou.mybatisplus.annotations.TableField;
+import com.baomidou.mybatisplus.annotations.TableId;
+import com.baomidou.mybatisplus.annotations.TableName;
+import com.baomidou.mybatisplus.enums.IdType;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+@TableName("\"SOURCE\".\"asr_bas_devp_position\"")
+public class BasDevpPosition implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * ID
+     */
+    @ApiModelProperty(value= "ID")
+    @TableId(value = "ID", type = IdType.AUTO)
+    private Long id;
+
+    @ApiModelProperty(value= "")
+    @TableField("DEV_NO")
+    private Integer devNo;
+
+    @ApiModelProperty(value= "")
+    @TableField("PLC_ID")
+    private Integer plcId;
+
+    @ApiModelProperty(value= "")
+    @TableField("PLC_POSITION")
+    private Long plcPosition;
+
+    public BasDevpPosition() {}
+
+    public BasDevpPosition(Integer devNo, Integer plcId, Long plcPosition) {
+        this.devNo = devNo;
+        this.plcId = plcId;
+        this.plcPosition = plcPosition;
+    }
+
+//    BasDevpPosition basDevpPosition = new BasDevpPosition(
+//            null,    // 
+//            null,    // 
+//            null    // 
+//    );
+
+
+}
diff --git a/src/main/java/com/zy/asrs/mapper/BasDevpPositionMapper.java b/src/main/java/com/zy/asrs/mapper/BasDevpPositionMapper.java
new file mode 100644
index 0000000..213991c
--- /dev/null
+++ b/src/main/java/com/zy/asrs/mapper/BasDevpPositionMapper.java
@@ -0,0 +1,12 @@
+package com.zy.asrs.mapper;
+
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+import com.zy.asrs.entity.BasDevpPosition;
+import org.apache.ibatis.annotations.Mapper;
+import org.springframework.stereotype.Repository;
+
+@Mapper
+@Repository
+public interface BasDevpPositionMapper extends BaseMapper<BasDevpPosition> {
+
+}
diff --git a/src/main/java/com/zy/asrs/service/BasDevpPositionService.java b/src/main/java/com/zy/asrs/service/BasDevpPositionService.java
new file mode 100644
index 0000000..ee3cc4d
--- /dev/null
+++ b/src/main/java/com/zy/asrs/service/BasDevpPositionService.java
@@ -0,0 +1,8 @@
+package com.zy.asrs.service;
+
+import com.baomidou.mybatisplus.service.IService;
+import com.zy.asrs.entity.BasDevpPosition;
+
+public interface BasDevpPositionService extends IService<BasDevpPosition> {
+
+}
diff --git a/src/main/java/com/zy/asrs/service/impl/BasDevpPositionServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/BasDevpPositionServiceImpl.java
new file mode 100644
index 0000000..7609b3f
--- /dev/null
+++ b/src/main/java/com/zy/asrs/service/impl/BasDevpPositionServiceImpl.java
@@ -0,0 +1,12 @@
+package com.zy.asrs.service.impl;
+
+import com.baomidou.mybatisplus.service.impl.ServiceImpl;
+import com.zy.asrs.entity.BasDevpPosition;
+import com.zy.asrs.mapper.BasDevpPositionMapper;
+import com.zy.asrs.service.BasDevpPositionService;
+import org.springframework.stereotype.Service;
+
+@Service("basDevpPositionService")
+public class BasDevpPositionServiceImpl extends ServiceImpl<BasDevpPositionMapper, BasDevpPosition> implements BasDevpPositionService {
+
+}
diff --git a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
index dffdfc5..c1c4edb 100644
--- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -19,13 +19,16 @@
 import com.zy.core.CrnThread;
 import com.zy.core.DevpThread;
 import com.zy.core.cache.MessageQueue;
+import com.zy.core.cache.RgvStatusCache;
 import com.zy.core.cache.SlaveConnection;
 import com.zy.core.enums.*;
 import com.zy.core.model.CrnSlave;
 import com.zy.core.model.DevpSlave;
+import com.zy.core.model.RgvSlave;
 import com.zy.core.model.Task;
 import com.zy.core.model.command.CrnCommand;
 import com.zy.core.model.protocol.CrnProtocol;
+import com.zy.core.model.protocol.RgvProtocol;
 import com.zy.core.model.protocol.StaProtocol;
 import com.zy.core.properties.SlaveProperties;
 import com.zy.core.thread.BarcodeThread;
@@ -1103,4 +1106,70 @@
         return taskWrk;
     }
 
+    public boolean deviceDetection(RgvSlave slave){
+        RgvProtocol rgvProtocol = RgvStatusCache.getRgvStatus(slave.getId());
+        if (rgvProtocol == null) {
+            return false;
+        }
+        if (!rgvProtocol.getModeType().equals(RgvModeType.AUTO) || rgvProtocol.getRgvPos().equals(0L)
+                || (!rgvProtocol.getStatusType().equals(RgvStatusType.IDLE) && !rgvProtocol.getStatusType().equals(RgvStatusType.ROAM))) {
+            return false;
+        }
+        RgvProtocol rgvProtocolOther = RgvStatusCache.getRgvStatus(slave.getOtherId());
+        if (rgvProtocolOther == null) {
+            return false;
+        }
+        if (rgvProtocolOther.statusEnable){
+            if (!rgvProtocolOther.getModeType().equals(RgvModeType.AUTO) || rgvProtocolOther.getRgvPos().equals(0L)) {
+                return false;
+            }
+        }
+        return true;
+    }
+
+    public boolean rgvOtherStatusEnable(RgvSlave slave){
+        RgvProtocol rgvProtocolOther = RgvStatusCache.getRgvStatus(slave.getOtherId());
+        if (rgvProtocolOther == null) {
+            return true;
+        }
+        if (rgvProtocolOther.statusEnable){
+//            if (!rgvProtocolOther.getModeType().equals(RgvModeType.AUTO) || rgvProtocolOther.getRgvPos().equals(0L)) {
+                return true;
+//            }
+        }
+        return false;
+    }
+
+
+    private void sc(){
+
+
+        // 鏍规嵁杈撻�佺嚎plc閬嶅巻
+        for (RgvSlave rgvSlave : slaveProperties.getRgv()) {
+            if (!deviceDetection(rgvSlave)){
+                continue;
+            }
+            RgvProtocol rgvProtocol = RgvStatusCache.getRgvStatus(rgvSlave.getId());
+
+            RgvProtocol rgvProtocolOther = RgvStatusCache.getRgvStatus(rgvSlave.getOtherId());
+
+            //姹傚嚭褰撳墠杞﹀彲杩愯鑼冨洿
+            Long[] farthestPoint = new Long[]{0L,0L};
+            if (!rgvProtocolOther.statusEnable){
+                farthestPoint = new Long[]{0L,0L};
+            } else {
+                if (rgvProtocolOther.getStatusType().equals(RgvStatusType.IDLE)){
+
+                }
+            }
+
+
+            // 閬嶅巻鍏ュ簱鍙�
+            for (RgvSlave.RgvStn inSta : rgvSlave.getRgvInSStn()) {
+
+            }
+        }
+
+    }
+
 }
diff --git a/src/main/java/com/zy/core/MainProcess.java b/src/main/java/com/zy/core/MainProcess.java
index ca69fe5..f3a40ba 100644
--- a/src/main/java/com/zy/core/MainProcess.java
+++ b/src/main/java/com/zy/core/MainProcess.java
@@ -51,6 +51,8 @@
                     // 鍫嗗灈鏈哄紓甯镐俊鎭褰�
                     mainService.recCrnErr();
 
+
+
                 } catch (Exception e) {
                     e.printStackTrace();
                 }
diff --git a/src/main/java/com/zy/core/cache/RgvTaskCache.java b/src/main/java/com/zy/core/cache/RgvTaskCache.java
new file mode 100644
index 0000000..e9204f3
--- /dev/null
+++ b/src/main/java/com/zy/core/cache/RgvTaskCache.java
@@ -0,0 +1,45 @@
+package com.zy.core.cache;
+
+import com.zy.core.model.protocol.RgvProtocol;
+import com.zy.core.model.protocol.RgvTaskProtocol;
+
+import java.util.concurrent.ConcurrentHashMap;
+
+/**
+ * Created by IX on 2025/02/21
+ */
+public class RgvTaskCache {
+    // 鏈湴缂撳瓨锛岄敭涓� currentPosition锛屽�间负 DeviceStatus
+    private static final ConcurrentHashMap<Integer, RgvTaskProtocol> cache = new ConcurrentHashMap<>();
+
+    /**
+     * 鏇存柊璁惧鐘舵��
+     */
+    public static void updateRgvStatus(RgvTaskProtocol status) {
+        try {
+            cache.put(status.getRgvNo(), status);
+        } finally {
+        }
+    }
+
+    /**
+     * 鑾峰彇璁惧鐘舵��
+     */
+    public static RgvTaskProtocol getRgvStatus(Integer RgvNo) {
+        try {
+            return cache.get(RgvNo);
+        } finally {
+        }
+    }
+
+    /**
+     * 鑾峰彇鎵�鏈夎澶囩姸鎬�
+     */
+    public static ConcurrentHashMap<Integer, RgvTaskProtocol> getAllRgvStatus() {
+        try {
+            return new ConcurrentHashMap<>(cache); // 杩斿洖鍓湰
+        } finally {
+        }
+    }
+
+}
diff --git a/src/main/java/com/zy/core/cache/TaskProtocolCache.java b/src/main/java/com/zy/core/cache/TaskProtocolCache.java
index e17f307..50fa398 100644
--- a/src/main/java/com/zy/core/cache/TaskProtocolCache.java
+++ b/src/main/java/com/zy/core/cache/TaskProtocolCache.java
@@ -66,6 +66,14 @@
     /**
      * 鑾峰彇鎵�鏈夊彇浠诲姟
      */
+    public List<TaskProtocol> getTakeOrPutTaskProtocol(short loaded) {
+        if (loaded == 0){
+            return getAllTakeTaskProtocol();
+        } else if (loaded == 1){
+            return getAllPutTaskProtocol();
+        }
+        return new ArrayList<>();
+    }
     public List<TaskProtocol> getAllTakeTaskProtocol() {
 //        lock.readLock().lock(); // 鍔犺閿�
         try {
diff --git a/src/main/java/com/zy/core/enums/RgvStatusType.java b/src/main/java/com/zy/core/enums/RgvStatusType.java
index 6ef70b2..a43b3cd 100644
--- a/src/main/java/com/zy/core/enums/RgvStatusType.java
+++ b/src/main/java/com/zy/core/enums/RgvStatusType.java
@@ -4,6 +4,7 @@
 
     NONE(-1, "绂荤嚎"),
     IDLE(0, "绌洪棽"),
+    ROAM(100000, "婕父"),
     WORKING(1, "浣滀笟涓�"),
     SOS(2, "鎶ヨ"),
     FETCHING(11, "鍙栬揣涓�"),
diff --git a/src/main/java/com/zy/core/model/RgvSlave.java b/src/main/java/com/zy/core/model/RgvSlave.java
index b354f8e..59b78ca 100644
--- a/src/main/java/com/zy/core/model/RgvSlave.java
+++ b/src/main/java/com/zy/core/model/RgvSlave.java
@@ -24,6 +24,10 @@
 
     private Integer otherId;
 
+    private Long carBodyJiaoMing;
+
+    private Long carBodyKunPeng;
+
     // RGV鍏ュ簱婧愮珯鐐�
     private List<RgvStn> rgvInSStn = new ArrayList<>();
 
diff --git a/src/main/java/com/zy/core/model/protocol/RgvProtocol.java b/src/main/java/com/zy/core/model/protocol/RgvProtocol.java
index 902050f..081e59b 100644
--- a/src/main/java/com/zy/core/model/protocol/RgvProtocol.java
+++ b/src/main/java/com/zy/core/model/protocol/RgvProtocol.java
@@ -49,6 +49,7 @@
      * RGV褰撳墠浣嶇疆
      */
     public Long RgvPos = 0L;
+    public Long RgvPosDestination = 0L;
 
     /**
      * 璧拌鍦ㄥ畾浣�
@@ -78,14 +79,14 @@
     public Float xDuration;
 
     /**
-     * 鏄惁閬胯
+     * 杞﹁韩
      */
-    public Short Avoid;//0\1\2
+    public Long carBodyJiaoMing = 0L;
 
     /**
-     * 閬胯鐩殑鍦�
+     * 杞﹁韩
      */
-    public Short AvoidingTheDestination;
+    public Long carBodyKunPeng = 0L;
 
     /**
      * 鏄惁鍚敤
diff --git a/src/main/java/com/zy/core/model/protocol/RgvTaskProtocol.java b/src/main/java/com/zy/core/model/protocol/RgvTaskProtocol.java
new file mode 100644
index 0000000..2bb5cf2
--- /dev/null
+++ b/src/main/java/com/zy/core/model/protocol/RgvTaskProtocol.java
@@ -0,0 +1,25 @@
+package com.zy.core.model.protocol;
+
+import lombok.Data;
+
+/**
+ * Created by IX on 2025/02/21
+ */
+@Data
+public class RgvTaskProtocol {
+
+
+    private Integer RgvNo;
+
+    /**
+     * 鏄惁閬胯
+     */
+    public Integer Avoid;//0\1\2
+
+    /**
+     * 閬胯鐩殑鍦�
+     */
+    public Long AvoidingTheDestination;
+
+    public RgvTaskProtocol(){}
+}
diff --git a/src/main/java/com/zy/core/thread/RgvThread.java b/src/main/java/com/zy/core/thread/RgvThread.java
index 620c6e5..15214fe 100644
--- a/src/main/java/com/zy/core/thread/RgvThread.java
+++ b/src/main/java/com/zy/core/thread/RgvThread.java
@@ -14,10 +14,7 @@
 import com.zy.asrs.service.BasRgvService;
 import com.zy.asrs.utils.RouteUtils;
 import com.zy.core.ThreadHandler;
-import com.zy.core.cache.MessageQueue;
-import com.zy.core.cache.OutputQueue;
-import com.zy.core.cache.RgvStatusCache;
-import com.zy.core.cache.TaskProtocolCache;
+import com.zy.core.cache.*;
 import com.zy.core.enums.RgvModeType;
 import com.zy.core.enums.RgvStatusType;
 import com.zy.core.enums.RgvTaskModeType;
@@ -26,9 +23,11 @@
 import com.zy.core.model.Task;
 import com.zy.core.model.command.RgvCommand;
 import com.zy.core.model.protocol.RgvProtocol;
+import com.zy.core.model.protocol.RgvTaskProtocol;
 import com.zy.core.model.protocol.TaskProtocol;
 import lombok.Data;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Value;
 
 import java.text.MessageFormat;
 import java.util.Date;
@@ -47,6 +46,12 @@
     private RgvSlave slave;
 //    private RgvProtocol rgvProtocol;
     private TaskProtocolCache taskProtocolCache = new TaskProtocolCache();
+    // # 杞ㄩ亾鎬婚暱
+    private Long trackEntireLength = 100L;
+    //# 杞ㄩ亾鍩哄噯鐐�
+    private Long trackBenchmark = 100L;
+    //  # 閬胯璺濈
+    private Long avoidDistance = 100L;
 
     /**
      * 宸ヤ綅1澶嶄綅淇″彿
@@ -71,10 +76,9 @@
             new Thread(this::readStatusRgv).start();
 
             // 鍚姩浠诲姟涓嬪彂绾跨▼
-            new Thread(this::taskTakeIssued).start();
+            new Thread(this::taskIssued).start();
 
-            new Thread(this::taskPutIssued).start();
-
+            // 鍚姩婕父绾跨▼
             new Thread(this::taskWalkIssued).start();
         }
     }
@@ -97,9 +101,45 @@
     }
 
     /**
+     * 婕父
+     */
+    private void taskWalkIssued() {
+        while (true) {
+            try {
+                // 浼戠湢 1 绉�
+                Thread.sleep(100);
+
+                if (!deviceDetection()){
+                    continue;
+                }
+                RgvTaskProtocol rgvTaskProtocol = RgvTaskCache.getRgvStatus(slave.getId());
+                if (rgvTaskProtocol == null) {
+                    initRgv();
+                    rgvTaskProtocol = RgvTaskCache.getRgvStatus(slave.getId());
+                }
+                if (rgvTaskProtocol.getAvoid() != 1) {
+                    continue;
+                }
+                TaskProtocol issued = new TaskProtocol();
+                issued.setTaskNo(32222L);
+                issued.setTargetPosition(rgvTaskProtocol.getAvoidingTheDestination());
+                write(issued);
+                rgvTaskProtocol.setAvoid(0);
+
+                Thread.sleep(200);
+                RgvTaskCache.updateRgvStatus(rgvTaskProtocol);
+
+            } catch (Exception e) {
+                log.error("RGV琛岃蛋浠诲姟涓嬪彂绾跨▼寮傚父锛侊紒锛�"+e.getMessage());
+//                e.printStackTrace();
+            }
+        }
+    }
+
+    /**
      * 浠诲姟涓嬪彂
      */
-    private void taskTakeIssued() {
+    private void taskIssued() {
         while (true) {
             try {
                 // 浼戠湢 1 绉�
@@ -108,24 +148,28 @@
                     continue;
                 }
                 RgvProtocol rgvProtocol = RgvStatusCache.getRgvStatus(slave.getId());
-                if (rgvProtocol == null) {
+                RgvTaskProtocol rgvTaskProtocol = RgvTaskCache.getRgvStatus(slave.getId());
+                if (rgvProtocol == null || rgvTaskProtocol == null) {
                     initRgv();
                     rgvProtocol = RgvStatusCache.getRgvStatus(slave.getId());
+                    rgvTaskProtocol = RgvTaskCache.getRgvStatus(slave.getId());
                 }
-                if (rgvProtocol.getAvoid() == 0 || !rgvProtocol.getLoaded().equals((short) 0)) {
+                if (rgvTaskProtocol.getAvoid() != 0) {
                     continue;
                 }
-                List<TaskProtocol> allTakeTaskProtocol = taskProtocolCache.getAllTakeTaskProtocol();
+
+                List<TaskProtocol> allTakeTaskProtocol = taskProtocolCache.getTakeOrPutTaskProtocol(rgvProtocol.getLoaded());
                 for(TaskProtocol taskProtocol: allTakeTaskProtocol){
-                    if (taskProtocol.getTaskStatus() == 1){//鍑嗗涓嬪彂
-
-
-
-
-
-
-
-
+                    if (taskProtocol.getIsRunning() == 1){//鍑嗗涓嬪彂
+                        RgvProtocol rgvProtocolOther = RgvStatusCache.getRgvStatus(slave.getOtherId());
+                        //鍙岃溅
+                        if (rgvOtherStatusEnable()){
+                            //鍙︿竴鍙拌溅鏄惁鍏佽姝ゅ彴杞︽墽琛�
+                            if (!otherRgvAvoid(taskProtocol.getTargetPosition())){
+                                continue;
+                            }
+                        }
+                        Thread.sleep(200);
                         TaskProtocol issued = new TaskProtocol(taskProtocol);
                         write(issued);
                         taskProtocol.setIsRunning(taskProtocol.getIsRunning() +1);
@@ -133,8 +177,6 @@
                         break;
                     }
                 }
-
-
             } catch (Exception e) {
                 log.error("RGV鍙栬揣浠诲姟涓嬪彂绾跨▼寮傚父锛侊紒锛�"+e.getMessage());
 //                e.printStackTrace();
@@ -144,56 +186,176 @@
 
     public boolean deviceDetection(){
         RgvProtocol rgvProtocol = RgvStatusCache.getRgvStatus(slave.getId());
-        if (rgvProtocol == null) {
+        RgvTaskProtocol rgvTaskProtocol = RgvTaskCache.getRgvStatus(slave.getId());
+
+        if (rgvProtocol == null || rgvTaskProtocol ==null) {
             return false;
         }
-        if (!rgvProtocol.getModeType().equals(RgvModeType.AUTO) || rgvProtocol.getRgvPos().equals(0L)
-                || !rgvProtocol.getStatusType().equals(RgvStatusType.IDLE)) {
+        if (!rgvProtocol.getModeType().equals(RgvModeType.AUTO) || rgvProtocol.getRgvPos().equals(0L) || rgvTaskProtocol.getAvoid() == -1 || rgvProtocol.getRgvPosDestination() == 0L
+                || (!rgvProtocol.getStatusType().equals(RgvStatusType.IDLE) && !rgvProtocol.getStatusType().equals(RgvStatusType.ROAM))) {
             return false;
         }
         RgvProtocol rgvProtocolOther = RgvStatusCache.getRgvStatus(slave.getOtherId());
+        RgvTaskProtocol rgvTaskProtocolOther = RgvTaskCache.getRgvStatus(slave.getOtherId());
+
         if (rgvProtocolOther == null) {
             return false;
         }
         if (rgvProtocolOther.statusEnable){
-            if (!rgvProtocolOther.getModeType().equals(RgvModeType.AUTO) || rgvProtocolOther.getRgvPos().equals(0L)) {
+            if (!rgvProtocolOther.getModeType().equals(RgvModeType.AUTO) || rgvProtocolOther.getRgvPos().equals(0L) || rgvTaskProtocolOther.getAvoid() == -1  || rgvProtocolOther.getRgvPosDestination() == 0L) {
                 return false;
             }
         }
         return true;
     }
 
-    /**
-     * 浠诲姟涓嬪彂
-     */
-    private void taskPutIssued() {
-        while (true) {
-            try {
-                // 浼戠湢 1 绉�
-                Thread.sleep(100);
-
-            } catch (Exception e) {
-                log.error("RGV鏀捐揣浠诲姟涓嬪彂绾跨▼寮傚父锛侊紒锛�"+e.getMessage());
-//                e.printStackTrace();
-            }
+    public boolean rgvOtherStatusEnable(){
+        RgvProtocol rgvProtocolOther = RgvStatusCache.getRgvStatus(slave.getOtherId());
+        if (rgvProtocolOther == null) {
+            return true;
         }
+        if (rgvProtocolOther.statusEnable){
+//            if (!rgvProtocolOther.getModeType().equals(RgvModeType.AUTO) || rgvProtocolOther.getRgvPos().equals(0L)) {
+            return true;
+//            }
+        }
+        return false;
     }
 
-    /**
-     * 浠诲姟涓嬪彂
-     */
-    private void taskWalkIssued() {
-        while (true) {
-            try {
-                // 浼戠湢 1 绉�
-                Thread.sleep(100);
+    public boolean otherRgvAvoid(Long targetPosition){
+        RgvProtocol rgvProtocol = RgvStatusCache.getRgvStatus(slave.getId());
+        RgvTaskProtocol rgvTaskProtocol = RgvTaskCache.getRgvStatus(slave.getId());
 
+        RgvProtocol rgvProtocolOther = RgvStatusCache.getRgvStatus(slave.getOtherId());
 
-            } catch (Exception e) {
-                log.error("RGV琛岃蛋浠诲姟涓嬪彂绾跨▼寮傚父锛侊紒锛�"+e.getMessage());
-//                e.printStackTrace();
+        if (rgvProtocol.getRgvPos()<rgvProtocolOther.getRgvPos()){
+            if (rgvProtocolOther.getStatusType().equals(RgvStatusType.IDLE)){
+                if ((rgvProtocolOther.getRgvPos()-rgvProtocolOther.getCarBodyJiaoMing())
+                        - (targetPosition+rgvProtocol.getCarBodyKunPeng())
+                        > avoidDistance){//鏃犻渶閬胯
+                    return true;
+                } else {
+                    long avoid = targetPosition + rgvProtocol.getCarBodyKunPeng() + avoidDistance + rgvProtocolOther.getCarBodyJiaoMing();
+                    if (avoid > trackEntireLength-rgvProtocolOther.getCarBodyKunPeng()){
+                        log.error("閬胯瓒呭嚭鑼冨洿锛侊紒锛佷换鍔″紓甯�  鑱旂郴绠$悊鍛橈紒锛侊紒");
+                        return false;
+                    }
+                    rgvTaskProtocol.setAvoid(1);
+                    rgvTaskProtocol.setAvoidingTheDestination(avoid);
+                    RgvTaskCache.updateRgvStatus(rgvTaskProtocol);
+                    return true;
+                }
+            } else if (rgvProtocolOther.getStatusType().equals(RgvStatusType.ROAM)){
+                if ((rgvProtocolOther.getRgvPosDestination()-rgvProtocolOther.getCarBodyJiaoMing())
+                        - (targetPosition+rgvProtocol.getCarBodyKunPeng())
+                        > avoidDistance){//鏃犻渶閬胯
+                    return true;
+                } else {
+                    long avoid = targetPosition + rgvProtocol.getCarBodyKunPeng() + avoidDistance + rgvProtocolOther.getCarBodyJiaoMing();
+                    if (avoid > trackEntireLength-rgvProtocolOther.getCarBodyKunPeng()){
+                        log.error("閬胯瓒呭嚭鑼冨洿锛侊紒锛佷换鍔″紓甯�  鑱旂郴绠$悊鍛橈紒锛侊紒");
+                        return false;
+                    }
+                    rgvTaskProtocol.setAvoid(1);
+                    rgvTaskProtocol.setAvoidingTheDestination(avoid);
+                    RgvTaskCache.updateRgvStatus(rgvTaskProtocol);
+                    return true;
+                }
+            } else if (rgvProtocolOther.getStatusType().equals(RgvStatusType.WORKING)){
+                if ((rgvProtocolOther.getRgvPosDestination()-rgvProtocolOther.getCarBodyJiaoMing())
+                        - (targetPosition+rgvProtocol.getCarBodyKunPeng())
+                        > avoidDistance){//鏃犻渶閬胯
+                    return true;
+                } else {
+                    RgvThread rgvThreadOther = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvProtocolOther.getRgvNo());
+                    TaskProtocolCache taskProtocolCacheOther = rgvThreadOther.getTaskProtocolCache();
+                    List<TaskProtocol> allPutTaskProtocol = taskProtocolCacheOther.getAllPutTaskProtocol();
+                    if (allPutTaskProtocol.size() > 1){
+                        return false;
+                    }
+                    for (TaskProtocol taskProtocol : allPutTaskProtocol){
+                        if (taskProtocol.getTargetPosition()>=rgvProtocolOther.getRgvPos()){
+                            long avoid = rgvProtocolOther.getRgvPos()-rgvProtocolOther.getCarBodyJiaoMing()-avoidDistance-rgvProtocol.getCarBodyKunPeng();
+                            if (avoid > trackEntireLength-rgvProtocolOther.getCarBodyKunPeng()){
+                                log.error("琛岃蛋瓒呭嚭鑼冨洿锛侊紒锛佷换鍔″紓甯�  鑱旂郴绠$悊鍛橈紒锛侊紒");
+                                return false;
+                            }
+                            rgvTaskProtocol.setAvoid(1);
+                            rgvTaskProtocol.setAvoidingTheDestination(avoid);
+                            RgvTaskCache.updateRgvStatus(rgvTaskProtocol);
+                            return false;
+                        } else {
+                            return false;
+                        }
+                    }
+                    return false;
+                }
+            }
+        } else {
+            if (rgvProtocolOther.getStatusType().equals(RgvStatusType.IDLE)){
+                if ((targetPosition-rgvProtocol.getCarBodyJiaoMing())
+                        - (rgvProtocolOther.getRgvPos()+rgvProtocolOther.getCarBodyKunPeng())
+                        > avoidDistance){//鏃犻渶閬胯
+                    return true;
+                } else {
+                    long avoid = targetPosition -rgvProtocol.getCarBodyJiaoMing() - avoidDistance - rgvProtocolOther.getCarBodyKunPeng();
+                    if (avoid < trackBenchmark + rgvProtocolOther.getCarBodyJiaoMing()){
+                        log.error("閬胯瓒呭嚭鑼冨洿锛侊紒锛佷换鍔″紓甯�  鑱旂郴绠$悊鍛橈紒锛侊紒");
+                        return false;
+                    }
+                    rgvTaskProtocol.setAvoid(1);
+                    rgvTaskProtocol.setAvoidingTheDestination(avoid);
+                    RgvTaskCache.updateRgvStatus(rgvTaskProtocol);
+                    return true;
+                }
+            } else if (rgvProtocolOther.getStatusType().equals(RgvStatusType.ROAM)){
+                if ((targetPosition-rgvProtocol.getCarBodyJiaoMing())
+                        - (rgvProtocolOther.getRgvPosDestination()+rgvProtocolOther.getCarBodyKunPeng())
+                        > avoidDistance){//鏃犻渶閬胯
+                    return true;
+                } else {
+                    long avoid = targetPosition -rgvProtocol.getCarBodyJiaoMing() - avoidDistance - rgvProtocolOther.getCarBodyKunPeng();
+                    if (avoid < trackBenchmark + rgvProtocolOther.getCarBodyJiaoMing()){
+                        log.error("閬胯瓒呭嚭鑼冨洿锛侊紒锛佷换鍔″紓甯�  鑱旂郴绠$悊鍛橈紒锛侊紒");
+                        return false;
+                    }
+                    rgvTaskProtocol.setAvoid(1);
+                    rgvTaskProtocol.setAvoidingTheDestination(avoid);
+                    RgvTaskCache.updateRgvStatus(rgvTaskProtocol);
+                    return true;
+                }
+            } else if (rgvProtocolOther.getStatusType().equals(RgvStatusType.WORKING)){
+                if ((targetPosition-rgvProtocol.getCarBodyJiaoMing())
+                        - (rgvProtocolOther.getRgvPosDestination()+rgvProtocolOther.getCarBodyKunPeng())
+                        > avoidDistance){//鏃犻渶閬胯
+                    return true;
+                } else {
+                    RgvThread rgvThreadOther = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvProtocolOther.getRgvNo());
+                    TaskProtocolCache taskProtocolCacheOther = rgvThreadOther.getTaskProtocolCache();
+                    List<TaskProtocol> allPutTaskProtocol = taskProtocolCacheOther.getAllPutTaskProtocol();
+                    if (allPutTaskProtocol.size() > 1){
+                        return false;
+                    }
+                    for (TaskProtocol taskProtocol : allPutTaskProtocol){
+                        if (taskProtocol.getTargetPosition()<=rgvProtocolOther.getRgvPos()){
+                            long avoid = rgvProtocolOther.getRgvPos()+rgvProtocolOther.getCarBodyKunPeng()+avoidDistance+rgvProtocol.getCarBodyJiaoMing();
+                            if (avoid < trackBenchmark + rgvProtocolOther.getCarBodyJiaoMing()){
+                                log.error("琛岃蛋瓒呭嚭鑼冨洿锛侊紒锛佷换鍔″紓甯�  鑱旂郴绠$悊鍛橈紒锛侊紒");
+                                return false;
+                            }
+                            rgvTaskProtocol.setAvoid(1);
+                            rgvTaskProtocol.setAvoidingTheDestination(avoid);
+                            RgvTaskCache.updateRgvStatus(rgvTaskProtocol);
+                            return false;
+                        } else {
+                            return false;
+                        }
+                    }
+                    return false;
+                }
             }
         }
+        return false;
     }
 
     /**
@@ -213,14 +375,32 @@
         rgvProtocol.setxSpeed((short) 0);
         rgvProtocol.setxDistance((short) 0);
         rgvProtocol.setxDuration((short) 0);
-        BasRgvService basRgvService = SpringUtils.getBean(BasRgvService.class);
-        BasRgv rgv = basRgvService.selectById(slave.getId());
-        if (!Cools.isEmpty(rgv)){
-            rgvProtocol.setStatusEnable(rgv.getStatus() == 1);
-        } else {
-            rgvProtocol.setStatusEnable(false);
+        rgvProtocol.setCarBodyJiaoMing(0L);
+        rgvProtocol.setCarBodyKunPeng(0L);
+        try{
+            BasRgvService basRgvService = SpringUtils.getBean(BasRgvService.class);
+            BasRgv rgv = basRgvService.selectById(slave.getId());
+            if (!Cools.isEmpty(rgv)){
+                rgvProtocol.setStatusEnable(rgv.getStatus() == 1);
+            } else {
+                rgvProtocol.setStatusEnable(false);
+            }
+        } catch (Exception e){
+            log.error("RGV寮傚父锛侊紒锛�"+e.getMessage());
+            rgvProtocol.setStatusEnable(true);
         }
+
+        RgvTaskProtocol rgvTaskProtocol = RgvTaskCache.getRgvStatus(slave.getId());
+        if (rgvTaskProtocol == null) {
+            rgvTaskProtocol = new RgvTaskProtocol();
+            rgvTaskProtocol.setRgvNo(slave.getId());
+        }
+        rgvTaskProtocol.setAvoid(-1);
+        rgvTaskProtocol.setAvoidingTheDestination(0L);
+
         RgvStatusCache.updateRgvStatus(rgvProtocol);
+
+        RgvTaskCache.updateRgvStatus(rgvTaskProtocol);
 
     }
 
@@ -233,13 +413,14 @@
         OperateResult connect = siemensNet.ConnectServer();
         if(connect.IsSuccess){
             result = true;
-            OutputQueue.RGV.offer(MessageFormat.format( "銆恵0}銆慠GV plc杩炴帴鎴愬姛 ===>> [id:{1}] [ip:{2}] [port:{3}] [rack:{4}] [slot:{5}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot()));
+//            OutputQueue.RGV.offer(MessageFormat.format( "銆恵0}銆慠GV plc杩炴帴鎴愬姛 ===>> [id:{1}] [ip:{2}] [port:{3}] [rack:{4}] [slot:{5}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot()));
             log.info("RGV plc杩炴帴鎴愬姛 ===>> [id:{}] [ip:{}] [port:{}] [rack:{}] [slot:{}]", slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot());
         } else {
-            OutputQueue.RGV.offer(MessageFormat.format("銆恵0}銆慠GV plc杩炴帴澶辫触锛侊紒锛� ===>> [id:{1}] [ip:{2}] [port:{3}] [rack:{4}] [slot:{5}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot()));
+//            OutputQueue.RGV.offer(MessageFormat.format("銆恵0}銆慠GV plc杩炴帴澶辫触锛侊紒锛� ===>> [id:{1}] [ip:{2}] [port:{3}] [rack:{4}] [slot:{5}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot()));
             log.error("RGV plc杩炴帴澶辫触锛侊紒锛� ===>> [id:{}] [ip:{}] [port:{}] [rack:{}] [slot:{}]", slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot());
-            initRgv();
+
         }
+        initRgv();
 //        siemensNet.ConnectClose();
         return result;
     }
diff --git a/src/main/resources/application-prod.yml b/src/main/resources/application-prod.yml
index 9c3e97c..3c1c0eb 100644
--- a/src/main/resources/application-prod.yml
+++ b/src/main/resources/application-prod.yml
@@ -40,6 +40,8 @@
     rack: 0
     slot: 0
     otherId: 2
+    carBodyJiaoMing: 100
+    carBodyKunPeng: 100
     #RGV婧愮珯鐐�
     rgvInSStn[0]:
       devpPlcId: ${wcs-slave.devp[0].id}
@@ -50,11 +52,13 @@
   # RGV绌挎杞�2
   rgv[1]:
     id: 2
-    ip: 192.168.4.250
+    ip: 192.168.1.1
     port: 502
     rack: 0
     slot: 0
     otherId: 1
+    carBodyJiaoMing: 100
+    carBodyKunPeng: 100
     #RGV婧愮珯鐐�
     rgvInSStn[0]:
       devpPlcId: ${wcs-slave.devp[0].id}
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
index f9320e0..afc15d7 100644
--- a/src/main/resources/application.yml
+++ b/src/main/resources/application.yml
@@ -54,6 +54,8 @@
   trackBenchmark: 1
   # 杞ㄩ亾杞崲涓虹背姣斾緥
   trackProportion: 10000
+  # 閬胯璺濈
+  avoidDistance: 100
 
 wms:
   # 鏄惁寮�鍚笂鎶�
diff --git a/src/main/resources/mapper/BasDevpPositionMapper.xml b/src/main/resources/mapper/BasDevpPositionMapper.xml
new file mode 100644
index 0000000..2d4b554
--- /dev/null
+++ b/src/main/resources/mapper/BasDevpPositionMapper.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zy.asrs.mapper.BasDevpPositionMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="BaseResultMap" type="com.zy.asrs.entity.BasDevpPosition">
+        <id column="ID" property="id" />
+        <result column="DEV_NO" property="devNo" />
+        <result column="PLC_ID" property="plcId" />
+        <result column="PLC_POSITION" property="plcPosition" />
+
+    </resultMap>
+
+</mapper>

--
Gitblit v1.9.1