package com.zy.asrs.wcs.rcs.thread.impl; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.zy.asrs.common.utils.HttpHandler; import com.zy.asrs.framework.common.DateUtils; import com.zy.asrs.framework.exception.CoolException; 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.model.protocol.LiftProtocol; 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.extern.slf4j.Slf4j; import java.text.MessageFormat; import java.text.SimpleDateFormat; import java.util.Date; import java.util.HashMap; @Slf4j @SuppressWarnings("all") public class SurayLiftThread implements LiftThread { private static final String API_URL = "http://127.0.0.1:8082"; private Device device; private RedisUtil redisUtil; private LiftProtocol liftProtocol; public SurayLiftThread(Device device,RedisUtil redisUtil) { this.device = device; this.redisUtil = redisUtil; } @Override public void run() { News.info("{}号提升机线程启动", device.getDeviceNo()); this.connect(); while (true) { try { read(); Thread.sleep(500); } catch (Exception e) { e.printStackTrace(); } } } private void read() { try { readStatus(); // //提升机处于运行状态,将标记置为false // if (liftProtocol.getBusy()) { // liftProtocol.setPakMk(false); // } // // //提升机处于未运行、就绪、标记true、有任务号 // if (!liftProtocol.getBusy() // && !liftProtocol.getPakMk() // && liftProtocol.getTaskNo() != 0) { // //还有未完成的命令 // executeWork(liftProtocol.getTaskNo()); // } } catch (Exception e) { OutputQueue.LIFT.offer(MessageFormat.format("【{0}】读取提升机状态信息失败 ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), device.getId(), device.getIp(), device.getPort())); } } private void readStatus() { try { //获取提升机数据 JSONObject data = requestDeviceStatus(); if (data != null) { if (null == liftProtocol) { liftProtocol = new LiftProtocol(); liftProtocol.setLiftNo(device.getDeviceNo()); liftProtocol.setProtocolStatus(LiftProtocolStatusType.IDLE); liftProtocol.setDevice(device); } //----------读取提升机状态----------- //模式 liftProtocol.setModel(true); //运行状态 liftProtocol.setRun(data.getInteger("runningstate") == 1); //就绪状态 liftProtocol.setReady(data.getInteger("readyState") == 1); //有托盘 liftProtocol.setHasTray(data.getString("haveCargo").equals("Y")); //有小车 liftProtocol.setHasCar(data.getString("haveCar").equals("Y")); //故障码 liftProtocol.setErrorCode(""); //层 liftProtocol.setLev(data.getInteger("curFloor")); // //前超限 // liftProtocol.setFrontOverrun(status1[4]); // //后超限 // liftProtocol.setBackOverrun(status1[5]); // //左超限 // liftProtocol.setLeftOverrun(status1[6]); // //右超限 // liftProtocol.setRightOverrun(status1[7]); // //超高 // liftProtocol.setOverHeight(status2[0]); // //超重 // liftProtocol.setOverWeight(status2[1]); // //有托盘 // liftProtocol.setHasTray(status2[5]); // //有小车 // liftProtocol.setHasCar(status2[6]); // //设备故障 // liftProtocol.setDeviceError(status2[7]); // //任务号 // liftProtocol.setTaskNo(siemensS7Net.getByteTransform().TransInt16(result1.Content, 2)); // //目的地址 // liftProtocol.setDistAddress(siemensS7Net.getByteTransform().TransInt16(result1.Content, 4)); // //已完成任务号 // liftProtocol.setCompleteTaskNo(siemensS7Net.getByteTransform().TransInt16(result1.Content, 6)); // liftProtocol.setLev(lev); }else { OutputQueue.LIFT.offer(MessageFormat.format("【{0}】{1}读取提升机状态信息失败", DateUtils.convert(new Date()), device.getId())); throw new CoolException(MessageFormat.format( "读取提升机状态信息失败 ===>> [id:{0}] [ip:{1}] [port:{2}]", device.getId(), device.getIp(), device.getPort())); } Thread.sleep(200); } catch (Exception e) { OutputQueue.LIFT.offer(MessageFormat.format("【{0}】读取提升机状态信息失败 ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), device.getId(), device.getIp(), device.getPort())); } } @Override public boolean connect() { return false; } @Override public void close() { } @Override public LiftProtocol getStatus() { return this.liftProtocol; } //***************设备层通讯-不同厂商设备通讯方案不一致*************** //请求登录 private String requestLoginToken() { try { HashMap param = new HashMap<>(); param.put("username", "admin"); param.put("password", "admin123"); param.put("msgTime", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())); String response = new HttpHandler.Builder() .setUri(API_URL) .setPath("/RDS/loginToken") .setJson(JSON.toJSONString(param)) .build() .doPost(); JSONObject jsonObject = JSON.parseObject(response); Integer code = jsonObject.getInteger("code"); if (code.equals(200)) { return jsonObject.getString("token"); } } catch (Exception e) { e.printStackTrace(); } return null; } //获取设备状态 private JSONObject requestDeviceStatus() { //模拟数据 String data = "[{\"taskNo\":1244,\"curFloor\":2,\"readyState\":1,\"haveCar\":'N',\"completeTaskNo\":0,\"haveCargo\":\"Y\",\"runningstate\":0,\"floors\":[{\"floor\":1,\"location\":1,\"run\":1,\"error\":1,\"cargoState\":\"Y\"},{\"floor\":1,\"location\":2,\"run\":0,\"error\":0,\"cargoState\":\"N\"}]}]"; return JSON.parseArray(data).getJSONObject(0); // try { // String loginToken = requestLoginToken(); // if (loginToken == null) { // return null; // } // // HashMap headers = new HashMap<>(); // headers.put("Authorization", "Bearer " + loginToken); // // HashMap param = new HashMap<>(); // param.put("messageName", "deviceRgvStatus"); // param.put("msgTime", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())); // param.put("deviceNo", device.getDeviceNo()); // String response = new HttpHandler.Builder() // .setUri(API_URL) // .setPath("/RDS/deviceLifterStatus") // .setHeaders(headers) // .setJson(JSON.toJSONString(param)) // .build() // .doPost(); // JSONObject jsonObject = JSON.parseObject(response); // Integer code = jsonObject.getInteger("code"); // if (code.equals(200)) { // return jsonObject.getJSONArray("data").getJSONObject(0); // } // } catch (Exception e) { // e.printStackTrace(); // } // return null; } }