|
@@ -0,0 +1,227 @@
|
|
|
+package com.ruoyi.sim.service.impl;
|
|
|
+
|
|
|
+import org.slf4j.LoggerFactory;
|
|
|
+import org.slf4j.Logger;
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
+
|
|
|
+import java.io.IOException;
|
|
|
+import java.io.InputStream;
|
|
|
+import java.io.OutputStream;
|
|
|
+import java.net.Socket;
|
|
|
+
|
|
|
+import static com.ruoyi.sim.service.impl.IotService.Const.*;
|
|
|
+
|
|
|
+/**
|
|
|
+ * 硬件通信
|
|
|
+ */
|
|
|
+@Service
|
|
|
+public class IotService {
|
|
|
+
|
|
|
+ interface Const {
|
|
|
+
|
|
|
+ String IP = "127.0.0.1";
|
|
|
+ int PORT = 9000;
|
|
|
+ /**
|
|
|
+ * 报文长度
|
|
|
+ */
|
|
|
+ int MSG_LENGTH = 20;
|
|
|
+
|
|
|
+ String PREFIX = "AA";
|
|
|
+
|
|
|
+ String SUFFIX = "55";
|
|
|
+
|
|
|
+ /**
|
|
|
+ * orientation
|
|
|
+ */
|
|
|
+ String ORN_SEND = "01";
|
|
|
+
|
|
|
+ /**
|
|
|
+ * orientation
|
|
|
+ */
|
|
|
+ String ORN_RECEIVE = "02";
|
|
|
+
|
|
|
+ String CMD_DATA_PLACE_HOLDER = "00000000";
|
|
|
+
|
|
|
+ String CMD_READ = "03";
|
|
|
+
|
|
|
+ String CMD_GET_SIM_TYPE = "B1";
|
|
|
+
|
|
|
+ String CMD_SET_FAULT = "01";
|
|
|
+
|
|
|
+ String CMD_READ_SIM_FAULT_STATE = "03";
|
|
|
+
|
|
|
+ String CMD_CLEAR_SIM_FAULT = "02";
|
|
|
+ }
|
|
|
+
|
|
|
+ private static final Logger logger = LoggerFactory.getLogger(IotService.class);
|
|
|
+
|
|
|
+ private Socket socket = null;
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 检查所有模拟器状态
|
|
|
+ */
|
|
|
+ public void checkAllSim() {
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 设备类型读取
|
|
|
+ *
|
|
|
+ * @param simNum 设备编号
|
|
|
+ */
|
|
|
+ public void getSimType(final String simNum) {
|
|
|
+ // todo:check
|
|
|
+
|
|
|
+ //
|
|
|
+ StringBuffer m = new StringBuffer();
|
|
|
+ m.append(PREFIX);
|
|
|
+ m.append(simNum);
|
|
|
+ m.append(ORN_SEND);
|
|
|
+ m.append(CMD_READ);
|
|
|
+ m.append(CMD_GET_SIM_TYPE);
|
|
|
+ m.append(CMD_DATA_PLACE_HOLDER);
|
|
|
+ m.append(SUFFIX);
|
|
|
+ final String sendMsg = m.toString();
|
|
|
+ final String receiveMsg = send(sendMsg);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 故障下发
|
|
|
+ *
|
|
|
+ * @param simNum 设备编号
|
|
|
+ * @param faultType 故障类型
|
|
|
+ */
|
|
|
+ public void setFault(final String simNum, final String faultType) {
|
|
|
+ // todo:check
|
|
|
+
|
|
|
+ //
|
|
|
+ StringBuffer m = new StringBuffer();
|
|
|
+ m.append(PREFIX);
|
|
|
+ m.append(simNum);
|
|
|
+ m.append(ORN_SEND);
|
|
|
+ m.append(CMD_SET_FAULT);
|
|
|
+ m.append(faultType);
|
|
|
+ m.append(CMD_DATA_PLACE_HOLDER);
|
|
|
+ m.append(SUFFIX);
|
|
|
+ //
|
|
|
+
|
|
|
+ //
|
|
|
+ final String receiveMsg = send(m.toString());
|
|
|
+ //
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 状态读取
|
|
|
+ *
|
|
|
+ * @param simNum 设备编号
|
|
|
+ * @param faultType 故障类型
|
|
|
+ */
|
|
|
+ public void getSimStatus(final String simNum, final String faultType) {
|
|
|
+ // todo:check
|
|
|
+
|
|
|
+ //
|
|
|
+ StringBuffer m = new StringBuffer();
|
|
|
+ m.append(PREFIX);
|
|
|
+ m.append(simNum);
|
|
|
+ m.append(ORN_SEND);
|
|
|
+ m.append(CMD_READ_SIM_FAULT_STATE);
|
|
|
+ m.append(faultType);
|
|
|
+ m.append(CMD_DATA_PLACE_HOLDER);
|
|
|
+ m.append(SUFFIX);
|
|
|
+ //
|
|
|
+
|
|
|
+ //
|
|
|
+ final String receiveMsg = send(m.toString());
|
|
|
+ //
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 故障清清除
|
|
|
+ *
|
|
|
+ * @param simNum 设备编号
|
|
|
+ * @param faultType 故障类型
|
|
|
+ */
|
|
|
+ public void clearSimStatus(final String simNum, final String faultType) {
|
|
|
+ // todo:check
|
|
|
+
|
|
|
+ //
|
|
|
+ StringBuffer m = new StringBuffer();
|
|
|
+ m.append(PREFIX);
|
|
|
+ m.append(simNum);
|
|
|
+ m.append(ORN_SEND);
|
|
|
+ m.append(CMD_CLEAR_SIM_FAULT);
|
|
|
+ m.append(faultType);
|
|
|
+ m.append(CMD_DATA_PLACE_HOLDER);
|
|
|
+ m.append(SUFFIX);
|
|
|
+ //
|
|
|
+
|
|
|
+ //
|
|
|
+ final String receiveMsg = send(m.toString());
|
|
|
+ //
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * send hex message
|
|
|
+ *
|
|
|
+ * @param sendMsg
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public String send(final String sendMsg) {
|
|
|
+ logger.info("sendMsg");
|
|
|
+ logger.info(sendMsg);
|
|
|
+ String receiveMsg = null;
|
|
|
+ try {
|
|
|
+ if (socket == null) {
|
|
|
+ socket = new Socket(IP, PORT);
|
|
|
+ }
|
|
|
+ InputStream is = socket.getInputStream();
|
|
|
+ OutputStream os = socket.getOutputStream();
|
|
|
+ os.write(hexStrToByteArrs(sendMsg));
|
|
|
+ byte[] buffer = new byte[1024];
|
|
|
+ int length = is.read(buffer);
|
|
|
+ StringBuffer sbHex = new StringBuffer();
|
|
|
+ for (int i = 0; i < length; i++) {
|
|
|
+ sbHex.append(String.format("%02X", buffer[i]));
|
|
|
+ }
|
|
|
+ receiveMsg = sbHex.toString();
|
|
|
+ } catch (IOException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ logger.info("receiveMsg");
|
|
|
+ logger.info(receiveMsg);
|
|
|
+ return receiveMsg;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ *
|
|
|
+ */
|
|
|
+ public void close() {
|
|
|
+ try {
|
|
|
+ if (socket != null) {
|
|
|
+ socket.close();
|
|
|
+ }
|
|
|
+ } catch (IOException e) {
|
|
|
+ throw new RuntimeException(e);
|
|
|
+ } finally {
|
|
|
+ socket = null;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ public byte[] hexStrToByteArrs(String hexString) {
|
|
|
+// if (StringUtils.isEmpty(hexString)) {
|
|
|
+// return null;
|
|
|
+// }
|
|
|
+ hexString = hexString.replaceAll(" ", "");
|
|
|
+ int len = hexString.length();
|
|
|
+ int index = 0;
|
|
|
+
|
|
|
+ byte[] bytes = new byte[len / 2];
|
|
|
+
|
|
|
+ while (index < len) {
|
|
|
+ String sub = hexString.substring(index, index + 2);
|
|
|
+ bytes[index / 2] = (byte) Integer.parseInt(sub, 16);
|
|
|
+ index += 2;
|
|
|
+ }
|
|
|
+ return bytes;
|
|
|
+ }
|
|
|
+}
|