From d175a7fe7d6e96c0e6abfe3954eefed539bb6e3c Mon Sep 17 00:00:00 2001
From: guoshilong <123456>
Date: Mon, 18 Sep 2023 19:23:41 +0800
Subject: [PATCH] 初始提交
---
src/main/java/com/dji/sample/common/error/LiveErrorEnum.java | 32 ++++----
src/main/java/com/dji/sample/manage/model/entity/WorkspaceEntity.java | 2
src/main/java/com/dji/sample/control/service/impl/DrcServiceImpl.java | 4
src/main/java/com/dji/sample/manage/model/dto/WorkspaceDTO.java | 10 +-
src/main/java/com/dji/sample/manage/service/IWorkspaceService.java | 10 ++
src/main/resources/application.yml | 82 +++++++++++---------
src/main/java/com/dji/sample/manage/controller/WorkspaceController.java | 29 ++++++
src/main/java/com/dji/sample/manage/service/impl/LiveStreamServiceImpl.java | 17 ++++
src/main/java/com/dji/sample/manage/service/impl/WorkspaceServiceImpl.java | 50 ++++++++++++
9 files changed, 172 insertions(+), 64 deletions(-)
diff --git a/src/main/java/com/dji/sample/common/error/LiveErrorEnum.java b/src/main/java/com/dji/sample/common/error/LiveErrorEnum.java
index 6ba3f95..2f8b1f2 100644
--- a/src/main/java/com/dji/sample/common/error/LiveErrorEnum.java
+++ b/src/main/java/com/dji/sample/common/error/LiveErrorEnum.java
@@ -9,37 +9,37 @@
*/
public enum LiveErrorEnum implements IErrorInfo {
- NO_AIRCRAFT(613001, "No aircraft."),
+ NO_AIRCRAFT(613001, "没有找到飞行器。"),
- NO_CAMERA(613002, "No camera."),
+ NO_CAMERA(613002, "没有找到相机。"),
- LIVE_STREAM_ALREADY_STARTED(613003, "The camera has started live streaming."),
+ LIVE_STREAM_ALREADY_STARTED(613003, "摄像机已经开始直播了。"),
- FUNCTION_NOT_SUPPORT(613004, "The function is not supported."),
+ FUNCTION_NOT_SUPPORT(613004, "不支持该功能。"),
- STRATEGY_NOT_SUPPORT(613005, "The strategy is not supported."),
+ STRATEGY_NOT_SUPPORT(613005, "不支持该策略。"),
- NOT_IN_CAMERA_INTERFACE(613006, "The current app is not in the camera interface."),
+ NOT_IN_CAMERA_INTERFACE(613006, "当前的应用程序不在摄像头界面中。"),
- NO_FLIGHT_CONTROL(613007, "The remote control has no flight control rights and cannot respond to control commands"),
+ NO_FLIGHT_CONTROL(613007, "遥控器没有飞行控制权限,无法响应控制命令。"),
- NO_STREAM_DATA(613008, "The current app has no stream data."),
+ NO_STREAM_DATA(613008, "当前应用程序没有流数据。"),
- TOO_FREQUENT(613009, "The operation is too frequent."),
+ TOO_FREQUENT(613009, "操作太频繁了。"),
- ENABLE_FAILED(613010, "Please check whether the live stream service is normal."),
+ ENABLE_FAILED(613010, "请检查直播服务是否正常。"),
- NO_LIVE_STREAM(613011, "There are no live stream currently."),
+ NO_LIVE_STREAM(613011, "目前没有直播。"),
- SWITCH_NOT_SUPPORT(613012, "There is already another camera in the live stream. It's not support to switch the stream directly."),
+ SWITCH_NOT_SUPPORT(613012, "直播流中已经有另一个摄像头了。不支持直接切换流。"),
- URL_TYPE_NOT_SUPPORTED(613013, "This url type is not supported."),
+ URL_TYPE_NOT_SUPPORTED(613013, "不支持此url类型。"),
- ERROR_PARAMETERS(613014, "The live stream parameters are abnormal or incomplete."),
+ ERROR_PARAMETERS(613014, "直播参数异常或不完整。"),
- NO_REPLY(613098, "No live reply received."),
+ NO_REPLY(613098, "没有收到即时回复。"),
- UNKNOWN(613099, "UNKNOWN");
+ UNKNOWN(613099, "未知消息");
private String msg;
diff --git a/src/main/java/com/dji/sample/control/service/impl/DrcServiceImpl.java b/src/main/java/com/dji/sample/control/service/impl/DrcServiceImpl.java
index 7e089cc..68666c7 100644
--- a/src/main/java/com/dji/sample/control/service/impl/DrcServiceImpl.java
+++ b/src/main/java/com/dji/sample/control/service/impl/DrcServiceImpl.java
@@ -130,10 +130,10 @@
if (dockOpt.isPresent() && (DockModeCodeEnum.IDLE == dockMode || DockModeCodeEnum.WORKING == dockMode)) {
Optional<OsdSubDeviceReceiver> deviceOsd = deviceRedisService.getDeviceOsd(dockOpt.get().getChildDeviceSn(), OsdSubDeviceReceiver.class);
if (deviceOsd.isEmpty() || deviceOsd.get().getElevation() <= 0) {
- throw new RuntimeException("The drone is not in the sky and cannot enter command flight mode.");
+ throw new RuntimeException("无人机不在空中,不能进入指挥飞行模式。");
}
} else {
- throw new RuntimeException("The current state of the dock does not support entering command flight mode.");
+ throw new RuntimeException("当前状态不支持进入命令飞行模式。");
}
ResponseResult result = controlService.seizeAuthority(dockSn, DroneAuthorityEnum.FLIGHT, null);
diff --git a/src/main/java/com/dji/sample/manage/controller/WorkspaceController.java b/src/main/java/com/dji/sample/manage/controller/WorkspaceController.java
index e2f5f43..2a424f8 100644
--- a/src/main/java/com/dji/sample/manage/controller/WorkspaceController.java
+++ b/src/main/java/com/dji/sample/manage/controller/WorkspaceController.java
@@ -1,13 +1,13 @@
package com.dji.sample.manage.controller;
import com.dji.sample.common.model.CustomClaim;
+import com.dji.sample.common.model.PaginationData;
import com.dji.sample.common.model.ResponseResult;
+import com.dji.sample.manage.model.dto.UserListDTO;
import com.dji.sample.manage.model.dto.WorkspaceDTO;
import com.dji.sample.manage.service.IWorkspaceService;
import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import java.util.Optional;
@@ -38,4 +38,27 @@
return workspaceOpt.isEmpty() ? ResponseResult.error() : ResponseResult.success(workspaceOpt.get());
}
+
+ @GetMapping("/list")
+ public ResponseResult findCurrentWorkspace(@RequestParam(defaultValue = "1") Long page,
+ @RequestParam(value = "page_size", defaultValue = "50") Long pageSize) {
+ PaginationData<WorkspaceDTO> paginationData = workspaceService.selectWorkspace(page, pageSize);
+ return ResponseResult.success(paginationData);
+ }
+
+ @PostMapping("/add")
+ public ResponseResult add(@RequestBody WorkspaceDTO dto) {
+ return workspaceService.createWorkspace(dto)?ResponseResult.success():ResponseResult.error();
+ }
+
+ @PostMapping("/delete")
+ public ResponseResult delete(@RequestParam(value = "id") Integer id) {
+ return workspaceService.deleteWorkspaceById(id)?ResponseResult.success():ResponseResult.error();
+ }
+
+ @PostMapping("/update")
+ public ResponseResult update(@RequestBody WorkspaceDTO dto) {
+ return workspaceService.updateWorkspaceById(dto)?ResponseResult.success():ResponseResult.error();
+ }
+
}
\ No newline at end of file
diff --git a/src/main/java/com/dji/sample/manage/model/dto/WorkspaceDTO.java b/src/main/java/com/dji/sample/manage/model/dto/WorkspaceDTO.java
index 3714974..3876054 100644
--- a/src/main/java/com/dji/sample/manage/model/dto/WorkspaceDTO.java
+++ b/src/main/java/com/dji/sample/manage/model/dto/WorkspaceDTO.java
@@ -21,13 +21,13 @@
private Integer id;
- private String workspaceId;
+ private String workspaceId;//项目id
- private String workspaceName;
+ private String workspaceName;//项目名称
- private String workspaceDesc;
+ private String workspaceDesc;//项目描述
- private String platformName;
+ private String platformName;//平台名称
- private String bindCode;
+ private String bindCode;//绑定码
}
\ No newline at end of file
diff --git a/src/main/java/com/dji/sample/manage/model/entity/WorkspaceEntity.java b/src/main/java/com/dji/sample/manage/model/entity/WorkspaceEntity.java
index 90a5348..c9c7f74 100644
--- a/src/main/java/com/dji/sample/manage/model/entity/WorkspaceEntity.java
+++ b/src/main/java/com/dji/sample/manage/model/entity/WorkspaceEntity.java
@@ -1,12 +1,14 @@
package com.dji.sample.manage.model.entity;
import com.baomidou.mybatisplus.annotation.*;
+import lombok.Builder;
import lombok.Data;
import java.io.Serializable;
@TableName(value = "manage_workspace")
@Data
+@Builder
public class WorkspaceEntity implements Serializable {
@TableId(type = IdType.AUTO)
diff --git a/src/main/java/com/dji/sample/manage/service/IWorkspaceService.java b/src/main/java/com/dji/sample/manage/service/IWorkspaceService.java
index 306760d..7b8db65 100644
--- a/src/main/java/com/dji/sample/manage/service/IWorkspaceService.java
+++ b/src/main/java/com/dji/sample/manage/service/IWorkspaceService.java
@@ -1,6 +1,8 @@
package com.dji.sample.manage.service;
+import com.dji.sample.common.model.PaginationData;
+import com.dji.sample.common.model.ResponseResult;
import com.dji.sample.component.mqtt.model.CommonTopicReceiver;
import com.dji.sample.manage.model.dto.WorkspaceDTO;
import org.springframework.messaging.MessageHeaders;
@@ -9,6 +11,14 @@
public interface IWorkspaceService {
+ PaginationData<WorkspaceDTO> selectWorkspace(long page, long pageSize);
+
+ Boolean createWorkspace(WorkspaceDTO dto);
+
+ Boolean deleteWorkspaceById(Integer id);
+
+ Boolean updateWorkspaceById(WorkspaceDTO dto);
+
/**
* Query the information of a workspace based on its workspace id.
* @param workspaceId
diff --git a/src/main/java/com/dji/sample/manage/service/impl/LiveStreamServiceImpl.java b/src/main/java/com/dji/sample/manage/service/impl/LiveStreamServiceImpl.java
index 5d2c8cd..94ece0d 100644
--- a/src/main/java/com/dji/sample/manage/service/impl/LiveStreamServiceImpl.java
+++ b/src/main/java/com/dji/sample/manage/service/impl/LiveStreamServiceImpl.java
@@ -90,6 +90,11 @@
@Override
public ResponseResult liveStart(LiveTypeDTO liveParam) {
+
+// String streamId_2 = liveParam.getVideoId().replace("/","_");
+// String streamId_1 = liveParam.getVideoId().replace("_","/");
+// liveParam.setVideoId(streamId_2);
+
// Check if this lens is available live.
ResponseResult responseResult = this.checkBeforeLive(liveParam.getVideoId());
if (ResponseResult.CODE_SUCCESS != responseResult.getCode()) {
@@ -100,7 +105,14 @@
// target topic
String respTopic = THING_MODEL_PRE + PRODUCT +
data.getDeviceSn() + SERVICES_SUF;
+
ServiceReply receiveReply = this.publishLiveStart(respTopic, liveParam);
+
+ if(receiveReply.getResult() == 513003) {
+ LiveDTO live = new LiveDTO();
+ live.setUrl(liveParam.getUrl().replace("rtmp", "https").replace("735","700") + ".flv");
+ return ResponseResult.success(live);
+ }
if (ResponseResult.CODE_SUCCESS != receiveReply.getResult()) {
return ResponseResult.error(LiveErrorEnum.find(receiveReply.getResult()));
@@ -111,7 +123,8 @@
switch (urlType) {
case RTMP:
- live.setUrl(liveParam.getUrl().replace("rtmp", "webrtc"));
+// live.setUrl(liveParam.getUrl().replace("rtmp", "webrtc"));
+ live.setUrl(liveParam.getUrl().replace("rtmp", "https").replace("735","700") + ".flv");
break;
case GB28181:
LiveUrlGB28181DTO gb28181 = urlToGB28181(liveParam.getUrl());
@@ -144,6 +157,8 @@
String respTopic = THING_MODEL_PRE + PRODUCT + responseResult.getData().getDeviceSn() + SERVICES_SUF;
+ videoId = videoId.replace("_","/");
+
ServiceReply receiveReply = this.publishLiveStop(respTopic, videoId);
if (receiveReply.getResult() != 0) {
return ResponseResult.error(LiveErrorEnum.find(receiveReply.getResult()));
diff --git a/src/main/java/com/dji/sample/manage/service/impl/WorkspaceServiceImpl.java b/src/main/java/com/dji/sample/manage/service/impl/WorkspaceServiceImpl.java
index b90d262..c75c135 100644
--- a/src/main/java/com/dji/sample/manage/service/impl/WorkspaceServiceImpl.java
+++ b/src/main/java/com/dji/sample/manage/service/impl/WorkspaceServiceImpl.java
@@ -1,7 +1,11 @@
package com.dji.sample.manage.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.dji.sample.common.error.CommonErrorEnum;
+import com.dji.sample.common.model.Pagination;
+import com.dji.sample.common.model.PaginationData;
import com.dji.sample.component.mqtt.model.*;
import com.dji.sample.component.mqtt.service.IMessageSenderService;
import com.dji.sample.manage.dao.IWorkspaceMapper;
@@ -18,8 +22,11 @@
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.StringUtils;
+import java.util.List;
import java.util.Map;
import java.util.Optional;
+import java.util.UUID;
+import java.util.stream.Collectors;
@Service
@Transactional
@@ -33,6 +40,35 @@
@Autowired
private IMessageSenderService messageSenderService;
+
+ @Override
+ public PaginationData<WorkspaceDTO> selectWorkspace(long page, long pageSize) {
+ Page<WorkspaceEntity> entityPage = mapper.selectPage(
+ new Page<>(page, pageSize),
+ new QueryWrapper<>());
+
+ List<WorkspaceDTO> list = entityPage.getRecords()
+ .stream()
+ .map(this::entityConvertToDto)
+ .collect(Collectors.toList());
+ return new PaginationData<>(list, new Pagination(entityPage));
+ }
+
+ @Override
+ public Boolean createWorkspace(WorkspaceDTO dto) {
+ dto.setWorkspaceId(UUID.randomUUID().toString());
+ return mapper.insert(dtoConvertToEntity(dto)) > 0;
+ }
+
+ @Override
+ public Boolean deleteWorkspaceById(Integer id) {
+ return mapper.deleteById(id) > 0;
+ }
+
+ @Override
+ public Boolean updateWorkspaceById(WorkspaceDTO dto) {
+ return mapper.updateById(dtoConvertToEntity(dto)) > 0;
+ }
@Override
public Optional<WorkspaceDTO> getWorkspaceByWorkspaceId(String workspaceId) {
@@ -95,4 +131,18 @@
.bindCode(entity.getBindCode())
.build();
}
+
+ private WorkspaceEntity dtoConvertToEntity(WorkspaceDTO dto) {
+ if (dto == null) {
+ return null;
+ }
+ return WorkspaceEntity.builder()
+ .id(dto.getId())
+ .workspaceId(dto.getWorkspaceId())
+ .platformName(dto.getPlatformName())
+ .workspaceDesc(dto.getWorkspaceDesc())
+ .workspaceName(dto.getWorkspaceName())
+ .bindCode(dto.getBindCode())
+ .build();
+ }
}
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
index a5c937a..1604425 100644
--- a/src/main/resources/application.yml
+++ b/src/main/resources/application.yml
@@ -7,16 +7,16 @@
druid:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
- url: jdbc:mysql://cloud_api_sample_mysql:3306/cloud_sample?useSSL=false&allowPublicKeyRetrieval=true
+ url: jdbc:mysql://172.16.13.129:3306/cloud_sample?useSSL=false&allowPublicKeyRetrieval=true
username: root
- password: root
+ password: 123456
initial-size: 10
min-idle: 10
max-active: 20
max-wait: 60000
redis:
- host: cloud_api_sample_redis
+ host: 127.0.0.1
port: 6379
database: 0
username: # if you enable
@@ -43,20 +43,25 @@
# BASIC parameters are required.
BASIC:
protocol: MQTT # @see com.dji.sample.component.mqtt.model.MqttProtocolEnum
- host: Please enter your ip.
- port: 1883
- username: JavaServer
- password: 123456
- client-id: 123456
+ host: 182.106.212.58
+ port: 31883
+ username: root
+ password: root
+# host: 127.0.0.1
+# port: 1883
+# username: guest
+# password: guest
+ client-id: aix123456
# If the protocol is ws/wss, this value is required.
path:
# Topics that need to be subscribed when initially connecting to mqtt, multiple topics are divided by ",".
- inbound-topic: sys/product/+/status,thing/product/+/requests
+# inbound-topic: sys/product/+/status,thing/product/+/requests
+ inbound-topic: sys/product/+/+,thing/product/+/+
DRC:
protocol: WS # @see com.dji.sample.component.mqtt.model.MqttProtocolEnum
- host: Please enter your ip.
- port: 8083
- path: /mqtt
+ host: 182.106.212.58
+ port: 15675
+ path: /ws
url:
manage:
@@ -79,18 +84,18 @@
version: /api/v1
# Tutorial: https://www.alibabacloud.com/help/en/object-storage-service/latest/use-a-temporary-credential-provided-by-sts-to-access-oss
-oss:
- enable: false
- provider: ali # @see com.dji.sample.component.OssConfiguration.model.enums.OssTypeEnum
- endpoint: https://oss-cn-hangzhou.aliyuncs.com
- access-key: Please enter your access key.
- secret-key: Please enter your secret key.
- expire: 3600
- region: Please enter your oss region. # cn-hangzhou
- role-session-name: cloudApi
- role-arn: Please enter your role arn. # acs:ram::123456789:role/stsrole
- bucket: Please enter your bucket name.
- object-dir-prefix: Please enter a folder name.
+#oss:
+# enable: false
+# provider: ali # @see com.dji.sample.component.OssConfiguration.model.enums.OssTypeEnum
+# endpoint: https://oss-cn-hangzhou.aliyuncs.com
+# access-key: Please enter your access key.
+# secret-key: Please enter your secret key.
+# expire: 3600
+# region: Please enter your oss region. # cn-hangzhou
+# role-session-name: cloudApi
+# role-arn: Please enter your role arn. # acs:ram::123456789:role/stsrole
+# bucket: Please enter your bucket name.
+# object-dir-prefix: Please enter a folder name.
#oss:
# enable: true
@@ -105,16 +110,19 @@
# bucket: cloudapi-bucket
# object-dir-prefix: wayline
-#oss:
-# enable: true
-# provider: minio
-# endpoint: http://192.168.1.1:9000
-# access-key: minioadmin
-# secret-key: minioadmin
-# bucket: cloud-bucket
-# expire: 3600
-# region: us-east-1
-# object-dir-prefix: wayline
+oss:
+ enable: true
+ provider: minio
+# endpoint: http://172.16.13.129:9000
+# access-key: admin
+# secret-key: 12345678
+ endpoint: http://dev.jxpskj.com:9000
+ access-key: pskj
+ secret-key: pskj@2021
+ bucket: cloud-bucket
+ expire: 3600
+ region: us-east-1
+ object-dir-prefix: wayline
logging:
level:
@@ -129,6 +137,6 @@
# To create a license for an application: https://developer.dji.com/user/apps/#all
cloud-api:
app:
- id: Please enter the app id.
- key: Please enter the app key.
- license: Please enter the app license.
\ No newline at end of file
+ id: 136971
+ key: 3e56cb20958060caeb1071cdb32400e
+ license: eS2rczbPpEUZZkOuek7hB1fugv3TE0RdKyEU319A2cxmVKs7Bc11RadcPcHnQJjBq/Peja5R6bp2IILCypa2lskCUGXkXHmqxdPIVTyMQpkZtjM+eXLut/VHPdXVZOvYxKFMVel6jfEyd4rWL9jBI1N34rCvwSgad6T49mRC8R0=
\ No newline at end of file
--
Gitblit v1.9.3