From 2e100195206a79bcd315863aa6867ee66bdfe999 Mon Sep 17 00:00:00 2001
From: zhang <zc857179121@qq.com>
Date: 星期四, 26 三月 2026 12:41:33 +0800
Subject: [PATCH] 上报小车高级信息
---
zy-acs-manager/src/main/java/com/zy/acs/manager/core/scheduler/MaintainScheduler.java | 25 ++++++
zy-acs-manager/src/main/java/com/zy/acs/manager/core/integrate/dto/FaultUplinkParam.java | 23 +++++
zy-acs-manager/src/main/java/com/zy/acs/manager/core/integrate/wms/FaultReportService.java | 106 ++++++++++++++++++++++++++
zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/FaultProcessor.java | 2
zy-acs-manager/src/main/java/com/zy/acs/manager/manager/enums/VehFaultRecStateType.java | 27 ++++++
5 files changed, 183 insertions(+), 0 deletions(-)
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/integrate/dto/FaultUplinkParam.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/integrate/dto/FaultUplinkParam.java
new file mode 100644
index 0000000..166fec9
--- /dev/null
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/integrate/dto/FaultUplinkParam.java
@@ -0,0 +1,23 @@
+package com.zy.acs.manager.core.integrate.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+public class FaultUplinkParam {
+
+ private String agvId;
+
+
+ private String faultNo;
+
+ /**
+ * 鏁呴殰鍚�
+ */
+ private String faultName;
+
+ private Date happenTime;
+
+}
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/integrate/wms/FaultReportService.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/integrate/wms/FaultReportService.java
new file mode 100644
index 0000000..8cbc13e
--- /dev/null
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/integrate/wms/FaultReportService.java
@@ -0,0 +1,106 @@
+package com.zy.acs.manager.core.integrate.wms;
+
+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.UplinkProperties;
+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.FaultUplinkParam;
+import com.zy.acs.manager.core.integrate.dto.HttpResult;
+import com.zy.acs.manager.core.integrate.dto.TaskUplinkParam;
+import com.zy.acs.manager.core.service.ThreadPoolRegulator;
+import com.zy.acs.manager.manager.entity.Bus;
+import com.zy.acs.manager.manager.entity.IntegrationRecord;
+import com.zy.acs.manager.manager.entity.VehFaultRec;
+import com.zy.acs.manager.manager.enums.IntegrationDirectionType;
+import com.zy.acs.manager.manager.enums.StatusType;
+import com.zy.acs.manager.manager.service.BusService;
+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.Date;
+import java.util.HashMap;
+import java.util.Map;
+
+@Slf4j
+@Service
+public class FaultReportService {
+
+
+ private HttpGo http;
+
+ private long timeoutSeconds = 15;
+
+ @PostConstruct
+ public void init() {
+ this.http = HttpGo.builder()
+ .connectTimeout(Duration.ofSeconds(timeoutSeconds))
+ .readTimeout(Duration.ofSeconds(timeoutSeconds))
+ .build();
+ }
+
+ public boolean reportFinished(VehFaultRec vehFaultRec, String reportFaultUrl ) {
+ if (Cools.isEmpty(vehFaultRec)) {
+ return false;
+ }
+
+ // headers
+ Map<String, String> headers = new HashMap<>();
+ // params
+ FaultUplinkParam param = new FaultUplinkParam();
+ param.setFaultNo( vehFaultRec.getFaultNo());
+ param.setFaultName( vehFaultRec.getFaultName());
+ param.setAgvId(vehFaultRec.getAgvId$());
+ param.setHappenTime( vehFaultRec.getHappenTime());
+
+
+ HttpResult<?> result;
+ try {
+ result = postForResult(reportFaultUrl, headers, param);
+
+ Integer code = result.getCode();
+ if (null == code || 200 != code) {
+ return false;
+ }
+
+ } catch (Exception e) {
+ log.error("Uplink report failed, taskId={}",
+ JSON.toJSONString(vehFaultRec),
+ e);
+ return false;
+ } finally {
+
+ }
+ return true;
+ }
+
+ private HttpResult<?> postForResult(String url, Map<String, String> headers, FaultUplinkParam param) throws Exception {
+ String json = JSON.toJSONString(param);
+ HttpGo.HttpResponse response = this.http.postJson(url, headers, json);
+
+ int status = response.statusCode();
+ if (status != 200) {
+ throw new RuntimeException("Uplink HTTP error: status=" + status + ", body=" + response.body());
+ }
+
+ String body = response.body();
+ if (Cools.isEmpty(body)) {
+ throw new RuntimeException("Uplink empty response body.");
+ }
+
+ HttpResult<?> result = JSON.parseObject(body, new TypeReference<HttpResult<?>>() {});
+ if (result == null) {
+ throw new RuntimeException("Uplink parse HttpResult failed: body=" + body);
+ }
+ return result;
+ }
+
+
+}
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/scheduler/MaintainScheduler.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/scheduler/MaintainScheduler.java
index e63e83b..583bf9f 100644
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/scheduler/MaintainScheduler.java
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/scheduler/MaintainScheduler.java
@@ -7,6 +7,7 @@
import com.zy.acs.framework.common.DateUtils;
import com.zy.acs.manager.common.config.UplinkProperties;
import com.zy.acs.manager.core.integrate.wms.TaskReportService;
+import com.zy.acs.manager.core.integrate.wms.FaultReportService;
import com.zy.acs.manager.core.service.MainLockWrapService;
import com.zy.acs.manager.manager.entity.*;
import com.zy.acs.manager.manager.enums.*;
@@ -17,6 +18,7 @@
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
+import java.time.Instant;
import java.util.Date;
import java.util.List;
import java.util.Optional;
@@ -51,6 +53,10 @@
private SegmentService segmentService;
@Autowired
private TaskReportService taskReportService;
+ @Autowired
+ private VehFaultRecService vehFaultRecService;
+ @Autowired
+ private FaultReportService faultReportService;
@Scheduled(cron = "0/5 * * * * ? ")
private synchronized void autoCharge(){
@@ -191,4 +197,23 @@
}
}
+
+ @Scheduled(cron = "0/3 * * * * ? ")
+ private void reportFault() {
+ String reportFaultUrl = configService.getVal("reportFaultUrl", String.class);
+ if (Cools.isEmpty(reportFaultUrl)) { return; }
+ List<VehFaultRec> vehFaultRecList = vehFaultRecService.list((new LambdaQueryWrapper<VehFaultRec>().eq(VehFaultRec::getState, VehFaultRecStateType.PENDING).ge(VehFaultRec::getHappenTime, Instant.now().minusSeconds(3))));
+ if (Cools.isEmpty(vehFaultRecList)) { return; }
+ for (VehFaultRec vehFaultRec : vehFaultRecList) {
+ boolean finished = faultReportService.reportFinished(vehFaultRec,reportFaultUrl);
+ if (finished) {
+ vehFaultRec.setState(VehFaultRecStateType.REPORT_SUCCESS.name());
+ } else {
+ log.error("failed to report vehFaultRec to uplink");
+ vehFaultRec.setState(VehFaultRecStateType.REPORT_FAILED.name());
+ }
+ vehFaultRecService.updateById(vehFaultRec);
+ }
+
+ }
}
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/FaultProcessor.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/FaultProcessor.java
index e453a9b..3a012b1 100644
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/FaultProcessor.java
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/FaultProcessor.java
@@ -8,6 +8,7 @@
import com.zy.acs.framework.common.SnowflakeIdWorker;
import com.zy.acs.manager.core.domain.VehicleFaultDto;
import com.zy.acs.manager.manager.entity.VehFaultRec;
+import com.zy.acs.manager.manager.enums.VehFaultRecStateType;
import com.zy.acs.manager.manager.service.AgvDetailService;
import com.zy.acs.manager.manager.service.AgvService;
import com.zy.acs.manager.manager.service.VehFaultRecService;
@@ -56,6 +57,7 @@
vehFaultRec.setFaultData(GsonUtils.toJson(Cools.add("data1", agv_04_up.getData1()).add("data2", agv_04_up.getData2())));
vehFaultRec.setHappenTime(new Date());
vehFaultRec.setProtocol(RadixTools.bytesToHexStr(agv_04_up.writeToBytes()));
+ vehFaultRec.setState(VehFaultRecStateType.PENDING.name());
if (!vehFaultRecService.save(vehFaultRec)) {
News.error("{}鍙疯溅杈嗘晠闅滐紒璁板綍鏁呴殰淇℃伅澶辫触......", dto.getVehicle());
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/enums/VehFaultRecStateType.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/enums/VehFaultRecStateType.java
new file mode 100644
index 0000000..6a0a88d
--- /dev/null
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/enums/VehFaultRecStateType.java
@@ -0,0 +1,27 @@
+package com.zy.acs.manager.manager.enums;
+
+import com.zy.acs.framework.common.Cools;
+
+public enum VehFaultRecStateType {
+
+ NONE, // 鏈煡
+ PENDING, // 寰呬笂鎶�
+ REPORT_SUCCESS, // 鎴愬姛
+ REPORT_FAILED, // 澶辫触
+
+ SKIPPED_REPORT, // 璺宠繃
+ ;
+
+ public static VehFaultRecStateType of(String state) {
+ if (Cools.isEmpty(state)) {
+ return NONE;
+ }
+ for (VehFaultRecStateType type : VehFaultRecStateType.values()) {
+ if (type.toString().equals(state)) {
+ return type;
+ }
+ }
+ return NONE;
+ }
+
+}
--
Gitblit v1.9.1