Browse Source

1

pull/1/head
吴远 3 months ago
parent
commit
d81d031832
  1. 12
      dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/device/DeviceEnum.java
  2. 16
      dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/device/DeviceTypeEnum.java
  3. 4
      dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/map/CreateMapElementRequest.java
  4. 16
      dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/map/MapElementCreateWsResponse.java
  5. 16
      dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/map/MapElementUpdateWsResponse.java
  6. 20
      dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/map/MapGroupElement.java
  7. 4
      dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/map/UpdateMapElementRequest.java
  8. 45
      dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/map/api/IHttpMapService.java
  9. 10
      dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/media/MediaUploadCallbackRequest.java
  10. 44
      dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/media/api/IHttpMediaService.java
  11. 12
      dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/storage/StsCredentialsResponse.java
  12. 4
      dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/storage/api/IHttpStorageService.java
  13. 6
      dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/tsa/TopologyList.java
  14. 5
      dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/tsa/api/IHttpTsaService.java
  15. 40
      dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/wayline/GetWaylineListResponse.java
  16. 14
      dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/wayline/api/IHttpWaylineService.java
  17. 2
      dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/config/version/Dock2ThingVersionEnum.java
  18. 47
      dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/config/version/Dock3ThingVersionEnum.java
  19. 4
      dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/config/version/DockThingVersionEnum.java
  20. 4
      dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/config/version/DroneThingVersionEnum.java
  21. 3
      dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/config/version/GatewayThingVersion.java
  22. 3
      dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/config/version/GatewayTypeEnum.java
  23. 4
      dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/mqtt/osd/OsdDeviceTypeEnum.java
  24. 1
      dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/mqtt/state/StateRouter.java
  25. 2
      dk-modules/sample/src/main/java/org/dromara/sample/manage/controller/DeviceController.java
  26. 2
      dk-modules/sample/src/main/java/org/dromara/sample/manage/controller/DeviceFirmwareController.java
  27. 6
      dk-modules/sample/src/main/java/org/dromara/sample/manage/controller/DeviceHmsController.java
  28. 27
      dk-modules/sample/src/main/java/org/dromara/sample/manage/controller/DeviceLogsController.java
  29. 8
      dk-modules/sample/src/main/java/org/dromara/sample/manage/controller/LiveStreamController.java
  30. 1
      dk-modules/sample/src/main/java/org/dromara/sample/manage/controller/WorkspaceController.java
  31. 24
      dk-modules/sample/src/main/java/org/dromara/sample/manage/model/dto/DeviceDTO.java
  32. 13
      dk-modules/sample/src/main/java/org/dromara/sample/manage/model/dto/DeviceFirmwareDTO.java
  33. 3
      dk-modules/sample/src/main/java/org/dromara/sample/manage/model/dto/DeviceFirmwareNoteDTO.java
  34. 14
      dk-modules/sample/src/main/java/org/dromara/sample/manage/model/dto/DeviceHmsDTO.java
  35. 11
      dk-modules/sample/src/main/java/org/dromara/sample/manage/model/dto/DeviceLogsDTO.java
  36. 6
      dk-modules/sample/src/main/java/org/dromara/sample/manage/model/dto/DevicePayloadDTO.java
  37. 5
      dk-modules/sample/src/main/java/org/dromara/sample/manage/model/dto/LiveTypeDTO.java
  38. 10
      dk-modules/sample/src/main/java/org/dromara/sample/manage/model/entity/DeviceEntity.java
  39. 7
      dk-modules/sample/src/main/java/org/dromara/sample/manage/model/entity/DeviceFirmwareEntity.java
  40. 5
      dk-modules/sample/src/main/java/org/dromara/sample/manage/model/entity/DeviceHmsEntity.java
  41. 8
      dk-modules/sample/src/main/java/org/dromara/sample/manage/model/entity/DeviceLogsEntity.java
  42. 4
      dk-modules/sample/src/main/java/org/dromara/sample/manage/model/enums/DeviceFirmwareStatusEnum.java
  43. 3
      dk-modules/sample/src/main/java/org/dromara/sample/manage/model/param/DeviceLogsCreateParam.java
  44. 11
      dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/DeviceFirmwareServiceImpl.java
  45. 13
      dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/DeviceHmsServiceImpl.java
  46. 5
      dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/DeviceLogsServiceImpl.java
  47. 12
      dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/DeviceServiceImpl.java
  48. 7
      dk-modules/sample/src/main/java/org/dromara/sample/map/controller/DeviceDataController.java
  49. 35
      dk-modules/sample/src/main/java/org/dromara/sample/map/controller/FlightAreaController.java
  50. 9
      dk-modules/sample/src/main/java/org/dromara/sample/map/controller/WorkspaceElementController.java
  51. 6
      dk-modules/sample/src/main/java/org/dromara/sample/map/model/dto/FlightAreaDTO.java
  52. 6
      dk-modules/sample/src/main/java/org/dromara/sample/map/model/dto/FlightAreaWs.java
  53. 6
      dk-modules/sample/src/main/java/org/dromara/sample/map/model/dto/GroupElementDTO.java
  54. 5
      dk-modules/sample/src/main/java/org/dromara/sample/map/model/entity/GroupElementEntity.java
  55. 16
      dk-modules/sample/src/main/java/org/dromara/sample/map/service/impl/FlightAreaServiceImpl.java
  56. 21
      dk-modules/sample/src/main/java/org/dromara/sample/media/controller/FileController.java
  57. 26
      dk-modules/sample/src/main/java/org/dromara/sample/media/controller/MediaController.java
  58. 13
      dk-modules/sample/src/main/java/org/dromara/sample/media/model/MediaFileDTO.java
  59. 5
      dk-modules/sample/src/main/java/org/dromara/sample/media/model/MediaFileEntity.java
  60. 3
      dk-modules/sample/src/main/java/org/dromara/sample/media/service/impl/FileServiceImpl.java
  61. 6
      dk-modules/sample/src/main/java/org/dromara/sample/storage/controller/StorageController.java
  62. 57
      dk-modules/sample/src/main/java/org/dromara/sample/wayline/controller/WaylineFileController.java
  63. 4
      dk-visual/nacos/src/main/resources/application.properties
  64. 2
      pom.xml

12
dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/device/DeviceEnum.java

@ -1,9 +1,9 @@
package org.dromara.common.sdk.cloudapi.device;
import org.dromara.common.sdk.exception.CloudSDKException;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonValue;
import io.swagger.v3.oas.annotations.media.Schema;
import org.dromara.common.sdk.exception.CloudSDKException;
import java.util.Arrays;
@ -69,6 +69,8 @@ public enum DeviceEnum {
DOCK2(DeviceDomainEnum.DOCK, DeviceTypeEnum.DOCK2, DeviceSubTypeEnum.ZERO),
DOCK3(DeviceDomainEnum.DOCK, DeviceTypeEnum.DOCK3, DeviceSubTypeEnum.ZERO),
M3D(DeviceDomainEnum.DRONE, DeviceTypeEnum.M3D, DeviceSubTypeEnum.ZERO),
M3TD(DeviceDomainEnum.DRONE, DeviceTypeEnum.M3D, DeviceSubTypeEnum.ONE),
@ -76,6 +78,14 @@ public enum DeviceEnum {
M3D_CAMERA(DeviceDomainEnum.PAYLOAD, DeviceTypeEnum.M3D_CAMERA, DeviceSubTypeEnum.ZERO),
M3TD_CAMERA(DeviceDomainEnum.PAYLOAD, DeviceTypeEnum.M3TD_CAMERA, DeviceSubTypeEnum.ZERO),
M4D(DeviceDomainEnum.DRONE, DeviceTypeEnum.M4D, DeviceSubTypeEnum.ZERO),
M4TD(DeviceDomainEnum.DRONE, DeviceTypeEnum.M4D, DeviceSubTypeEnum.ONE),
M4D_CAMERA(DeviceDomainEnum.PAYLOAD, DeviceTypeEnum.M4D_CAMERA, DeviceSubTypeEnum.ZERO),
M4TD_CAMERA(DeviceDomainEnum.PAYLOAD, DeviceTypeEnum.M4TD_CAMERA, DeviceSubTypeEnum.ZERO),
;
@Schema(enumAsRef = true)

16
dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/device/DeviceTypeEnum.java

@ -1,9 +1,9 @@
package org.dromara.common.sdk.cloudapi.device;
import org.dromara.common.sdk.exception.CloudSDKException;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonValue;
import io.swagger.v3.oas.annotations.media.Schema;
import org.dromara.common.sdk.exception.CloudSDKException;
import java.util.Arrays;
@ -57,15 +57,29 @@ public enum DeviceTypeEnum {
RC_PRO(144),
M4E_CAMERA(88),
M4M_CAMERA(89),
DOCK(1),
DOCK2(2),
DOCK3(3),
M3D(91),
M3D_CAMERA(80),
M3TD_CAMERA(81),
M4D(100),
M4D_CAMERA(98),
M4TD_CAMERA(99),
TEST(1767)
;
private final int type;

4
dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/map/CreateMapElementRequest.java

@ -16,10 +16,10 @@ public class CreateMapElementRequest {
@NotNull
@Pattern(regexp = "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$")
@Schema(description = "element id", format = "uuid")
@Schema(description = "元素id", format = "uuid")
private String id;
@Schema(description = "element name", example = "PILOT 1")
@Schema(description = "元素name", example = "PILOT 1")
@NotNull
private String name;

16
dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/map/MapElementCreateWsResponse.java

@ -8,6 +8,8 @@ import jakarta.validation.constraints.Min;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Pattern;
import java.util.Date;
/**
* @author sean
@ -35,14 +37,12 @@ public class MapElementCreateWsResponse extends BaseModel {
@NotNull
@Schema(description = "element create time", example = "123456789012")
@JsonProperty(value = "create_time")
@Min(123456789012L)
private Long createTime;
private Date createTime;
@NotNull
@Schema(description = "element update time", example = "123456789012")
@JsonProperty(value = "update_time")
@Min(123456789012L)
private Long updateTime;
private Date updateTime;
@NotNull
@Valid
@ -81,20 +81,20 @@ public class MapElementCreateWsResponse extends BaseModel {
return this;
}
public Long getCreateTime() {
public Date getCreateTime() {
return createTime;
}
public MapElementCreateWsResponse setCreateTime(Long createTime) {
public MapElementCreateWsResponse setCreateTime(Date createTime) {
this.createTime = createTime;
return this;
}
public Long getUpdateTime() {
public Date getUpdateTime() {
return updateTime;
}
public MapElementCreateWsResponse setUpdateTime(Long updateTime) {
public MapElementCreateWsResponse setUpdateTime(Date updateTime) {
this.updateTime = updateTime;
return this;
}

16
dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/map/MapElementUpdateWsResponse.java

@ -8,6 +8,8 @@ import jakarta.validation.constraints.Min;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Pattern;
import java.util.Date;
/**
* @author sean
* @version 1.7
@ -34,14 +36,12 @@ public class MapElementUpdateWsResponse extends BaseModel {
@NotNull
@Schema(description = "element create time", example = "123456789012")
@JsonProperty(value = "create_time")
@Min(123456789012L)
private Long createTime;
private Date createTime;
@NotNull
@Schema(description = "element update time", example = "123456789012")
@JsonProperty(value = "update_time")
@Min(123456789012L)
private Long updateTime;
private Date updateTime;
@NotNull
@Valid
@ -80,20 +80,20 @@ public class MapElementUpdateWsResponse extends BaseModel {
return this;
}
public Long getCreateTime() {
public Date getCreateTime() {
return createTime;
}
public MapElementUpdateWsResponse setCreateTime(Long createTime) {
public MapElementUpdateWsResponse setCreateTime(Date createTime) {
this.createTime = createTime;
return this;
}
public Long getUpdateTime() {
public Date getUpdateTime() {
return updateTime;
}
public MapElementUpdateWsResponse setUpdateTime(Long updateTime) {
public MapElementUpdateWsResponse setUpdateTime(Date updateTime) {
this.updateTime = updateTime;
return this;
}

20
dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/map/MapGroupElement.java

@ -7,6 +7,8 @@ import jakarta.validation.constraints.Min;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Pattern;
import java.util.Date;
/**
* @author sean
@ -26,16 +28,14 @@ public class MapGroupElement {
private String name;
@NotNull
@Schema(description = "element create time", example = "123456789012")
@Schema(description = "element 创建时间", example = "123456789012")
@JsonProperty(value = "create_time")
@Min(123456789012L)
private Long createTime;
private Date createTime;
@NotNull
@Schema(description = "element update time", example = "123456789012")
@Schema(description = "element 更新时间", example = "123456789012")
@JsonProperty(value = "update_time")
@Min(123456789012L)
private Long updateTime;
private Date updateTime;
@NotNull
@Valid
@ -73,20 +73,20 @@ public class MapGroupElement {
return this;
}
public Long getCreateTime() {
public Date getCreateTime() {
return createTime;
}
public MapGroupElement setCreateTime(Long createTime) {
public MapGroupElement setCreateTime(Date createTime) {
this.createTime = createTime;
return this;
}
public Long getUpdateTime() {
public Date getUpdateTime() {
return updateTime;
}
public MapGroupElement setUpdateTime(Long updateTime) {
public MapGroupElement setUpdateTime(Date updateTime) {
this.updateTime = updateTime;
return this;
}

4
dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/map/UpdateMapElementRequest.java

@ -10,10 +10,10 @@ import jakarta.validation.constraints.NotNull;
* @version 0.2
* @date 2021/12/1
*/
@Schema(description = "Update element request data")
@Schema(description = "更新元素请求数据")
public class UpdateMapElementRequest {
@Schema(description = "element name", example = "PILOT 1")
@Schema(description = "元素name", example = "PILOT 1")
@NotNull
private String name;

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

@ -21,12 +21,14 @@ import java.util.List;
* @version 0.2
* @date 2021/11/29
*/
@Tag(name = "map interface")
@Tag(name = "地图界面")
public interface IHttpMapService {
String PREFIX = "map/api/v1";
/**
* 在第一次连接中飞行员将发送此 HTTP 请求以获取组元素列表同样如果飞行员从WebSocket接收到组刷新指令
* 它需要相同的接口来请求组元素列表
* In the first connection, pilot will send out this http request to get the group element list.
* Also, if pilot receives a group refresh instruction from WebSocket,
* it needs the same interface to request the group element list.
@ -37,25 +39,23 @@ public interface IHttpMapService {
* @param rsp
* @return
*/
@Operation(summary = "get map elements", description = "In the first connection, pilot will send out this http " +
"request to get the group element list. Also, if pilot receives a group refresh instruction from " +
"WebSocket, it needs the same interface to request the group element list.",
@Operation(summary = "获取地图元素", description = "在第一个连接中,试点将发送此http请求以获取组元素列表+此外,如果导引器从“+”WebSocket接收到组刷新指令,则需要相同的接口来请求组元素列表。",
parameters = {
@Parameter(name = "workspace_id", description = "workspace id", schema = @Schema(format = "uuid")),
@Parameter(name = "group_id", description = "element group id. The same element group can contain " +
"multiple map elements, which is equivalent to grouping map elements. " +
"When initiating the request, if the group id parameter is not included, " +
"the server needs to return all map elements. If the group id is specified, " +
"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 = "workspace_id", description = "工作区标识id", schema = @Schema(format = "uuid")),
@Parameter(name = "group_id", description = "元素组 ID。同一个元素组可以包含多个地图元素这相当于对地图元素进行分组。" +
"在发起请求时,如果未包含 group_id 参数,服务器需要返回所有地图元素。如果指定了group_id," +
"它只需要返回指定元素组中的元素集", schema = @Schema(format = "uuid")),
@Parameter(name = "is_distributed", description = "元素组是否已分配:")
})
@GetMapping(PREFIX + "/workspaces/element-groups")
HttpResultResponse<List<GetMapElementsResponse>> getMapElements(
@PathVariable(name = "workspace_id") String workspaceId,
@RequestParam(name = "group_id", required = false) String groupId,
@RequestParam(name = "is_distributed", required = false) Boolean isDistributed,
HttpServletRequest req, HttpServletResponse rsp);
/**
* 当用户在PILOT/Web侧绘制点线或多边形时
* When user draws a point, line or polygon on the PILOT/Web side.
* @param workspaceId
* @param groupId
@ -64,14 +64,13 @@ public interface IHttpMapService {
* @param rsp
* @return
*/
@Operation(summary = "create map element", description = "When user draws a point, line or polygon on the PILOT/Web side.",
@Operation(summary = "创建地图元素", description = "当用户在PILOT/Web侧绘制点、线或多边形时。",
parameters = {
@Parameter(name = "workspace_id", description = "workspace id", schema = @Schema(format = "uuid")),
@Parameter(name = "group_id", description = "element group id. The same element group can contain " +
"multiple map elements, which is equivalent to grouping map elements. " +
"When initiating the request, if the group id parameter is not included, " +
"the server needs to return all map elements. If the group id is specified, " +
"it only needs to return the set of elements in the specified element group", schema = @Schema(format = "uuid"))
@Parameter(name = "workspace_id", description = "工作区标识id", schema = @Schema(format = "uuid")),
@Parameter(name = "group_id", description = "元素组ID。同一个元素组可以包含" +
"多个地图元素,这相当于将地图元素分组。" +
"在发起请求时,如果未包含组 ID 参数," +
"服务器需要返回所有地图元素。如果指定了组ID,“它只需要返回指定元素组中的元素集", schema = @Schema(format = "uuid"))
})
@PostMapping(PREFIX + "/workspaces/{workspace_id}/element-groups/{group_id}/elements")
HttpResultResponse<CreateMapElementResponse> createMapElement(
@ -82,6 +81,7 @@ public interface IHttpMapService {
/**
* 当用户在PILOT/Web侧编辑点线或多边形时
* When user edits a point, line or polygon on the PILOT/Web side.
* @param workspaceId
* @param elementId
@ -90,10 +90,10 @@ public interface IHttpMapService {
* @param rsp
* @return
*/
@Operation(summary = "update map element", description = "When user edits a point, line or polygon on the PILOT/Web side.",
@Operation(summary = "更新地图元素", description = "当用户在PILOT/Web侧编辑点、线或多边形时。",
parameters = {
@Parameter(name = "workspace_id", description = "workspace id", schema = @Schema(format = "uuid")),
@Parameter(name = "element_id", description = "element id", schema = @Schema(format = "uuid"))
@Parameter(name = "workspace_id", description = "工作区标识id", schema = @Schema(format = "uuid")),
@Parameter(name = "element_id", description = "元素 id", schema = @Schema(format = "uuid"))
})
@PutMapping(PREFIX + "/workspaces/{workspace_id}/elements/{element_id}")
HttpResultResponse updateMapElement(
@ -104,12 +104,13 @@ public interface IHttpMapService {
/**
* 当用户在PILOT/Web侧删除点线或多边形时
* When user delete a point, line or polygon on the PILOT/Web side.
* @param workspaceId
* @param elementId
* @return
*/
@Operation(summary = "delete map element", description = "When user delete a point, line or polygon on the PILOT/Web side.",
@Operation(summary = "删除map元素", description = "当用户在PILOT/Web侧删除点、线或多边形时。",
parameters = {
@Parameter(name = "workspace_id", description = "workspace id", schema = @Schema(format = "uuid")),
@Parameter(name = "element_id", description = "element id", schema = @Schema(format = "uuid"))

10
dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/media/MediaUploadCallbackRequest.java

@ -11,7 +11,7 @@ import jakarta.validation.constraints.NotNull;
* @version 0.2
* @date 2021/12/7
*/
@Schema(description = "media fast upload request data")
@Schema(description = "媒体快速上传请求数据")
public class MediaUploadCallbackRequest {
@NotNull
@ -19,19 +19,19 @@ public class MediaUploadCallbackRequest {
private MediaFileExtension ext;
@NotNull
@Schema(description = "media file fingerprint", example = "7F78C9F1999425CB61F10E1FE206009E")
@Schema(description = "媒体文件指纹", example = "7F78C9F1999425CB61F10E1FE206009E")
private String fingerprint;
@NotNull
@Schema(description = "media file name", example = "DJI_20220831151616_0004_W_Waypoint4.JPG")
@Schema(description = "媒体文件明皇朝", example = "DJI_20220831151616_0004_W_Waypoint4.JPG")
private String name;
@Schema(description = "media file path. This value is empty if the photo was not taken in the wayline.", example = "DJI_202208311455_008_Waypoint1")
@Schema(description = "媒体文件地址", example = "DJI_202208311455_008_Waypoint1")
private String path;
@JsonProperty("object_key")
@NotNull
@Schema(description = "The key of the object in the bucket", example = "media/DJI_20220831151616_0004_W_Waypoint4.JPG")
@Schema(description = "桶中文件的关链字", example = "media/DJI_20220831151616_0004_W_Waypoint4.JPG")
private String objectKey;
@Schema(type = "int")

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

@ -23,26 +23,33 @@ import org.springframework.web.bind.annotation.RequestBody;
* @version 0.2
* @date 2021/12/9
*/
@Tag(name = "media interface")
@Tag(name = "媒体接口")
public interface IHttpMediaService {
String PREFIX = "media/api/v1";
/**
* 检查文件是否已通过指纹上传
* Check if the file has been uploaded by the fingerprint.
* @param request
* @param req
* @param rsp
* @return
*/
@Operation(summary = "media fast upload", description = "Check if the file has been uploaded by the fingerprint.")
@PostMapping(PREFIX + "/workspace/fast-upload")
@Operation(summary = "媒体快速上传", description = "检查文件是否已通过指纹上传。",
parameters = {
@Parameter(name = "workspace_id", description = "workspace id", schema = @Schema(format = "uuid"))
})
@PostMapping(PREFIX + "/workspace/{workspace_id}/fast-upload")
HttpResultResponse mediaFastUpload(
@PathVariable(name = "workspace_id") String workspaceId,
@Valid @RequestBody MediaFastUploadRequest request,
HttpServletRequest req, HttpServletResponse rsp);
/**
* 当文件由飞行员上传到存储服务器时
* 通过此接口报告文件的基本信息
* When the file is uploaded to the storage server by pilot,
* the basic information of the file is reported through this interface.
* @param request
@ -50,9 +57,12 @@ public interface IHttpMediaService {
* @param rsp
* @return
*/
@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.",
responses = @ApiResponse(responseCode = "200", description = "OK",
@Operation(summary = "应用程序报告文件上传结果", description = "当文件由飞行员上传到存储服务器时, " +
"通过此接口报告文件的基本信息。",
parameters = {
@Parameter(name = "workspace_id", description = "workspace id", schema = @Schema(format = "uuid"))
},
responses = @ApiResponse(responseCode = "200", description = "OK",
content = @Content(mediaType = "application/json",
examples = {@ExampleObject(name = "responseObjectKey",
summary = "response object key",
@ -60,36 +70,46 @@ public interface IHttpMediaService {
value = "{\"code\": 0, \"message\":\"success\", \"data\": \"media/DJI_20220831151616_0004_W_Waypoint4.JPG\"}"
)})))
@PostMapping(PREFIX + "/workspaces/upload-callback")
@PostMapping(PREFIX + "/workspaces/{workspace_id}/upload-callback")
HttpResultResponse<String> mediaUploadCallback(
@PathVariable(name = "workspace_id") String workspaceId,
@Valid @RequestBody MediaUploadCallbackRequest request,
HttpServletRequest req, HttpServletResponse rsp);
/**
* 根据工作区ID和微小指纹集合查询此工作区中已存在的文件
* 主体中只有一个 tiny_fingerprint参数
* Query the files that already exist in this workspace based on the workspace id and the collection of tiny fingerprints.
* @param request There is only one tiny_fingerprint parameter in the body.
* @param req
* @param rsp
* @return
*/
@Operation(summary = "checks whether the file fingerprint exists", description = "Query the files that already exist in this " +
"workspace based on the workspace id and the collection of tiny fingerprints.")
@Operation(summary = "检查文件指纹是否存在", description = "查询已经存在于此处的文件" +
"基于工作区ID和微小指纹集合的工作区。", parameters = {
@Parameter(name = "workspace_id", description = "workspace id", schema = @Schema(format = "uuid"))
})
@PostMapping(PREFIX + "/workspaces/{workspace_id}/files/tiny-fingerprints")
HttpResultResponse<GetFileFingerprintResponse> getExistFileTinyFingerprint(
@PathVariable(name = "workspace_id") String workspaceId,
@Valid @RequestBody GetFileFingerprintRequest request,
HttpServletRequest req, HttpServletResponse rsp);
/**
* Report the upload status of the media files in the file group in real time.
* 实时报告文件组中媒体文件的上传状态
* @param request
* @param req
* @param rsp
* @return
*/
@Operation(summary = "callback after the file group upload complete", description = "Report the upload status of " +
"the media files in the file group in real time.")
@Operation(summary = "文件组上传完成后回调", description = "报告上传状态" +
"实时更新文件组中的媒体文件。",
parameters = {
@Parameter(name = "workspace_id", description = "workspace id", schema = @Schema(format = "uuid"))
})
@PostMapping(PREFIX + "/workspaces/{workspace_id}/group-upload-callback")
HttpResultResponse folderUploadCallback(
@PathVariable(name = "workspace_id") String workspaceId,
@Valid @RequestBody FolderUploadCallbackRequest request,
HttpServletRequest req, HttpServletResponse rsp);

12
dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/storage/StsCredentialsResponse.java

@ -13,33 +13,33 @@ import jakarta.validation.constraints.Pattern;
* @version 0.2
* @date 2021/12/7
*/
@Schema(description = "Temporary credential data")
@Schema(description = "临时凭证数据")
public class StsCredentialsResponse extends BaseModel {
@Schema(description = "bucket name", example = "bucket-api")
@Schema(description = "bucket桶名称", example = "bucket-api")
@NotNull
private String bucket;
@NotNull
@Valid
@Schema(description = "The token data of the temporary credential")
@Schema(description = "临时凭证的令牌数据")
private CredentialsToken credentials;
@NotNull
@Schema(description = "access domain name for external services", example = "https://oss-cn-hangzhou.aliyuncs.com")
@Schema(description = "访问域名以获取外部服务", example = "https://oss-cn-hangzhou.aliyuncs.com")
@Pattern(regexp = "^http[s]?://.*$")
private String endpoint;
@NotNull
@JsonProperty("object_key_prefix")
@Schema(description = "The folder path where the object needs to be stored.", example = "files/wayline")
@Schema(description = "对象需要存储的目录路径。", example = "files/wayline")
private String objectKeyPrefix;
@NotNull
private OssTypeEnum provider;
@NotNull
@Schema(description = "The region where the bucket is located.", example = "us-east-1")
@Schema(description = "桶所在的区域。", example = "us-east-1")
private String region;
public StsCredentialsResponse() {

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

@ -21,17 +21,19 @@ public interface IHttpStorageService {
String PREFIX = "storage/api/v1";
/**
* 在DJIPilot中获取上传媒体和路线的临时凭据
* Get temporary credentials for uploading the media and wayline in DJI Pilot.
* @param req
* @param rsp
* @return
*/
@Operation(summary = "Get STS Token", description = "Get temporary credentials for uploading the media and wayline in DJI Pilot.",
@Operation(summary = "获取STS、Token", description = "获取临时凭据以在DJl Pilot中上传媒体和路标",
parameters = {
@Parameter(name = "workspace_id", description = "workspace id", schema = @Schema(format = "uuid"))
})
@PostMapping(PREFIX + "/workspaces/sts")
HttpResultResponse<StsCredentialsResponse> getTemporaryCredential(
@PathVariable(name = "workspace_id") String workspaceId,
HttpServletRequest req, HttpServletResponse rsp);
}

6
dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/tsa/TopologyList.java

@ -11,14 +11,14 @@ import java.util.List;
* @version 0.2
* @date 2021/12/8
*/
@Schema(description = "device topology list")
@Schema(description = "设备拓扑列表")
public class TopologyList {
@Schema(description = "drone device topology collection")
@Schema(description = "无人机设备拓扑集台")
@NotNull
private List<@Valid DeviceTopology> hosts;
@Schema(description = "gateway device topology collection")
@Schema(description = "网关设备拓扑集合")
@NotNull
private List<@Valid DeviceTopology> parents;

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

@ -28,10 +28,7 @@ public interface IHttpTsaService {
* @param rsp
* @return
*/
@Operation(summary = "obtain device topology list", description = "Get the topology list of all devices in the current user workspace for pilot display." +
"In the first connection, DJI Pilot 2 will call this interface to obtain the list topology of all devices." +
"Also, when Pilot receives a websocket command to notify the device of online, offline, and update, " +
"it will also call this interface to request the device topology list to be updated.")
@Operation(summary = "获取设备拓扑列表", description = "在第一次连接时,DPilot2将调用此接口以获取当前用户工作区中所有设备的拓扑列表。")
@GetMapping(PREFIX + "/workspaces/devices/topologies")
HttpResultResponse<TopologyResponse> obtainDeviceTopologyList(
HttpServletRequest req, HttpServletResponse rsp);

40
dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/wayline/GetWaylineListResponse.java

@ -10,6 +10,8 @@ import jakarta.validation.constraints.Min;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Pattern;
import jakarta.validation.constraints.Size;
import java.util.Date;
import java.util.List;
/**
@ -17,14 +19,14 @@ import java.util.List;
* @version 0.3
* @date 2021/12/22
*/
@Schema(description = "The data of the wayline file.")
@Schema(description = "航线文件的数据。")
public class GetWaylineListResponse extends BaseModel {
/**
* wayline file name
*/
@NotNull
@Schema(description = "wayline file name", example = "waylineFile")
@Schema(description = "航线文件名称", example = "waylineFile")
@Pattern(regexp = "^[^<>:\"/|?*._\\\\]+$")
private String name;
@ -33,7 +35,7 @@ public class GetWaylineListResponse extends BaseModel {
*/
@NotNull
@Pattern(regexp = "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$")
@Schema(description = "wayline file id", format = "uuid")
@Schema(description = "航线文件id", format = "uuid")
private String id;
/**
@ -41,7 +43,7 @@ public class GetWaylineListResponse extends BaseModel {
*/
@NotNull
@JsonProperty("drone_model_key")
@Schema(description = "drone device product enum", example = "0-67-0")
@Schema(description = "无人机设备产品枚举", example = "0-67-0")
private DeviceEnum droneModelKey;
private String sign;
@ -52,14 +54,14 @@ public class GetWaylineListResponse extends BaseModel {
@NotNull
@Size(min = 1)
@JsonProperty("payload_model_keys")
@Schema(description = "payload device product enum", example = "[\"1-53-0\"]")
@Schema(description = "有效负载设备产品枚举", example = "[\"1-53-0\"]")
private List<DeviceEnum> payloadModelKeys;
/**
* Is the wayline file favorited?
*/
@NotNull
@Schema(description = "Is the wayline file favorited?")
@Schema(description = "路线文件是否被收藏?")
private Boolean favorited;
/**
@ -67,12 +69,12 @@ public class GetWaylineListResponse extends BaseModel {
*/
@NotNull
@Size(min = 1)
@Schema(description = "wayline template collection", example = "[0]")
@Schema(description = "wayline 模板集合", example = "[0]")
@JsonProperty("template_types")
private List<WaylineTypeEnum> templateTypes;
@NotNull
@Schema(description = "The key of the object in the bucket", example = "wayline/waylineFile.kmz")
@Schema(description = "桶中的对象键", example = "wayline/waylineFile.kmz")
@JsonProperty("object_key")
private String objectKey;
@ -81,29 +83,27 @@ public class GetWaylineListResponse extends BaseModel {
*/
@NotNull
@JsonProperty("user_name")
@Schema(description = "uploader's username", example = "admin")
@Schema(description = "上传者的用户名", example = "admin")
private String username;
/**
* update time (millisecond)
*/
@NotNull
@Min(123456789012L)
@Schema(description = "update time (millisecond). The field named `update time` must exist in the table.", example = "123456789012")
@Schema(description = "更新时间(毫秒)。名为`更新时间`的字段必须在表中存在", example = "123456789012")
@JsonProperty("update_time")
private Long updateTime;
private Date updateTime;
/**
* create time (millisecond)
*/
@NotNull
@Min(123456789012L)
@Schema(description = "create time (millisecond). The field named `create time` must exist in the table.", example = "123456789012")
@Schema(description = "创建时间(毫秒)。名为`创建时间`的字段必须在表中存在。.", example = "123456789012")
@JsonProperty("create_time")
private Long createTime;
private Date createTime;
@JsonProperty("action_type")
@Parameter(name = "action_type", description = "wayline template type collection", example = "1")
@Parameter(name = "action_type", description = "路线模板类型集合", example = "1")
private ActionTypeEnum actionType;
public GetWaylineListResponse() {
@ -208,20 +208,20 @@ public class GetWaylineListResponse extends BaseModel {
return this;
}
public Long getUpdateTime() {
public Date getUpdateTime() {
return updateTime;
}
public GetWaylineListResponse setUpdateTime(Long updateTime) {
public GetWaylineListResponse setUpdateTime(Date updateTime) {
this.updateTime = updateTime;
return this;
}
public Long getCreateTime() {
public Date getCreateTime() {
return createTime;
}
public GetWaylineListResponse setCreateTime(Long createTime) {
public GetWaylineListResponse setCreateTime(Date createTime) {
this.createTime = createTime;
return this;
}

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

@ -31,6 +31,8 @@ public interface IHttpWaylineService {
String PREFIX = "wayline/api/v1";
/**
* 根据查询条件查询路径文件的基本数据
* Pilot中的查询条件字段是固定的
* Query the basic data of the wayline file according to the query conditions.
* The query condition field in pilot is fixed.
* @param request get waylines params
@ -43,6 +45,7 @@ public interface IHttpWaylineService {
@GetMapping(PREFIX + "/workspaces/waylines")
HttpResultResponse<PaginationData<GetWaylineListResponse>> getWaylineList(
@Valid @ParameterObject GetWaylineListRequest request,
@PathVariable(name = "workspace_id") String workspaceId,
HttpServletRequest req, HttpServletResponse rsp);
/**
@ -59,6 +62,7 @@ public interface IHttpWaylineService {
@GetMapping(PREFIX + "/workspaces/{workspace_id}/waylines/{wayline_id}/url")
void getWaylineFileDownloadAddress(
@PathVariable(name = "wayline_id") String waylineId,
@PathVariable(name = "workspace_id") String workspaceId,
HttpServletRequest req, HttpServletResponse rsp);
/**
@ -75,8 +79,9 @@ public interface IHttpWaylineService {
parameters = {
@Parameter(name = "name", description = "wayline file name", required = true)
})
@GetMapping(PREFIX + "/workspaces/waylines/duplicate-names")
@GetMapping(PREFIX + "/workspaces/{workspace_id}/waylines/duplicate-names")
HttpResultResponse<List<String>> getDuplicatedWaylineName(
@PathVariable(name = "workspace_id") String workspaceId,
@NotNull @Size(min = 1) @RequestParam(name = "name") List<String> names,
HttpServletRequest req, HttpServletResponse rsp);
@ -90,8 +95,9 @@ public interface IHttpWaylineService {
*/
@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.")
@PostMapping(PREFIX + "/workspaces/upload-callback")
@PostMapping(PREFIX + "/workspaces/{workspace_id}/upload-callback")
HttpResultResponse fileUploadResultReport(
@PathVariable(name = "workspace_id") String workspaceId,
@Valid @RequestBody WaylineUploadCallbackRequest request,
HttpServletRequest req, HttpServletResponse rsp);
@ -106,8 +112,9 @@ public interface IHttpWaylineService {
parameters = {
@Parameter(name = "id", description = "wayline id", required = true)
})
@PostMapping(PREFIX + "/workspaces/favorites")
@PostMapping(PREFIX + "/workspaces/{workspace_id}/favorites")
HttpResultResponse batchFavoritesWayline(
@PathVariable(name = "workspace_id") String workspaceId,
@NotNull @Size(min = 1) @RequestParam(name = "id") List<String> ids,
HttpServletRequest req, HttpServletResponse rsp);
@ -124,6 +131,7 @@ public interface IHttpWaylineService {
})
@DeleteMapping(PREFIX + "/workspaces/{workspace_id}/favorites")
HttpResultResponse batchUnfavoritesWayline(
@PathVariable(name = "workspace_id") String workspaceId,
@NotNull @Size(min = 1) @RequestParam(name = "id") List<String> ids,
HttpServletRequest req, HttpServletResponse rsp);
}

2
dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/config/version/Dock2ThingVersionEnum.java

@ -1,7 +1,7 @@
package org.dromara.common.sdk.config.version;
import org.dromara.common.sdk.exception.CloudSDKVersionException;
import com.fasterxml.jackson.annotation.JsonValue;
import org.dromara.common.sdk.exception.CloudSDKVersionException;
import java.util.Arrays;

47
dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/config/version/Dock3ThingVersionEnum.java

@ -0,0 +1,47 @@
package org.dromara.common.sdk.config.version;
import com.fasterxml.jackson.annotation.JsonValue;
import org.dromara.common.sdk.exception.CloudSDKVersionException;
import java.util.Arrays;
/**
* @author sean
* @version 1.7
* @date 2023/9/7
*/
public enum Dock3ThingVersionEnum implements IThingVersion {
V1_1_2("1.1.2", CloudSDKVersionEnum.V1_0_1),
V1_2_0("1.2.0", CloudSDKVersionEnum.V1_0_3),
V1_2_3("1.2.3", CloudSDKVersionEnum.V1_0_3),
V1_3_0("1.3.0", CloudSDKVersionEnum.V1_0_3),
V1_3_1("1.3.1", CloudSDKVersionEnum.V1_3_1),
;
private final String thingVersion;
private final CloudSDKVersionEnum cloudSDKVersion;
Dock3ThingVersionEnum(String thingVersion, CloudSDKVersionEnum cloudSDKVersion) {
this.thingVersion = thingVersion;
this.cloudSDKVersion = cloudSDKVersion;
}
@JsonValue
public String getThingVersion() {
return thingVersion;
}
public CloudSDKVersionEnum getCloudSDKVersion() {
return cloudSDKVersion;
}
public static Dock3ThingVersionEnum find(String thingVersion) {
return Arrays.stream(values()).filter(thingVersionEnum -> thingVersionEnum.thingVersion.equals(thingVersion))
.findAny().orElseThrow(() -> new CloudSDKVersionException(thingVersion));
}
}

4
dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/config/version/DockThingVersionEnum.java

@ -1,7 +1,7 @@
package org.dromara.common.sdk.config.version;
import org.dromara.common.sdk.exception.CloudSDKVersionException;
import com.fasterxml.jackson.annotation.JsonValue;
import org.dromara.common.sdk.exception.CloudSDKVersionException;
import java.util.Arrays;
@ -20,6 +20,8 @@ public enum DockThingVersionEnum implements IThingVersion {
V1_1_3("1.1.3", CloudSDKVersionEnum.V1_0_2),
V1_2_3("1.2.3", CloudSDKVersionEnum.V1_0_3),
;
private final String thingVersion;

4
dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/config/version/DroneThingVersionEnum.java

@ -1,7 +1,7 @@
package org.dromara.common.sdk.config.version;
import org.dromara.common.sdk.exception.CloudSDKVersionException;
import com.fasterxml.jackson.annotation.JsonValue;
import org.dromara.common.sdk.exception.CloudSDKVersionException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@ -25,6 +25,8 @@ public enum DroneThingVersionEnum implements IThingVersion {
V1_2_0("1.2.0", CloudSDKVersionEnum.V1_0_3),
V1_2_3("1.2.3", CloudSDKVersionEnum.V1_0_3),
V1_3_0("1.3.0", CloudSDKVersionEnum.V1_0_3),
V1_3_1("1.3.1", CloudSDKVersionEnum.V1_3_1),

3
dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/config/version/GatewayThingVersion.java

@ -21,6 +21,9 @@ public class GatewayThingVersion {
case DOCK2:
this.thingVersion = Dock2ThingVersionEnum.find(thingVersion);
return;
case DOCK3:
this.thingVersion = Dock3ThingVersionEnum.find(thingVersion);
return;
case RC:
this.thingVersion = RcThingVersionEnum.find(thingVersion);
return;

3
dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/config/version/GatewayTypeEnum.java

@ -1,5 +1,6 @@
package org.dromara.common.sdk.config.version;
import org.dromara.common.sdk.cloudapi.device.DeviceEnum;
import org.dromara.common.sdk.exception.CloudSDKException;
@ -17,6 +18,8 @@ public enum GatewayTypeEnum {
DOCK(DeviceEnum.DOCK),
DOCK2(DeviceEnum.DOCK2),
DOCK3(DeviceEnum.DOCK3),
;
private final DeviceEnum[] gateway;

4
dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/mqtt/osd/OsdDeviceTypeEnum.java

@ -22,11 +22,11 @@ public enum OsdDeviceTypeEnum {
RC(true, OsdRemoteControl.class, ChannelName.INBOUND_OSD_RC, GatewayTypeEnum.RC),
DOCK(true, OsdDock.class, ChannelName.INBOUND_OSD_DOCK, GatewayTypeEnum.DOCK, GatewayTypeEnum.DOCK2),
DOCK(true, OsdDock.class, ChannelName.INBOUND_OSD_DOCK, GatewayTypeEnum.DOCK, GatewayTypeEnum.DOCK2,GatewayTypeEnum.DOCK3),
RC_DRONE(false, OsdRcDrone.class, ChannelName.INBOUND_OSD_RC_DRONE, GatewayTypeEnum.RC),
DOCK_DRONE(false, OsdDockDrone.class, ChannelName.INBOUND_OSD_DOCK_DRONE, GatewayTypeEnum.DOCK, GatewayTypeEnum.DOCK2);
DOCK_DRONE(false, OsdDockDrone.class, ChannelName.INBOUND_OSD_DOCK_DRONE, GatewayTypeEnum.DOCK, GatewayTypeEnum.DOCK2,GatewayTypeEnum.DOCK3);
private final boolean gateway;

1
dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/mqtt/state/StateRouter.java

@ -81,6 +81,7 @@ public class StateRouter {
return RcStateDataKeyEnum.find(keys).getClassType();
case DOCK:
case DOCK2:
case DOCK3:
return DockStateDataKeyEnum.find(keys).getClassType();
default:
throw new CloudSDKException(CloudSDKErrorEnum.WRONG_DATA, "Unexpected value: " + SDKManager.getDeviceSDK(gatewaySn).getType());

2
dk-modules/sample/src/main/java/org/dromara/sample/manage/controller/DeviceController.java

@ -2,6 +2,7 @@ package org.dromara.sample.manage.controller;
import cn.dev33.satoken.annotation.SaCheckPermission;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.dromara.common.core.domain.R;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.satoken.utils.LoginHelper;
@ -30,6 +31,7 @@ import java.util.Optional;
@RestController
@Slf4j
@RequestMapping("${url.manage.prefix}${url.manage.version}/devices")
@Tag(name = "无人机设备模块")
public class DeviceController {
@Autowired

2
dk-modules/sample/src/main/java/org/dromara/sample/manage/controller/DeviceFirmwareController.java

@ -1,6 +1,7 @@
package org.dromara.sample.manage.controller;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.validation.Valid;
import jakarta.validation.constraints.NotNull;
@ -33,6 +34,7 @@ import java.util.stream.Collectors;
@RestController
@RequestMapping("${url.manage.prefix}${url.manage.version}/workspaces")
@Validated
@Tag(name = "无人机设备固件模块")
public class DeviceFirmwareController {
@Autowired

6
dk-modules/sample/src/main/java/org/dromara/sample/manage/controller/DeviceHmsController.java

@ -1,5 +1,7 @@
package org.dromara.sample.manage.controller;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.dromara.common.sdk.common.HttpResultResponse;
import org.dromara.common.sdk.common.PaginationData;
import org.dromara.sample.manage.model.dto.DeviceHmsDTO;
@ -22,6 +24,7 @@ import java.util.Set;
@RestController
@Slf4j
@RequestMapping("${url.manage.prefix}${url.manage.version}/devices")
@Tag(name = "无人机设备hms模块")
public class DeviceHmsController {
@Autowired
@ -33,6 +36,7 @@ public class DeviceHmsController {
* @return
*/
@GetMapping("/{workspace_id}/devices/hms")
@Operation(summary = "分页查询设备hms信息的页面。", description = "分页查询设备hms信息的页面。")
public HttpResultResponse<PaginationData<DeviceHmsDTO>> getHmsInformation( @PathVariable("workspace_id") String workspaceId,DeviceHmsQueryParam param) {
PaginationData<DeviceHmsDTO> devices = deviceHmsService.getDeviceHmsByParam(param);
@ -45,6 +49,7 @@ public class DeviceHmsController {
* @param deviceSn
* @return
*/
@Operation(summary = "将未读hms消息更新为已读状态。", description = "将未读hms消息更新为已读状态。")
@PutMapping("/{workspace_id}/devices/hms/{device_sn}")
public HttpResultResponse updateReadHmsByDeviceSn(@PathVariable("device_sn") String deviceSn) {
deviceHmsService.updateUnreadHms(deviceSn);
@ -57,6 +62,7 @@ public class DeviceHmsController {
* @param deviceSn
* @return
*/
@Operation(summary = "获取单个设备的hms消息。", description = "获取单个设备的hms消息。")
@GetMapping("/{workspace_id}/devices/hms/{device_sn}")
public HttpResultResponse<List<DeviceHmsDTO>> getUnreadHmsByDeviceSn(@PathVariable("device_sn") String deviceSn) {
PaginationData<DeviceHmsDTO> paginationData = deviceHmsService.getDeviceHmsByParam(

27
dk-modules/sample/src/main/java/org/dromara/sample/manage/controller/DeviceLogsController.java

@ -1,5 +1,7 @@
package org.dromara.sample.manage.controller;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.dromara.common.satoken.utils.LoginHelper;
@ -29,6 +31,7 @@ import java.net.URL;
@RestController
@Slf4j
@RequestMapping("${url.manage.prefix}${url.manage.version}/workspaces")
@Tag(name = "无人机设备日志模块")
public class DeviceLogsController {
@Autowired
@ -42,6 +45,7 @@ public class DeviceLogsController {
* @return
*/
@GetMapping("/devices/{device_sn}/logs-uploaded")
@Operation(summary = "根据查询参数分页获取设备上传日志列表。", description = "根据查询参数分页获取设备上传日志列表。")
public HttpResultResponse getUploadedLogs(DeviceLogsQueryParam param,
@PathVariable("device_sn") String deviceSn) {
PaginationData<DeviceLogsDTO> data = deviceLogsService.getUploadedLogs(deviceSn, param);
@ -55,8 +59,9 @@ public class DeviceLogsController {
* @param param
* @return
*/
@GetMapping("/devices/{device_sn}/logs")
public HttpResultResponse getLogsBySn(
@Operation(summary = "获取可以实时上传的日志文件列表。", description = "获取可以实时上传的日志文件列表。")
@GetMapping("/{workspace_id}/devices/{device_sn}/logs")
public HttpResultResponse getLogsBySn(@PathVariable("workspace_id") String workspaceId,
@PathVariable("device_sn") String deviceSn,
DeviceLogsGetParam param) {
return deviceLogsService.getRealTimeLogs(deviceSn, param.getDomainList());
@ -67,8 +72,9 @@ public class DeviceLogsController {
* Initiate a log upload request to the gateway.
* @return
*/
@Operation(summary = "向网关发起日志上传请求。", description = "向网关发起日志上传请求。")
@PostMapping("/{workspace_id}/devices/{device_sn}/logs")
public HttpResultResponse uploadLogs(@PathVariable("device_sn") String deviceSn,
public HttpResultResponse uploadLogs(@PathVariable("workspace_id") String workspaceId,@PathVariable("device_sn") String deviceSn,
HttpServletRequest request, @RequestBody DeviceLogsCreateParam param) {
LoginUser loginUser = LoginHelper.getLoginUser();
@ -80,8 +86,9 @@ public class DeviceLogsController {
* Cancel logs file upload.
* @return
*/
@DeleteMapping("/devices/{device_sn}/logs")
public HttpResultResponse cancelUploadedLogs(@PathVariable("device_sn") String deviceSn,
@Operation(summary = "取消日志文件上传。", description = "取消日志文件上传。")
@DeleteMapping("/{workspace_id}/devices/{device_sn}/logs")
public HttpResultResponse cancelUploadedLogs(@PathVariable("workspace_id") String workspaceId,@PathVariable("device_sn") String deviceSn,
@RequestBody FileUploadUpdateRequest param) {
return deviceLogsService.pushUpdateFile(deviceSn, param);
@ -91,8 +98,9 @@ public class DeviceLogsController {
* 删除上传历史记录
* @return
*/
@DeleteMapping("/devices/{device_sn}/logs/{logs_id}")
public HttpResultResponse deleteUploadedLogs(@PathVariable("device_sn") String deviceSn,
@Operation(summary = "删除上传历史记录。", description = "删除上传历史记录。")
@DeleteMapping("/{workspace_id}/devices/{device_sn}/logs/{logs_id}")
public HttpResultResponse deleteUploadedLogs(@PathVariable("workspace_id") String workspaceId,@PathVariable("device_sn") String deviceSn,
@PathVariable("logs_id") String logsId) {
deviceLogsService.deleteLogs(deviceSn, logsId);
return HttpResultResponse.success();
@ -106,8 +114,9 @@ public class DeviceLogsController {
* @param logsId
* @param response
*/
@GetMapping("/logs/{logs_id}/url/{file_id}")
public HttpResultResponse getFileUrl(@PathVariable(name = "file_id") String fileId,
@Operation(summary = "根据航线文件id查询文件的下载地址。", description = "根据航线文件id查询文件的下载地址。")
@GetMapping("/{workspace_id}/logs/{logs_id}/url/{file_id}")
public HttpResultResponse getFileUrl(@PathVariable(name = "workspace_id") String workspaceId,@PathVariable(name = "file_id") String fileId,
@PathVariable(name = "logs_id") String logsId, HttpServletResponse response) {
try {

8
dk-modules/sample/src/main/java/org/dromara/sample/manage/controller/LiveStreamController.java

@ -1,5 +1,7 @@
package org.dromara.sample.manage.controller;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.servlet.http.HttpServletRequest;
import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.common.sdk.common.HttpResultResponse;
@ -23,6 +25,7 @@ import java.util.List;
@RestController
@Slf4j
@RequestMapping("${url.manage.prefix}${url.manage.version}/live")
@Tag(name = "无人机直播模块")
public class LiveStreamController {
@Autowired
@ -38,6 +41,7 @@ public class LiveStreamController {
* @return live capability 实时
*/
@GetMapping("/capacity")
@Operation(summary = "当前用户工作区中所有无人机的实时能力数据。", description = "当前用户工作区中所有无人机的实时能力数据。")
public HttpResultResponse<List<CapacityDeviceDTO>> getLiveCapacity(HttpServletRequest request) {
// Get information about the current user.
LoginUser loginUser = LoginHelper.getLoginUser();
@ -53,6 +57,7 @@ public class LiveStreamController {
* @return
*/
@PostMapping("/streams/start")
@Operation(summary = "启用直播", description = "启用直播")
public HttpResultResponse liveStart(@RequestBody LiveTypeDTO liveParam) {
return liveStreamService.liveStart(liveParam);
}
@ -64,6 +69,7 @@ public class LiveStreamController {
* @return
*/
@PostMapping("/streams/stop")
@Operation(summary = "停止直播", description = "停止直播")
public HttpResultResponse liveStop(@RequestBody LiveTypeDTO liveParam) {
return liveStreamService.liveStop(liveParam.getVideoId());
}
@ -75,11 +81,13 @@ public class LiveStreamController {
* @return
*/
@PostMapping("/streams/update")
@Operation(summary = "设置直播流的质量", description = "设置直播流的质量")
public HttpResultResponse liveSetQuality(@RequestBody LiveTypeDTO liveParam) {
return liveStreamService.liveSetQuality(liveParam);
}
@PostMapping("/streams/switch")
@Operation(summary = "设置直播流的广角、变焦、红外", description = "设置直播流的广角、变焦、红外")
public HttpResultResponse liveLensChange(@RequestBody LiveTypeDTO liveParam) {
return liveStreamService.liveLensChange(liveParam);
}

1
dk-modules/sample/src/main/java/org/dromara/sample/manage/controller/WorkspaceController.java

@ -28,6 +28,7 @@ import java.util.Optional;
*/
@RestController
@RequestMapping("${url.manage.prefix}${url.manage.version}/workspaces")
@Tag(name = "无人机工作区模块")
public class WorkspaceController extends BaseController {
@Autowired

24
dk-modules/sample/src/main/java/org/dromara/sample/manage/model/dto/DeviceDTO.java

@ -1,5 +1,6 @@
package org.dromara.sample.manage.model.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import org.dromara.common.sdk.cloudapi.device.ControlSourceEnum;
import org.dromara.common.sdk.cloudapi.device.DeviceDomainEnum;
import org.dromara.common.sdk.cloudapi.device.DeviceSubTypeEnum;
@ -26,51 +27,70 @@ import java.util.List;
@Builder
public class DeviceDTO {
@Schema(description = "设备SN:机场dock, 无人机drone, 遥控器remote_control")
private String deviceSn;
@Schema(description = "设备名称:此参数对应于设备字典表中的设备名称。")
private String deviceName;
@Schema(description = "当前设备所属的工作区。")
private String workspaceId;
@Schema(description = "无人机的控制,A控制或B控制。。")
private ControlSourceEnum controlSource;
@Schema(description = "备注。")
private String deviceDesc;
@Schema(description = "飞机设备SN")
private String childDeviceSn;
@Schema(description = "此参数对应于设备字典表中的域。")
private DeviceDomainEnum domain;
@Schema(description = "此参数对应于设备字典表中的设备类型。")
private DeviceTypeEnum type;
@Schema(description = "此参数对应于设备字典表中的子类型。")
private DeviceSubTypeEnum subType;
@Schema(description = "有效负载信息")
private List<DevicePayloadDTO> payloadsList;
private DeviceIconUrl iconUrl;
@Schema(description = "确定设备是否在线")
private Boolean status;
@Schema(description = "设备绑定到工作区时的状态。1:绑定;0:未绑定;")
private Boolean boundStatus;
@Schema(description = "最后一次设备登录的时间。")
private LocalDateTime loginTime;
@Schema(description = "设备绑定到工作区的时间。")
private LocalDateTime boundTime;
@Schema(description = "设备自定义名称")
private String nickname;
private String userId;
@Schema(description = "设备的固件版本")
private String firmwareVersion;
@Schema(description = "工作区名称")
private String workspaceName;
@Schema(description = "无人机信息")
private DeviceDTO children;
@Schema(description = "设备的固件版本升级状态")
private DeviceFirmwareStatusEnum firmwareStatus;
@Schema(description = "升级的阶段")
private Integer firmwareProgress;
private String parentSn;
@Schema(description = "设备枚举")
private String thingVersion;
}

13
dk-modules/sample/src/main/java/org/dromara/sample/manage/model/dto/DeviceFirmwareDTO.java

@ -1,11 +1,13 @@
package org.dromara.sample.manage.model.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.time.LocalDate;
import java.util.Date;
import java.util.List;
/**
@ -19,27 +21,36 @@ import java.util.List;
@NoArgsConstructor
public class DeviceFirmwareDTO {
@Schema(description = "固件uuid")
private String firmwareId;
@Schema(description = "固件包的文件名,包括文件后缀")
private String fileName;
@Schema(description = "根据官方固件版本进行格式化。00.00.0000")
private String productVersion;
@Schema(description = "桶中固件包的对象键。")
private String objectKey;
@Schema(description = "固件包的大小。")
private Long fileSize;
private String fileMd5;
private List<String> deviceName;
@Schema(description = "固件包的发布说明。")
private String releaseNote;
private LocalDate releasedTime;
@Schema(description = "固件包的发布日期。")
private Date releasedTime;
@Schema(description = "固件包的可用性。1:可用;0:不可用")
private Boolean firmwareStatus;
private String workspaceId;
@Schema(description = "创建人姓名")
private String username;
}

3
dk-modules/sample/src/main/java/org/dromara/sample/manage/model/dto/DeviceFirmwareNoteDTO.java

@ -6,6 +6,7 @@ import lombok.Data;
import lombok.NoArgsConstructor;
import java.time.LocalDate;
import java.util.Date;
/**
* @author sean
@ -24,5 +25,5 @@ public class DeviceFirmwareNoteDTO {
private String releaseNote;
private LocalDate releasedTime;
private Date releasedTime;
}

14
dk-modules/sample/src/main/java/org/dromara/sample/manage/model/dto/DeviceHmsDTO.java

@ -1,11 +1,13 @@
package org.dromara.sample.manage.model.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.time.LocalDateTime;
import java.util.Date;
/**
* @author sean
@ -20,25 +22,33 @@ public class DeviceHmsDTO implements Cloneable {
private String hmsId;
@Schema(description = "设备报告 HMS 消息时的tid。")
private String tid;
@Schema(description = "当设备报告 hms消息时的bid")
private String bid;
@Schema(description = "SN码")
private String sn;
@Schema(description = "HMS等级。0:注意;1:警告;2:警告")
private Integer level;
@Schema(description = "哪个模块的消息。0:飞行任务;1:设备管理;2:媒体;3:HMS")
private Integer module;
@Schema(description = "Hms消息的密钥,根据该密钥获取消息文本。")
private String key;
@Schema(description = "Chinese 异常日志")
private String messageZh;
@Schema(description = "English 异常日志")
private String messageEn;
private LocalDateTime createTime;
private Date createTime;
private LocalDateTime updateTime;
private Date updateTime;
@Override
public DeviceHmsDTO clone() {

11
dk-modules/sample/src/main/java/org/dromara/sample/manage/model/dto/DeviceLogsDTO.java

@ -1,5 +1,6 @@
package org.dromara.sample.manage.model.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
@ -7,6 +8,7 @@ import lombok.NoArgsConstructor;
import org.dromara.common.sdk.cloudapi.tsa.TopologyList;
import java.time.LocalDateTime;
import java.util.Date;
import java.util.List;
/**
@ -22,18 +24,23 @@ public class DeviceLogsDTO {
private String logsId;
private LocalDateTime happenTime;
@Schema(description = "日志记录问题发生的时间。")
private Date happenTime;
@Schema(description = "创建人")
private String userName;
private String logsInformation;
private LocalDateTime createTime;
private Date createTime;
@Schema(description = "1:上传中;2:完成;3:取消;4:失败;")
private Integer status;
@Schema(description = "设备拓扑列表")
private TopologyList deviceTopo;
@Schema(description = "日志进度")
private List<LogsProgressDTO> logsProgress;
private LogsFileUploadListDTO deviceLogs;

6
dk-modules/sample/src/main/java/org/dromara/sample/manage/model/dto/DevicePayloadDTO.java

@ -1,5 +1,6 @@
package org.dromara.sample.manage.model.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
@ -18,15 +19,20 @@ import org.dromara.common.sdk.cloudapi.device.PayloadIndex;
@AllArgsConstructor
public class DevicePayloadDTO {
@Schema(description = "设备有效载荷的sn值。")
private String payloadSn;
@Schema(description = "载荷模型。此参数对应于设备字典表中的设备名称。")
private String payloadName;
@Schema(description = "有效载荷在设备上的位置。")
private Integer index;
private String payloadDesc;
@Schema(description = "控制状态A控B控")
private ControlSourceEnum controlSource;
@Schema(description = "有效载荷在设备上的位置。")
private PayloadIndex payloadIndex;
}

5
dk-modules/sample/src/main/java/org/dromara/sample/manage/model/dto/LiveTypeDTO.java

@ -2,6 +2,7 @@ package org.dromara.sample.manage.model.dto;
import com.fasterxml.jackson.annotation.JsonProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import org.dromara.common.sdk.cloudapi.device.VideoId;
import org.dromara.common.sdk.cloudapi.livestream.LensChangeVideoTypeEnum;
@ -17,15 +18,19 @@ import org.dromara.common.sdk.cloudapi.livestream.VideoQualityEnum;
@Data
public class LiveTypeDTO {
@Schema(description = "直播协议类型(1:RTMP,2:GB28181,4:WebRTC)")
@JsonProperty("url_type")
private UrlTypeEnum urlType;
@Schema(description = "直播视频流的ID({sn}/{camera_index}/{video_index})")
@JsonProperty("video_id")
private VideoId videoId;
@Schema(description = "直播质量(0:自适应,1:流畅,2:标清,3:高清,4:超清)")
@JsonProperty("video_quality")
private VideoQualityEnum videoQuality;
@Schema(description = "镜头参数(wide:广角,zoom:变焦,ir:红外)")
private LensChangeVideoTypeEnum videoType;
}

10
dk-modules/sample/src/main/java/org/dromara/sample/manage/model/entity/DeviceEntity.java

@ -5,8 +5,11 @@ import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.common.tenant.core.TenantEntity;
import java.io.Serializable;
import java.time.LocalDateTime;
import java.util.Date;
/**
@ -68,9 +71,6 @@ public class DeviceEntity implements Serializable {
@TableField(value = "url_select")
private String urlSelect;
@TableField(value = "user_id")
private String userId;
@TableField(value = "nickname")
private String nickname;
@ -84,9 +84,9 @@ public class DeviceEntity implements Serializable {
private Boolean boundStatus;
@TableField(value = "bound_time")
private Long boundTime;
private LocalDateTime boundTime;
@TableField(value = "login_time")
private Long loginTime;
private LocalDateTime loginTime;
}

7
dk-modules/sample/src/main/java/org/dromara/sample/manage/model/entity/DeviceFirmwareEntity.java

@ -7,6 +7,7 @@ import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.util.Date;
/**
* @author sean
@ -50,7 +51,7 @@ public class DeviceFirmwareEntity implements Serializable {
private String releaseNote;
@TableField("release_date")
private Long releaseDate;
private Date releaseDate;
@TableField("status")
private Boolean status;
@ -62,9 +63,9 @@ public class DeviceFirmwareEntity implements Serializable {
private String username;
@TableField(value = "create_time", fill = FieldFill.INSERT)
private Long createTime;
private Date createTime;
@TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)
private Long updateTime;
private Date updateTime;
}

5
dk-modules/sample/src/main/java/org/dromara/sample/manage/model/entity/DeviceHmsEntity.java

@ -10,6 +10,7 @@ import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.util.Date;
/**
* @author sean
@ -56,10 +57,10 @@ public class DeviceHmsEntity implements Serializable, Cloneable {
private String messageEn;
@TableField("create_time")
private Long createTime;
private Date createTime;
@TableField("update_time")
private Long updateTime;
private Date updateTime;
@Override
public DeviceHmsEntity clone() {

8
dk-modules/sample/src/main/java/org/dromara/sample/manage/model/entity/DeviceLogsEntity.java

@ -7,6 +7,8 @@ import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.time.LocalDateTime;
import java.util.Date;
/**
* @author sean
@ -38,15 +40,15 @@ public class DeviceLogsEntity implements Serializable {
private String deviceSn;
@TableField("happen_time")
private Long happenTime;
private Date happenTime;
@TableField("status")
private Integer status;
@TableField(value = "create_time", fill = FieldFill.INSERT)
private Long createTime;
private Date createTime;
@TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)
private Long updateTime;
private Date updateTime;
}

4
dk-modules/sample/src/main/java/org/dromara/sample/manage/model/enums/DeviceFirmwareStatusEnum.java

@ -14,21 +14,25 @@ import java.util.Arrays;
public enum DeviceFirmwareStatusEnum {
/**
* 不需要升级
* no need to upgrade
*/
NOT_UPGRADE(1),
/**
* 需要升级
* to upgraded
*/
NORMAL_UPGRADE(2),
/**
* 需要一致性升级
* A consistency upgrade is required.
*/
CONSISTENT_UPGRADE(3),
/**
* 升级期间
* during upgrade
*/
UPGRADING(4),

3
dk-modules/sample/src/main/java/org/dromara/sample/manage/model/param/DeviceLogsCreateParam.java

@ -3,6 +3,7 @@ package org.dromara.sample.manage.model.param;
import lombok.Data;
import org.dromara.common.sdk.cloudapi.log.FileUploadStartFile;
import java.util.Date;
import java.util.List;
/**
@ -15,7 +16,7 @@ public class DeviceLogsCreateParam {
private String logsInformation;
private Long happenTime;
private Date happenTime;
private List<FileUploadStartFile> files;
}

11
dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/DeviceFirmwareServiceImpl.java

@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.dromara.common.core.utils.DateUtils;
import org.dromara.common.oss.core.OssClient;
import org.dromara.common.oss.factory.OssFactory;
import org.dromara.common.redis.config.RedisConst;
@ -268,9 +269,7 @@ public class DeviceFirmwareServiceImpl extends AbstractFirmwareService implement
date = date.substring(0, index);
}
return Optional.of(DeviceFirmwareDTO.builder()
.releasedTime(LocalDate.parse(
date,
DateTimeFormatter.ofPattern(FirmwareFileProperties.FILENAME_RELEASE_DATE_FORMAT)))
.releasedTime(DateUtils.dateTime(FirmwareFileProperties.FILENAME_RELEASE_DATE_FORMAT,date) )
// delete the string v.
.productVersion(filenameArr[FirmwareFileProperties.FILENAME_VERSION_INDEX].substring(1))
.build());
@ -296,7 +295,7 @@ public class DeviceFirmwareServiceImpl extends AbstractFirmwareService implement
.firmwareVersion(dto.getProductVersion())
.objectKey(dto.getObjectKey())
.releaseDate(Objects.nonNull(dto.getReleasedTime()) ?
dto.getReleasedTime().atStartOfDay(ZoneId.systemDefault()).toInstant().toEpochMilli() : null)
dto.getReleasedTime() : null)
.releaseNote(dto.getReleaseNote())
.status(dto.getFirmwareStatus())
.workspaceId(dto.getWorkspaceId())
@ -311,7 +310,7 @@ public class DeviceFirmwareServiceImpl extends AbstractFirmwareService implement
return DeviceFirmwareNoteDTO.builder()
.deviceName(entity.getDeviceName())
.productVersion(entity.getFirmwareVersion())
.releasedTime(LocalDate.ofInstant(Instant.ofEpochMilli(entity.getReleaseDate()), ZoneId.systemDefault()))
.releasedTime(entity.getReleaseDate())
.releaseNote(entity.getReleaseNote())
.build();
}
@ -328,7 +327,7 @@ public class DeviceFirmwareServiceImpl extends AbstractFirmwareService implement
.firmwareId(entity.getFirmwareId())
.fileName(entity.getFileName())
.productVersion(entity.getFirmwareVersion())
.releasedTime(LocalDate.ofInstant(Instant.ofEpochMilli(entity.getReleaseDate()), ZoneId.systemDefault()))
.releasedTime(entity.getReleaseDate())
.releaseNote(entity.getReleaseNote())
.firmwareStatus(entity.getStatus())
.workspaceId(entity.getWorkspaceId())

13
dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/DeviceHmsServiceImpl.java

@ -1,8 +1,10 @@
package org.dromara.sample.manage.service.impl;
import cn.hutool.core.date.DateUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.dromara.common.core.utils.DateUtils;
import org.dromara.common.sdk.cloudapi.device.DeviceDomainEnum;
import org.dromara.common.sdk.cloudapi.hms.*;
import org.dromara.common.sdk.cloudapi.hms.api.AbstractHmsService;
@ -71,8 +73,8 @@ public class DeviceHmsServiceImpl extends AbstractHmsService implements IDeviceH
DeviceHmsEntity entity = DeviceHmsEntity.builder()
.bid(response.getBid())
.tid(response.getTid())
.createTime(response.getTimestamp())
.updateTime(0L)
.createTime(new Date(response.getTimestamp()))
.updateTime(null)
.sn(sn)
.build();
// Query all unread hms messages of the device in redis.
@ -134,7 +136,7 @@ public class DeviceHmsServiceImpl extends AbstractHmsService implements IDeviceH
@Override
public void updateUnreadHms(String deviceSn) {
mapper.update(DeviceHmsEntity.builder().updateTime(System.currentTimeMillis()).build(),
mapper.update(DeviceHmsEntity.builder().updateTime(new Date()).build(),
new LambdaUpdateWrapper<DeviceHmsEntity>()
.eq(DeviceHmsEntity::getSn, deviceSn)
.eq(DeviceHmsEntity::getUpdateTime, 0L));
@ -149,9 +151,8 @@ public class DeviceHmsServiceImpl extends AbstractHmsService implements IDeviceH
return DeviceHmsDTO.builder()
.bid(entity.getBid())
.tid(entity.getTid())
.createTime(LocalDateTime.ofInstant(Instant.ofEpochMilli(entity.getCreateTime()), ZoneId.systemDefault()))
.updateTime(entity.getUpdateTime().intValue() == 0 ?
null : LocalDateTime.ofInstant(Instant.ofEpochMilli(entity.getUpdateTime()), ZoneId.systemDefault()))
.createTime(entity.getCreateTime())
.updateTime(entity.getUpdateTime())
.sn(entity.getSn())
.hmsId(entity.getHmsId())
.key(entity.getHmsKey())

5
dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/DeviceLogsServiceImpl.java

@ -298,9 +298,8 @@ public class DeviceLogsServiceImpl extends AbstractLogService implements IDevice
return DeviceLogsDTO.builder()
.logsId(entity.getLogsId())
.createTime(LocalDateTime.ofInstant(Instant.ofEpochMilli(entity.getCreateTime()), ZoneId.systemDefault()))
.happenTime(Objects.isNull(entity.getHappenTime()) ?
null : LocalDateTime.ofInstant(Instant.ofEpochMilli(entity.getHappenTime()), ZoneId.systemDefault()))
.createTime(entity.getCreateTime())
.happenTime(entity.getHappenTime())
.status(entity.getStatus())
.logsInformation(entity.getLogsInfo())
.userName(entity.getUsername())

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

@ -288,7 +288,6 @@ public class DeviceServiceImpl implements IDeviceService {
.setUserCallsign(device.getNickname())
.setBoundStatus(device.getBoundStatus())
.setModel(device.getDeviceName())
.setUserId(device.getUserId())
.setDomain(device.getDomain())
.setGatewaySn(device.getParentSn());
}
@ -367,10 +366,9 @@ public class DeviceServiceImpl implements IDeviceService {
.setSelectIconUrl(entity.getUrlSelect()))
.boundStatus(entity.getBoundStatus())
.loginTime(entity.getLoginTime() != null ?
LocalDateTime.ofInstant(Instant.ofEpochMilli(entity.getLoginTime()), ZoneId.systemDefault())
entity.getLoginTime()
: null)
.boundTime(entity.getBoundTime() != null ?
LocalDateTime.ofInstant(Instant.ofEpochMilli(entity.getBoundTime()), ZoneId.systemDefault())
.boundTime(entity.getBoundTime() != null ?entity.getBoundTime()
: null)
.nickname(entity.getNickname())
.firmwareVersion(entity.getFirmwareVersion())
@ -498,7 +496,6 @@ public class DeviceServiceImpl implements IDeviceService {
DeviceDTO device = DeviceDTO.builder()
.deviceSn(deviceSn)
.workspaceId("")
.userId("")
.boundStatus(false)
.build();
this.updateDevice(device);
@ -657,7 +654,6 @@ public class DeviceServiceImpl implements IDeviceService {
.map(ControlSourceEnum::getControlSource).orElse(null))
.deviceName(dto.getDeviceName())
.version(dto.getThingVersion())
.userId(dto.getUserId())
.nickname(dto.getNickname())
.workspaceId(dto.getWorkspaceId())
.boundStatus(dto.getBoundStatus())
@ -665,9 +661,9 @@ public class DeviceServiceImpl implements IDeviceService {
.deviceType(Optional.ofNullable(dto.getType()).map(DeviceTypeEnum::getType).orElse(null))
.subType(Optional.ofNullable(dto.getSubType()).map(DeviceSubTypeEnum::getSubType).orElse(null))
.loginTime(dto.getLoginTime() != null ?
dto.getLoginTime().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli() : null)
dto.getLoginTime() : null)
.boundTime(dto.getBoundTime() != null ?
dto.getBoundTime().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli() : null)
dto.getBoundTime() : null)
.childSn(dto.getChildDeviceSn())
.firmwareVersion(dto.getFirmwareVersion())
.compatibleStatus(dto.getFirmwareStatus() == null ? null :

7
dk-modules/sample/src/main/java/org/dromara/sample/map/controller/DeviceDataController.java

@ -26,9 +26,8 @@ public class DeviceDataController {
@Autowired
private IDeviceDataService deviceDataService;
@GetMapping("/device-status")
public HttpResultResponse<List<DeviceDataStatusDTO>> getDeviceFlightAreaStatus() {
LoginUser loginUser = LoginHelper.getLoginUser();
return HttpResultResponse.success(deviceDataService.getDevicesDataStatus(loginUser.getTenantId()));
@GetMapping("/{workspace_id}/device-status")
public HttpResultResponse<List<DeviceDataStatusDTO>> getDeviceFlightAreaStatus(@PathVariable(name = "workspace_id") String workspaceId) {
return HttpResultResponse.success(deviceDataService.getDevicesDataStatus(workspaceId));
}
}

35
dk-modules/sample/src/main/java/org/dromara/sample/map/controller/FlightAreaController.java

@ -1,5 +1,7 @@
package org.dromara.sample.map.controller;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.validation.Valid;
import org.dromara.common.satoken.utils.LoginHelper;
@ -23,43 +25,46 @@ import java.util.List;
*/
@RestController
@RequestMapping("${url.map.prefix}${url.map.version}/workspaces")
@Tag(name = "无人机区域文件模块")
public class FlightAreaController {
@Autowired
private IFlightAreaService flightAreaService;
@GetMapping("/{workspace_id}/flight-areas")
public HttpResultResponse<List<FlightAreaDTO>> getFlightAreas() {
LoginUser loginUser = LoginHelper.getLoginUser();
return HttpResultResponse.success(flightAreaService.getFlightAreaList(loginUser.getTenantId()));
@Operation(summary = "获取区域信息", description = "获取区域信息")
public HttpResultResponse<List<FlightAreaDTO>> getFlightAreas(@PathVariable(name = "workspace_id") String workspaceId) {
return HttpResultResponse.success(flightAreaService.getFlightAreaList(workspaceId));
}
@PostMapping("/flight-area")
public HttpResultResponse createFlightArea(@Valid @RequestBody PostFlightAreaParam param, HttpServletRequest req) {
@PostMapping("/{workspace_id}/flight-area")
@Operation(summary = "创建区域信息", description = "创建区域信息")
public HttpResultResponse createFlightArea(@PathVariable(name = "workspace_id") String workspaceId,
@Valid @RequestBody PostFlightAreaParam param, HttpServletRequest req) {
LoginUser loginUser = LoginHelper.getLoginUser();
flightAreaService.createFlightArea(loginUser.getTenantId(), loginUser.getUsername(), param);
flightAreaService.createFlightArea(workspaceId, loginUser.getUsername(), param);
return HttpResultResponse.success();
}
@DeleteMapping("/flight-area/{area_id}")
public HttpResultResponse deleteFlightArea(@PathVariable(name = "area_id") String areaId) {
LoginUser loginUser = LoginHelper.getLoginUser();
flightAreaService.deleteFlightArea(loginUser.getTenantId(), areaId);
@Operation(summary = "删除区域信息", description = "删除区域信息")
public HttpResultResponse deleteFlightArea(@PathVariable(name = "workspace_id") String workspaceId,@PathVariable(name = "area_id") String areaId) {
flightAreaService.deleteFlightArea(workspaceId, areaId);
return HttpResultResponse.success();
}
@PutMapping("/flight-area/{area_id}")
public HttpResultResponse updateFlightArea(@PathVariable(name = "area_id") String areaId,
@Operation(summary = "更新区域信息", description = "更新区域信息")
public HttpResultResponse updateFlightArea(@PathVariable(name = "workspace_id") String workspaceId,@PathVariable(name = "area_id") String areaId,
@RequestBody PutFlightAreaParam param) {
LoginUser loginUser = LoginHelper.getLoginUser();
flightAreaService.updateFlightArea(loginUser.getTenantId(), areaId, param);
flightAreaService.updateFlightArea(workspaceId, areaId, param);
return HttpResultResponse.success();
}
@PostMapping("/{workspace_id}/flight-area/sync")
public HttpResultResponse syncFlightArea(@RequestBody @Valid SyncFlightAreaParam param) {
LoginUser loginUser = LoginHelper.getLoginUser();
flightAreaService.syncFlightArea(loginUser.getTenantId(), param.getDeviceSns());
@Operation(summary = "同步区域信息到机场端", description = "同步区域信息到机场端")
public HttpResultResponse syncFlightArea(@PathVariable(name = "workspace_id") String workspaceId,@RequestBody @Valid SyncFlightAreaParam param) {
flightAreaService.syncFlightArea(workspaceId, param.getDeviceSns());
return HttpResultResponse.success();
}

9
dk-modules/sample/src/main/java/org/dromara/sample/map/controller/WorkspaceElementController.java

@ -1,5 +1,7 @@
package org.dromara.sample.map.controller;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.Valid;
@ -27,6 +29,7 @@ import java.util.List;
* @date 2021/11/29
*/
@RestController
@Tag(name = "工作区元素表模块")
public class WorkspaceElementController implements IHttpMapService {
@Autowired
@ -40,6 +43,7 @@ public class WorkspaceElementController implements IHttpMapService {
* @return
*/
@DeleteMapping("${url.map.prefix}${url.map.version}/workspaces/element-groups/{group_id}/elements")
@Operation(summary = "根据组id删除此组中的所有元素信息", description = "根据组id删除此组中的所有元素信息")
public HttpResultResponse deleteAllElementByGroupId(@PathVariable(name = "group_id") String groupId) {
LoginUser loginUser = LoginHelper.getLoginUser();
return elementService.deleteAllElementByGroupId(loginUser.getTenantId(), groupId);
@ -57,9 +61,8 @@ public class WorkspaceElementController implements IHttpMapService {
* @return
*/
@Override
public HttpResultResponse<List<GetMapElementsResponse>> getMapElements( String groupId, Boolean isDistributed, HttpServletRequest req, HttpServletResponse rsp) {
LoginUser loginUser = LoginHelper.getLoginUser();
List<GetMapElementsResponse> groupsList = elementService.getAllGroupsByWorkspaceId(loginUser.getTenantId(), groupId, isDistributed);
public HttpResultResponse<List<GetMapElementsResponse>> getMapElements( String workspaceId, String groupId, Boolean isDistributed, HttpServletRequest req, HttpServletResponse rsp) {
List<GetMapElementsResponse> groupsList = elementService.getAllGroupsByWorkspaceId(workspaceId, groupId, isDistributed);
return HttpResultResponse.<List<GetMapElementsResponse>>success(groupsList);
}

6
dk-modules/sample/src/main/java/org/dromara/sample/map/model/dto/FlightAreaDTO.java

@ -6,6 +6,8 @@ import lombok.Data;
import lombok.NoArgsConstructor;
import org.dromara.common.sdk.cloudapi.flightarea.GeofenceTypeEnum;
import java.util.Date;
/**
* @author sean
* @version 1.9
@ -29,7 +31,7 @@ public class FlightAreaDTO {
private String username;
private Long createTime;
private Date createTime;
private Long updateTime;
private Date updateTime;
}

6
dk-modules/sample/src/main/java/org/dromara/sample/map/model/dto/FlightAreaWs.java

@ -4,6 +4,8 @@ import org.dromara.common.sdk.cloudapi.flightarea.GeofenceTypeEnum;
import org.dromara.sample.map.model.enums.FlightAreaOpertaionEnum;
import lombok.*;
import java.util.Date;
/**
* @author sean
* @version 1.9
@ -29,8 +31,8 @@ public class FlightAreaWs {
private String username;
private Long createTime;
private Date createTime;
private Long updateTime;
private Date updateTime;
}

6
dk-modules/sample/src/main/java/org/dromara/sample/map/model/dto/GroupElementDTO.java

@ -8,6 +8,8 @@ import lombok.Data;
import lombok.NoArgsConstructor;
import org.dromara.common.sdk.cloudapi.map.ElementResource;
import java.util.Date;
/**
* @author sean
* @version 0.2
@ -26,10 +28,10 @@ public class GroupElementDTO {
private String name;
@JsonProperty(value = "create_time")
private Long createTime;
private Date createTime;
@JsonProperty(value = "update_time")
private Long updateTime;
private Date updateTime;
private ElementResource resource;

5
dk-modules/sample/src/main/java/org/dromara/sample/map/model/entity/GroupElementEntity.java

@ -7,6 +7,7 @@ import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.util.Date;
/**
* @author sean
@ -48,8 +49,8 @@ public class GroupElementEntity implements Serializable {
private Boolean clampToGround;
@TableField(value = "create_time", fill = FieldFill.INSERT)
private Long createTime;
private Date createTime;
@TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)
private Long updateTime;
private Date updateTime;
}

16
dk-modules/sample/src/main/java/org/dromara/sample/map/service/impl/FlightAreaServiceImpl.java

@ -103,7 +103,7 @@ public class FlightAreaServiceImpl extends AbstractFlightAreaService implements
public void createFlightArea(String workspaceId, String username, PostFlightAreaParam param) {
Optional<GetMapElementsResponse> groupOpt = groupService.getCustomGroupByWorkspaceId(workspaceId);
if (groupOpt.isEmpty()) {
throw new RuntimeException("The custom flight area group does not exist, please create it first.");
throw new RuntimeException("自定义飞行区域组不存在,请先创建。");
}
ElementGeometryType geometry = param.getContent().getGeometry();
String type = geometry.getType();
@ -135,7 +135,7 @@ public class FlightAreaServiceImpl extends AbstractFlightAreaService implements
int id = flightAreaPropertyServices.saveProperty(property);
if (id <= 0) {
throw new RuntimeException("Failed to save flight area properties.");
throw new RuntimeException("无法保存飞行区域属性。");
}
flightAreaFileService.setNonLatestByWorkspaceId(workspaceId);
@ -146,8 +146,8 @@ public class FlightAreaServiceImpl extends AbstractFlightAreaService implements
.username(username)
.type(param.getType())
.name(param.getName())
.updateTime(System.currentTimeMillis())
.createTime(System.currentTimeMillis())
.updateTime(new Date())
.createTime(new Date())
.content(FlightAreaContent.builder().geometry(geometry).properties(param.getContent().getProperties()).build())
.status(true)
.build());
@ -182,7 +182,7 @@ public class FlightAreaServiceImpl extends AbstractFlightAreaService implements
}
int id = flightAreaPropertyServices.deleteProperty(areaId);
if (id <= 0) {
throw new RuntimeException("Failed to delete the flight area property.");
throw new RuntimeException("无法删除飞行区域属性。");
}
flightAreaFileService.setNonLatestByWorkspaceId(workspaceId);
WebSocketUtils.publishAll( BizCodeEnum.FLIGHT_AREAS_UPDATE.getCode(),
@ -218,7 +218,7 @@ public class FlightAreaServiceImpl extends AbstractFlightAreaService implements
int id = flightAreaPropertyServices.updateProperty(FlightAreaPropertyUpdate.builder()
.elementId(areaId).status(param.getStatus()).radius(radius).build());
if (id <= 0) {
throw new RuntimeException("Failed to update flight area properties.");
throw new RuntimeException("未能更新飞行区域属性。");
}
flightAreaFileService.setNonLatestByWorkspaceId(workspaceId);
Optional<FlightAreaDTO> areaOpt = getFlightAreaByAreaId(areaId);
@ -242,7 +242,7 @@ public class FlightAreaServiceImpl extends AbstractFlightAreaService implements
public TopicEventsResponse<MqttReply> flightAreasSyncProgress(TopicEventsRequest<FlightAreasSyncProgress> request, MessageHeaders headers) {
Optional<DeviceDTO> deviceOpt = deviceRedisService.getDeviceOnline(request.getGateway());
if (deviceOpt.isEmpty()) {
log.warn("method: flight_areas_sync_progress. Dock is offline.");
log.warn("方法:flight_areas_sync_progress。Dock 已离线。");
return null;
}
@ -270,7 +270,7 @@ public class FlightAreaServiceImpl extends AbstractFlightAreaService implements
public TopicEventsResponse<MqttReply> flightAreasDroneLocation(TopicEventsRequest<FlightAreasDroneLocation> request, MessageHeaders headers) {
Optional<DeviceDTO> deviceOpt = deviceRedisService.getDeviceOnline(request.getGateway());
if (deviceOpt.isEmpty()) {
log.warn("method: flight_areas_drone_location. Dock is offline.");
log.warn("方法:flight areas_drone_locations。码头离线。");
return null;
}
if (request.getData().getDroneLocations().isEmpty()) {

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

@ -1,5 +1,7 @@
package org.dromara.sample.media.controller;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.servlet.http.HttpServletResponse;
import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.common.sdk.common.HttpResultResponse;
@ -20,6 +22,7 @@ import java.net.URL;
*/
@RestController
@RequestMapping("${url.media.prefix}${url.media.version}/files")
@Tag(name = "无人机媒体文件模块")
public class FileController {
@Autowired
@ -30,11 +33,12 @@ public class FileController {
* Get information about all the media files in this workspace based on the workspace id.
* @return
*/
@GetMapping("/files")
@GetMapping("/{workspace_id}/files")
@Operation(summary = "根据工作区id获取此工作区中所有媒体文件的信息。", description = "根据工作区id获取此工作区中所有媒体文件的信息。")
public HttpResultResponse<PaginationData<MediaFileDTO>> getFilesList(@RequestParam(defaultValue = "1") Long page,
@RequestParam(name = "page_size", defaultValue = "10") Long pageSize) {
LoginUser loginUser = LoginHelper.getLoginUser();
PaginationData<MediaFileDTO> filesList = fileService.getMediaFilesPaginationByWorkspaceId(loginUser.getTenantId(), page, pageSize);
@RequestParam(name = "page_size", defaultValue = "10") Long pageSize,
@PathVariable(name = "workspace_id") String workspaceId) {
PaginationData<MediaFileDTO> filesList = fileService.getMediaFilesPaginationByWorkspaceId(workspaceId, page, pageSize);
return HttpResultResponse.success(filesList);
}
@ -46,11 +50,12 @@ public class FileController {
* @param fileId
* @param response
*/
@GetMapping("/file/{file_id}/url")
public void getFileUrl(@PathVariable(name = "file_id") String fileId, HttpServletResponse response) {
LoginUser loginUser = LoginHelper.getLoginUser();
@Operation(summary = "根据媒体文件id查询文件的下载地址。", description = "根据媒体文件id查询文件的下载地址,。")
@GetMapping("/{workspace_id}/file/{file_id}/url")
public void getFileUrl(@PathVariable(name = "workspace_id") String workspaceId,
@PathVariable(name = "file_id") String fileId, HttpServletResponse response) {
try {
URL url = fileService.getObjectUrl(loginUser.getTenantId(), fileId);
URL url = fileService.getObjectUrl(workspaceId, fileId);
response.sendRedirect(url.toString());
} catch (IOException e) {
e.printStackTrace();

26
dk-modules/sample/src/main/java/org/dromara/sample/media/controller/MediaController.java

@ -1,5 +1,6 @@
package org.dromara.sample.media.controller;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.Valid;
@ -12,6 +13,7 @@ import org.dromara.sample.media.service.IMediaService;
import lombok.extern.slf4j.Slf4j;
import org.dromara.system.api.model.LoginUser;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@ -23,53 +25,55 @@ import java.util.List;
*/
@Slf4j
@RestController
@Tag(name = "媒体接口")
public class MediaController implements IHttpMediaService {
@Autowired
private IMediaService mediaService;
/**
* 检查文件是否已通过指纹上传
* Check if the file has been uploaded by the fingerprint.
* @param request
* @return
*/
@Override
public HttpResultResponse mediaFastUpload( @Valid MediaFastUploadRequest request, HttpServletRequest req, HttpServletResponse rsp) {
LoginUser loginUser = LoginHelper.getLoginUser();
boolean isExist = mediaService.fastUpload(loginUser.getTenantId(), request.getFingerprint());
public HttpResultResponse mediaFastUpload( String workspaceId,@Valid MediaFastUploadRequest request, HttpServletRequest req, HttpServletResponse rsp) {
boolean isExist = mediaService.fastUpload(workspaceId, request.getFingerprint());
return isExist ? HttpResultResponse.success() : HttpResultResponse.error(request.getFingerprint() + "don't exist.");
}
/**
* 当文件由Pilot上传到存储服务器时文件的基本信息通过此接口报告
* When the file is uploaded to the storage server by pilot,
* the basic information of the file is reported through this interface.
* @param request
* @return
*/
@Override
public HttpResultResponse<String> mediaUploadCallback( @Valid MediaUploadCallbackRequest request, HttpServletRequest req, HttpServletResponse rsp) {
LoginUser loginUser = LoginHelper.getLoginUser();
mediaService.saveMediaFile(loginUser.getTenantId(), request);
public HttpResultResponse<String> mediaUploadCallback( String workspaceId, @Valid MediaUploadCallbackRequest request, HttpServletRequest req, HttpServletResponse rsp) {
mediaService.saveMediaFile(workspaceId, request);
return HttpResultResponse.success(request.getObjectKey());
}
/**
* 根据工作区ID和一组小指纹查询此工作区中已存在的文件
* 请求体中只有一个tiny_fingerprint参数
* 但是不建议使用 Map 来接收参数
* Query the files that already exist in this workspace based on the workspace id and the collection of tiny fingerprints.
* @param request There is only one tiny_fingerprint parameter in the body.
* But it is not recommended to use Map to receive the parameter.
* @return
*/
@Override
public HttpResultResponse<GetFileFingerprintResponse> getExistFileTinyFingerprint(@Valid GetFileFingerprintRequest request, HttpServletRequest req, HttpServletResponse rsp) {
LoginUser loginUser = LoginHelper.getLoginUser();
List<String> existingList = mediaService.getExistTinyFingerprints(loginUser.getTenantId(), request.getTinyFingerprints());
public HttpResultResponse<GetFileFingerprintResponse> getExistFileTinyFingerprint( String workspaceId, @Valid GetFileFingerprintRequest request, HttpServletRequest req, HttpServletResponse rsp) {
List<String> existingList = mediaService.getExistTinyFingerprints(workspaceId, request.getTinyFingerprints());
return HttpResultResponse.success(new GetFileFingerprintResponse().setTinyFingerprints(existingList));
}
@Override
public HttpResultResponse folderUploadCallback( @Valid FolderUploadCallbackRequest request, HttpServletRequest req, HttpServletResponse rsp) {
LoginUser loginUser = LoginHelper.getLoginUser();
public HttpResultResponse folderUploadCallback(String workspaceId, @Valid FolderUploadCallbackRequest request, HttpServletRequest req, HttpServletResponse rsp) {
return null;
}
}

13
dk-modules/sample/src/main/java/org/dromara/sample/media/model/MediaFileDTO.java

@ -1,11 +1,13 @@
package org.dromara.sample.media.model;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.time.LocalDateTime;
import java.util.Date;
/**
* @author sean
@ -20,25 +22,34 @@ public class MediaFileDTO {
private String fileId;
@Schema(description = "文件名")
private String fileName;
@Schema(description = "文件的路径")
private String filePath;
@Schema(description = "文件所属的工作区")
private String objectKey;
@Schema(description = "文件所属的工作区")
private String subFileType;
@Schema(description = "文件所属的工作区")
private Boolean isOriginal;
@Schema(description = "创建文件的无人机的sn。")
private String drone;
@Schema(description = "创建文件的无人机有效载荷的名称。")
private String payload;
@Schema(description = "文件的小指纹。此属性仅适用于由Pilot上传的媒体文件")
private String tinnyFingerprint;
@Schema(description = "文件的指纹。此属性仅适用于由Pilot上传的媒体文件。")
private String fingerprint;
private LocalDateTime createTime;
private Date createTime;
private String jobId;
}

5
dk-modules/sample/src/main/java/org/dromara/sample/media/model/MediaFileEntity.java

@ -7,6 +7,7 @@ import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.util.Date;
/**
* @author sean
@ -60,9 +61,9 @@ public class MediaFileEntity implements Serializable {
private String jobId;
@TableField(value = "create_time", fill = FieldFill.INSERT)
private Long createTime;
private Date createTime;
@TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)
private Long updateTime;
private Date updateTime;
}

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

@ -162,8 +162,7 @@ public class FileServiceImpl implements IFileService {
.objectKey(entity.getObjectKey())
.tinnyFingerprint(entity.getTinnyFingerprint())
.payload(entity.getPayload())
.createTime(LocalDateTime.ofInstant(
Instant.ofEpochMilli(entity.getCreateTime()), ZoneId.systemDefault()))
.createTime(entity.getCreateTime())
.drone(entity.getDrone())
.jobId(entity.getJobId());

6
dk-modules/sample/src/main/java/org/dromara/sample/storage/controller/StorageController.java

@ -1,5 +1,6 @@
package org.dromara.sample.storage.controller;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.dromara.common.satoken.utils.LoginHelper;
@ -19,18 +20,19 @@ import org.springframework.web.bind.annotation.RestController;
* @date 2021/12/29
*/
@RestController
@Tag(name="凭证信息")
public class StorageController implements IHttpStorageService {
@Autowired
private IStorageService storageService;
/**
* 获取临时凭据以在DJI Pilot中上传媒体和路标
* Get temporary credentials for uploading the media and wayline in DJI Pilot.
* @return
*/
@Override
public HttpResultResponse<StsCredentialsResponse> getTemporaryCredential( HttpServletRequest req, HttpServletResponse rsp) {
LoginUser loginUser = LoginHelper.getLoginUser();
public HttpResultResponse<StsCredentialsResponse> getTemporaryCredential(String workspaceId, HttpServletRequest req, HttpServletResponse rsp) {
StsCredentialsResponse stsCredentials = storageService.getSTSCredentials();
return HttpResultResponse.success(stsCredentials);
}

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

@ -1,6 +1,7 @@
package org.dromara.sample.wayline.controller;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.Valid;
@ -36,53 +37,57 @@ import java.util.stream.Collectors;
* @date 2021/12/22
*/
@RestController
@Tag(name="凭证信息")
public class WaylineFileController implements IHttpWaylineService {
@Autowired
private IWaylineFileService waylineFileService;
/**
* 根据waylineID删除工作区中的wayline文件
* Delete the wayline file in the workspace according to the wayline id.
* @param waylineId
* @return
*/
@DeleteMapping("${url.wayline.prefix}${url.wayline.version}/workspaces/waylines/{wayline_id}")
public HttpResultResponse deleteWayline(@PathVariable(name = "wayline_id") String waylineId) {
LoginUser loginUser = LoginHelper.getLoginUser();
boolean isDel = waylineFileService.deleteByWaylineId(loginUser.getTenantId(), waylineId);
@DeleteMapping("${url.wayline.prefix}${url.wayline.version}/workspaces/{workspace_id}/waylines/{wayline_id}")
public HttpResultResponse deleteWayline(@PathVariable(name = "workspace_id") String workspaceId,@PathVariable(name = "wayline_id") String waylineId) {
boolean isDel = waylineFileService.deleteByWaylineId(workspaceId, waylineId);
return isDel ? HttpResultResponse.success() : HttpResultResponse.error("航线删除失败");
}
/**
* 导入kmz航路文件
* Import kmz wayline files.
* @param file
* @return
*/
@PostMapping("${url.wayline.prefix}${url.wayline.version}/workspaces/waylines/file/upload")
public HttpResultResponse importKmzFile(HttpServletRequest request, MultipartFile file) {
@PostMapping("${url.wayline.prefix}${url.wayline.version}/workspaces/{workspace_id}/waylines/file/upload")
public HttpResultResponse importKmzFile(@PathVariable(name = "workspace_id") String workspaceId,HttpServletRequest request, MultipartFile file) {
if (Objects.isNull(file)) {
return HttpResultResponse.error("No file received.");
return HttpResultResponse.error("未收到文件。");
}
LoginUser loginUser = LoginHelper.getLoginUser();
String creator = loginUser.getUsername();
waylineFileService.importKmzFile(file, loginUser.getTenantId(), creator);
waylineFileService.importKmzFile(file, workspaceId, creator);
return HttpResultResponse.success();
}
/**
* 根据查询条件查询路线文件的基本数据
* 试点中的查询条件字段是固定的
* Query the basic data of the wayline file according to the query conditions.
* The query condition field in pilot is fixed.
* @param request
* @return
*/
@Override
public HttpResultResponse<PaginationData<GetWaylineListResponse>> getWaylineList(@Valid GetWaylineListRequest request, HttpServletRequest req, HttpServletResponse rsp) {
LoginUser loginUser = LoginHelper.getLoginUser();
PaginationData<GetWaylineListResponse> data = waylineFileService.getWaylinesByParam(loginUser.getTenantId(), request);
public HttpResultResponse<PaginationData<GetWaylineListResponse>> getWaylineList(@Valid GetWaylineListRequest request,String workspaceId, HttpServletRequest req, HttpServletResponse rsp) {
PaginationData<GetWaylineListResponse> data = waylineFileService.getWaylinesByParam(workspaceId, request);
return HttpResultResponse.success(data);
}
/**
* 根据 wayline 文件 ID 查询文件的下载地址并直接重定向到此地址进行下载
* Query the download address of the file according to the wayline file id,
* and redirect to this address directly for download.
* @param waylineId
@ -90,10 +95,9 @@ public class WaylineFileController implements IHttpWaylineService {
* @param rsp
*/
@Override
public void getWaylineFileDownloadAddress( String waylineId, HttpServletRequest req, HttpServletResponse rsp) {
public void getWaylineFileDownloadAddress( String workspaceId,String waylineId, HttpServletRequest req, HttpServletResponse rsp) {
try {
LoginUser loginUser = LoginHelper.getLoginUser();
URL url = waylineFileService.getObjectUrl(loginUser.getTenantId(), waylineId);
URL url = waylineFileService.getObjectUrl(workspaceId, waylineId);
rsp.sendRedirect(url.toString());
} catch (IOException | SQLException e) {
@ -102,27 +106,30 @@ public class WaylineFileController implements IHttpWaylineService {
}
/**
* 检查名称是否已经存在根据方式名称必须确保方式名称的唯一性
* 当上传路径线时将调用此接口并且必须可用
* Checking whether the name already exists according to the wayline name must ensure the uniqueness of the wayline name.
* This interface will be called when uploading waylines and must be available.
* @param names
* @return
*/
@Override
public HttpResultResponse<List<String>> getDuplicatedWaylineName(@NotNull @Size(min = 1) List<String> names, HttpServletRequest req, HttpServletResponse rsp) {
LoginUser loginUser = LoginHelper.getLoginUser();
List<String> existNamesList = waylineFileService.getDuplicateNames(loginUser.getTenantId(), names);
public HttpResultResponse<List<String>> getDuplicatedWaylineName(String workspaceId,@NotNull @Size(min = 1) List<String> names, HttpServletRequest req, HttpServletResponse rsp) {
List<String> existNamesList = waylineFileService.getDuplicateNames(workspaceId, names);
return HttpResultResponse.success(existNamesList);
}
/**
* 当航线文件由飞行员上传到存储服务器时
* 通过此接口报告文件的基本信息
* When the wayline file is uploaded to the storage server by pilot,
* the basic information of the file is reported through this interface.
* @param request
* @return
*/
@Override
public HttpResultResponse fileUploadResultReport( @Valid WaylineUploadCallbackRequest request, HttpServletRequest req, HttpServletResponse rsp) {
public HttpResultResponse fileUploadResultReport(String workspaceId, @Valid WaylineUploadCallbackRequest request, HttpServletRequest req, HttpServletResponse rsp) {
LoginUser loginUser = LoginHelper.getLoginUser();
WaylineUploadCallbackMetadata metadata = request.getMetadata();
@ -136,38 +143,40 @@ public class WaylineFileController implements IHttpWaylineService {
.droneModelKey(metadata.getDroneModelKey().getDevice())
.build();
int id = waylineFileService.saveWaylineFile(loginUser.getTenantId(), file);
int id = waylineFileService.saveWaylineFile(workspaceId, file);
return id <= 0 ? HttpResultResponse.error() : HttpResultResponse.success();
}
/**
* 根据 wayline 文件 id 收藏 wayline 文件
* Favorite the wayline file according to the wayline file id.
* @param ids wayline file id
* @return
*/
@Override
public HttpResultResponse batchFavoritesWayline( @NotNull @Size(min = 1) List<String> ids, HttpServletRequest req, HttpServletResponse rsp) {
public HttpResultResponse batchFavoritesWayline(String workspaceId, @NotNull @Size(min = 1) List<String> ids, HttpServletRequest req, HttpServletResponse rsp) {
LoginUser loginUser = LoginHelper.getLoginUser();
boolean isMark = waylineFileService.markFavorite(loginUser.getTenantId(), ids, true);
boolean isMark = waylineFileService.markFavorite(workspaceId, ids, true);
return isMark ? HttpResultResponse.success() : HttpResultResponse.error();
}
/**
* 根据 wayline 文件 id 删除该 wayline 文件的收藏夹
* Delete the favorites of this wayline file based on the wayline file id.
* @param ids wayline file id
* @return
*/
@Override
public HttpResultResponse batchUnfavoritesWayline(@NotNull @Size(min = 1) List<String> ids, HttpServletRequest req, HttpServletResponse rsp) {
LoginUser loginUser = LoginHelper.getLoginUser();
boolean isMark = waylineFileService.markFavorite(loginUser.getTenantId(), ids, false);
public HttpResultResponse batchUnfavoritesWayline(String workspaceId,@NotNull @Size(min = 1) List<String> ids, HttpServletRequest req, HttpServletResponse rsp) {
boolean isMark = waylineFileService.markFavorite(workspaceId, ids, false);
return isMark ? HttpResultResponse.success() : HttpResultResponse.error();
}
/**
* 导入 kmz wayline 文件
* Import kmz wayline files.
* @return
*/

4
dk-visual/nacos/src/main/resources/application.properties

@ -40,9 +40,9 @@ spring.sql.init.platform=mysql
db.num=1
### Connect URL of DB:
db.url.0=jdbc:mysql://127.0.0.1:3306/dk_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true
db.url.0=jdbc:mysql://114.235.183.147:3306/dk_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true
db.user.0=root
db.password.0=123456
db.password.0=dkcy@yf
### the maximum retry times for push
nacos.config.push.maxRetryTime=50

2
pom.xml

@ -86,7 +86,7 @@
<properties>
<!-- 环境标识,需要与配置文件的名称相对应 -->
<profiles.active>dev</profiles.active>
<nacos.server>114.235.183.147:8848</nacos.server>
<nacos.server>127.0.0.1:8848</nacos.server>
<nacos.discovery.group>DEFAULT_GROUP</nacos.discovery.group>
<nacos.config.group>DEFAULT_GROUP</nacos.config.group>
<nacos.username>nacos</nacos.username>

Loading…
Cancel
Save