From 0bdfd5a3b4f21f8b86fca2387a24d12ef1f45f00 Mon Sep 17 00:00:00 2001 From: sdy Date: Mon, 22 Jun 2026 16:33:55 +0800 Subject: [PATCH] =?UTF-8?q?1.=E8=9B=99=E8=B7=B3=E5=A2=9E=E5=8A=A0=E6=B5=8B?= =?UTF-8?q?=E8=AF=95=E6=8E=A5=E5=8F=A3=202.=E6=9C=BA=E5=BA=93=E5=88=97?= =?UTF-8?q?=E8=A1=A8=E3=80=81=E8=9B=99=E8=B7=B3=E5=88=97=E8=A1=A8=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=E9=A3=9E=E6=9C=BA=E6=98=AF=E5=90=A6=E5=9C=A8=E8=88=B1?= =?UTF-8?q?=E5=86=85=E6=A0=87=E8=AF=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../business/controller/MultiController.java | 9 ++++ .../modules/business/dto/DockDTO.java | 4 ++ .../modules/business/dto/MultiTestDTO.java | 39 +++++++++++++++++ .../business/dto/multi/MultiGroupDTO.java | 10 ++--- .../business/service/DJIBaseService.java | 3 ++ .../business/service/MultiService.java | 3 ++ .../service/impl/DJIBaseServiceImpl.java | 11 +++++ .../service/impl/DockServiceImpl.java | 10 +++-- .../service/impl/MultiServiceImpl.java | 43 ++++++++++++++++++- 9 files changed, 121 insertions(+), 11 deletions(-) create mode 100644 admin/src/main/java/com/multictrl/modules/business/dto/MultiTestDTO.java diff --git a/admin/src/main/java/com/multictrl/modules/business/controller/MultiController.java b/admin/src/main/java/com/multictrl/modules/business/controller/MultiController.java index a7039f1..4e84af3 100644 --- a/admin/src/main/java/com/multictrl/modules/business/controller/MultiController.java +++ b/admin/src/main/java/com/multictrl/modules/business/controller/MultiController.java @@ -11,6 +11,7 @@ import com.multictrl.common.validator.ValidatorUtils; import com.multictrl.common.validator.group.AddGroup; import com.multictrl.common.validator.group.UpdateGroup; import com.multictrl.modules.business.dto.DockDTO; +import com.multictrl.modules.business.dto.MultiTestDTO; import com.multictrl.modules.business.dto.multi.MultiDockDTO; import com.multictrl.modules.business.dto.multi.MultiGroupDTO; import com.multictrl.modules.business.dto.multi.MultiGroupDeviceDTO; @@ -135,4 +136,12 @@ public class MultiController { List list = multiService.getMultiGroupDockList(multiGroupId); return new Result>().ok(list); } + + @PostMapping("/multiGroupDockTest") + @Operation(summary = "蛙跳组机库测试") + public Result multiGroupDockTest(MultiTestDTO dto) { + String message = multiService.multiGroupDockTest(dto); + + return new Result().ok(message); + } } diff --git a/admin/src/main/java/com/multictrl/modules/business/dto/DockDTO.java b/admin/src/main/java/com/multictrl/modules/business/dto/DockDTO.java index 8dcedd2..0bd14ed 100644 --- a/admin/src/main/java/com/multictrl/modules/business/dto/DockDTO.java +++ b/admin/src/main/java/com/multictrl/modules/business/dto/DockDTO.java @@ -111,6 +111,10 @@ public class DockDTO implements Serializable { @Schema(description = "机库模式") private String dockMode; + @JsonProperty(access = JsonProperty.Access.READ_ONLY) + @Schema(description = "舱内是否有飞机") + private Boolean hasUav; + @JsonIgnore @Schema(hidden = true) @AssertTrue(message = "机库型号不能为空", groups = {AddGroup.class, UpdateGroup.class}) diff --git a/admin/src/main/java/com/multictrl/modules/business/dto/MultiTestDTO.java b/admin/src/main/java/com/multictrl/modules/business/dto/MultiTestDTO.java new file mode 100644 index 0000000..071a11f --- /dev/null +++ b/admin/src/main/java/com/multictrl/modules/business/dto/MultiTestDTO.java @@ -0,0 +1,39 @@ +package com.multictrl.modules.business.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +/** + * 蛙跳组测试参数 + * + * @author Sdy + * @since 1.0.0 2026/6/22 + */ +@Data +@Schema(name = "蛙跳组测试参数") +public class MultiTestDTO { + + @Schema(description = "妙算SN") + private String dockSn; + + @Schema(description = "航线标识") + private Long routeId; + + @Schema(description = "经度1") + private Double lon1; + + @Schema(description = "纬度1") + private Double lat1; + + @Schema(description = "高度1") + private Double height1; + + @Schema(description = "经度2") + private Double lon2; + + @Schema(description = "纬度2") + private Double lat2; + + @Schema(description = "高度2") + private Double height2; +} diff --git a/admin/src/main/java/com/multictrl/modules/business/dto/multi/MultiGroupDTO.java b/admin/src/main/java/com/multictrl/modules/business/dto/multi/MultiGroupDTO.java index 79f78c6..ce97f3d 100644 --- a/admin/src/main/java/com/multictrl/modules/business/dto/multi/MultiGroupDTO.java +++ b/admin/src/main/java/com/multictrl/modules/business/dto/multi/MultiGroupDTO.java @@ -18,27 +18,27 @@ import lombok.Data; @Schema(name = "蛙跳组信息") public class MultiGroupDTO { - @Null(message = "{id.null}", groups = AddGroup.class) - @NotNull(message = "{id.require}", groups = UpdateGroup.class) + @Null(message = "主键必须为空", groups = AddGroup.class) + @NotNull(message = "主键不能为空", groups = UpdateGroup.class) @Schema(description = "主键") private Long id; /** * 蛙跳组名称 */ - @NotBlank(message = "{group.name.require}", groups = {AddGroup.class, UpdateGroup.class}) + @NotBlank(message = "蛙跳组名称不能为空", groups = {AddGroup.class, UpdateGroup.class}) @JsonProperty(required = true) @Schema(description = "蛙跳组名称") private String groupName; /** * 蛙跳组备注说明 */ - @NotBlank(message = "{group.mark.require}", groups = {AddGroup.class, UpdateGroup.class}) + @NotBlank(message = "蛙跳组备注不能为空", groups = {AddGroup.class, UpdateGroup.class}) @JsonProperty(required = true) @Schema(description = "蛙跳组备注说明") private String groupMark; - @NotNull(message = "{dept.id.require}", groups = {AddGroup.class, UpdateGroup.class}) + @NotNull(message = "所属部门不能为空", groups = {AddGroup.class, UpdateGroup.class}) @JsonProperty(required = true) @Schema(description = "所属部门") private Long deptId; diff --git a/admin/src/main/java/com/multictrl/modules/business/service/DJIBaseService.java b/admin/src/main/java/com/multictrl/modules/business/service/DJIBaseService.java index a219d8f..cfb5847 100644 --- a/admin/src/main/java/com/multictrl/modules/business/service/DJIBaseService.java +++ b/admin/src/main/java/com/multictrl/modules/business/service/DJIBaseService.java @@ -53,6 +53,9 @@ public interface DJIBaseService { //机场是否在线 Boolean isDockOnline(String dockSn); + //机场内是否有飞机 + Boolean isDockHasUav(String dockSn); + // 获取当前待回复命令信息(测试/模拟用) JSONObject getPendingCmd(String deviceSn); diff --git a/admin/src/main/java/com/multictrl/modules/business/service/MultiService.java b/admin/src/main/java/com/multictrl/modules/business/service/MultiService.java index b077e0e..26b75dd 100644 --- a/admin/src/main/java/com/multictrl/modules/business/service/MultiService.java +++ b/admin/src/main/java/com/multictrl/modules/business/service/MultiService.java @@ -2,6 +2,7 @@ package com.multictrl.modules.business.service; import com.multictrl.common.page.PageData; import com.multictrl.modules.business.dto.DockDTO; +import com.multictrl.modules.business.dto.MultiTestDTO; import com.multictrl.modules.business.dto.multi.MultiDockDTO; import com.multictrl.modules.business.dto.multi.MultiGroupDTO; import com.multictrl.modules.business.dto.multi.MultiGroupDeviceDTO; @@ -41,4 +42,6 @@ public interface MultiService { String privateMultiDockFlightTaskInbound(MultiTaskDTO multiTaskDTO); + //蛙跳机库测试 + String multiGroupDockTest(MultiTestDTO dto); } diff --git a/admin/src/main/java/com/multictrl/modules/business/service/impl/DJIBaseServiceImpl.java b/admin/src/main/java/com/multictrl/modules/business/service/impl/DJIBaseServiceImpl.java index 1c56e89..25eb071 100644 --- a/admin/src/main/java/com/multictrl/modules/business/service/impl/DJIBaseServiceImpl.java +++ b/admin/src/main/java/com/multictrl/modules/business/service/impl/DJIBaseServiceImpl.java @@ -258,4 +258,15 @@ public class DJIBaseServiceImpl implements DJIBaseService { Object object = CacheUtils.get(BusinessConstant.DOCK_OSD + dockSn); return object != null; } + + @Override + public Boolean isDockHasUav(String dockSn) { + Object o = CacheUtils.get(BusinessConstant.DOCK_OSD + dockSn); + if (o != null) { + JSONObject data = (JSONObject) o; + Integer droneInDock = data.getInt("drone_in_dock"); + return droneInDock == 1; + } + return false; + } } diff --git a/admin/src/main/java/com/multictrl/modules/business/service/impl/DockServiceImpl.java b/admin/src/main/java/com/multictrl/modules/business/service/impl/DockServiceImpl.java index bf5673b..244f7f8 100644 --- a/admin/src/main/java/com/multictrl/modules/business/service/impl/DockServiceImpl.java +++ b/admin/src/main/java/com/multictrl/modules/business/service/impl/DockServiceImpl.java @@ -95,10 +95,12 @@ public class DockServiceImpl extends CrudServiceImpl page = page(params); for (DockDTO dockDTO : page.getList()) { - Integer dockModeCode = djiBaseService.getDockModeCode(dockDTO.getDockSn()); + String dockSn = dockDTO.getDockSn(); + Integer dockModeCode = djiBaseService.getDockModeCode(dockSn); dockDTO.setDockMode(DockMode.getDescByCode(dockModeCode)); - dockDTO.setOnline(djiBaseService.isDockOnline(dockDTO.getDockSn())); - List deviceEntityList = dockDeviceDao.selectList(new QueryWrapper().eq("parent_sn", dockDTO.getDockSn())); + dockDTO.setOnline(djiBaseService.isDockOnline(dockSn)); + dockDTO.setHasUav(djiBaseService.isDockHasUav(dockSn)); + List deviceEntityList = dockDeviceDao.selectList(new QueryWrapper().eq("parent_sn", dockSn)); for (DockDeviceEntity dockDevice : deviceEntityList) { String deviceModelKey = dockDevice.getDeviceModelKey(); if (deviceModelKey.startsWith("0")) { @@ -113,7 +115,7 @@ public class DockServiceImpl extends CrudServiceImpl().eq("sn", dockDTO.getDockSn())); + DockDeviceEntity dockDevice = dockDeviceDao.selectOne(new QueryWrapper().eq("sn", dockSn)); if (dockDevice != null) { dockDTO.setImgUrl(BusinessConstant.IMAGE_PATH + DJIImage.getImageUrlByName(dockDevice.getDeviceName())); dockDTO.setDockModel(dockDevice.getDeviceName()); diff --git a/admin/src/main/java/com/multictrl/modules/business/service/impl/MultiServiceImpl.java b/admin/src/main/java/com/multictrl/modules/business/service/impl/MultiServiceImpl.java index a404c52..ecffc41 100644 --- a/admin/src/main/java/com/multictrl/modules/business/service/impl/MultiServiceImpl.java +++ b/admin/src/main/java/com/multictrl/modules/business/service/impl/MultiServiceImpl.java @@ -1,6 +1,7 @@ package com.multictrl.modules.business.service.impl; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.json.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -15,6 +16,7 @@ import com.multictrl.common.utils.MessageUtils; import com.multictrl.modules.business.dao.MultiGroupDao; import com.multictrl.modules.business.dao.MultiGroupDeviceDao; import com.multictrl.modules.business.dto.DockDTO; +import com.multictrl.modules.business.dto.MultiTestDTO; import com.multictrl.modules.business.dto.flight.FlightExecute; import com.multictrl.modules.business.dto.multi.MultiDockDTO; import com.multictrl.modules.business.dto.multi.MultiGroupDTO; @@ -291,6 +293,41 @@ public class MultiServiceImpl implements MultiService { return "流程结束"; } + @Override + public String multiGroupDockTest(MultiTestDTO dto) { + //第三步,下发航线给psdk + FlightExecute flightExecute = new FlightExecute(); + flightExecute.setTaskId(IdUtil.fastSimpleUUID()); + flightExecute.setRouteId(dto.getRouteId()); + //获取每个机库的 经纬度/高度/备降点经纬度/备降点高度 + List privateMultiFlightBindDockInfos = new ArrayList<>(); + PrivateMultiFlightBindDockInfo privateMultiFlightBindDockInfo = new PrivateMultiFlightBindDockInfo(); + privateMultiFlightBindDockInfo.setDock_sn("dock1"); + privateMultiFlightBindDockInfo.setLongitude(dto.getLon1()); + privateMultiFlightBindDockInfo.setLatitude(dto.getLat1()); + privateMultiFlightBindDockInfo.setHeight(dto.getHeight1()); + privateMultiFlightBindDockInfo.setAlternate_land_point_longitude(dto.getLon1()); + privateMultiFlightBindDockInfo.setAlternate_land_point_latitude(dto.getLat1()); + privateMultiFlightBindDockInfo.setAlternate_land_point_height(dto.getHeight1()); + privateMultiFlightBindDockInfo.setAlternate_land_point_safe_land_height(100d); + privateMultiFlightBindDockInfos.add(privateMultiFlightBindDockInfo); + + PrivateMultiFlightBindDockInfo privateMultiFlightBindDockInfo2 = new PrivateMultiFlightBindDockInfo(); + privateMultiFlightBindDockInfo2.setDock_sn("dock2"); + privateMultiFlightBindDockInfo2.setLongitude(dto.getLon2()); + privateMultiFlightBindDockInfo2.setLatitude(dto.getLat2()); + privateMultiFlightBindDockInfo2.setHeight(dto.getHeight2()); + privateMultiFlightBindDockInfo2.setAlternate_land_point_longitude(dto.getLon2()); + privateMultiFlightBindDockInfo2.setAlternate_land_point_latitude(dto.getLat2()); + privateMultiFlightBindDockInfo2.setAlternate_land_point_height(dto.getHeight2()); + privateMultiFlightBindDockInfo2.setAlternate_land_point_safe_land_height(100d); + privateMultiFlightBindDockInfos.add(privateMultiFlightBindDockInfo2); + flightExecute.setPrivateMultiFlightBindDockInfos(privateMultiFlightBindDockInfos); + + log.info("privateMultiDockFlightTaskOutbound-> 下发航线给妙算 flightExecute:{}", flightExecute); + return routeFlightService.flightExecute(dto.getDockSn(), flightExecute, true, FlightTaskType.ROUTE.getCode()); + } + private String privateMultiDockTaskFlightTaskCheck(String dockSn) { return djiBaseService.executeAndReturnResult(dockSn, "private_multi_dock_task_flighttask_check"); } @@ -316,9 +353,11 @@ public class MultiServiceImpl implements MultiService { //机库增加属性 private void addDockProperty(List dockDTOList) { for (DockDTO dockDTO : dockDTOList) { - Integer dockModeCode = djiBaseService.getDockModeCode(dockDTO.getDockSn()); + String dockSn = dockDTO.getDockSn(); + Integer dockModeCode = djiBaseService.getDockModeCode(dockSn); dockDTO.setDockMode(DockMode.getDescByCode(dockModeCode)); - dockDTO.setOnline(djiBaseService.isDockOnline(dockDTO.getDockSn())); + dockDTO.setOnline(djiBaseService.isDockOnline(dockSn)); + dockDTO.setHasUav(djiBaseService.isDockHasUav(dockSn)); String dockType = dockDTO.getDockType(); if (BusinessConstant.MIAO_SUAN_SIGN.equals(dockType)) { List list = dictDataDao.selectList(new QueryWrapper()