Browse Source

websocket

master
吴远 3 months ago
parent
commit
9096bfd65e
  1. 14
      dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/device/AirConditionerStateEnum.java
  2. 15
      dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/device/api/AbstractDeviceService.java
  3. 48
      dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/interconnection/PsdkFloatingWindowTextPsdk.java
  4. 13
      dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/interconnection/api/AbstractInterconnectionService.java
  5. 2
      dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/livestream/VideoTypeEnum.java
  6. 104
      dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/psdk/PsdkSpeaker.java
  7. 56
      dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/psdk/PsdkUiResource.java
  8. 119
      dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/psdk/PsdkWidgetValue.java
  9. 39
      dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/psdk/PsdkWidgetValues.java
  10. 2
      dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/wayline/api/AbstractWaylineService.java
  11. 8
      dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/mqtt/ChannelName.java
  12. 5
      dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/mqtt/events/EventsMethodEnum.java
  13. 5
      dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/mqtt/state/DockStateDataKeyEnum.java
  14. 7
      dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/mqtt/state/StateDataKeyEnum.java
  15. 22
      dk-modules/sample/pom.xml
  16. 3
      dk-modules/sample/src/main/java/org/dromara/sample/control/service/impl/ControlServiceImpl.java
  17. 26
      dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/InterconnectionService.java
  18. 12
      dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/SDKDeviceService.java
  19. 5
      dk-modules/sample/src/main/java/org/dromara/sample/map/service/impl/FlightAreaFileServiceImpl.java
  20. 6
      dk-modules/sample/src/main/java/org/dromara/sample/map/service/impl/FlightAreaServiceImpl.java
  21. 5
      dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/impl/FlightTaskServiceImpl.java
  22. 1
      dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/impl/WaylineFileServiceImpl.java
  23. 4
      dk-visual/nacos/src/main/resources/application.properties
  24. 25
      dk-visual/rocketmq/src/test/java/com/ruoyi/testrocketmq/RocketMQApplication.java
  25. 64
      dk-visual/rocketmq/src/test/java/com/ruoyi/testrocketmq/config/ConsumerConfig.java
  26. 27
      dk-visual/rocketmq/src/test/java/com/ruoyi/testrocketmq/config/MessageConfig.java
  27. 48
      dk-visual/rocketmq/src/test/java/com/ruoyi/testrocketmq/config/ProducerConfig.java
  28. 100
      dk-visual/rocketmq/src/test/java/com/ruoyi/testrocketmq/consumer/RocketMsgListener.java
  29. 60
      dk-visual/rocketmq/src/test/java/com/ruoyi/testrocketmq/enums/MessageCodeEnum.java
  30. 22
      dk-visual/rocketmq/src/test/java/com/ruoyi/testrocketmq/model/ConsumerMode.java
  31. 25
      dk-visual/rocketmq/src/test/java/com/ruoyi/testrocketmq/model/ProducerMode.java
  32. 47
      dk-visual/rocketmq/src/test/java/com/ruoyi/testrocketmq/producer/AsyncProducer.java
  33. 20
      dk-visual/rocketmq/src/test/java/com/ruoyi/testrocketmq/producer/ConsumeException.java
  34. 34
      dk-visual/rocketmq/src/test/java/com/ruoyi/testrocketmq/producer/MessageContext.java
  35. 110
      dk-visual/rocketmq/src/test/java/com/ruoyi/testrocketmq/producer/MessageProducer.java

14
dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/device/AirConditionerStateEnum.java

@ -11,7 +11,7 @@ import java.util.Arrays;
* @version 1.7 * @version 1.7
* @date 2023/6/30 * @date 2023/6/30
*/ */
public enum AirConditionerStateEnum { public enum AirConditionerStateEnum {
IDLE(0), IDLE(0),
@ -33,6 +33,18 @@ public enum AirConditionerStateEnum {
DEHUMIDIFICATION_PREPARATION(9), DEHUMIDIFICATION_PREPARATION(9),
FORCED_AIR_COOLING_PREPARE(10),
FORCED_AIR_COOLING_CENTRE(11),
FORCED_AIR_COOLING_EXIT(12),
MIST_PREPARE(13),
MIST_CENTRE(14),
MIST_EXIT(15),
DISCONNECTED(32767), DISCONNECTED(32767),
; ;

15
dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/device/api/AbstractDeviceService.java

@ -5,6 +5,8 @@ import org.dromara.common.sdk.cloudapi.device.*;
import org.dromara.common.sdk.cloudapi.property.DockDroneCommanderFlightHeight; import org.dromara.common.sdk.cloudapi.property.DockDroneCommanderFlightHeight;
import org.dromara.common.sdk.cloudapi.property.DockDroneCommanderModeLostAction; import org.dromara.common.sdk.cloudapi.property.DockDroneCommanderModeLostAction;
import org.dromara.common.sdk.cloudapi.property.DockDroneRthMode; import org.dromara.common.sdk.cloudapi.property.DockDroneRthMode;
import org.dromara.common.sdk.cloudapi.psdk.PsdkUiResource;
import org.dromara.common.sdk.cloudapi.psdk.PsdkWidgetValues;
import org.dromara.common.sdk.config.version.CloudSDKVersionEnum; import org.dromara.common.sdk.config.version.CloudSDKVersionEnum;
import org.dromara.common.sdk.config.version.GatewayTypeEnum; import org.dromara.common.sdk.config.version.GatewayTypeEnum;
import org.dromara.common.sdk.mqtt.ChannelName; import org.dromara.common.sdk.mqtt.ChannelName;
@ -271,4 +273,17 @@ public class AbstractDeviceService {
throw new UnsupportedOperationException("dockSilentMode not implemented"); throw new UnsupportedOperationException("dockSilentMode not implemented");
} }
@CloudSDKVersion(since = CloudSDKVersionEnum.V1_0_2, include = GatewayTypeEnum.DOCK)
@ServiceActivator(inputChannel = ChannelName.INBOUND_STATE_DOCK_PSDK_UI_RESOURCE, outputChannel = ChannelName.OUTBOUND_STATE)
public void dockPsdkUiResource(TopicStateRequest<PsdkUiResource> request, MessageHeaders headers) {
throw new UnsupportedOperationException("dockPsdkUiResource not implemented");
}
@CloudSDKVersion(since = CloudSDKVersionEnum.V1_0_2, include = GatewayTypeEnum.DOCK)
@ServiceActivator(inputChannel = ChannelName.INBOUND_STATE_DOCK_PSDK_WIDGE_VALUES, outputChannel = ChannelName.OUTBOUND_STATE)
public void dockPsdkWidgetValues(TopicStateRequest<PsdkWidgetValues> request, MessageHeaders headers) {
throw new UnsupportedOperationException("dockPsdkWidgetValues not implemented");
}
} }

48
dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/interconnection/PsdkFloatingWindowTextPsdk.java

@ -0,0 +1,48 @@
package org.dromara.common.sdk.cloudapi.interconnection;
/**
* @author sean
* @version 1.7
* @date 2023/10/16
*/
public class PsdkFloatingWindowTextPsdk {
/**
* Data content
* length: Less than 256
*/
private Integer psdkIndex;
private String value;
public PsdkFloatingWindowTextPsdk() {
}
@Override
public String toString() {
return "PsdkFloatingWindowTextPsdk{" +
"psdkIndex=" + psdkIndex +
",value='" + value + '\'' +
'}';
}
public String getValue() {
return value;
}
public PsdkFloatingWindowTextPsdk setValue(String value) {
this.value = value;
return this;
}
public Integer getPsdkIndex() {
return psdkIndex;
}
public PsdkFloatingWindowTextPsdk setPsdkIndex(Integer psdkIndex) {
this.psdkIndex = psdkIndex;
return this;
}
}

13
dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/interconnection/api/AbstractInterconnectionService.java

@ -1,10 +1,7 @@
package org.dromara.common.sdk.cloudapi.interconnection.api; package org.dromara.common.sdk.cloudapi.interconnection.api;
import org.dromara.common.sdk.annotations.CloudSDKVersion; import org.dromara.common.sdk.annotations.CloudSDKVersion;
import org.dromara.common.sdk.cloudapi.interconnection.CustomDataTransmissionFromEsdk; import org.dromara.common.sdk.cloudapi.interconnection.*;
import org.dromara.common.sdk.cloudapi.interconnection.CustomDataTransmissionToEsdkRequest;
import org.dromara.common.sdk.cloudapi.interconnection.CustomDataTransmissionToPsdkRequest;
import org.dromara.common.sdk.cloudapi.interconnection.InterconnectionMethodEnum;
import org.dromara.common.sdk.config.version.CloudSDKVersionEnum; import org.dromara.common.sdk.config.version.CloudSDKVersionEnum;
import org.dromara.common.sdk.config.version.GatewayManager; import org.dromara.common.sdk.config.version.GatewayManager;
import org.dromara.common.sdk.config.version.GatewayTypeEnum; import org.dromara.common.sdk.config.version.GatewayTypeEnum;
@ -64,10 +61,16 @@ public abstract class AbstractInterconnectionService {
*/ */
@ServiceActivator(inputChannel = ChannelName.INBOUND_EVENTS_CUSTOM_DATA_TRANSMISSION_FROM_PSDK, outputChannel = ChannelName.OUTBOUND_EVENTS) @ServiceActivator(inputChannel = ChannelName.INBOUND_EVENTS_CUSTOM_DATA_TRANSMISSION_FROM_PSDK, outputChannel = ChannelName.OUTBOUND_EVENTS)
@CloudSDKVersion(since = CloudSDKVersionEnum.V1_0_0) @CloudSDKVersion(since = CloudSDKVersionEnum.V1_0_0)
public TopicEventsResponse<MqttReply> customDataTransmissionFromPsdk(TopicEventsRequest<CustomDataTransmissionFromEsdk> request, MessageHeaders headers) { public void customDataTransmissionFromPsdk(TopicEventsRequest<CustomDataTransmissionFromEsdk> request, MessageHeaders headers) {
throw new UnsupportedOperationException("customDataTransmissionFromPsdk not implemented"); throw new UnsupportedOperationException("customDataTransmissionFromPsdk not implemented");
} }
@ServiceActivator(inputChannel = ChannelName.INBOUND_EVENTS_PSDK_FLOARUBF_WINDOW_TEXT, outputChannel = ChannelName.OUTBOUND_EVENTS)
@CloudSDKVersion(since = CloudSDKVersionEnum.V1_0_0)
public void psdkFloatingWindowText(TopicEventsRequest<PsdkFloatingWindowTextPsdk> request, MessageHeaders headers) {
throw new UnsupportedOperationException("psdkFloatingWindowText not implemented");
}
/** /**
* cloud-custom data transmit to psdk * cloud-custom data transmit to psdk
* @param gateway gateway device * @param gateway gateway device

2
dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/livestream/VideoTypeEnum.java

@ -36,7 +36,7 @@ public enum VideoTypeEnum {
@JsonCreator @JsonCreator
public static VideoTypeEnum find(String videoType) { public static VideoTypeEnum find(String videoType) {
return Arrays.stream(values()).filter(typeEnum -> typeEnum.type.equals(videoType)).findAny() return Arrays.stream(values()).filter(typeEnum -> typeEnum.type.equals(videoType)).findAny()
.orElseThrow(() -> new CloudSDKException(VideoTypeEnum.class , videoType)); .orElseThrow(() -> new CloudSDKException(VideoTypeEnum.class , videoType));
} }
} }

104
dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/psdk/PsdkSpeaker.java

@ -0,0 +1,104 @@
package org.dromara.common.sdk.cloudapi.psdk;
import com.fasterxml.jackson.annotation.JsonProperty;
import org.dromara.common.sdk.common.BaseModel;
/**
* @auther wuyuan
* @data 2025/3/29
*/
public class PsdkSpeaker {
@JsonProperty("play_file_md5")
private Integer playFileMd5;
@JsonProperty("play_file_name")
private String playFileName;
@JsonProperty("play_mode")
private String playMode;
@JsonProperty("play_volume")
private Integer playVolume;
@JsonProperty("system_state")
private Integer systemState;
@JsonProperty("work_mode")
private Integer workMode;
public PsdkSpeaker() {
}
@Override
public String toString() {
return "PsdkSpeaker{" +
"playFileMd5=" + playFileMd5 +
",playFileName=" + playFileName +
",playMode=" + playMode +
",playVolume=" + playVolume +
",systemState=" + systemState +
",workMode=" + workMode +
'}';
}
public Integer getPlayFileMd5() {
return playFileMd5;
}
public PsdkSpeaker setPlayFileMd5(Integer playFileMd5) {
this.playFileMd5 = playFileMd5;
return this;
}
public String getPlayFileName() {
return playFileName;
}
public PsdkSpeaker setPlayFileName(String playFileName) {
this.playFileName = playFileName;
return this;
}
public String getPlayMode() {
return playMode;
}
public PsdkSpeaker setPlayMode(String playMode) {
this.playMode = playMode;
return this;
}
public Integer getPlayVolume() {
return playVolume;
}
public PsdkSpeaker setPlayVolume(Integer playVolume) {
this.playVolume = playVolume;
return this;
}
public Integer getSystemState() {
return systemState;
}
public PsdkSpeaker setSystemState(Integer systemState) {
this.systemState = systemState;
return this;
}
public Integer getWorkMode() {
return workMode;
}
public PsdkSpeaker setWorkMode(Integer workMode) {
this.workMode = workMode;
return this;
}
}

56
dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/psdk/PsdkUiResource.java

@ -0,0 +1,56 @@
package org.dromara.common.sdk.cloudapi.psdk;
import com.fasterxml.jackson.annotation.JsonProperty;
import org.dromara.common.sdk.common.BaseModel;
/**
* @auther wuyuan
* @data 2025/3/29
*/
public class PsdkUiResource {
@JsonProperty("object_key")
private Integer objectKey;
@JsonProperty("psdk_index")
private Integer psdkIndex;
@JsonProperty("psdk_ready")
private Integer psdkReady;
@Override
public String toString() {
return "PsdkWidgetValue{" +
"objectKey=" + objectKey +
",psdkIndex=" + psdkIndex +
",psdkReady=" + psdkReady +
'}';
}
public Integer getObjectKey() {
return objectKey;
}
public PsdkUiResource setObjectKey(Integer objectKey) {
this.objectKey = objectKey;
return this;
}
public Integer getPsdkIndex() {
return psdkIndex;
}
public PsdkUiResource setPsdkIndex(Integer psdkIndex) {
this.psdkIndex = psdkIndex;
return this;
}
public Integer getPsdkReady() {
return psdkReady;
}
public PsdkUiResource setPsdkReady(Integer psdkReady) {
this.psdkReady = psdkReady;
return this;
}
}

119
dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/psdk/PsdkWidgetValue.java

@ -0,0 +1,119 @@
package org.dromara.common.sdk.cloudapi.psdk;
import com.fasterxml.jackson.annotation.JsonProperty;
import jakarta.validation.constraints.NotNull;
import org.dromara.common.sdk.cloudapi.device.DockSilentMode;
import org.dromara.common.sdk.cloudapi.property.SilentModeEnum;
import org.dromara.common.sdk.common.BaseModel;
import java.util.List;
/**
* @auther wuyuan
* @data 2025/3/29
*/
public class PsdkWidgetValue {
@JsonProperty("psdk_index")
private Integer psdkIndex;
@JsonProperty("psdk_lib_version")
private String psdkLibVersion;
@JsonProperty("psdk_name")
private String psdkName;
@JsonProperty("psdk_type")
private String psdkType;
@JsonProperty("psdk_version")
private String psdkVersion;
@JsonProperty("psdk_speaker")
private PsdkSpeaker psdkSpeaker;
@JsonProperty("values")
private List<String> values;
public PsdkWidgetValue() {
}
@Override
public String toString() {
return "PsdkWidgetValue{" +
"psdkIndex=" + psdkIndex +
",psdkLibVersion=" + psdkLibVersion +
",psdkName=" + psdkName +
",psdkType=" + psdkType +
",psdkVersion=" + psdkVersion +
",psdkSpeaker=" + psdkSpeaker +
",values=" + values +
'}';
}
public Integer getPsdkIndex() {
return psdkIndex;
}
public PsdkWidgetValue setPsdkIndex(Integer psdkIndex) {
this.psdkIndex = psdkIndex;
return this;
}
public String getPsdkLibVersion() {
return psdkLibVersion;
}
public PsdkWidgetValue setPsdkLibVersion(String psdkLibVersion) {
this.psdkLibVersion = psdkLibVersion;
return this;
}
public String getPsdkName() {
return psdkName;
}
public PsdkWidgetValue setPsdkName(String psdkName) {
this.psdkName = psdkName;
return this;
}
public String getPsdkType() {
return psdkType;
}
public PsdkWidgetValue setPsdkType(String psdkType) {
this.psdkType = psdkType;
return this;
}
public String getPsdkVersion() {
return psdkVersion;
}
public PsdkWidgetValue setPsdkVersion(String psdkVersion) {
this.psdkVersion = psdkVersion;
return this;
}
public List<String> getValues() {
return values;
}
public PsdkWidgetValue setValues(List<String> values) {
this.values = values;
return this;
}
public PsdkSpeaker getPsdkSpeaker() {
return psdkSpeaker;
}
public PsdkWidgetValue setPsdkSpeaker(PsdkSpeaker psdkSpeaker) {
this.psdkSpeaker = psdkSpeaker;
return this;
}
}

39
dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/psdk/PsdkWidgetValues.java

@ -0,0 +1,39 @@
package org.dromara.common.sdk.cloudapi.psdk;
import com.fasterxml.jackson.annotation.JsonProperty;
import jakarta.validation.constraints.NotNull;
import org.dromara.common.sdk.cloudapi.device.DockPayloadControlSource;
import org.dromara.common.sdk.cloudapi.device.DockSilentMode;
import org.dromara.common.sdk.cloudapi.property.SilentModeEnum;
import org.dromara.common.sdk.common.BaseModel;
import java.util.List;
/**
* @auther wuyuan
* @data 2025/3/29
*/
public class PsdkWidgetValues {
@JsonProperty("psdk_widget_values")
private List<PsdkWidgetValue> psdkWidgetValues;
public PsdkWidgetValues() {
}
@Override
public String toString() {
return "PsdkWidgetValues{" +
"psdkWidgetValues=" + psdkWidgetValues +
'}';
}
public List<PsdkWidgetValue> getPsdkWidgetValues() {
return psdkWidgetValues;
}
public PsdkWidgetValues setPsdkWidgetValues(List<PsdkWidgetValue> psdkWidgetValues) {
this.psdkWidgetValues = psdkWidgetValues;
return this;
}
}

2
dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/wayline/api/AbstractWaylineService.java

@ -189,7 +189,7 @@ public abstract class AbstractWaylineService {
*/ */
@ServiceActivator(inputChannel = ChannelName.INBOUND_EVENTS_RETURN_HOME_INFO, outputChannel = ChannelName.OUTBOUND_EVENTS) @ServiceActivator(inputChannel = ChannelName.INBOUND_EVENTS_RETURN_HOME_INFO, outputChannel = ChannelName.OUTBOUND_EVENTS)
@CloudSDKVersion(since = CloudSDKVersionEnum.V1_0_0) @CloudSDKVersion(since = CloudSDKVersionEnum.V1_0_0)
public TopicRequestsResponse<MqttReply> returnHomeInfo(TopicRequestsRequest<ReturnHomeInfo> request, MessageHeaders headers) { public void returnHomeInfo(TopicRequestsRequest<ReturnHomeInfo> request, MessageHeaders headers) {
throw new UnsupportedOperationException("returnHomeInfo not implemented"); throw new UnsupportedOperationException("returnHomeInfo not implemented");
} }

8
dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/mqtt/ChannelName.java

@ -67,6 +67,12 @@ public class ChannelName {
public static final String INBOUND_STATE_DOCK_SILENT_MODE = "inboundStateDockSilentMode"; public static final String INBOUND_STATE_DOCK_SILENT_MODE = "inboundStateDockSilentMode";
public static final String INBOUND_STATE_DOCK_PSDK_WIDGE_VALUES = "inboundStateDockPsdkWidgetValues";
public static final String INBOUND_STATE_DOCK_PSDK_UI_RESOURCE = "inboundStateDockPsdUiResource";
public static final String OUTBOUND_STATE = "outboundState"; public static final String OUTBOUND_STATE = "outboundState";
@ -146,6 +152,8 @@ public class ChannelName {
public static final String INBOUND_EVENTS_CUSTOM_DATA_TRANSMISSION_FROM_PSDK = "inboundEventsCustomDataTransmissionFromPsdk"; public static final String INBOUND_EVENTS_CUSTOM_DATA_TRANSMISSION_FROM_PSDK = "inboundEventsCustomDataTransmissionFromPsdk";
public static final String INBOUND_EVENTS_PSDK_FLOARUBF_WINDOW_TEXT = "inboundEventsPsdkFloatingWindowText";
public static final String INBOUND_EVENTS_AIRSENSE_WARNING = "inboundEventsAirsenseWarning"; public static final String INBOUND_EVENTS_AIRSENSE_WARNING = "inboundEventsAirsenseWarning";
public static final String INBOUND_EVENTS_FLIGHT_AREAS_SYNC_PROGRESS = "inboundEventsFlightAreasSyncProgress"; public static final String INBOUND_EVENTS_FLIGHT_AREAS_SYNC_PROGRESS = "inboundEventsFlightAreasSyncProgress";

5
dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/mqtt/events/EventsMethodEnum.java

@ -9,6 +9,7 @@ import org.dromara.common.sdk.cloudapi.flightarea.FlightAreasSyncProgress;
import org.dromara.common.sdk.cloudapi.hms.Hms; import org.dromara.common.sdk.cloudapi.hms.Hms;
import org.dromara.common.sdk.cloudapi.interconnection.CustomDataTransmissionFromEsdk; import org.dromara.common.sdk.cloudapi.interconnection.CustomDataTransmissionFromEsdk;
import org.dromara.common.sdk.cloudapi.interconnection.CustomDataTransmissionFromPsdk; import org.dromara.common.sdk.cloudapi.interconnection.CustomDataTransmissionFromPsdk;
import org.dromara.common.sdk.cloudapi.interconnection.PsdkFloatingWindowTextPsdk;
import org.dromara.common.sdk.cloudapi.log.FileUploadProgress; import org.dromara.common.sdk.cloudapi.log.FileUploadProgress;
import org.dromara.common.sdk.cloudapi.map.OfflineMapSyncProgress; import org.dromara.common.sdk.cloudapi.map.OfflineMapSyncProgress;
import org.dromara.common.sdk.cloudapi.media.FileUploadCallback; import org.dromara.common.sdk.cloudapi.media.FileUploadCallback;
@ -86,6 +87,10 @@ public enum EventsMethodEnum {
CUSTOM_DATA_TRANSMISSION_FROM_PSDK("custom_data_transmission_from_psdk", ChannelName.INBOUND_EVENTS_CUSTOM_DATA_TRANSMISSION_FROM_PSDK, new TypeReference<CustomDataTransmissionFromPsdk>() {}), CUSTOM_DATA_TRANSMISSION_FROM_PSDK("custom_data_transmission_from_psdk", ChannelName.INBOUND_EVENTS_CUSTOM_DATA_TRANSMISSION_FROM_PSDK, new TypeReference<CustomDataTransmissionFromPsdk>() {}),
PSDK_FLOARUBF_WINDOW_TEXT("psdk_floating_window_text", ChannelName.INBOUND_EVENTS_PSDK_FLOARUBF_WINDOW_TEXT, new TypeReference<PsdkFloatingWindowTextPsdk>() {}),
AIRSENSE_WARNING("airsense_warning", ChannelName.INBOUND_EVENTS_AIRSENSE_WARNING, new TypeReference<List<AirsenseWarning>>() {}), AIRSENSE_WARNING("airsense_warning", ChannelName.INBOUND_EVENTS_AIRSENSE_WARNING, new TypeReference<List<AirsenseWarning>>() {}),
FLIGHT_AREAS_SYNC_PROGRESS("flight_areas_sync_progress", ChannelName.INBOUND_EVENTS_FLIGHT_AREAS_SYNC_PROGRESS, new TypeReference<FlightAreasSyncProgress>() {}), FLIGHT_AREAS_SYNC_PROGRESS("flight_areas_sync_progress", ChannelName.INBOUND_EVENTS_FLIGHT_AREAS_SYNC_PROGRESS, new TypeReference<FlightAreasSyncProgress>() {}),

5
dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/mqtt/state/DockStateDataKeyEnum.java

@ -6,6 +6,8 @@ import org.dromara.common.sdk.cloudapi.property.DockDroneCommanderFlightHeight;
import org.dromara.common.sdk.cloudapi.property.DockDroneCommanderModeLostAction; import org.dromara.common.sdk.cloudapi.property.DockDroneCommanderModeLostAction;
import org.dromara.common.sdk.cloudapi.property.DockDroneOfflineMapEnable; import org.dromara.common.sdk.cloudapi.property.DockDroneOfflineMapEnable;
import org.dromara.common.sdk.cloudapi.property.DockDroneRthMode; import org.dromara.common.sdk.cloudapi.property.DockDroneRthMode;
import org.dromara.common.sdk.cloudapi.psdk.PsdkUiResource;
import org.dromara.common.sdk.cloudapi.psdk.PsdkWidgetValues;
import org.dromara.common.sdk.exception.CloudSDKException; import org.dromara.common.sdk.exception.CloudSDKException;
import java.util.Arrays; import java.util.Arrays;
@ -50,6 +52,9 @@ public enum DockStateDataKeyEnum {
SILENT_MODE(Set.of("silent_mode"), DockSilentMode.class), SILENT_MODE(Set.of("silent_mode"), DockSilentMode.class),
PSDK_WIDGE_VALUES(Set.of("psdk_widget_values"), PsdkWidgetValues.class),
PSDK_UI_RESOURCE(Set.of("psdk_ui_resource"), PsdkUiResource.class),
; ;
private final Set<String> keys; private final Set<String> keys;

7
dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/mqtt/state/StateDataKeyEnum.java

@ -7,6 +7,8 @@ import org.dromara.common.sdk.cloudapi.property.DockDroneCommanderFlightHeight;
import org.dromara.common.sdk.cloudapi.property.DockDroneCommanderModeLostAction; import org.dromara.common.sdk.cloudapi.property.DockDroneCommanderModeLostAction;
import org.dromara.common.sdk.cloudapi.property.DockDroneOfflineMapEnable; import org.dromara.common.sdk.cloudapi.property.DockDroneOfflineMapEnable;
import org.dromara.common.sdk.cloudapi.property.DockDroneRthMode; import org.dromara.common.sdk.cloudapi.property.DockDroneRthMode;
import org.dromara.common.sdk.cloudapi.psdk.PsdkUiResource;
import org.dromara.common.sdk.cloudapi.psdk.PsdkWidgetValues;
import org.dromara.common.sdk.mqtt.ChannelName; import org.dromara.common.sdk.mqtt.ChannelName;
import java.util.Arrays; import java.util.Arrays;
@ -59,6 +61,11 @@ public enum StateDataKeyEnum {
DOCK_SILENT_MODE(ChannelName.INBOUND_STATE_DOCK_SILENT_MODE, DockSilentMode.class), DOCK_SILENT_MODE(ChannelName.INBOUND_STATE_DOCK_SILENT_MODE, DockSilentMode.class),
DOCK_PSDK_WIDGE_VALUES(ChannelName.INBOUND_STATE_DOCK_PSDK_WIDGE_VALUES, PsdkWidgetValues.class),
DOCK_PSDK_UI_RESOURCE(ChannelName.INBOUND_STATE_DOCK_PSDK_UI_RESOURCE, PsdkUiResource.class),
UNKNOWN(ChannelName.DEFAULT, Object.class); UNKNOWN(ChannelName.DEFAULT, Object.class);
private final String channelName; private final String channelName;

22
dk-modules/sample/pom.xml

@ -131,6 +131,28 @@
<artifactId>aws-java-sdk-sts</artifactId> <artifactId>aws-java-sdk-sts</artifactId>
<version>1.12.261</version> <version>1.12.261</version>
</dependency> </dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
</dependencies> </dependencies>
<build>
<finalName>${project.artifactId}</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>${spring-boot.version}</version>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project> </project>

3
dk-modules/sample/src/main/java/org/dromara/sample/control/service/impl/ControlServiceImpl.java

@ -34,6 +34,9 @@ import java.util.Objects;
import java.util.Optional; import java.util.Optional;
import java.util.UUID; import java.util.UUID;
import static org.dromara.common.sdk.cloudapi.device.RcLostActionEnum.RETURN_HOME;
import static org.dromara.common.sdk.cloudapi.wayline.WaylineMethodEnum.RETURN_HOME_CANCEL;
/** /**
* @author sean * @author sean
* @version 1.2 * @version 1.2

26
dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/InterconnectionService.java

@ -0,0 +1,26 @@
package org.dromara.sample.manage.service.impl;
import lombok.extern.slf4j.Slf4j;
import org.dromara.common.sdk.cloudapi.interconnection.CustomDataTransmissionFromEsdk;
import org.dromara.common.sdk.cloudapi.interconnection.PsdkFloatingWindowTextPsdk;
import org.dromara.common.sdk.cloudapi.interconnection.api.AbstractInterconnectionService;
import org.dromara.common.sdk.mqtt.events.TopicEventsRequest;
import org.springframework.messaging.MessageHeaders;
import org.springframework.stereotype.Service;
/**
* @auther wuyuan
* @data 2025/3/29
*/
@Service
@Slf4j
public class InterconnectionService extends AbstractInterconnectionService {
public void customDataTransmissionFromPsdk(TopicEventsRequest<CustomDataTransmissionFromEsdk> request, MessageHeaders headers) {
log.info(request.toString());
}
public void psdkFloatingWindowText(TopicEventsRequest<PsdkFloatingWindowTextPsdk> request, MessageHeaders headers) {
log.info(request.toString());
}
}

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

@ -2,6 +2,8 @@ package org.dromara.sample.manage.service.impl;
import org.dromara.common.sdk.cloudapi.device.*; import org.dromara.common.sdk.cloudapi.device.*;
import org.dromara.common.sdk.cloudapi.device.api.AbstractDeviceService; import org.dromara.common.sdk.cloudapi.device.api.AbstractDeviceService;
import org.dromara.common.sdk.cloudapi.psdk.PsdkUiResource;
import org.dromara.common.sdk.cloudapi.psdk.PsdkWidgetValues;
import org.dromara.common.sdk.cloudapi.tsa.DeviceIconUrl; import org.dromara.common.sdk.cloudapi.tsa.DeviceIconUrl;
import org.dromara.common.sdk.cloudapi.tsa.IconUrlEnum; import org.dromara.common.sdk.cloudapi.tsa.IconUrlEnum;
import org.dromara.common.sdk.common.SDKManager; import org.dromara.common.sdk.common.SDKManager;
@ -360,6 +362,16 @@ public class SDKDeviceService extends AbstractDeviceService {
.build()).collect(Collectors.toList())); .build()).collect(Collectors.toList()));
} }
@Override
public void dockPsdkUiResource(TopicStateRequest<PsdkUiResource> request, MessageHeaders headers){
log.info(request.toString());
}
@Override
public void dockPsdkWidgetValues(TopicStateRequest<PsdkWidgetValues> request, MessageHeaders headers){
log.info(request.toString());
}
private void dockGoOnline(DeviceDTO gateway, DeviceDTO subDevice) { private void dockGoOnline(DeviceDTO gateway, DeviceDTO subDevice) {
if (DeviceDomainEnum.DOCK != gateway.getDomain()) { if (DeviceDomainEnum.DOCK != gateway.getDomain()) {
return; return;

5
dk-modules/sample/src/main/java/org/dromara/sample/map/service/impl/FlightAreaFileServiceImpl.java

@ -17,6 +17,8 @@ import org.dromara.sample.map.service.IWorkspaceElementService;
import com.fasterxml.jackson.core.JsonGenerator; import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
import org.apache.commons.codec.digest.DigestUtils; import org.apache.commons.codec.digest.DigestUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
@ -39,6 +41,7 @@ import java.util.stream.Collectors;
@Transactional @Transactional
public class FlightAreaFileServiceImpl implements IFlightAreaFileService { public class FlightAreaFileServiceImpl implements IFlightAreaFileService {
private static final Logger log = LoggerFactory.getLogger(FlightAreaFileServiceImpl.class);
@Autowired @Autowired
private IFlightAreaFileMapper mapper; private IFlightAreaFileMapper mapper;
@ -101,7 +104,6 @@ public class FlightAreaFileServiceImpl implements IFlightAreaFileService {
} }
private FlightAreaFileDTO generateFlightAreaFile(String workspaceId, List<FlightAreaDTO> flightAreas) { private FlightAreaFileDTO generateFlightAreaFile(String workspaceId, List<FlightAreaDTO> flightAreas) {
FlightAreaJson flightAreaJson = new FlightAreaJson() FlightAreaJson flightAreaJson = new FlightAreaJson()
.setFeatures(flightAreas.stream() .setFeatures(flightAreas.stream()
.map(this::generateFlightAreaFeature) .map(this::generateFlightAreaFeature)
@ -117,6 +119,7 @@ public class FlightAreaFileServiceImpl implements IFlightAreaFileService {
} }
is.reset(); is.reset();
OssClient storage = OssFactory.instance("flightareafile"); OssClient storage = OssFactory.instance("flightareafile");
log.info(is.toString()+"==========================="+name+"======================"+length);
storage.uploadSuffix(is,name,length,"json"); storage.uploadSuffix(is,name,length,"json");
return FlightAreaFileDTO.builder() return FlightAreaFileDTO.builder()
.name(name) .name(name)

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

@ -171,6 +171,9 @@ public class FlightAreaServiceImpl extends AbstractFlightAreaService implements
@Override @Override
public FlightAreaFileDTO packageFlightArea(String workspaceId) { public FlightAreaFileDTO packageFlightArea(String workspaceId) {
List<FlightAreaDTO> flightAreas = getFlightAreaList(workspaceId); List<FlightAreaDTO> flightAreas = getFlightAreaList(workspaceId);
if(flightAreas.size() == 0){
return null;
}
return flightAreaFileService.packageFlightAreaFile(workspaceId, flightAreas); return flightAreaFileService.packageFlightAreaFile(workspaceId, flightAreas);
} }
@ -296,6 +299,9 @@ public class FlightAreaServiceImpl extends AbstractFlightAreaService implements
FlightAreaFileDTO file = fileOpt.orElse(null); FlightAreaFileDTO file = fileOpt.orElse(null);
if (flightAreaOpt.isEmpty() || fileOpt.isEmpty()) { if (flightAreaOpt.isEmpty() || fileOpt.isEmpty()) {
file = packageFlightArea(device.getWorkspaceId()); file = packageFlightArea(device.getWorkspaceId());
if(file == null){
return null;
}
} }
OssClient storage = OssFactory.instance("flightareafile"); OssClient storage = OssFactory.instance("flightareafile");
return new TopicRequestsResponse<MqttReply<FlightAreasGetResponse>>().setData( return new TopicRequestsResponse<MqttReply<FlightAreasGetResponse>>().setData(

5
dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/impl/FlightTaskServiceImpl.java

@ -13,6 +13,7 @@ import org.dromara.common.sdk.common.SDKManager;
import org.dromara.common.sdk.mqtt.MqttReply; import org.dromara.common.sdk.mqtt.MqttReply;
import org.dromara.common.sdk.mqtt.events.TopicEventsRequest; import org.dromara.common.sdk.mqtt.events.TopicEventsRequest;
import org.dromara.common.sdk.mqtt.events.TopicEventsResponse; import org.dromara.common.sdk.mqtt.events.TopicEventsResponse;
import org.dromara.common.sdk.mqtt.requests.TopicRequestsRequest;
import org.dromara.common.sdk.mqtt.services.ServicesReplyData; import org.dromara.common.sdk.mqtt.services.ServicesReplyData;
import org.dromara.common.sdk.mqtt.services.TopicServicesResponse; import org.dromara.common.sdk.mqtt.services.TopicServicesResponse;
import org.dromara.sample.common.error.CommonErrorEnum; import org.dromara.sample.common.error.CommonErrorEnum;
@ -184,6 +185,10 @@ public class FlightTaskServiceImpl extends AbstractWaylineService implements IFl
} }
public void returnHomeInfo(TopicRequestsRequest<ReturnHomeInfo> request, MessageHeaders headers) {
log.info(request.toString());
}
/** /**
* For immediate tasks, the server time shall prevail. * For immediate tasks, the server time shall prevail.
* @param param * @param param

1
dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/impl/WaylineFileServiceImpl.java

@ -198,6 +198,7 @@ public class WaylineFileServiceImpl implements IWaylineFileService {
OssClient storage = OssFactory.instance("waylinefile"); OssClient storage = OssFactory.instance("waylinefile");
String originalfileName = file.getOriginalFilename(); String originalfileName = file.getOriginalFilename();
String suffix = org.apache.commons.lang3.StringUtils.substring(originalfileName, originalfileName.lastIndexOf("."), originalfileName.length()); String suffix = org.apache.commons.lang3.StringUtils.substring(originalfileName, originalfileName.lastIndexOf("."), originalfileName.length());
suffix = "waylinefile/"+suffix;
UploadResult uploadResult = storage.uploadSuffix(file.getBytes(), suffix, file.getContentType()); UploadResult uploadResult = storage.uploadSuffix(file.getBytes(), suffix, file.getContentType());
waylineFile.setObjectKey(uploadResult.getFilename()); waylineFile.setObjectKey(uploadResult.getFilename());
List<String> deviceSns = new ArrayList<>(); List<String> deviceSns = new ArrayList<>();

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

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

25
dk-visual/rocketmq/src/test/java/com/ruoyi/testrocketmq/RocketMQApplication.java

@ -1,25 +0,0 @@
package com.ruoyi.testrocketmq;
import com.ruoyi.common.security.annotation.EnableCustomConfig;
import com.ruoyi.common.security.annotation.EnableRyFeignClients;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableAsync;
/**
* 平台管理模块
*
* @author ruoyi
*/
@EnableCustomConfig
@EnableRyFeignClients
@SpringBootApplication
@EnableAsync
public class RocketMQApplication
{
public static void main(String[] args)
{
SpringApplication.run(RocketMQApplication.class, args);
System.out.println("(♥◠‿◠)ノ゙ RocketMQ模块启动成功 ლ(´ڡ`ლ)゙");
}
}

64
dk-visual/rocketmq/src/test/java/com/ruoyi/testrocketmq/config/ConsumerConfig.java

@ -1,64 +0,0 @@
package com.ruoyi.testrocketmq.config;
import com.ruoyi.testrocketmq.consumer.RocketMsgListener;
import com.ruoyi.testrocketmq.enums.MessageCodeEnum;
import com.ruoyi.testrocketmq.model.ConsumerMode;
import lombok.extern.slf4j.Slf4j;
import org.apache.rocketmq.client.consumer.DefaultMQPushConsumer;
import org.apache.rocketmq.client.exception.MQClientException;
import org.apache.rocketmq.common.consumer.ConsumeFromWhere;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* 消费者配置
*/
@RefreshScope
@Configuration
@Slf4j
public class ConsumerConfig {
@Autowired
private ConsumerMode consumerMode;
@Bean
public DefaultMQPushConsumer getRocketMQConsumer() throws MQClientException {
// ConsumerMode consumerMode = new ConsumerMode();
DefaultMQPushConsumer consumer = new DefaultMQPushConsumer(consumerMode.getGroupName());
consumer.setNamesrvAddr(consumerMode.getNamesrvAddr());
consumer.setConsumeThreadMin(consumerMode.getConsumeThreadMin());
consumer.setConsumeThreadMax(consumerMode.getConsumeThreadMax());
consumer.registerMessageListener(new RocketMsgListener());
/**
* 1. CONSUME_FROM_LAST_OFFSET第一次启动从队列最后位置消费后续再启动接着上次消费的进度开始消费
* 2. CONSUME_FROM_FIRST_OFFSET第一次启动从队列初始位置消费后续再启动接着上次消费的进度开始消费
* 3. CONSUME_FROM_TIMESTAMP第一次启动从指定时间点位置消费后续再启动接着上次消费的进度开始消费
* 以上所说的第一次启动是指从来没有消费过的消费者如果该消费者消费过那么会在broker端记录该消费者的消费位置如果该消费者挂了再启动那么自动从上次消费的进度开始
*/
consumer.setConsumeFromWhere(ConsumeFromWhere.CONSUME_FROM_LAST_OFFSET);
/**
* CLUSTERING (集群模式) 默认模式同一个ConsumerGroup(groupName相同)每个consumer只消费所订阅消息的一部分内容同一个ConsumerGroup里所有的Consumer消息加起来才是所
* 订阅topic整体从而达到负载均衡的目的
* BROADCASTING (广播模式) 同一个ConsumerGroup每个consumer都消费到所订阅topic所有消息也就是一个消费会被多次分发被多个consumer消费
*
*/
// consumer.setMessageModel(MessageModel.BROADCASTING);
consumer.setVipChannelEnabled(false);
consumer.setConsumeMessageBatchMaxSize(consumerMode.getConsumeMessageBatchMaxSize());
try {
/**
* 订阅topic可以对指定消息进行过滤例如"TopicTest","tagl||tag2||tag3",*或null表示topic所有消息
*/
consumer.subscribe(MessageCodeEnum.ORDER_MESSAGE.getCode(),"*");
consumer.subscribe(MessageCodeEnum.USER_MESSAGE.getCode(),"*");
consumer.start();
log.info("消费者初始化成功:{}", consumer.toString());
} catch (MQClientException e) {
e.printStackTrace();
log.error("消费者初始化失败:{}",e.getMessage());
}
return consumer;
}
}

27
dk-visual/rocketmq/src/test/java/com/ruoyi/testrocketmq/config/MessageConfig.java

@ -1,27 +0,0 @@
package com.ruoyi.testrocketmq.config;
/**
* @author yz
*/
public class MessageConfig {
private Class<?> messageClass;
private boolean orderlyMessage;
public Class<?> getMessageClass() {
return messageClass;
}
public void setMessageClass(Class<?> messageClass) {
this.messageClass = messageClass;
}
public boolean isOrderlyMessage() {
return orderlyMessage;
}
public void setOrderlyMessage(boolean orderlyMessage) {
this.orderlyMessage = orderlyMessage;
}
}

48
dk-visual/rocketmq/src/test/java/com/ruoyi/testrocketmq/config/ProducerConfig.java

@ -1,48 +0,0 @@
package com.ruoyi.testrocketmq.config;
import com.ruoyi.testrocketmq.model.ProducerMode;
import lombok.extern.slf4j.Slf4j;
import org.apache.rocketmq.client.exception.MQClientException;
import org.apache.rocketmq.client.producer.DefaultMQProducer;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
@Slf4j
public class ProducerConfig {
public static DefaultMQProducer producer;
@Autowired
private ProducerMode producerMode;
@Bean
public DefaultMQProducer getRocketMQProducer() {
producer = new DefaultMQProducer(producerMode.getGroupName());
producer.setNamesrvAddr(producerMode.getNamesrvAddr());
//如果需要同一个jvm中不同的producer往不同的mq集群发送消息,需要设置不同的instanceName
if(producerMode.getMaxMessageSize()!=null){
producer.setMaxMessageSize(producerMode.getMaxMessageSize());
}
if(producerMode.getSendMsgTimeout()!=null){
producer.setSendMsgTimeout(producerMode.getSendMsgTimeout());
}
//如果发送消息失败,设置重试次数,默认为2次
if(producerMode.getRetryTimesWhenSendFailed()!=null){
producer.setRetryTimesWhenSendFailed(producerMode.getRetryTimesWhenSendFailed());
}
producer.setVipChannelEnabled(false);
try {
producer.start();
log.info("生产者初始化成功:{}",producer.toString());
} catch (MQClientException e) {
log.error("生产者初始化失败:{}",e.getMessage());
}
return producer;
}
}

100
dk-visual/rocketmq/src/test/java/com/ruoyi/testrocketmq/consumer/RocketMsgListener.java

@ -1,100 +0,0 @@
package com.ruoyi.testrocketmq.consumer;
import com.ruoyi.testrocketmq.enums.MessageCodeEnum;
import com.ruoyi.testrocketmq.producer.ConsumeException;
import lombok.extern.slf4j.Slf4j;
import org.apache.rocketmq.client.consumer.listener.ConsumeConcurrentlyContext;
import org.apache.rocketmq.client.consumer.listener.ConsumeConcurrentlyStatus;
import org.apache.rocketmq.client.consumer.listener.MessageListenerConcurrently;
import org.apache.rocketmq.common.message.MessageExt;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
import java.io.UnsupportedEncodingException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
/**
* 消息监听
*/
@Slf4j
@Component
public class RocketMsgListener implements MessageListenerConcurrently {
/**
* 消费消息
*
* @param list msgs.size() >= 1
* DefaultMQPushConsumer.consumeMessageBatchMaxSize=1you can modify here
* 这里只设置为1当设置为多个时list中只要有一条消息消费失败就会整体重试
* @param consumeConcurrentlyContext 上下文信息
* @return 消费状态 成功CONSUME_SUCCESS或者 重试 (RECONSUME_LATER)
*/
@Override
public ConsumeConcurrentlyStatus consumeMessage(List<MessageExt> list, ConsumeConcurrentlyContext consumeConcurrentlyContext) {
if (!CollectionUtils.isEmpty(list)) {
for (MessageExt messageExt : list) {
// 消息内容
String body = new String(messageExt.getBody());
log.info("接受到的消息为:{}", body);
String tags = messageExt.getTags();
String topic = messageExt.getTopic();
String msgId = messageExt.getMsgId();
String keys = messageExt.getKeys();
int reConsume = messageExt.getReconsumeTimes();
// 消息已经重试了3次,如果不需要再次消费,则返回成功
if (reConsume == 3) {
// TODO 补偿信息
//smsLogService.insertLog(topic, tags, msgId, keys, body, "【" + EnumUtil.getStrMsgByCode(tags, TagsCodeEnum.class) + "】消费失败");
log.error("消息重试超过3次,消费失败!");
return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
}
// 订单超时处理
if (MessageCodeEnum.ORDER_MESSAGE.getCode().equals(topic)) {
if (MessageCodeEnum.ORDER_TIMEOUT_TAG.getCode().equals(tags)) {
// //获取订单
// DealUserOrder dealUserOrder = pcRemoteDealUserOrderService.selectDealUserOrderByOrderNumber(keys);
// if (dealUserOrder != null) {
// //订单状态超时未支付关闭订单 处理
// if (dealUserOrder.getStatus().equals("1")) {
// DealUserOrder dealUserOrders = new DealUserOrder();
// dealUserOrders.setOrderId(dealUserOrder.getOrderId());
// dealUserOrders.setStatus("4");
// pcRemoteDealUserOrderService.updateDealUserOrder(dealUserOrders);
// return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
// }
// log.info("Order does not exist.");
// }
log.info("Consumption success:" + body);
DateFormat format =new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
log.info("Consumption time:{}", format.format(new Date()));
} else {
log.info("未匹配到Tag【{}】" + tags);
}
}
}
}
// 消息消费成功
//ConsumeConcurrentlyStatus.RECONSUME_LATER broker会根据设置的messageDelayLevel发起重试,默认16次
return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
}
/**
* 异常处理
*
* @param e 捕获的异常
* @return 消息消费结果
*/
private static ConsumeConcurrentlyStatus handleException(final Exception e) {
Class exceptionClass = e.getClass();
if (exceptionClass.equals(UnsupportedEncodingException.class)) {
log.error(e.getMessage());
} else if (exceptionClass.equals(ConsumeException.class)) {
log.error(e.getMessage());
}
return ConsumeConcurrentlyStatus.RECONSUME_LATER;
}
}

60
dk-visual/rocketmq/src/test/java/com/ruoyi/testrocketmq/enums/MessageCodeEnum.java

@ -1,60 +0,0 @@
package com.ruoyi.testrocketmq.enums;
import lombok.Getter;
@Getter
public enum MessageCodeEnum {
/**
* 消息模块主题
*/
MESSAGE_TOPIC("elink-message","消息服务模块topic名称"),
/**
* 系统消息
*/
NOTE_MESSAGE("system-message","系统消息服务模块topic名称"),
/**
* 用户消息
*/
USER_MESSAGE("user-message","用户消息服务模块topic名称"),
/**
* 订单消息
*/
ORDER_MESSAGE("order-message","订单消息服务模块topic名称"),
/**
* 平台编号
*/
USER_MESSAGE_TAG("user_message_tag","用户消息推送"),
NOTE_MESSAGE_TAG("system_message_tag","系统消息推送"),
ORDER_MESSAGE_TAG("order_message_tag","订单消息推送"),
/**
* 订单处理编号
*/
//订单超时处理
ORDER_TIMEOUT_TAG("order_timeout_tag","订单超时处理");
private final String code;
private final String msg;
MessageCodeEnum(String code, String msg){
this.code = code;
this.msg = msg;
}
public static String valuesOfType(String code) {
String value = "";
for (MessageCodeEnum e : MessageCodeEnum.values()) {
if (code.equals(e.code)) {
value = e.msg;
}
}
return value;
}
}

22
dk-visual/rocketmq/src/test/java/com/ruoyi/testrocketmq/model/ConsumerMode.java

@ -1,22 +0,0 @@
package com.ruoyi.testrocketmq.model;
import lombok.Data;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Component;
@Data
@Configuration
@Component
public class ConsumerMode {
@Value("${suning.rocketmq.namesrvAddr}")
private String namesrvAddr;
@Value("${suning.rocketmq.conumer.groupName}")
private String groupName ;
@Value("${suning.rocketmq.conumer.consumeThreadMin}")
private int consumeThreadMin;
@Value("${suning.rocketmq.conumer.consumeThreadMax}")
private int consumeThreadMax;
@Value("${suning.rocketmq.conumer.consumeMessageBatchMaxSize}")
private int consumeMessageBatchMaxSize;
}

25
dk-visual/rocketmq/src/test/java/com/ruoyi/testrocketmq/model/ProducerMode.java

@ -1,25 +0,0 @@
package com.ruoyi.testrocketmq.model;
import lombok.Data;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.context.annotation.Configuration;
/**
* 生产者初始化
*/
@RefreshScope
@Data
@Configuration
public class ProducerMode {
@Value("${suning.rocketmq.producer.groupName}")
private String groupName;
@Value("${suning.rocketmq.namesrvAddr}")
private String namesrvAddr;
@Value("${suning.rocketmq.producer.maxMessageSize}")
private Integer maxMessageSize;
@Value("${suning.rocketmq.producer.sendMsgTimeout}")
private Integer sendMsgTimeout;
@Value("${suning.rocketmq.producer.retryTimesWhenSendFailed}")
private Integer retryTimesWhenSendFailed;
}

47
dk-visual/rocketmq/src/test/java/com/ruoyi/testrocketmq/producer/AsyncProducer.java

@ -1,47 +0,0 @@
package com.ruoyi.testrocketmq.producer;
import com.ruoyi.testrocketmq.config.ProducerConfig;
import org.springframework.beans.factory.annotation.Autowired;
public class AsyncProducer {
@Autowired
private ProducerConfig producerConfig;
/**
* 发送异步的消息
* @param topic 主题
* @param tag 标签
* @param key 自定义的key根据业务来定
* @param value 消息的内容
* @return org.apache.rocketmq.client.producer.SendResult
*/
// public SendResult sendAsyncProducerMessage(String topic, String tag, String key, String value) throws UnsupportedEncodingException {
//
// try {
// DefaultMQProducer defaultMQProducer = producerConfig.producer;
// //Create a message instance, specifying topic, tag and message body.
// Message msg = new Message(topic, tag, key,value.getBytes(RemotingHelper.DEFAULT_CHARSET));
// defaultMQProducer.send(msg, new SendCallback() {
// // 异步回调的处理
// @Override
// public void onSuccess(SendResult sendResult) {
// System.out.printf("%-10d 异步发送消息成功 %s %n", msg, sendResult.getMsgId());
// }
//
// @Override
// public void onException(Throwable e) {
// System.out.printf("%-10d 异步发送消息失败 %s %n", msg, e);
// e.printStackTrace();
// }
// });
// } catch (MQClientException e) {
// e.printStackTrace();
// } catch (RemotingException e) {
// e.printStackTrace();
// } catch (InterruptedException e) {
// e.printStackTrace();
// }
// return null;
// }
}

20
dk-visual/rocketmq/src/test/java/com/ruoyi/testrocketmq/producer/ConsumeException.java

@ -1,20 +0,0 @@
package com.ruoyi.testrocketmq.producer;
/**
* @author 影子
*/
public class ConsumeException extends RuntimeException{
private static final long serialVersionUID = 4093867789628938836L;
public ConsumeException(String message) {
super(message);
}
public ConsumeException(Throwable cause) {
super(cause);
}
public ConsumeException(String message, Throwable cause) {
super(message, cause);
}
}

34
dk-visual/rocketmq/src/test/java/com/ruoyi/testrocketmq/producer/MessageContext.java

@ -1,34 +0,0 @@
package com.ruoyi.testrocketmq.producer;
import lombok.Data;
import lombok.ToString;
import org.apache.rocketmq.common.message.MessageExt;
import org.apache.rocketmq.common.message.MessageQueue;
/**
* 消费时当前所消费的消息的上下文信息
*
* @author jolly
*/
@ToString
@Data
public final class MessageContext {
/**
* 所消费消息所在的消息队列
*
* @see MessageQueue
*/
private MessageQueue messageQueue;
/**
* 所消费的消息的扩展属性
*
* @see MessageExt
*/
private MessageExt messageExt;
}

110
dk-visual/rocketmq/src/test/java/com/ruoyi/testrocketmq/producer/MessageProducer.java

@ -1,110 +0,0 @@
package com.ruoyi.testrocketmq.producer;
import com.alibaba.fastjson.JSON;
import lombok.extern.slf4j.Slf4j;
import org.apache.rocketmq.client.exception.MQBrokerException;
import org.apache.rocketmq.client.exception.MQClientException;
import org.apache.rocketmq.client.producer.SendResult;
import org.apache.rocketmq.common.message.Message;
import org.apache.rocketmq.remoting.common.RemotingHelper;
import org.apache.rocketmq.remoting.exception.RemotingException;
import java.io.UnsupportedEncodingException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import static com.ruoyi.rocketmq.config.ProducerConfig.producer;
/**
* 消息发送
*/
@Slf4j
public class MessageProducer {
/**
* 同步发送消息
* @param topic 主题
* @param tag 标签
* @param key 自定义的key根据业务来定
* @param value 消息的内容
* @return org.apache.rocketmq.client.producer.SendResult
*/
public SendResult sendSynchronizeMessage(String topic, String tag, String key, String value){
String body = "topic:【"+topic+"】, tag:【"+tag+"】, key:【"+key+"】, value:【"+value+"】";
try {
Message msg = new Message(topic,tag,key, value.getBytes(RemotingHelper.DEFAULT_CHARSET));
System.out.println("生产者发送消息:"+ JSON.toJSONString(value));
SendResult result = producer.send(msg);
return result;
} catch (UnsupportedEncodingException e) {
log.error("消息初始化失败!body:{}",body);
} catch (MQClientException | InterruptedException | RemotingException | MQBrokerException e) {
log.error("消息发送失败! body:{}",body);
}
return null;
}
/**
* 发送有序的消息
* @param messagesList Message集合
* @param messageQueueNumber 消息队列编号
* @return org.apache.rocketmq.client.producer.SendResult
*/
public SendResult sendOrderlyMessage(List<Message> messagesList, int messageQueueNumber) {
SendResult result = null;
for (Message message : messagesList) {
try {
// DefaultMQProducer defaultMQProducer = ProducerConfig.producer.send(message);
// System.out.println(defaultMQProducer);
result = producer.send(message, (list, msg, arg) -> {
Integer queueNumber = (Integer) arg;
return list.get(queueNumber);
}, messageQueueNumber);
} catch (MQClientException | RemotingException | MQBrokerException | InterruptedException e) {
log.error("发送有序消息失败");
return result;
}
}
return result;
}
/**
* 推送延迟消息
* @param topic
* @param tag
* @param key
* @return boolean
*/
public SendResult sendDelayMessage(String topic, String tag, String key, String value)
{
SendResult result = null;
try
{
Message msg = new Message(topic,tag,key, value.getBytes(RemotingHelper.DEFAULT_CHARSET));
//设置消息延迟级别,我这里设置5,对应就是延时一分钟
// "1s 5s 10s 30s 1m 2m 3m 4m 5m 6m 7m 8m 9m 10m 20m 30m 1h 2h"
msg.setDelayTimeLevel(4);
// 发送消息到一个Broker
result = producer.send(msg);
// 通过sendResult返回消息是否成功送达
log.info("发送延迟消息结果:======sendResult:{}", result);
DateFormat format =new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
log.info("发送时间:{}", format.format(new Date()));
return result;
}
catch (Exception e)
{
e.printStackTrace();
log.error("延迟消息队列推送消息异常:{},推送内容:{}", e.getMessage(), result);
}
return result;
}
}
Loading…
Cancel
Save