| | |
| | | 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://127.0.0.1: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 synchronized boolean movePath(List<NavigateNode> nodes, Integer taskNo) { |
| | | try { |
| | | //默认地图母轨方向x |
| | | String mapDirection = "x"; |
| | | DictService dictService = SpringUtils.getBean(DictService.class); |
| | | Dict dict = dictService.getOne(new LambdaQueryWrapper<Dict>() |
| | | .eq(Dict::getFlag, "direction_map") |
| | | .eq(Dict::getStatus, 1)); |
| | | if (dict != null) { |
| | | mapDirection = dict.getValue(); |
| | | } |
| | | |
| | | String loginToken = requestLoginToken(); |
| | | if (loginToken == null) { |
| | | return false; |
| | |
| | | NavigateNode startPath = sectionNodes.get(0); |
| | | //结束路径 |
| | | NavigateNode targetPath = sectionNodes.get(sectionNodes.size() - 1); |
| | | if (ShuttleRunDirection.get(startPath.getDirection()) == ShuttleRunDirection.LEFT |
| | | if (mapDirection.equals("y") && ShuttleRunDirection.get(startPath.getDirection()) == ShuttleRunDirection.LEFT |
| | | || ShuttleRunDirection.get(startPath.getDirection()) == ShuttleRunDirection.RIGHT) { |
| | | //子轨方向 |
| | | oper = 6; |
| | | } else { |
| | | //母轨方向 |
| | | oper = 5; |
| | | } else { |
| | | //子轨方向 |
| | | oper = 6; |
| | | } |
| | | |
| | | for (int i = 0; i < sectionNodes.size(); i++) { |
| | |
| | | public synchronized boolean reset(ShuttleCommand command) { |
| | | setSyncTaskNo(0); |
| | | setProtocolStatus(ShuttleProtocolStatusType.IDLE); |
| | | enableMoveLoc(null, false); |
| | | return true; |
| | | } |
| | | |
| | | @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 |
| | |
| | | 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; |
| | | } |
| | |
| | | } |
| | | |
| | | @Override |
| | | public boolean enableMoveLoc(ShuttleMoveLocParam param) { |
| | | shuttleProtocol.setMoveLoc(true);//开启跑库 |
| | | shuttleProtocol.setMoveType(param.getMoveType()); |
| | | shuttleProtocol.setXStart(param.getStartX()); |
| | | shuttleProtocol.setXTarget(param.getTargetX()); |
| | | shuttleProtocol.setXCurrent(param.getStartX()); |
| | | shuttleProtocol.setYStart(param.getStartY()); |
| | | shuttleProtocol.setYTarget(param.getTargetY()); |
| | | shuttleProtocol.setYCurrent(param.getStartY()); |
| | | public boolean enableMoveLoc(ShuttleMoveLocParam param, boolean enable) { |
| | | if (enable) { |
| | | shuttleProtocol.setMoveLoc(true);//开启跑库 |
| | | shuttleProtocol.setMoveType(param.getMoveType()); |
| | | shuttleProtocol.setXStart(param.getStartX()); |
| | | shuttleProtocol.setXTarget(param.getTargetX()); |
| | | shuttleProtocol.setXCurrent(param.getStartX()); |
| | | shuttleProtocol.setYStart(param.getStartY()); |
| | | shuttleProtocol.setYTarget(param.getTargetY()); |
| | | shuttleProtocol.setYCurrent(param.getStartY()); |
| | | }else { |
| | | shuttleProtocol.setMoveLoc(false); |
| | | shuttleProtocol.setMoveType(0); |
| | | shuttleProtocol.setXStart(0); |
| | | shuttleProtocol.setXTarget(0); |
| | | shuttleProtocol.setXCurrent(0); |
| | | shuttleProtocol.setYStart(0); |
| | | shuttleProtocol.setYTarget(0); |
| | | shuttleProtocol.setYCurrent(0); |
| | | } |
| | | return true; |
| | | } |
| | | |
| | |
| | | body.put("nodeX", loc.getRow()); |
| | | 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())); |
| | |
| | | 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; |
| | | } |
| | | |
| | | //***************设备层通讯-不同厂商设备通讯方案不一致*************** |
| | | |
| | | //请求登录 |