From d262796fbd620a72ccce4951b3398f5f151e557e Mon Sep 17 00:00:00 2001 From: Andy Yang Date: Fri, 30 Jan 2026 19:06:15 +0800 Subject: [PATCH 1/5] add airline preview interface for preview of creating job --- .../skyeye/jm/controller/JmJobController.java | 15 +++++++++++++++ .../zhangy/skyeye/jm/service/JmJobService.java | 5 +++++ .../skyeye/jm/service/impl/JmJobServiceImpl.java | 12 ++++++++++++ 3 files changed, 32 insertions(+) diff --git a/backend/Skyeye-sys-dev/skyeye-service-manager/src/main/java/com/zhangy/skyeye/jm/controller/JmJobController.java b/backend/Skyeye-sys-dev/skyeye-service-manager/src/main/java/com/zhangy/skyeye/jm/controller/JmJobController.java index 436a9a3..a111168 100644 --- a/backend/Skyeye-sys-dev/skyeye-service-manager/src/main/java/com/zhangy/skyeye/jm/controller/JmJobController.java +++ b/backend/Skyeye-sys-dev/skyeye-service-manager/src/main/java/com/zhangy/skyeye/jm/controller/JmJobController.java @@ -86,6 +86,21 @@ public class JmJobController { return jobService.save(mode, e); } + /** + * 预览 + */ + @PostMapping("/preview") + public Object preview(@Valid @RequestBody JmJobDTO e) { + JmJobModeEnum mode = EnumUtil.parseEx(JmJobModeEnum.class, e.getMode()); + clearId(e); + // 默认执行一次性任务 + if (e.getType() == null) { + e.setType(1); + e.setCronExpression(null); + } + return jobService.preview(mode, e); + } + /** */ @PostMapping("/update") diff --git a/backend/Skyeye-sys-dev/skyeye-service-manager/src/main/java/com/zhangy/skyeye/jm/service/JmJobService.java b/backend/Skyeye-sys-dev/skyeye-service-manager/src/main/java/com/zhangy/skyeye/jm/service/JmJobService.java index 9cd34bd..2430c2a 100644 --- a/backend/Skyeye-sys-dev/skyeye-service-manager/src/main/java/com/zhangy/skyeye/jm/service/JmJobService.java +++ b/backend/Skyeye-sys-dev/skyeye-service-manager/src/main/java/com/zhangy/skyeye/jm/service/JmJobService.java @@ -44,6 +44,11 @@ public interface JmJobService { */ JmJob save(JmJobModeEnum mode, JmJobDTO e); + /** + * 预览 + */ + JmJobDTO preview(JmJobModeEnum mode, JmJobDTO e); + /** * 修改(不为空的字段) */ diff --git a/backend/Skyeye-sys-dev/skyeye-service-manager/src/main/java/com/zhangy/skyeye/jm/service/impl/JmJobServiceImpl.java b/backend/Skyeye-sys-dev/skyeye-service-manager/src/main/java/com/zhangy/skyeye/jm/service/impl/JmJobServiceImpl.java index 286ac7f..ff2657f 100644 --- a/backend/Skyeye-sys-dev/skyeye-service-manager/src/main/java/com/zhangy/skyeye/jm/service/impl/JmJobServiceImpl.java +++ b/backend/Skyeye-sys-dev/skyeye-service-manager/src/main/java/com/zhangy/skyeye/jm/service/impl/JmJobServiceImpl.java @@ -158,6 +158,18 @@ public class JmJobServiceImpl implements JmJobService { return insert(e); } + @Override + public JmJobDTO preview(JmJobModeEnum jobMode, JmJobDTO e) { + log.info("预览任务参数:{}||{}", JSON.toJSONString(jobMode), JSON.toJSONString(e)); + SarImageModeEnum imageMode = EnumUtil.parseEx(SarImageModeEnum.class, e.getImageMode()); + // 非航线模式需要调算法生成航线,需要从缓存取sar坐标 + Map> airlineGroup = jmAirlinePlanService.plan(jobMode, imageMode, e.getTargetType(), + e.getUavList(), e.getPointList()); + // 校验并加载数据 + checkAndSetUav(e.getUavList(), airlineGroup); + return e; + } + @Override public void updateNotNull(JmJob e) { jobMapper.updateNotNull(e); From 5c28a9c14ee62dcd1d6e0fbe522d3aaeb5ba1402 Mon Sep 17 00:00:00 2001 From: Bingkun Li Date: Sat, 31 Jan 2026 14:52:18 +0800 Subject: [PATCH 2/5] Bug: Fix bug that back wave and job status did not send back to frontend --- .../service/impl/JmJobStatusServiceImpl.java | 18 ++++++++++++------ .../zhangy/skyeye/publics/consts/CacheKey.java | 12 ++++++------ .../sar/service/impl/SarBackWsServiceImpl.java | 7 ++++++- 3 files changed, 24 insertions(+), 13 deletions(-) diff --git a/backend/Skyeye-sys-dev/skyeye-service-manager/src/main/java/com/zhangy/skyeye/jm/service/impl/JmJobStatusServiceImpl.java b/backend/Skyeye-sys-dev/skyeye-service-manager/src/main/java/com/zhangy/skyeye/jm/service/impl/JmJobStatusServiceImpl.java index 04be971..ed52b92 100644 --- a/backend/Skyeye-sys-dev/skyeye-service-manager/src/main/java/com/zhangy/skyeye/jm/service/impl/JmJobStatusServiceImpl.java +++ b/backend/Skyeye-sys-dev/skyeye-service-manager/src/main/java/com/zhangy/skyeye/jm/service/impl/JmJobStatusServiceImpl.java @@ -283,17 +283,23 @@ public class JmJobStatusServiceImpl implements JmJobStatusService { return; } endAirline(jobId, jobVo, uavVo, airlineVo, wsVo, nextAirline == null); - } else if (isBoot == 1 && aStatus == ExecStatusEnum.PROCESSING && overButSending) { - // 前一航线的图片没传完,就开始了新航线 - endAirline(jobId, jobVo, uavVo, airlineVo, wsVo, nextAirline == null); - if (nextAirline != null) { - startAirline(nextAirline, wsVo); + } else if (isBoot == 1 && aStatus == ExecStatusEnum.PROCESSING) { + if (overButSending) { + // 前一航线的图片没传完,就开始了新航线 + endAirline(jobId, jobVo, uavVo, airlineVo, wsVo, nextAirline == null); + if (nextAirline != null) { + startAirline(nextAirline, wsVo); + } } + + // simpMessageingTemplate.convertAndSend(WebSocketKey.JM_JOB_STATUS, wsVo); + simpMessageingTemplate.convertAndSend(WebSocketKey.JM_JOB_STATUS, curr); } else { return; } + // 4.将更新后的状态推送到前端 - simpMessageingTemplate.convertAndSend(WebSocketKey.JM_JOB_STATUS, wsVo); + // simpMessageingTemplate.convertAndSend(WebSocketKey.JM_JOB_STATUS, wsVo); } // 开启新航线 diff --git a/backend/Skyeye-sys-dev/skyeye-service-manager/src/main/java/com/zhangy/skyeye/publics/consts/CacheKey.java b/backend/Skyeye-sys-dev/skyeye-service-manager/src/main/java/com/zhangy/skyeye/publics/consts/CacheKey.java index 5ea4e0e..1de4bf1 100644 --- a/backend/Skyeye-sys-dev/skyeye-service-manager/src/main/java/com/zhangy/skyeye/publics/consts/CacheKey.java +++ b/backend/Skyeye-sys-dev/skyeye-service-manager/src/main/java/com/zhangy/skyeye/publics/consts/CacheKey.java @@ -83,30 +83,30 @@ public class CacheKey { /** * 运动规划响应,1秒 */ - public static final String SMP_WAYPOINT_RES = "skyeye:smp:waypoint:"; + //public static final String SMP_WAYPOINT_RES = "skyeye:smp:waypoint:"; /** * 飞行控制响应,1秒 */ - public static final String SMP_FLIGHT_RES = "skyeye:smp:flight:"; + //public static final String SMP_FLIGHT_RES = "skyeye:smp:flight:"; /** * 云台控制响应,1秒 */ - public static final String SMP_GIMBALMGR_RES = "skyeye:smp:gimbalmgr:"; + //public static final String SMP_GIMBALMGR_RES = "skyeye:smp:gimbalmgr:"; /** * 数据订阅响应,1秒 */ - public static final String SMP_SUBSCRIPT_RES = "skyeye:smp:subscript:"; + //public static final String SMP_SUBSCRIPT_RES = "skyeye:smp:subscript:"; /** * 数据订阅回传数据,1秒 */ - public static final String SMP_SUBSCRIPT_DATA = "skyeye:smp:subscript:"; + //public static final String SMP_SUBSCRIPT_DATA = "skyeye:smp:subscript:"; /** * 相机视频流响应,1秒 */ - public static final String SMP_VIDEO_RES = "skyeye:smp:video:"; + //public static final String SMP_VIDEO_RES = "skyeye:smp:video:"; } diff --git a/backend/Skyeye-sys-dev/skyeye-service-manager/src/main/java/com/zhangy/skyeye/sar/service/impl/SarBackWsServiceImpl.java b/backend/Skyeye-sys-dev/skyeye-service-manager/src/main/java/com/zhangy/skyeye/sar/service/impl/SarBackWsServiceImpl.java index 16694cf..71e07b4 100644 --- a/backend/Skyeye-sys-dev/skyeye-service-manager/src/main/java/com/zhangy/skyeye/sar/service/impl/SarBackWsServiceImpl.java +++ b/backend/Skyeye-sys-dev/skyeye-service-manager/src/main/java/com/zhangy/skyeye/sar/service/impl/SarBackWsServiceImpl.java @@ -3,6 +3,7 @@ package com.zhangy.skyeye.sar.service.impl; import com.zhangy.skyeye.jm.dto.JmAirlineStatusDTO; import com.zhangy.skyeye.jm.dto.JmUavStatusDTO; import com.zhangy.skyeye.jm.entity.JmImage; +import com.zhangy.skyeye.jm.service.JmJobStatusService; import com.zhangy.skyeye.publics.consts.WebSocketKey; import com.zhangy.skyeye.sar.context.SarTaskContextProvider; import com.zhangy.skyeye.sar.dto.JmSarWaveWsDTO; @@ -33,6 +34,9 @@ public class SarBackWsServiceImpl implements ISarBackWsService { @Autowired private SarTaskContextProvider taskContextProvider; + @Autowired + private JmJobStatusService jobStatusService; + @Override public void sendWave(String payloadIp, SarBackWaveFrameDTO frame, byte[] frameData) { JmSarWaveWsDTO wsVo = loadJobDetail(payloadIp, frame.getChannel(), frameData); @@ -55,7 +59,8 @@ public class SarBackWsServiceImpl implements ISarBackWsService { * @return */ private JmSarWaveWsDTO loadJobDetail(String payloadIp, JmSarWaveWsDTO ws, byte[] frameData) { - JmUavStatusDTO uav = taskContextProvider.getCurrentUav(payloadIp); + // JmUavStatusDTO uav = taskContextProvider.getCurrentUav(payloadIp); + JmUavStatusDTO uav = jobStatusService.getCurrUav(payloadIp); if (uav == null) { // 如果没有执行中的任务则忽略 log.debug("IP={} 无正在执行的任务,忽略波形推送", payloadIp); return null; From 3ad3679bc8af5ea560ffda7fcfd4678452bb4bcb Mon Sep 17 00:00:00 2001 From: Bingkun Li Date: Sat, 31 Jan 2026 15:00:59 +0800 Subject: [PATCH 3/5] Change the layout of adding job dialog, move the flight mode to front of target --- .../home/components/task-manage/index.vue | 32 +++++++++---------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/frontend/Skyeye-sys-ui/src/views/home/components/task-manage/index.vue b/frontend/Skyeye-sys-ui/src/views/home/components/task-manage/index.vue index ff36d2a..1e008a4 100644 --- a/frontend/Skyeye-sys-ui/src/views/home/components/task-manage/index.vue +++ b/frontend/Skyeye-sys-ui/src/views/home/components/task-manage/index.vue @@ -149,22 +149,6 @@ placeholder="请输入任务名称" > - - - - - + + + + + Date: Sun, 1 Feb 2026 13:03:54 +0800 Subject: [PATCH 4/5] Bug: fix the issue that image did not get saved --- .../com/zhangy/skyeye/publics/service/SysFileTypeService.java | 3 ++- .../com/zhangy/skyeye/sar/listen/SarImageUdpProcessor.java | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/backend/Skyeye-sys-dev/skyeye-service-manager/src/main/java/com/zhangy/skyeye/publics/service/SysFileTypeService.java b/backend/Skyeye-sys-dev/skyeye-service-manager/src/main/java/com/zhangy/skyeye/publics/service/SysFileTypeService.java index 3832f88..a8c9b86 100644 --- a/backend/Skyeye-sys-dev/skyeye-service-manager/src/main/java/com/zhangy/skyeye/publics/service/SysFileTypeService.java +++ b/backend/Skyeye-sys-dev/skyeye-service-manager/src/main/java/com/zhangy/skyeye/publics/service/SysFileTypeService.java @@ -12,8 +12,9 @@ public class SysFileTypeService { /** 文件根路径 */ private String fileRoot; + // 去掉末尾的路径分隔符 - @Value("$skyeye.file-root}") + @Value("${skyeye.file-root}") public void setFileRoot(String fileRoot) { this.fileRoot = fileRoot.endsWith("/") || fileRoot.endsWith("\\") ? fileRoot.substring(0, fileRoot.length() - 1) : fileRoot; } diff --git a/backend/Skyeye-sys-dev/skyeye-service-manager/src/main/java/com/zhangy/skyeye/sar/listen/SarImageUdpProcessor.java b/backend/Skyeye-sys-dev/skyeye-service-manager/src/main/java/com/zhangy/skyeye/sar/listen/SarImageUdpProcessor.java index 8c6f907..ea74e79 100644 --- a/backend/Skyeye-sys-dev/skyeye-service-manager/src/main/java/com/zhangy/skyeye/sar/listen/SarImageUdpProcessor.java +++ b/backend/Skyeye-sys-dev/skyeye-service-manager/src/main/java/com/zhangy/skyeye/sar/listen/SarImageUdpProcessor.java @@ -1,5 +1,6 @@ package com.zhangy.skyeye.sar.listen; +import com.zhangy.skyeye.common.extend.util.JsonUtil; import com.zhangy.skyeye.jm.dto.JmAirlineStatusDTO; import com.zhangy.skyeye.jm.entity.JmImage; import com.zhangy.skyeye.jm.service.JmJobStatusService; @@ -47,7 +48,7 @@ public class SarImageUdpProcessor extends SarAbstractUdpProcessor Date: Mon, 2 Feb 2026 10:29:33 +0800 Subject: [PATCH 5/5] fix user cannot start job again after a job in finished state --- .../java/com/zhangy/skyeye/jm/controller/JmJobController.java | 4 ++-- .../java/com/zhangy/skyeye/publics/consts/ExecStatusEnum.java | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/backend/Skyeye-sys-dev/skyeye-service-manager/src/main/java/com/zhangy/skyeye/jm/controller/JmJobController.java b/backend/Skyeye-sys-dev/skyeye-service-manager/src/main/java/com/zhangy/skyeye/jm/controller/JmJobController.java index a111168..56e04b9 100644 --- a/backend/Skyeye-sys-dev/skyeye-service-manager/src/main/java/com/zhangy/skyeye/jm/controller/JmJobController.java +++ b/backend/Skyeye-sys-dev/skyeye-service-manager/src/main/java/com/zhangy/skyeye/jm/controller/JmJobController.java @@ -136,8 +136,8 @@ public class JmJobController { JmJobDTO job = jobService.selectDetail(id); if (job == null) { throw ServiceException.noLog("找不到任务,id=" + id); - } else if (EnumUtil.parseEx(ExecStatusEnum.class, job.getStatus()) != ExecStatusEnum.NOT) { - throw ServiceException.noLog("任务状态不是未执行,无法起飞"); + } else if (EnumUtil.parseEx(ExecStatusEnum.class, job.getStatus()) == ExecStatusEnum.PROCESSING) { + throw ServiceException.noLog("任务状态为执行中,无法起飞"); } jobService.start(job); return "开始执行"; diff --git a/backend/Skyeye-sys-dev/skyeye-service-manager/src/main/java/com/zhangy/skyeye/publics/consts/ExecStatusEnum.java b/backend/Skyeye-sys-dev/skyeye-service-manager/src/main/java/com/zhangy/skyeye/publics/consts/ExecStatusEnum.java index fc49c5f..dce50a8 100644 --- a/backend/Skyeye-sys-dev/skyeye-service-manager/src/main/java/com/zhangy/skyeye/publics/consts/ExecStatusEnum.java +++ b/backend/Skyeye-sys-dev/skyeye-service-manager/src/main/java/com/zhangy/skyeye/publics/consts/ExecStatusEnum.java @@ -17,7 +17,7 @@ public enum ExecStatusEnum implements CodeEnum { OVER(2, "已完成"), - READY(3, "就绪"), + //READY(3, "就绪"), ; /** 值 */