| | |
| | | import com.zy.asrs.framework.exception.CoolException; |
| | | import com.zy.asrs.wcs.common.ExecuteSupport; |
| | | import com.zy.asrs.wcs.core.domain.param.ShuttleMoveLocParam; |
| | | import com.zy.asrs.wcs.core.entity.BasLift; |
| | | import com.zy.asrs.wcs.core.entity.BasShuttle; |
| | | import com.zy.asrs.wcs.core.entity.Loc; |
| | | 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.*; |
| | | import com.zy.asrs.wcs.core.service.BasLiftService; |
| | | import com.zy.asrs.wcs.core.service.BasShuttleService; |
| | | import com.zy.asrs.wcs.core.service.LocService; |
| | | import com.zy.asrs.wcs.core.utils.LiftDispatcher; |
| | | import com.zy.asrs.wcs.core.utils.NavigateUtils; |
| | | import com.zy.asrs.wcs.core.utils.Utils; |
| | | import com.zy.asrs.wcs.rcs.News; |
| | |
| | | @SuppressWarnings("all") |
| | | public class SurayShuttleThread implements ShuttleThread { |
| | | |
| | | private static final String API_URL = "http://192.168.7.149:8082"; |
| | | private static String API_URL = "http://127.0.0.1:8082"; |
| | | |
| | | private Device device; |
| | | private RedisUtil redisUtil; |
| | |
| | | public SurayShuttleThread(Device device,RedisUtil redisUtil) { |
| | | this.device = device; |
| | | this.redisUtil = redisUtil; |
| | | API_URL = "http://" + device.getIp() + ":" + device.getPort(); |
| | | } |
| | | |
| | | @Override |
| | |
| | | if (deviceStatus == 255) { |
| | | //离线 |
| | | shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.OFFLINE); |
| | | }else if (deviceStatus == 3) { |
| | | //就绪状态且离线 |
| | | if (shuttleProtocol.getProtocolStatusType().equals(ShuttleProtocolStatusType.OFFLINE)) { |
| | | shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.IDLE); |
| | | } |
| | | } |
| | | |
| | | if(deviceStatus != 4 || deviceStatus != 6 || deviceStatus != 7 || deviceStatus != 8 || deviceStatus != 255 || deviceStatus != -1) { |
| | |
| | | //当前二维码 |
| | | shuttleProtocol.setCurrentCode(data.getString("groundCode") == null ? "0" : data.getString("groundCode")); |
| | | //电池电量 |
| | | shuttleProtocol.setBatteryPower(data.getString("battery") == null ? "0%" : data.getString("battery")); |
| | | shuttleProtocol.setBatteryPower(data.getString("battery") == null ? "0" : data.getString("battery")); |
| | | //故障 |
| | | shuttleProtocol.setErrorCode(deviceStatus == 6 ? "1" : "0"); |
| | | |
| | |
| | | } |
| | | |
| | | @Override |
| | | public boolean updateLocation(ShuttleCommand command) { |
| | | try { |
| | | String loginToken = requestLoginToken(); |
| | | if (loginToken == null) { |
| | | return false; |
| | | } |
| | | |
| | | HashMap<String, Object> headers = new HashMap<>(); |
| | | headers.put("Authorization", "Bearer " + loginToken); |
| | | |
| | | String response = new HttpHandler.Builder() |
| | | .setUri(API_URL) |
| | | .setPath("/RDS/changeLocation") |
| | | .setHeaders(headers) |
| | | .setJson(command.getBody()) |
| | | .setTimeout(60, TimeUnit.SECONDS) |
| | | .build() |
| | | .doPost(); |
| | | JSONObject jsonObject = JSON.parseObject(response); |
| | | Integer code = jsonObject.getInteger("code"); |
| | | if (code.equals(200)) { |
| | | this.shuttleProtocol.setSendTime(System.currentTimeMillis());//指令下发时间 |
| | | return true; |
| | | } |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | @Override |
| | | public boolean isIdle() { |
| | | return this.isIdle(null); |
| | | } |
| | |
| | | if (shuttleService == null) { |
| | | return false; |
| | | } |
| | | BasShuttle basShuttle = shuttleService.getById(this.device.getDeviceNo()); |
| | | BasShuttle basShuttle = shuttleService.getOne(new LambdaQueryWrapper<BasShuttle>().eq(BasShuttle::getDeviceId, this.device.getId())); |
| | | if (basShuttle == null) { |
| | | return false; |
| | | } |
| | |
| | | case SHUTTLE_MOVE_DOWN_PALLET://穿梭车移动并托盘下降 |
| | | case SHUTTLE_MOVE_FROM_LIFT://出提升机 |
| | | case SHUTTLE_MOVE_TO_LIFT://进提升机 |
| | | case SHUTTLE_PALLET_LIFT://托盘顶升 |
| | | case SHUTTLE_PALLET_DOWN://托盘下降 |
| | | case SHUTTLE_CHARGE_ON://充电开 |
| | | case SHUTTLE_CHARGE_OFF://充电关 |
| | | case SHUTTLE_MOVE_STANDBY://穿梭车移动到待机位 |
| | | return deviceTaskNo; |
| | | default: |
| | | return taskNo; |
| | |
| | | body.put("nodeY", loc.getBay()); |
| | | body.put("nodeZ", loc.getLev()); |
| | | |
| | | //检测目标点是否为提升机 |
| | | BasLiftService basLiftService = SpringUtils.getBean(BasLiftService.class); |
| | | BasLift basLift = basLiftService.getOne(new LambdaQueryWrapper<BasLift>().eq(BasLift::getRow, loc.getRow()) |
| | | .eq(BasLift::getBay, loc.getBay()) |
| | | .eq(BasLift::getHostId, this.device.getHostId())); |
| | | if (basLift != null) { |
| | | LiftDispatcher liftDispatcher = SpringUtils.getBean(LiftDispatcher.class); |
| | | Integer realLev = liftDispatcher.getLiftLevOffset(basLift.getDeviceId().intValue(), loc.getLev()); |
| | | body.put("nodeZ", realLev); |
| | | } |
| | | |
| | | ShuttleCommand command = new ShuttleCommand(); |
| | | command.setShuttleNo(Integer.parseInt(this.device.getDeviceNo())); |
| | | command.setBody(JSON.toJSONString(body)); |
| | |
| | | |
| | | @Override |
| | | public ShuttleCommand getLiftCommand(Integer taskNo, Boolean lift) { |
| | | int deviceTaskNo = this.generateDeviceTaskNo(taskNo, lift ? MotionCtgType.SHUTTLE_PALLET_LIFT : MotionCtgType.SHUTTLE_PALLET_DOWN); |
| | | |
| | | HashMap<String, Object> body = new HashMap<>(); |
| | | body.put("messageName", "actionOrder"); |
| | | 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", taskNo); |
| | | body.put("taskId", deviceTaskNo); |
| | | body.put("action", lift ? 1 : 2); |
| | | |
| | | ShuttleCommand command = new ShuttleCommand(); |
| | |
| | | |
| | | @Override |
| | | public ShuttleCommand getChargeCommand(Integer taskNo, Boolean charge) { |
| | | int deviceTaskNo = this.generateDeviceTaskNo(taskNo, charge ? MotionCtgType.SHUTTLE_CHARGE_ON : MotionCtgType.SHUTTLE_CHARGE_OFF); |
| | | |
| | | HashMap<String, Object> body = new HashMap<>(); |
| | | 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", taskNo); |
| | | body.put("taskId", deviceTaskNo); |
| | | body.put("action", charge ? 3 : 4); |
| | | |
| | | ShuttleCommand command = new ShuttleCommand(); |
| | |
| | | return command; |
| | | } |
| | | |
| | | @Override |
| | | public ShuttleCommand getUpdateLocationCommand(Integer taskNo, String locNo) { |
| | | HashMap<String, Object> body = new HashMap<>(); |
| | | 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())); |
| | | |
| | | String coord = "(" + Utils.getRow(locNo) + "," + Utils.getBay(locNo) + "," + Utils.getLev(locNo) + ")"; |
| | | body.put("coord", coord); |
| | | |
| | | ShuttleCommand command = new ShuttleCommand(); |
| | | command.setShuttleNo(Integer.parseInt(this.device.getDeviceNo())); |
| | | command.setBody(JSON.toJSONString(body)); |
| | | command.setMode(ShuttleCommandModeType.UPDATE_LOCATION.id); |
| | | return command; |
| | | } |
| | | |
| | | //***************设备层通讯-不同厂商设备通讯方案不一致*************** |
| | | |
| | | //请求登录 |
| | | private String requestLoginToken() { |
| | | try { |
| | | Object redisToken = redisUtil.get(DeviceRedisConstant.RDS_LOGIN_TOKEN); |
| | | if(redisToken != null) { |
| | | return redisToken.toString(); |
| | | } |
| | | |
| | | HashMap<String, Object> param = new HashMap<>(); |
| | | param.put("username", "admin"); |
| | | param.put("password", "admin123"); |
| | |
| | | JSONObject jsonObject = JSON.parseObject(response); |
| | | Integer code = jsonObject.getInteger("code"); |
| | | if (code.equals(200)) { |
| | | return jsonObject.getString("token"); |
| | | String token = jsonObject.getString("token"); |
| | | redisUtil.set(DeviceRedisConstant.RDS_LOGIN_TOKEN, token, 60 * 15); |
| | | return token; |
| | | } |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |