| | |
| | | |
| | | import com.alibaba.fastjson.JSON; |
| | | import com.alibaba.fastjson.JSONObject; |
| | | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| | | import com.zy.asrs.common.utils.HttpHandler; |
| | | import com.zy.asrs.framework.common.DateUtils; |
| | | import com.zy.asrs.framework.common.SpringUtils; |
| | | import com.zy.asrs.framework.exception.CoolException; |
| | | import com.zy.asrs.wcs.core.entity.Loc; |
| | | import com.zy.asrs.wcs.core.model.command.LiftCommand; |
| | | import com.zy.asrs.wcs.core.model.command.ShuttleCommand; |
| | | import com.zy.asrs.wcs.core.model.enums.LiftCommandModeType; |
| | | import com.zy.asrs.wcs.core.model.enums.ShuttleCommandModeType; |
| | | import com.zy.asrs.wcs.core.service.LocService; |
| | | import com.zy.asrs.wcs.rcs.News; |
| | | import com.zy.asrs.wcs.rcs.cache.OutputQueue; |
| | | import com.zy.asrs.wcs.rcs.model.enums.LiftProtocolStatusType; |
| | |
| | | import com.zy.asrs.wcs.rcs.thread.LiftThread; |
| | | import com.zy.asrs.wcs.core.utils.RedisUtil; |
| | | import com.zy.asrs.wcs.rcs.entity.Device; |
| | | import lombok.Data; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | |
| | | import java.text.MessageFormat; |
| | |
| | | if (data != null) { |
| | | if (null == liftProtocol) { |
| | | liftProtocol = new LiftProtocol(); |
| | | liftProtocol.setLiftNo(device.getDeviceNo()); |
| | | liftProtocol.setLiftNo(Integer.valueOf(device.getDeviceNo())); |
| | | liftProtocol.setProtocolStatus(LiftProtocolStatusType.IDLE); |
| | | liftProtocol.setDevice(device); |
| | | |
| | | InnerLiftExtend innerLiftExtend = new InnerLiftExtend(); |
| | | innerLiftExtend.setLock(false);//默认未锁定 |
| | | liftProtocol.setExtend(innerLiftExtend); |
| | | } |
| | | |
| | | //----------读取提升机状态----------- |
| | |
| | | liftProtocol.setErrorCode(""); |
| | | //层 |
| | | liftProtocol.setLev(data.getInteger("curFloor")); |
| | | |
| | | |
| | | //************补充扩展字段************* |
| | | InnerLiftExtend liftExtend = JSON.parseObject(JSON.toJSONString(liftProtocol.getExtend()), InnerLiftExtend.class); |
| | | liftExtend.setLock(data.getInteger("lockStatus") == 1 ? true : false); |
| | | liftProtocol.setExtend(liftExtend); |
| | | |
| | | // //前超限 |
| | | // liftProtocol.setFrontOverrun(status1[4]); |
| | | // //后超限 |
| | |
| | | @Override |
| | | public LiftProtocol getStatus() { |
| | | return this.liftProtocol; |
| | | } |
| | | |
| | | @Override |
| | | public Device getDevice() { |
| | | return this.device; |
| | | } |
| | | |
| | | @Override |
| | | public synchronized boolean move(LiftCommand 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/lifterTask") |
| | | .setHeaders(headers) |
| | | .setJson(command.getBody()) |
| | | .build() |
| | | .doPost(); |
| | | JSONObject jsonObject = JSON.parseObject(response); |
| | | Integer code = jsonObject.getInteger("code"); |
| | | if (code.equals(200)) { |
| | | return true; |
| | | } |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | @Override |
| | | public synchronized boolean palletInOut(LiftCommand 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/lifterTask") |
| | | .setHeaders(headers) |
| | | .setJson(command.getBody()) |
| | | .build() |
| | | .doPost(); |
| | | JSONObject jsonObject = JSON.parseObject(response); |
| | | Integer code = jsonObject.getInteger("code"); |
| | | if (code.equals(200)) { |
| | | return true; |
| | | } |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | @Override |
| | | public synchronized boolean lock(LiftCommand 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/lifterOperation") |
| | | .setHeaders(headers) |
| | | .setJson(command.getBody()) |
| | | .build() |
| | | .doPost(); |
| | | JSONObject jsonObject = JSON.parseObject(response); |
| | | Integer code = jsonObject.getInteger("code"); |
| | | if (code.equals(200)) { |
| | | return true; |
| | | } |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | @Override |
| | | public synchronized boolean unlock(LiftCommand 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/lifterOperation") |
| | | .setHeaders(headers) |
| | | .setJson(command.getBody()) |
| | | .build() |
| | | .doPost(); |
| | | JSONObject jsonObject = JSON.parseObject(response); |
| | | Integer code = jsonObject.getInteger("code"); |
| | | if (code.equals(200)) { |
| | | return true; |
| | | } |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | @Override |
| | | public synchronized boolean reset(LiftCommand command) { |
| | | return false; |
| | | } |
| | | |
| | | @Override |
| | | public boolean isIdle() { |
| | | InnerLiftExtend extend = (InnerLiftExtend) liftProtocol.getExtend();//获取扩展字段 |
| | | // 判断提升机是否自动、就绪、空闲、未锁定 |
| | | if (liftProtocol.getModel() |
| | | && !liftProtocol.getRun() |
| | | && liftProtocol.getReady() |
| | | && !extend.getLock() |
| | | ) { |
| | | return true; |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | //***************设备层通讯-不同厂商设备通讯方案不一致*************** |
| | |
| | | // } |
| | | // return null; |
| | | } |
| | | |
| | | //空载移动 |
| | | @Override |
| | | public LiftCommand getEmptyMoveCommand(Integer taskNo, Integer targetLev) { |
| | | HashMap<String, Object> body = new HashMap<>(); |
| | | body.put("messageName", "lifterTask"); |
| | | 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("startLayer", 0); |
| | | body.put("endLayer", targetLev); |
| | | body.put("model", 3);//空载移动 |
| | | |
| | | LiftCommand command = new LiftCommand(); |
| | | command.setLiftNo(Integer.valueOf(this.device.getDeviceNo())); |
| | | command.setBody(JSON.toJSONString(body)); |
| | | command.setMode(LiftCommandModeType.MOVE.id); |
| | | command.setOriginLev(0); |
| | | command.setTargetLev(targetLev); |
| | | return command; |
| | | } |
| | | |
| | | //载车移动 |
| | | @Override |
| | | public LiftCommand getMoveWithShuttleCommand(Integer taskNo, Integer originLev, Integer targetLev) { |
| | | HashMap<String, Object> body = new HashMap<>(); |
| | | body.put("messageName", "lifterTask"); |
| | | 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("startLayer", originLev); |
| | | body.put("endLayer", targetLev); |
| | | body.put("model", 2);//载车移动 |
| | | |
| | | LiftCommand command = new LiftCommand(); |
| | | command.setLiftNo(Integer.valueOf(this.device.getDeviceNo())); |
| | | command.setBody(JSON.toJSONString(body)); |
| | | command.setMode(LiftCommandModeType.MOVE.id); |
| | | command.setOriginLev(originLev); |
| | | command.setTargetLev(targetLev); |
| | | return command; |
| | | } |
| | | |
| | | //托盘出入 |
| | | @Override |
| | | public LiftCommand getPalletInOutCommand(Integer taskNo, Integer originLev, Integer targetLev, Integer originSta, Integer targetSta) { |
| | | HashMap<String, Object> body = new HashMap<>(); |
| | | body.put("messageName", "lifterTask"); |
| | | 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("startLayer", originLev); |
| | | body.put("endLayer", targetLev); |
| | | body.put("startLocation", originSta); |
| | | body.put("endLocation", targetSta); |
| | | body.put("model", 1);//托盘出入 |
| | | |
| | | LiftCommand command = new LiftCommand(); |
| | | command.setLiftNo(Integer.valueOf(this.device.getDeviceNo())); |
| | | command.setBody(JSON.toJSONString(body)); |
| | | command.setMode(LiftCommandModeType.PALLET_INOUT.id); |
| | | command.setOriginLev(originLev); |
| | | command.setTargetLev(targetLev); |
| | | command.setOriginSta(originSta); |
| | | command.setTargetSta(targetSta); |
| | | return command; |
| | | } |
| | | |
| | | //锁定/解锁提升机 |
| | | @Override |
| | | public LiftCommand getLockCommand(Integer taskNo, Boolean lock) { |
| | | HashMap<String, Object> body = new HashMap<>(); |
| | | body.put("messageName", "lifterOperation"); |
| | | 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("operation", lock ? 6 : 7); |
| | | body.put("remark", taskNo); |
| | | |
| | | LiftCommand command = new LiftCommand(); |
| | | command.setLiftNo(Integer.valueOf(this.device.getDeviceNo())); |
| | | command.setBody(JSON.toJSONString(body)); |
| | | command.setMode(lock ? LiftCommandModeType.LOCK.id : LiftCommandModeType.UNLOCK.id); |
| | | return command; |
| | | } |
| | | |
| | | //小车已到位/已驶离信号 |
| | | @Override |
| | | public LiftCommand getShuttleSignalCommand(Integer taskNo, Boolean signal) { |
| | | HashMap<String, Object> body = new HashMap<>(); |
| | | body.put("messageName", "lifterOperation"); |
| | | 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("operation", signal ? 4 : 5); |
| | | |
| | | LiftCommand command = new LiftCommand(); |
| | | command.setLiftNo(Integer.valueOf(this.device.getDeviceNo())); |
| | | command.setBody(JSON.toJSONString(body)); |
| | | command.setMode(signal ? LiftCommandModeType.LOCK.id : LiftCommandModeType.UNLOCK.id); |
| | | return command; |
| | | } |
| | | |
| | | /** |
| | | * 扩展字段 |
| | | */ |
| | | @Data |
| | | private class InnerLiftExtend { |
| | | |
| | | /** |
| | | * 提升机锁定 |
| | | */ |
| | | private Boolean lock = false; |
| | | |
| | | } |
| | | |
| | | } |