|  |  |  | 
|---|
|  |  |  | import com.zy.asrs.wcs.core.model.NavigateNode; | 
|---|
|  |  |  | import com.zy.asrs.wcs.core.model.command.ShuttleCommand; | 
|---|
|  |  |  | import com.zy.asrs.wcs.core.model.command.ShuttleRedisCommand; | 
|---|
|  |  |  | import com.zy.asrs.wcs.core.model.enums.ShuttleCommandModeType; | 
|---|
|  |  |  | import com.zy.asrs.wcs.core.model.enums.ShuttleRunDirection; | 
|---|
|  |  |  | import com.zy.asrs.wcs.core.model.enums.*; | 
|---|
|  |  |  | import com.zy.asrs.wcs.core.service.BasShuttleService; | 
|---|
|  |  |  | import com.zy.asrs.wcs.core.service.LocService; | 
|---|
|  |  |  | import com.zy.asrs.wcs.core.utils.NavigateUtils; | 
|---|
|  |  |  | import com.zy.asrs.wcs.core.utils.Utils; | 
|---|
|  |  |  | import com.zy.asrs.wcs.rcs.News; | 
|---|
|  |  |  | import com.zy.asrs.wcs.rcs.cache.OutputQueue; | 
|---|
|  |  |  | import com.zy.asrs.wcs.rcs.constant.DeviceRedisConstant; | 
|---|
|  |  |  | 
|---|
|  |  |  | import com.zy.asrs.wcs.rcs.thread.ShuttleThread; | 
|---|
|  |  |  | import com.zy.asrs.wcs.core.utils.RedisUtil; | 
|---|
|  |  |  | import com.zy.asrs.wcs.rcs.entity.Device; | 
|---|
|  |  |  | import com.zy.asrs.wcs.system.entity.Dict; | 
|---|
|  |  |  | import com.zy.asrs.wcs.system.service.DictService; | 
|---|
|  |  |  | import lombok.Data; | 
|---|
|  |  |  | import lombok.extern.slf4j.Slf4j; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | //离线 | 
|---|
|  |  |  | shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.OFFLINE); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if(deviceStatus != 4 || deviceStatus != 6 || deviceStatus != 7 || deviceStatus != 8 || deviceStatus != 255 || deviceStatus != -1) { | 
|---|
|  |  |  | shuttleProtocol.setMode(1);//自动状态 | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | shuttleProtocol.setDeviceStatus(deviceStatus); | 
|---|
|  |  |  | //当前二维码 | 
|---|
|  |  |  | shuttleProtocol.setCurrentCode(data.getString("groundCode") == null ? "0" : data.getString("groundCode")); | 
|---|
|  |  |  | 
|---|
|  |  |  | extend.setStatusDescription(data.getString("statusDescription"));//状态描述 | 
|---|
|  |  |  | shuttleProtocol.setExtend(extend);//扩展字段 | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //最近一次在线时间 | 
|---|
|  |  |  | shuttleProtocol.setLastOnlineTime(System.currentTimeMillis()); | 
|---|
|  |  |  | ///读取四向穿梭车状态-end | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //小车处于忙碌状态,将标记置为true | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Override | 
|---|
|  |  |  | public ShuttleProtocol getStatus() { | 
|---|
|  |  |  | if (this.shuttleProtocol == null) { | 
|---|
|  |  |  | return null; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | return this.shuttleProtocol.clone(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | param.put("messageName", "runRoute"); | 
|---|
|  |  |  | param.put("msgTime", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())); | 
|---|
|  |  |  | param.put("deviceNo", device.getDeviceNo()); | 
|---|
|  |  |  | param.put("taskId", generateDeviceTaskNo(taskNo)); | 
|---|
|  |  |  | param.put("taskId", taskNo); | 
|---|
|  |  |  | param.put("nodeNum", nodes.size()); | 
|---|
|  |  |  | param.put("modes", modes); | 
|---|
|  |  |  | String response = new HttpHandler.Builder() | 
|---|
|  |  |  | 
|---|
|  |  |  | JSONObject jsonObject = JSON.parseObject(response); | 
|---|
|  |  |  | Integer code = jsonObject.getInteger("code"); | 
|---|
|  |  |  | if (code.equals(200)) { | 
|---|
|  |  |  | this.shuttleProtocol.setSendTime(System.currentTimeMillis());//指令下发时间 | 
|---|
|  |  |  | return true; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } catch (Exception e) { | 
|---|
|  |  |  | 
|---|
|  |  |  | JSONObject jsonObject = JSON.parseObject(response); | 
|---|
|  |  |  | Integer code = jsonObject.getInteger("code"); | 
|---|
|  |  |  | if (code.equals(200)) { | 
|---|
|  |  |  | this.shuttleProtocol.setSendTime(System.currentTimeMillis());//指令下发时间 | 
|---|
|  |  |  | return true; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } catch (Exception e) { | 
|---|
|  |  |  | 
|---|
|  |  |  | JSONObject jsonObject = JSON.parseObject(response); | 
|---|
|  |  |  | Integer code = jsonObject.getInteger("code"); | 
|---|
|  |  |  | if (code.equals(200)) { | 
|---|
|  |  |  | this.shuttleProtocol.setSendTime(System.currentTimeMillis());//指令下发时间 | 
|---|
|  |  |  | return true; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } catch (Exception e) { | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Override | 
|---|
|  |  |  | public synchronized boolean reset(ShuttleCommand command) { | 
|---|
|  |  |  | return false; | 
|---|
|  |  |  | this.shuttleProtocol.setTaskNo(0); | 
|---|
|  |  |  | this.shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.IDLE); | 
|---|
|  |  |  | return true; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Override | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | return Integer.valueOf(this.shuttleProtocol.getBatteryPower()) < chargeLine; | 
|---|
|  |  |  | } catch (Exception e) { | 
|---|
|  |  |  | News.error("fail", e); | 
|---|
|  |  |  | return false; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Override | 
|---|
|  |  |  | public boolean isChargingCompleted() { | 
|---|
|  |  |  | Integer maxPower = 100; | 
|---|
|  |  |  | DictService dictService = SpringUtils.getBean(DictService.class); | 
|---|
|  |  |  | if (dictService != null) { | 
|---|
|  |  |  | Dict chargeMaxValue = dictService.getOne(new LambdaQueryWrapper<Dict>() | 
|---|
|  |  |  | .eq(Dict::getFlag, "chargeMaxValue") | 
|---|
|  |  |  | .eq(Dict::getStatus, 1)); | 
|---|
|  |  |  | if (chargeMaxValue != null) { | 
|---|
|  |  |  | maxPower = Integer.parseInt(chargeMaxValue.getValue()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (this.shuttleProtocol.getBatteryPower() == null) { | 
|---|
|  |  |  | return false; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (Integer.valueOf(this.shuttleProtocol.getBatteryPower()) >= 100) { | 
|---|
|  |  |  | if (Integer.valueOf(this.shuttleProtocol.getBatteryPower()) >= maxPower) { | 
|---|
|  |  |  | return true; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | return false; | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Override | 
|---|
|  |  |  | public int generateDeviceTaskNo(int taskNo) { | 
|---|
|  |  |  | int no = taskNo % 255; | 
|---|
|  |  |  | if (no <= 1) { | 
|---|
|  |  |  | no = 2; | 
|---|
|  |  |  | public int generateDeviceTaskNo(int taskNo, MotionCtgType motionCtgType) { | 
|---|
|  |  |  | int deviceTaskNo = taskNo; | 
|---|
|  |  |  | try { | 
|---|
|  |  |  | deviceTaskNo = Utils.getTaskNo("SURAY_SHUTTLE"); | 
|---|
|  |  |  | } catch (Exception e) { | 
|---|
|  |  |  | return taskNo; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | return no; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | switch (Objects.requireNonNull(MotionCtgType.get(String.valueOf(motionCtgType)))){ | 
|---|
|  |  |  | case SHUTTLE_MOVE://穿梭车移动 | 
|---|
|  |  |  | case SHUTTLE_MOVE_LIFT_PALLET://穿梭车顶升并移动 | 
|---|
|  |  |  | case SHUTTLE_MOVE_DOWN_PALLET://穿梭车移动并托盘下降 | 
|---|
|  |  |  | case SHUTTLE_MOVE_FROM_LIFT://出提升机 | 
|---|
|  |  |  | case SHUTTLE_MOVE_TO_LIFT://进提升机 | 
|---|
|  |  |  | return deviceTaskNo; | 
|---|
|  |  |  | default: | 
|---|
|  |  |  | return taskNo; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Override | 
|---|
|  |  |  | 
|---|
|  |  |  | body.put("messageName", "runOrder"); | 
|---|
|  |  |  | body.put("msgTime", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())); | 
|---|
|  |  |  | body.put("deviceNo", Integer.parseInt(this.device.getDeviceNo())); | 
|---|
|  |  |  | body.put("taskId", generateDeviceTaskNo(taskNo)); | 
|---|
|  |  |  | body.put("taskId", taskNo); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | LocService locService = SpringUtils.getBean(LocService.class); | 
|---|
|  |  |  | Loc loc = locService.getOne(new LambdaQueryWrapper<Loc>() | 
|---|