| | |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.scheduling.annotation.Async; |
| | | import org.springframework.stereotype.Service; |
| | | import com.zy.acs.common.utils.News; |
| | | |
| | | import java.util.ArrayList; |
| | | import java.util.Date; |
| | |
| | | |
| | | Long agvId = agvService.getAgvId(protocol.getAgvNo()); |
| | | if (null == agvId) { |
| | | log.warn("Agv [{}] 尚未鉴权 !!!", protocol.getAgvNo()); |
| | | News.warn("Agv [{}] 尚未鉴权 !!!", protocol.getAgvNo()); |
| | | return; |
| | | } |
| | | AgvDetail detail = agvDetailService.selectByAgvId(agvId); |
| | |
| | | detail = new AgvDetail(); |
| | | detail.setAgvId(agvId); |
| | | if (!agvDetailService.save(detail)) { |
| | | log.error("Agv [{}] 详情更新失败 !!!", protocol.getAgvNo()); |
| | | News.error("Agv [{}] 详情更新失败 !!!", protocol.getAgvNo()); |
| | | return; |
| | | } |
| | | } |
| | |
| | | this.sync(agv_12_up, detail); |
| | | // redis.setObject(RedisConstant.DIGITAL_AGV_FLAG, agv.getUuid(), agv_12_up); |
| | | if (PRINT_LOG) { |
| | | log.info("Agv [{}] 有码实时数据包 ===>> {}", protocol.getAgvNo(), JSON.toJSONString(agv_12_up)); |
| | | News.info("Agv [{}] 有码实时数据包 ===>> {}", protocol.getAgvNo(), JSON.toJSONString(agv_12_up)); |
| | | } |
| | | } |
| | | // 无码实时数据包 |
| | |
| | | this.sync(agv_13_up, detail); |
| | | // redis.setObject(RedisConstant.DIGITAL_AGV_FLAG, agv.getUuid(), agv_13_up); |
| | | if (PRINT_LOG) { |
| | | log.info("Agv [{}] 无码实时数据包 ===>> {}", protocol.getAgvNo(), JSON.toJSONString(agv_13_up)); |
| | | News.info("Agv [{}] 无码实时数据包 ===>> {}", protocol.getAgvNo(), JSON.toJSONString(agv_13_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)); |
| | | News.info("Agv [{}] 心跳包 ===>> {}", protocol.getAgvNo(), JSON.toJSONString(agv_03_up)); |
| | | } |
| | | } |
| | | // 登陆包 |
| | | if (msgBody instanceof AGV_F0_UP) { |
| | | AGV_F0_UP agv_f0_up = (AGV_F0_UP) msgBody; |
| | | this.sync(agv_f0_up, detail); |
| | | log.info("Agv [{}] 登陆包 ===>> {}", protocol.getAgvNo(), JSON.toJSONString(agv_f0_up)); |
| | | News.info("Agv [{}] 登陆包 ===>> {}", protocol.getAgvNo(), JSON.toJSONString(agv_f0_up)); |
| | | } |
| | | // 故障数据包 |
| | | 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)); |
| | | News.info("Agv [{}] 故障数据包 ===>> {}", protocol.getAgvNo(), JSON.toJSONString(agv_04_up)); |
| | | |
| | | // 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()); |
| | | detail.setErrorTime(now); |
| | | } |
| | | |
| | | // 故障复位 |
| | | if (!Cools.isEmpty(detail.realError())) { |
| | | assert detail.getErrorTime() != null; |
| | | if (DateUtils.diffToSeconds(detail.getErrorTime(), new Date()) > 20) { |
| | | if (DateUtils.diffToSeconds(detail.getErrorTime(), now) > 10) { |
| | | detail.setError(MapDataConstant.EMPTY_OF_ERROR); |
| | | } |
| | | } |
| | | if (!agvDetailService.updateById(detail)) { |
| | | log.error("Agv [{}] 详情更新失败 !!!", protocol.getAgvNo()); |
| | | News.error("Agv [{}] 详情更新失败 !!!", protocol.getAgvNo()); |
| | | } |
| | | |
| | | } |
| | |
| | | private void sync(AGV_12_UP mesBody, AgvDetail detail) { |
| | | detail.setStatus(mesBody.getStatus()); |
| | | |
| | | Code code = codeService.selectByData(mesBody.getQrCode()); |
| | | Code code = codeService.getCacheByData(mesBody.getQrCode()); |
| | | if (null != code) { |
| | | detail.setCode(code.getId()); |
| | | detail.setLastCode(null); |
| | | detail.setPos(1); |
| | | // if (!agvDetailService.updatePosCode(detail.getId(), code.getId())) { |
| | | // log.error("Agv [{}] 更新定位数据失败 !!!", agvService.getById(detail.getAgvId()).getUuid()); |
| | | // News.error("Agv [{}] 更新定位数据失败 !!!", agvService.getById(detail.getAgvId()).getUuid()); |
| | | // } |
| | | } else { |
| | | log.error("Agv [{}] 更新定位数据失败 !!!上传条码:{}", agvService.getById(detail.getAgvId()).getUuid(), mesBody.getQrCode()); |
| | | News.error("Agv [{}] 更新定位数据失败 !!!上传条码:{}", agvService.getById(detail.getAgvId()).getUuid(), mesBody.getQrCode()); |
| | | } |
| | | |
| | | // 地面码偏移 |
| | |
| | | private void sync(AGV_13_UP mesBody, AgvDetail detail) { |
| | | detail.setStatus(mesBody.getStatus()); |
| | | |
| | | Code code = codeService.selectByData(mesBody.getQrCode()); |
| | | Code code = codeService.getCacheByData(mesBody.getQrCode()); |
| | | if (null != code) { |
| | | |
| | | if (!detail.getAgvStatus().equals(AgvStatusType.CHARGE)) { |
| | |
| | | |
| | | |
| | | } else { |
| | | log.error("Agv [{}] 更新定位数据失败 !!!上传条码:{}", agvService.getById(detail.getAgvId()).getUuid(), mesBody.getQrCode()); |
| | | News.error("Agv [{}] 更新定位数据失败 !!!上传条码:{}", agvService.getById(detail.getAgvId()).getUuid(), mesBody.getQrCode()); |
| | | } |
| | | |
| | | detail.setStraightVal((double) mesBody.getStraightDirectionPosition()); |
| | |
| | | |
| | | } |
| | | |
| | | } |
| | | } |