win代码上传

detached
zouyiqing 2024-01-23 20:56:05 +08:00
parent 544204bca5
commit 1ecdd74611
7 changed files with 258 additions and 52 deletions

View File

@ -9,6 +9,8 @@ import com.ruoyi.common.core.domain.entity.SysRadar;
import com.ruoyi.common.core.page.PageDomain;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.core.page.TableSupport;
import com.ruoyi.common.utils.SocketModel;
import com.ruoyi.common.utils.SocketUtil;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.bean.BeanUtils;
import com.ruoyi.common.utils.bean.ModbusResponse;
@ -20,6 +22,8 @@ import com.ruoyi.system.service.PrimaryRadarDataService;
import com.ruoyi.system.service.impl.IdentifierStatusServiceImpl;
import com.ruoyi.web.core.config.RadarStatusWebSocket;
import com.serotonin.modbus4j.ModbusMaster;
import lombok.Data;
import org.apache.commons.compress.utils.Lists;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@ -27,8 +31,10 @@ import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.*;
import javax.xml.crypto.Data;
import java.io.IOException;
import java.net.Inet4Address;
import java.net.Socket;
import java.net.UnknownHostException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
@ -66,34 +72,37 @@ public class RadarStatusController {
return prefix + "/radarstatus";
}
@PostMapping("/list")
@ResponseBody
public TableDataInfo list(@RequestBody SysRadar sysRadar) {
TableDataInfo rspData = new TableDataInfo();
List<SysRadar> radarList = service.selectRadarList(sysRadar);
// 异步连接硬件
CompletableFuture<List<ModbusResponse>> listCompletableFuture = CompletableFuture.supplyAsync(() -> {
List<ModbusResponse> responses = new ArrayList<>();
final ConnectionStatus connectionStatus = new ConnectionStatus();
Timer timer = new Timer();
boolean connected = false;
List<SocketModel> socketModels = Lists.newArrayList();
for (SysRadar radar : radarList) {
try {
Socket socket = new Socket(radar.getRadarIp(), 23);
SocketModel socketModel = new SocketModel();
socketModel.setRadarLocation(radar.getRadarLocation());
socketModel.setSocket(socket);
socketModel.setRadarIp(radar.getRadarIp());
socketModels.add(socketModel);
} catch (Exception e) {
e.printStackTrace();
}
}
Timer timer = new Timer();
TimerTask task = new TimerTask() {
@Override
public void run() {
for (SysRadar radar : radarList) {
System.out.println("=======radar=====");
try {
// ModbusResponse modbusResponse = new ModbusResponse();
ModbusMaster master = ModbusUtils.getSlave(radar.getRadarIp(), 23);
DataResponse dataResponse = new DataResponse();
dataResponse.setRadarIp(radar.getRadarIp());
System.out.println(radar.getRadarIp());
ModbusResponse modbusResponse = ModbusUtils.holdingRegister();
if (modbusResponse == null){
dataResponse.setStatus(0);
}
System.out.println(modbusResponse);
socketModels.forEach(socketModel -> {
try {
DataResponse data = SocketUtil.getData(socketModel);
System.out.println(socketModel.getRadarIp() +": "+ data);
ModbusResponse modbusResponse = getModbusResponse(data);
String tag = modbusResponse.getTagId();
PrimaryRadarData primaryRadarData = new PrimaryRadarData();
SysIdentifier sysIdentifier = new SysIdentifier();
@ -101,41 +110,93 @@ public class RadarStatusController {
if (!"0".equals(modbusResponse.getTagId())) {
sysIdentifier = identifierService.selectIdentifierByTag(tag);
primaryRadarData.setLadleNumber(sysIdentifier.getLadleNumber());
primaryRadarData.setRadarLocation(radar.getRadarLocation());
primaryRadarData.setRadarIp(radar.getRadarIp());
primaryRadarData.setRadarLocation(socketModel.getRadarLocation());
primaryRadarData.setRadarIp(socketModel.getRadarIp());
} else {
primaryRadarData.setLadleNumber(null);
primaryRadarData.setRadarLocation(null);
primaryRadarData.setRadarIp(radar.getRadarIp());
primaryRadarData.setRadarIp(socketModel.getRadarIp());
}
dataResponse.setRadarLocation(primaryRadarData.getRadarLocation());
String ip = Inet4Address.getLocalHost().getHostAddress();
if (modbusResponse.getValue4() != null && !"0".equals(modbusResponse.getValue4())) {
primaryRadarDataService.insertPrimaryRadarData(primaryRadarData);
dataResponse.setStatus(1);
dataResponse.setRadarLocation(primaryRadarData.getRadarLocation());
} else {
dataResponse.setStatus(0);
}
RadarStatusWebSocket.sendToAll(JSON.toJSONString(dataResponse));
}catch (Exception e) {
if (e.equals("java.net.SocketTimeoutException: connect timed out")) {
System.err.println("从串口读取失败:" + "连接超时");
}
DataResponse dataResponse = new DataResponse();
dataResponse.setRadarIp(radar.getRadarIp());
dataResponse.setRadarLocation(radar.getRadarLocation());
dataResponse.setStatus(0);
RadarStatusWebSocket.sendToAll(JSON.toJSONString(dataResponse));
e.printStackTrace();
}
}
RadarStatusWebSocket.sendToAll(JSON.toJSONString(data));
} catch (Exception e) {
// if (e.equals("java.net.SocketTimeoutException: connect timed out")) {
// System.err.println("从串口读取失败:" + "连接超时");
// }
// DataResponse dataResponse = new DataResponse();
// dataResponse.setRadarIp(radar.getRadarIp());
// dataResponse.setRadarLocation(radar.getRadarLocation());
// dataResponse.setStatus(0);
// RadarStatusWebSocket.sendToAll(JSON.toJSONString(dataResponse));
// e.printStackTrace();
}
});
}
};
timer.scheduleAtFixedRate(task, 1, 1000);
return responses;
});
// 异步连接硬件
// CompletableFuture<List<ModbusResponse>> listCompletableFuture = CompletableFuture.supplyAsync(() -> {
// List<ModbusResponse> responses = new ArrayList<>();
// final ConnectionStatus connectionStatus = new ConnectionStatus();
// Timer timer = new Timer();
// boolean connected = false;
// TimerTask task = new TimerTask() {
// @Override
// public void run() {
//
// for (SysRadar radar : radarList) {
// System.out.println("=======radar=====" + radar.getRadarIp());
// try {
// DataResponse data = SocketUtil.getData(radar.getRadarIp(), 23, radar.getRadarLocation());
// System.out.println(radar.getRadarIp() +": "+ data);
// ModbusResponse modbusResponse = getModbusResponse(data);
// String tag = modbusResponse.getTagId();
// PrimaryRadarData primaryRadarData = new PrimaryRadarData();
// SysIdentifier sysIdentifier = new SysIdentifier();
// BeanUtils.copyProperties(modbusResponse, primaryRadarData);
// if (!"0".equals(modbusResponse.getTagId())) {
// sysIdentifier = identifierService.selectIdentifierByTag(tag);
// primaryRadarData.setLadleNumber(sysIdentifier.getLadleNumber());
// primaryRadarData.setRadarLocation(radar.getRadarLocation());
// primaryRadarData.setRadarIp(radar.getRadarIp());
// } else {
// primaryRadarData.setLadleNumber(null);
// primaryRadarData.setRadarLocation(null);
// primaryRadarData.setRadarIp(radar.getRadarIp());
// }
// String ip = Inet4Address.getLocalHost().getHostAddress();
// if (modbusResponse.getValue4() != null && !"0".equals(modbusResponse.getValue4())) {
// primaryRadarDataService.insertPrimaryRadarData(primaryRadarData);
// } else {
//
// }
// RadarStatusWebSocket.sendToAll(JSON.toJSONString(data));
// } catch (Exception e) {
//// if (e.equals("java.net.SocketTimeoutException: connect timed out")) {
//// System.err.println("从串口读取失败:" + "连接超时");
//// }
//// DataResponse dataResponse = new DataResponse();
//// dataResponse.setRadarIp(radar.getRadarIp());
//// dataResponse.setRadarLocation(radar.getRadarLocation());
//// dataResponse.setStatus(0);
//// RadarStatusWebSocket.sendToAll(JSON.toJSONString(dataResponse));
//// e.printStackTrace();
// }
// }
// }
// };
// timer.scheduleAtFixedRate(task, 1, 10000);
//
// return responses;
// });
PageDomain pageDomain = TableSupport.buildPageRequest();
if (null == pageDomain.getPageNum() || null == pageDomain.getPageSize()) {
rspData.setRows(radarList);
@ -154,6 +215,21 @@ public class RadarStatusController {
return rspData;
}
private static ModbusResponse getModbusResponse(DataResponse data) {
ModbusResponse modbusResponse = new ModbusResponse();
modbusResponse.setRadarNum(data.getData().get(0).toString());
modbusResponse.setTagId(data.getData().get(3).toString());
modbusResponse.setValue1(data.getData().get(4));
modbusResponse.setValue2(data.getData().get(5));
modbusResponse.setValue3(data.getData().get(6));
modbusResponse.setValue4(data.getData().get(7));
modbusResponse.setValue5(data.getData().get(8));
modbusResponse.setBaseLine(data.getData().get(9));
modbusResponse.setQueryFre(data.getData().get(10));
modbusResponse.setNumber(data.getData().get(11));
return modbusResponse;
}
class ConnectionStatus {
boolean connected = false;

View File

@ -3,6 +3,7 @@ package com.ruoyi.common.core.domain.entity;
import lombok.Data;
import java.io.Serializable;
import java.util.List;
@Data
public class DataResponse implements Serializable {
@ -23,13 +24,6 @@ public class DataResponse implements Serializable {
*/
private Integer status = 0 ;
private List<Integer> data;
@Override
public String toString() {
return "DataResponse{" +
"radarIp='" + radarIp + '\'' +
", radarLocation='" + radarLocation + '\'' +
", status='" + status + '\'' +
'}';
}
}

View File

@ -0,0 +1,57 @@
package com.ruoyi.common.utils;
import com.serotonin.modbus4j.BatchResults;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class BitUtils {
public static List<String> convertToArray(String string) {
int[] groupLengths = {2, 2, 2, 8, 4, 4, 4, 4, 4, 4, 4,4,4};
int startIndex = 0;
List<String> array = new ArrayList<>();
for (int length : groupLengths) {
int endIndex = startIndex + length;
String substring = string.substring(startIndex, endIndex);
array.add(substring);
startIndex = endIndex;
}
return array;
}
public static int covert(String content) {
int number = 0;
String[] HighLetter = {"a", "b", "c", "d", "e", "f"};
Map<String, Integer> map = new HashMap<>();
for (int i = 0; i <= 9; i++) {
map.put(i + "", i);
}
for (int j = 10; j < HighLetter.length + 10; j++) {
map.put(HighLetter[j - 10], j);
}
String[] str = new String[content.length()];
for (int i = 0; i < str.length; i++) {
str[i] = content.substring(i, i + 1);
}
for (int i = 0; i < str.length; i++) {
number += map.get(str[i]) * Math.pow(16, str.length - 1 - i);
}
return number;
}
public static int covertInt(BatchResults<Integer> integerBatchResults){
Object value1 = integerBatchResults.getValue(0);
Object value2 = integerBatchResults.getValue(1);
String hex1String = Integer.toHexString(Integer.parseInt(value1.toString()));
String hex2String = Integer.toHexString(Integer.parseInt(value2.toString()));
String hex = hex1String + hex2String;
return (covert(hex));
}
}

View File

@ -0,0 +1,14 @@
package com.ruoyi.common.utils;
import lombok.Data;
import java.net.Socket;
@Data
public class SocketModel {
private String radarIp;
private String radarLocation;
private Socket socket;
}

View File

@ -0,0 +1,60 @@
package com.ruoyi.common.utils;
import com.ruoyi.common.core.domain.entity.DataResponse;
import java.io.DataInputStream;
import java.io.InputStream;
import java.math.BigInteger;
import java.net.InetSocketAddress;
import java.net.Socket;
import java.util.ArrayList;
import java.util.List;
public class SocketUtil {
public static DataResponse getData(SocketModel socketModel) {
DataResponse dataResponse = new DataResponse();
Socket socket = socketModel.getSocket();
String radarLocation = socketModel.getRadarLocation();
String radarIp = socketModel.getRadarIp();
try {
boolean connected = socket.isConnected();
if (!connected) {
System.out.println(radarLocation+": "+connected);
dataResponse.setRadarIp(radarIp);
dataResponse.setRadarLocation(radarLocation);
dataResponse.setStatus(1);
dataResponse.setData(null);
return dataResponse;
}
InputStream inputStream = socket.getInputStream(); // 获取输入流
int available = inputStream.available();
byte[] buffer = new byte[available];
inputStream.read(buffer, 0, available);
String hex = new BigInteger(1, buffer).toString(16);
if (!"0".equals(hex)) {
hex = "0" + hex;
List<Integer> decimal = new ArrayList<>();
List<String> strings = BitUtils.convertToArray(hex);
for (String string : strings) {
int s = BitUtils.covert(string);
decimal.add(s);
}
dataResponse.setData(decimal);
dataResponse.setRadarIp(radarIp);
dataResponse.setStatus(1);
dataResponse.setRadarLocation(radarLocation);
return dataResponse;
}
} catch (Exception e) {
System.out.println("读取数据异常:"+radarIp);
}
dataResponse.setRadarIp(radarIp);
dataResponse.setRadarLocation(radarLocation);
dataResponse.setStatus(0);
dataResponse.setData(null);
return dataResponse;
}
}

View File

@ -5,6 +5,11 @@ import lombok.Data;
@Data
public class ModbusResponse {
/**
* id
*/
private String radarNum;
/**
* id
*/

View File

@ -37,7 +37,7 @@ public class ModbusUtils {
// 发送请求之前获取写锁
lock.readLock().lock();
BatchResults<Integer> integerBatchResults = master.send(batch);
// log.error("读取的内容:{}",integerBatchResults);
// 当接收到响应时释放写锁
lock.readLock().unlock();