Browse Source

改动

pull/6/head
吴远 1 month ago
parent
commit
38ae466a5a
  1. 15
      dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/wayline/api/IHttpWaylineService.java
  2. 23
      dk-modules/sample/src/main/java/org/dromara/sample/control/service/impl/ControlServiceImpl.java
  3. 1
      dk-modules/sample/src/main/java/org/dromara/sample/control/service/impl/SDKControlService.java
  4. 12
      dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/DeviceServiceImpl.java
  5. 10
      dk-modules/sample/src/main/java/org/dromara/sample/media/controller/FileController.java
  6. 2
      dk-modules/sample/src/main/java/org/dromara/sample/media/service/IFileService.java
  7. 15
      dk-modules/sample/src/main/java/org/dromara/sample/media/service/impl/FileServiceImpl.java
  8. 13
      dk-modules/sample/src/main/java/org/dromara/sample/media/service/impl/MediaServiceImpl.java
  9. 21
      dk-modules/sample/src/main/java/org/dromara/sample/wayline/controller/WaylineFileController.java
  10. 15
      dk-modules/sample/src/main/java/org/dromara/sample/wayline/controller/WaylineJobController.java
  11. 2
      dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/IWaylineFileService.java
  12. 2
      dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/IWaylineJobService.java
  13. 39
      dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/impl/WaylineFileServiceImpl.java
  14. 15
      dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/impl/WaylineJobServiceImpl.java
  15. 36
      dk-modules/sample/src/main/resources/mapper/IDeviceProMapper.xml

15
dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/wayline/api/IHttpWaylineService.java

@ -45,10 +45,21 @@ public interface IHttpWaylineService {
@Parameter(name = "workspace_id", description = "workspace_id", schema = @Schema(format = "uuid"))
})
@GetMapping(PREFIX + "/workspaces/{workspace_id}/waylines")
HttpResultResponse<PaginationData<GetWaylineListResponse>> getWaylineList(
HttpResultResponse<PaginationData<GetWaylineListResponse>> getWaylines(
@Valid @ParameterObject GetWaylineListRequest request,
@PathVariable(name = "workspace_id") String workspaceId,
@PathVariable(name = "proIds") List<Integer> proIds,
@RequestParam(name = "proIds",required = false) List<Integer> proIds,
HttpServletRequest req, HttpServletResponse rsp);
@Operation(summary = "获取航线路线列表", description = "根据查询条件査询路线文件的基本数据。飞行员中的查询条件字段是固定的。",
parameters = {
@Parameter(name = "workspace_id", description = "workspace_id", schema = @Schema(format = "uuid"))
})
@GetMapping(PREFIX + "/workspaces/{workspace_id}/waylinesList")
HttpResultResponse<List<GetWaylineListResponse>> getWaylineList(
@PathVariable(name = "workspace_id") String workspaceId,
@RequestParam(name = "pro_id",required = false) Integer proId,
HttpServletRequest req, HttpServletResponse rsp);
/**

23
dk-modules/sample/src/main/java/org/dromara/sample/control/service/impl/ControlServiceImpl.java

@ -3,19 +3,18 @@ package org.dromara.sample.control.service.impl;
import cn.hutool.core.date.DateUtil;
import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.common.sdk.cloudapi.control.*;
import org.dromara.common.sdk.cloudapi.wayline.OutOfControlActionEnum;
import org.dromara.common.sdk.cloudapi.wayline.TaskTypeEnum;
import org.dromara.common.sdk.cloudapi.wayline.WaylineJobTypeEnum;
import org.dromara.common.sdk.cloudapi.wayline.WaylineTypeEnum;
import org.dromara.sample.control.model.enums.PayloadCommandsEnum;
import org.dromara.sample.manage.model.dto.DeviceDTO;
import org.dromara.sample.manage.service.IDevicePayloadService;
import org.dromara.sample.manage.service.IDeviceRedisService;
import org.dromara.sample.manage.service.IDeviceService;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.extern.slf4j.Slf4j;
import org.dromara.common.sdk.cloudapi.control.FlyToPointRequest;
import org.dromara.common.sdk.cloudapi.control.PayloadAuthorityGrabRequest;
import org.dromara.common.sdk.cloudapi.control.TakeoffToPointRequest;
import org.dromara.common.sdk.cloudapi.control.api.AbstractControlService;
import org.dromara.common.sdk.cloudapi.debug.DebugMethodEnum;
import org.dromara.common.sdk.cloudapi.debug.api.AbstractDebugService;
@ -32,6 +31,8 @@ import org.dromara.sample.control.model.enums.DroneAuthorityEnum;
import org.dromara.sample.control.model.enums.RemoteDebugMethodEnum;
import org.dromara.sample.control.model.param.*;
import org.dromara.sample.control.service.IControlService;
import org.dromara.sample.media.model.MediaFileCountDTO;
import org.dromara.sample.media.service.IMediaRedisService;
import org.dromara.sample.wayline.mapper.IWaylineJobMapper;
import org.dromara.sample.wayline.model.entity.WaylineJobEntity;
import org.dromara.sample.wayline.model.enums.WaylineJobStatusEnum;
@ -41,10 +42,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;
import java.util.Date;
import java.util.Objects;
import java.util.Optional;
import java.util.UUID;
import java.util.*;
import static org.dromara.common.sdk.cloudapi.device.RcLostActionEnum.RETURN_HOME;
import static org.dromara.common.sdk.cloudapi.wayline.WaylineMethodEnum.RETURN_HOME_CANCEL;
@ -85,6 +83,9 @@ public class ControlServiceImpl implements IControlService {
@Autowired
private IWaylineJobMapper waylineJobMapper;
@Autowired
private IMediaRedisService mediaRedisService;
private RemoteDebugHandler checkDebugCondition(String sn, RemoteDebugParam param, RemoteDebugMethodEnum controlMethodEnum) {
RemoteDebugHandler handler = Objects.nonNull(controlMethodEnum.getClazz()) ?
mapper.convertValue(Objects.nonNull(param) ? param : new Object(), controlMethodEnum.getClazz())
@ -198,7 +199,14 @@ public class ControlServiceImpl implements IControlService {
waylineJobEntity.setOutOfControlAction(OutOfControlActionEnum.RETURN_TO_HOME.getAction());
waylineJobEntity.setRthAltitude(param.getRthAltitude());
waylineJobEntity.setMediaCount(0);
waylineJobEntity.setProId(dockOpt.get().getProId());
waylineJobEntity.setFileId("-1");
waylineJobEntity.setJobType(WaylineJobTypeEnum.INSTRUCT.getType());
MediaFileCountDTO mediaFileCountDTO = new MediaFileCountDTO();
mediaFileCountDTO.setJobId(waylineJobEntity.getJobId());
mediaFileCountDTO.setDeviceSn(sn);
mediaFileCountDTO.setFileId("-1");
mediaRedisService.setMediaCount(sn, waylineJobEntity.getJobId(),mediaFileCountDTO);
TopicServicesResponse<ServicesReplyData> response = abstractControlService.takeoffToPoint(
SDKManager.getDeviceSDK(sn), mapper.convertValue(param, TakeoffToPointRequest.class));
ServicesReplyData reply = response.getData();
@ -260,6 +268,7 @@ public class ControlServiceImpl implements IControlService {
mapper.convertValue(param.getData(), param.getCmd().getCmd().getClazz()));
ServicesReplyData serviceReply = response.getData();
return serviceReply.getResult().isSuccess() ?
HttpResultResponse.success()
: HttpResultResponse.error(serviceReply.getResult());

1
dk-modules/sample/src/main/java/org/dromara/sample/control/service/impl/SDKControlService.java

@ -69,6 +69,7 @@ public class SDKControlService extends AbstractControlService {
}
TakeoffToPointProgress eventsReceiver = request.getData();
webSocketMessageService.sendBatch(deviceOpt.get().getWorkspaceId(), UserTypeEnum.WEB.getVal(),
BizCodeEnum.TAKE_OFF_TO_POINT_PROGRESS.getCode(),
ResultNotifyDTO.builder().sn(dockSn)

12
dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/DeviceServiceImpl.java

@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.common.sdk.cloudapi.device.*;
import org.dromara.common.sdk.cloudapi.firmware.*;
import org.dromara.common.sdk.cloudapi.firmware.api.AbstractFirmwareService;
@ -45,6 +46,7 @@ import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.extern.slf4j.Slf4j;
import org.dromara.sample.websocket.service.IWebSocketMessageService;
import org.dromara.system.api.model.LoginUser;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@ -132,6 +134,9 @@ public class DeviceServiceImpl implements IDeviceService {
@Autowired
private IDeviceProMapper deviceProMapper;
@Autowired
private IDeviceProService deviceProService;
@Override
public void subDeviceOffline(String deviceSn) {
// If no information about this device exists in the cache, the drone is considered to be offline.
@ -224,7 +229,7 @@ public class DeviceServiceImpl implements IDeviceService {
DeviceEntity::getWorkspaceId, param.getWorkspaceId())
.eq(param.getBoundStatus() != null, DeviceEntity::getBoundStatus, param.getBoundStatus())
.in(ObjectUtil.isAllNotEmpty(param.getProIds()),
DeviceEntity::getDeviceSn, param.getProIds())
DeviceEntity::getProId, param.getProIds())
.orderBy(param.isOrderBy(),
param.isAsc(), DeviceEntity::getId))
.stream()
@ -234,6 +239,10 @@ public class DeviceServiceImpl implements IDeviceService {
@Override
public List<DeviceDTO> getDevicesTopoForWeb(String workspaceId,String nickname,List<Integer> proIds) {
LoginUser loginUser = LoginHelper.getLoginUser();
if(proIds == null){
proIds = deviceProService.listDeviceGroup(loginUser.getUserId());
}
List<DeviceDTO> devicesList = this.getDevicesByParams(
DeviceQueryParam.builder()
.workspaceId(workspaceId)
@ -408,6 +417,7 @@ public class DeviceServiceImpl implements IDeviceService {
.map(WorkspaceDTO::getWorkspaceName).orElse("") : "")
.firmwareStatus(DeviceFirmwareStatusEnum.NOT_UPGRADE)
.videoId(dockVideoId)
.proId(ObjectUtil.isNotEmpty(entity.getProId())?entity.getProId():null)
.thingVersion(entity.getVersion()).build();
} catch (CloudSDKException e) {
log.error(e.getLocalizedMessage() + "Entity: {}", entity);

10
dk-modules/sample/src/main/java/org/dromara/sample/media/controller/FileController.java

@ -6,6 +6,7 @@ import jakarta.servlet.http.HttpServletResponse;
import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.common.sdk.common.HttpResultResponse;
import org.dromara.common.sdk.common.PaginationData;
import org.dromara.sample.manage.service.IDeviceProService;
import org.dromara.sample.media.model.MediaFileDTO;
import org.dromara.sample.media.service.IFileService;
import org.dromara.system.api.model.LoginUser;
@ -29,6 +30,8 @@ public class FileController {
@Autowired
private IFileService fileService;
/**
* 根据工作区id获取此工作区中所有媒体文件的信息
* Get information about all the media files in this workspace based on the workspace id.
@ -39,7 +42,7 @@ public class FileController {
public HttpResultResponse<PaginationData<MediaFileDTO>> getFilesList(@RequestParam(name = "pageNum", defaultValue = "1") Long page,
@RequestParam(name = "pageSize", defaultValue = "10") Long pageSize,
@PathVariable(name = "workspace_id") String workspaceId,
@RequestParam(name = "pro_ids",required = false) List<Integer> proIds) {
@RequestParam(name = "proIds",required = false) List<Integer> proIds) {
PaginationData<MediaFileDTO> filesList = fileService.getMediaFilesPaginationByWorkspaceId(workspaceId, page, pageSize,proIds);
return HttpResultResponse.success(filesList);
}
@ -74,8 +77,9 @@ public class FileController {
public HttpResultResponse<PaginationData<MediaFileDTO>> getFilesByJobId(@RequestParam(name = "pageNum", defaultValue = "1") Long page,
@RequestParam(name = "pageSize", defaultValue = "10") Long pageSize,
@PathVariable(name = "workspace_id") String workspaceId,
@PathVariable(name = "job_id") String jobId) {
PaginationData<MediaFileDTO> filesList = fileService.getMediaFilesPaginationByJobId(workspaceId, page, pageSize,jobId);
@PathVariable(name = "job_id") String jobId,
@RequestParam(name = "type", required = false) Integer type) {
PaginationData<MediaFileDTO> filesList = fileService.getMediaFilesPaginationByJobId(workspaceId, page, pageSize,jobId,type);
for (MediaFileDTO mediaFileDTO :filesList.getList()){
mediaFileDTO.setUrl(fileService.getObjectUrl(workspaceId, mediaFileDTO.getFileId()).toString());
}

2
dk-modules/sample/src/main/java/org/dromara/sample/media/service/IFileService.java

@ -71,7 +71,7 @@ public interface IFileService {
* @param pageSize
* @return
*/
PaginationData<MediaFileDTO> getMediaFilesPaginationByJobId(String workspaceId, long page, long pageSize,String JobId);
PaginationData<MediaFileDTO> getMediaFilesPaginationByJobId(String workspaceId, long page, long pageSize,String JobId,Integer type);
/**

15
dk-modules/sample/src/main/java/org/dromara/sample/media/service/impl/FileServiceImpl.java

@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.dromara.common.oss.core.OssClient;
import org.dromara.common.oss.factory.OssFactory;
import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.common.sdk.cloudapi.device.DeviceEnum;
import org.dromara.common.sdk.cloudapi.media.FlightTask;
import org.dromara.common.sdk.cloudapi.media.MediaSubFileTypeEnum;
@ -15,11 +16,13 @@ import org.dromara.common.sdk.common.Pagination;
import org.dromara.common.sdk.common.PaginationData;
import org.dromara.sample.manage.model.dto.DeviceDictionaryDTO;
import org.dromara.sample.manage.service.IDeviceDictionaryService;
import org.dromara.sample.manage.service.IDeviceProService;
import org.dromara.sample.media.constant.MinIOConstants;
import org.dromara.sample.media.mapper.IFileMapper;
import org.dromara.sample.media.model.MediaFileDTO;
import org.dromara.sample.media.model.MediaFileEntity;
import org.dromara.sample.media.service.IFileService;
import org.dromara.system.api.model.LoginUser;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@ -44,7 +47,8 @@ public class FileServiceImpl implements IFileService {
@Autowired
private IDeviceDictionaryService deviceDictionaryService;
@Autowired
private IDeviceProService deviceProService;
private Optional<MediaFileEntity> getMediaByFingerprint(String workspaceId, String fingerprint) {
MediaFileEntity fileEntity = mapper.selectOne(new LambdaQueryWrapper<MediaFileEntity>()
@ -94,6 +98,10 @@ public class FileServiceImpl implements IFileService {
@Override
public PaginationData<MediaFileDTO> getMediaFilesPaginationByWorkspaceId(String workspaceId, long page, long pageSize,List<Integer> proIds) {
LoginUser loginUser = LoginHelper.getLoginUser();
if(proIds == null){
proIds = deviceProService.listDeviceGroup(loginUser.getUserId());
}
Page<MediaFileEntity> pageData = mapper.selectPage(
new Page<MediaFileEntity>(page, pageSize),
new LambdaQueryWrapper<MediaFileEntity>()
@ -128,12 +136,15 @@ public class FileServiceImpl implements IFileService {
}
@Override
public PaginationData<MediaFileDTO> getMediaFilesPaginationByJobId(String workspaceId, long page, long pageSize, String JobId) {
public PaginationData<MediaFileDTO> getMediaFilesPaginationByJobId(String workspaceId, long page, long pageSize, String JobId,Integer type) {
String [] fileTypes = new String[]{"jpeg","mp4"};
Page<MediaFileEntity> pageData = mapper.selectPage(
new Page<MediaFileEntity>(page, pageSize),
new LambdaQueryWrapper<MediaFileEntity>()
.eq(MediaFileEntity::getWorkspaceId, workspaceId)
.eq(MediaFileEntity::getJobId, JobId)
.in(ObjectUtil.isNotEmpty(type),MediaFileEntity::getFileType,fileTypes)
.orderByDesc(MediaFileEntity::getId));
List<MediaFileDTO> records = pageData.getRecords()
.stream()

13
dk-modules/sample/src/main/java/org/dromara/sample/media/service/impl/MediaServiceImpl.java

@ -1,5 +1,6 @@
package org.dromara.sample.media.service.impl;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.dromara.common.core.constant.DeviceQrtzConstants;
@ -34,6 +35,7 @@ import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
@ -123,8 +125,12 @@ public class MediaServiceImpl extends AbstractMediaService implements IMediaServ
}
return new TopicEventsResponse<MqttReply>().setData(MqttReply.success());
}
List<DeviceQrtzFileEntity> deviceQrtzFileEntities = new ArrayList<>();
MediaFileCountDTO mediaFileCount = mediaRedisService.getMediaCount(request.getGateway(), jobId);
List<DeviceQrtzFileEntity> deviceQrtzFileEntities = deviceQrtzFileMapper.selectList(new LambdaQueryWrapper<DeviceQrtzFileEntity>().eq(DeviceQrtzFileEntity::getDeviceSn, request.getGateway()).eq(DeviceQrtzFileEntity::getStatus, DeviceQrtzConstants.QRTZ_FILE_STATUS_2).eq(DeviceQrtzFileEntity::getWaylineId, mediaFileCount.getFileId()));
if(ObjectUtil.isNull(mediaFileCount)){
deviceQrtzFileEntities = deviceQrtzFileMapper.selectList(new LambdaQueryWrapper<DeviceQrtzFileEntity>().eq(DeviceQrtzFileEntity::getDeviceSn, request.getGateway()).eq(DeviceQrtzFileEntity::getStatus, DeviceQrtzConstants.QRTZ_FILE_STATUS_2).eq(DeviceQrtzFileEntity::getWaylineId, mediaFileCount.getFileId()));
}
// duplicate data
if (deviceOpt.isEmpty()
|| (Objects.nonNull(mediaFileCount) && request.getBid().equals(mediaFileCount.getBid())
@ -145,10 +151,11 @@ public class MediaServiceImpl extends AbstractMediaService implements IMediaServ
return null;
}
notifyUploadedCount(mediaFileCount, request, jobId, device,deviceQrtzFileEntities);
notifyUploadedCount(mediaFileCount, request, jobId, device);
return new TopicEventsResponse<MqttReply>().setData(MqttReply.success());
}
@Override
public TopicEventsResponse<MqttReply> highestPriorityUploadFlightTaskMedia(
TopicEventsRequest<HighestPriorityUploadFlightTaskMedia> request, MessageHeaders headers) {
@ -194,7 +201,7 @@ public class MediaServiceImpl extends AbstractMediaService implements IMediaServ
return fileFlag> 0;
}
private void notifyUploadedCount(MediaFileCountDTO mediaFileCount, TopicEventsRequest<FileUploadCallback> request, String jobId, DeviceDTO dock, List<DeviceQrtzFileEntity> deviceQrtzFileEntities) {
private void notifyUploadedCount(MediaFileCountDTO mediaFileCount, TopicEventsRequest<FileUploadCallback> request, String jobId, DeviceDTO dock) {
// Do not notify when files that do not belong to the route are uploaded.
//不通知不属于路由的文件被上传。
if (Objects.isNull(mediaFileCount)) {

21
dk-modules/sample/src/main/java/org/dromara/sample/wayline/controller/WaylineFileController.java

@ -16,7 +16,9 @@ import org.dromara.common.sdk.cloudapi.wayline.api.IHttpWaylineService;
import org.dromara.common.sdk.common.HttpResultResponse;
import org.dromara.common.sdk.common.PaginationData;
import org.dromara.sample.manage.mapper.IDeviceProUserMapper;
import org.dromara.sample.manage.model.dto.DeviceDTO;
import org.dromara.sample.manage.service.IDeviceProService;
import org.dromara.sample.manage.service.IDeviceRedisService;
import org.dromara.sample.wayline.model.dto.WaylineFileDTO;
import org.dromara.sample.wayline.model.entity.AudioFileEntity;
import org.dromara.sample.wayline.model.entity.WaylineFileEntity;
@ -34,8 +36,11 @@ import java.net.URL;
import java.sql.SQLException;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
import java.util.stream.Collectors;
import static org.bouncycastle.internal.asn1.cms.CMSObjectIdentifiers.data;
/**
* @author sean
@ -50,7 +55,7 @@ public class WaylineFileController implements IHttpWaylineService {
private IWaylineFileService waylineFileService;
@Autowired
private IDeviceProService deviceProService;
private IDeviceRedisService deviceRedisService;
/**
* 根据waylineID删除工作区中的wayline文件
@ -73,10 +78,14 @@ public class WaylineFileController implements IHttpWaylineService {
*/
@PostMapping("${url.wayline.prefix}${url.wayline.version}/workspaces/{workspace_id}/waylines/file/{deviceSn}/upload")
@Operation(summary = "导入kmz航路文件。", description = "导入kmz航路文件。")
public HttpResultResponse importKmzFile(@PathVariable(name = "workspace_id") String workspaceId,HttpServletRequest request, MultipartFile file,@PathVariable(name = "deviceSn") String deviceSn,@PathVariable(name = "proId") Integer proId) {
public HttpResultResponse importKmzFile(@PathVariable(name = "workspace_id") String workspaceId,HttpServletRequest request, MultipartFile file,@PathVariable(name = "deviceSn") String deviceSn,@RequestParam(name = "proId",required = false) Integer proId) {
if (Objects.isNull(file)) {
return HttpResultResponse.error("未收到文件。");
}
Optional<DeviceDTO> deviceOnline = deviceRedisService.getDeviceOnline(deviceSn);
if(proId == null){
proId = deviceOnline.get().getProId();
}
LoginUser loginUser = LoginHelper.getLoginUser();
String creator = loginUser.getUsername();
waylineFileService.importKmzFile(file, workspaceId, creator,deviceSn,proId);
@ -92,11 +101,17 @@ public class WaylineFileController implements IHttpWaylineService {
* @return
*/
@Override
public HttpResultResponse<PaginationData<GetWaylineListResponse>> getWaylineList(@Valid GetWaylineListRequest request,String workspaceId,List<Integer> proIds, HttpServletRequest req, HttpServletResponse rsp) {
public HttpResultResponse<PaginationData<GetWaylineListResponse>> getWaylines(@Valid GetWaylineListRequest request,String workspaceId,List<Integer> proIds, HttpServletRequest req, HttpServletResponse rsp) {
PaginationData<GetWaylineListResponse> data = waylineFileService.getWaylinesByParam(workspaceId, request,proIds);
return HttpResultResponse.success(data);
}
@Override
public HttpResultResponse<List<GetWaylineListResponse>> getWaylineList(String workspaceId,Integer proId, HttpServletRequest req, HttpServletResponse rsp) {
List<GetWaylineListResponse> waylinesByParamList = waylineFileService.getWaylinesByParamList(workspaceId, proId);
return HttpResultResponse.success(waylinesByParamList);
}
/**
* 根据 wayline 文件 ID 查询文件的下载地址并直接重定向到此地址进行下载
* Query the download address of the file according to the wayline file id,

15
dk-modules/sample/src/main/java/org/dromara/sample/wayline/controller/WaylineJobController.java

@ -87,9 +87,10 @@ public class WaylineJobController {
public HttpResultResponse<PaginationData<WaylineJobDTO>> getJobs(@RequestParam(name = "pageNum", defaultValue = "1") Long page,
@RequestParam(name = "pageSize", defaultValue = "10") Long pageSize,
@PathVariable(name = "workspace_id") String workspaceId,
@RequestParam(name = "proId") List<Integer> proIds,
@RequestParam(name = "name") String name) {
PaginationData<WaylineJobDTO> data = waylineJobService.getJobsByWorkspaceId(workspaceId, page, pageSize,proIds,name);
@RequestParam(name = "proIds" , required = false) List<Integer> proIds,
@RequestParam(name = "fileId" , required = false) String fileId,
@RequestParam(name = "name" , required = false) String name) {
PaginationData<WaylineJobDTO> data = waylineJobService.getJobsByWorkspaceId(workspaceId, page, pageSize,fileId,proIds,name);
return HttpResultResponse.success(data);
}
@ -127,6 +128,14 @@ public class WaylineJobController {
flighttaskService.updateJobStatus(workspaceId, jobId, param);
return HttpResultResponse.success();
}
@GetMapping("/{workspace_id}/getJobIdByDeviceSn")
@Operation(summary = "根据设备查询飞行任务。", description = "根据设备查询飞行任务。")
public HttpResultResponse getJobIdByDeviceSn(@PathVariable(name = "workspace_id") String workspaceId,
@RequestParam(name = "device_sn") String deviceSn, HttpServletRequest req, HttpServletResponse rsp) {
Optional<EventsReceiver<FlighttaskProgress>> runningWaylineJob = waylineRedisService.getRunningWaylineJob(deviceSn);
if(runningWaylineJob.isEmpty())HttpResultResponse.error("不存在");
return HttpResultResponse.success(runningWaylineJob.get().getOutput().getExt().getFlightId());
}
@GetMapping("/{workspace_id}/getJobFileUrlByDeviceSn")
@Operation(summary = "根据设备查询飞行任务。", description = "根据设备查询飞行任务。")

2
dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/IWaylineFileService.java

@ -29,6 +29,8 @@ public interface IWaylineFileService {
*/
PaginationData<GetWaylineListResponse> getWaylinesByParam(String workspaceId, GetWaylineListRequest param,List<Integer> proIds);
List<GetWaylineListResponse> getWaylinesByParamList(String workspaceId,Integer proId);
/**
* Query the information of this wayline file according to the wayline file id.
* @param workspaceId

2
dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/IWaylineJobService.java

@ -71,7 +71,7 @@ public interface IWaylineJobService {
* @param pageSize
* @return
*/
PaginationData<WaylineJobDTO> getJobsByWorkspaceId(String workspaceId, long page, long pageSize,List<Integer> proIds,String name);
PaginationData<WaylineJobDTO> getJobsByWorkspaceId(String workspaceId, long page, long pageSize,String fileId,List<Integer> proIds,String name);
/**
* Query the wayline execution status of the dock.

39
dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/impl/WaylineFileServiceImpl.java

@ -17,6 +17,7 @@ import org.dom4j.io.SAXReader;
import org.dromara.common.oss.core.OssClient;
import org.dromara.common.oss.entity.UploadResult;
import org.dromara.common.oss.factory.OssFactory;
import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.common.sdk.cloudapi.device.DeviceDomainEnum;
import org.dromara.common.sdk.cloudapi.device.DeviceEnum;
import org.dromara.common.sdk.cloudapi.device.DeviceSubTypeEnum;
@ -28,6 +29,8 @@ import org.dromara.common.sdk.common.Pagination;
import org.dromara.common.sdk.common.PaginationData;
import org.dromara.resource.api.RemoteFileService;
import org.dromara.resource.api.domain.RemoteFile;
import org.dromara.sample.manage.service.IDeviceProService;
import org.dromara.sample.manage.service.IDeviceRedisService;
import org.dromara.sample.wayline.mapper.IAudioFileMapper;
import org.dromara.sample.wayline.mapper.IWaylineFileMapper;
import org.dromara.sample.wayline.model.dto.KmzFileProperties;
@ -35,6 +38,7 @@ import org.dromara.sample.wayline.model.dto.WaylineFileDTO;
import org.dromara.sample.wayline.model.entity.AudioFileEntity;
import org.dromara.sample.wayline.model.entity.WaylineFileEntity;
import org.dromara.sample.wayline.service.IWaylineFileService;
import org.dromara.system.api.model.LoginUser;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@ -77,9 +81,21 @@ public class WaylineFileServiceImpl implements IWaylineFileService {
@DubboReference
private RemoteFileService remoteFileService;
@Autowired
private IDeviceProService deviceProService;
@Autowired
private IDeviceRedisService deviceRedisService;
@Override
public PaginationData<GetWaylineListResponse> getWaylinesByParam(String workspaceId, GetWaylineListRequest param,List<Integer> proIds) {
LoginUser loginUser = LoginHelper.getLoginUser();
if(proIds == null){
proIds = deviceProService.listDeviceGroup(loginUser.getUserId());
}
// Paging Query
List<Integer> finalProIds = proIds;
Page<WaylineFileEntity> page = mapper.selectPage(
new Page<WaylineFileEntity>(param.getPage(), param.getPageSize()),
new LambdaQueryWrapper<WaylineFileEntity>()
@ -104,7 +120,7 @@ public class WaylineFileServiceImpl implements IWaylineFileService {
wrapper.eq(WaylineFileEntity::getDeviceSn, param.getDeviceSn()).or();
})
.and(ObjectUtil.isAllNotEmpty(proIds), wrapper -> {
wrapper.in(WaylineFileEntity::getProId, proIds).or();
wrapper.in(WaylineFileEntity::getProId, finalProIds);
})
.like(Objects.nonNull(param.getKey()), WaylineFileEntity::getName, param.getKey())
// There is a risk of SQL injection
@ -118,6 +134,24 @@ public class WaylineFileServiceImpl implements IWaylineFileService {
return new PaginationData<>(records, new Pagination(page.getCurrent(), page.getSize(), page.getTotal()));
}
@Override
public List<GetWaylineListResponse> getWaylinesByParamList(String workspaceId,Integer proId) {
List<WaylineFileEntity> waylineFileEntities = mapper.selectList(
new LambdaQueryWrapper<WaylineFileEntity>()
.eq(WaylineFileEntity::getWorkspaceId, workspaceId)
.eq(WaylineFileEntity::getProId, proId)
// There is a risk of SQL injection
.orderByDesc(WaylineFileEntity::getCreateTime));
// Wrap the results of a paging query into a custom paging object.
List<GetWaylineListResponse> records = waylineFileEntities
.stream()
.map(this::entityConvertToDTO)
.collect(Collectors.toList());
return records;
}
@Override
public Optional<GetWaylineListResponse> getWaylineByWaylineId(String workspaceId, String waylineId) {
return Optional.ofNullable(
@ -207,6 +241,9 @@ public class WaylineFileServiceImpl implements IWaylineFileService {
@Override
public void importKmzFile(MultipartFile file, String workspaceId, String creator,String deviceSn,Integer proId) {
if(ObjectUtil.isNull(proId)){
proId = deviceRedisService.getDeviceOnline(deviceSn).get().getProId();
}
Optional<WaylineFileDTO> waylineFileOpt = validKmzFile(file);
if (waylineFileOpt.isEmpty()) {
throw new RuntimeException("文件格式不正确。");

15
dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/impl/WaylineJobServiceImpl.java

@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.dromara.common.redis.config.RedisConst;
import org.dromara.common.redis.utils.RedisOpsUtils;
import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.common.sdk.cloudapi.device.DockModeCodeEnum;
import org.dromara.common.sdk.cloudapi.device.DroneModeCodeEnum;
import org.dromara.common.sdk.cloudapi.device.OsdDock;
@ -16,6 +17,7 @@ import org.dromara.common.sdk.common.PaginationData;
import org.dromara.common.sdk.exception.CloudSDKException;
import org.dromara.sample.component.mqtt.model.EventsReceiver;
import org.dromara.sample.manage.model.dto.DeviceDTO;
import org.dromara.sample.manage.service.IDeviceProService;
import org.dromara.sample.manage.service.IDeviceRedisService;
import org.dromara.sample.manage.service.IDeviceService;
import org.dromara.sample.media.model.MediaFileCountDTO;
@ -31,6 +33,7 @@ import org.dromara.sample.wayline.service.IWaylineJobService;
import org.dromara.sample.wayline.service.IWaylineRedisService;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.extern.slf4j.Slf4j;
import org.dromara.system.api.model.LoginUser;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@ -75,6 +78,9 @@ public class WaylineJobServiceImpl implements IWaylineJobService {
@Autowired
private IWaylineRedisService waylineRedisService;
@Autowired
private IDeviceProService deviceProService;
private Optional<WaylineJobDTO> insertWaylineJob(WaylineJobEntity jobEntity) {
int id = mapper.insert(jobEntity);
if (id <= 0) {
@ -167,12 +173,17 @@ public class WaylineJobServiceImpl implements IWaylineJobService {
}
@Override
public PaginationData<WaylineJobDTO> getJobsByWorkspaceId(String workspaceId, long page, long pageSize,List<Integer> proIds,String name) {
public PaginationData<WaylineJobDTO> getJobsByWorkspaceId(String workspaceId, long page, long pageSize,String fileId,List<Integer> proIds,String name) {
LoginUser loginUser = LoginHelper.getLoginUser();
if(ObjectUtil.isAllEmpty(proIds)){
proIds = deviceProService.listDeviceGroup(loginUser.getUserId());
}
Page<WaylineJobEntity> pageData = mapper.selectPage(
new Page<WaylineJobEntity>(page, pageSize),
new LambdaQueryWrapper<WaylineJobEntity>()
.eq(WaylineJobEntity::getWorkspaceId, workspaceId)
.like(WaylineJobEntity::getName, name).or().like(WaylineJobEntity::getWaylineName,name)
.eq(WaylineJobEntity::getFileId, fileId)
.like(ObjectUtil.isNotEmpty(name),WaylineJobEntity::getName, name).or().like(ObjectUtil.isNotEmpty(name),WaylineJobEntity::getWaylineName,name)
.in(ObjectUtil.isAllNotEmpty(proIds),WaylineJobEntity::getProId,proIds)
.orderByDesc(WaylineJobEntity::getId));
List<WaylineJobDTO> records = pageData.getRecords()

36
dk-modules/sample/src/main/resources/mapper/IDeviceProMapper.xml

@ -10,24 +10,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result column="bind_type" property="bindType"/>
<result column="nick_name" property="nickName"/>
<result column="create_time" property="createTime"/>
<collection property="deviceProUserEntityList" ofType="org.dromara.sample.manage.model.entity.DeviceProUserEntity">
<result column="pro_user_id" property="id"/>
<result column="device_pro_id" property="deviceProId"/>
<result column="user_id" property="userId"/>
<result column="user_name" property="userName"/>
</collection>
<collection property="deviceEntityList" ofType="org.dromara.sample.manage.model.entity.DeviceEntity">
<result column="device_id" property="id"/>
<result column="device_sn" property="deviceSn"/>
<result column="device_name" property="deviceName"/>
<result column="device_type" property="deviceType"/>
<result column="sub_type" property="subType"/>
<result column="domain" property="domain"/>
<result column="child_sn" property="childSn"/>
<result column="workspace_id" property="workspaceId"/>
<result column="device_pro_number" property="proId"/>
<result column="device_nick_name" property="nickname"/>
</collection>
</resultMap>
<select id="listDeviceProEntityMap" resultMap="listDeviceProEntityMap">
SELECT
@ -36,25 +18,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
dp.bind_code,
dp.bind_type,
dp.nick_name,
dp.create_time,
dpu.id pro_user_id,
dpu.device_pro_id,
dpu.user_id,
dpu.user_name,
d.id device_id,
d.device_sn,
d.device_name,
d.device_type,
d.sub_type,
d.domain,
d.child_sn,
d.workspace_id,
d.pro_id device_pro_number,
d.nickname device_nick_name
dp.create_time
FROM
manage_device_pro dp
LEFT JOIN manage_device d ON dp.id = d.pro_id
LEFT JOIN manage_device_pro_user dpu ON dp.id = dpu.device_pro_id
<where>
<if test="condition.bind_code != null and condition.bind_code != ''">
and dp.bind_code like concat(concat('%',#{condition.bind_code}),'%')

Loading…
Cancel
Save