| zy-acs-manager/src/main/java/com/zy/acs/manager/core/integrate/dto/FaultUplinkParam.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| zy-acs-manager/src/main/java/com/zy/acs/manager/core/integrate/wms/FaultReportService.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| zy-acs-manager/src/main/java/com/zy/acs/manager/core/scheduler/MaintainScheduler.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/FaultProcessor.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| zy-acs-manager/src/main/java/com/zy/acs/manager/manager/enums/VehFaultRecStateType.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
zy-acs-manager/src/main/java/com/zy/acs/manager/core/integrate/dto/FaultUplinkParam.java
New file @@ -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; } zy-acs-manager/src/main/java/com/zy/acs/manager/core/integrate/wms/FaultReportService.java
New file @@ -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; } } 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); } } } 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()); zy-acs-manager/src/main/java/com/zy/acs/manager/manager/enums/VehFaultRecStateType.java
New file @@ -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; } }