Browse Source

喊话器

master
李克 3 months ago
parent
commit
7f157028d5
  1. 83
      dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/mqtt/MegaphoneTopicRequest.java
  2. 172
      dk-modules/sample/src/main/java/org/dromara/sample/manage/controller/MegaphoneController.java
  3. 77
      dk-modules/sample/src/main/java/org/dromara/sample/manage/controller/PlayTextController.java
  4. 15
      dk-modules/sample/src/main/java/org/dromara/sample/manage/mapper/IPlayTextMapper.java
  5. 24
      dk-modules/sample/src/main/java/org/dromara/sample/manage/model/dto/DisobeyDTO.java
  6. 22
      dk-modules/sample/src/main/java/org/dromara/sample/manage/model/dto/FileDTO.java
  7. 18
      dk-modules/sample/src/main/java/org/dromara/sample/manage/model/dto/PlayStartDTO.java
  8. 19
      dk-modules/sample/src/main/java/org/dromara/sample/manage/model/dto/PlayVolumeDTO.java
  9. 19
      dk-modules/sample/src/main/java/org/dromara/sample/manage/model/dto/RePlayDTO.java
  10. 20
      dk-modules/sample/src/main/java/org/dromara/sample/manage/model/dto/TextDTO.java
  11. 48
      dk-modules/sample/src/main/java/org/dromara/sample/manage/model/entity/PlayTextEntity.java
  12. 37
      dk-modules/sample/src/main/java/org/dromara/sample/manage/service/IPlayTextService.java
  13. 110
      dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/PlayTextServiceImpl.java

83
dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/mqtt/MegaphoneTopicRequest.java

@ -0,0 +1,83 @@
package org.dromara.common.sdk.mqtt;
/**
* Unified topic request format.
* @author sean.zhou
* @date 2021/11/10
* @version 0.1
*/
public class MegaphoneTopicRequest<T> {
/**
* The command is sent and the response is matched by the tid and bid fields in the message,
* and the reply should keep the tid and bid the same.
*/
protected String tid;
protected String bid;
protected Long timestamp;
protected String method;
protected T data;
public MegaphoneTopicRequest() {
}
@Override
public String toString() {
return "CommonTopicRequest{" +
"tid='" + tid + '\'' +
", bid='" + bid + '\'' +
", method='" + method + '\'' +
", timestamp=" + timestamp +
", data=" + data +
'}';
}
public String getTid() {
return tid;
}
public MegaphoneTopicRequest<T> setTid(String tid) {
this.tid = tid;
return this;
}
public String getBid() {
return bid;
}
public MegaphoneTopicRequest<T> setBid(String bid) {
this.bid = bid;
return this;
}
public String getMethod() {
return method;
}
public MegaphoneTopicRequest<T> setMethod(String method) {
this.method = method;
return this;
}
public Long getTimestamp() {
return timestamp;
}
public MegaphoneTopicRequest<T> setTimestamp(Long timestamp) {
this.timestamp = timestamp;
return this;
}
public T getData() {
return data;
}
public MegaphoneTopicRequest<T> setData(T data) {
this.data = data;
return this;
}
}

172
dk-modules/sample/src/main/java/org/dromara/sample/manage/controller/MegaphoneController.java

@ -0,0 +1,172 @@
package org.dromara.sample.manage.controller;
import com.fasterxml.jackson.databind.JsonNode;
import io.seata.common.util.CollectionUtils;
import io.seata.common.util.StringUtils;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.apache.dubbo.config.annotation.DubboReference;
import org.dromara.business.api.RemoteBusinessTaskService;
import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.common.sdk.common.HttpResultResponse;
import org.dromara.common.sdk.common.PaginationData;
import org.dromara.common.sdk.exception.CloudSDKErrorEnum;
import org.dromara.common.sdk.mqtt.CommonTopicRequest;
import org.dromara.common.sdk.mqtt.MegaphoneTopicRequest;
import org.dromara.common.sdk.mqtt.MqttGatewayPublish;
import org.dromara.common.sdk.mqtt.TopicConst;
import org.dromara.common.sdk.mqtt.property.PropertySetPublish;
import org.dromara.common.sdk.mqtt.property.PropertySetReplyResultEnum;
import org.dromara.common.sdk.mqtt.property.TopicPropertySetRequest;
import org.dromara.sample.manage.model.dto.*;
import org.dromara.sample.manage.service.IDeviceService;
import org.dromara.system.api.RemoteConfigService;
import org.dromara.system.api.model.LoginUser;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.*;
/**
* @author sean.zhou
* @version 0.1
* @date 2021/11/15
*/
@RestController
@Slf4j
@RequestMapping("${url.manage.prefix}${url.manage.version}/megaphone")
@Tag(name = "无人机喊话模块")
public class MegaphoneController {
public static final String TOPIC = TopicConst.THING_MODEL_PRE + TopicConst.PRODUCT;
@Resource
private MqttGatewayPublish gatewayPublish;
@Resource
PropertySetPublish propertySetPublish;
@DubboReference
private RemoteConfigService remoteConfigService;
/**
* 喊话器-开始播放文档对应遥控器的录音广播模式
* Get the topology list of all online devices in one workspace.
* @return
*/
@PostMapping("/{workspace_id}/playStart")
@Operation(summary = "喊话器-开始播放文档(对应遥控器的录音广播模式)。", description = "喊话器-开始播放文档(对应遥控器的录音广播模式)")
public HttpResultResponse playStart(@PathVariable("workspace_id") String workspaceId,
@RequestParam("gatewaySn") String gatewaySn,
@RequestBody PlayStartDTO param
) {
String top = TOPIC+"gatewaySn"+"/services";
//发送mqtt
propertySetPublish.publishPlayText(top,param,"speaker_tts_play_start");
return HttpResultResponse.success();
}
/**
* 喊话器-重新播放文档
* Get the topology list of all online devices in one workspace.
* @return
*/
@PostMapping("/{workspace_id}/replay")
@Operation(summary = "喊话器-重新播放文档。", description = "喊话器-重新播放文档。")
public HttpResultResponse replay(@PathVariable("workspace_id") String workspaceId,
@RequestParam("gatewaySn") String gatewaySn,
@RequestBody RePlayDTO param
) {
String top = TOPIC+gatewaySn+"/services";
//发送mqtt
propertySetPublish.publishPlayText(top,param,"speaker_replay");
return HttpResultResponse.success();
}
/**
* 喊话器-暂停播放文档
* Get the topology list of all online devices in one workspace.
* @return
*/
@PostMapping("/{workspace_id}/playStop")
@Operation(summary = "喊话器-暂停播放文档。", description = "喊话器-暂停播放文档。")
public HttpResultResponse playStop(@PathVariable("workspace_id") String workspaceId,
@RequestParam("gatewaySn") String gatewaySn,
@RequestBody RePlayDTO param
) {
String top = TOPIC+gatewaySn+"/services";
//发送mqtt
propertySetPublish.publishPlayText(top,param,"speaker_play_stop");
return HttpResultResponse.success();
}
/**
* 喊话器-设置播放模式
* Get the topology list of all online devices in one workspace.
* @return
*/
@PostMapping("/{workspace_id}/playModeSet")
@Operation(summary = "喊话器-设置播放模式。", description = "喊话器-设置播放模式。")
public HttpResultResponse playModeSet(@PathVariable("workspace_id") String workspaceId,
@RequestParam("gatewaySn") String gatewaySn,
@RequestBody RePlayDTO param
) {
String top = TOPIC+gatewaySn+"/services";
//发送mqtt
propertySetPublish.publishPlayText(top,param,"speaker_play_mode_set");
return HttpResultResponse.success();
}
/**
* 喊话器-设置播放模式
* Get the topology list of all online devices in one workspace.
* @return
*/
@PostMapping("/{workspace_id}/widgetValueSet")
@Operation(summary = "喊话器-设置音量。", description = "喊话器-设置音量。")
public int widgetValueSet(@PathVariable("workspace_id") String workspaceId,
@RequestParam("gatewaySn") String gatewaySn,
@RequestBody PlayVolumeDTO param
) {
String top = TOPIC+gatewaySn+"/services";
//发送mqtt
PropertySetReplyResultEnum psdkWidgetValueSet = propertySetPublish.publishPlayText(top,param,"psdk_widget_value_set");
return psdkWidgetValueSet.getResult();
}
/**
* 获取媒体流ip
* Get the topology list of all online devices in one workspace.
* @return
*/
@PostMapping("/{workspace_id}/getStreamIp")
@Operation(summary = "获取媒体流ip。", description = "获取媒体流ip。")
public HttpResultResponse getStreamIp(@PathVariable("workspace_id") String workspaceId,
@RequestBody DisobeyDTO param
) {
String top = "task/image/disobey/smoke";
//发送mqtt
String s = remoteConfigService.selectStreamIp();
if (StringUtils.isNotEmpty(param.getModel())){
String[] split = param.getModel().split(",");
for (String type : split){
List<String> list = new ArrayList<>();
list.add(type);
DisobeyDTO disobeyDTO = new DisobeyDTO();
disobeyDTO.setUrl(s);
disobeyDTO.setOpen(param.getOpen());
disobeyDTO.setType(list);
gatewayPublish.publish(top,new CommonTopicRequest<>()
.setData(Objects.requireNonNull(disobeyDTO)),1);
}
}
return HttpResultResponse.success();
}
}

77
dk-modules/sample/src/main/java/org/dromara/sample/manage/controller/PlayTextController.java

@ -0,0 +1,77 @@
package org.dromara.sample.manage.controller;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.common.sdk.common.HttpResultResponse;
import org.dromara.common.sdk.common.PaginationData;
import org.dromara.common.sdk.mqtt.MegaphoneTopicRequest;
import org.dromara.common.sdk.mqtt.MqttGatewayPublish;
import org.dromara.common.sdk.mqtt.TopicConst;
import org.dromara.sample.manage.model.dto.DeviceDTO;
import org.dromara.sample.manage.model.dto.TextDTO;
import org.dromara.sample.manage.model.entity.PlayTextEntity;
import org.dromara.sample.manage.service.IDeviceService;
import org.dromara.sample.manage.service.IPlayTextService;
import org.dromara.system.api.model.LoginUser;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.Objects;
import java.util.UUID;
/**
* @author sean.zhou
* @version 0.1
* @date 2021/11/15
*/
@RestController
@Slf4j
@RequestMapping("${url.manage.prefix}${url.manage.version}/playText")
@Tag(name = "喊话text模版")
public class PlayTextController {
@Autowired
private IPlayTextService playTextService;
/**
* 获取一个工作区中所有在线设备的列表
* Get the topology list of all online devices in one workspace.
* @return
*/
@PostMapping("/{workspace_id}/playText/add")
@Operation(summary = "喊话text模版新增。", description = "喊话text模版新增")
public HttpResultResponse playTextAdd(@RequestBody PlayTextEntity param
) {
return playTextService.insertPlayText(param);
}
@PostMapping("/{workspace_id}/playText/update")
@Operation(summary = "喊话text模版修改。", description = "喊话text模版修改")
public HttpResultResponse playTextUpdate(@RequestBody PlayTextEntity param
) {
return playTextService.updatePlayText(param);
}
@PutMapping("/{workspace_id}/playText/deleted")
@Operation(summary = "喊话text模版删除", description = "喊话text模版删除")
public HttpResultResponse playTextDeleted(@RequestParam(name = "textSn") String textSn
) {
return playTextService.deletedPlayText(textSn);
}
@PostMapping("/{workspace_id}/playText/page")
@Operation(summary = "喊话text模版列表", description = "喊话text模版列表")
public HttpResultResponse<PaginationData<PlayTextEntity>> pageText(
@RequestParam(name = "pageNum", defaultValue = "1") Long page,
@RequestParam(name = "pageSize", defaultValue = "10") Long pageSize
) {
PaginationData<PlayTextEntity> pageText = playTextService.pageText(page, pageSize);
return HttpResultResponse.success(pageText);
}
}

15
dk-modules/sample/src/main/java/org/dromara/sample/manage/mapper/IPlayTextMapper.java

@ -0,0 +1,15 @@
package org.dromara.sample.manage.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.dromara.sample.manage.model.entity.DeviceEntity;
import org.dromara.sample.manage.model.entity.PlayTextEntity;
/**
*
* @author sean.zhou
* @date 2021/11/10
* @version 0.1
*/
public interface IPlayTextMapper extends BaseMapper<PlayTextEntity> {
}

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

@ -0,0 +1,24 @@
package org.dromara.sample.manage.model.dto;
import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.Data;
import java.util.List;
/**
* @author sean.zhou
* @version 0.1
* @date 2021/11/23
*/
@Data
@JsonInclude(JsonInclude.Include.NON_NULL)
public class DisobeyDTO {
//1 开 2 关
private int open;
private String url;
private String model;
private List<String> type;
}

22
dk-modules/sample/src/main/java/org/dromara/sample/manage/model/dto/FileDTO.java

@ -0,0 +1,22 @@
package org.dromara.sample.manage.model.dto;
import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.Data;
/**
* @author sean.zhou
* @version 0.1
* @date 2021/11/23
*/
@Data
@JsonInclude(JsonInclude.Include.NON_NULL)
public class FileDTO {
private String format;
private String md5;
private String name;
private String url;
}

18
dk-modules/sample/src/main/java/org/dromara/sample/manage/model/dto/PlayStartDTO.java

@ -0,0 +1,18 @@
package org.dromara.sample.manage.model.dto;
import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.Data;
/**
* @author sean.zhou
* @version 0.1
* @date 2021/11/23
*/
@Data
@JsonInclude(JsonInclude.Include.NON_NULL)
public class PlayStartDTO {
private int psdkIndex;
TextDTO tts;
}

19
dk-modules/sample/src/main/java/org/dromara/sample/manage/model/dto/PlayVolumeDTO.java

@ -0,0 +1,19 @@
package org.dromara.sample.manage.model.dto;
import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.Data;
/**
* @author sean.zhou
* @version 0.1
* @date 2021/11/23
*/
@Data
@JsonInclude(JsonInclude.Include.NON_NULL)
public class PlayVolumeDTO {
private int psdk_index;
private int play_volume;
}

19
dk-modules/sample/src/main/java/org/dromara/sample/manage/model/dto/RePlayDTO.java

@ -0,0 +1,19 @@
package org.dromara.sample.manage.model.dto;
import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.Data;
/**
* @author sean.zhou
* @version 0.1
* @date 2021/11/23
*/
@Data
@JsonInclude(JsonInclude.Include.NON_NULL)
public class RePlayDTO {
private int psdk_index;
private int play_mode;
}

20
dk-modules/sample/src/main/java/org/dromara/sample/manage/model/dto/TextDTO.java

@ -0,0 +1,20 @@
package org.dromara.sample.manage.model.dto;
import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.Data;
/**
* @author sean.zhou
* @version 0.1
* @date 2021/11/23
*/
@Data
@JsonInclude(JsonInclude.Include.NON_NULL)
public class TextDTO {
private String md5;
private String name;
private String text;
}

48
dk-modules/sample/src/main/java/org/dromara/sample/manage/model/entity/PlayTextEntity.java

@ -0,0 +1,48 @@
package org.dromara.sample.manage.model.entity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.time.LocalDateTime;
import java.util.Date;
/**
* The entity class of the device
*
* @author sean.zhou
* @version 0.1
* @date 2021/11/10
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@TableName(value = "play_text")
public class PlayTextEntity implements Serializable {
@TableId(type = IdType.AUTO)
private Integer id;
@TableField(value = "text_sn")
private String textSn;
@TableField(value = "name")
private String name;
@TableField(value = "text")
private String text;
@TableField(value = "md5")
private String md5;
@TableField(fill = FieldFill.INSERT)
private Date createTime;
@TableField(fill = FieldFill.INSERT_UPDATE)
private Date updateTime;
}

37
dk-modules/sample/src/main/java/org/dromara/sample/manage/service/IPlayTextService.java

@ -0,0 +1,37 @@
package org.dromara.sample.manage.service;
import com.fasterxml.jackson.databind.JsonNode;
import org.dromara.common.sdk.cloudapi.device.ControlSourceEnum;
import org.dromara.common.sdk.cloudapi.device.DeviceOsdHost;
import org.dromara.common.sdk.cloudapi.device.DockModeCodeEnum;
import org.dromara.common.sdk.cloudapi.device.DroneModeCodeEnum;
import org.dromara.common.sdk.common.HttpResultResponse;
import org.dromara.common.sdk.common.PaginationData;
import org.dromara.common.sdk.config.version.GatewayManager;
import org.dromara.common.websocket.dto.BizCodeEnum;
import org.dromara.sample.manage.model.dto.DeviceDTO;
import org.dromara.sample.manage.model.dto.DeviceFirmwareUpgradeDTO;
import org.dromara.sample.manage.model.dto.TopologyDeviceDTO;
import org.dromara.sample.manage.model.dto.WorkspaceDTO;
import org.dromara.sample.manage.model.entity.PlayTextEntity;
import org.dromara.sample.manage.model.param.DeviceQueryParam;
import java.util.List;
import java.util.Optional;
/**
* @author sean.zhou
* @date 2021/11/10
* @version 0.1
*/
public interface IPlayTextService {
HttpResultResponse insertPlayText(PlayTextEntity param);
HttpResultResponse updatePlayText(PlayTextEntity param);
HttpResultResponse deletedPlayText(String textSn);
PaginationData<PlayTextEntity> pageText(Long page, Long pageSize);
}

110
dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/PlayTextServiceImpl.java

@ -0,0 +1,110 @@
package org.dromara.sample.manage.service.impl;
import cn.hutool.crypto.SecureUtil;
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 com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.extern.slf4j.Slf4j;
import org.dromara.common.sdk.cloudapi.device.*;
import org.dromara.common.sdk.cloudapi.firmware.*;
import org.dromara.common.sdk.cloudapi.firmware.api.AbstractFirmwareService;
import org.dromara.common.sdk.cloudapi.property.api.AbstractPropertyService;
import org.dromara.common.sdk.cloudapi.tsa.DeviceIconUrl;
import org.dromara.common.sdk.cloudapi.tsa.TopologyDeviceModel;
import org.dromara.common.sdk.common.*;
import org.dromara.common.sdk.config.version.GatewayManager;
import org.dromara.common.sdk.exception.CloudSDKException;
import org.dromara.common.sdk.mqtt.IMqttTopicService;
import org.dromara.common.sdk.mqtt.MqttGatewayPublish;
import org.dromara.common.sdk.mqtt.events.EventsSubscribe;
import org.dromara.common.sdk.mqtt.osd.OsdSubscribe;
import org.dromara.common.sdk.mqtt.property.PropertySetReplyResultEnum;
import org.dromara.common.sdk.mqtt.property.PropertySetSubscribe;
import org.dromara.common.sdk.mqtt.requests.RequestsSubscribe;
import org.dromara.common.sdk.mqtt.services.ServicesReplyData;
import org.dromara.common.sdk.mqtt.services.ServicesSubscribe;
import org.dromara.common.sdk.mqtt.services.TopicServicesResponse;
import org.dromara.common.sdk.mqtt.state.StateSubscribe;
import org.dromara.common.sdk.mqtt.status.StatusSubscribe;
import org.dromara.common.websocket.dto.BizCodeEnum;
import org.dromara.sample.common.error.CommonErrorEnum;
import org.dromara.sample.component.mqtt.model.EventsReceiver;
import org.dromara.sample.control.model.enums.DroneAuthorityEnum;
import org.dromara.sample.manage.mapper.IDeviceMapper;
import org.dromara.sample.manage.mapper.IPlayTextMapper;
import org.dromara.sample.manage.model.dto.*;
import org.dromara.sample.manage.model.entity.DeviceEntity;
import org.dromara.sample.manage.model.entity.PlayTextEntity;
import org.dromara.sample.manage.model.enums.DeviceFirmwareStatusEnum;
import org.dromara.sample.manage.model.enums.PropertySetFieldEnum;
import org.dromara.sample.manage.model.enums.UserTypeEnum;
import org.dromara.sample.manage.model.param.DeviceQueryParam;
import org.dromara.sample.manage.model.receiver.BasicDeviceProperty;
import org.dromara.sample.manage.service.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Optional;
import java.util.UUID;
import java.util.stream.Collectors;
/**
*
* @author sean.zhou
* @version 0.1
* @date 2021/11/10
*/
@Service
@Slf4j
@Transactional
public class PlayTextServiceImpl implements IPlayTextService {
@Autowired
private IPlayTextMapper playTextMapper;
@Override
public HttpResultResponse insertPlayText(PlayTextEntity param) {
param.setTextSn(String.valueOf(UUID.randomUUID()));
param.setMd5(SecureUtil.md5(param.getText()));
if(playTextMapper.insert(param) > 0){
return HttpResultResponse.success();
}
return HttpResultResponse.error("新增失败");
}
@Override
public HttpResultResponse updatePlayText(PlayTextEntity param) {
param.setMd5(SecureUtil.md5(param.getText()));
int update = playTextMapper.update(param,
new LambdaUpdateWrapper<PlayTextEntity>().eq(PlayTextEntity::getTextSn, param.getTextSn()));
if(update > 0){
return HttpResultResponse.success();
}
return HttpResultResponse.error("修改失败");
}
@Override
public HttpResultResponse deletedPlayText(String textSn) {
int delete = playTextMapper.delete(
new LambdaUpdateWrapper<PlayTextEntity>().eq(PlayTextEntity::getTextSn, textSn));
if(delete > 0){
return HttpResultResponse.success();
}
return HttpResultResponse.error("删除失败");
}
@Override
public PaginationData<PlayTextEntity> pageText(Long page, Long pageSize) {
Page<PlayTextEntity> pagination = playTextMapper.selectPage(new Page<>(page, pageSize),
new LambdaQueryWrapper<PlayTextEntity>()
.orderByDesc(true,PlayTextEntity::getId));
return new PaginationData<PlayTextEntity>(pagination.getRecords(), new Pagination(pagination.getCurrent(), pagination.getSize(), pagination.getTotal()));
}
}
Loading…
Cancel
Save