diff --git a/dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/wayline/api/IHttpWaylineService.java b/dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/wayline/api/IHttpWaylineService.java index 202bd4f..3815570 100644 --- a/dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/wayline/api/IHttpWaylineService.java +++ b/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> getWaylineList( + HttpResultResponse> getWaylines( @Valid @ParameterObject GetWaylineListRequest request, @PathVariable(name = "workspace_id") String workspaceId, - @PathVariable(name = "proIds") List proIds, + @RequestParam(name = "proIds",required = false) List 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> getWaylineList( + @PathVariable(name = "workspace_id") String workspaceId, + @RequestParam(name = "pro_id",required = false) Integer proId, HttpServletRequest req, HttpServletResponse rsp); /** diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/control/service/impl/ControlServiceImpl.java b/dk-modules/sample/src/main/java/org/dromara/sample/control/service/impl/ControlServiceImpl.java index 7480e39..b024571 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/control/service/impl/ControlServiceImpl.java +++ b/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 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()); diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/control/service/impl/SDKControlService.java b/dk-modules/sample/src/main/java/org/dromara/sample/control/service/impl/SDKControlService.java index 1473203..bae5ca3 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/control/service/impl/SDKControlService.java +++ b/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) diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/DeviceServiceImpl.java b/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/DeviceServiceImpl.java index 8eeca17..5be3633 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/DeviceServiceImpl.java +++ b/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 getDevicesTopoForWeb(String workspaceId,String nickname,List proIds) { + LoginUser loginUser = LoginHelper.getLoginUser(); + if(proIds == null){ + proIds = deviceProService.listDeviceGroup(loginUser.getUserId()); + } List 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); diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/media/controller/FileController.java b/dk-modules/sample/src/main/java/org/dromara/sample/media/controller/FileController.java index 40f0fb4..6a91180 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/media/controller/FileController.java +++ b/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> 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 proIds) { + @RequestParam(name = "proIds",required = false) List proIds) { PaginationData filesList = fileService.getMediaFilesPaginationByWorkspaceId(workspaceId, page, pageSize,proIds); return HttpResultResponse.success(filesList); } @@ -74,8 +77,9 @@ public class FileController { public HttpResultResponse> 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 filesList = fileService.getMediaFilesPaginationByJobId(workspaceId, page, pageSize,jobId); + @PathVariable(name = "job_id") String jobId, + @RequestParam(name = "type", required = false) Integer type) { + PaginationData filesList = fileService.getMediaFilesPaginationByJobId(workspaceId, page, pageSize,jobId,type); for (MediaFileDTO mediaFileDTO :filesList.getList()){ mediaFileDTO.setUrl(fileService.getObjectUrl(workspaceId, mediaFileDTO.getFileId()).toString()); } diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/media/service/IFileService.java b/dk-modules/sample/src/main/java/org/dromara/sample/media/service/IFileService.java index e3edb3a..5980e9d 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/media/service/IFileService.java +++ b/dk-modules/sample/src/main/java/org/dromara/sample/media/service/IFileService.java @@ -71,7 +71,7 @@ public interface IFileService { * @param pageSize * @return */ - PaginationData getMediaFilesPaginationByJobId(String workspaceId, long page, long pageSize,String JobId); + PaginationData getMediaFilesPaginationByJobId(String workspaceId, long page, long pageSize,String JobId,Integer type); /** diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/media/service/impl/FileServiceImpl.java b/dk-modules/sample/src/main/java/org/dromara/sample/media/service/impl/FileServiceImpl.java index ca5f149..c2b62fa 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/media/service/impl/FileServiceImpl.java +++ b/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 getMediaByFingerprint(String workspaceId, String fingerprint) { MediaFileEntity fileEntity = mapper.selectOne(new LambdaQueryWrapper() @@ -94,6 +98,10 @@ public class FileServiceImpl implements IFileService { @Override public PaginationData getMediaFilesPaginationByWorkspaceId(String workspaceId, long page, long pageSize,List proIds) { + LoginUser loginUser = LoginHelper.getLoginUser(); + if(proIds == null){ + proIds = deviceProService.listDeviceGroup(loginUser.getUserId()); + } Page pageData = mapper.selectPage( new Page(page, pageSize), new LambdaQueryWrapper() @@ -128,12 +136,15 @@ public class FileServiceImpl implements IFileService { } @Override - public PaginationData getMediaFilesPaginationByJobId(String workspaceId, long page, long pageSize, String JobId) { + public PaginationData getMediaFilesPaginationByJobId(String workspaceId, long page, long pageSize, String JobId,Integer type) { + + String [] fileTypes = new String[]{"jpeg","mp4"}; Page pageData = mapper.selectPage( new Page(page, pageSize), new LambdaQueryWrapper() .eq(MediaFileEntity::getWorkspaceId, workspaceId) .eq(MediaFileEntity::getJobId, JobId) + .in(ObjectUtil.isNotEmpty(type),MediaFileEntity::getFileType,fileTypes) .orderByDesc(MediaFileEntity::getId)); List records = pageData.getRecords() .stream() diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/media/service/impl/MediaServiceImpl.java b/dk-modules/sample/src/main/java/org/dromara/sample/media/service/impl/MediaServiceImpl.java index 2fe98e3..0ff5bbb 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/media/service/impl/MediaServiceImpl.java +++ b/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().setData(MqttReply.success()); } + List deviceQrtzFileEntities = new ArrayList<>(); MediaFileCountDTO mediaFileCount = mediaRedisService.getMediaCount(request.getGateway(), jobId); - List deviceQrtzFileEntities = deviceQrtzFileMapper.selectList(new LambdaQueryWrapper().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().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().setData(MqttReply.success()); } + @Override public TopicEventsResponse highestPriorityUploadFlightTaskMedia( TopicEventsRequest request, MessageHeaders headers) { @@ -194,7 +201,7 @@ public class MediaServiceImpl extends AbstractMediaService implements IMediaServ return fileFlag> 0; } - private void notifyUploadedCount(MediaFileCountDTO mediaFileCount, TopicEventsRequest request, String jobId, DeviceDTO dock, List deviceQrtzFileEntities) { + private void notifyUploadedCount(MediaFileCountDTO mediaFileCount, TopicEventsRequest request, String jobId, DeviceDTO dock) { // Do not notify when files that do not belong to the route are uploaded. //不通知不属于路由的文件被上传。 if (Objects.isNull(mediaFileCount)) { diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/wayline/controller/WaylineFileController.java b/dk-modules/sample/src/main/java/org/dromara/sample/wayline/controller/WaylineFileController.java index 7330e19..346a8f7 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/wayline/controller/WaylineFileController.java +++ b/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 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> getWaylineList(@Valid GetWaylineListRequest request,String workspaceId,List proIds, HttpServletRequest req, HttpServletResponse rsp) { + public HttpResultResponse> getWaylines(@Valid GetWaylineListRequest request,String workspaceId,List proIds, HttpServletRequest req, HttpServletResponse rsp) { PaginationData data = waylineFileService.getWaylinesByParam(workspaceId, request,proIds); return HttpResultResponse.success(data); } + @Override + public HttpResultResponse> getWaylineList(String workspaceId,Integer proId, HttpServletRequest req, HttpServletResponse rsp) { + List waylinesByParamList = waylineFileService.getWaylinesByParamList(workspaceId, proId); + return HttpResultResponse.success(waylinesByParamList); + } + /** * 根据 wayline 文件 ID 查询文件的下载地址,并直接重定向到此地址进行下载。 * Query the download address of the file according to the wayline file id, diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/wayline/controller/WaylineJobController.java b/dk-modules/sample/src/main/java/org/dromara/sample/wayline/controller/WaylineJobController.java index b0ed8b3..5301e0c 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/wayline/controller/WaylineJobController.java +++ b/dk-modules/sample/src/main/java/org/dromara/sample/wayline/controller/WaylineJobController.java @@ -87,9 +87,10 @@ public class WaylineJobController { public HttpResultResponse> 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 proIds, - @RequestParam(name = "name") String name) { - PaginationData data = waylineJobService.getJobsByWorkspaceId(workspaceId, page, pageSize,proIds,name); + @RequestParam(name = "proIds" , required = false) List proIds, + @RequestParam(name = "fileId" , required = false) String fileId, + @RequestParam(name = "name" , required = false) String name) { + PaginationData 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> runningWaylineJob = waylineRedisService.getRunningWaylineJob(deviceSn); + if(runningWaylineJob.isEmpty())HttpResultResponse.error("不存在"); + return HttpResultResponse.success(runningWaylineJob.get().getOutput().getExt().getFlightId()); + } @GetMapping("/{workspace_id}/getJobFileUrlByDeviceSn") @Operation(summary = "根据设备查询飞行任务。", description = "根据设备查询飞行任务。") diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/IWaylineFileService.java b/dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/IWaylineFileService.java index cbbe982..03f6381 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/IWaylineFileService.java +++ b/dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/IWaylineFileService.java @@ -29,6 +29,8 @@ public interface IWaylineFileService { */ PaginationData getWaylinesByParam(String workspaceId, GetWaylineListRequest param,List proIds); + List getWaylinesByParamList(String workspaceId,Integer proId); + /** * Query the information of this wayline file according to the wayline file id. * @param workspaceId diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/IWaylineJobService.java b/dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/IWaylineJobService.java index 89f3ee4..6b2532b 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/IWaylineJobService.java +++ b/dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/IWaylineJobService.java @@ -71,7 +71,7 @@ public interface IWaylineJobService { * @param pageSize * @return */ - PaginationData getJobsByWorkspaceId(String workspaceId, long page, long pageSize,List proIds,String name); + PaginationData getJobsByWorkspaceId(String workspaceId, long page, long pageSize,String fileId,List proIds,String name); /** * Query the wayline execution status of the dock. diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/impl/WaylineFileServiceImpl.java b/dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/impl/WaylineFileServiceImpl.java index 7a66d94..68fb04d 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/impl/WaylineFileServiceImpl.java +++ b/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 getWaylinesByParam(String workspaceId, GetWaylineListRequest param,List proIds) { + LoginUser loginUser = LoginHelper.getLoginUser(); + if(proIds == null){ + proIds = deviceProService.listDeviceGroup(loginUser.getUserId()); + } // Paging Query + List finalProIds = proIds; Page page = mapper.selectPage( new Page(param.getPage(), param.getPageSize()), new LambdaQueryWrapper() @@ -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 getWaylinesByParamList(String workspaceId,Integer proId) { + + List waylineFileEntities = mapper.selectList( + new LambdaQueryWrapper() + .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 records = waylineFileEntities + .stream() + .map(this::entityConvertToDTO) + .collect(Collectors.toList()); + return records; + } + @Override public Optional 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 waylineFileOpt = validKmzFile(file); if (waylineFileOpt.isEmpty()) { throw new RuntimeException("文件格式不正确。"); diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/impl/WaylineJobServiceImpl.java b/dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/impl/WaylineJobServiceImpl.java index a48b25d..dbfb85f 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/impl/WaylineJobServiceImpl.java +++ b/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 insertWaylineJob(WaylineJobEntity jobEntity) { int id = mapper.insert(jobEntity); if (id <= 0) { @@ -167,12 +173,17 @@ public class WaylineJobServiceImpl implements IWaylineJobService { } @Override - public PaginationData getJobsByWorkspaceId(String workspaceId, long page, long pageSize,List proIds,String name) { + public PaginationData getJobsByWorkspaceId(String workspaceId, long page, long pageSize,String fileId,List proIds,String name) { + LoginUser loginUser = LoginHelper.getLoginUser(); + if(ObjectUtil.isAllEmpty(proIds)){ + proIds = deviceProService.listDeviceGroup(loginUser.getUserId()); + } Page pageData = mapper.selectPage( new Page(page, pageSize), new LambdaQueryWrapper() .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 records = pageData.getRecords() diff --git a/dk-modules/sample/src/main/resources/mapper/IDeviceProMapper.xml b/dk-modules/sample/src/main/resources/mapper/IDeviceProMapper.xml index d685b89..f7e41db 100644 --- a/dk-modules/sample/src/main/resources/mapper/IDeviceProMapper.xml +++ b/dk-modules/sample/src/main/resources/mapper/IDeviceProMapper.xml @@ -1,7 +1,7 @@ + PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> @@ -10,24 +10,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - - - - - - - - - - - - - - - - - -