Browse Source

mqtt

pull/1/head
吴远 4 months ago
parent
commit
7ac5daf5f3
  1. 3
      dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/map/api/IHttpMapService.java
  2. 31
      dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/media/api/IHttpMediaService.java
  3. 25
      dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/storage/OssTypeEnum.java
  4. 4
      dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/storage/api/IHttpStorageService.java
  5. 10
      dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/tsa/api/IHttpTsaService.java
  6. 35
      dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/wayline/api/IHttpWaylineService.java
  7. 23
      dk-common/common-oss/pom.xml
  8. 25
      dk-common/common-oss/src/main/java/org/dromara/common/oss/core/OssClient.java
  9. 53
      dk-common/common-oss/src/main/java/org/dromara/common/oss/factory/AliyunOss.java
  10. 24
      dk-common/common-oss/src/main/java/org/dromara/common/oss/factory/IOssService.java
  11. 37
      dk-common/common-oss/src/main/java/org/dromara/common/oss/factory/Minio.java
  12. 35
      dk-common/common-oss/src/main/java/org/dromara/common/oss/factory/OssFactory.java
  13. 22
      dk-common/common-oss/src/main/java/org/dromara/common/oss/properties/OssProperties.java
  14. 2
      dk-common/common-redis/src/main/java/org/dromara/common/redis/config/RedisConst.java
  15. 2
      dk-common/common-redis/src/main/java/org/dromara/common/redis/utils/RedisOpsUtils.java
  16. 4
      dk-common/common-websocket/src/main/java/org/dromara/common/websocket/config/MyConcurrentWebSocketSession.java
  17. 69
      dk-common/common-websocket/src/main/java/org/dromara/common/websocket/dto/BizCodeEnum.java
  18. 83
      dk-common/common-websocket/src/main/java/org/dromara/common/websocket/dto/WebSocketMessageResponse.java
  19. 51
      dk-common/common-websocket/src/main/java/org/dromara/common/websocket/utils/WebSocketUtils.java
  20. 1
      dk-modules/pom.xml
  21. 20
      dk-modules/resource/src/main/java/org/dromara/resource/domain/SysOssConfig.java
  22. 20
      dk-modules/resource/src/main/java/org/dromara/resource/domain/bo/SysOssConfigBo.java
  23. 20
      dk-modules/resource/src/main/java/org/dromara/resource/domain/vo/SysOssConfigVo.java
  24. 138
      dk-modules/sample/pom.xml
  25. 4
      dk-modules/sample/src/main/java/org/dromara/sample/CloudApiSampleApplication.java
  26. 5
      dk-modules/sample/src/main/java/org/dromara/sample/common/error/CommonErrorEnum.java
  27. 88
      dk-modules/sample/src/main/java/org/dromara/sample/common/model/CustomClaim.java
  28. 144
      dk-modules/sample/src/main/java/org/dromara/sample/common/util/JwtUtil.java
  29. 2
      dk-modules/sample/src/main/java/org/dromara/sample/common/util/SpringBeanUtilsTest.java
  30. 21
      dk-modules/sample/src/main/java/org/dromara/sample/component/ApplicationBootInitial.java
  31. 60
      dk-modules/sample/src/main/java/org/dromara/sample/component/AuthInterceptor.java
  32. 35
      dk-modules/sample/src/main/java/org/dromara/sample/component/CorsFilter.java
  33. 4
      dk-modules/sample/src/main/java/org/dromara/sample/component/GlobalExceptionHandler.java
  34. 19
      dk-modules/sample/src/main/java/org/dromara/sample/component/GlobalScheduleService.java
  35. 4
      dk-modules/sample/src/main/java/org/dromara/sample/component/mqtt/config/MqttMessageChannel.java
  36. 21
      dk-modules/sample/src/main/java/org/dromara/sample/component/mqtt/config/MqttPropertyConfiguration.java
  37. 7
      dk-modules/sample/src/main/java/org/dromara/sample/component/mqtt/model/EventsReceiver.java
  38. 2
      dk-modules/sample/src/main/java/org/dromara/sample/component/mqtt/model/MapKeyConst.java
  39. 2
      dk-modules/sample/src/main/java/org/dromara/sample/component/mqtt/model/MqttClientOptions.java
  40. 2
      dk-modules/sample/src/main/java/org/dromara/sample/component/mqtt/model/MqttProtocolEnum.java
  41. 2
      dk-modules/sample/src/main/java/org/dromara/sample/component/mqtt/model/MqttUseEnum.java
  42. 24
      dk-modules/sample/src/main/java/org/dromara/sample/component/mybatis/MybatisPlusConfiguration.java
  43. 37
      dk-modules/sample/src/main/java/org/dromara/sample/component/mybatis/MybatisPlusMetaObjectHandler.java
  44. 93
      dk-modules/sample/src/main/java/org/dromara/sample/component/oss/model/OssConfiguration.java
  45. 51
      dk-modules/sample/src/main/java/org/dromara/sample/component/oss/service/IOssService.java
  46. 120
      dk-modules/sample/src/main/java/org/dromara/sample/component/oss/service/impl/AliyunOssServiceImpl.java
  47. 126
      dk-modules/sample/src/main/java/org/dromara/sample/component/oss/service/impl/AmazonS3ServiceImpl.java
  48. 140
      dk-modules/sample/src/main/java/org/dromara/sample/component/oss/service/impl/MinIOServiceImpl.java
  49. 31
      dk-modules/sample/src/main/java/org/dromara/sample/component/oss/service/impl/OssAspectHandler.java
  50. 68
      dk-modules/sample/src/main/java/org/dromara/sample/component/oss/service/impl/OssServiceContext.java
  51. 63
      dk-modules/sample/src/main/java/org/dromara/sample/component/redis/RedisConfiguration.java
  52. 70
      dk-modules/sample/src/main/java/org/dromara/sample/component/websocket/config/AuthPrincipalHandler.java
  53. 27
      dk-modules/sample/src/main/java/org/dromara/sample/component/websocket/config/MyWebSocketFactory.java
  54. 58
      dk-modules/sample/src/main/java/org/dromara/sample/component/websocket/config/MyWebSocketHandler.java
  55. 93
      dk-modules/sample/src/main/java/org/dromara/sample/component/websocket/model/BizCodeEnum.java
  56. 23
      dk-modules/sample/src/main/java/org/dromara/sample/component/websocket/service/IWebSocketManageService.java
  57. 32
      dk-modules/sample/src/main/java/org/dromara/sample/component/websocket/service/IWebSocketMessageService.java
  58. 86
      dk-modules/sample/src/main/java/org/dromara/sample/component/websocket/service/impl/WebSocketManageServiceImpl.java
  59. 99
      dk-modules/sample/src/main/java/org/dromara/sample/component/websocket/service/impl/WebSocketMessageServiceImpl.java
  60. 2
      dk-modules/sample/src/main/java/org/dromara/sample/configuration/GlobalThreadPoolConfiguration.java
  61. 2
      dk-modules/sample/src/main/java/org/dromara/sample/configuration/SpringBeanConfiguration.java
  62. 40
      dk-modules/sample/src/main/java/org/dromara/sample/configuration/mvc/GlobalMVCConfigurer.java
  63. 23
      dk-modules/sample/src/main/java/org/dromara/sample/control/controller/DockController.java
  64. 46
      dk-modules/sample/src/main/java/org/dromara/sample/control/controller/DrcController.java
  65. 6
      dk-modules/sample/src/main/java/org/dromara/sample/control/model/dto/AirConditionerMode.java
  66. 6
      dk-modules/sample/src/main/java/org/dromara/sample/control/model/dto/AlarmState.java
  67. 6
      dk-modules/sample/src/main/java/org/dromara/sample/control/model/dto/BatteryStoreMode.java
  68. 2
      dk-modules/sample/src/main/java/org/dromara/sample/control/model/dto/JwtAclDTO.java
  69. 6
      dk-modules/sample/src/main/java/org/dromara/sample/control/model/dto/LinkWorkMode.java
  70. 10
      dk-modules/sample/src/main/java/org/dromara/sample/control/model/dto/RemoteDebugOpenState.java
  71. 2
      dk-modules/sample/src/main/java/org/dromara/sample/control/model/dto/ResultNotifyDTO.java
  72. 14
      dk-modules/sample/src/main/java/org/dromara/sample/control/model/dto/ReturnHomeCancelState.java
  73. 14
      dk-modules/sample/src/main/java/org/dromara/sample/control/model/dto/ReturnHomeState.java
  74. 2
      dk-modules/sample/src/main/java/org/dromara/sample/control/model/enums/CameraModeEnum.java
  75. 2
      dk-modules/sample/src/main/java/org/dromara/sample/control/model/enums/DrcMethodEnum.java
  76. 2
      dk-modules/sample/src/main/java/org/dromara/sample/control/model/enums/DroneAuthorityEnum.java
  77. 2
      dk-modules/sample/src/main/java/org/dromara/sample/control/model/enums/DroneControlMethodEnum.java
  78. 2
      dk-modules/sample/src/main/java/org/dromara/sample/control/model/enums/GimbalResetModeEnum.java
  79. 2
      dk-modules/sample/src/main/java/org/dromara/sample/control/model/enums/MqttAclAccessEnum.java
  80. 25
      dk-modules/sample/src/main/java/org/dromara/sample/control/model/enums/PayloadCommandsEnum.java
  81. 12
      dk-modules/sample/src/main/java/org/dromara/sample/control/model/enums/RemoteDebugMethodEnum.java
  82. 2
      dk-modules/sample/src/main/java/org/dromara/sample/control/model/param/DeviceDrcInfoParam.java
  83. 4
      dk-modules/sample/src/main/java/org/dromara/sample/control/model/param/DrcConnectParam.java
  84. 8
      dk-modules/sample/src/main/java/org/dromara/sample/control/model/param/DrcModeParam.java
  85. 13
      dk-modules/sample/src/main/java/org/dromara/sample/control/model/param/DronePayloadParam.java
  86. 11
      dk-modules/sample/src/main/java/org/dromara/sample/control/model/param/FlyToPointParam.java
  87. 10
      dk-modules/sample/src/main/java/org/dromara/sample/control/model/param/PayloadCommandsParam.java
  88. 4
      dk-modules/sample/src/main/java/org/dromara/sample/control/model/param/RemoteDebugParam.java
  89. 19
      dk-modules/sample/src/main/java/org/dromara/sample/control/model/param/TakeoffToPointParam.java
  90. 11
      dk-modules/sample/src/main/java/org/dromara/sample/control/service/IControlService.java
  91. 11
      dk-modules/sample/src/main/java/org/dromara/sample/control/service/IDrcService.java
  92. 7
      dk-modules/sample/src/main/java/org/dromara/sample/control/service/impl/CameraAimImpl.java
  93. 9
      dk-modules/sample/src/main/java/org/dromara/sample/control/service/impl/CameraFocalLengthSetImpl.java
  94. 6
      dk-modules/sample/src/main/java/org/dromara/sample/control/service/impl/CameraModeSwitchImpl.java
  95. 7
      dk-modules/sample/src/main/java/org/dromara/sample/control/service/impl/CameraPhotoTakeImpl.java
  96. 9
      dk-modules/sample/src/main/java/org/dromara/sample/control/service/impl/CameraRecordingStartImpl.java
  97. 7
      dk-modules/sample/src/main/java/org/dromara/sample/control/service/impl/CameraRecordingStopImpl.java
  98. 56
      dk-modules/sample/src/main/java/org/dromara/sample/control/service/impl/ControlServiceImpl.java
  99. 75
      dk-modules/sample/src/main/java/org/dromara/sample/control/service/impl/DrcServiceImpl.java
  100. 5
      dk-modules/sample/src/main/java/org/dromara/sample/control/service/impl/GimbalResetImpl.java

3
dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/map/api/IHttpMapService.java

@ -49,9 +49,8 @@ public interface IHttpMapService {
"it only needs to return the set of elements in the specified element group", schema = @Schema(format = "uuid")),
@Parameter(name = "is_distributed", description = "Whether the element group is distributed.")
})
@GetMapping(PREFIX + "/workspaces/{workspace_id}/element-groups")
@GetMapping(PREFIX + "/workspaces/element-groups")
HttpResultResponse<List<GetMapElementsResponse>> getMapElements(
@PathVariable(name = "workspace_id") String workspaceId,
@RequestParam(name = "group_id", required = false) String groupId,
@RequestParam(name = "is_distributed", required = false) Boolean isDistributed,
HttpServletRequest req, HttpServletResponse rsp);

31
dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/media/api/IHttpMediaService.java

@ -30,19 +30,14 @@ public interface IHttpMediaService {
/**
* Check if the file has been uploaded by the fingerprint.
* @param workspaceId
* @param request
* @param req
* @param rsp
* @return
*/
@Operation(summary = "media fast upload", description = "Check if the file has been uploaded by the fingerprint.",
parameters = {
@Parameter(name = "workspace_id", description = "workspace id", schema = @Schema(format = "uuid"))
})
@PostMapping(PREFIX + "/workspaces/{workspace_id}/fast-upload")
@Operation(summary = "media fast upload", description = "Check if the file has been uploaded by the fingerprint.")
@PostMapping(PREFIX + "/workspace/fast-upload")
HttpResultResponse mediaFastUpload(
@PathVariable(name = "workspace_id") String workspaceId,
@Valid @RequestBody MediaFastUploadRequest request,
HttpServletRequest req, HttpServletResponse rsp);
@ -50,7 +45,6 @@ public interface IHttpMediaService {
/**
* When the file is uploaded to the storage server by pilot,
* the basic information of the file is reported through this interface.
* @param workspaceId
* @param request
* @param req
* @param rsp
@ -58,9 +52,7 @@ public interface IHttpMediaService {
*/
@Operation(summary = "app reports file upload result", description = "When the file is uploaded to the storage server by pilot, " +
"the basic information of the file is reported through this interface.",
parameters = {
@Parameter(name = "workspace_id", description = "workspace id", schema = @Schema(format = "uuid"))
}, responses = @ApiResponse(responseCode = "200", description = "OK",
responses = @ApiResponse(responseCode = "200", description = "OK",
content = @Content(mediaType = "application/json",
examples = {@ExampleObject(name = "responseObjectKey",
summary = "response object key",
@ -68,47 +60,36 @@ public interface IHttpMediaService {
value = "{\"code\": 0, \"message\":\"success\", \"data\": \"media/DJI_20220831151616_0004_W_Waypoint4.JPG\"}"
)})))
@PostMapping(PREFIX + "/workspaces/{workspace_id}/upload-callback")
@PostMapping(PREFIX + "/workspaces/upload-callback")
HttpResultResponse<String> mediaUploadCallback(
@PathVariable(name = "workspace_id") String workspaceId,
@Valid @RequestBody MediaUploadCallbackRequest request,
HttpServletRequest req, HttpServletResponse rsp);
/**
* Query the files that already exist in this workspace based on the workspace id and the collection of tiny fingerprints.
* @param workspaceId
* @param request There is only one tiny_fingerprint parameter in the body.
* @param req
* @param rsp
* @return
*/
@Operation(summary = "checks whether the file fingerprint exists", description = "Query the files that already exist in this " +
"workspace based on the workspace id and the collection of tiny fingerprints.",
parameters = {
@Parameter(name = "workspace_id", description = "workspace id", schema = @Schema(format = "uuid"))
})
"workspace based on the workspace id and the collection of tiny fingerprints.")
@PostMapping(PREFIX + "/workspaces/{workspace_id}/files/tiny-fingerprints")
HttpResultResponse<GetFileFingerprintResponse> getExistFileTinyFingerprint(
@PathVariable(name = "workspace_id") String workspaceId,
@Valid @RequestBody GetFileFingerprintRequest request,
HttpServletRequest req, HttpServletResponse rsp);
/**
* Report the upload status of the media files in the file group in real time.
* @param workspaceId
* @param request
* @param req
* @param rsp
* @return
*/
@Operation(summary = "callback after the file group upload complete", description = "Report the upload status of " +
"the media files in the file group in real time.",
parameters = {
@Parameter(name = "workspace_id", description = "workspace id", schema = @Schema(format = "uuid"))
})
"the media files in the file group in real time.")
@PostMapping(PREFIX + "/workspaces/{workspace_id}/group-upload-callback")
HttpResultResponse folderUploadCallback(
@PathVariable(name = "workspace_id") String workspaceId,
@Valid @RequestBody FolderUploadCallbackRequest request,
HttpServletRequest req, HttpServletResponse rsp);

25
dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/storage/OssTypeEnum.java

@ -1,8 +1,16 @@
package org.dromara.common.sdk.cloudapi.storage;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonValue;
import io.swagger.v3.oas.annotations.media.Schema;
import java.util.Collections;
import java.util.Map;
import java.util.Optional;
import java.util.function.Function;
import java.util.stream.Collectors;
import java.util.stream.Stream;
/**
* @author sean
* @version 1.0
@ -19,6 +27,11 @@ public enum OssTypeEnum {
private String type;
private static final Map<String, OssTypeEnum> TYPE_MAP = Collections.unmodifiableMap(
Stream.of(values()).collect( Collectors.toMap(OssTypeEnum::getType, Function.identity())
)
);
OssTypeEnum(String type) {
this.type = type;
}
@ -27,4 +40,16 @@ public enum OssTypeEnum {
public String getType() {
return type;
}
@JsonCreator
public static OssTypeEnum fromType(String type) {
return Optional.ofNullable(TYPE_MAP.get(type))
.orElse(TYPE_MAP.get("minio"));
}
@Override
public String toString() {
return type;
}
}

4
dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/storage/api/IHttpStorageService.java

@ -22,7 +22,6 @@ public interface IHttpStorageService {
/**
* Get temporary credentials for uploading the media and wayline in DJI Pilot.
* @param workspaceId workspace id
* @param req
* @param rsp
* @return
@ -31,9 +30,8 @@ public interface IHttpStorageService {
parameters = {
@Parameter(name = "workspace_id", description = "workspace id", schema = @Schema(format = "uuid"))
})
@PostMapping(PREFIX + "/workspaces/{workspace_id}/sts")
@PostMapping(PREFIX + "/workspaces/sts")
HttpResultResponse<StsCredentialsResponse> getTemporaryCredential(
@PathVariable(name = "workspace_id") String workspaceId,
HttpServletRequest req, HttpServletResponse rsp);
}

10
dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/tsa/api/IHttpTsaService.java

@ -22,8 +22,8 @@ public interface IHttpTsaService {
String PREFIX = "manage/api/v1";
/**
* 获取当前用户工作区中所有设备的拓扑列表以供飞行员显示
* Get the topology list of all devices in the current user workspace for pilot display.
* @param workspaceId
* @param req
* @param rsp
* @return
@ -31,13 +31,9 @@ public interface IHttpTsaService {
@Operation(summary = "obtain device topology list", description = "Get the topology list of all devices in the current user workspace for pilot display." +
"In the first connection, DJI Pilot 2 will call this interface to obtain the list topology of all devices." +
"Also, when Pilot receives a websocket command to notify the device of online, offline, and update, " +
"it will also call this interface to request the device topology list to be updated.",
parameters = {
@Parameter(name = "workspace_id", description = "workspace id", schema = @Schema(format = "uuid")),
})
@GetMapping(PREFIX + "/workspaces/{workspace_id}/devices/topologies")
"it will also call this interface to request the device topology list to be updated.")
@GetMapping(PREFIX + "/workspaces/devices/topologies")
HttpResultResponse<TopologyResponse> obtainDeviceTopologyList(
@PathVariable(name = "workspace_id") String workspaceId,
HttpServletRequest req, HttpServletResponse rsp);
}

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

@ -33,47 +33,37 @@ public interface IHttpWaylineService {
/**
* Query the basic data of the wayline file according to the query conditions.
* The query condition field in pilot is fixed.
* @param workspaceId workspace id
* @param request get waylines params
* @param req
* @param rsp
* @return wayline list
*/
@Operation(summary = "get wayline list", description = "Query the basic data of the wayline file according to " +
"the query conditions. The query condition field in pilot is fixed.",
parameters = {
@Parameter(name = "workspace_id", description = "workspace id", schema = @Schema(format = "uuid"))
})
@GetMapping(PREFIX + "/workspaces/{workspace_id}/waylines")
"the query conditions. The query condition field in pilot is fixed.")
@GetMapping(PREFIX + "/workspaces/waylines")
HttpResultResponse<PaginationData<GetWaylineListResponse>> getWaylineList(
@Valid @ParameterObject GetWaylineListRequest request,
@PathVariable(name = "workspace_id") String workspaceId,
HttpServletRequest req, HttpServletResponse rsp);
/**
* Query the download address of the file according to the wayline file id,
* and redirect to this address directly for download.
* @param workspaceId workspace id
* @param waylineId wayline file id
* @param req
* @param rsp
*/
@Operation(summary = "get wayline file download address", description = "Query the download address of the file " +
"according to the wayline file id, and redirect to this address directly for download.",
parameters = {
@Parameter(name = "workspace_id", description = "workspace id", schema = @Schema(format = "uuid")),
@Parameter(name = "wayline_id", description = "wayline id", schema = @Schema(format = "uuid"))
})
@GetMapping(PREFIX + "/workspaces/{workspace_id}/waylines/{wayline_id}/url")
void getWaylineFileDownloadAddress(
@PathVariable(name = "workspace_id") String workspaceId,
@PathVariable(name = "wayline_id") String waylineId,
HttpServletRequest req, HttpServletResponse rsp);
/**
* Checking whether the name already exists according to the wayline name must ensure the uniqueness of the wayline name.
* This interface will be called when uploading waylines and must be available.
* @param workspaceId workspace id
* @param names wayline file name collection
* @param req
* @param rsp
@ -83,38 +73,30 @@ public interface IHttpWaylineService {
"according to the wayline name must ensure the uniqueness of the wayline name. " +
"This interface will be called when uploading waylines and must be available.",
parameters = {
@Parameter(name = "workspace_id", description = "workspace id", required = true),
@Parameter(name = "name", description = "wayline file name", required = true)
})
@GetMapping(PREFIX + "/workspaces/{workspace_id}/waylines/duplicate-names")
@GetMapping(PREFIX + "/workspaces/waylines/duplicate-names")
HttpResultResponse<List<String>> getDuplicatedWaylineName(
@PathVariable(name = "workspace_id") String workspaceId,
@NotNull @Size(min = 1) @RequestParam(name = "name") List<String> names,
HttpServletRequest req, HttpServletResponse rsp);
/**
* When the wayline file is uploaded to the storage server by pilot,
* the basic information of the file is reported through this interface.
* @param workspaceId workspace id
* @param request upload callback params
* @param req
* @param rsp
* @return success
*/
@Operation(summary = "file upload result report", description = "When the wayline file is uploaded to the " +
"storage server by pilot, the basic information of the file is reported through this interface.",
parameters = {
@Parameter(name = "workspace_id", description = "workspace id", required = true)
})
@PostMapping(PREFIX + "/workspaces/{workspace_id}/upload-callback")
"storage server by pilot, the basic information of the file is reported through this interface.")
@PostMapping(PREFIX + "/workspaces/upload-callback")
HttpResultResponse fileUploadResultReport(
@PathVariable(name = "workspace_id") String workspaceId,
@Valid @RequestBody WaylineUploadCallbackRequest request,
HttpServletRequest req, HttpServletResponse rsp);
/**
* Favorite the wayline file according to the wayline file id.
* @param workspaceId workspace id
* @param ids wayline file id
* @param req
* @param rsp
@ -122,18 +104,15 @@ public interface IHttpWaylineService {
*/
@Operation(summary = "batch favorites wayline", description = "Favorite the wayline file according to the wayline file id.",
parameters = {
@Parameter(name = "workspace_id", description = "workspace id", required = true),
@Parameter(name = "id", description = "wayline id", required = true)
})
@PostMapping(PREFIX + "/workspaces/{workspace_id}/favorites")
@PostMapping(PREFIX + "/workspaces/favorites")
HttpResultResponse batchFavoritesWayline(
@PathVariable(name = "workspace_id") String workspaceId,
@NotNull @Size(min = 1) @RequestParam(name = "id") List<String> ids,
HttpServletRequest req, HttpServletResponse rsp);
/**
* Delete the favorites of this wayline file based on the wayline file id.
* @param workspaceId workspace id
* @param ids wayline file id
* @param req
* @param rsp
@ -141,12 +120,10 @@ public interface IHttpWaylineService {
*/
@Operation(summary = "batch unfavorites wayline", description = "Delete the favorites of this wayline file based on the wayline file id.",
parameters = {
@Parameter(name = "workspace_id", description = "workspace id", required = true),
@Parameter(name = "id", description = "wayline id", required = true)
})
@DeleteMapping(PREFIX + "/workspaces/{workspace_id}/favorites")
HttpResultResponse batchUnfavoritesWayline(
@PathVariable(name = "workspace_id") String workspaceId,
@NotNull @Size(min = 1) @RequestParam(name = "id") List<String> ids,
HttpServletRequest req, HttpServletResponse rsp);
}

23
dk-common/common-oss/pom.xml

@ -65,7 +65,30 @@
<groupId>software.amazon.awssdk</groupId>
<artifactId>s3-transfer-manager</artifactId>
</dependency>
<dependency>
<groupId>org.dromara</groupId>
<artifactId>common-cloudsdk</artifactId>
<version>2.2.2</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk-core</artifactId>
<version>1.12.261</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk-sts</artifactId>
<version>1.12.261</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>${aliyun-oss.version}</version>
</dependency>
</dependencies>
</project>

25
dk-common/common-oss/src/main/java/org/dromara/common/oss/core/OssClient.java

@ -125,6 +125,8 @@ public class OssClient {
}
}
/**
* 同步创建存储桶
* 如果存储桶不存在会进行创建如果存储桶存在不执行任何操作
@ -342,6 +344,25 @@ public class OssClient {
return url.toString();
}
/**
* 获取私有URL链接
*
* @param objectKey 对象KEY
* @param second 授权时间
*/
public URL getPrivateUrlURL(String objectKey, Integer second) {
// 使用 AWS S3 预签名 URL 的生成器 获取对象的预签名 URL
URL url = presigner.presignGetObject(
x -> x.signatureDuration(Duration.ofSeconds(second))
.getObjectRequest(
y -> y.bucket(properties.getBucketName())
.key(objectKey)
.build())
.build())
.url();
return url;
}
/**
* 上传 byte[] 数据到 Amazon S3使用指定的后缀构造对象键
*
@ -433,6 +454,10 @@ public class OssClient {
return header + endpoint;
}
public OssProperties getOssProperties() {
return this.properties;
}
/**
* 根据传入的 region 参数返回相应的 AWS 区域
* 如果 region 参数非空使用 Region.of 方法创建并返回对应的 AWS 区域对象

53
dk-common/common-oss/src/main/java/org/dromara/common/oss/factory/AliyunOss.java

@ -0,0 +1,53 @@
package org.dromara.common.oss.factory;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.auth.sts.AssumeRoleRequest;
import com.aliyuncs.auth.sts.AssumeRoleResponse;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.http.MethodType;
import com.aliyuncs.profile.DefaultProfile;
import com.aliyuncs.profile.IClientProfile;
import lombok.extern.slf4j.Slf4j;
import org.dromara.common.oss.core.OssClient;
import org.dromara.common.sdk.cloudapi.storage.CredentialsToken;
import org.springframework.stereotype.Service;
/**
* @auther wuyuan
* @data 2025/2/15
*/
@Slf4j
@Service
public class AliyunOss {
public static CredentialsToken getCredentials( OssClient client) {
try {
String regionId = "";
// 添加endpoint。适用于Java SDK 3.12.0及以上版本。
DefaultProfile.addEndpoint(regionId, "Sts", "sts.cn-hangzhou.aliyuncs.com");
// 添加endpoint。适用于Java SDK 3.12.0以下版本。
// DefaultProfile.addEndpoint("",regionId, "Sts", endpoint);
// 构造default profile。
IClientProfile profile = DefaultProfile.getProfile(regionId, client.getOssProperties().getAccessKey(), client.getOssProperties().getSecretKey());
// 构造client。
DefaultAcsClient ascClient = new DefaultAcsClient(profile);
AssumeRoleRequest request = new AssumeRoleRequest();
// 适用于Java SDK 3.12.0及以上版本。
request.setSysMethod(MethodType.POST);
// 适用于Java SDK 3.12.0以下版本。
//request.setMethod(MethodType.POST);
request.setRoleArn(client.getOssProperties().getRoleArn());
request.setRoleSessionName(client.getOssProperties().getRoleSessionName());
request.setDurationSeconds(client.getOssProperties().getExpire());
AssumeRoleResponse response = ascClient.getAcsResponse(request);
return new CredentialsToken(response.getCredentials().getAccessKeyId(), response.getCredentials().getAccessKeySecret(), response.getCredentials().getSecurityToken(), client.getOssProperties().getExpire());
} catch (ClientException e) {
log.debug("Failed to obtain sts.");
e.printStackTrace();
}
return null;
}
}

24
dk-common/common-oss/src/main/java/org/dromara/common/oss/factory/IOssService.java

@ -0,0 +1,24 @@
package org.dromara.common.oss.factory;
import org.dromara.common.oss.core.OssClient;
import org.dromara.common.sdk.cloudapi.storage.CredentialsToken;
import org.dromara.common.sdk.cloudapi.storage.OssTypeEnum;
import java.io.InputStream;
import java.net.URL;
/**
* @author sean
* @version 0.3
* @date 2021/12/23
*/
public interface IOssService {
/**
* Get temporary credentials.
* @return
*/
CredentialsToken getCredentials(OssClient client);
}

37
dk-common/common-oss/src/main/java/org/dromara/common/oss/factory/Minio.java

@ -0,0 +1,37 @@
package org.dromara.common.oss.factory;
import com.amazonaws.auth.AWSCredentialsProvider;
import com.amazonaws.auth.AWSStaticCredentialsProvider;
import com.amazonaws.auth.BasicAWSCredentials;
import com.amazonaws.client.builder.AwsClientBuilder;
import com.amazonaws.services.securitytoken.AWSSecurityTokenService;
import com.amazonaws.services.securitytoken.AWSSecurityTokenServiceClientBuilder;
import com.amazonaws.services.securitytoken.model.Credentials;
import lombok.extern.slf4j.Slf4j;
import org.dromara.common.oss.core.OssClient;
import org.dromara.common.sdk.cloudapi.storage.CredentialsToken;
/**
* @auther wuyuan
* @data 2025/2/15
*/
@Slf4j
public class Minio {
public static CredentialsToken getCredentials(OssClient client) {
try {
AwsClientBuilder.EndpointConfiguration endpointConfiguration = new AwsClientBuilder.EndpointConfiguration(client.getOssProperties().getEndpoint(), client.getOssProperties().getRegion());
BasicAWSCredentials basicAWSCredentials = new BasicAWSCredentials(client.getOssProperties().getAccessKey(), client.getOssProperties().getSecretKey());
AWSCredentialsProvider credentialsProvider = new AWSStaticCredentialsProvider(basicAWSCredentials);
AWSSecurityTokenService stsClient = AWSSecurityTokenServiceClientBuilder.standard()
.withEndpointConfiguration(endpointConfiguration)
.withCredentials(credentialsProvider).build();
Credentials credentials = stsClient.getSessionToken().getCredentials();
return new CredentialsToken(credentials.getAccessKeyId(), credentials.getSecretAccessKey(), credentials.getSessionToken(), client.getOssProperties().getExpire());
} catch (Exception e) {
log.debug("Failed to obtain sts.");
e.printStackTrace();
}
return null;
}
}

35
dk-common/common-oss/src/main/java/org/dromara/common/oss/factory/OssFactory.java

@ -10,6 +10,8 @@ import org.dromara.common.oss.properties.OssProperties;
import org.dromara.common.redis.utils.CacheUtils;
import org.dromara.common.redis.utils.RedisUtils;
import lombok.extern.slf4j.Slf4j;
import org.dromara.common.sdk.cloudapi.storage.CredentialsToken;
import org.dromara.common.sdk.cloudapi.storage.OssTypeEnum;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
@ -25,7 +27,6 @@ public class OssFactory {
private static final Map<String, OssClient> CLIENT_CACHE = new ConcurrentHashMap<>();
private static final ReentrantLock LOCK = new ReentrantLock();
/**
* 获取默认实例
*/
@ -70,4 +71,36 @@ public class OssFactory {
return client;
}
public static synchronized CredentialsToken getCredentials(String configKey) {
String json = CacheUtils.get(CacheNames.SYS_OSS_CONFIG, configKey);
if (json == null) {
throw new OssException("系统异常, '" + configKey + "'配置信息不存在!");
}
OssProperties properties = JsonUtils.parseObject(json, OssProperties.class);
// 使用租户标识避免多个租户相同key实例覆盖
String key = configKey;
if (StringUtils.isNotBlank(properties.getTenantId())) {
key = properties.getTenantId() + ":" + configKey;
}
OssClient client = CLIENT_CACHE.get(key);
// 客户端不存在或配置不相同则重新构建
if (client == null || !client.checkPropertiesSame(properties)) {
LOCK.lock();
try {
if(OssTypeEnum.ALIYUN.getType().equals(client.getOssProperties().getSThreeType())){
AliyunOss.getCredentials(client);
}else if(OssTypeEnum.MINIO.getType().equals(client.getOssProperties().getSThreeType())){
Minio.getCredentials(client);
}
} catch (Exception e) {
log.debug("Failed to obtain sts.");
e.printStackTrace();
} finally {
LOCK.unlock();
}
}
return null;
}
}

22
dk-common/common-oss/src/main/java/org/dromara/common/oss/properties/OssProperties.java

@ -50,6 +50,26 @@ public class OssProperties {
*/
private String region;
/**
* s3类型0minio1oss2aws
*/
private String sThreeType;
/**
* 角色会话名称
*/
private String roleSessionName;
/**
* AWS账户
*/
private String roleArn;
/**
* 授权时间
*/
private Long expire;
/**
* 是否httpsY=,N=
*/
@ -60,4 +80,6 @@ public class OssProperties {
*/
private String accessPolicy;
}

2
dk-modules/sample/src/main/java/org/dromara/sample/component/redis/RedisConst.java → dk-common/common-redis/src/main/java/org/dromara/common/redis/config/RedisConst.java

@ -1,4 +1,4 @@
package com.dji.sample.component.redis;
package org.dromara.common.redis.config;
/**
* @author sean

2
dk-modules/sample/src/main/java/org/dromara/sample/component/redis/RedisOpsUtils.java → dk-common/common-redis/src/main/java/org/dromara/common/redis/utils/RedisOpsUtils.java

@ -1,4 +1,4 @@
package com.dji.sample.component.redis;
package org.dromara.common.redis.utils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;

4
dk-modules/sample/src/main/java/org/dromara/sample/component/websocket/config/MyConcurrentWebSocketSession.java → dk-common/common-websocket/src/main/java/org/dromara/common/websocket/config/MyConcurrentWebSocketSession.java

@ -1,4 +1,4 @@
package com.dji.sample.component.websocket.config;
package org.dromara.common.websocket.config;
import org.springframework.web.socket.WebSocketSession;
import org.springframework.web.socket.handler.ConcurrentWebSocketSessionDecorator;
@ -22,4 +22,4 @@ public class MyConcurrentWebSocketSession extends ConcurrentWebSocketSessionDeco
this(delegate, SEND_TIME_LIMIT, SEND_BUFFER_SIZE_LIMIT);
}
}
}

69
dk-common/common-websocket/src/main/java/org/dromara/common/websocket/dto/BizCodeEnum.java

@ -1,14 +1,10 @@
package org.dromara.common.websocket.dto;
import com.fasterxml.jackson.annotation.JsonValue;
import io.swagger.v3.oas.annotations.media.Schema;
/**
* @author sean
* @version 0.1
* @date 2021/11/26
*/
@Schema(enumAsRef = true, description = "Pilot2 will receive these bizCode, and then do corresponding processing according to the value.")
public enum BizCodeEnum {
DEVICE_ONLINE("device_online"),
@ -19,24 +15,79 @@ public enum BizCodeEnum {
DEVICE_OSD("device_osd"),
RC_OSD("gateway_osd"),
DOCK_OSD("dock_osd"),
MAP_ELEMENT_CREATE("map_element_create"),
MAP_ELEMENT_UPDATE("map_element_update"),
MAP_ELEMENT_DELETE("map_element_delete"),
MAP_GROUP_REFRESH("map_group_refresh");
MAP_GROUP_REFRESH("map_group_refresh"),
FLIGHT_TASK_PROGRESS("flighttask_progress"),
DEVICE_HMS("device_hms"),
DEVICE_REBOOT("device_reboot"),
DRONE_OPEN("drone_open"),
DRONE_CLOSE("drone_close"),
DEVICE_CHECK("device_check"),
DRONE_FORMAT("drone_format"),
DEVICE_FORMAT("device_format"),
COVER_OPEN("cover_open"),
COVER_CLOSE("cover_close"),
PUTTER_OPEN("putter_open"),
PUTTER_CLOSE("putter_close"),
CHARGE_OPEN("charge_open"),
private final String code;
CHARGE_CLOSE("charge_close"),
FILE_UPLOAD_CALLBACK("file_upload_callback"),
FILE_UPLOAD_PROGRESS("fileupload_progress"),
OTA_PROGRESS("ota_progress"),
HIGHEST_PRIORITY_UPLOAD_FLIGHT_TASK_MEDIA("highest_priority_upload_flighttask_media"),
CONTROL_SOURCE_CHANGE("control_source_change"),
FLY_TO_POINT_PROGRESS("fly_to_point_progress"),
TAKE_OFF_TO_POINT_PROGRESS("takeoff_to_point_progress"),
DRC_STATUS_NOTIFY("drc_status_notify"),
JOYSTICK_INVALID_NOTIFY("joystick_invalid_notify"),
FLIGHT_AREAS_SYNC_PROGRESS("flight_areas_sync_progress"),
FLIGHT_AREAS_DRONE_LOCATION("flight_areas_drone_location"),
FLIGHT_AREAS_UPDATE("flight_areas_update"),
;
private String code;
BizCodeEnum(String code) {
this.code = code;
}
@JsonValue
public String getCode() {
return code;
}
}

83
dk-common/common-websocket/src/main/java/org/dromara/common/websocket/dto/WebSocketMessageResponse.java

@ -0,0 +1,83 @@
package org.dromara.common.websocket.dto;
import com.fasterxml.jackson.annotation.JsonProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.Min;
import jakarta.validation.constraints.NotNull;
/**
* The format of WebSocket messages that the pilot can receive.
* @author sean.zhou
* @date 2021/11/17
* @version 0.1
*/
@Schema(description = "The format of WebSocket messages that the pilot can receive.")
public class WebSocketMessageResponse<T> {
@JsonProperty("biz_code")
@NotNull
@Schema(description = "webSocket messages identity", implementation = BizCodeEnum.class)
private String bizCode;
@Schema(description = "webSocket messages version")
private String version = "1.0";
@NotNull
@Min(123456789012L)
@Schema(description = "timestamp (milliseconds)")
private Long timestamp;
@NotNull
@Schema(description = "Data corresponding to business functions")
private T data;
public WebSocketMessageResponse() {
}
@Override
public String toString() {
return "WebSocketMessageResponse{" +
"bizCode=" + bizCode +
", version='" + version + '\'' +
", timestamp=" + timestamp +
", data=" + data +
'}';
}
public String getBizCode() {
return bizCode;
}
public WebSocketMessageResponse<T> setBizCode(String bizCode) {
this.bizCode = bizCode;
return this;
}
public String getVersion() {
return version;
}
public WebSocketMessageResponse<T> setVersion(String version) {
this.version = version;
return this;
}
public Long getTimestamp() {
return timestamp;
}
public WebSocketMessageResponse<T> setTimestamp(Long timestamp) {
this.timestamp = timestamp;
return this;
}
public T getData() {
return data;
}
public WebSocketMessageResponse<T> setData(T data) {
this.data = data;
return this;
}
}

51
dk-common/common-websocket/src/main/java/org/dromara/common/websocket/utils/WebSocketUtils.java

@ -1,12 +1,17 @@
package org.dromara.common.websocket.utils;
import cn.hutool.core.collection.CollUtil;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.checkerframework.checker.units.qual.C;
import org.dromara.common.redis.utils.RedisUtils;
import org.dromara.common.websocket.dto.WebSocketMessageDto;
import org.dromara.common.websocket.dto.WebSocketMessageResponse;
import org.dromara.common.websocket.holder.WebSocketSessionHolder;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.socket.PongMessage;
import org.springframework.web.socket.TextMessage;
import org.springframework.web.socket.WebSocketMessage;
@ -15,6 +20,7 @@ import org.springframework.web.socket.WebSocketSession;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.function.Consumer;
import static org.dromara.common.websocket.constant.WebSocketConstants.WEB_SOCKET_TOPIC;
@ -75,6 +81,51 @@ public class WebSocketUtils {
}
}
/**
* 发布WebSocket订阅消息
*
* @param
*/
public static void publishAll(Integer userType, String bizCode, Object data) {
WebSocketMessageResponse message = new WebSocketMessageResponse()
.setData(Objects.requireNonNullElse(data, ""))
.setTimestamp(System.currentTimeMillis())
.setBizCode(bizCode);
ObjectMapper mapper = new ObjectMapper();
try {
WebSocketMessageDto broadcastMessage = new WebSocketMessageDto();
broadcastMessage.setMessage(mapper.writeValueAsString(message));
RedisUtils.publish(WEB_SOCKET_TOPIC, broadcastMessage, consumer -> {
log.info("WebSocket发送主题订阅消息topic:{} message:{}", WEB_SOCKET_TOPIC, message);
});
}catch (Exception e) {
e.printStackTrace();
}
}
/**
* 发布WebSocket订阅消息
*
* @param
*/
public static void publishAll(String bizCode, Object data) {
WebSocketMessageResponse message = new WebSocketMessageResponse()
.setData(Objects.requireNonNullElse(data, ""))
.setTimestamp(System.currentTimeMillis())
.setBizCode(bizCode);
ObjectMapper mapper = new ObjectMapper();
try {
WebSocketMessageDto broadcastMessage = new WebSocketMessageDto();
broadcastMessage.setMessage(mapper.writeValueAsString(message));
RedisUtils.publish(WEB_SOCKET_TOPIC, broadcastMessage, consumer -> {
log.info("WebSocket发送主题订阅消息topic:{} message:{}", WEB_SOCKET_TOPIC, message);
});
}catch (Exception e) {
e.printStackTrace();
}
}
/**
* 向所有的WebSocket会话发布订阅的消息(群发)
*

1
dk-modules/pom.xml

@ -14,6 +14,7 @@
<module>job</module>
<module>resource</module>
<module>workflow</module>
<module>sample</module>
</modules>
<artifactId>dk-modules</artifactId>

20
dk-modules/resource/src/main/java/org/dromara/resource/domain/SysOssConfig.java

@ -68,6 +68,26 @@ public class SysOssConfig extends BaseEntity {
*/
private String region;
/**
* s3类型minio(包含其他方式)ossaws
*/
private String sThreeType;
/**
* 角色会话名称
*/
private String roleSessionName;
/**
* AWS账户
*/
private String roleArn;
/**
* 授权时间
*/
private Long expire;
/**
* 是否默认0=,1=
*/

20
dk-modules/resource/src/main/java/org/dromara/resource/domain/bo/SysOssConfigBo.java

@ -90,6 +90,26 @@ public class SysOssConfigBo extends BaseEntity {
*/
private String region;
/**
* s3类型minio(包含其他方式)ossaws
*/
private String sThreeType;
/**
* 角色会话名称
*/
private String roleSessionName;
/**
* AWS账户
*/
private String roleArn;
/**
* 授权时间
*/
private Long expire;
/**
* 扩展字段
*/

20
dk-modules/resource/src/main/java/org/dromara/resource/domain/vo/SysOssConfigVo.java

@ -72,6 +72,26 @@ public class SysOssConfigVo implements Serializable {
*/
private String region;
/**
* s3类型0minio1oss2aws
*/
private String sThreeType;
/**
* 角色会话名称
*/
private String roleSessionName;
/**
* AWS账户
*/
private String roleArn;
/**
* 授权时间
*/
private Long expire;
/**
* 是否默认0=,1=
*/

138
dk-modules/sample/pom.xml

@ -0,0 +1,138 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<groupId>org.dromara</groupId>
<artifactId>dk-modules</artifactId>
<version>${revision}</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>sample</artifactId>
<dependencies>
<dependency>
<groupId>org.dromara</groupId>
<artifactId>common-nacos</artifactId>
</dependency>
<dependency>
<groupId>org.dromara</groupId>
<artifactId>common-core</artifactId>
</dependency>
<dependency>
<groupId>org.dromara</groupId>
<artifactId>common-cloudsdk</artifactId>
<version>2.2.2</version>
</dependency>
<dependency>
<groupId>org.dromara</groupId>
<artifactId>common-sentinel</artifactId>
</dependency>
<!-- RuoYi Common Log -->
<dependency>
<groupId>org.dromara</groupId>
<artifactId>common-log</artifactId>
</dependency>
<dependency>
<groupId>org.dromara</groupId>
<artifactId>common-dict</artifactId>
</dependency>
<dependency>
<groupId>org.dromara</groupId>
<artifactId>common-doc</artifactId>
</dependency>
<dependency>
<groupId>org.dromara</groupId>
<artifactId>common-web</artifactId>
</dependency>
<dependency>
<groupId>org.dromara</groupId>
<artifactId>common-mybatis</artifactId>
</dependency>
<dependency>
<groupId>org.dromara</groupId>
<artifactId>common-dubbo</artifactId>
</dependency>
<dependency>
<groupId>org.dromara</groupId>
<artifactId>common-seata</artifactId>
</dependency>
<dependency>
<groupId>org.dromara</groupId>
<artifactId>common-idempotent</artifactId>
</dependency>
<dependency>
<groupId>org.dromara</groupId>
<artifactId>common-tenant</artifactId>
</dependency>
<dependency>
<groupId>org.dromara</groupId>
<artifactId>common-security</artifactId>
</dependency>
<dependency>
<groupId>org.dromara</groupId>
<artifactId>common-translation</artifactId>
</dependency>
<dependency>
<groupId>org.dromara</groupId>
<artifactId>common-sensitive</artifactId>
</dependency>
<dependency>
<groupId>org.dromara</groupId>
<artifactId>common-encrypt</artifactId>
</dependency>
<!-- RuoYi Api System -->
<dependency>
<groupId>org.dromara</groupId>
<artifactId>api-system</artifactId>
</dependency>
<dependency>
<groupId>org.dromara</groupId>
<artifactId>api-resource</artifactId>
</dependency>
<dependency>
<groupId>org.dromara</groupId>
<artifactId>common-websocket</artifactId>
</dependency>
<dependency>
<groupId>org.dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>2.1.3</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.dromara</groupId>
<artifactId>common-oss</artifactId>
</dependency>
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk-s3</artifactId>
<version>1.12.261</version>
</dependency>
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk-sts</artifactId>
<version>1.12.261</version>
</dependency>
</dependencies>
</project>

4
dk-modules/sample/src/main/java/org/dromara/sample/CloudApiSampleApplication.java

@ -1,4 +1,4 @@
package com.dji.sample;
package org.dromara.sample;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
@ -6,7 +6,7 @@ import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.scheduling.annotation.EnableScheduling;
@MapperScan("com.dji.sample.*.dao")
@MapperScan("org.dromara.sample.*.dao")
@SpringBootApplication
@EnableScheduling
@ComponentScan("com.dji")

5
dk-modules/sample/src/main/java/org/dromara/sample/common/error/CommonErrorEnum.java

@ -1,6 +1,7 @@
package com.dji.sample.common.error;
package org.dromara.sample.common.error;
import com.dji.sdk.common.IErrorInfo;
import org.dromara.common.sdk.common.IErrorInfo;
/**
* @author sean.zhou

88
dk-modules/sample/src/main/java/org/dromara/sample/common/model/CustomClaim.java

@ -1,88 +0,0 @@
package com.dji.sample.common.model;
import com.auth0.jwt.interfaces.Claim;
import com.fasterxml.jackson.annotation.JsonAlias;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import java.lang.reflect.Field;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
/**
* A custom claim for storing custom information in the token.
* @author sean.zhou
* @date 2021/11/16
* @version 0.1
*/
@AllArgsConstructor
@NoArgsConstructor
@Data
@Slf4j
public class CustomClaim {
/**
* The id of the account.
*/
private String id;
private String username;
@JsonAlias("user_type")
private Integer userType;
@JsonAlias("workspace_id")
private String workspaceId;
/**
* Convert the custom claim data type to the Map type.
* @return map
*/
public ConcurrentHashMap<String, String> convertToMap() {
ConcurrentHashMap<String, String> map = new ConcurrentHashMap<>(4);
try {
Field[] declaredFields = this.getClass().getDeclaredFields();
for (Field field : declaredFields) {
JsonAlias annotation = field.getAnnotation(JsonAlias.class);
field.setAccessible(true);
// The value of key is named underscore.
map.put(annotation != null ? annotation.value()[0] : field.getName(),
field.get(this).toString());
}
} catch (IllegalAccessException e) {
log.info("CustomClaim converts failed. {}", this.toString());
e.printStackTrace();
}
return map;
}
/**
* Convert the data in Map into a custom claim object.
* @param claimMap
*/
public CustomClaim (Map<String, Claim> claimMap) {
Field[] declaredFields = this.getClass().getDeclaredFields();
for (Field field : declaredFields) {
field.setAccessible(true);
JsonAlias annotation = field.getAnnotation(JsonAlias.class);
Claim value = claimMap.get(annotation == null ? field.getName() : annotation.value()[0]);
try {
Class<?> type = field.getType();
if (Integer.class.equals(type)) {
field.set(this, Integer.valueOf(value.asString()));
continue;
}
if (String.class.equals(type)) {
field.set(this, value.asString());
continue;
}
} catch (IllegalAccessException e) {
log.info("Claim parses failed. {}", claimMap.toString());
e.printStackTrace();
}
}
}
}

144
dk-modules/sample/src/main/java/org/dromara/sample/common/util/JwtUtil.java

@ -1,144 +0,0 @@
package com.dji.sample.common.util;
import com.auth0.jwt.JWT;
import com.auth0.jwt.JWTCreator;
import com.auth0.jwt.algorithms.Algorithm;
import com.auth0.jwt.exceptions.TokenExpiredException;
import com.auth0.jwt.interfaces.DecodedJWT;
import com.dji.sample.common.model.CustomClaim;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;
import java.util.*;
@Slf4j
@Component
public class JwtUtil {
private static String issuer;
private static String subject;
private static long age;
private static String secret;
public static Algorithm algorithm;
@Value("${jwt.issuer: DJI}")
private void setIssuer(String issuer) {
JwtUtil.issuer = issuer;
}
@Value("${jwt.subject: CloudApiSample}")
private void setSubject(String subject) {
JwtUtil.subject = subject;
}
@Value("${jwt.age: 86400}")
private void setAge(long age) {
JwtUtil.age = age * 1000;
}
@Value("${jwt.secret: CloudApiSample}")
private void setSecret(String secret) {
JwtUtil.secret = secret;
setAlgorithm();
}
private void setAlgorithm() {
JwtUtil.algorithm = Algorithm.HMAC256(secret);
}
private JwtUtil() {
}
/**
* Create a token based on custom information.
* @param claims custom information
* @return token
*/
public static String createToken(Map<String, ?> claims) {
return JwtUtil.createToken(claims, age, algorithm, subject, issuer);
}
/**
*
* @param claims
* @param age unit: s
* @param algorithm
* @param subject
* @param issuer
* @return
*/
public static String createToken(Map<String, ?> claims, Long age, Algorithm algorithm, String subject, String issuer) {
if (Objects.isNull(algorithm)) {
throw new IllegalArgumentException();
}
Date now = new Date();
JWTCreator.Builder builder = JWT.create();
// Add custom information to the token's payload segment.
claims.forEach((k, v) -> {
if (Objects.nonNull(v.getClass().getClassLoader())) {
log.error("claim can't be set to a custom object.");
return;
}
if (v instanceof Map) {
builder.withClaim(k, (Map) v);
} else if (v instanceof List) {
builder.withClaim(k, (List) v);
} else {
builder.withClaim(k, String.valueOf(v));
}
});
if (StringUtils.hasText(subject)) {
builder.withSubject(subject);
}
if (StringUtils.hasText(issuer)) {
builder.withIssuer(issuer);
}
if (Objects.nonNull(age)) {
builder.withExpiresAt(new Date(now.getTime() + age));
}
String token = builder
.withIssuedAt(now)
.withNotBefore(now)
.sign(algorithm);
log.debug("token created. " + token);
return token;
}
/**
* Verify that the token is valid.
* @param token
* @return
* @throws TokenExpiredException
*/
public static DecodedJWT verifyToken(String token) {
return JWT.require(algorithm).build().verify(token);
}
/**
* Parses the custom information in the token into a CustomClaim object.
* @param token
* @return custom claim
*/
public static Optional<CustomClaim> parseToken(String token) {
DecodedJWT jwt;
try {
jwt = verifyToken(token);
} catch (Exception e) {
e.printStackTrace();
return Optional.empty();
}
return Optional.of(new CustomClaim(jwt.getClaims()));
}
}

2
dk-modules/sample/src/main/java/org/dromara/sample/common/util/SpringBeanUtilsTest.java

@ -1,4 +1,4 @@
package com.dji.sample.common.util;
package org.dromara.sample.common.util;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;

21
dk-modules/sample/src/main/java/org/dromara/sample/component/ApplicationBootInitial.java

@ -1,12 +1,13 @@
package com.dji.sample.component;
import com.dji.sample.component.redis.RedisConst;
import com.dji.sample.component.redis.RedisOpsUtils;
import com.dji.sample.manage.model.dto.DeviceDTO;
import com.dji.sample.manage.service.IDeviceRedisService;
import com.dji.sample.manage.service.IDeviceService;
import com.dji.sdk.cloudapi.device.DeviceDomainEnum;
import com.dji.sdk.common.SDKManager;
package org.dromara.sample.component;
import org.dromara.common.redis.config.RedisConst;
import org.dromara.common.redis.utils.RedisOpsUtils;
import org.dromara.sample.manage.model.dto.DeviceDTO;
import org.dromara.sample.manage.service.IDeviceRedisService;
import org.dromara.sample.manage.service.IDeviceService;
import org.dromara.common.sdk.cloudapi.device.DeviceDomainEnum;
import org.dromara.common.sdk.common.SDKManager;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;
@ -49,4 +50,4 @@ public class ApplicationBootInitial implements CommandLineRunner {
deviceRedisService.getDeviceOnline(device.getChildDeviceSn()).map(DeviceDTO::getThingVersion).orElse(null))));
}
}
}

60
dk-modules/sample/src/main/java/org/dromara/sample/component/AuthInterceptor.java

@ -1,60 +0,0 @@
package com.dji.sample.component;
import com.dji.sample.common.error.CommonErrorEnum;
import com.dji.sample.common.model.CustomClaim;
import com.dji.sample.common.util.JwtUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpMethod;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Optional;
@Slf4j
@Component
public class AuthInterceptor implements HandlerInterceptor {
public static final String PARAM_TOKEN = "x-auth-token";
public static final String TOKEN_CLAIM = "customClaim";
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
String uri = request.getRequestURI();
log.debug("request uri: {}, IP: {}", uri, request.getRemoteAddr());
// The options method is passed directly.
if (HttpMethod.OPTIONS.matches(request.getMethod())) {
response.setStatus(HttpStatus.OK.value());
return false;
}
String token = request.getHeader(PARAM_TOKEN);
// Check if the token exists.
if (!StringUtils.hasText(token)) {
response.setStatus(HttpStatus.UNAUTHORIZED.value());
log.error(CommonErrorEnum.NO_TOKEN.getMessage());
return false;
}
// Check if the current token is valid.
Optional<CustomClaim> customClaimOpt = JwtUtil.parseToken(token);
if (customClaimOpt.isEmpty()) {
response.setStatus(HttpStatus.UNAUTHORIZED.value());
return false;
}
// Put the custom data from the token into the request.
request.setAttribute(TOKEN_CLAIM, customClaimOpt.get());
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
// Delete the custom data in the request after the request ends.
request.removeAttribute(TOKEN_CLAIM);
}
}

35
dk-modules/sample/src/main/java/org/dromara/sample/component/CorsFilter.java

@ -1,35 +0,0 @@
package com.dji.sample.component;
import org.springframework.stereotype.Component;
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import static com.dji.sample.component.AuthInterceptor.PARAM_TOKEN;
/**
* @author sean.zhou
* @version 0.1
* @date 2021/11/22
*/
@Component
public class CorsFilter implements Filter {
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException, ServletException {
HttpServletResponse res = (HttpServletResponse) response;
res.addHeader("Access-Control-Allow-Credentials", "true");
res.addHeader("Access-Control-Allow-Origin", "*");
res.addHeader("Access-Control-Allow-Methods", "GET, POST, DELETE, PUT");
res.addHeader("Access-Control-Allow-Headers", "Access-Control-Allow-Headers," +
"Authorization, Content-Length, X-CSRF-Token, Token,session,X_Requested_With,Accept, "+
"Origin, Host, Connection, Accept-Encoding, Accept-Language,DNT, X-CustomHeader, Keep-Alive," +
" User-Agent, X-Requested-With, If-Modified-Since, Cache-Control, Content-Type, Pragma," + PARAM_TOKEN);
if (((HttpServletRequest) request).getMethod().equals("OPTIONS")) {
return;
}
filterChain.doFilter(request, response);
}
}

4
dk-modules/sample/src/main/java/org/dromara/sample/component/GlobalExceptionHandler.java

@ -1,6 +1,6 @@
package com.dji.sample.component;
package org.dromara.sample.component;
import com.dji.sdk.common.HttpResultResponse;
import org.dromara.common.sdk.common.HttpResultResponse;
import org.springframework.validation.BindException;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ControllerAdvice;

19
dk-modules/sample/src/main/java/org/dromara/sample/component/GlobalScheduleService.java

@ -1,13 +1,14 @@
package com.dji.sample.component;
import com.dji.sample.component.redis.RedisConst;
import com.dji.sample.component.redis.RedisOpsUtils;
import com.dji.sample.manage.model.dto.DeviceDTO;
import com.dji.sample.manage.service.IDeviceService;
import com.dji.sdk.cloudapi.device.DeviceDomainEnum;
import com.dji.sdk.mqtt.IMqttTopicService;
package org.dromara.sample.component;
import org.dromara.common.redis.config.RedisConst;
import org.dromara.common.redis.utils.RedisOpsUtils;
import org.dromara.sample.manage.model.dto.DeviceDTO;
import org.dromara.sample.manage.service.IDeviceService;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.extern.slf4j.Slf4j;
import org.dromara.common.sdk.cloudapi.device.DeviceDomainEnum;
import org.dromara.common.sdk.mqtt.IMqttTopicService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
@ -58,4 +59,4 @@ public class GlobalScheduleService {
log.info("Subscriptions: {}", Arrays.toString(topicService.getSubscribedTopic()));
}
}
}

4
dk-modules/sample/src/main/java/org/dromara/sample/component/mqtt/config/MqttMessageChannel.java

@ -1,6 +1,6 @@
package com.dji.sample.component.mqtt.config;
package org.dromara.sample.component.mqtt.config;
import com.dji.sdk.mqtt.ChannelName;
import org.dromara.common.sdk.mqtt.ChannelName;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

21
dk-modules/sample/src/main/java/org/dromara/sample/component/mqtt/config/MqttPropertyConfiguration.java

@ -1,14 +1,11 @@
package com.dji.sample.component.mqtt.config;
package org.dromara.sample.component.mqtt.config;
import com.auth0.jwt.algorithms.Algorithm;
import com.dji.sample.common.util.JwtUtil;
import com.dji.sample.component.mqtt.model.MqttClientOptions;
import com.dji.sample.component.mqtt.model.MqttProtocolEnum;
import com.dji.sample.component.mqtt.model.MqttUseEnum;
import com.dji.sdk.cloudapi.control.DrcModeMqttBroker;
import org.dromara.sample.component.mqtt.model.MqttClientOptions;
import org.dromara.sample.component.mqtt.model.MqttProtocolEnum;
import org.dromara.sample.component.mqtt.model.MqttUseEnum;
import lombok.Data;
import org.dromara.common.sdk.cloudapi.control.DrcModeMqttBroker;
import org.eclipse.paho.client.mqttv3.MqttConnectOptions;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@ -38,6 +35,7 @@ public class MqttPropertyConfiguration {
}
/**
* 获取mqtt客户端基本链接的配置选项
* Get the configuration options of the basic link of the mqtt client.
* @return
*/
@ -49,6 +47,7 @@ public class MqttPropertyConfiguration {
}
/**
* 获取基本链接的mqtt地址
* Get the mqtt address of the basic link.
* @return
*/
@ -57,6 +56,7 @@ public class MqttPropertyConfiguration {
}
/**
* 根据不同客户端的参数拼接mqtt地址
* Splice the mqtt address according to the parameters of different clients.
* @param options
* @return
@ -75,7 +75,7 @@ public class MqttPropertyConfiguration {
}
/**
* Get the connection parameters of the mqtt client of the drc link.
* 获取drc链接的mqtt客户端的连接参数
* @param clientId
* @param username
* @param age The validity period of the token. unit: s
@ -86,9 +86,6 @@ public class MqttPropertyConfiguration {
if (!mqtt.containsKey(MqttUseEnum.DRC)) {
throw new RuntimeException("请先在后端配置文件中配置mqtt的drc链接参数。");
}
Algorithm algorithm = JwtUtil.algorithm;
String token = JwtUtil.createToken(map, age, algorithm, null, null);
return new DrcModeMqttBroker()
.setAddress(getMqttAddress(mqtt.get(MqttUseEnum.DRC)))

7
dk-modules/sample/src/main/java/org/dromara/sample/component/mqtt/model/EventsReceiver.java

@ -1,9 +1,10 @@
package com.dji.sample.component.mqtt.model;
package org.dromara.sample.component.mqtt.model;
import com.dji.sdk.mqtt.events.EventsDataRequest;
import com.dji.sdk.mqtt.events.EventsErrorCode;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.*;
import org.dromara.common.sdk.mqtt.events.EventsDataRequest;
import org.dromara.common.sdk.mqtt.events.EventsErrorCode;
/**
* @author sean

2
dk-modules/sample/src/main/java/org/dromara/sample/component/mqtt/model/MapKeyConst.java

@ -1,4 +1,4 @@
package com.dji.sample.component.mqtt.model;
package org.dromara.sample.component.mqtt.model;
/**
* @author sean

2
dk-modules/sample/src/main/java/org/dromara/sample/component/mqtt/model/MqttClientOptions.java

@ -1,4 +1,4 @@
package com.dji.sample.component.mqtt.model;
package org.dromara.sample.component.mqtt.model;
import lombok.Data;

2
dk-modules/sample/src/main/java/org/dromara/sample/component/mqtt/model/MqttProtocolEnum.java

@ -1,4 +1,4 @@
package com.dji.sample.component.mqtt.model;
package org.dromara.sample.component.mqtt.model;
import lombok.Getter;

2
dk-modules/sample/src/main/java/org/dromara/sample/component/mqtt/model/MqttUseEnum.java

@ -1,4 +1,4 @@
package com.dji.sample.component.mqtt.model;
package org.dromara.sample.component.mqtt.model;
/**
* @author sean

24
dk-modules/sample/src/main/java/org/dromara/sample/component/mybatis/MybatisPlusConfiguration.java

@ -1,24 +0,0 @@
package com.dji.sample.component.mybatis;
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* @author sean
* @version 0.3
* @date 2021/12/22
*/
@Configuration
public class MybatisPlusConfiguration {
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
// select database
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
return interceptor;
}
}

37
dk-modules/sample/src/main/java/org/dromara/sample/component/mybatis/MybatisPlusMetaObjectHandler.java

@ -1,37 +0,0 @@
package com.dji.sample.component.mybatis;
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;
import java.time.LocalDateTime;
import java.time.ZoneId;
/**
* Automatic filling for set values
*/
@Component
public class MybatisPlusMetaObjectHandler implements MetaObjectHandler {
/**
* Automatic filling when inserting into the database.
* @param metaObject
*/
@Override
public void insertFill(MetaObject metaObject) {
this.strictInsertFill(metaObject, "createTime", Long.class,
LocalDateTime.now().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli());
this.strictInsertFill(metaObject, "updateTime", Long.class,
LocalDateTime.now().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli());
}
/**
* Automatic filling when updating the data.
* @param metaObject
*/
@Override
public void updateFill(MetaObject metaObject) {
this.strictUpdateFill(metaObject, "updateTime", Long.class,
LocalDateTime.now().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli());
}
}

93
dk-modules/sample/src/main/java/org/dromara/sample/component/oss/model/OssConfiguration.java

@ -1,93 +0,0 @@
package com.dji.sample.component.oss.model;
import com.dji.sdk.cloudapi.storage.OssTypeEnum;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
/**
* @author sean
* @version 0.2
* @date 2021/12/9
*/
@ConfigurationProperties(prefix = "oss")
@Component
public class OssConfiguration {
/**
* @see OssTypeEnum
*/
public static OssTypeEnum provider;
/**
* Whether to use the object storage service.
*/
public static boolean enable;
/**
* The protocol needs to be included at the beginning of the address.
*/
public static String endpoint;
public static String accessKey;
public static String secretKey;
public static String region;
public static Long expire;
public static String roleSessionName;
public static String roleArn;
public static String bucket;
public static String objectDirPrefix;
public void setProvider(OssTypeEnum provider) {
OssConfiguration.provider = provider;
}
public void setEnable(boolean enable) {
OssConfiguration.enable = enable;
}
public void setEndpoint(String endpoint) {
OssConfiguration.endpoint = endpoint;
}
public void setAccessKey(String accessKey) {
OssConfiguration.accessKey = accessKey;
}
public void setSecretKey(String secretKey) {
OssConfiguration.secretKey = secretKey;
}
public void setRegion(String region) {
OssConfiguration.region = region;
}
public void setExpire(Long expire) {
OssConfiguration.expire = expire;
}
public void setRoleSessionName(String roleSessionName) {
OssConfiguration.roleSessionName = roleSessionName;
}
public void setRoleArn(String roleArn) {
OssConfiguration.roleArn = roleArn;
}
public void setBucket(String bucket) {
OssConfiguration.bucket = bucket;
}
public void setObjectDirPrefix(String objectDirPrefix) {
OssConfiguration.objectDirPrefix = objectDirPrefix;
}
}

51
dk-modules/sample/src/main/java/org/dromara/sample/component/oss/service/IOssService.java

@ -1,51 +0,0 @@
package com.dji.sample.component.oss.service;
import com.dji.sdk.cloudapi.storage.CredentialsToken;
import com.dji.sdk.cloudapi.storage.OssTypeEnum;
import java.io.InputStream;
import java.net.URL;
/**
* @author sean
* @version 0.3
* @date 2021/12/23
*/
public interface IOssService {
OssTypeEnum getOssType();
/**
* Get temporary credentials.
* @return
*/
CredentialsToken getCredentials();
/**
* Get the address of the object based on the bucket name and the object name.
* @param bucket bucket name
* @param objectKey object name
* @return download link
*/
URL getObjectUrl(String bucket, String objectKey);
/**
* Deletes the object in the storage bucket.
* @param bucket
* @param objectKey
* @return
*/
Boolean deleteObject(String bucket, String objectKey);
/**
* Get the contents of an object.
* @param bucket
* @param objectKey
* @return
*/
InputStream getObject(String bucket, String objectKey);
void putObject(String bucket, String objectKey, InputStream input);
void createClient();
}

120
dk-modules/sample/src/main/java/org/dromara/sample/component/oss/service/impl/AliyunOssServiceImpl.java

@ -1,120 +0,0 @@
package com.dji.sample.component.oss.service.impl;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.OSSException;
import com.aliyun.oss.model.ObjectMetadata;
import com.aliyun.oss.model.PutObjectRequest;
import com.aliyun.oss.model.PutObjectResult;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.http.MethodType;
import com.aliyuncs.profile.DefaultProfile;
import com.aliyuncs.profile.IClientProfile;
import com.aliyuncs.sts.model.v20150401.AssumeRoleRequest;
import com.aliyuncs.sts.model.v20150401.AssumeRoleResponse;
import com.dji.sample.component.oss.model.OssConfiguration;
import com.dji.sample.component.oss.service.IOssService;
import com.dji.sdk.cloudapi.storage.CredentialsToken;
import com.dji.sdk.cloudapi.storage.OssTypeEnum;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import java.io.InputStream;
import java.net.URL;
import java.util.Date;
import java.util.Objects;
/**
* @author sean
* @version 0.3
* @date 2021/12/23
*/
@Service
@Slf4j
public class AliyunOssServiceImpl implements IOssService {
private OSS ossClient;
@Override
public OssTypeEnum getOssType() {
return OssTypeEnum.ALIYUN;
}
@Override
public CredentialsToken getCredentials() {
try {
String regionId = "";
// 添加endpoint。适用于Java SDK 3.12.0及以上版本。
DefaultProfile.addEndpoint(regionId, "Sts", "sts.cn-hangzhou.aliyuncs.com");
// 添加endpoint。适用于Java SDK 3.12.0以下版本。
// DefaultProfile.addEndpoint("",regionId, "Sts", endpoint);
// 构造default profile。
IClientProfile profile = DefaultProfile.getProfile(regionId, OssConfiguration.accessKey, OssConfiguration.secretKey);
// 构造client。
DefaultAcsClient client = new DefaultAcsClient(profile);
AssumeRoleRequest request = new AssumeRoleRequest();
// 适用于Java SDK 3.12.0及以上版本。
request.setSysMethod(MethodType.POST);
// 适用于Java SDK 3.12.0以下版本。
//request.setMethod(MethodType.POST);
request.setRoleArn(OssConfiguration.roleArn);
request.setRoleSessionName(OssConfiguration.roleSessionName);
request.setDurationSeconds(OssConfiguration.expire);
AssumeRoleResponse response = client.getAcsResponse(request);
return new CredentialsToken(response.getCredentials().getAccessKeyId(), response.getCredentials().getAccessKeySecret(), response.getCredentials().getSecurityToken(), OssConfiguration.expire);
} catch (ClientException e) {
log.debug("Failed to obtain sts.");
e.printStackTrace();
}
return null;
}
@Override
public URL getObjectUrl(String bucket, String objectKey) {
// First check if the object can be fetched.
boolean isExist = ossClient.doesObjectExist(bucket, objectKey);
if (!isExist) {
throw new OSSException("The object does not exist.");
}
return ossClient.generatePresignedUrl(bucket, objectKey,
new Date(System.currentTimeMillis() + OssConfiguration.expire * 1000));
}
@Override
public Boolean deleteObject(String bucket, String objectKey) {
if (!ossClient.doesObjectExist(bucket, objectKey)) {
return true;
}
ossClient.deleteObject(bucket, objectKey);
return true;
}
@Override
public InputStream getObject(String bucket, String objectKey) {
return ossClient.getObject(bucket, objectKey).getObjectContent();
}
@Override
public void putObject(String bucket, String objectKey, InputStream input) {
if (ossClient.doesObjectExist(bucket, objectKey)) {
throw new RuntimeException("The filename already exists.");
}
PutObjectResult objectResult = ossClient.putObject(new PutObjectRequest(bucket, objectKey, input, new ObjectMetadata()));
log.info("Upload FlighttaskCreateFile: {}", objectResult.getETag());
}
public void createClient() {
if (Objects.nonNull(this.ossClient)) {
return;
}
this.ossClient = new OSSClientBuilder()
.build(OssConfiguration.endpoint, OssConfiguration.accessKey, OssConfiguration.secretKey);
}
}

126
dk-modules/sample/src/main/java/org/dromara/sample/component/oss/service/impl/AmazonS3ServiceImpl.java

@ -1,126 +0,0 @@
package com.dji.sample.component.oss.service.impl;
import com.amazonaws.HttpMethod;
import com.amazonaws.auth.AWSStaticCredentialsProvider;
import com.amazonaws.auth.BasicAWSCredentials;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.*;
import com.amazonaws.services.securitytoken.AWSSecurityTokenService;
import com.amazonaws.services.securitytoken.AWSSecurityTokenServiceClientBuilder;
import com.amazonaws.services.securitytoken.model.AssumeRoleRequest;
import com.amazonaws.services.securitytoken.model.AssumeRoleResult;
import com.amazonaws.services.securitytoken.model.Credentials;
import com.dji.sample.component.AuthInterceptor;
import com.dji.sample.component.oss.model.OssConfiguration;
import com.dji.sample.component.oss.service.IOssService;
import com.dji.sdk.cloudapi.storage.CredentialsToken;
import com.dji.sdk.cloudapi.storage.OssTypeEnum;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import javax.annotation.PostConstruct;
import java.io.InputStream;
import java.net.URL;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Objects;
/**
* @author sean
* @version 1.0
* @date 2022/4/27
*/
@Slf4j
@Service
public class AmazonS3ServiceImpl implements IOssService {
private AmazonS3 client;
@Override
public OssTypeEnum getOssType() {
return OssTypeEnum.AWS;
}
@Override
public CredentialsToken getCredentials() {
AWSSecurityTokenService stsClient = AWSSecurityTokenServiceClientBuilder.standard()
.withCredentials(new AWSStaticCredentialsProvider(
new BasicAWSCredentials(OssConfiguration.accessKey, OssConfiguration.secretKey)))
.withRegion(OssConfiguration.region).build();
AssumeRoleRequest request = new AssumeRoleRequest()
.withRoleArn(OssConfiguration.roleArn)
.withRoleSessionName(OssConfiguration.roleSessionName)
.withDurationSeconds(Math.toIntExact(OssConfiguration.expire));
AssumeRoleResult result = stsClient.assumeRole(request);
Credentials credentials = result.getCredentials();
return new CredentialsToken(credentials.getAccessKeyId(), credentials.getSecretAccessKey(),
credentials.getSessionToken(), (credentials.getExpiration().getTime() - System.currentTimeMillis()) / 1000);
}
@Override
public URL getObjectUrl(String bucket, String objectKey) {
return client.generatePresignedUrl(bucket, objectKey,
new Date(System.currentTimeMillis() + OssConfiguration.expire * 1000), HttpMethod.GET);
}
@Override
public Boolean deleteObject(String bucket, String objectKey) {
if (!client.doesObjectExist(bucket, objectKey)) {
return true;
}
client.deleteObject(bucket, objectKey);
return true;
}
public InputStream getObject(String bucket, String objectKey) {
return client.getObject(bucket, objectKey).getObjectContent().getDelegateStream();
}
@Override
public void putObject(String bucket, String objectKey, InputStream input) {
if (client.doesObjectExist(bucket, objectKey)) {
throw new RuntimeException("The filename already exists.");
}
PutObjectResult objectResult = client.putObject(new PutObjectRequest(bucket, objectKey, input, new ObjectMetadata()));
log.info("Upload FlighttaskCreateFile: {}", objectResult.toString());
}
public void createClient() {
if (Objects.nonNull(this.client)) {
return;
}
this.client = AmazonS3ClientBuilder.standard()
.withCredentials(
new AWSStaticCredentialsProvider(
new BasicAWSCredentials(OssConfiguration.accessKey, OssConfiguration.secretKey)))
.withRegion(OssConfiguration.region)
.build();
}
/**
* Configuring cross-origin resource sharing
*/
@PostConstruct
private void configCORS() {
if (!OssConfiguration.enable || !OssTypeEnum.AWS.getType().equals(OssConfiguration.provider)) {
return;
}
List<CORSRule.AllowedMethods> allowedMethods = new ArrayList<>();
allowedMethods.add(CORSRule.AllowedMethods.GET);
allowedMethods.add(CORSRule.AllowedMethods.POST);
allowedMethods.add(CORSRule.AllowedMethods.DELETE);
CORSRule rule = new CORSRule()
.withId("CORSAccessRule")
.withAllowedOrigins(List.of("*"))
.withAllowedHeaders(List.of(AuthInterceptor.PARAM_TOKEN))
.withAllowedMethods(allowedMethods);
client.setBucketCrossOriginConfiguration(OssConfiguration.bucket,
new BucketCrossOriginConfiguration().withRules(rule));
}
}

140
dk-modules/sample/src/main/java/org/dromara/sample/component/oss/service/impl/MinIOServiceImpl.java

@ -1,140 +0,0 @@
package com.dji.sample.component.oss.service.impl;
import com.amazonaws.auth.AWSCredentialsProvider;
import com.amazonaws.auth.AWSStaticCredentialsProvider;
import com.amazonaws.auth.BasicAWSCredentials;
import com.amazonaws.auth.BasicSessionCredentials;
import com.amazonaws.client.builder.AwsClientBuilder;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.S3Object;
import com.amazonaws.services.securitytoken.AWSSecurityTokenService;
import com.amazonaws.services.securitytoken.AWSSecurityTokenServiceClientBuilder;
import com.amazonaws.services.securitytoken.model.AssumeRoleRequest;
import com.amazonaws.services.securitytoken.model.AssumeRoleResult;
import com.amazonaws.services.securitytoken.model.Credentials;
import com.dji.sample.component.oss.model.OssConfiguration;
import com.dji.sample.component.oss.service.IOssService;
import com.dji.sdk.cloudapi.storage.CredentialsToken;
import com.dji.sdk.cloudapi.storage.OssTypeEnum;
import io.minio.*;
import io.minio.credentials.AssumeRoleProvider;
import io.minio.errors.*;
import io.minio.http.Method;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.util.Objects;
import static com.dji.sample.component.oss.model.OssConfiguration.*;
/**
* @author sean
* @version 0.3
* @date 2021/12/23
*/
@Service
@Slf4j
public class MinIOServiceImpl implements IOssService {
private MinioClient client;
@Override
public OssTypeEnum getOssType() {
return OssTypeEnum.MINIO;
}
@Override
public CredentialsToken getCredentials() {
try {
AwsClientBuilder.EndpointConfiguration endpointConfiguration = new AwsClientBuilder.EndpointConfiguration(endpoint, region);
BasicAWSCredentials basicAWSCredentials = new BasicAWSCredentials(accessKey, secretKey);
AWSCredentialsProvider credentialsProvider = new AWSStaticCredentialsProvider(basicAWSCredentials);
AWSSecurityTokenService stsClient = AWSSecurityTokenServiceClientBuilder.standard()
.withEndpointConfiguration(endpointConfiguration)
.withCredentials(credentialsProvider).build();
Credentials credentials = stsClient.getSessionToken().getCredentials();
return new CredentialsToken(credentials.getAccessKeyId(), credentials.getSecretAccessKey(), credentials.getSessionToken(), OssConfiguration.expire);
} catch (Exception e) {
log.debug("Failed to obtain sts.");
e.printStackTrace();
}
return null;
}
@Override
public URL getObjectUrl(String bucket, String objectKey) {
try {
return new URL(
client.getPresignedObjectUrl(
GetPresignedObjectUrlArgs.builder()
.method(Method.GET)
.bucket(bucket)
.object(objectKey)
.expiry(Math.toIntExact(OssConfiguration.expire))
.build()));
} catch (ErrorResponseException | InsufficientDataException | InternalException |
InvalidKeyException | InvalidResponseException | IOException |
NoSuchAlgorithmException | XmlParserException | ServerException e) {
throw new RuntimeException("The file does not exist on the OssConfiguration.");
}
}
@Override
public Boolean deleteObject(String bucket, String objectKey) {
try {
client.removeObject(RemoveObjectArgs.builder().bucket(bucket).object(objectKey).build());
} catch (MinioException | NoSuchAlgorithmException | IOException | InvalidKeyException e) {
log.error("Failed to delete file.");
e.printStackTrace();
return false;
}
return true;
}
@Override
public InputStream getObject(String bucket, String objectKey) {
try {
GetObjectResponse object = client.getObject(GetObjectArgs.builder().bucket(bucket).object(objectKey).build());
return new ByteArrayInputStream(object.readAllBytes());
} catch (ErrorResponseException | InsufficientDataException | InternalException | InvalidKeyException | InvalidResponseException | IOException | NoSuchAlgorithmException | ServerException | XmlParserException e) {
e.printStackTrace();
}
return InputStream.nullInputStream();
}
@Override
public void putObject(String bucket, String objectKey, InputStream input) {
try {
client.statObject(StatObjectArgs.builder().bucket(bucket).object(objectKey).build());
throw new RuntimeException("The filename already exists.");
} catch (MinioException | InvalidKeyException | IOException | NoSuchAlgorithmException e) {
log.info("The file does not exist, start uploading.");
try {
ObjectWriteResponse response = client.putObject(
PutObjectArgs.builder().bucket(bucket).object(objectKey).stream(input, input.available(), 0).build());
log.info("Upload FlighttaskCreateFile: {}", response.etag());
} catch (MinioException | IOException | InvalidKeyException | NoSuchAlgorithmException ex) {
log.error("Failed to upload FlighttaskCreateFile {}.", objectKey);
ex.printStackTrace();
}
}
}
public void createClient() {
if (Objects.nonNull(this.client)) {
return;
}
this.client = MinioClient.builder()
.endpoint(OssConfiguration.endpoint)
.credentials(accessKey, secretKey)
.region(region)
.build();
}
}

31
dk-modules/sample/src/main/java/org/dromara/sample/component/oss/service/impl/OssAspectHandler.java

@ -1,31 +0,0 @@
package com.dji.sample.component.oss.service.impl;
import com.dji.sample.component.oss.model.OssConfiguration;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
/**
* @author sean
* @version 1.1
* @date 2022/6/20
*/
@Component
@Aspect
public class OssAspectHandler {
@Autowired
private OssServiceContext ossServiceContext;
@Before("execution(public * com.dji.sample.component.oss.service.impl.OssServiceContext.*(..))")
public void before() {
if (!OssConfiguration.enable) {
throw new IllegalArgumentException("请启用OSS配置。");
}
if (this.ossServiceContext.getOssService() == null) {
throw new IllegalArgumentException("请检查OSS配置配置。");
}
this.ossServiceContext.createClient();
}
}

68
dk-modules/sample/src/main/java/org/dromara/sample/component/oss/service/impl/OssServiceContext.java

@ -1,68 +0,0 @@
package com.dji.sample.component.oss.service.impl;
import com.dji.sample.component.oss.model.OssConfiguration;
import com.dji.sample.component.oss.service.IOssService;
import com.dji.sdk.cloudapi.storage.CredentialsToken;
import com.dji.sdk.cloudapi.storage.OssTypeEnum;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import java.io.InputStream;
import java.net.URL;
import java.util.Arrays;
import java.util.List;
/**
* @author sean
* @version 1.0
* @date 2022/5/30
*/
@Service
public class OssServiceContext {
private IOssService ossService;
@Autowired
public OssServiceContext(List<IOssService> ossServices, OssConfiguration configuration) {
if (!OssConfiguration.enable) {
return;
}
this.ossService = ossServices.stream()
.filter(ossService -> ossService.getOssType() == OssConfiguration.provider)
.findFirst()
.orElseThrow(() -> new IllegalArgumentException("Oss提供程序非法。可选: " +
Arrays.toString(Arrays.stream(OssTypeEnum.values()).map(OssTypeEnum::getType).toArray())));
}
IOssService getOssService() {
return this.ossService;
}
public CredentialsToken getCredentials() {
return this.ossService.getCredentials();
}
public URL getObjectUrl(String bucket, String objectKey) {
if (!StringUtils.hasText(bucket) || !StringUtils.hasText(objectKey)) {
throw new IllegalArgumentException();
}
return this.ossService.getObjectUrl(bucket, objectKey);
}
public Boolean deleteObject(String bucket, String objectKey) {
return this.ossService.deleteObject(bucket, objectKey);
}
public InputStream getObject(String bucket, String objectKey) {
return this.ossService.getObject(bucket, objectKey);
}
public void putObject(String bucket, String objectKey, InputStream stream) {
this.ossService.putObject(bucket, objectKey, stream);
}
void createClient() {
this.ossService.createClient();
}
}

63
dk-modules/sample/src/main/java/org/dromara/sample/component/redis/RedisConfiguration.java

@ -1,63 +0,0 @@
package com.dji.sample.component.redis;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
import com.fasterxml.jackson.databind.MapperFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.PropertyNamingStrategy;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.repository.configuration.EnableRedisRepositories;
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
/**
* @author sean
* @version 1.0
* @date 2022/4/19
*/
@Configuration
@EnableRedisRepositories
public class RedisConfiguration {
@Bean
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(factory);
ObjectMapper objectMapper = new ObjectMapper();
JavaTimeModule timeModule = new JavaTimeModule();
timeModule.addDeserializer(LocalDateTime.class,
new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
timeModule.addSerializer(LocalDateTime.class,
new LocalDateTimeSerializer(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
objectMapper.disable(MapperFeature.IGNORE_DUPLICATE_MODULE_REGISTRATIONS);
objectMapper.registerModules(timeModule);
objectMapper.activateDefaultTyping(objectMapper.getPolymorphicTypeValidator(),
ObjectMapper.DefaultTyping.NON_FINAL, JsonTypeInfo.As.PROPERTY);
objectMapper.setPropertyNamingStrategy(PropertyNamingStrategy.SNAKE_CASE);
objectMapper.setSerializationInclusion(JsonInclude.Include.NON_EMPTY);
objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
StringRedisSerializer serializer = new StringRedisSerializer();
redisTemplate.setKeySerializer(serializer);
redisTemplate.setHashKeySerializer(serializer);
GenericJackson2JsonRedisSerializer jsonRedisSerializer = new GenericJackson2JsonRedisSerializer(objectMapper);
redisTemplate.setValueSerializer(jsonRedisSerializer);
redisTemplate.setHashValueSerializer(jsonRedisSerializer);
redisTemplate.afterPropertiesSet();
return redisTemplate;
}
}

70
dk-modules/sample/src/main/java/org/dromara/sample/component/websocket/config/AuthPrincipalHandler.java

@ -1,70 +0,0 @@
package com.dji.sample.component.websocket.config;
import com.dji.sample.common.model.CustomClaim;
import com.dji.sample.common.util.JwtUtil;
import com.dji.sample.component.AuthInterceptor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.server.ServerHttpRequest;
import org.springframework.http.server.ServletServerHttpRequest;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;
import org.springframework.web.socket.WebSocketHandler;
import org.springframework.web.socket.server.support.DefaultHandshakeHandler;
import javax.servlet.http.HttpServletRequest;
import java.security.Principal;
import java.util.Map;
import java.util.Optional;
/**
* @author sean.zhou
* @date 2021/11/16
* @version 0.1
*/
@Slf4j
@Component
public class AuthPrincipalHandler extends DefaultHandshakeHandler {
@Override
protected boolean isValidOrigin(ServerHttpRequest request) {
if (request instanceof ServletServerHttpRequest) {
HttpServletRequest servletRequest = ((ServletServerHttpRequest) request).getServletRequest();
String token = servletRequest.getParameter(AuthInterceptor.PARAM_TOKEN);
if (!StringUtils.hasText(token)) {
return false;
}
log.debug("token:" + token);
Optional<CustomClaim> customClaim = JwtUtil.parseToken(token);
if (customClaim.isEmpty()) {
return false;
}
servletRequest.setAttribute(AuthInterceptor.TOKEN_CLAIM, customClaim.get());
return true;
}
return false;
}
/**
* The principal's name: {workspaceId}/{userType}/{userId}
* @param request
* @param wsHandler
* @param attributes
* @return
*/
@Override
protected Principal determineUser(ServerHttpRequest request, WebSocketHandler wsHandler, Map<String, Object> attributes) {
if (request instanceof ServletServerHttpRequest) {
// get the custom claim
CustomClaim claim = (CustomClaim) ((ServletServerHttpRequest) request).getServletRequest()
.getAttribute(AuthInterceptor.TOKEN_CLAIM);
return () -> claim.getWorkspaceId() + "/" + claim.getUserType() + "/" + claim.getId();
}
return () -> null;
}
}

27
dk-modules/sample/src/main/java/org/dromara/sample/component/websocket/config/MyWebSocketFactory.java

@ -1,27 +0,0 @@
package com.dji.sample.component.websocket.config;
import com.dji.sample.component.websocket.service.IWebSocketManageService;
import com.dji.sdk.websocket.WebSocketDefaultFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Primary;
import org.springframework.stereotype.Component;
import org.springframework.web.socket.WebSocketHandler;
/**
*
* @author sean.zhou
* @date 2021/11/16
* @version 0.1
*/
@Component
@Primary
public class MyWebSocketFactory extends WebSocketDefaultFactory {
@Autowired
private IWebSocketManageService webSocketManageService;
@Override
public WebSocketHandler decorate(WebSocketHandler handler) {
return new MyWebSocketHandler(handler, webSocketManageService);
}
}

58
dk-modules/sample/src/main/java/org/dromara/sample/component/websocket/config/MyWebSocketHandler.java

@ -1,58 +0,0 @@
package com.dji.sample.component.websocket.config;
import com.dji.sample.component.websocket.service.IWebSocketManageService;
import com.dji.sdk.websocket.WebSocketDefaultHandler;
import lombok.extern.slf4j.Slf4j;
import org.springframework.util.StringUtils;
import org.springframework.web.socket.CloseStatus;
import org.springframework.web.socket.WebSocketHandler;
import org.springframework.web.socket.WebSocketMessage;
import org.springframework.web.socket.WebSocketSession;
import java.security.Principal;
/**
*
* @author sean.zhou
* @date 2021/11/16
* @version 0.1
*/
@Slf4j
public class MyWebSocketHandler extends WebSocketDefaultHandler {
private IWebSocketManageService webSocketManageService;
MyWebSocketHandler(WebSocketHandler delegate, IWebSocketManageService webSocketManageService) {
super(delegate);
this.webSocketManageService = webSocketManageService;
}
@Override
public void afterConnectionEstablished(WebSocketSession session) throws Exception {
Principal principal = session.getPrincipal();
if (StringUtils.hasText(principal.getName())) {
webSocketManageService.put(principal.getName(), new MyConcurrentWebSocketSession(session));
log.debug("{} is connected. ID: {}. WebSocketSession[current count: {}]",
principal.getName(), session.getId(), webSocketManageService.getConnectedCount());
return;
}
session.close();
}
@Override
public void afterConnectionClosed(WebSocketSession session, CloseStatus closeStatus) throws Exception {
Principal principal = session.getPrincipal();
if (StringUtils.hasText(principal.getName())) {
webSocketManageService.remove(principal.getName(), session.getId());
log.debug("{} is disconnected. ID: {}. WebSocketSession[current count: {}]",
principal.getName(), session.getId(), webSocketManageService.getConnectedCount());
}
}
@Override
public void handleMessage(WebSocketSession session, WebSocketMessage<?> message) throws Exception {
log.debug("received message: {}", message.getPayload());
}
}

93
dk-modules/sample/src/main/java/org/dromara/sample/component/websocket/model/BizCodeEnum.java

@ -1,93 +0,0 @@
package com.dji.sample.component.websocket.model;
/**
* @author sean
* @version 0.1
* @date 2021/11/26
*/
public enum BizCodeEnum {
DEVICE_ONLINE("device_online"),
DEVICE_OFFLINE("device_offline"),
DEVICE_UPDATE_TOPO("device_update_topo"),
DEVICE_OSD("device_osd"),
RC_OSD("gateway_osd"),
DOCK_OSD("dock_osd"),
MAP_ELEMENT_CREATE("map_element_create"),
MAP_ELEMENT_UPDATE("map_element_update"),
MAP_ELEMENT_DELETE("map_element_delete"),
MAP_GROUP_REFRESH("map_group_refresh"),
FLIGHT_TASK_PROGRESS("flighttask_progress"),
DEVICE_HMS("device_hms"),
DEVICE_REBOOT("device_reboot"),
DRONE_OPEN("drone_open"),
DRONE_CLOSE("drone_close"),
DEVICE_CHECK("device_check"),
DRONE_FORMAT("drone_format"),
DEVICE_FORMAT("device_format"),
COVER_OPEN("cover_open"),
COVER_CLOSE("cover_close"),
PUTTER_OPEN("putter_open"),
PUTTER_CLOSE("putter_close"),
CHARGE_OPEN("charge_open"),
CHARGE_CLOSE("charge_close"),
FILE_UPLOAD_CALLBACK("file_upload_callback"),
FILE_UPLOAD_PROGRESS("fileupload_progress"),
OTA_PROGRESS("ota_progress"),
HIGHEST_PRIORITY_UPLOAD_FLIGHT_TASK_MEDIA("highest_priority_upload_flighttask_media"),
CONTROL_SOURCE_CHANGE("control_source_change"),
FLY_TO_POINT_PROGRESS("fly_to_point_progress"),
TAKE_OFF_TO_POINT_PROGRESS("takeoff_to_point_progress"),
DRC_STATUS_NOTIFY("drc_status_notify"),
JOYSTICK_INVALID_NOTIFY("joystick_invalid_notify"),
FLIGHT_AREAS_SYNC_PROGRESS("flight_areas_sync_progress"),
FLIGHT_AREAS_DRONE_LOCATION("flight_areas_drone_location"),
FLIGHT_AREAS_UPDATE("flight_areas_update"),
;
private String code;
BizCodeEnum(String code) {
this.code = code;
}
public String getCode() {
return code;
}
}

23
dk-modules/sample/src/main/java/org/dromara/sample/component/websocket/service/IWebSocketManageService.java

@ -1,23 +0,0 @@
package com.dji.sample.component.websocket.service;
import com.dji.sample.component.websocket.config.MyConcurrentWebSocketSession;
import java.util.Collection;
/**
* @author sean
* @version 1.0
* @date 2022/4/25
*/
public interface IWebSocketManageService {
void put(String key, MyConcurrentWebSocketSession val);
void remove(String key, String sessionId);
Collection<MyConcurrentWebSocketSession> getValueWithWorkspace(String workspaceId);
Collection<MyConcurrentWebSocketSession> getValueWithWorkspaceAndUserType(String workspaceId, Integer userType);
Long getConnectedCount();
}

32
dk-modules/sample/src/main/java/org/dromara/sample/component/websocket/service/IWebSocketMessageService.java

@ -1,32 +0,0 @@
package com.dji.sample.component.websocket.service;
import com.dji.sample.component.websocket.config.MyConcurrentWebSocketSession;
import com.dji.sdk.websocket.WebSocketMessageResponse;
import java.util.Collection;
/**
* @author sean.zhou
* @date 2021/11/24
* @version 0.1
*/
public interface IWebSocketMessageService {
/**
* Send a message to the specific connection.
* @param session A WebSocket connection object
* @param message message
*/
void sendMessage(MyConcurrentWebSocketSession session, WebSocketMessageResponse message);
/**
* Send the same message to specific connection.
* @param sessions A collection of WebSocket connection objects.
* @param message message
*/
void sendBatch(Collection<MyConcurrentWebSocketSession> sessions, WebSocketMessageResponse message);
void sendBatch(String workspaceId, Integer userType, String bizCode, Object data);
void sendBatch(String workspaceId, String bizCode, Object data);
}

86
dk-modules/sample/src/main/java/org/dromara/sample/component/websocket/service/impl/WebSocketManageServiceImpl.java

@ -1,86 +0,0 @@
package com.dji.sample.component.websocket.service.impl;
import com.dji.sample.component.redis.RedisConst;
import com.dji.sample.component.redis.RedisOpsUtils;
import com.dji.sample.component.websocket.config.MyConcurrentWebSocketSession;
import com.dji.sample.component.websocket.service.IWebSocketManageService;
import com.dji.sample.manage.model.enums.UserTypeEnum;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import java.util.Collection;
import java.util.Collections;
import java.util.Objects;
import java.util.concurrent.ConcurrentHashMap;
import java.util.stream.Collectors;
/**
* @author sean
* @version 1.0
* @date 2022/4/25
*/
@Slf4j
@Service
public class WebSocketManageServiceImpl implements IWebSocketManageService {
private static final ConcurrentHashMap<String, MyConcurrentWebSocketSession> SESSIONS = new ConcurrentHashMap<>(16);
@Override
public void put(String key, MyConcurrentWebSocketSession val) {
String[] name = key.split("/");
if (name.length != 3) {
log.debug("The key is out of format. [{workspaceId}/{userType}/{userId}]");
return;
}
String sessionId = val.getId();
String workspaceKey = RedisConst.WEBSOCKET_PREFIX + name[0];
String userTypeKey = RedisConst.WEBSOCKET_PREFIX + UserTypeEnum.find(Integer.parseInt(name[1])).getDesc();
RedisOpsUtils.hashSet(workspaceKey, sessionId, name[2]);
RedisOpsUtils.hashSet(userTypeKey, sessionId, name[2]);
SESSIONS.put(sessionId, val);
RedisOpsUtils.expireKey(workspaceKey, RedisConst.WEBSOCKET_ALIVE_SECOND);
RedisOpsUtils.expireKey(userTypeKey, RedisConst.WEBSOCKET_ALIVE_SECOND);
}
@Override
public void remove(String key, String sessionId) {
String[] name = key.split("/");
if (name.length != 3) {
log.debug("The key is out of format. [{workspaceId}/{userType}/{userId}]");
return;
}
RedisOpsUtils.hashDel(RedisConst.WEBSOCKET_PREFIX + name[0], new String[] {sessionId});
RedisOpsUtils.hashDel(RedisConst.WEBSOCKET_PREFIX + UserTypeEnum.find(Integer.parseInt(name[1])).getDesc(), new String[] {sessionId});
SESSIONS.remove(sessionId);
}
@Override
public Collection<MyConcurrentWebSocketSession> getValueWithWorkspace(String workspaceId) {
if (!StringUtils.hasText(workspaceId)) {
return Collections.emptySet();
}
String key = RedisConst.WEBSOCKET_PREFIX + workspaceId;
return RedisOpsUtils.hashKeys(key)
.stream()
.map(SESSIONS::get)
.filter(Objects::nonNull)
.collect(Collectors.toSet());
}
@Override
public Collection<MyConcurrentWebSocketSession> getValueWithWorkspaceAndUserType(String workspaceId, Integer userType) {
String key = RedisConst.WEBSOCKET_PREFIX + UserTypeEnum.find(userType).getDesc();
return RedisOpsUtils.hashKeys(key)
.stream()
.map(SESSIONS::get)
.filter(getValueWithWorkspace(workspaceId)::contains)
.collect(Collectors.toSet());
}
@Override
public Long getConnectedCount() {
return SESSIONS.mappingCount();
}
}

99
dk-modules/sample/src/main/java/org/dromara/sample/component/websocket/service/impl/WebSocketMessageServiceImpl.java

@ -1,99 +0,0 @@
package com.dji.sample.component.websocket.service.impl;
import com.dji.sample.component.websocket.config.MyConcurrentWebSocketSession;
import com.dji.sample.component.websocket.service.IWebSocketManageService;
import com.dji.sample.component.websocket.service.IWebSocketMessageService;
import com.dji.sdk.websocket.WebSocketMessageResponse;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import org.springframework.web.socket.TextMessage;
import java.io.IOException;
import java.util.Collection;
import java.util.Objects;
/**
* @author sean.zhou
* @version 0.1
* @date 2021/11/24
*/
@Service
@Slf4j
public class WebSocketMessageServiceImpl implements IWebSocketMessageService {
@Autowired
private ObjectMapper mapper;
@Autowired
private IWebSocketManageService webSocketManageService;
@Override
public void sendMessage(MyConcurrentWebSocketSession session, WebSocketMessageResponse message) {
if (session == null) {
return;
}
try {
if (!session.isOpen()) {
session.close();
log.debug("This session is closed.");
return;
}
session.sendMessage(new TextMessage(mapper.writeValueAsBytes(message)));
} catch (IOException e) {
log.info("Failed to publish the message. {}", message.toString());
e.printStackTrace();
}
}
@Override
public void sendBatch(Collection<MyConcurrentWebSocketSession> sessions, WebSocketMessageResponse message) {
if (sessions.isEmpty()) {
return;
}
try {
TextMessage data = new TextMessage(mapper.writeValueAsBytes(message));
for (MyConcurrentWebSocketSession session : sessions) {
if (!session.isOpen()) {
session.close();
log.debug("This session is closed.");
return;
}
session.sendMessage(data);
}
} catch (IOException e) {
log.info("Failed to publish the message. {}", message.toString());
e.printStackTrace();
}
}
@Override
public void sendBatch(String workspaceId, Integer userType, String bizCode, Object data) {
if (!StringUtils.hasText(workspaceId)) {
throw new RuntimeException("工作区ID不存在。");
}
Collection<MyConcurrentWebSocketSession> sessions = Objects.isNull(userType) ?
webSocketManageService.getValueWithWorkspace(workspaceId) :
webSocketManageService.getValueWithWorkspaceAndUserType(workspaceId, userType);
this.sendBatch(sessions, new WebSocketMessageResponse()
.setData(Objects.requireNonNullElse(data, ""))
.setTimestamp(System.currentTimeMillis())
.setBizCode(bizCode));
}
@Override
public void sendBatch(String workspaceId, String bizCode, Object data) {
this.sendBatch(workspaceId, null, bizCode, data);
}
}

2
dk-modules/sample/src/main/java/org/dromara/sample/configuration/GlobalThreadPoolConfiguration.java

@ -1,4 +1,4 @@
package com.dji.sample.configuration;
package org.dromara.sample.configuration;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;

2
dk-modules/sample/src/main/java/org/dromara/sample/configuration/SpringBeanConfiguration.java

@ -1,4 +1,4 @@
package com.dji.sample.configuration;
package org.dromara.sample.configuration;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.core.JsonGenerator;

40
dk-modules/sample/src/main/java/org/dromara/sample/configuration/mvc/GlobalMVCConfigurer.java

@ -1,40 +0,0 @@
package com.dji.sample.configuration.mvc;
import com.dji.sample.component.AuthInterceptor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import java.util.ArrayList;
import java.util.List;
@Configuration
public class GlobalMVCConfigurer implements WebMvcConfigurer {
@Autowired
private AuthInterceptor authInterceptor;
private static List<String> excludePaths = new ArrayList<>();
@Value("${url.manage.prefix}")
private String managePrefix;
@Value("${url.manage.version}")
private String manageVersion;
@Override
public void addInterceptors(InterceptorRegistry registry) {
// Exclude the login interface.
excludePaths.add("/" + managePrefix + manageVersion + "/login");
excludePaths.add("/" + managePrefix + manageVersion + "/token/refresh");
excludePaths.add("/swagger-ui.html");
excludePaths.add("/swagger-ui/**");
excludePaths.add("/v3/**");
excludePaths.add("/ui/**");
// Intercept for all request interfaces.
registry.addInterceptor(authInterceptor).addPathPatterns("/**").excludePathPatterns(excludePaths);
}
}

23
dk-modules/sample/src/main/java/org/dromara/sample/control/controller/DockController.java

@ -1,17 +1,15 @@
package com.dji.sample.control.controller;
package org.dromara.sample.control.controller;
import com.dji.sample.control.model.enums.DroneAuthorityEnum;
import com.dji.sample.control.model.enums.RemoteDebugMethodEnum;
import com.dji.sample.control.model.param.*;
import com.dji.sample.control.service.IControlService;
import com.dji.sdk.common.HttpResultResponse;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import jakarta.validation.Valid;
import lombok.extern.slf4j.Slf4j;
import org.dromara.common.sdk.common.HttpResultResponse;
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.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
/**
* @author sean
@ -26,6 +24,13 @@ public class DockController {
@Autowired
private IControlService controlService;
/**
* 远程控制
* @param sn
* @param serviceIdentifier
* @param param
* @return
*/
@PostMapping("/{sn}/jobs/{service_identifier}")
public HttpResultResponse createControlJob(@PathVariable String sn,
@PathVariable("service_identifier") String serviceIdentifier,

46
dk-modules/sample/src/main/java/org/dromara/sample/control/controller/DrcController.java

@ -1,20 +1,20 @@
package com.dji.sample.control.controller;
import com.dji.sample.common.model.CustomClaim;
import com.dji.sample.control.model.dto.JwtAclDTO;
import com.dji.sample.control.model.param.DrcConnectParam;
import com.dji.sample.control.model.param.DrcModeParam;
import com.dji.sample.control.service.IDrcService;
import com.dji.sdk.cloudapi.control.DrcModeMqttBroker;
import com.dji.sdk.common.HttpResultResponse;
package org.dromara.sample.control.controller;
import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.sample.control.model.dto.JwtAclDTO;
import org.dromara.sample.control.model.param.DrcConnectParam;
import org.dromara.sample.control.model.param.DrcModeParam;
import org.dromara.sample.control.service.IDrcService;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.validation.Valid;
import lombok.extern.slf4j.Slf4j;
import org.dromara.common.sdk.cloudapi.control.DrcModeMqttBroker;
import org.dromara.common.sdk.common.HttpResultResponse;
import org.dromara.system.api.model.LoginUser;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import javax.validation.Valid;
import static com.dji.sample.component.AuthInterceptor.TOKEN_CLAIM;
/**
* @author sean
@ -29,24 +29,26 @@ public class DrcController {
@Autowired
private IDrcService drcService;
@PostMapping("/workspaces/{workspace_id}/drc/connect")
public HttpResultResponse drcConnect(@PathVariable("workspace_id") String workspaceId, HttpServletRequest request, @Valid @RequestBody DrcConnectParam param) {
CustomClaim claims = (CustomClaim) request.getAttribute(TOKEN_CLAIM);
@PostMapping("/workspaces/drc/connect")
public HttpResultResponse drcConnect(HttpServletRequest request, @Valid @RequestBody DrcConnectParam param) {
LoginUser loginUser = LoginHelper.getLoginUser();
DrcModeMqttBroker brokerDTO = drcService.userDrcAuth(workspaceId, claims.getId(), claims.getUsername(), param);
DrcModeMqttBroker brokerDTO = drcService.userDrcAuth(loginUser.getTenantId(), loginUser.getLoginId(), loginUser.getUsername(), param);
return HttpResultResponse.success(brokerDTO);
}
@PostMapping("/workspaces/{workspace_id}/drc/enter")
public HttpResultResponse drcEnter(@PathVariable("workspace_id") String workspaceId, @Valid @RequestBody DrcModeParam param) {
JwtAclDTO acl = drcService.deviceDrcEnter(workspaceId, param);
@PostMapping("/workspaces/drc/enter")
public HttpResultResponse drcEnter(@Valid @RequestBody DrcModeParam param) {
LoginUser loginUser = LoginHelper.getLoginUser();
JwtAclDTO acl = drcService.deviceDrcEnter(loginUser.getTenantId(), param);
return HttpResultResponse.success(acl);
}
@PostMapping("/workspaces/{workspace_id}/drc/exit")
public HttpResultResponse drcExit(@PathVariable("workspace_id") String workspaceId, @Valid @RequestBody DrcModeParam param) {
drcService.deviceDrcExit(workspaceId, param);
@PostMapping("/workspaces/drc/exit")
public HttpResultResponse drcExit( @Valid @RequestBody DrcModeParam param) {
LoginUser loginUser = LoginHelper.getLoginUser();
drcService.deviceDrcExit(loginUser.getTenantId(), param);
return HttpResultResponse.success();
}

6
dk-modules/sample/src/main/java/org/dromara/sample/control/model/dto/AirConditionerMode.java

@ -1,11 +1,11 @@
package com.dji.sample.control.model.dto;
package org.dromara.sample.control.model.dto;
import com.dji.sample.control.service.impl.RemoteDebugHandler;
import com.dji.sdk.cloudapi.device.AirConditionerStateEnum;
import org.dromara.sample.control.service.impl.RemoteDebugHandler;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import org.dromara.common.sdk.cloudapi.device.AirConditionerStateEnum;
/**
* @author sean

6
dk-modules/sample/src/main/java/org/dromara/sample/control/model/dto/AlarmState.java

@ -1,11 +1,11 @@
package com.dji.sample.control.model.dto;
package org.dromara.sample.control.model.dto;
import com.dji.sample.control.service.impl.RemoteDebugHandler;
import com.dji.sdk.cloudapi.device.SwitchActionEnum;
import org.dromara.sample.control.service.impl.RemoteDebugHandler;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import org.dromara.common.sdk.cloudapi.device.SwitchActionEnum;
/**
* @author sean

6
dk-modules/sample/src/main/java/org/dromara/sample/control/model/dto/BatteryStoreMode.java

@ -1,11 +1,11 @@
package com.dji.sample.control.model.dto;
package org.dromara.sample.control.model.dto;
import com.dji.sample.control.service.impl.RemoteDebugHandler;
import com.dji.sdk.cloudapi.device.BatteryStoreModeEnum;
import org.dromara.sample.control.service.impl.RemoteDebugHandler;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import org.dromara.common.sdk.cloudapi.device.BatteryStoreModeEnum;
/**
* @author sean

2
dk-modules/sample/src/main/java/org/dromara/sample/control/model/dto/JwtAclDTO.java

@ -1,4 +1,4 @@
package com.dji.sample.control.model.dto;
package org.dromara.sample.control.model.dto;
import lombok.AllArgsConstructor;
import lombok.Builder;

6
dk-modules/sample/src/main/java/org/dromara/sample/control/model/dto/LinkWorkMode.java

@ -1,13 +1,13 @@
package com.dji.sample.control.model.dto;
package org.dromara.sample.control.model.dto;
import com.dji.sample.control.service.impl.RemoteDebugHandler;
import com.dji.sdk.cloudapi.device.LinkWorkModeEnum;
import org.dromara.sample.control.service.impl.RemoteDebugHandler;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonValue;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import org.dromara.common.sdk.cloudapi.device.LinkWorkModeEnum;
import java.util.Map;

10
dk-modules/sample/src/main/java/org/dromara/sample/control/model/dto/RemoteDebugOpenState.java

@ -1,11 +1,11 @@
package com.dji.sample.control.model.dto;
package org.dromara.sample.control.model.dto;
import com.dji.sample.common.util.SpringBeanUtilsTest;
import com.dji.sample.control.service.impl.RemoteDebugHandler;
import com.dji.sample.manage.service.IDeviceService;
import com.dji.sdk.cloudapi.device.DockModeCodeEnum;
import org.dromara.sample.control.service.impl.RemoteDebugHandler;
import org.dromara.sample.manage.service.IDeviceService;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.dromara.common.sdk.cloudapi.device.DockModeCodeEnum;
import org.dromara.sample.common.util.SpringBeanUtilsTest;
/**
* @author sean

2
dk-modules/sample/src/main/java/org/dromara/sample/control/model/dto/ResultNotifyDTO.java

@ -1,4 +1,4 @@
package com.dji.sample.control.model.dto;
package org.dromara.sample.control.model.dto;
import lombok.AllArgsConstructor;
import lombok.Builder;

14
dk-modules/sample/src/main/java/org/dromara/sample/control/model/dto/ReturnHomeCancelState.java

@ -1,11 +1,11 @@
package com.dji.sample.control.model.dto;
package org.dromara.sample.control.model.dto;
import com.dji.sample.common.util.SpringBeanUtilsTest;
import com.dji.sample.control.service.impl.RemoteDebugHandler;
import com.dji.sample.manage.model.dto.DeviceDTO;
import com.dji.sample.manage.service.IDeviceRedisService;
import com.dji.sdk.cloudapi.device.DroneModeCodeEnum;
import com.dji.sdk.cloudapi.device.OsdDockDrone;
import org.dromara.sample.control.service.impl.RemoteDebugHandler;
import org.dromara.sample.manage.model.dto.DeviceDTO;
import org.dromara.sample.manage.service.IDeviceRedisService;
import org.dromara.common.sdk.cloudapi.device.DroneModeCodeEnum;
import org.dromara.common.sdk.cloudapi.device.OsdDockDrone;
import org.dromara.sample.common.util.SpringBeanUtilsTest;
/**
* @author sean

14
dk-modules/sample/src/main/java/org/dromara/sample/control/model/dto/ReturnHomeState.java

@ -1,11 +1,11 @@
package com.dji.sample.control.model.dto;
package org.dromara.sample.control.model.dto;
import com.dji.sample.common.util.SpringBeanUtilsTest;
import com.dji.sample.control.service.impl.RemoteDebugHandler;
import com.dji.sample.manage.model.dto.DeviceDTO;
import com.dji.sample.manage.service.IDeviceRedisService;
import com.dji.sdk.cloudapi.device.DroneModeCodeEnum;
import com.dji.sdk.cloudapi.device.OsdDockDrone;
import org.dromara.sample.control.service.impl.RemoteDebugHandler;
import org.dromara.sample.manage.model.dto.DeviceDTO;
import org.dromara.sample.manage.service.IDeviceRedisService;
import org.dromara.common.sdk.cloudapi.device.DroneModeCodeEnum;
import org.dromara.common.sdk.cloudapi.device.OsdDockDrone;
import org.dromara.sample.common.util.SpringBeanUtilsTest;
/**
* @author sean

2
dk-modules/sample/src/main/java/org/dromara/sample/control/model/enums/CameraModeEnum.java

@ -1,4 +1,4 @@
package com.dji.sample.control.model.enums;
package org.dromara.sample.control.model.enums;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonValue;

2
dk-modules/sample/src/main/java/org/dromara/sample/control/model/enums/DrcMethodEnum.java

@ -1,4 +1,4 @@
package com.dji.sample.control.model.enums;
package org.dromara.sample.control.model.enums;
import lombok.Getter;

2
dk-modules/sample/src/main/java/org/dromara/sample/control/model/enums/DroneAuthorityEnum.java

@ -1,4 +1,4 @@
package com.dji.sample.control.model.enums;
package org.dromara.sample.control.model.enums;
import com.fasterxml.jackson.annotation.JsonValue;

2
dk-modules/sample/src/main/java/org/dromara/sample/control/model/enums/DroneControlMethodEnum.java

@ -1,4 +1,4 @@
package com.dji.sample.control.model.enums;
package org.dromara.sample.control.model.enums;
import lombok.Getter;

2
dk-modules/sample/src/main/java/org/dromara/sample/control/model/enums/GimbalResetModeEnum.java

@ -1,4 +1,4 @@
package com.dji.sample.control.model.enums;
package org.dromara.sample.control.model.enums;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonValue;

2
dk-modules/sample/src/main/java/org/dromara/sample/control/model/enums/MqttAclAccessEnum.java

@ -1,4 +1,4 @@
package com.dji.sample.control.model.enums;
package org.dromara.sample.control.model.enums;
import lombok.Getter;

25
dk-modules/sample/src/main/java/org/dromara/sample/control/model/enums/PayloadCommandsEnum.java

@ -1,9 +1,8 @@
package com.dji.sample.control.model.enums;
package org.dromara.sample.control.model.enums;
import com.dji.sample.control.service.impl.*;
import com.dji.sdk.cloudapi.control.PayloadControlMethodEnum;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonValue;
import org.dromara.common.sdk.cloudapi.control.PayloadControlMethodEnum;
import java.util.Arrays;
@ -14,25 +13,25 @@ import java.util.Arrays;
*/
public enum PayloadCommandsEnum {
CAMERA_MODE_SWitCH(PayloadControlMethodEnum.CAMERA_MODE_SWITCH, CameraModeSwitchImpl.class),
CAMERA_MODE_SWitCH(PayloadControlMethodEnum.CAMERA_MODE_SWITCH, org.dromara.sample.control.service.impl.CameraModeSwitchImpl.class),
CAMERA_PHOTO_TAKE(PayloadControlMethodEnum.CAMERA_PHOTO_TAKE, CameraPhotoTakeImpl.class),
CAMERA_PHOTO_TAKE(PayloadControlMethodEnum.CAMERA_PHOTO_TAKE, org.dromara.sample.control.service.impl.CameraPhotoTakeImpl.class),
CAMERA_RECORDING_START(PayloadControlMethodEnum.CAMERA_RECORDING_START, CameraRecordingStartImpl.class),
CAMERA_RECORDING_START(PayloadControlMethodEnum.CAMERA_RECORDING_START, org.dromara.sample.control.service.impl.CameraRecordingStartImpl.class),
CAMERA_RECORDING_STOP(PayloadControlMethodEnum.CAMERA_RECORDING_STOP, CameraRecordingStopImpl.class),
CAMERA_RECORDING_STOP(PayloadControlMethodEnum.CAMERA_RECORDING_STOP, org.dromara.sample.control.service.impl.CameraRecordingStopImpl.class),
CAMERA_AIM(PayloadControlMethodEnum.CAMERA_AIM, CameraAimImpl.class),
CAMERA_AIM(PayloadControlMethodEnum.CAMERA_AIM, org.dromara.sample.control.service.impl.CameraAimImpl.class),
CAMERA_FOCAL_LENGTH_SET(PayloadControlMethodEnum.CAMERA_FOCAL_LENGTH_SET, CameraFocalLengthSetImpl.class),
CAMERA_FOCAL_LENGTH_SET(PayloadControlMethodEnum.CAMERA_FOCAL_LENGTH_SET, org.dromara.sample.control.service.impl.CameraFocalLengthSetImpl.class),
GIMBAL_RESET(PayloadControlMethodEnum.GIMBAL_RESET, GimbalResetImpl.class);
GIMBAL_RESET(PayloadControlMethodEnum.GIMBAL_RESET, org.dromara.sample.control.service.impl.GimbalResetImpl.class);
PayloadControlMethodEnum cmd;
Class<? extends PayloadCommandsHandler> clazz;
Class<? extends org.dromara.sample.control.service.impl.PayloadCommandsHandler> clazz;
PayloadCommandsEnum(PayloadControlMethodEnum cmd, Class<? extends PayloadCommandsHandler> clazz) {
PayloadCommandsEnum(PayloadControlMethodEnum cmd, Class<? extends org.dromara.sample.control.service.impl.PayloadCommandsHandler> clazz) {
this.cmd = cmd;
this.clazz = clazz;
}
@ -42,7 +41,7 @@ public enum PayloadCommandsEnum {
return cmd.getPayloadMethod().getMethod();
}
public Class<? extends PayloadCommandsHandler> getClazz() {
public Class<? extends org.dromara.sample.control.service.impl.PayloadCommandsHandler> getClazz() {
return clazz;
}

12
dk-modules/sample/src/main/java/org/dromara/sample/control/model/enums/RemoteDebugMethodEnum.java

@ -1,10 +1,10 @@
package com.dji.sample.control.model.enums;
package org.dromara.sample.control.model.enums;
import com.dji.sample.control.model.dto.*;
import com.dji.sample.control.service.impl.RemoteDebugHandler;
import com.dji.sdk.cloudapi.debug.DebugMethodEnum;
import org.dromara.sample.control.service.impl.RemoteDebugHandler;
import com.fasterxml.jackson.annotation.JsonCreator;
import lombok.Getter;
import org.dromara.common.sdk.cloudapi.debug.DebugMethodEnum;
import org.dromara.sample.control.model.dto.*;
import java.util.Arrays;
import java.util.Objects;
@ -54,7 +54,7 @@ public enum RemoteDebugMethodEnum {
BATTERY_MAINTENANCE_SWITCH(DebugMethodEnum.BATTERY_MAINTENANCE_SWITCH, false, AlarmState.class),
ALARM_STATE_SWITCH(DebugMethodEnum.ALARM_STATE_SWITCH, false, AlarmState.class),
BATTERY_STORE_MODE_SWITCH(DebugMethodEnum.BATTERY_STORE_MODE_SWITCH, false, BatteryStoreMode.class),
SDR_WORK_MODE_SWITCH(DebugMethodEnum.SDR_WORKMODE_SWITCH, false, LinkWorkMode.class),
@ -66,7 +66,7 @@ public enum RemoteDebugMethodEnum {
private String method;
private boolean progress;
private Class<? extends RemoteDebugHandler> clazz;
RemoteDebugMethodEnum(DebugMethodEnum debugMethodEnum, boolean progress, Class<? extends RemoteDebugHandler> clazz) {

2
dk-modules/sample/src/main/java/org/dromara/sample/control/model/param/DeviceDrcInfoParam.java

@ -1,4 +1,4 @@
package com.dji.sample.control.model.param;
package org.dromara.sample.control.model.param;
import lombok.Data;
import org.hibernate.validator.constraints.Range;

4
dk-modules/sample/src/main/java/org/dromara/sample/control/model/param/DrcConnectParam.java

@ -1,7 +1,7 @@
package com.dji.sample.control.model.param;
package org.dromara.sample.control.model.param;
import com.dji.sample.component.redis.RedisConst;
import lombok.Data;
import org.dromara.common.redis.config.RedisConst;
import org.hibernate.validator.constraints.Range;
/**

8
dk-modules/sample/src/main/java/org/dromara/sample/control/model/param/DrcModeParam.java

@ -1,14 +1,14 @@
package com.dji.sample.control.model.param;
package org.dromara.sample.control.model.param;
import com.dji.sample.component.redis.RedisConst;
import jakarta.validation.Valid;
import jakarta.validation.constraints.NotBlank;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.hibernate.validator.constraints.Range;
import javax.validation.Valid;
import javax.validation.constraints.NotBlank;
/**
* @author sean

13
dk-modules/sample/src/main/java/org/dromara/sample/control/model/param/DronePayloadParam.java

@ -1,13 +1,14 @@
package com.dji.sample.control.model.param;
package org.dromara.sample.control.model.param;
import com.dji.sdk.cloudapi.control.CameraTypeEnum;
import com.dji.sdk.cloudapi.control.GimbalResetModeEnum;
import com.dji.sdk.cloudapi.device.CameraModeEnum;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Pattern;
import lombok.Data;
import org.dromara.common.sdk.cloudapi.control.CameraTypeEnum;
import org.dromara.common.sdk.cloudapi.device.CameraModeEnum;
import org.dromara.sample.control.model.enums.GimbalResetModeEnum;
import org.hibernate.validator.constraints.Range;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Pattern;
/**
* @author sean

11
dk-modules/sample/src/main/java/org/dromara/sample/control/model/param/FlyToPointParam.java

@ -1,14 +1,15 @@
package com.dji.sample.control.model.param;
package org.dromara.sample.control.model.param;
import com.dji.sdk.cloudapi.control.Point;
import jakarta.validation.Valid;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Size;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.dromara.common.sdk.cloudapi.control.Point;
import org.hibernate.validator.constraints.Range;
import javax.validation.Valid;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import java.util.List;
/**

10
dk-modules/sample/src/main/java/org/dromara/sample/control/model/param/PayloadCommandsParam.java

@ -1,10 +1,10 @@
package com.dji.sample.control.model.param;
package org.dromara.sample.control.model.param;
import com.dji.sample.control.model.enums.PayloadCommandsEnum;
import lombok.Data;
import javax.validation.Valid;
import javax.validation.constraints.NotNull;
import jakarta.validation.Valid;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import org.dromara.sample.control.model.enums.PayloadCommandsEnum;
/**
* @author sean

4
dk-modules/sample/src/main/java/org/dromara/sample/control/model/param/RemoteDebugParam.java

@ -1,8 +1,8 @@
package com.dji.sample.control.model.param;
package org.dromara.sample.control.model.param;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import javax.validation.constraints.NotNull;
/**
* @author sean

19
dk-modules/sample/src/main/java/org/dromara/sample/control/model/param/TakeoffToPointParam.java

@ -1,17 +1,16 @@
package com.dji.sample.control.model.param;
package org.dromara.sample.control.model.param;
import com.dji.sdk.cloudapi.control.CommanderFlightModeEnum;
import com.dji.sdk.cloudapi.control.CommanderModeLostActionEnum;
import com.dji.sdk.cloudapi.device.ExitWaylineWhenRcLostEnum;
import com.dji.sdk.cloudapi.device.RcLostActionEnum;
import com.dji.sdk.cloudapi.wayline.RthModeEnum;
import jakarta.validation.constraints.Max;
import jakarta.validation.constraints.Min;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import org.dromara.common.sdk.cloudapi.control.CommanderFlightModeEnum;
import org.dromara.common.sdk.cloudapi.control.CommanderModeLostActionEnum;
import org.dromara.common.sdk.cloudapi.device.ExitWaylineWhenRcLostEnum;
import org.dromara.common.sdk.cloudapi.device.RcLostActionEnum;
import org.dromara.common.sdk.cloudapi.wayline.RthModeEnum;
import org.hibernate.validator.constraints.Range;
import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
/**
* @author sean
* @version 1.4

11
dk-modules/sample/src/main/java/org/dromara/sample/control/service/IControlService.java

@ -1,9 +1,10 @@
package com.dji.sample.control.service;
package org.dromara.sample.control.service;
import com.dji.sample.control.model.enums.DroneAuthorityEnum;
import com.dji.sample.control.model.enums.RemoteDebugMethodEnum;
import com.dji.sample.control.model.param.*;
import com.dji.sdk.common.HttpResultResponse;
import org.dromara.common.sdk.common.HttpResultResponse;
import org.dromara.sample.control.model.enums.DroneAuthorityEnum;
import org.dromara.sample.control.model.enums.RemoteDebugMethodEnum;
import org.dromara.sample.control.model.param.*;
/**
* @author sean

11
dk-modules/sample/src/main/java/org/dromara/sample/control/service/IDrcService.java

@ -1,9 +1,10 @@
package com.dji.sample.control.service;
package org.dromara.sample.control.service;
import com.dji.sample.control.model.dto.JwtAclDTO;
import com.dji.sample.control.model.param.DrcConnectParam;
import com.dji.sample.control.model.param.DrcModeParam;
import com.dji.sdk.cloudapi.control.DrcModeMqttBroker;
import org.dromara.common.sdk.cloudapi.control.DrcModeMqttBroker;
import org.dromara.sample.control.model.dto.JwtAclDTO;
import org.dromara.sample.control.model.param.DrcConnectParam;
import org.dromara.sample.control.model.param.DrcModeParam;
/**
* @author sean

7
dk-modules/sample/src/main/java/org/dromara/sample/control/service/impl/CameraAimImpl.java

@ -1,6 +1,7 @@
package com.dji.sample.control.service.impl;
package org.dromara.sample.control.service.impl;
import com.dji.sample.control.model.param.DronePayloadParam;
import org.dromara.sample.control.model.param.DronePayloadParam;
import java.util.Objects;
@ -9,7 +10,7 @@ import java.util.Objects;
* @version 1.4
* @date 2023/4/23
*/
public class CameraAimImpl extends PayloadCommandsHandler {
public class CameraAimImpl extends org.dromara.sample.control.service.impl.PayloadCommandsHandler {
public CameraAimImpl(DronePayloadParam param) {
super(param);

9
dk-modules/sample/src/main/java/org/dromara/sample/control/service/impl/CameraFocalLengthSetImpl.java

@ -1,8 +1,9 @@
package com.dji.sample.control.service.impl;
package org.dromara.sample.control.service.impl;
import com.dji.sample.control.model.param.DronePayloadParam;
import com.dji.sdk.cloudapi.control.CameraTypeEnum;
import com.dji.sdk.cloudapi.device.CameraStateEnum;
import org.dromara.common.sdk.cloudapi.control.CameraTypeEnum;
import org.dromara.common.sdk.cloudapi.device.CameraStateEnum;
import org.dromara.sample.control.model.param.DronePayloadParam;
import java.util.Objects;

6
dk-modules/sample/src/main/java/org/dromara/sample/control/service/impl/CameraModeSwitchImpl.java

@ -1,7 +1,7 @@
package com.dji.sample.control.service.impl;
package org.dromara.sample.control.service.impl;
import com.dji.sample.control.model.param.DronePayloadParam;
import com.dji.sdk.cloudapi.device.CameraStateEnum;
import org.dromara.common.sdk.cloudapi.device.CameraStateEnum;
import org.dromara.sample.control.model.param.DronePayloadParam;
import java.util.Objects;

7
dk-modules/sample/src/main/java/org/dromara/sample/control/service/impl/CameraPhotoTakeImpl.java

@ -1,7 +1,8 @@
package com.dji.sample.control.service.impl;
package org.dromara.sample.control.service.impl;
import com.dji.sample.control.model.param.DronePayloadParam;
import com.dji.sdk.cloudapi.device.CameraStateEnum;
import org.dromara.common.sdk.cloudapi.device.CameraStateEnum;
import org.dromara.sample.control.model.param.DronePayloadParam;
/**
* @author sean

9
dk-modules/sample/src/main/java/org/dromara/sample/control/service/impl/CameraRecordingStartImpl.java

@ -1,8 +1,9 @@
package com.dji.sample.control.service.impl;
package org.dromara.sample.control.service.impl;
import com.dji.sample.control.model.param.DronePayloadParam;
import com.dji.sdk.cloudapi.device.CameraModeEnum;
import com.dji.sdk.cloudapi.device.CameraStateEnum;
import org.dromara.common.sdk.cloudapi.device.CameraModeEnum;
import org.dromara.common.sdk.cloudapi.device.CameraStateEnum;
import org.dromara.sample.control.model.param.DronePayloadParam;
/**
* @author sean

7
dk-modules/sample/src/main/java/org/dromara/sample/control/service/impl/CameraRecordingStopImpl.java

@ -1,7 +1,8 @@
package com.dji.sample.control.service.impl;
package org.dromara.sample.control.service.impl;
import com.dji.sample.control.model.param.DronePayloadParam;
import com.dji.sdk.cloudapi.device.CameraStateEnum;
import org.dromara.common.sdk.cloudapi.device.CameraStateEnum;
import org.dromara.sample.control.model.param.DronePayloadParam;
import org.dromara.sample.control.service.impl.PayloadCommandsHandler;
/**
* @author sean

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

@ -1,31 +1,31 @@
package com.dji.sample.control.service.impl;
import com.dji.sample.component.websocket.service.IWebSocketMessageService;
import com.dji.sample.control.model.enums.DroneAuthorityEnum;
import com.dji.sample.control.model.enums.RemoteDebugMethodEnum;
import com.dji.sample.control.model.param.*;
import com.dji.sample.control.service.IControlService;
import com.dji.sample.manage.model.dto.DeviceDTO;
import com.dji.sample.manage.service.IDevicePayloadService;
import com.dji.sample.manage.service.IDeviceRedisService;
import com.dji.sample.manage.service.IDeviceService;
import com.dji.sdk.cloudapi.control.FlyToPointRequest;
import com.dji.sdk.cloudapi.control.PayloadAuthorityGrabRequest;
import com.dji.sdk.cloudapi.control.TakeoffToPointRequest;
import com.dji.sdk.cloudapi.control.api.AbstractControlService;
import com.dji.sdk.cloudapi.debug.DebugMethodEnum;
import com.dji.sdk.cloudapi.debug.api.AbstractDebugService;
import com.dji.sdk.cloudapi.device.DockModeCodeEnum;
import com.dji.sdk.cloudapi.device.DroneModeCodeEnum;
import com.dji.sdk.cloudapi.device.PayloadIndex;
import com.dji.sdk.cloudapi.wayline.api.AbstractWaylineService;
import com.dji.sdk.common.HttpResultResponse;
import com.dji.sdk.common.SDKManager;
import com.dji.sdk.exception.CloudSDKErrorEnum;
import com.dji.sdk.mqtt.services.ServicesReplyData;
import com.dji.sdk.mqtt.services.TopicServicesResponse;
package org.dromara.sample.control.service.impl;
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;
import org.dromara.common.sdk.cloudapi.device.DockModeCodeEnum;
import org.dromara.common.sdk.cloudapi.device.DroneModeCodeEnum;
import org.dromara.common.sdk.cloudapi.device.PayloadIndex;
import org.dromara.common.sdk.cloudapi.wayline.api.AbstractWaylineService;
import org.dromara.common.sdk.common.HttpResultResponse;
import org.dromara.common.sdk.common.SDKManager;
import org.dromara.common.sdk.exception.CloudSDKErrorEnum;
import org.dromara.common.sdk.mqtt.services.ServicesReplyData;
import org.dromara.common.sdk.mqtt.services.TopicServicesResponse;
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.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;
@ -43,8 +43,6 @@ import java.util.UUID;
@Slf4j
public class ControlServiceImpl implements IControlService {
@Autowired
private IWebSocketMessageService webSocketMessageService;
@Autowired
private IDeviceService deviceService;
@ -71,7 +69,7 @@ public class ControlServiceImpl implements IControlService {
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())
: new RemoteDebugHandler();
: new org.dromara.sample.control.service.impl.RemoteDebugHandler();
if (!handler.canPublish(sn)) {
throw new RuntimeException("The current state of the dock does not support this function.");
}

75
dk-modules/sample/src/main/java/org/dromara/sample/control/service/impl/DrcServiceImpl.java

@ -1,41 +1,41 @@
package com.dji.sample.control.service.impl;
import com.dji.sample.component.mqtt.config.MqttPropertyConfiguration;
import com.dji.sample.component.mqtt.model.EventsReceiver;
import com.dji.sample.component.mqtt.model.MapKeyConst;
import com.dji.sample.component.redis.RedisConst;
import com.dji.sample.component.redis.RedisOpsUtils;
import com.dji.sample.component.websocket.service.IWebSocketMessageService;
import com.dji.sample.control.model.dto.JwtAclDTO;
import com.dji.sample.control.model.enums.DroneAuthorityEnum;
import com.dji.sample.control.model.enums.MqttAclAccessEnum;
import com.dji.sample.control.model.param.DrcConnectParam;
import com.dji.sample.control.model.param.DrcModeParam;
import com.dji.sample.control.service.IControlService;
import com.dji.sample.control.service.IDrcService;
import com.dji.sample.manage.model.dto.DeviceDTO;
import com.dji.sample.manage.service.IDeviceRedisService;
import com.dji.sample.manage.service.IDeviceService;
import com.dji.sample.wayline.model.enums.WaylineJobStatusEnum;
import com.dji.sample.wayline.model.enums.WaylineTaskStatusEnum;
import com.dji.sample.wayline.model.param.UpdateJobParam;
import com.dji.sample.wayline.service.IFlightTaskService;
import com.dji.sample.wayline.service.IWaylineJobService;
import com.dji.sample.wayline.service.IWaylineRedisService;
import com.dji.sdk.cloudapi.control.DrcModeEnterRequest;
import com.dji.sdk.cloudapi.control.DrcModeMqttBroker;
import com.dji.sdk.cloudapi.control.api.AbstractControlService;
import com.dji.sdk.cloudapi.device.DockModeCodeEnum;
import com.dji.sdk.cloudapi.device.OsdDockDrone;
import com.dji.sdk.cloudapi.wayline.FlighttaskProgress;
import com.dji.sdk.common.HttpResultResponse;
import com.dji.sdk.common.SDKManager;
import com.dji.sdk.mqtt.TopicConst;
import com.dji.sdk.mqtt.services.ServicesReplyData;
import com.dji.sdk.mqtt.services.TopicServicesResponse;
package org.dromara.sample.control.service.impl;
import org.dromara.common.redis.config.RedisConst;
import org.dromara.common.redis.utils.RedisOpsUtils;
import org.dromara.sample.manage.model.dto.DeviceDTO;
import org.dromara.sample.manage.service.IDeviceRedisService;
import org.dromara.sample.manage.service.IDeviceService;
import org.dromara.sample.wayline.model.enums.WaylineJobStatusEnum;
import org.dromara.sample.wayline.model.enums.WaylineTaskStatusEnum;
import org.dromara.sample.wayline.model.param.UpdateJobParam;
import org.dromara.sample.wayline.service.IFlightTaskService;
import org.dromara.sample.wayline.service.IWaylineJobService;
import org.dromara.sample.wayline.service.IWaylineRedisService;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.extern.slf4j.Slf4j;
import org.dromara.common.sdk.cloudapi.control.DrcModeEnterRequest;
import org.dromara.common.sdk.cloudapi.control.DrcModeMqttBroker;
import org.dromara.common.sdk.cloudapi.control.api.AbstractControlService;
import org.dromara.common.sdk.cloudapi.device.DockModeCodeEnum;
import org.dromara.common.sdk.cloudapi.device.OsdDockDrone;
import org.dromara.common.sdk.cloudapi.wayline.FlighttaskProgress;
import org.dromara.common.sdk.common.HttpResultResponse;
import org.dromara.common.sdk.common.SDKManager;
import org.dromara.common.sdk.mqtt.TopicConst;
import org.dromara.common.sdk.mqtt.services.ServicesReplyData;
import org.dromara.common.sdk.mqtt.services.TopicServicesResponse;
import org.dromara.sample.component.mqtt.config.MqttPropertyConfiguration;
import org.dromara.sample.component.mqtt.model.EventsReceiver;
import org.dromara.sample.component.mqtt.model.MapKeyConst;
import org.dromara.sample.control.model.dto.JwtAclDTO;
import org.dromara.sample.control.model.enums.DroneAuthorityEnum;
import org.dromara.sample.control.model.enums.MqttAclAccessEnum;
import org.dromara.sample.control.model.param.DrcConnectParam;
import org.dromara.sample.control.model.param.DrcModeParam;
import org.dromara.sample.control.service.IControlService;
import org.dromara.sample.control.service.IDrcService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
@ -66,11 +66,6 @@ public class DrcServiceImpl implements IDrcService {
@Autowired
private IDeviceService deviceService;
@Autowired
private ObjectMapper mapper;
@Autowired
private IWebSocketMessageService webSocketMessageService;
@Autowired
private IControlService controlService;

5
dk-modules/sample/src/main/java/org/dromara/sample/control/service/impl/GimbalResetImpl.java

@ -1,6 +1,7 @@
package com.dji.sample.control.service.impl;
package org.dromara.sample.control.service.impl;
import com.dji.sample.control.model.param.DronePayloadParam;
import org.dromara.sample.control.model.param.DronePayloadParam;
import java.util.Objects;

Some files were not shown because too many files changed in this diff

Loading…
Cancel
Save