| | |
| | | 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; |
| | | setSyncTaskNo(0); |
| | | setProtocolStatus(ShuttleProtocolStatusType.IDLE); |
| | | return true; |
| | | } |
| | | |
| | | @Override |
| | |
| | | @Override |
| | | public boolean isIdle(ExecuteSupport support) { |
| | | if (null != support) { |
| | | if (!support.judgement()) { |
| | | return false; |
| | | Boolean judgement = support.judgement(); |
| | | if (judgement != null && !judgement) { |
| | | return true; |
| | | } |
| | | } |
| | | |
| | | if (this.shuttleProtocol.getDeviceStatus() == null |
| | | || this.shuttleProtocol.getPakMk() == null |
| | | || this.shuttleProtocol.getErrorCode() == null |
| | |
| | | boolean res = (this.shuttleProtocol.getDeviceStatus() == 3 || this.shuttleProtocol.getDeviceStatus() == 11) |
| | | && this.shuttleProtocol.getPakMk() |
| | | && this.shuttleProtocol.getErrorCode().equals("0") |
| | | && (this.shuttleProtocol.getProtocolStatus() == ShuttleProtocolStatusType.IDLE.id || this.shuttleProtocol.getProtocolStatus() == ShuttleProtocolStatusType.WAITING.id) |
| | | ; |
| | | && (this.shuttleProtocol.getProtocolStatus() == ShuttleProtocolStatusType.IDLE.id |
| | | || this.shuttleProtocol.getProtocolStatus() == ShuttleProtocolStatusType.WAITING.id |
| | | || this.shuttleProtocol.getProtocolStatus() == ShuttleProtocolStatusType.CHARGING_WAITING.id); |
| | | return res; |
| | | } |
| | | |
| | | @Override |
| | | public boolean isDeviceIdle() { |
| | | return isDeviceIdle(null); |
| | | } |
| | | |
| | | @Override |
| | | public boolean isDeviceIdle(ExecuteSupport support) { |
| | | if (null != support) { |
| | | Boolean judgement = support.judgement(); |
| | | if (judgement != null && !judgement) { |
| | | return true; |
| | | } |
| | | } |
| | | |
| | | if (this.shuttleProtocol.getDeviceStatus() == null |
| | | || this.shuttleProtocol.getPakMk() == null |
| | | || this.shuttleProtocol.getErrorCode() == null |
| | |
| | | } |
| | | 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 |
| | | public ShuttleCommand getMoveCommand(Integer taskNo, String startCodeNum, String distCodeNum, Integer allDistance, Integer runDirection, Integer runSpeed) { |
| | | public synchronized boolean setProtocolStatus(ShuttleProtocolStatusType status) { |
| | | this.shuttleProtocol.setProtocolStatus(status); |
| | | return true; |
| | | } |
| | | |
| | | @Override |
| | | public synchronized boolean setSyncTaskNo(Integer taskNo) { |
| | | this.shuttleProtocol.setSyncTaskNo(taskNo); |
| | | return true; |
| | | } |
| | | |
| | | @Override |
| | | public synchronized boolean setPakMk(boolean pakMk) { |
| | | this.shuttleProtocol.setPakMk(pakMk); |
| | | return true; |
| | | } |
| | | |
| | | @Override |
| | | public ShuttleCommand getMoveCommand(Integer taskNo, String startCodeNum, String distCodeNum, Integer allDistance, Integer runDirection, Integer runSpeed, List<NavigateNode> nodes) { |
| | | 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", generateDeviceTaskNo(taskNo)); |
| | | body.put("taskId", taskNo); |
| | | |
| | | LocService locService = SpringUtils.getBean(LocService.class); |
| | | Loc loc = locService.getOne(new LambdaQueryWrapper<Loc>() |