zhang
18 小时以前 2e100195206a79bcd315863aa6867ee66bdfe999
上报小车高级信息
3个文件已添加
2个文件已修改
183 ■■■■■ 已修改文件
zy-acs-manager/src/main/java/com/zy/acs/manager/core/integrate/dto/FaultUplinkParam.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-acs-manager/src/main/java/com/zy/acs/manager/core/integrate/wms/FaultReportService.java 106 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-acs-manager/src/main/java/com/zy/acs/manager/core/scheduler/MaintainScheduler.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/FaultProcessor.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-acs-manager/src/main/java/com/zy/acs/manager/manager/enums/VehFaultRecStateType.java 27 ●●●●● 补丁 | 查看 | 原始文档 | 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;
    }
}