|  |  | 
 |  |  |  | 
 |  |  | import com.alibaba.fastjson.JSON; | 
 |  |  | import com.zy.acs.common.domain.AgvProtocol; | 
 |  |  | import com.zy.acs.common.domain.protocol.*; | 
 |  |  | import com.zy.acs.common.enums.AgvStatusType; | 
 |  |  | import com.zy.acs.common.enums.error.AgvErrorType; | 
 |  |  | import com.zy.acs.common.domain.protocol.AGV_12_UP; | 
 |  |  | import com.zy.acs.common.domain.protocol.IMessageBody; | 
 |  |  | import com.zy.acs.common.utils.GsonUtils; | 
 |  |  | import com.zy.acs.common.utils.RedisSupport; | 
 |  |  | import com.zy.acs.framework.common.Cools; | 
 |  |  | import com.zy.acs.framework.common.DateUtils; | 
 |  |  | import com.zy.acs.manager.core.constant.MapDataConstant; | 
 |  |  | import com.zy.acs.manager.core.domain.BackpackDto; | 
 |  |  | import com.zy.acs.manager.core.domain.VehicleFaultDto; | 
 |  |  | import com.zy.acs.manager.manager.entity.Agv; | 
 |  |  | import com.zy.acs.manager.manager.entity.AgvDetail; | 
 |  |  | import com.zy.acs.manager.manager.entity.Code; | 
 |  |  | import com.zy.acs.manager.manager.service.*; | 
 |  |  | 
 |  |  |         IMessageBody msgBody = protocol.getMessageBody(); | 
 |  |  |         assert msgBody != null; | 
 |  |  |  | 
 |  |  |         Agv agv = agvService.selectByUuid(protocol.getAgvNo()); | 
 |  |  |         if (null == agv) { | 
 |  |  |         Long agvId = agvService.getAgvId(protocol.getAgvNo()); | 
 |  |  |         if (null == agvId) { | 
 |  |  |             log.warn("Agv [{}] 尚未鉴权 !!!", protocol.getAgvNo()); | 
 |  |  |             return; | 
 |  |  |         } | 
 |  |  |         AgvDetail detail = agvDetailService.selectByAgvId(agv.getId()); | 
 |  |  |         AgvDetail detail = agvDetailService.selectByAgvId(agvId); | 
 |  |  |         if (null == detail) { | 
 |  |  |             detail = new AgvDetail(); | 
 |  |  |             detail.setAgvId(agv.getId()); | 
 |  |  |             detail.setAgvId(agvId); | 
 |  |  |             if (!agvDetailService.save(detail)) { | 
 |  |  |                 log.error("Agv [{}] 详情更新失败 !!!", protocol.getAgvNo()); | 
 |  |  |                 return; | 
 |  |  | 
 |  |  |             AGV_12_UP agv_12_up = (AGV_12_UP) msgBody; | 
 |  |  |  | 
 |  |  |             // unlock path | 
 |  |  |             threadPoolRegulator.getInstance().execute(() -> { | 
 |  |  |                 mapService.unlockPath(protocol.getAgvNo(), agv_12_up.getQrCode()); | 
 |  |  |             }); | 
 |  |  |             mapService.unlockPath(protocol.getAgvNo(), agv_12_up.getQrCode()); | 
 |  |  | //            threadPoolRegulator.getInstance().execute(() -> { | 
 |  |  | // | 
 |  |  | //            }); | 
 |  |  |             // finish jam | 
 |  |  |             threadPoolRegulator.getInstance().execute(() -> jamService.checkIfFinish(agv.getId(), agv_12_up.getQrCode())); | 
 |  |  |             threadPoolRegulator.getInstance().execute(() -> jamService.checkIfFinish(agvId, agv_12_up.getQrCode())); | 
 |  |  |  | 
 |  |  | //            websocketService.agvInfoBroadcastOnPos(new WebsocketDto<AGV_12_UP>("agv", agv.getUuid(), agv_12_up)); | 
 |  |  |             this.sync(agv_12_up, detail); | 
 |  |  | 
 |  |  |                 log.info("Agv [{}] 有码实时数据包 ===>> {}", protocol.getAgvNo(), JSON.toJSONString(agv_12_up)); | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  |         // 无码实时数据包 | 
 |  |  |         if (msgBody instanceof AGV_13_UP) { | 
 |  |  |             AGV_13_UP agv_13_up = (AGV_13_UP) msgBody; | 
 |  |  | //            websocketService.agvInfoBroadcastWithOutPos(new WebsocketDto<AGV_13_UP>("agv", agv.getUuid(), agv_13_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)); | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  |         // 心跳包 | 
 |  |  |         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 (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)); | 
 |  |  |         } | 
 |  |  |         // 故障数据包 | 
 |  |  |         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)); | 
 |  |  |  | 
 |  |  |             // 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 (!Cools.isEmpty(detail.realError())) { | 
 |  |  |             assert detail.getErrorTime() != null; | 
 |  |  |             if (DateUtils.diffToSeconds(detail.getErrorTime(), new Date()) > 20) { | 
 |  |  |                 detail.setError(MapDataConstant.EMPTY_OF_ERROR); | 
 |  |  |                 faultProcessor.reset(agvId); | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         if (!agvDetailService.updateById(detail)) { | 
 |  |  |             log.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); | 
 |  |  | 
 |  |  |  | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     // 无码实时数据包 | 
 |  |  |     private void sync(AGV_13_UP mesBody, AgvDetail detail) { | 
 |  |  |         detail.setStatus(mesBody.getStatus()); | 
 |  |  |  | 
 |  |  |         Code code = codeService.selectByData(mesBody.getQrCode()); | 
 |  |  |         if (null != code) { | 
 |  |  |  | 
 |  |  |             if (!detail.getAgvStatus().equals(AgvStatusType.CHARGE)) { | 
 |  |  |                 detail.setCode(null); | 
 |  |  |                 detail.setLastCode(code.getId()); | 
 |  |  |                 detail.setPos(0); | 
 |  |  |             } else { | 
 |  |  |                 detail.setCode(code.getId()); | 
 |  |  |                 detail.setLastCode(null); | 
 |  |  |                 detail.setPos(1); | 
 |  |  |             } | 
 |  |  |  | 
 |  |  |  | 
 |  |  |         } else { | 
 |  |  |             log.error("Agv [{}] 更新定位数据失败 !!!上传条码:{}", agvService.getById(detail.getAgvId()).getUuid(), mesBody.getQrCode()); | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         detail.setStraightVal((double) mesBody.getStraightDirectionPosition()); | 
 |  |  |  | 
 |  |  |         detail.setAgvAngle((double) mesBody.getAGVCurrentAngle()); | 
 |  |  |  | 
 |  |  |         detail.setGyroAngle((double) mesBody.getGyroAngle()); | 
 |  |  |  | 
 |  |  |         detail.setEncoderAngle((double) mesBody.getEncoderAngle()); | 
 |  |  |  | 
 |  |  |         detail.setHigh(mesBody.getCurrentAltitude()); | 
 |  |  |  | 
 |  |  |         detail.setSensorSts((long) mesBody.getSensorStatusFlags()); | 
 |  |  |  | 
 |  |  |         List<BackpackDto> backpackDtoList = new ArrayList<>(); | 
 |  |  |         backpackDtoList.add(new BackpackDto(1, mesBody.isTempLoc1())); | 
 |  |  |         backpackDtoList.add(new BackpackDto(2, mesBody.isTempLoc2())); | 
 |  |  |         backpackDtoList.add(new BackpackDto(3, mesBody.isTempLoc3())); | 
 |  |  |         backpackDtoList.add(new BackpackDto(4, mesBody.isTempLoc4())); | 
 |  |  |         backpackDtoList.add(new BackpackDto(5, mesBody.isTempLoc5())); | 
 |  |  |         backpackDtoList.add(new BackpackDto(6, mesBody.isTempLoc6())); | 
 |  |  |         backpackDtoList.add(new BackpackDto(7, mesBody.isTempLoc7())); | 
 |  |  |         detail.setBackpack(GsonUtils.toJson(backpackDtoList)); | 
 |  |  |  | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     // 心跳包 | 
 |  |  |     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()); | 
 |  |  |  | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     // 登陆包 | 
 |  |  |     private void sync(AGV_F0_UP mesBody, AgvDetail detail) { | 
 |  |  |  | 
 |  |  |     } | 
 |  |  |  | 
 |  |  | } |