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<String, Object> 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<String, Object> headers = new HashMap<>();
|
// headers.put("Authorization", "Bearer " + loginToken);
|
//
|
// HashMap<String, Object> 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;
|
}
|
}
|