diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/RadarStatusController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/RadarStatusController.java index b10d98f..91d7f3f 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/RadarStatusController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/RadarStatusController.java @@ -26,6 +26,7 @@ import lombok.Data; import org.apache.commons.compress.utils.Lists; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.InitializingBean; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.ModelMap; @@ -41,6 +42,7 @@ import java.sql.ResultSet; import java.sql.Statement; import java.util.*; import java.util.concurrent.CompletableFuture; +import java.util.concurrent.CopyOnWriteArrayList; /** * 雷达状态 @@ -49,7 +51,7 @@ import java.util.concurrent.CompletableFuture; */ @Controller @RequestMapping("/system/radarstatus") -public class RadarStatusController { +public class RadarStatusController implements InitializingBean { private static final Logger log = LoggerFactory.getLogger(RadarStatusController.class); @Autowired @@ -61,6 +63,10 @@ public class RadarStatusController { @Autowired private ISysIdentifierService identifierService; + private Timer timer = new Timer(); + + public static CopyOnWriteArrayList allRadar = new CopyOnWriteArrayList<>(); + private String prefix = "system/radarstatus"; @@ -80,68 +86,6 @@ public class RadarStatusController { TableDataInfo rspData = new TableDataInfo(); List radarList = service.selectRadarList(sysRadar); - List 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() { - 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(); - BeanUtils.copyProperties(modbusResponse, primaryRadarData); - if (!"0".equals(modbusResponse.getTagId())) { - sysIdentifier = identifierService.selectIdentifierByTag(tag); - primaryRadarData.setLadleNumber(sysIdentifier.getLadleNumber()); - primaryRadarData.setRadarLocation(socketModel.getRadarLocation()); - primaryRadarData.setRadarIp(socketModel.getRadarIp()); - } else { - primaryRadarData.setLadleNumber(null); - primaryRadarData.setRadarLocation(null); - primaryRadarData.setRadarIp(socketModel.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, 1000); - - - // 异步连接硬件 // CompletableFuture> listCompletableFuture = CompletableFuture.supplyAsync(() -> { // List responses = new ArrayList<>(); @@ -215,6 +159,71 @@ public class RadarStatusController { return rspData; } + private void asyncWebSocket(List radarList) { + CompletableFuture.runAsync(()->{ + + buildAllRadar(radarList); + + TimerTask task = new TimerTask() { + @Override + public void run() { + int count = 0; + allRadar.forEach(socketModel -> { + asyncReadRadar(socketModel); + }); + } + }; + timer.scheduleAtFixedRate(task, 1, 100); + + }); + } + + public static void buildAllRadar(List radarList) { + 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()); + allRadar.add(socketModel); + } catch (Exception e) { + e.printStackTrace(); + } + } + } + + private void asyncReadRadar(SocketModel socketModel) { + CompletableFuture.runAsync(()->{ + 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(); + BeanUtils.copyProperties(modbusResponse, primaryRadarData); + if (!"0".equals(modbusResponse.getTagId())) { + sysIdentifier = identifierService.selectIdentifierByTag(tag); + primaryRadarData.setLadleNumber(sysIdentifier.getLadleNumber()); + primaryRadarData.setRadarLocation(socketModel.getRadarLocation()); + primaryRadarData.setRadarIp(socketModel.getRadarIp()); + } else { + primaryRadarData.setLadleNumber(null); + primaryRadarData.setRadarLocation(null); + primaryRadarData.setRadarIp(socketModel.getRadarIp()); + } + if (modbusResponse.getValue4() != null && !"0".equals(modbusResponse.getValue4())) { + primaryRadarDataService.insertPrimaryRadarData(primaryRadarData); + } else { + + } + RadarStatusWebSocket.sendToAll(JSON.toJSONString(data)); + } catch (Exception e) { + } + }); + } + private static ModbusResponse getModbusResponse(DataResponse data) { ModbusResponse modbusResponse = new ModbusResponse(); modbusResponse.setRadarNum(data.getData().get(0).toString()); @@ -230,6 +239,13 @@ public class RadarStatusController { return modbusResponse; } + @Override + public void afterPropertiesSet() throws Exception { + List radarList = service.selectRadarList(new SysRadar()); + + asyncWebSocket(radarList); + } + class ConnectionStatus { boolean connected = false; diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysRadarController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysRadarController.java index 8ce66a7..beec0fe 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysRadarController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysRadarController.java @@ -72,7 +72,9 @@ public class SysRadarController extends BaseController { @ResponseBody public AjaxResult addSave(@Validated SysRadar radar) { radar.setCreateBy(getLoginName()); - return toAjax(radarService.insertRadar(radar)); + int result = radarService.insertRadar(radar); + RadarStatusController.buildAllRadar(radarService.selectRadarList(new SysRadar())); + return toAjax(result); } /** @@ -95,14 +97,17 @@ public class SysRadarController extends BaseController { public AjaxResult editSave(@Validated SysRadar radar) { radar.setUpdateBy(getLoginName()); - return toAjax(radarService.updateUser(radar)); + int result = radarService.updateUser(radar); + RadarStatusController.buildAllRadar(radarService.selectRadarList(new SysRadar())); + return toAjax(result); } @PostMapping("/remove") @ResponseBody public AjaxResult remove(String ids) { - - return toAjax(radarService.deleteRadarByIds(ids)); + int result = radarService.deleteRadarByIds(ids); + RadarStatusController.buildAllRadar(radarService.selectRadarList(new SysRadar())); + return toAjax(result); } @@ -135,6 +140,7 @@ public class SysRadarController extends BaseController { ExcelUtil util = new ExcelUtil(RadarExcel.class); List radarList = util.importExcel(file.getInputStream()); String message = radarService.importData(radarList, updateSupport); + RadarStatusController.buildAllRadar(radarService.selectRadarList(new SysRadar())); return AjaxResult.success(message); }