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 1313b5e..698ba7b 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 @@ -57,8 +57,6 @@ public class RadarStatusController { public TableDataInfo list(@RequestBody SysRadar sysRadar) { TableDataInfo rspData = new TableDataInfo(); List radarList = service.selectRadarList(sysRadar); -// oracleInsert(tsanaRadarList); - PageDomain pageDomain = TableSupport.buildPageRequest(); if (null == pageDomain.getPageNum() || null == pageDomain.getPageSize()) { @@ -77,51 +75,6 @@ public class RadarStatusController { return rspData; } - private static void oracleInsert(TsanaRadar tsanaRadar) { - Connection connection = null; - PreparedStatement preparedStatement = null; - try { - Class.forName("oracle.jdbc.driver.OracleDriver"); - - String url = "jdbc:oracle:thin:@172.16.18.195:1523:xccb"; - String user = "radartest"; - String password = "radartest"; - connection = DriverManager.getConnection(url,user,password); - System.out.println(" ============= 连接数据库成功 =========="); - String insertStatement = "INSERT INTO xccb.TS_ANARADAR (RADARCODE, LABELCODE, LOCATIONIP , LABELNUM , TIMEBEGIN , TIMEEND , TIMECOUNT) VALUES (?, ?, ?, ?, ?, ?, ?)"; - - preparedStatement = connection.prepareStatement(insertStatement); - - preparedStatement.setString(1,tsanaRadar.getRadarCode()); - preparedStatement.setString(2,tsanaRadar.getLabelCode()); - preparedStatement.setString(3,tsanaRadar.getLocationIp()); - preparedStatement.setString(4,tsanaRadar.getLabelNum()); - preparedStatement.setDate(5,tsanaRadar.getTimeBegin()); - preparedStatement.setDate(6,tsanaRadar.getTimeEnd()); - preparedStatement.setInt(7,tsanaRadar.getTimeCount()); - - int i = preparedStatement.executeUpdate(); - System.out.println("新增数据成功,新增数量: " + i); - }catch (Exception e){ - System.out.println("连接异常======" + e); - }finally { - // 关闭连接和statement - if (preparedStatement != null) { - try { - preparedStatement.close(); - } catch (SQLException e) { - e.printStackTrace(); - } - } - if (connection != null) { - try { - connection.close(); - } catch (SQLException e) { - e.printStackTrace(); - } - } - } - } 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 0b43e4c..4c71c83 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 @@ -26,6 +26,7 @@ import org.springframework.web.multipart.MultipartFile; import java.sql.*; import java.util.List; +import java.util.concurrent.CompletableFuture; import java.util.stream.Collectors; /** @@ -77,7 +78,9 @@ public class SysRadarController extends BaseController { radar.setCreateBy(getLoginName()); int result = radarService.insertRadar(radar); List sysRadars = radarService.selectRadarList(new SysRadar()); - radarRealTimeDataService.addRadar(sysRadars); + CompletableFuture.runAsync(()->{ + radarRealTimeDataService.addRadar(sysRadars); + }); return toAjax(result); } @@ -109,7 +112,9 @@ public class SysRadarController extends BaseController { @ResponseBody public AjaxResult remove(String ids) { int result = radarService.deleteRadarByIds(ids); - radarRealTimeDataService.delRadar(Long.valueOf(ids)); + CompletableFuture.runAsync(()->{ + radarRealTimeDataService.delRadar(Long.valueOf(ids)); + }); return toAjax(result); } @@ -143,7 +148,9 @@ public class SysRadarController extends BaseController { ExcelUtil util = new ExcelUtil(RadarExcel.class); List radarList = util.importExcel(file.getInputStream()); String message = radarService.importData(radarList, updateSupport); - radarRealTimeDataService.addRadar(radarService.selectRadarList(new SysRadar())); + CompletableFuture.runAsync(()->{ + radarRealTimeDataService.addRadar(radarService.selectRadarList(new SysRadar())); + }); return AjaxResult.success(message); } diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/PrimaryRadarData.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/PrimaryRadarData.java index c25fa9f..fd65ad6 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/PrimaryRadarData.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/PrimaryRadarData.java @@ -83,6 +83,8 @@ public class PrimaryRadarData extends BaseEntity /** 删除标志(0代表存在 2代表删除) */ private String delFlag; + private Integer stationCode; + private String type; public String getType() { @@ -208,6 +210,14 @@ public class PrimaryRadarData extends BaseEntity this.totalCount = totalCount; } + public Integer getStationCode() { + return stationCode; + } + + public void setStationCode(Integer stationCode) { + this.stationCode = stationCode; + } + public String getDelFlag() { return delFlag; } @@ -232,6 +242,7 @@ public class PrimaryRadarData extends BaseEntity .append("type",getType()) .append("totalCount",getTotalCount()) .append("radarLocation",getRadarLocation()) + .append("stationCode",getStationCode()) .append("ladleNumber",getLadleNumber()) .append("radarIp",getRadarIp()) .append("delFlag", getDelFlag()) diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysDiscern.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysDiscern.java index 31c2621..315eadf 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysDiscern.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysDiscern.java @@ -65,6 +65,8 @@ public class SysDiscern extends BaseEntity */ private Date updateTime; + private Integer stationCode; + public SysDiscern() { } @@ -132,6 +134,14 @@ public class SysDiscern extends BaseEntity this.type = type; } + public Integer getStationCode() { + return stationCode; + } + + public void setStationCode(Integer stationCode) { + this.stationCode = stationCode; + } + @Override public Date getCreateTime() { return createTime; @@ -161,6 +171,7 @@ public class SysDiscern extends BaseEntity .append("number",getNumber()) .append("type",getType()) .append("count",getCount()) + .append("stationCode",getStationCode()) .append("radarLocation",getRadarLocation()) .append("ladleNumber",getLadleNumber()) .append("createTime", getCreateTime()) diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/TsanaRadar.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/TsanaRadar.java index f7a64fc..d5f7fe6 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/TsanaRadar.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/TsanaRadar.java @@ -21,6 +21,10 @@ public class TsanaRadar { public Integer timeCount; + public TsanaRadar(){ + + } + public TsanaRadar(String radarCode, String labelCode, String locationIp, String labelNum, Date timeBegin, Date timeEnd, Integer timeCount) { this.radarCode = radarCode; diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/SocketUtil.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/SocketUtil.java index 8cc51a9..c86fd5b 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/utils/SocketUtil.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/SocketUtil.java @@ -19,24 +19,21 @@ public class SocketUtil { dataResponse.setRadarIp(radarIp); dataResponse.setRadarLocation(radarLocation); try { -// boolean connected = socket.isConnected(); -// if (!connected) { -// -// }else { -// -// } - + boolean connected = socket.isConnected(); + if (!connected) { + dataResponse.setStatus(0); + }else { + dataResponse.setStatus(1); + } + RadarStatusWebSocket.sendToAll(JSON.toJSONString(dataResponse)); InputStream inputStream = socket.getInputStream(); // 获取输入流 int available = inputStream.available(); byte[] buffer = new byte[available]; inputStream.read(buffer, 0, available); - if (buffer.length!= 0){ - dataResponse.setStatus(1); - }else { + // System.out.println("雷达:" + radarIp + "===" + radarLocation + ": 连接异常:{}" ); - dataResponse.setStatus(0); - dataResponse.setData(null); - } + + String hex = new BigInteger(1, buffer).toString(16); if (!"0".equals(hex)) { @@ -50,7 +47,6 @@ public class SocketUtil { dataResponse.setData(decimal); - RadarStatusWebSocket.sendToAll(JSON.toJSONString(dataResponse)); return dataResponse; } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/RadarRealTimeDataServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/RadarRealTimeDataServiceImpl.java index 65ae0ba..40e2ccd 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/RadarRealTimeDataServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/RadarRealTimeDataServiceImpl.java @@ -5,16 +5,19 @@ import com.ruoyi.common.utils.SocketModel; import com.ruoyi.common.utils.SocketUtil; import com.ruoyi.common.utils.bean.BeanUtils; import com.ruoyi.common.utils.bean.ModbusResponse; -import com.ruoyi.system.service.ISysIdentifierService; -import com.ruoyi.system.service.ISysRadarService; -import com.ruoyi.system.service.PrimaryRadarDataService; -import com.ruoyi.system.service.RadarRealTimeDataService; +import com.ruoyi.system.service.*; +import org.apache.commons.lang3.ObjectUtils; +import org.apache.commons.lang3.RandomUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.InitializingBean; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.net.Socket; +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.PreparedStatement; +import java.sql.SQLException; import java.util.*; import java.util.concurrent.*; import java.util.stream.Collectors; @@ -31,6 +34,9 @@ public class RadarRealTimeDataServiceImpl implements RadarRealTimeDataService, I @Autowired private ISysRadarService service; + @Autowired + private ISysDiscernService discernService; + public static CopyOnWriteArrayList allRadar = new CopyOnWriteArrayList<>(); // public static Integer count = 0 ; @@ -38,10 +44,10 @@ public class RadarRealTimeDataServiceImpl implements RadarRealTimeDataService, I // private Integer consecutiveZeros = 0; - private Map radarDelMap = new HashMap<>(); + private Map radarDelMap = new HashMap<>(); @Override - public void afterPropertiesSet() { + public void afterPropertiesSet() { List radarList = service.selectRadarList(new SysRadar()); CompletableFuture.runAsync(() -> { @@ -57,16 +63,13 @@ public class RadarRealTimeDataServiceImpl implements RadarRealTimeDataService, I radarDelMap.put(radar.getId(), "0"); CompletableFuture.runAsync(() -> { + task(radar, socket); - while (StringUtils.equals("0",radarDelMap.get(radar.getId()))) { - - task(radar, socket); - try { - Thread.sleep(3000); - } catch (InterruptedException e) { - throw new RuntimeException(e); - } - } +// try { +// Thread.sleep(3000); +// } catch (InterruptedException e) { +// throw new RuntimeException(e); +// } }); } catch (Exception e) { e.printStackTrace(); @@ -76,59 +79,144 @@ public class RadarRealTimeDataServiceImpl implements RadarRealTimeDataService, I } private void task(SysRadar radar, Socket socket) { - int count = 0; - int consecutiveZeros = 0; - CompletableFuture.runAsync(() ->{ + long noDataStart = System.currentTimeMillis(); + long start = noDataStart; - }); - Map> pulse4Number = new HashMap<>(); - try { - // socket连接成功返回数据 - DataResponse data = SocketUtil.getData(socket, radar.getRadarLocation(), radar.getRadarIp()); - // 天线号字符串转集合 - List numberList = convertStringToList(radar.getRadarNum()); - SysDiscern sysDiscern = copyDataToDiscern(data); - 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); + Map> map = new HashMap<>(); - primaryRadarData.setRadarLocation(radar.getRadarLocation()); - //判断读取数据中是否携带标签 - if (!"0".equals(modbusResponse.getTagId())) { + while (StringUtils.equals("0", radarDelMap.get(radar.getId()))) { +// int count = 0; +// int consecutiveZeros = 0; - // 根据标签去数据库查询标签列表 - sysIdentifier = identifierService.selectIdentifierByTag(tag); - //判断数据库查询结果是否有数据 - if (sysIdentifier != null) { - // 有数据将查询到的标识器配置属性放进原始数据对象 - primaryRadarData.setLadleNumber(sysIdentifier.getLadleNumber()); - primaryRadarData.setRadarIp(radar.getRadarIp()); - if (modbusResponse.getValue4() != 0) { - // 给雷达识别报表赋值 - sysDiscern.setType(sysIdentifier.getType()); - sysDiscern.setRadarLocation(radar.getRadarLocation()); - sysDiscern.setLadleNumber(sysIdentifier.getLadleNumber()); - sysDiscern.setCreateTime(new Date()); + List dataList = new ArrayList<>(); + try { + // socket连接成功返回数据 + DataResponse data = SocketUtil.getData(socket, radar.getRadarLocation(), radar.getRadarIp()); + long current = System.currentTimeMillis(); + + // 雷达数据返回封装类赋值 + ModbusResponse modbusResponse = getModbusResponse(data); + String tag = modbusResponse.getTagId(); + // 雷达原始数据对象 + PrimaryRadarData primaryRadarData = new PrimaryRadarData(); + // 标识器对象 + SysIdentifier sysIdentifier = new SysIdentifier(); + // 拷贝封装类属性到雷达原始数据对象 + BeanUtils.copyProperties(modbusResponse, primaryRadarData); + primaryRadarData.setRadarIp(radar.getRadarIp()); + primaryRadarData.setStationCode(radar.getStationCode()); + primaryRadarData.setRadarLocation(radar.getRadarLocation()); + //判断读取数据中是否携带标签 + + if (!"0".equals(modbusResponse.getTagId())) { + // 根据标签去数据库查询标签列表 + sysIdentifier = identifierService.selectIdentifierByTag(tag); + //判断数据库查询结果是否有数据 + if (sysIdentifier != null) { + // 有数据将查询到的标识器配置属性放进原始数据对象 + primaryRadarData.setLadleNumber(sysIdentifier.getLadleNumber()); + primaryRadarData.setRadarIp(radar.getRadarIp()); + primaryRadarData.setType(sysIdentifier.getType().toString()); + for (int i = 0; i < 20; i++) { + dataList.add(primaryRadarData); } + int count = 0; + while (true){ + map.put(getMapKey(radar), dataList); + if (count == 20){ + Date date = new Date(); + long milliseconds = date.getTime(); // 获取当前日期的毫秒数 + long newMilliseconds = milliseconds + (count * 200); // 加上次数乘以200毫秒 + Date newDate = new Date(newMilliseconds); // 转换成新的 Date 类型 + + + resolveDiscern(radar, primaryRadarData, map ,count,newDate ,date); + } + count++; + } + // 给雷达识别报表赋值 + // TsanaRadar tsanaRadar = new TsanaRadar(); + // tsanaRadar.setRadarCode(null); + // tsanaRadar.setLabelCode(null); + // tsanaRadar.setLocationIp(sysDiscern.getStationCode().toString()); + // tsanaRadar.setLabelNum(sysDiscern.getTagId()); + // tsanaRadar.setTimeBegin((java.sql.Date) sysDiscern.getCreateTime()); + // tsanaRadar.setTimeEnd((java.sql.Date) sysDiscern.getUpdateTime()); + // tsanaRadar.setTimeCount(count); + // + // oracleInsert(tsanaRadar); + + // 没数据返回data.data == null +// if (Objects.isNull(data.getData())) { +// // 连续5秒没读到数据,结束 +// if (current - noDataStart >= 5000) { +// // todo:存数据 +// List primaryRadarDataList = map.get(getMapKey(radar)); +//// primaryRadarDataList.stream().filter() +// noDataStart = current; +// continue; +// } +// } +// // 有数据返回数据 +// // 有id,且时间>=20000 +// if (data.getData().get(3) != 0 && current - start >= 20000) { +// // todo:存数据 +// +// start = current; +// continue; +// } } + + } else { + //连续10次读取标签号为0 + // 没有配置过将铁包号置空 primaryRadarData.setLadleNumber(null); primaryRadarData.setRadarIp(radar.getRadarIp()); } - CompletableFuture.runAsync(() -> { + CompletableFuture.runAsync(() -> { // primaryRadarDataService.insertPrimaryRadarData(primaryRadarData); - }); + }); + noDataStart = current; } catch (Exception e) { } + } + } + + private static String getMapKey(SysRadar radar) { + return radar.getRadarIp() + "-" + radar.getRadarNum(); + } + + private void resolveDiscern(SysRadar radar, PrimaryRadarData primaryRadarData, Map> map , int count,Date newDate ,Date date) { + List primaryRadarDataList1 = map.get(getMapKey(radar)); + + List primaryRadarDataList = new ArrayList<>(); + primaryRadarDataList.add(primaryRadarData); + map.put(getMapKey(radar), primaryRadarDataList); + List numberList = convertStringToList(radar.getRadarNum()); + SysDiscern sysDiscern = copyDataToDiscern(primaryRadarData); + // 给雷达识别报表赋值 + sysDiscern.setType(Integer.parseInt(primaryRadarData.getType())); + sysDiscern.setRadarLocation(radar.getRadarLocation()); + sysDiscern.setLadleNumber(primaryRadarData.getLadleNumber()); + sysDiscern.setCreateTime(date ); + sysDiscern.setTagId(primaryRadarData.getTagId()); + sysDiscern.setCount(count); + sysDiscern.setUpdateTime(newDate); + sysDiscern.setStationCode(radar.getStationCode()); + discernService.insertDiscern(sysDiscern); +// TsanaRadar tsanaRadar = new TsanaRadar(); +// tsanaRadar.setRadarCode(null); +// tsanaRadar.setLabelCode(null); +// tsanaRadar.setLocationIp(sysDiscern.getStationCode().toString()); +// tsanaRadar.setLabelNum(sysDiscern.getTagId()); +// tsanaRadar.setTimeBegin((java.sql.Date) sysDiscern.getCreateTime()); +// tsanaRadar.setTimeEnd((java.sql.Date) sysDiscern.getUpdateTime()); +// tsanaRadar.setTimeCount(count); +// +// oracleInsert(tsanaRadar); } @Override @@ -139,7 +227,7 @@ public class RadarRealTimeDataServiceImpl implements RadarRealTimeDataService, I @Override public void delRadar(Long id) { - radarDelMap.put(id,"1"); + radarDelMap.put(id, "1"); } @@ -160,11 +248,11 @@ public class RadarRealTimeDataServiceImpl implements RadarRealTimeDataService, I * @param data * @return ModbusResponse */ - private static SysDiscern copyDataToDiscern(DataResponse data) { + private static SysDiscern copyDataToDiscern(PrimaryRadarData data) { SysDiscern discern = new SysDiscern(); - discern.setTagId(data.getData().get(3).toString()); - discern.setValue4(data.getData().get(7)); - discern.setNumber(data.getData().get(11)); + discern.setTagId(data.getTagId()); + discern.setValue4(data.getValue4()); + discern.setNumber(data.getNumber()); return discern; } @@ -188,4 +276,52 @@ public class RadarRealTimeDataServiceImpl implements RadarRealTimeDataService, I modbusResponse.setNumber(data.getData().get(11)); return modbusResponse; } + + + private static void oracleInsert(TsanaRadar tsanaRadar) { + Connection connection = null; + PreparedStatement preparedStatement = null; + try { + Class.forName("oracle.jdbc.driver.OracleDriver"); + + String url = "jdbc:oracle:thin:@172.16.18.195:1523:xccb"; + String user = "radartest"; + String password = "radartest"; + connection = DriverManager.getConnection(url,user,password); + System.out.println(" ============= 连接数据库成功 =========="); + // ====================================================雷达编号, 标签编号, 工位代号, 标签号, 开始时间, 结束时间, 读取次数 + String insertStatement = "INSERT INTO xccb.TS_ANARADAR (RADARCODE, LABELCODE, LOCATIONIP , LABELNUM , TIMEBEGIN , TIMEEND , TIMECOUNT) VALUES (?, ?, ?, ?, ?, ?, ?)"; + + preparedStatement = connection.prepareStatement(insertStatement); + + preparedStatement.setString(1,null); + preparedStatement.setString(2,null); + preparedStatement.setString(3,tsanaRadar.getLocationIp()); + preparedStatement.setString(4,tsanaRadar.getLabelNum()); + preparedStatement.setDate(5,tsanaRadar.getTimeBegin()); + preparedStatement.setDate(6,tsanaRadar.getTimeEnd()); + preparedStatement.setInt(7,tsanaRadar.getTimeCount()); + + int i = preparedStatement.executeUpdate(); + System.out.println("新增数据成功,新增数量: " + i); + }catch (Exception e){ + System.out.println("连接异常======" + e); + }finally { + // 关闭连接和statement + if (preparedStatement != null) { + try { + preparedStatement.close(); + } catch (SQLException e) { + e.printStackTrace(); + } + } + if (connection != null) { + try { + connection.close(); + } catch (SQLException e) { + e.printStackTrace(); + } + } + } + } } diff --git a/ruoyi-system/src/main/resources/mapper/system/PrimaryRadarDataMapper.xml b/ruoyi-system/src/main/resources/mapper/system/PrimaryRadarDataMapper.xml index 42e8d63..3447e3e 100644 --- a/ruoyi-system/src/main/resources/mapper/system/PrimaryRadarDataMapper.xml +++ b/ruoyi-system/src/main/resources/mapper/system/PrimaryRadarDataMapper.xml @@ -17,8 +17,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + + @@ -28,7 +30,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"