Browse Source

mqtt

pull/1/head
吴远 6 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")), "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.") @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( HttpResultResponse<List<GetMapElementsResponse>> getMapElements(
@PathVariable(name = "workspace_id") String workspaceId,
@RequestParam(name = "group_id", required = false) String groupId, @RequestParam(name = "group_id", required = false) String groupId,
@RequestParam(name = "is_distributed", required = false) Boolean isDistributed, @RequestParam(name = "is_distributed", required = false) Boolean isDistributed,
HttpServletRequest req, HttpServletResponse rsp); 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. * Check if the file has been uploaded by the fingerprint.
* @param workspaceId
* @param request * @param request
* @param req * @param req
* @param rsp * @param rsp
* @return * @return
*/ */
@Operation(summary = "media fast upload", description = "Check if the file has been uploaded by the fingerprint.", @Operation(summary = "media fast upload", description = "Check if the file has been uploaded by the fingerprint.")
parameters = { @PostMapping(PREFIX + "/workspace/fast-upload")
@Parameter(name = "workspace_id", description = "workspace id", schema = @Schema(format = "uuid"))
})
@PostMapping(PREFIX + "/workspaces/{workspace_id}/fast-upload")
HttpResultResponse mediaFastUpload( HttpResultResponse mediaFastUpload(
@PathVariable(name = "workspace_id") String workspaceId,
@Valid @RequestBody MediaFastUploadRequest request, @Valid @RequestBody MediaFastUploadRequest request,
HttpServletRequest req, HttpServletResponse rsp); HttpServletRequest req, HttpServletResponse rsp);
@ -50,7 +45,6 @@ public interface IHttpMediaService {
/** /**
* When the file is uploaded to the storage server by pilot, * When the file is uploaded to the storage server by pilot,
* the basic information of the file is reported through this interface. * the basic information of the file is reported through this interface.
* @param workspaceId
* @param request * @param request
* @param req * @param req
* @param rsp * @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, " + @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.", "the basic information of the file is reported through this interface.",
parameters = { responses = @ApiResponse(responseCode = "200", description = "OK",
@Parameter(name = "workspace_id", description = "workspace id", schema = @Schema(format = "uuid"))
}, responses = @ApiResponse(responseCode = "200", description = "OK",
content = @Content(mediaType = "application/json", content = @Content(mediaType = "application/json",
examples = {@ExampleObject(name = "responseObjectKey", examples = {@ExampleObject(name = "responseObjectKey",
summary = "response object key", summary = "response object key",
@ -68,47 +60,36 @@ public interface IHttpMediaService {
value = "{\"code\": 0, \"message\":\"success\", \"data\": \"media/DJI_20220831151616_0004_W_Waypoint4.JPG\"}" 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( HttpResultResponse<String> mediaUploadCallback(
@PathVariable(name = "workspace_id") String workspaceId,
@Valid @RequestBody MediaUploadCallbackRequest request, @Valid @RequestBody MediaUploadCallbackRequest request,
HttpServletRequest req, HttpServletResponse rsp); HttpServletRequest req, HttpServletResponse rsp);
/** /**
* Query the files that already exist in this workspace based on the workspace id and the collection of tiny fingerprints. * 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 request There is only one tiny_fingerprint parameter in the body.
* @param req * @param req
* @param rsp * @param rsp
* @return * @return
*/ */
@Operation(summary = "checks whether the file fingerprint exists", description = "Query the files that already exist in this " + @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.", "workspace based on the workspace id and the collection of tiny fingerprints.")
parameters = {
@Parameter(name = "workspace_id", description = "workspace id", schema = @Schema(format = "uuid"))
})
@PostMapping(PREFIX + "/workspaces/{workspace_id}/files/tiny-fingerprints") @PostMapping(PREFIX + "/workspaces/{workspace_id}/files/tiny-fingerprints")
HttpResultResponse<GetFileFingerprintResponse> getExistFileTinyFingerprint( HttpResultResponse<GetFileFingerprintResponse> getExistFileTinyFingerprint(
@PathVariable(name = "workspace_id") String workspaceId,
@Valid @RequestBody GetFileFingerprintRequest request, @Valid @RequestBody GetFileFingerprintRequest request,
HttpServletRequest req, HttpServletResponse rsp); HttpServletRequest req, HttpServletResponse rsp);
/** /**
* Report the upload status of the media files in the file group in real time. * Report the upload status of the media files in the file group in real time.
* @param workspaceId
* @param request * @param request
* @param req * @param req
* @param rsp * @param rsp
* @return * @return
*/ */
@Operation(summary = "callback after the file group upload complete", description = "Report the upload status of " + @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.", "the media files in the file group in real time.")
parameters = {
@Parameter(name = "workspace_id", description = "workspace id", schema = @Schema(format = "uuid"))
})
@PostMapping(PREFIX + "/workspaces/{workspace_id}/group-upload-callback") @PostMapping(PREFIX + "/workspaces/{workspace_id}/group-upload-callback")
HttpResultResponse folderUploadCallback( HttpResultResponse folderUploadCallback(
@PathVariable(name = "workspace_id") String workspaceId,
@Valid @RequestBody FolderUploadCallbackRequest request, @Valid @RequestBody FolderUploadCallbackRequest request,
HttpServletRequest req, HttpServletResponse rsp); 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; package org.dromara.common.sdk.cloudapi.storage;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonValue; import com.fasterxml.jackson.annotation.JsonValue;
import io.swagger.v3.oas.annotations.media.Schema; 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 * @author sean
* @version 1.0 * @version 1.0
@ -19,6 +27,11 @@ public enum OssTypeEnum {
private String type; 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) { OssTypeEnum(String type) {
this.type = type; this.type = type;
} }
@ -27,4 +40,16 @@ public enum OssTypeEnum {
public String getType() { public String getType() {
return type; 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. * Get temporary credentials for uploading the media and wayline in DJI Pilot.
* @param workspaceId workspace id
* @param req * @param req
* @param rsp * @param rsp
* @return * @return
@ -31,9 +30,8 @@ public interface IHttpStorageService {
parameters = { parameters = {
@Parameter(name = "workspace_id", description = "workspace id", schema = @Schema(format = "uuid")) @Parameter(name = "workspace_id", description = "workspace id", schema = @Schema(format = "uuid"))
}) })
@PostMapping(PREFIX + "/workspaces/{workspace_id}/sts") @PostMapping(PREFIX + "/workspaces/sts")
HttpResultResponse<StsCredentialsResponse> getTemporaryCredential( HttpResultResponse<StsCredentialsResponse> getTemporaryCredential(
@PathVariable(name = "workspace_id") String workspaceId,
HttpServletRequest req, HttpServletResponse rsp); 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"; String PREFIX = "manage/api/v1";
/** /**
* 获取当前用户工作区中所有设备的拓扑列表以供飞行员显示
* Get the topology list of all devices in the current user workspace for pilot display. * Get the topology list of all devices in the current user workspace for pilot display.
* @param workspaceId
* @param req * @param req
* @param rsp * @param rsp
* @return * @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." + @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." + "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, " + "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.", "it will also call this interface to request the device topology list to be updated.")
parameters = { @GetMapping(PREFIX + "/workspaces/devices/topologies")
@Parameter(name = "workspace_id", description = "workspace id", schema = @Schema(format = "uuid")),
})
@GetMapping(PREFIX + "/workspaces/{workspace_id}/devices/topologies")
HttpResultResponse<TopologyResponse> obtainDeviceTopologyList( HttpResultResponse<TopologyResponse> obtainDeviceTopologyList(
@PathVariable(name = "workspace_id") String workspaceId,
HttpServletRequest req, HttpServletResponse rsp); 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. * Query the basic data of the wayline file according to the query conditions.
* The query condition field in pilot is fixed. * The query condition field in pilot is fixed.
* @param workspaceId workspace id
* @param request get waylines params * @param request get waylines params
* @param req * @param req
* @param rsp * @param rsp
* @return wayline list * @return wayline list
*/ */
@Operation(summary = "get wayline list", description = "Query the basic data of the wayline file according to " + @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.", "the query conditions. The query condition field in pilot is fixed.")
parameters = { @GetMapping(PREFIX + "/workspaces/waylines")
@Parameter(name = "workspace_id", description = "workspace id", schema = @Schema(format = "uuid"))
})
@GetMapping(PREFIX + "/workspaces/{workspace_id}/waylines")
HttpResultResponse<PaginationData<GetWaylineListResponse>> getWaylineList( HttpResultResponse<PaginationData<GetWaylineListResponse>> getWaylineList(
@Valid @ParameterObject GetWaylineListRequest request, @Valid @ParameterObject GetWaylineListRequest request,
@PathVariable(name = "workspace_id") String workspaceId,
HttpServletRequest req, HttpServletResponse rsp); HttpServletRequest req, HttpServletResponse rsp);
/** /**
* Query the download address of the file according to the wayline file id, * Query the download address of the file according to the wayline file id,
* and redirect to this address directly for download. * and redirect to this address directly for download.
* @param workspaceId workspace id
* @param waylineId wayline file id
* @param req * @param req
* @param rsp * @param rsp
*/ */
@Operation(summary = "get wayline file download address", description = "Query the download address of the file " + @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.", "according to the wayline file id, and redirect to this address directly for download.",
parameters = { parameters = {
@Parameter(name = "workspace_id", description = "workspace id", schema = @Schema(format = "uuid")),
@Parameter(name = "wayline_id", description = "wayline 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") @GetMapping(PREFIX + "/workspaces/{workspace_id}/waylines/{wayline_id}/url")
void getWaylineFileDownloadAddress( void getWaylineFileDownloadAddress(
@PathVariable(name = "workspace_id") String workspaceId,
@PathVariable(name = "wayline_id") String waylineId, @PathVariable(name = "wayline_id") String waylineId,
HttpServletRequest req, HttpServletResponse rsp); HttpServletRequest req, HttpServletResponse rsp);
/** /**
* Checking whether the name already exists according to the wayline name must ensure the uniqueness of the wayline name. * 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. * This interface will be called when uploading waylines and must be available.
* @param workspaceId workspace id
* @param names wayline file name collection * @param names wayline file name collection
* @param req * @param req
* @param rsp * @param rsp
@ -83,38 +73,30 @@ public interface IHttpWaylineService {
"according to the wayline name must ensure the uniqueness of the wayline name. " + "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.", "This interface will be called when uploading waylines and must be available.",
parameters = { parameters = {
@Parameter(name = "workspace_id", description = "workspace id", required = true),
@Parameter(name = "name", description = "wayline file name", 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( HttpResultResponse<List<String>> getDuplicatedWaylineName(
@PathVariable(name = "workspace_id") String workspaceId,
@NotNull @Size(min = 1) @RequestParam(name = "name") List<String> names, @NotNull @Size(min = 1) @RequestParam(name = "name") List<String> names,
HttpServletRequest req, HttpServletResponse rsp); HttpServletRequest req, HttpServletResponse rsp);
/** /**
* When the wayline file is uploaded to the storage server by pilot, * When the wayline file is uploaded to the storage server by pilot,
* the basic information of the file is reported through this interface. * the basic information of the file is reported through this interface.
* @param workspaceId workspace id
* @param request upload callback params * @param request upload callback params
* @param req * @param req
* @param rsp * @param rsp
* @return success * @return success
*/ */
@Operation(summary = "file upload result report", description = "When the wayline file is uploaded to the " + @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.", "storage server by pilot, the basic information of the file is reported through this interface.")
parameters = { @PostMapping(PREFIX + "/workspaces/upload-callback")
@Parameter(name = "workspace_id", description = "workspace id", required = true)
})
@PostMapping(PREFIX + "/workspaces/{workspace_id}/upload-callback")
HttpResultResponse fileUploadResultReport( HttpResultResponse fileUploadResultReport(
@PathVariable(name = "workspace_id") String workspaceId,
@Valid @RequestBody WaylineUploadCallbackRequest request, @Valid @RequestBody WaylineUploadCallbackRequest request,
HttpServletRequest req, HttpServletResponse rsp); HttpServletRequest req, HttpServletResponse rsp);
/** /**
* Favorite the wayline file according to the wayline file id. * Favorite the wayline file according to the wayline file id.
* @param workspaceId workspace id
* @param ids wayline file id * @param ids wayline file id
* @param req * @param req
* @param rsp * @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.", @Operation(summary = "batch favorites wayline", description = "Favorite the wayline file according to the wayline file id.",
parameters = { parameters = {
@Parameter(name = "workspace_id", description = "workspace id", required = true),
@Parameter(name = "id", description = "wayline id", required = true) @Parameter(name = "id", description = "wayline id", required = true)
}) })
@PostMapping(PREFIX + "/workspaces/{workspace_id}/favorites") @PostMapping(PREFIX + "/workspaces/favorites")
HttpResultResponse batchFavoritesWayline( HttpResultResponse batchFavoritesWayline(
@PathVariable(name = "workspace_id") String workspaceId,
@NotNull @Size(min = 1) @RequestParam(name = "id") List<String> ids, @NotNull @Size(min = 1) @RequestParam(name = "id") List<String> ids,
HttpServletRequest req, HttpServletResponse rsp); HttpServletRequest req, HttpServletResponse rsp);
/** /**
* Delete the favorites of this wayline file based on the wayline file id. * Delete the favorites of this wayline file based on the wayline file id.
* @param workspaceId workspace id
* @param ids wayline file id * @param ids wayline file id
* @param req * @param req
* @param rsp * @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.", @Operation(summary = "batch unfavorites wayline", description = "Delete the favorites of this wayline file based on the wayline file id.",
parameters = { parameters = {
@Parameter(name = "workspace_id", description = "workspace id", required = true),
@Parameter(name = "id", description = "wayline id", required = true) @Parameter(name = "id", description = "wayline id", required = true)
}) })
@DeleteMapping(PREFIX + "/workspaces/{workspace_id}/favorites") @DeleteMapping(PREFIX + "/workspaces/{workspace_id}/favorites")
HttpResultResponse batchUnfavoritesWayline( HttpResultResponse batchUnfavoritesWayline(
@PathVariable(name = "workspace_id") String workspaceId,
@NotNull @Size(min = 1) @RequestParam(name = "id") List<String> ids, @NotNull @Size(min = 1) @RequestParam(name = "id") List<String> ids,
HttpServletRequest req, HttpServletResponse rsp); HttpServletRequest req, HttpServletResponse rsp);
} }

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

@ -65,7 +65,30 @@
<groupId>software.amazon.awssdk</groupId> <groupId>software.amazon.awssdk</groupId>
<artifactId>s3-transfer-manager</artifactId> <artifactId>s3-transfer-manager</artifactId>
</dependency> </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> </dependencies>
</project> </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(); 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使用指定的后缀构造对象键 * 上传 byte[] 数据到 Amazon S3使用指定的后缀构造对象键
* *
@ -433,6 +454,10 @@ public class OssClient {
return header + endpoint; return header + endpoint;
} }
public OssProperties getOssProperties() {
return this.properties;
}
/** /**
* 根据传入的 region 参数返回相应的 AWS 区域 * 根据传入的 region 参数返回相应的 AWS 区域
* 如果 region 参数非空使用 Region.of 方法创建并返回对应的 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.CacheUtils;
import org.dromara.common.redis.utils.RedisUtils; import org.dromara.common.redis.utils.RedisUtils;
import lombok.extern.slf4j.Slf4j; 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.Map;
import java.util.concurrent.ConcurrentHashMap; 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 Map<String, OssClient> CLIENT_CACHE = new ConcurrentHashMap<>();
private static final ReentrantLock LOCK = new ReentrantLock(); private static final ReentrantLock LOCK = new ReentrantLock();
/** /**
* 获取默认实例 * 获取默认实例
*/ */
@ -70,4 +71,36 @@ public class OssFactory {
return client; 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; private String region;
/**
* s3类型0minio1oss2aws
*/
private String sThreeType;
/**
* 角色会话名称
*/
private String roleSessionName;
/**
* AWS账户
*/
private String roleArn;
/**
* 授权时间
*/
private Long expire;
/** /**
* 是否httpsY=,N= * 是否httpsY=,N=
*/ */
@ -60,4 +80,6 @@ public class OssProperties {
*/ */
private String accessPolicy; 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 * @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.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate; 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.WebSocketSession;
import org.springframework.web.socket.handler.ConcurrentWebSocketSessionDecorator; 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); 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; package org.dromara.common.websocket.dto;
import com.fasterxml.jackson.annotation.JsonValue;
import io.swagger.v3.oas.annotations.media.Schema;
/** /**
* @author sean * @author sean
* @version 0.1 * @version 0.1
* @date 2021/11/26 * @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 { public enum BizCodeEnum {
DEVICE_ONLINE("device_online"), DEVICE_ONLINE("device_online"),
@ -19,24 +15,79 @@ public enum BizCodeEnum {
DEVICE_OSD("device_osd"), DEVICE_OSD("device_osd"),
RC_OSD("gateway_osd"),
DOCK_OSD("dock_osd"),
MAP_ELEMENT_CREATE("map_element_create"), MAP_ELEMENT_CREATE("map_element_create"),
MAP_ELEMENT_UPDATE("map_element_update"), MAP_ELEMENT_UPDATE("map_element_update"),
MAP_ELEMENT_DELETE("map_element_delete"), 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) { BizCodeEnum(String code) {
this.code = code; this.code = code;
} }
@JsonValue
public String getCode() { public String getCode() {
return code; 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; package org.dromara.common.websocket.utils;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.AccessLevel; import lombok.AccessLevel;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.checkerframework.checker.units.qual.C;
import org.dromara.common.redis.utils.RedisUtils; import org.dromara.common.redis.utils.RedisUtils;
import org.dromara.common.websocket.dto.WebSocketMessageDto; import org.dromara.common.websocket.dto.WebSocketMessageDto;
import org.dromara.common.websocket.dto.WebSocketMessageResponse;
import org.dromara.common.websocket.holder.WebSocketSessionHolder; 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.PongMessage;
import org.springframework.web.socket.TextMessage; import org.springframework.web.socket.TextMessage;
import org.springframework.web.socket.WebSocketMessage; import org.springframework.web.socket.WebSocketMessage;
@ -15,6 +20,7 @@ import org.springframework.web.socket.WebSocketSession;
import java.io.IOException; import java.io.IOException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Objects;
import java.util.function.Consumer; import java.util.function.Consumer;
import static org.dromara.common.websocket.constant.WebSocketConstants.WEB_SOCKET_TOPIC; 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会话发布订阅的消息(群发) * 向所有的WebSocket会话发布订阅的消息(群发)
* *

1
dk-modules/pom.xml

@ -14,6 +14,7 @@
<module>job</module> <module>job</module>
<module>resource</module> <module>resource</module>
<module>workflow</module> <module>workflow</module>
<module>sample</module>
</modules> </modules>
<artifactId>dk-modules</artifactId> <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; private String region;
/**
* s3类型minio(包含其他方式)ossaws
*/
private String sThreeType;
/**
* 角色会话名称
*/
private String roleSessionName;
/**
* AWS账户
*/
private String roleArn;
/**
* 授权时间
*/
private Long expire;
/** /**
* 是否默认0=,1= * 是否默认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; 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; private String region;
/**
* s3类型0minio1oss2aws
*/
private String sThreeType;
/**
* 角色会话名称
*/
private String roleSessionName;
/**
* AWS账户
*/
private String roleArn;
/**
* 授权时间
*/
private Long expire;
/** /**
* 是否默认0=,1= * 是否默认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.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication; import org.springframework.boot.SpringApplication;
@ -6,7 +6,7 @@ import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.ComponentScan;
import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.scheduling.annotation.EnableScheduling;
@MapperScan("com.dji.sample.*.dao") @MapperScan("org.dromara.sample.*.dao")
@SpringBootApplication @SpringBootApplication
@EnableScheduling @EnableScheduling
@ComponentScan("com.dji") @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 * @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.beans.BeansException;
import org.springframework.context.ApplicationContext; 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; package org.dromara.sample.component;
import com.dji.sample.component.redis.RedisConst;
import com.dji.sample.component.redis.RedisOpsUtils; import org.dromara.common.redis.config.RedisConst;
import com.dji.sample.manage.model.dto.DeviceDTO; import org.dromara.common.redis.utils.RedisOpsUtils;
import com.dji.sample.manage.service.IDeviceRedisService; import org.dromara.sample.manage.model.dto.DeviceDTO;
import com.dji.sample.manage.service.IDeviceService; import org.dromara.sample.manage.service.IDeviceRedisService;
import com.dji.sdk.cloudapi.device.DeviceDomainEnum; import org.dromara.sample.manage.service.IDeviceService;
import com.dji.sdk.common.SDKManager; 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.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner; import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
@ -49,4 +50,4 @@ public class ApplicationBootInitial implements CommandLineRunner {
deviceRedisService.getDeviceOnline(device.getChildDeviceSn()).map(DeviceDTO::getThingVersion).orElse(null)))); 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.validation.BindException;
import org.springframework.web.bind.MethodArgumentNotValidException; import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ControllerAdvice; 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; package org.dromara.sample.component;
import com.dji.sample.component.redis.RedisConst;
import com.dji.sample.component.redis.RedisOpsUtils; import org.dromara.common.redis.config.RedisConst;
import com.dji.sample.manage.model.dto.DeviceDTO; import org.dromara.common.redis.utils.RedisOpsUtils;
import com.dji.sample.manage.service.IDeviceService; import org.dromara.sample.manage.model.dto.DeviceDTO;
import com.dji.sdk.cloudapi.device.DeviceDomainEnum; import org.dromara.sample.manage.service.IDeviceService;
import com.dji.sdk.mqtt.IMqttTopicService;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.extern.slf4j.Slf4j; 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.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled; import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
@ -58,4 +59,4 @@ public class GlobalScheduleService {
log.info("Subscriptions: {}", Arrays.toString(topicService.getSubscribedTopic())); 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.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; 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 org.dromara.sample.component.mqtt.model.MqttClientOptions;
import com.dji.sample.common.util.JwtUtil; import org.dromara.sample.component.mqtt.model.MqttProtocolEnum;
import com.dji.sample.component.mqtt.model.MqttClientOptions; import org.dromara.sample.component.mqtt.model.MqttUseEnum;
import com.dji.sample.component.mqtt.model.MqttProtocolEnum;
import com.dji.sample.component.mqtt.model.MqttUseEnum;
import com.dji.sdk.cloudapi.control.DrcModeMqttBroker;
import lombok.Data; import lombok.Data;
import org.dromara.common.sdk.cloudapi.control.DrcModeMqttBroker;
import org.eclipse.paho.client.mqttv3.MqttConnectOptions; import org.eclipse.paho.client.mqttv3.MqttConnectOptions;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; 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. * Get the configuration options of the basic link of the mqtt client.
* @return * @return
*/ */
@ -49,6 +47,7 @@ public class MqttPropertyConfiguration {
} }
/** /**
* 获取基本链接的mqtt地址
* Get the mqtt address of the basic link. * Get the mqtt address of the basic link.
* @return * @return
*/ */
@ -57,6 +56,7 @@ public class MqttPropertyConfiguration {
} }
/** /**
* 根据不同客户端的参数拼接mqtt地址
* Splice the mqtt address according to the parameters of different clients. * Splice the mqtt address according to the parameters of different clients.
* @param options * @param options
* @return * @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 clientId
* @param username * @param username
* @param age The validity period of the token. unit: s * @param age The validity period of the token. unit: s
@ -86,9 +86,6 @@ public class MqttPropertyConfiguration {
if (!mqtt.containsKey(MqttUseEnum.DRC)) { if (!mqtt.containsKey(MqttUseEnum.DRC)) {
throw new RuntimeException("请先在后端配置文件中配置mqtt的drc链接参数。"); throw new RuntimeException("请先在后端配置文件中配置mqtt的drc链接参数。");
} }
Algorithm algorithm = JwtUtil.algorithm;
String token = JwtUtil.createToken(map, age, algorithm, null, null);
return new DrcModeMqttBroker() return new DrcModeMqttBroker()
.setAddress(getMqttAddress(mqtt.get(MqttUseEnum.DRC))) .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 com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.*; import lombok.*;
import org.dromara.common.sdk.mqtt.events.EventsDataRequest;
import org.dromara.common.sdk.mqtt.events.EventsErrorCode;
/** /**
* @author sean * @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 * @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; 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; 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 * @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.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean; 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.annotation.JsonInclude;
import com.fasterxml.jackson.core.JsonGenerator; 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 jakarta.validation.Valid;
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 lombok.extern.slf4j.Slf4j; 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.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
/** /**
* @author sean * @author sean
@ -26,6 +24,13 @@ public class DockController {
@Autowired @Autowired
private IControlService controlService; private IControlService controlService;
/**
* 远程控制
* @param sn
* @param serviceIdentifier
* @param param
* @return
*/
@PostMapping("/{sn}/jobs/{service_identifier}") @PostMapping("/{sn}/jobs/{service_identifier}")
public HttpResultResponse createControlJob(@PathVariable String sn, public HttpResultResponse createControlJob(@PathVariable String sn,
@PathVariable("service_identifier") String serviceIdentifier, @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; package org.dromara.sample.control.controller;
import com.dji.sample.common.model.CustomClaim; import org.dromara.common.satoken.utils.LoginHelper;
import com.dji.sample.control.model.dto.JwtAclDTO; import org.dromara.sample.control.model.dto.JwtAclDTO;
import com.dji.sample.control.model.param.DrcConnectParam; import org.dromara.sample.control.model.param.DrcConnectParam;
import com.dji.sample.control.model.param.DrcModeParam; import org.dromara.sample.control.model.param.DrcModeParam;
import com.dji.sample.control.service.IDrcService; import org.dromara.sample.control.service.IDrcService;
import com.dji.sdk.cloudapi.control.DrcModeMqttBroker; import jakarta.servlet.http.HttpServletRequest;
import com.dji.sdk.common.HttpResultResponse; import jakarta.validation.Valid;
import lombok.extern.slf4j.Slf4j; 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.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*; 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 * @author sean
@ -29,24 +29,26 @@ public class DrcController {
@Autowired @Autowired
private IDrcService drcService; private IDrcService drcService;
@PostMapping("/workspaces/{workspace_id}/drc/connect") @PostMapping("/workspaces/drc/connect")
public HttpResultResponse drcConnect(@PathVariable("workspace_id") String workspaceId, HttpServletRequest request, @Valid @RequestBody DrcConnectParam param) { public HttpResultResponse drcConnect(HttpServletRequest request, @Valid @RequestBody DrcConnectParam param) {
CustomClaim claims = (CustomClaim) request.getAttribute(TOKEN_CLAIM); 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); return HttpResultResponse.success(brokerDTO);
} }
@PostMapping("/workspaces/{workspace_id}/drc/enter") @PostMapping("/workspaces/drc/enter")
public HttpResultResponse drcEnter(@PathVariable("workspace_id") String workspaceId, @Valid @RequestBody DrcModeParam param) { public HttpResultResponse drcEnter(@Valid @RequestBody DrcModeParam param) {
JwtAclDTO acl = drcService.deviceDrcEnter(workspaceId, param); LoginUser loginUser = LoginHelper.getLoginUser();
JwtAclDTO acl = drcService.deviceDrcEnter(loginUser.getTenantId(), param);
return HttpResultResponse.success(acl); return HttpResultResponse.success(acl);
} }
@PostMapping("/workspaces/{workspace_id}/drc/exit") @PostMapping("/workspaces/drc/exit")
public HttpResultResponse drcExit(@PathVariable("workspace_id") String workspaceId, @Valid @RequestBody DrcModeParam param) { public HttpResultResponse drcExit( @Valid @RequestBody DrcModeParam param) {
drcService.deviceDrcExit(workspaceId, param); LoginUser loginUser = LoginHelper.getLoginUser();
drcService.deviceDrcExit(loginUser.getTenantId(), param);
return HttpResultResponse.success(); 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 org.dromara.sample.control.service.impl.RemoteDebugHandler;
import com.dji.sdk.cloudapi.device.AirConditionerStateEnum;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import org.dromara.common.sdk.cloudapi.device.AirConditionerStateEnum;
/** /**
* @author sean * @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 org.dromara.sample.control.service.impl.RemoteDebugHandler;
import com.dji.sdk.cloudapi.device.SwitchActionEnum;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import org.dromara.common.sdk.cloudapi.device.SwitchActionEnum;
/** /**
* @author sean * @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 org.dromara.sample.control.service.impl.RemoteDebugHandler;
import com.dji.sdk.cloudapi.device.BatteryStoreModeEnum;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import org.dromara.common.sdk.cloudapi.device.BatteryStoreModeEnum;
/** /**
* @author sean * @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.AllArgsConstructor;
import lombok.Builder; 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 org.dromara.sample.control.service.impl.RemoteDebugHandler;
import com.dji.sdk.cloudapi.device.LinkWorkModeEnum;
import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonValue; import com.fasterxml.jackson.annotation.JsonValue;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import org.dromara.common.sdk.cloudapi.device.LinkWorkModeEnum;
import java.util.Map; 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 org.dromara.sample.control.service.impl.RemoteDebugHandler;
import com.dji.sample.control.service.impl.RemoteDebugHandler; import org.dromara.sample.manage.service.IDeviceService;
import com.dji.sample.manage.service.IDeviceService;
import com.dji.sdk.cloudapi.device.DockModeCodeEnum;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import org.dromara.common.sdk.cloudapi.device.DockModeCodeEnum;
import org.dromara.sample.common.util.SpringBeanUtilsTest;
/** /**
* @author sean * @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.AllArgsConstructor;
import lombok.Builder; 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 org.dromara.sample.control.service.impl.RemoteDebugHandler;
import com.dji.sample.control.service.impl.RemoteDebugHandler; import org.dromara.sample.manage.model.dto.DeviceDTO;
import com.dji.sample.manage.model.dto.DeviceDTO; import org.dromara.sample.manage.service.IDeviceRedisService;
import com.dji.sample.manage.service.IDeviceRedisService; import org.dromara.common.sdk.cloudapi.device.DroneModeCodeEnum;
import com.dji.sdk.cloudapi.device.DroneModeCodeEnum; import org.dromara.common.sdk.cloudapi.device.OsdDockDrone;
import com.dji.sdk.cloudapi.device.OsdDockDrone; import org.dromara.sample.common.util.SpringBeanUtilsTest;
/** /**
* @author sean * @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 org.dromara.sample.control.service.impl.RemoteDebugHandler;
import com.dji.sample.control.service.impl.RemoteDebugHandler; import org.dromara.sample.manage.model.dto.DeviceDTO;
import com.dji.sample.manage.model.dto.DeviceDTO; import org.dromara.sample.manage.service.IDeviceRedisService;
import com.dji.sample.manage.service.IDeviceRedisService; import org.dromara.common.sdk.cloudapi.device.DroneModeCodeEnum;
import com.dji.sdk.cloudapi.device.DroneModeCodeEnum; import org.dromara.common.sdk.cloudapi.device.OsdDockDrone;
import com.dji.sdk.cloudapi.device.OsdDockDrone; import org.dromara.sample.common.util.SpringBeanUtilsTest;
/** /**
* @author sean * @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.JsonCreator;
import com.fasterxml.jackson.annotation.JsonValue; 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; 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; 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; 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.JsonCreator;
import com.fasterxml.jackson.annotation.JsonValue; 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; 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.JsonCreator;
import com.fasterxml.jackson.annotation.JsonValue; import com.fasterxml.jackson.annotation.JsonValue;
import org.dromara.common.sdk.cloudapi.control.PayloadControlMethodEnum;
import java.util.Arrays; import java.util.Arrays;
@ -14,25 +13,25 @@ import java.util.Arrays;
*/ */
public enum PayloadCommandsEnum { 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; 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.cmd = cmd;
this.clazz = clazz; this.clazz = clazz;
} }
@ -42,7 +41,7 @@ public enum PayloadCommandsEnum {
return cmd.getPayloadMethod().getMethod(); return cmd.getPayloadMethod().getMethod();
} }
public Class<? extends PayloadCommandsHandler> getClazz() { public Class<? extends org.dromara.sample.control.service.impl.PayloadCommandsHandler> getClazz() {
return clazz; 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 org.dromara.sample.control.service.impl.RemoteDebugHandler;
import com.dji.sample.control.service.impl.RemoteDebugHandler;
import com.dji.sdk.cloudapi.debug.DebugMethodEnum;
import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonCreator;
import lombok.Getter; 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.Arrays;
import java.util.Objects; import java.util.Objects;
@ -54,7 +54,7 @@ public enum RemoteDebugMethodEnum {
BATTERY_MAINTENANCE_SWITCH(DebugMethodEnum.BATTERY_MAINTENANCE_SWITCH, false, AlarmState.class), BATTERY_MAINTENANCE_SWITCH(DebugMethodEnum.BATTERY_MAINTENANCE_SWITCH, false, AlarmState.class),
ALARM_STATE_SWITCH(DebugMethodEnum.ALARM_STATE_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), BATTERY_STORE_MODE_SWITCH(DebugMethodEnum.BATTERY_STORE_MODE_SWITCH, false, BatteryStoreMode.class),
SDR_WORK_MODE_SWITCH(DebugMethodEnum.SDR_WORKMODE_SWITCH, false, LinkWorkMode.class), SDR_WORK_MODE_SWITCH(DebugMethodEnum.SDR_WORKMODE_SWITCH, false, LinkWorkMode.class),
@ -66,7 +66,7 @@ public enum RemoteDebugMethodEnum {
private String method; private String method;
private boolean progress; private boolean progress;
private Class<? extends RemoteDebugHandler> clazz; private Class<? extends RemoteDebugHandler> clazz;
RemoteDebugMethodEnum(DebugMethodEnum debugMethodEnum, boolean progress, 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 lombok.Data;
import org.hibernate.validator.constraints.Range; 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 lombok.Data;
import org.dromara.common.redis.config.RedisConst;
import org.hibernate.validator.constraints.Range; 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.AllArgsConstructor;
import lombok.Builder; import lombok.Builder;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import org.hibernate.validator.constraints.Range; import org.hibernate.validator.constraints.Range;
import javax.validation.Valid;
import javax.validation.constraints.NotBlank;
/** /**
* @author sean * @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 jakarta.validation.constraints.NotNull;
import com.dji.sdk.cloudapi.device.CameraModeEnum; import jakarta.validation.constraints.Pattern;
import lombok.Data; 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 org.hibernate.validator.constraints.Range;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Pattern;
/** /**
* @author sean * @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.AllArgsConstructor;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import org.dromara.common.sdk.cloudapi.control.Point;
import org.hibernate.validator.constraints.Range; import org.hibernate.validator.constraints.Range;
import javax.validation.Valid;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import java.util.List; 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 jakarta.validation.Valid;
import javax.validation.constraints.NotNull; import jakarta.validation.constraints.NotNull;
import lombok.Data;
import org.dromara.sample.control.model.enums.PayloadCommandsEnum;
/** /**
* @author sean * @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 lombok.Data;
import javax.validation.constraints.NotNull;
/** /**
* @author sean * @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 jakarta.validation.constraints.Max;
import com.dji.sdk.cloudapi.control.CommanderModeLostActionEnum; import jakarta.validation.constraints.Min;
import com.dji.sdk.cloudapi.device.ExitWaylineWhenRcLostEnum; import jakarta.validation.constraints.NotNull;
import com.dji.sdk.cloudapi.device.RcLostActionEnum;
import com.dji.sdk.cloudapi.wayline.RthModeEnum;
import lombok.Data; 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 org.hibernate.validator.constraints.Range;
import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
/** /**
* @author sean * @author sean
* @version 1.4 * @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 org.dromara.common.sdk.common.HttpResultResponse;
import com.dji.sample.control.model.param.*; import org.dromara.sample.control.model.enums.DroneAuthorityEnum;
import com.dji.sdk.common.HttpResultResponse; import org.dromara.sample.control.model.enums.RemoteDebugMethodEnum;
import org.dromara.sample.control.model.param.*;
/** /**
* @author sean * @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 org.dromara.common.sdk.cloudapi.control.DrcModeMqttBroker;
import com.dji.sample.control.model.param.DrcModeParam; import org.dromara.sample.control.model.dto.JwtAclDTO;
import com.dji.sdk.cloudapi.control.DrcModeMqttBroker; import org.dromara.sample.control.model.param.DrcConnectParam;
import org.dromara.sample.control.model.param.DrcModeParam;
/** /**
* @author sean * @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; import java.util.Objects;
@ -9,7 +10,7 @@ import java.util.Objects;
* @version 1.4 * @version 1.4
* @date 2023/4/23 * @date 2023/4/23
*/ */
public class CameraAimImpl extends PayloadCommandsHandler { public class CameraAimImpl extends org.dromara.sample.control.service.impl.PayloadCommandsHandler {
public CameraAimImpl(DronePayloadParam param) { public CameraAimImpl(DronePayloadParam param) {
super(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 org.dromara.common.sdk.cloudapi.control.CameraTypeEnum;
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; 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 org.dromara.common.sdk.cloudapi.device.CameraStateEnum;
import com.dji.sdk.cloudapi.device.CameraStateEnum; import org.dromara.sample.control.model.param.DronePayloadParam;
import java.util.Objects; 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 * @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 org.dromara.common.sdk.cloudapi.device.CameraModeEnum;
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 * @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 org.dromara.common.sdk.cloudapi.device.CameraStateEnum;
import com.dji.sdk.cloudapi.device.CameraStateEnum; import org.dromara.sample.control.model.param.DronePayloadParam;
import org.dromara.sample.control.service.impl.PayloadCommandsHandler;
/** /**
* @author sean * @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; package org.dromara.sample.control.service.impl;
import com.dji.sample.component.websocket.service.IWebSocketMessageService;
import com.dji.sample.control.model.enums.DroneAuthorityEnum; import org.dromara.sample.manage.model.dto.DeviceDTO;
import com.dji.sample.control.model.enums.RemoteDebugMethodEnum; import org.dromara.sample.manage.service.IDevicePayloadService;
import com.dji.sample.control.model.param.*; import org.dromara.sample.manage.service.IDeviceRedisService;
import com.dji.sample.control.service.IControlService; import org.dromara.sample.manage.service.IDeviceService;
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;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.extern.slf4j.Slf4j; 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.Autowired;
import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -43,8 +43,6 @@ import java.util.UUID;
@Slf4j @Slf4j
public class ControlServiceImpl implements IControlService { public class ControlServiceImpl implements IControlService {
@Autowired
private IWebSocketMessageService webSocketMessageService;
@Autowired @Autowired
private IDeviceService deviceService; private IDeviceService deviceService;
@ -71,7 +69,7 @@ public class ControlServiceImpl implements IControlService {
private RemoteDebugHandler checkDebugCondition(String sn, RemoteDebugParam param, RemoteDebugMethodEnum controlMethodEnum) { private RemoteDebugHandler checkDebugCondition(String sn, RemoteDebugParam param, RemoteDebugMethodEnum controlMethodEnum) {
RemoteDebugHandler handler = Objects.nonNull(controlMethodEnum.getClazz()) ? RemoteDebugHandler handler = Objects.nonNull(controlMethodEnum.getClazz()) ?
mapper.convertValue(Objects.nonNull(param) ? param : new Object(), 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)) { if (!handler.canPublish(sn)) {
throw new RuntimeException("The current state of the dock does not support this function."); 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; package org.dromara.sample.control.service.impl;
import com.dji.sample.component.mqtt.config.MqttPropertyConfiguration;
import com.dji.sample.component.mqtt.model.EventsReceiver; import org.dromara.common.redis.config.RedisConst;
import com.dji.sample.component.mqtt.model.MapKeyConst; import org.dromara.common.redis.utils.RedisOpsUtils;
import com.dji.sample.component.redis.RedisConst; import org.dromara.sample.manage.model.dto.DeviceDTO;
import com.dji.sample.component.redis.RedisOpsUtils; import org.dromara.sample.manage.service.IDeviceRedisService;
import com.dji.sample.component.websocket.service.IWebSocketMessageService; import org.dromara.sample.manage.service.IDeviceService;
import com.dji.sample.control.model.dto.JwtAclDTO; import org.dromara.sample.wayline.model.enums.WaylineJobStatusEnum;
import com.dji.sample.control.model.enums.DroneAuthorityEnum; import org.dromara.sample.wayline.model.enums.WaylineTaskStatusEnum;
import com.dji.sample.control.model.enums.MqttAclAccessEnum; import org.dromara.sample.wayline.model.param.UpdateJobParam;
import com.dji.sample.control.model.param.DrcConnectParam; import org.dromara.sample.wayline.service.IFlightTaskService;
import com.dji.sample.control.model.param.DrcModeParam; import org.dromara.sample.wayline.service.IWaylineJobService;
import com.dji.sample.control.service.IControlService; import org.dromara.sample.wayline.service.IWaylineRedisService;
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;
import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.extern.slf4j.Slf4j; 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.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils; import org.springframework.util.StringUtils;
@ -66,11 +66,6 @@ public class DrcServiceImpl implements IDrcService {
@Autowired @Autowired
private IDeviceService deviceService; private IDeviceService deviceService;
@Autowired
private ObjectMapper mapper;
@Autowired
private IWebSocketMessageService webSocketMessageService;
@Autowired @Autowired
private IControlService controlService; 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; import java.util.Objects;

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

Loading…
Cancel
Save