From 940992f0d26959d7ee6a6038c2c9b21cfb74533b Mon Sep 17 00:00:00 2001
From: vincentlu <t1341870251@gmail.com>
Date: 星期三, 07 一月 2026 14:32:17 +0800
Subject: [PATCH] #

---
 zy-acs-manager/src/main/java/com/zy/acs/manager/core/integrate/conveyor/SiemensConveyorStationService.java |  122 ++++++++++++++++++++++++
 zy-acs-manager/src/main/resources/application.yml                                                          |    4 
 zy-acs-manager/src/main/java/com/zy/acs/manager/core/integrate/dto/HttpResult.java                         |   14 ++
 zy-acs-manager/src/main/java/com/zy/acs/manager/common/config/ConveyorProperties.java                      |   54 ++++++++++
 zy-acs-manager/src/main/java/com/zy/acs/manager/core/DemoController.java                                   |   95 ++----------------
 5 files changed, 207 insertions(+), 82 deletions(-)

diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/common/config/ConveyorProperties.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/common/config/ConveyorProperties.java
new file mode 100644
index 0000000..438e4f2
--- /dev/null
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/common/config/ConveyorProperties.java
@@ -0,0 +1,54 @@
+package com.zy.acs.manager.common.config;
+
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.context.annotation.Configuration;
+
+import java.net.InetAddress;
+import java.net.UnknownHostException;
+
+/**
+ * 杈撻�佺嚎plc绯荤粺閰嶇疆
+ * Created by luxiaotao on 2018/10/15
+ */
+@Configuration
+@ConfigurationProperties(prefix = "convey-plc")
+public class ConveyorProperties {
+
+    public static String HOST_NAME;
+
+    static {
+        try {
+            HOST_NAME = InetAddress.getLocalHost().getHostName();
+        } catch (UnknownHostException e) {
+            System.err.println("find hostname err");
+        }
+    }
+
+    private String host;
+
+    private Integer port;
+
+    public static String getHostName() {
+        return HOST_NAME;
+    }
+
+    public static void setHostName(String hostName) {
+        HOST_NAME = hostName;
+    }
+
+    public String getHost() {
+        return host;
+    }
+
+    public void setHost(String host) {
+        this.host = host;
+    }
+
+    public Integer getPort() {
+        return port;
+    }
+
+    public void setPort(Integer port) {
+        this.port = port;
+    }
+}
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/DemoController.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/DemoController.java
index afa5160..0ae549d 100644
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/DemoController.java
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/DemoController.java
@@ -3,17 +3,17 @@
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.zy.acs.common.enums.AgvStatusType;
 import com.zy.acs.framework.common.R;
-import com.zy.acs.framework.common.SnowflakeIdWorker;
-import com.zy.acs.manager.core.service.*;
-import com.zy.acs.manager.core.service.astart.MapDataDispatcher;
-import com.zy.acs.manager.core.utils.RouteGenerator;
+import com.zy.acs.manager.core.integrate.conveyor.ConveyorStationService;
+import com.zy.acs.manager.core.service.AvoidWaveCalculator;
+import com.zy.acs.manager.core.service.MapService;
+import com.zy.acs.manager.core.service.PatrolService;
 import com.zy.acs.manager.manager.entity.*;
 import com.zy.acs.manager.manager.enums.FuncStaType;
+import com.zy.acs.manager.manager.enums.StaReserveType;
 import com.zy.acs.manager.manager.enums.StatusType;
 import com.zy.acs.manager.manager.service.*;
 import com.zy.acs.manager.system.controller.BaseController;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.web.bind.annotation.*;
 
 import java.util.ArrayList;
@@ -33,100 +33,33 @@
     @Autowired
     private AgvDetailService agvDetailService;
     @Autowired
-    private TaskService taskService;
-    @Autowired
-    private MainService mainService;
-    @Autowired
-    private MainLockWrapService mainLockWrapService;
-    @Autowired
-    private SnowflakeIdWorker snowflakeIdWorker;
-    @Autowired
     private CodeService codeService;
-    @Autowired
-    private JdbcTemplate jdbcTemplate;
-    @Autowired
-    private LocService locService;
-    @Autowired
-    private TrafficService trafficService;
-    @Autowired
-    private ThreadPoolRegulator threadPoolRegulator;
-    @Autowired
-    private MapDataDispatcher mapDataDispatcher;
     @Autowired
     private AvoidWaveCalculator avoidWaveCalculator;
     @Autowired
     private PatrolService patrolService;
     @Autowired
-    private RouteGenerator routeGenerator;
-    @Autowired
     private FuncStaService funcStaService;
     @Autowired
     private AgvModelService agvModelService;
+    @Autowired
+    private StaService staService;
+//    @Autowired
+//    private ConveyorStationService siemensConveyorStationService;
+    @Autowired
+    private ConveyorStationService siemensConveyorStationService;
 
     @RequestMapping(value = "/system/info", method = {RequestMethod.GET, RequestMethod.POST})
     public R systemInfo() {
         return R.ok("RCS-FLOW-1.0.0");
     }
 
-    // {"msg":"Success","code":200,"data":[[38,2],[38,3],[38,4],[38,5],[38,6],[37,6],[36,6],[35,6],[34,6],[33,6],[32,6],[31,6],[30,6],[29,6],[28,6],[27,6],[26,6],[25,6]]}
-    // {"msg":"Success","code":200,"data":[[38,2],[38,3],[38,4],[38,5],[38,6],[37,6],[36,6],[35,6],[34,6],[33,6],[32,6],[31,6],[30,6],[29,6],[28,6],[27,6],[26,6],[25,6]]}
     @RequestMapping(value = "/system/demo", method = {RequestMethod.GET, RequestMethod.POST})
     public R demo() {
-        long startTime = System.currentTimeMillis();
-        for (int i = 0; i < 1000; i++) {
-            this.demo1();
-        }
-        System.out.println(System.currentTimeMillis() - startTime);
-        return R.ok();
+        Sta sta = staService.selectByStaNo("1006");
+        boolean b = siemensConveyorStationService.allowAgvWork(sta, null, null, StaReserveType.IN);
+        return R.ok().add(b);
     }
-
-    private R demo1() {
-        List<String> path = new ArrayList<>();
-        path.add("00000035");
-        path.add("00000085");
-        path.add("00000135");
-        path.add("00000185");
-        path.add("00000235");
-        path.add("00000234");
-        path.add("00000233");
-        path.add("00000232");
-        path.add("00000231");
-        path.add("00000230");
-        path.add("00000229");
-        path.add("00000228");
-        path.add("00000227");
-        path.add("00000226");
-        path.add("00000225");
-        path.add("00000224");
-        path.add("00000223");
-        path.add("00000222");
-
-//        List<int[]> codeMatrixIdxList = new ArrayList<>();
-//        for (String pathStr : path) {
-//            int[] codeMatrixIdx = mapDataDispatcher.getCodeMatrixIdx(null, pathStr);
-//            codeMatrixIdxList.add(codeMatrixIdx);
-//        }
-
-//        List<int[]> codeMatrixIdxList = mapDataDispatcher.getCodeMatrixIdxList(null, path);
-
-//        System.out.println(codeMatrixIdxList.toString());
-
-//        return R.ok().add(codeMatrixIdxList);
-
-        for (String codeData : path) {
-            Code code = codeService.getCacheByData(codeData);
-            Code byId = codeService.getCacheById(code.getId());
-        }
-
-        return R.ok();
-    }
-
-//    @RequestMapping(value = "/system/route/generate", method = {RequestMethod.GET, RequestMethod.POST})
-//    public R generate() {
-//        String[][] codeMatrix = mapDataDispatcher.getCodeMatrix(null);
-//        List<String> list = routeGenerator.generateRoutes(codeMatrix);
-//        return R.ok(String.valueOf(list.size())).add(list);
-//    }
 
     // http://localhost:8088/demo/auto/go/standby
     @GetMapping("/auto/go/standby")
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/integrate/conveyor/SiemensConveyorStationService.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/integrate/conveyor/SiemensConveyorStationService.java
index 5a571f9..8e7e549 100644
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/integrate/conveyor/SiemensConveyorStationService.java
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/integrate/conveyor/SiemensConveyorStationService.java
@@ -1,19 +1,139 @@
 package com.zy.acs.manager.core.integrate.conveyor;
 
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.TypeReference;
+import com.zy.acs.framework.common.Cools;
+import com.zy.acs.manager.common.config.ConveyorProperties;
+import com.zy.acs.manager.common.utils.HttpGo;
+import com.zy.acs.manager.core.integrate.dto.ConveyorStaDto;
+import com.zy.acs.manager.core.integrate.dto.HttpResult;
 import com.zy.acs.manager.manager.entity.Segment;
 import com.zy.acs.manager.manager.entity.Sta;
 import com.zy.acs.manager.manager.entity.Task;
 import com.zy.acs.manager.manager.enums.StaReserveType;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import javax.annotation.PostConstruct;
+import java.time.Duration;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+@Slf4j
 @Service
 public class SiemensConveyorStationService implements ConveyorStationService {
 
+    @Autowired
+    private ConveyorProperties conveyorProperties;
+
+    private HttpGo http;
+
+    @PostConstruct
+    public void init() {
+        this.http = HttpGo.builder()
+                .connectTimeout(Duration.ofSeconds(8))
+                .readTimeout(Duration.ofSeconds(15))
+//                .defaultHeader("User-Agent", "HttpGo/1.0")
+                // .trustAllSsl(true) // ONLY if you really need it (self-signed internal)
+                .build();
+    }
+
     @Override
     public boolean allowAgvWork(Sta sta, Task task, Segment seg, StaReserveType type) {
+        final String staNo = sta.getStaNo();
 
-        // staNo
+        // url
+        String url = this.buildUrl("/station/query");
+        // headers
+        Map<String, String> headers = new HashMap<>();
+        // params
+        Map<String, Object> params = new HashMap<>();
+        List<String> list = new ArrayList<>();
+        list.add(staNo);
+        params.put("staNos", list);
+        // do request
+        HttpResult<List<ConveyorStaDto>> result;
+        try {
+            result = postForResult(url, headers, params);
+            Integer code = result.getCode();
+            if (null == code || 200 != code) {
+                return false;
+            }
+            List<ConveyorStaDto> dtoList = result.getData();
+            if (Cools.isEmpty(list)) {
+                return false;
+            }
+            ConveyorStaDto staDto = dtoList.stream()
+                    .filter(dto -> !Cools.isEmpty(dto.getStaNo()) && dto.getStaNo().equals(staNo))
+                    .findFirst().orElse(null);
+            if (null == staDto) {
+                return false;
+            }
+            if (!staDto.getOnline()) {
+                return false;
+            }
+
+            // outbound: checkout nothing and inEnable
+            if (type.equals(StaReserveType.IN)) {
+                if (staDto.getOccupied()) {
+                    return false;
+                }
+                if (!staDto.getInEnable()) {
+                    return false;
+                }
+            }
+            // inbound: checkout occupied and outEnable
+            if (type.equals(StaReserveType.OUT)) {
+                if (!staDto.getOccupied()) {
+                    return false;
+                }
+                if (!staDto.getOutEnable()) {
+                    return false;
+                }
+            }
+        } catch (Exception e) {
+            log.error("Conveyor query failed, FAIL-OPEN. staNo={}, taskId={}, type={}",
+                    sta.getStaNo(),
+                    task.getSeqNum(),
+                    type,
+                    e);
+            return false;
+        }
+        // ok
         return true;
     }
 
+    private String buildUrl(String path) {
+        String host = conveyorProperties.getHost();
+        Integer port = conveyorProperties.getPort();
+
+        String p = (path == null) ? "" : (path.startsWith("/") ? path : ("/" + path));
+        return "http://" + host + ":" + port + p;
+    }
+
+    private HttpResult<List<ConveyorStaDto>> postForResult(String url
+            , Map<String, String> headers, Map<String, Object> params) throws Exception {
+        String json = JSON.toJSONString(params);
+        HttpGo.HttpResponse response = this.http.postJson(url, headers, json);
+
+        int status = response.statusCode();
+        if (status != 200) {
+            throw new RuntimeException("Conveyor HTTP error: status=" + status + ", body=" + response.body());
+        }
+
+        String body = response.body();
+        if (Cools.isEmpty(body)) {
+            throw new RuntimeException("Conveyor empty response body.");
+        }
+
+        HttpResult<List<ConveyorStaDto>> result = JSON.parseObject(body, new TypeReference<HttpResult<List<ConveyorStaDto>>>() {});
+        if (result == null) {
+            throw new RuntimeException("Conveyor parse HttpResult failed: body=" + body);
+        }
+        return result;
+    }
+
 }
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/integrate/dto/HttpResult.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/integrate/dto/HttpResult.java
new file mode 100644
index 0000000..49527cd
--- /dev/null
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/integrate/dto/HttpResult.java
@@ -0,0 +1,14 @@
+package com.zy.acs.manager.core.integrate.dto;
+
+import lombok.Data;
+
+@Data
+public class HttpResult<T> {
+
+    private Integer code;
+
+    private String msg;
+
+    private T data;
+
+}
diff --git a/zy-acs-manager/src/main/resources/application.yml b/zy-acs-manager/src/main/resources/application.yml
index 0236cfa..bbd3c6f 100644
--- a/zy-acs-manager/src/main/resources/application.yml
+++ b/zy-acs-manager/src/main/resources/application.yml
@@ -50,6 +50,10 @@
   timeout: 5000
   index: 8
 
+convey-plc:
+  host: 192.168.3.54
+  port: 9090
+
 floyd:
   enable: false
 

--
Gitblit v1.9.1