mac上传线程

detached
王宇航 2024-01-28 15:57:24 +08:00
parent 6fb4b8d885
commit 3a69a89d34
6 changed files with 158 additions and 18 deletions

View File

@ -56,6 +56,11 @@ public class RadarStatusController implements InitializingBean {
public static Integer count = 0 ;
private Integer consecutiveZeros = 0;
private Map<String, List<Integer>> pulse4Number = new HashMap<>();
private String prefix = "system/radarstatus";
/**
@ -156,22 +161,113 @@ public class RadarStatusController implements InitializingBean {
});
}
public static void buildAllRadar(List<SysRadar> radarList) {
public void buildAllRadar(List<SysRadar> radarList) {
for (SysRadar radar : radarList) {
try {
Socket socket = new Socket(radar.getRadarIp(), 23);
SocketModel socketModel = new SocketModel();
socketModel.setId(radar.getId());
socketModel.setRadarLocation(radar.getRadarLocation());
socketModel.setSocket(socket);
socketModel.setRadarIp(radar.getRadarIp());
allRadar.add(socketModel);
TimerTask timerTask = new TimerTask() {
@Override
public void run() {
while (true) {
task(radar, socket);
}
}
};
// timer.schedule(timerTask,0);
timerTask.run();
} catch (Exception e) {
e.printStackTrace();
}
}
}
private void task(SysRadar radar, Socket socket) {
try {
List<SysDiscern> discernList = new ArrayList<>();
// socket连接成功返回数据
DataResponse data = SocketUtil.getData(socket, radar.getRadarLocation(), radar.getRadarIp());
// 天线号字符串转集合
List<String> numberList = convertStringToList(radar.getRadarNum());
for (String number : numberList) {
if (!pulse4Number.containsKey(number)) {
pulse4Number.put(number, new ArrayList<>());
}
List<Integer> pulse4Values = pulse4Number.get(number);
if (data.getData().get(7) == 0){
consecutiveZeros ++;
if (consecutiveZeros >= 10) {
// 10个0连续说明该天线没有数据 从pulse4Number中删除该天线
pulse4Number.remove(number);
// 从radarList中删除该天线
// 数据记录结束计算最大pulse4值
double maxPulse4 = pulse4Values.stream().mapToDouble(Integer::doubleValue).max().orElse(0);
System.out.println("天线 " + number + " 的最大pulse4值为: " + maxPulse4);
// 为下一次数据记录重置
pulse4Values.clear();
consecutiveZeros = 0;
}
}else {
count ++;
pulse4Values.add(data.getData().get(7));
}
}
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);
//判断读取数据中是否携带标签
if (!"0".equals(modbusResponse.getTagId())) {
// 根据标签去数据库查询标签列表
sysIdentifier = identifierService.selectIdentifierByTag(tag);
//判断数据库查询结果是否有数据
if (sysIdentifier != null) {
// 有数据将查询到的标识器配置属性放进原始数据对象
primaryRadarData.setLadleNumber(sysIdentifier.getLadleNumber());
primaryRadarData.setRadarLocation(radar.getRadarLocation());
primaryRadarData.setRadarIp(radar.getRadarIp());
if (modbusResponse.getValue4() != 0){
// 给雷达识别报表赋值
sysDiscern.setType(sysIdentifier.getType());
sysDiscern.setRadarLocation(radar.getRadarLocation());
sysDiscern.setLadleNumber(sysIdentifier.getLadleNumber());
sysDiscern.setCreateTime(new Date());
}
}
} else {
// 没有配置过将铁包号置空
primaryRadarData.setLadleNumber(null);
primaryRadarData.setRadarLocation(null);
primaryRadarData.setRadarIp(radar.getRadarIp());
}
if (modbusResponse.getValue4() != null && modbusResponse.getValue4() != 0) {
// primaryRadarDataService.insertPrimaryRadarData(primaryRadarData);
} else {
}
} catch (Exception e) {
}
}
public static void addRadar(List<SysRadar> radarList) {
List<Long> idList = allRadar.stream().map(SocketModel::getId).collect(Collectors.toList());
List<SysRadar> filterList = radarList.stream().filter(item -> !idList.contains(item.getId())).collect(Collectors.toList());
@ -189,11 +285,42 @@ public class RadarStatusController implements InitializingBean {
List<SysDiscern> discernList = new ArrayList<>();
// socket连接成功返回数据
DataResponse data = SocketUtil.getData(socketModel);
// 天线号字符串转集合
List<String> numberList = convertStringToList(socketModel.getNumber());
for (String number : numberList) {
if (!pulse4Number.containsKey(number)) {
pulse4Number.put(number, new ArrayList<>());
}
List<Integer> pulse4Values = pulse4Number.get(number);
if (data.getData().get(7) == 0){
consecutiveZeros ++;
if (consecutiveZeros >= 10) {
// 10个0连续说明该天线没有数据 从pulse4Number中删除该天线
pulse4Number.remove(number);
// 从radarList中删除该天线
allRadar.remove(socketModel);
// 数据记录结束计算最大pulse4值
double maxPulse4 = pulse4Values.stream().mapToDouble(Integer::doubleValue).max().orElse(0);
System.out.println("天线 " + number + " 的最大pulse4值为: " + maxPulse4);
// 为下一次数据记录重置
pulse4Values.clear();
consecutiveZeros = 0;
}
}else {
count ++;
pulse4Values.add(data.getData().get(7));
}
}
SysDiscern sysDiscern = copyDataToDiscern(data);
System.out.println(socketModel.getRadarIp() + ": " + data);
// 雷达数据返回封装类赋值
ModbusResponse modbusResponse = getModbusResponse(data);
String tag = modbusResponse.getTagId();
// 雷达原始数据对象
PrimaryRadarData primaryRadarData = new PrimaryRadarData();
@ -219,9 +346,7 @@ public class RadarStatusController implements InitializingBean {
sysDiscern.setRadarLocation(socketModel.getRadarLocation());
sysDiscern.setLadleNumber(sysIdentifier.getLadleNumber());
sysDiscern.setCreateTime(new Date());
}
}
} else {
// 没有配置过将铁包号置空
@ -263,7 +388,7 @@ public class RadarStatusController implements InitializingBean {
* @param data
* @return ModbusResponse
*/
private static ModbusResponse getModbusResponse(DataResponse data) {
public static ModbusResponse getModbusResponse(DataResponse data) {
ModbusResponse modbusResponse = new ModbusResponse();
modbusResponse.setRadarNum(data.getData().get(0).toString());
modbusResponse.setTagId(data.getData().get(3).toString());
@ -286,6 +411,19 @@ public class RadarStatusController implements InitializingBean {
}
public static List<String> convertStringToList(String input) {
List<String> list = new ArrayList<>();
if (input.contains(",")) {
String[] array = input.split(",");
list.addAll(Arrays.asList(array));
} else {
list.add(input);
}
return list;
}
class ConnectionStatus {
boolean connected = false;
}

View File

@ -99,7 +99,7 @@ public class SysRadarController extends BaseController {
radar.setUpdateBy(getLoginName());
int result = radarService.updateUser(radar);
RadarStatusController.buildAllRadar(radarService.selectRadarList(new SysRadar()));
// RadarStatusController.buildAllRadar(radarService.selectRadarList(new SysRadar()));
return toAjax(result);
}
@ -141,7 +141,7 @@ public class SysRadarController extends BaseController {
ExcelUtil<RadarExcel> util = new ExcelUtil<RadarExcel>(RadarExcel.class);
List<RadarExcel> radarList = util.importExcel(file.getInputStream());
String message = radarService.importData(radarList, updateSupport);
RadarStatusController.buildAllRadar(radarService.selectRadarList(new SysRadar()));
// RadarStatusController.buildAllRadar(radarService.selectRadarList(new SysRadar()));
return AjaxResult.success(message);
}

View File

@ -12,9 +12,9 @@
<ul>
<li class="select-time">
<label>TIME </label>
<input type="text" class="time-input" id="startTime" placeholder="开始时间" name="createTime"/>
<input type="text" class="time-input" id="startTime" value-format="yyyy-MM-dd HH:mm:ss" placeholder="开始时间" name="createTime"/>
<span>-</span>
<input type="text" class="time-input" id="endTime" placeholder="结束时间" name="updateTime"/>
<input type="text" class="time-input" id="endTime" value-format="yyyy-MM-dd HH:mm:ss" placeholder="结束时间" name="updateTime"/>
</li>
<li>
雷达位置:<input type="text" name="radarLocation" placeholder="雷达位置"/>

View File

@ -20,6 +20,9 @@
</div>
</div>
</div>
<div id="vm1" style="padding: 24px">
<div style="display: flex;justify-content: flex-start;flex-wrap: wrap;background: white"></div>
</div>
<div th:include="include :: footer"></div>
<script th:inline="javascript">

View File

@ -17,5 +17,7 @@ public class SocketModel {
private int readCount;
private String number;
private Date updateTime;
}

View File

@ -14,11 +14,8 @@ import java.util.List;
public class SocketUtil {
public static DataResponse getData(SocketModel socketModel) {
public static DataResponse getData(Socket socket , String radarLocation , String radarIp) {
DataResponse dataResponse = new DataResponse();
Socket socket = socketModel.getSocket();
String radarLocation = socketModel.getRadarLocation();
String radarIp = socketModel.getRadarIp();
dataResponse.setRadarIp(radarIp);
dataResponse.setRadarLocation(radarLocation);
try {