1.蛙跳增加测试接口

2.机库列表、蛙跳列表增加飞机是否在舱内标识
This commit is contained in:
sdy 2026-06-22 16:33:55 +08:00
parent f4e0dae1b7
commit 0bdfd5a3b4
9 changed files with 121 additions and 11 deletions

View File

@ -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<DockDTO> list = multiService.getMultiGroupDockList(multiGroupId);
return new Result<List<DockDTO>>().ok(list);
}
@PostMapping("/multiGroupDockTest")
@Operation(summary = "蛙跳组机库测试")
public Result<String> multiGroupDockTest(MultiTestDTO dto) {
String message = multiService.multiGroupDockTest(dto);
return new Result<String>().ok(message);
}
}

View File

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

View File

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

View File

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

View File

@ -53,6 +53,9 @@ public interface DJIBaseService {
//机场是否在线
Boolean isDockOnline(String dockSn);
//机场内是否有飞机
Boolean isDockHasUav(String dockSn);
// 获取当前待回复命令信息测试/模拟用
JSONObject getPendingCmd(String deviceSn);

View File

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

View File

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

View File

@ -95,10 +95,12 @@ public class DockServiceImpl extends CrudServiceImpl<DockDao, DockEntity, DockDT
params.put("scenario", "inspection");
PageData<DockDTO> 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<DockDeviceEntity> deviceEntityList = dockDeviceDao.selectList(new QueryWrapper<DockDeviceEntity>().eq("parent_sn", dockDTO.getDockSn()));
dockDTO.setOnline(djiBaseService.isDockOnline(dockSn));
dockDTO.setHasUav(djiBaseService.isDockHasUav(dockSn));
List<DockDeviceEntity> deviceEntityList = dockDeviceDao.selectList(new QueryWrapper<DockDeviceEntity>().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<DockDao, DockEntity, DockDT
}
String dockType = dockDTO.getDockType();
if (BusinessConstant.DJI_SIGN.equals(dockType)) {
DockDeviceEntity dockDevice = dockDeviceDao.selectOne(new QueryWrapper<DockDeviceEntity>().eq("sn", dockDTO.getDockSn()));
DockDeviceEntity dockDevice = dockDeviceDao.selectOne(new QueryWrapper<DockDeviceEntity>().eq("sn", dockSn));
if (dockDevice != null) {
dockDTO.setImgUrl(BusinessConstant.IMAGE_PATH + DJIImage.getImageUrlByName(dockDevice.getDeviceName()));
dockDTO.setDockModel(dockDevice.getDeviceName());

View File

@ -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<PrivateMultiFlightBindDockInfo> 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<DockDTO> 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<SysDictDataEntity> list = dictDataDao.selectList(new QueryWrapper<SysDictDataEntity>()