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_03_UP; import com.zy.acs.common.domain.protocol.IMessageBody; import com.zy.acs.common.utils.RedisSupport; import com.zy.acs.framework.common.Cools; 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 AgvDataHeartbeatService { 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_03_UP) { AGV_03_UP agv_03_up = (AGV_03_UP) msgBody; this.sync(agv_03_up, detail); if (PRINT_LOG) { log.info("Agv [{}] 心跳包 ===>> {}", protocol.getAgvNo(), JSON.toJSONString(agv_03_up)); } } if (!agvDetailService.updateById(detail)) { log.error("Agv [{}] 详情更新失败 !!!", protocol.getAgvNo()); } } // 心跳包 private void sync(AGV_03_UP mesBody, AgvDetail detail) { detail.setVol(mesBody.getVoltage()); detail.setSoc(mesBody.getSoc()); detail.setSoh(mesBody.getSoh()); detail.setBatteryFail(mesBody.getBatterFailSign()); detail.setTempe(JSON.toJSONString(Cools .add("batteryTempe", mesBody.getBatteryTempe()) .add("envirTempe", mesBody.getEnvirTempe()) .add("leftMotorTempe", mesBody.getLeftMotorTempe()) .add("rightMotorTempe", mesBody.getRightMotorTempe()) .add("raiseMotorTempe", mesBody.getRaiseMotorTempe()) .add("telescopicMotorTempe", mesBody.getTelescopicMotorTempe()) .add("rotatingMotorTempe", mesBody.getRotatingMotorTempe()) )); detail.setMotorFail(JSON.toJSONString(Cools .add("leftMotorFailSign", mesBody.getLeftMotorFailSign()) .add("rightMotorFailSign", mesBody.getRightMotorFailSign()) .add("raiseMotorFailSign", mesBody.getRaiseMotorFailSign()) .add("telescopicMotorFailSign", mesBody.getTelescopicMotorFailSign()) .add("rotatingMotorFailSign", mesBody.getRotatingMotorFailSign()) )); detail.setFailSign(String.valueOf(mesBody.getFailSign())); detail.setBootTime(mesBody.getBootTime()); } }