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