package com.zy.acs.manager.core.service; import com.alibaba.fastjson.JSON; import com.zy.acs.common.domain.AgvProtocol; import com.zy.acs.common.domain.protocol.AGV_04_UP; import com.zy.acs.common.domain.protocol.IMessageBody; import com.zy.acs.common.enums.error.AgvErrorType; import com.zy.acs.common.utils.RedisSupport; import com.zy.acs.manager.core.domain.VehicleFaultDto; import com.zy.acs.manager.manager.entity.AgvDetail; import com.zy.acs.manager.manager.service.*; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; import java.util.Date; /** * Created by vincent on 2023/6/16 */ @Slf4j @Service public class AgvDataErrorService { private final static Boolean PRINT_LOG = Boolean.FALSE; private final RedisSupport redis = RedisSupport.defaultRedisSupport; @Autowired private AgvService agvService; @Autowired private AgvDetailService agvDetailService; @Autowired private CodeService codeService; @Autowired private WebsocketService websocketService; @Autowired private TrafficService trafficService; @Autowired private MapService mapService; @Autowired private ThreadPoolRegulator threadPoolRegulator; @Autowired private JamService jamService; @Autowired private AvoidWaveCalculator avoidWaveCalculator; @Autowired private FaultProcessor faultProcessor; @Async public void dataProcess(AgvProtocol protocol) { Date now = new Date(); IMessageBody msgBody = protocol.getMessageBody(); assert msgBody != null; Long agvId = agvService.getAgvId(protocol.getAgvNo()); if (null == agvId) { log.warn("Agv [{}] 尚未鉴权 !!!", protocol.getAgvNo()); return; } AgvDetail detail = agvDetailService.selectByAgvId(agvId); if (null == detail) { detail = new AgvDetail(); detail.setAgvId(agvId); if (!agvDetailService.save(detail)) { log.error("Agv [{}] 详情更新失败 !!!", protocol.getAgvNo()); return; } } detail.setUpdateTime(now); // 故障数据包 if (msgBody instanceof AGV_04_UP) { AGV_04_UP agv_04_up = (AGV_04_UP) msgBody; AgvErrorType errorType = AgvErrorType.query(agv_04_up.getHexFaultId()); log.info("Agv [{}] 故障数据包 ===>> {}", protocol.getAgvNo(), JSON.toJSONString(agv_04_up)); if (agv_04_up.getFaultId() == 12304 && agv_04_up.getData2() == 4 && agv_04_up.getFlag() == 4) { faultProcessor.reset(agvId); } else { // save faultProcessor.execute(new VehicleFaultDto<>(protocol.getAgvNo(), protocol.getTimestamp(), agv_04_up)); } // detail String errorMSg = errorType != null ? errorType.getMsg() : agv_04_up.getHexFaultId(); detail.setError(errorMSg); detail.setErrorTime(new Date()); } if (!agvDetailService.updateById(detail)) { log.error("Agv [{}] 详情更新失败 !!!", protocol.getAgvNo()); } } }