Merge branch 'main' of http://182.92.203.107:3000/libingkun/skyeyesystem
This commit is contained in:
commit
d28308f181
@ -392,7 +392,7 @@ public class JmJobServiceImpl implements JmJobService {
|
|||||||
String[] kmzDirPath = fileTypeService.getDirectoryPath(FileTypeEnum.UAV_KMZ, jobExecId);
|
String[] kmzDirPath = fileTypeService.getDirectoryPath(FileTypeEnum.UAV_KMZ, jobExecId);
|
||||||
for (JmJobUav juav : job.getUavList()) {
|
for (JmJobUav juav : job.getUavList()) {
|
||||||
Long uavId = juav.getUavId();
|
Long uavId = juav.getUavId();
|
||||||
generateKmz(kmzDirPath[0], uavId, juav);
|
generateKmz(kmzDirPath[0], uavId, juav, job.getName());
|
||||||
log.info("生成kmz:" + kmzDirPath[0]);
|
log.info("生成kmz:" + kmzDirPath[0]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -430,11 +430,11 @@ public class JmJobServiceImpl implements JmJobService {
|
|||||||
/**
|
/**
|
||||||
* 生成kmz文件
|
* 生成kmz文件
|
||||||
*/
|
*/
|
||||||
private void generateKmz(String dirPath, Long uavId, JmJobUav uav) {
|
private void generateKmz(String dirPath, Long uavId, JmJobUav uav, String jobName) {
|
||||||
String kmlPath = dirPath + "/" + uavId; // 临时目录
|
String kmlPath = dirPath + "/" + uavId; // 临时目录
|
||||||
KmzGen.generateKmz(kmlPath, uav, 0, uav.getSar0().getHeadingDiff());
|
KmzGen.generateKmz(kmlPath, uav, 0, uav.getSar0().getHeadingDiff());
|
||||||
try {
|
try {
|
||||||
ZipUtil.zip(kmlPath, dirPath + "/" + uavId + ".kmz", false);
|
ZipUtil.zip(kmlPath, dirPath + "/" + jobName + "_" + uavId + ".kmz", false);
|
||||||
FileUtil.delete(kmlPath);
|
FileUtil.delete(kmlPath);
|
||||||
} catch (IOException ex) {
|
} catch (IOException ex) {
|
||||||
throw new ServiceException("生成zip文件出错:" + ex.getMessage());
|
throw new ServiceException("生成zip文件出错:" + ex.getMessage());
|
||||||
@ -463,6 +463,7 @@ public class JmJobServiceImpl implements JmJobService {
|
|||||||
// 通知前端任务停止
|
// 通知前端任务停止
|
||||||
JmJobStatusWsDTO wsVo = new JmJobStatusWsDTO(id, uav.getUavId());
|
JmJobStatusWsDTO wsVo = new JmJobStatusWsDTO(id, uav.getUavId());
|
||||||
wsVo.setJobStatus(ExecStatusEnum.OVER.getValue());
|
wsVo.setJobStatus(ExecStatusEnum.OVER.getValue());
|
||||||
|
log.debug("send status:\n{}", JSON.toJSONString(wsVo));
|
||||||
simpMessagingTemplate.convertAndSend(WebSocketKey.JM_JOB_STATUS, wsVo);
|
simpMessagingTemplate.convertAndSend(WebSocketKey.JM_JOB_STATUS, wsVo);
|
||||||
});
|
});
|
||||||
// 删除缓存任务信息
|
// 删除缓存任务信息
|
||||||
|
|||||||
@ -1,5 +1,6 @@
|
|||||||
package com.zhangy.skyeye.jm.service.impl;
|
package com.zhangy.skyeye.jm.service.impl;
|
||||||
|
|
||||||
|
import com.alibaba.fastjson2.JSON;
|
||||||
import com.zhangy.skyeye.common.extend.exception.ServiceException;
|
import com.zhangy.skyeye.common.extend.exception.ServiceException;
|
||||||
import com.zhangy.skyeye.common.extend.util.MessageUtils;
|
import com.zhangy.skyeye.common.extend.util.MessageUtils;
|
||||||
import com.zhangy.skyeye.jm.dto.*;
|
import com.zhangy.skyeye.jm.dto.*;
|
||||||
@ -306,6 +307,7 @@ public class JmJobStatusServiceImpl implements JmJobStatusService {
|
|||||||
|
|
||||||
// 4.将更新后的状态推送到前端
|
// 4.将更新后的状态推送到前端
|
||||||
wsVo.setSarStatus(curr);
|
wsVo.setSarStatus(curr);
|
||||||
|
log.debug("send status:\n{}", JSON.toJSONString(wsVo));
|
||||||
simpMessageingTemplate.convertAndSend(WebSocketKey.JM_JOB_STATUS, wsVo);
|
simpMessageingTemplate.convertAndSend(WebSocketKey.JM_JOB_STATUS, wsVo);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -45,7 +45,7 @@ public class ImageUtil {
|
|||||||
int lightRate = rotateDTO.getLightRate();
|
int lightRate = rotateDTO.getLightRate();
|
||||||
if (lightRate != 0) {
|
if (lightRate != 0) {
|
||||||
//OpenCVUtil.multiply(image, lightRate);
|
//OpenCVUtil.multiply(image, lightRate);
|
||||||
OpenCVUtil.enhanceContrast(image, lightRate, 0);
|
// OpenCVUtil.enhanceContrast(image, lightRate, 0);
|
||||||
}
|
}
|
||||||
return image;
|
return image;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,5 +1,6 @@
|
|||||||
package com.zhangy.skyeye.sar.control;
|
package com.zhangy.skyeye.sar.control;
|
||||||
|
|
||||||
|
import com.alibaba.fastjson2.JSON;
|
||||||
import com.zhangy.skyeye.common.extend.exception.ServiceException;
|
import com.zhangy.skyeye.common.extend.exception.ServiceException;
|
||||||
import com.zhangy.skyeye.common.extend.util.ObjectUtil;
|
import com.zhangy.skyeye.common.extend.util.ObjectUtil;
|
||||||
import com.zhangy.skyeye.redis.utils.RedisUtil;
|
import com.zhangy.skyeye.redis.utils.RedisUtil;
|
||||||
@ -108,8 +109,8 @@ public class SarControlContext {
|
|||||||
private void sendUdp(SarControlDTO control) {
|
private void sendUdp(SarControlDTO control) {
|
||||||
SarControlTypeEnum controlType = control.getControlType();
|
SarControlTypeEnum controlType = control.getControlType();
|
||||||
String ip = control.getIp();
|
String ip = control.getIp();
|
||||||
log.debug("开始发送雷达控制指令[" + controlType + "]----------------------");
|
// log.debug("开始发送雷达控制指令[" + controlType + "]----------------------");
|
||||||
//System.out.println(control);
|
log.debug("send control:\n{}", JSON.toJSONString(control));
|
||||||
try (DatagramSocket socket = new DatagramSocket()) {
|
try (DatagramSocket socket = new DatagramSocket()) {
|
||||||
byte[] content = pack(control);
|
byte[] content = pack(control);
|
||||||
socket.connect(new InetSocketAddress(ip, PORT));
|
socket.connect(new InetSocketAddress(ip, PORT));
|
||||||
|
|||||||
@ -1,5 +1,6 @@
|
|||||||
package com.zhangy.skyeye.sar.listen;
|
package com.zhangy.skyeye.sar.listen;
|
||||||
|
|
||||||
|
import com.alibaba.fastjson2.JSON;
|
||||||
import com.zhangy.skyeye.sar.dto.SarImagePacketGroupDTO;
|
import com.zhangy.skyeye.sar.dto.SarImagePacketGroupDTO;
|
||||||
import com.zhangy.skyeye.sar.dto.SarImagePacketDTO;
|
import com.zhangy.skyeye.sar.dto.SarImagePacketDTO;
|
||||||
import com.zhangy.skyeye.sar.task.CircularBufferQueue;
|
import com.zhangy.skyeye.sar.task.CircularBufferQueue;
|
||||||
@ -67,6 +68,7 @@ public class SarImageListener extends SarAbstractListener {
|
|||||||
String ip = packet.getAddress().getHostAddress();
|
String ip = packet.getAddress().getHostAddress();
|
||||||
// 处理接收到的数据
|
// 处理接收到的数据
|
||||||
SarImagePacketDTO backPackDTO = SarImagePacketDTO.parse(packet.getData(), packet.getLength());
|
SarImagePacketDTO backPackDTO = SarImagePacketDTO.parse(packet.getData(), packet.getLength());
|
||||||
|
log.debug("recv image:\n{}", JSON.toJSONString(backPackDTO));
|
||||||
if (backPackDTO == null) {
|
if (backPackDTO == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,5 +1,6 @@
|
|||||||
package com.zhangy.skyeye.sar.listen;
|
package com.zhangy.skyeye.sar.listen;
|
||||||
|
|
||||||
|
import com.alibaba.fastjson2.JSON;
|
||||||
import com.zhangy.skyeye.redis.utils.RedisUtil;
|
import com.zhangy.skyeye.redis.utils.RedisUtil;
|
||||||
import com.zhangy.skyeye.jm.dto.JmSarStatusDTO;
|
import com.zhangy.skyeye.jm.dto.JmSarStatusDTO;
|
||||||
import com.zhangy.skyeye.jm.service.JmJobStatusService;
|
import com.zhangy.skyeye.jm.service.JmJobStatusService;
|
||||||
@ -78,6 +79,7 @@ public class SarStatusListener extends SarAbstractListener {
|
|||||||
String ip = packet.getAddress().getHostAddress();
|
String ip = packet.getAddress().getHostAddress();
|
||||||
// 处理接收到的数据
|
// 处理接收到的数据
|
||||||
SarStatusPackDTO packDTO = SarStatusPackDTO.parse(ip, packet.getData());
|
SarStatusPackDTO packDTO = SarStatusPackDTO.parse(ip, packet.getData());
|
||||||
|
log.debug("recv status:\n{}", JSON.toJSONString(packDTO));
|
||||||
if (packDTO == null) {
|
if (packDTO == null) {
|
||||||
if (running)
|
if (running)
|
||||||
log.warn("[" + packDTO.getPayloadIp() + "]状态包校验失败,已丢弃。错误包=" +
|
log.warn("[" + packDTO.getPayloadIp() + "]状态包校验失败,已丢弃。错误包=" +
|
||||||
|
|||||||
@ -1,5 +1,6 @@
|
|||||||
package com.zhangy.skyeye.sar.listen;
|
package com.zhangy.skyeye.sar.listen;
|
||||||
|
|
||||||
|
import com.alibaba.fastjson2.JSON;
|
||||||
import com.zhangy.skyeye.sar.dto.SarWavePackDTO;
|
import com.zhangy.skyeye.sar.dto.SarWavePackDTO;
|
||||||
import com.zhangy.skyeye.sar.task.CircularBufferQueue;
|
import com.zhangy.skyeye.sar.task.CircularBufferQueue;
|
||||||
import com.zhangy.skyeye.sar.task.DiscardOldestPolicyWithLog;
|
import com.zhangy.skyeye.sar.task.DiscardOldestPolicyWithLog;
|
||||||
@ -62,6 +63,7 @@ public class SarWaveListener extends SarAbstractListener {
|
|||||||
String ip = packet.getAddress().getHostAddress();
|
String ip = packet.getAddress().getHostAddress();
|
||||||
// 处理接收到的数据
|
// 处理接收到的数据
|
||||||
SarWavePackDTO backPackDTO = SarWavePackDTO.parse(packet.getData());
|
SarWavePackDTO backPackDTO = SarWavePackDTO.parse(packet.getData());
|
||||||
|
log.debug("recv wave:\n{}", JSON.toJSONString(backPackDTO));
|
||||||
if (backPackDTO == null) {
|
if (backPackDTO == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,5 +1,6 @@
|
|||||||
package com.zhangy.skyeye.sar.service.impl;
|
package com.zhangy.skyeye.sar.service.impl;
|
||||||
|
|
||||||
|
import com.alibaba.fastjson2.JSON;
|
||||||
import com.zhangy.skyeye.jm.dto.JmAirlineStatusDTO;
|
import com.zhangy.skyeye.jm.dto.JmAirlineStatusDTO;
|
||||||
import com.zhangy.skyeye.jm.dto.JmUavStatusDTO;
|
import com.zhangy.skyeye.jm.dto.JmUavStatusDTO;
|
||||||
import com.zhangy.skyeye.jm.entity.JmImage;
|
import com.zhangy.skyeye.jm.entity.JmImage;
|
||||||
@ -40,6 +41,7 @@ public class SarBackWsServiceImpl implements ISarBackWsService {
|
|||||||
@Override
|
@Override
|
||||||
public void sendWave(String payloadIp, SarBackWaveFrameDTO frame, byte[] frameData) {
|
public void sendWave(String payloadIp, SarBackWaveFrameDTO frame, byte[] frameData) {
|
||||||
JmSarWaveWsDTO wsVo = loadJobDetail(payloadIp, frame.getChannel(), frameData);
|
JmSarWaveWsDTO wsVo = loadJobDetail(payloadIp, frame.getChannel(), frameData);
|
||||||
|
log.debug("send wave:\n{}", JSON.toJSONString(wsVo));
|
||||||
// 若载荷任务结束,sar仍然回传波形则 wsVo为空。此场景仅限sardemo,实际sar不会发生
|
// 若载荷任务结束,sar仍然回传波形则 wsVo为空。此场景仅限sardemo,实际sar不会发生
|
||||||
if (wsVo != null) {
|
if (wsVo != null) {
|
||||||
simpMessageingTemplate.convertAndSend(WebSocketKey.SAR_BACK_WAVE, wsVo);
|
simpMessageingTemplate.convertAndSend(WebSocketKey.SAR_BACK_WAVE, wsVo);
|
||||||
@ -48,6 +50,7 @@ public class SarBackWsServiceImpl implements ISarBackWsService {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void sendImg(JmImage imageInfo) {
|
public void sendImg(JmImage imageInfo) {
|
||||||
|
log.debug("send image:\n{}", JSON.toJSONString(imageInfo));
|
||||||
simpMessageingTemplate.convertAndSend(WebSocketKey.SAR_BACK_IMAGE, imageInfo);
|
simpMessageingTemplate.convertAndSend(WebSocketKey.SAR_BACK_IMAGE, imageInfo);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -67,7 +67,8 @@ public class SarImageServiceImpl implements ISarImageService {
|
|||||||
* @param frameNo 当前帧号
|
* @param frameNo 当前帧号
|
||||||
* @return 返回非空的图像信息,其字段 imageNo 一定有值
|
* @return 返回非空的图像信息,其字段 imageNo 一定有值
|
||||||
*/
|
*/
|
||||||
private JmImage getBaseImage(Long airlineId, int singleWidth, int frameNo) {IMG_MAX_WITH=1;
|
private JmImage getBaseImage(Long airlineId, int singleWidth, int frameNo) {
|
||||||
|
// IMG_MAX_WITH=1;
|
||||||
List<JmImage> imageList = imageService.selectLowByAirline(airlineId);
|
List<JmImage> imageList = imageService.selectLowByAirline(airlineId);
|
||||||
String cacheKey = "jmImgJoin-" + airlineId;
|
String cacheKey = "jmImgJoin-" + airlineId;
|
||||||
JmImage base = null;
|
JmImage base = null;
|
||||||
@ -80,17 +81,18 @@ public class SarImageServiceImpl implements ISarImageService {
|
|||||||
}
|
}
|
||||||
// 情况2:如果最后一张还能拼图,则直接返回继续拼
|
// 情况2:如果最后一张还能拼图,则直接返回继续拼
|
||||||
JmImage last = imageList.get(imageList.size() - 1);
|
JmImage last = imageList.get(imageList.size() - 1);
|
||||||
Integer startFrameNo = (Integer) redisUtil.hget(cacheKey, CACHE_FIELD_START_FRAME_NO);
|
// Integer startFrameNo = (Integer) redisUtil.hget(cacheKey, CACHE_FIELD_START_FRAME_NO);
|
||||||
int currWidth = startFrameNo == null ? 0 : singleWidth * (frameNo - startFrameNo + 1); // 图宽(当前图+基准图)
|
// int currWidth = startFrameNo == null ? 0 : singleWidth * (frameNo - startFrameNo + 1); // 图宽(当前图+基准图)
|
||||||
int surplusNum = (IMG_MAX_WITH - currWidth) / singleWidth; // 还可以拼图片数
|
// int surplusNum = (IMG_MAX_WITH - currWidth) / singleWidth; // 还可以拼图片数
|
||||||
Integer baseNo = (Integer) redisUtil.hget("jmImgJoin-" + airlineId, CACHE_FIELD_CURR_FRAME_NO);
|
// log.info("surplusNum: = " + surplusNum);
|
||||||
if (startFrameNo == null || currWidth < IMG_MAX_WITH ||
|
// Integer baseNo = (Integer) redisUtil.hget("jmImgJoin-" + airlineId, CACHE_FIELD_CURR_FRAME_NO);
|
||||||
baseNo == null || (frameNo - baseNo + 1 <= surplusNum)) { // 当前图+填充 不能超过允许拼接数
|
// if (startFrameNo == null || currWidth < IMG_MAX_WITH ||
|
||||||
log.info("当前宽度:" + currWidth + " < " + IMG_MAX_WITH + " 可以继续拼接");
|
// baseNo == null || (frameNo - baseNo + 1 <= surplusNum)) { // 当前图+填充 不能超过允许拼接数
|
||||||
return last;
|
// log.info("当前宽度:" + currWidth + " < " + IMG_MAX_WITH + " 可以继续拼接");
|
||||||
}
|
// return last;
|
||||||
|
// }
|
||||||
// 情况3:已经拼接到最大数量,或者当前图+填充数量超过允许拼接数量,创建新图像文件
|
// 情况3:已经拼接到最大数量,或者当前图+填充数量超过允许拼接数量,创建新图像文件
|
||||||
log.info("当前宽度:" + currWidth + " > " + IMG_MAX_WITH + " 重新拼接,当前帧号" + frameNo + "作为首帧");
|
// log.info("当前宽度:" + currWidth + " > " + IMG_MAX_WITH + " 重新拼接,当前帧号" + frameNo + "作为首帧");
|
||||||
base = new JmImage();
|
base = new JmImage();
|
||||||
redisUtil.hset(cacheKey, CACHE_FIELD_START_FRAME_NO, frameNo, CACHE_EXPIRE_SECOND);
|
redisUtil.hset(cacheKey, CACHE_FIELD_START_FRAME_NO, frameNo, CACHE_EXPIRE_SECOND);
|
||||||
base.setImageNo(last.getImageNo() + 1);
|
base.setImageNo(last.getImageNo() + 1);
|
||||||
|
|||||||
@ -12,6 +12,7 @@
|
|||||||
converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter"/>
|
converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter"/>
|
||||||
<conversionRule conversionWord="wEx"
|
<conversionRule conversionWord="wEx"
|
||||||
converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter"/>
|
converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter"/>
|
||||||
|
|
||||||
<!-- Console log output -->
|
<!-- Console log output -->
|
||||||
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
|
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
|
||||||
<encoder>
|
<encoder>
|
||||||
@ -30,7 +31,7 @@
|
|||||||
</rollingPolicy>
|
</rollingPolicy>
|
||||||
<encoder>
|
<encoder>
|
||||||
<charset>UTF-8</charset>
|
<charset>UTF-8</charset>
|
||||||
<pattern>%date [%thread] %-5level [%logger{50}] %file:%line - %msg%n</pattern>
|
<pattern>%date [%thread] %-5level [%logger{50}] [%file:%line] - %msg%n</pattern>
|
||||||
</encoder>
|
</encoder>
|
||||||
</appender>
|
</appender>
|
||||||
|
|
||||||
@ -44,7 +45,7 @@
|
|||||||
</rollingPolicy>
|
</rollingPolicy>
|
||||||
<encoder>
|
<encoder>
|
||||||
<charset>UTF-8</charset>
|
<charset>UTF-8</charset>
|
||||||
<pattern>%date [%thread] %-5level [%logger{50}] %file:%line - %msg%n</pattern>
|
<pattern>%date [%thread] %-5level [%logger{50}] [%file:%line] - %msg%n</pattern>
|
||||||
</encoder>
|
</encoder>
|
||||||
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
|
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
|
||||||
<level>ERROR</level>
|
<level>ERROR</level>
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user