From 0bee2b3f40638460f3fa961792d43570e4b46911 Mon Sep 17 00:00:00 2001
From: vincentlu <t1341870251@gmail.com>
Date: 星期四, 05 二月 2026 16:06:07 +0800
Subject: [PATCH] #
---
zy-acs-manager/src/main/java/com/zy/acs/manager/core/integrate/conveyor/SiemensConveyorStationService.java | 153 ++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 152 insertions(+), 1 deletions(-)
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..386babe 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,170 @@
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.framework.common.SnowflakeIdWorker;
+import com.zy.acs.manager.common.config.ConveyorProperties;
+import com.zy.acs.manager.common.constant.Constants;
+import com.zy.acs.manager.common.utils.HttpGo;
+import com.zy.acs.manager.core.domain.type.NamespaceType;
+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.IntegrationRecord;
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.IntegrationDirectionType;
import com.zy.acs.manager.manager.enums.StaReserveType;
+import com.zy.acs.manager.manager.enums.StatusType;
+import com.zy.acs.manager.manager.service.IntegrationRecordService;
+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.*;
+
+@Slf4j
@Service
public class SiemensConveyorStationService implements ConveyorStationService {
+ @Autowired
+ private ConveyorProperties conveyorProperties;
+ @Autowired
+ private SnowflakeIdWorker snowflakeIdWorker;
+ @Autowired
+ private IntegrationRecordService integrationRecordService;
+
+ private HttpGo http;
+
+ @PostConstruct
+ public void init() {
+ int timeoutSeconds = conveyorProperties.getTimeout() / 1000;
+ this.http = HttpGo.builder()
+ .connectTimeout(Duration.ofSeconds(timeoutSeconds))
+ .readTimeout(Duration.ofSeconds(timeoutSeconds))
+// .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();
+ Date now = new Date();
- // staNo
+ // url
+ String url = this.http.buildUrl(conveyorProperties.getHost(), conveyorProperties.getPort(), conveyorProperties.getUrl());
+ // 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);
+
+ IntegrationRecord integrationRecord = new IntegrationRecord(
+ String.valueOf(snowflakeIdWorker.nextId()).substring(3), // 缂栧彿
+ NamespaceType.RCS_TASK_REPORT.desc, // 鍚嶇О绌洪棿
+ conveyorProperties.getUrl(), // 鎺ュ彛鍦板潃
+ null, // 骞冲彴瀵嗛挜
+ Constants.RCS, // 璋冪敤鏂规爣璇�
+ IntegrationDirectionType.OUTBOUND.value, // 鏂瑰悜[闈炵┖]
+ String.valueOf(now.getTime()), // 鏃堕棿鎴�
+ conveyorProperties.getHost(), // 瀹㈡埛绔疘P
+ JSON.toJSONString(params), // 璇锋眰鍐呭
+ null, // 鍝嶅簲鍐呭
+ null, // 寮傚父鍐呭
+ 0, // 缁撴灉
+ null, // 鑰楁椂
+ StatusType.ENABLE.val, // 鐘舵��
+ now, // 娣诲姞鏃堕棿[闈炵┖]
+ now, // 淇敼鏃堕棿[闈炵┖]
+ null // 澶囨敞
+ );
+
+ // do request
+ HttpResult<List<ConveyorStaDto>> result;
+ try {
+ result = postForResult(url, headers, params);
+ integrationRecord.setResponse(JSON.toJSONString(result));
+
+ 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;
+ }
+ }
+
+ integrationRecord.setResult(1);
+ } catch (Exception e) {
+ log.error("Conveyor query failed, FAIL-OPEN. staNo={}, taskId={}, type={}",
+ sta.getStaNo(),
+ task.getSeqNum(),
+ type,
+ e);
+ integrationRecord.setErr(e.getMessage());
+ return false;
+ } finally {
+ integrationRecord.setCostMs((int) (System.currentTimeMillis() - now.getTime()));
+ integrationRecordService.syncRecord(integrationRecord);
+ }
+ // ok
return true;
}
+ 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;
+ }
+
}
--
Gitblit v1.9.1