This commit is contained in:
wxs 2026-03-09 16:50:43 +08:00
commit d28308f181
10 changed files with 35 additions and 19 deletions

View File

@ -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);
}); });
// 删除缓存任务信息 // 删除缓存任务信息

View File

@ -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);
} }

View File

@ -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;
} }

View File

@ -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));

View File

@ -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;
} }

View File

@ -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() + "]状态包校验失败,已丢弃。错误包=" +

View File

@ -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;
} }

View File

@ -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);
} }

View File

@ -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);

View File

@ -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>