diff --git a/dk-api/api-bom/pom.xml b/dk-api/api-bom/pom.xml
index 3e6a7b4..c37882b 100644
--- a/dk-api/api-bom/pom.xml
+++ b/dk-api/api-bom/pom.xml
@@ -46,6 +46,11 @@
api-business
${revision}
+
+ org.dromara
+ api-sample
+ ${revision}
+
diff --git a/dk-api/api-sample/pom.xml b/dk-api/api-sample/pom.xml
new file mode 100644
index 0000000..4b7b718
--- /dev/null
+++ b/dk-api/api-sample/pom.xml
@@ -0,0 +1,31 @@
+
+
+
+ org.dromara
+ dk-api
+ ${revision}
+
+ 4.0.0
+
+ api-sample
+ api-sample
+
+
+
+
+
+
+ org.dromara
+ common-core
+
+
+
+ org.dromara
+ common-excel
+
+
+
+
+
diff --git a/dk-api/api-sample/src/main/java/org/dromara/sample/api/RemoteJobService.java b/dk-api/api-sample/src/main/java/org/dromara/sample/api/RemoteJobService.java
new file mode 100644
index 0000000..5c43d28
--- /dev/null
+++ b/dk-api/api-sample/src/main/java/org/dromara/sample/api/RemoteJobService.java
@@ -0,0 +1,19 @@
+package org.dromara.sample.api;
+
+import org.dromara.sample.api.domain.vo.RemoteMediaFileVo;
+
+import java.util.List;
+
+/**
+ * @auther yq
+ * @data 2025/3/30
+ */
+public interface RemoteJobService {
+
+ /**
+ * @param jobId
+ * @param fileType 文件类型jpeg、mp4、RTK、OBS、NAV、MRK、DAT
+ * */
+ List getRemoteMediaFileVo(String jobId,String fileType);
+
+}
diff --git a/dk-api/api-sample/src/main/java/org/dromara/sample/api/domain/vo/RemoteMediaFileVo.java b/dk-api/api-sample/src/main/java/org/dromara/sample/api/domain/vo/RemoteMediaFileVo.java
new file mode 100644
index 0000000..1d2b311
--- /dev/null
+++ b/dk-api/api-sample/src/main/java/org/dromara/sample/api/domain/vo/RemoteMediaFileVo.java
@@ -0,0 +1,100 @@
+package org.dromara.sample.api.domain.vo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * @auther yq
+ * @data 2025/3/30
+ */
+@Data
+public class RemoteMediaFileVo implements Serializable {
+
+ private Integer id;
+
+
+ private String fileId;
+
+
+ private String fileName;
+
+
+ private String filePath;
+
+
+ private String workspaceId;
+
+
+ private String fingerprint;
+
+
+ private String tinnyFingerprint;
+
+
+ private String objectKey;
+
+
+ private Integer subFileType;
+
+
+ private Boolean isOriginal;
+
+
+ private String drone;
+
+
+ private String payload;
+
+
+ private String jobId;
+
+
+ private Date createTime;
+
+
+ private Date updateTime;
+
+
+ private Double lat;
+
+
+ private Double lng;
+
+
+ private Double absoluteAltitude;
+
+
+ private Double relativeAltitude;
+
+
+ private Date shootTime;
+
+ private Double gimbalYawDegree;
+
+
+ private String cloudToCloudId;
+
+
+ private Integer uploadedFileCount;
+
+ private Integer expectedFileCount;
+
+ private Integer flightType;
+
+ /**
+ * 文件类型jpeg、mp4、RTK、OBS、NAV、MRK、DAT
+ */
+
+ private String fileType;
+
+ /**
+ * 后缀类型广角 W、广角 V、红外 T、变焦 Z、RTCM文件 D 、PPK
+ */
+
+ private String fileStatus;
+
+
+ private Integer fileIndex;
+}
diff --git a/dk-api/pom.xml b/dk-api/pom.xml
index b68ef7c..35c8820 100644
--- a/dk-api/pom.xml
+++ b/dk-api/pom.xml
@@ -15,6 +15,8 @@
api-workflow
api-business
api-rocketmq
+ api-sample
+
dk-api
diff --git a/dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/device/AirConditionerStateEnum.java b/dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/device/AirConditionerStateEnum.java
index 0ea9558..7d1f9ac 100644
--- a/dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/device/AirConditionerStateEnum.java
+++ b/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
* @date 2023/6/30
*/
-public enum AirConditionerStateEnum {
+public enum AirConditionerStateEnum {
IDLE(0),
@@ -33,6 +33,18 @@ public enum AirConditionerStateEnum {
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),
;
diff --git a/dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/device/api/AbstractDeviceService.java b/dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/device/api/AbstractDeviceService.java
index 9676d1b..a2e8fa1 100644
--- a/dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/device/api/AbstractDeviceService.java
+++ b/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.DockDroneCommanderModeLostAction;
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.GatewayTypeEnum;
import org.dromara.common.sdk.mqtt.ChannelName;
@@ -271,4 +273,17 @@ public class AbstractDeviceService {
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 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 request, MessageHeaders headers) {
+ throw new UnsupportedOperationException("dockPsdkWidgetValues not implemented");
+ }
+
}
diff --git a/dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/interconnection/PsdkFloatingWindowTextPsdk.java b/dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/interconnection/PsdkFloatingWindowTextPsdk.java
new file mode 100644
index 0000000..4f50618
--- /dev/null
+++ b/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;
+ }
+}
diff --git a/dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/interconnection/api/AbstractInterconnectionService.java b/dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/interconnection/api/AbstractInterconnectionService.java
index 2b8051a..9354463 100644
--- a/dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/interconnection/api/AbstractInterconnectionService.java
+++ b/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;
import org.dromara.common.sdk.annotations.CloudSDKVersion;
-import org.dromara.common.sdk.cloudapi.interconnection.CustomDataTransmissionFromEsdk;
-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.cloudapi.interconnection.*;
import org.dromara.common.sdk.config.version.CloudSDKVersionEnum;
import org.dromara.common.sdk.config.version.GatewayManager;
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)
@CloudSDKVersion(since = CloudSDKVersionEnum.V1_0_0)
- public TopicEventsResponse customDataTransmissionFromPsdk(TopicEventsRequest request, MessageHeaders headers) {
+ public void customDataTransmissionFromPsdk(TopicEventsRequest request, MessageHeaders headers) {
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 request, MessageHeaders headers) {
+ throw new UnsupportedOperationException("psdkFloatingWindowText not implemented");
+ }
+
/**
* cloud-custom data transmit to psdk
* @param gateway gateway device
diff --git a/dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/livestream/VideoTypeEnum.java b/dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/livestream/VideoTypeEnum.java
index 0003810..f701a25 100644
--- a/dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/livestream/VideoTypeEnum.java
+++ b/dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/livestream/VideoTypeEnum.java
@@ -36,7 +36,7 @@ public enum VideoTypeEnum {
@JsonCreator
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));
}
}
diff --git a/dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/psdk/PsdkSpeaker.java b/dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/psdk/PsdkSpeaker.java
new file mode 100644
index 0000000..48034be
--- /dev/null
+++ b/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;
+ }
+
+
+}
diff --git a/dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/psdk/PsdkUiResource.java b/dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/psdk/PsdkUiResource.java
new file mode 100644
index 0000000..dd3236e
--- /dev/null
+++ b/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;
+ }
+}
diff --git a/dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/psdk/PsdkWidgetValue.java b/dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/psdk/PsdkWidgetValue.java
new file mode 100644
index 0000000..1de1384
--- /dev/null
+++ b/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 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 getValues() {
+ return values;
+ }
+
+ public PsdkWidgetValue setValues(List values) {
+ this.values = values;
+ return this;
+ }
+
+ public PsdkSpeaker getPsdkSpeaker() {
+ return psdkSpeaker;
+ }
+
+ public PsdkWidgetValue setPsdkSpeaker(PsdkSpeaker psdkSpeaker) {
+ this.psdkSpeaker = psdkSpeaker;
+ return this;
+ }
+}
diff --git a/dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/psdk/PsdkWidgetValues.java b/dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/psdk/PsdkWidgetValues.java
new file mode 100644
index 0000000..40c43c3
--- /dev/null
+++ b/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 psdkWidgetValues;
+
+ public PsdkWidgetValues() {
+ }
+
+ @Override
+ public String toString() {
+ return "PsdkWidgetValues{" +
+ "psdkWidgetValues=" + psdkWidgetValues +
+ '}';
+ }
+
+ public List getPsdkWidgetValues() {
+ return psdkWidgetValues;
+ }
+
+ public PsdkWidgetValues setPsdkWidgetValues(List psdkWidgetValues) {
+ this.psdkWidgetValues = psdkWidgetValues;
+ return this;
+ }
+
+}
diff --git a/dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/wayline/api/AbstractWaylineService.java b/dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/wayline/api/AbstractWaylineService.java
index 1ea8229..1d4da03 100644
--- a/dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/wayline/api/AbstractWaylineService.java
+++ b/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)
@CloudSDKVersion(since = CloudSDKVersionEnum.V1_0_0)
- public TopicRequestsResponse returnHomeInfo(TopicRequestsRequest request, MessageHeaders headers) {
+ public void returnHomeInfo(TopicRequestsRequest request, MessageHeaders headers) {
throw new UnsupportedOperationException("returnHomeInfo not implemented");
}
diff --git a/dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/mqtt/ChannelName.java b/dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/mqtt/ChannelName.java
index 58fb96e..3e45854 100644
--- a/dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/mqtt/ChannelName.java
+++ b/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_PSDK_WIDGE_VALUES = "inboundStateDockPsdkWidgetValues";
+
+
+ public static final String INBOUND_STATE_DOCK_PSDK_UI_RESOURCE = "inboundStateDockPsdUiResource";
+
+
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_PSDK_FLOARUBF_WINDOW_TEXT = "inboundEventsPsdkFloatingWindowText";
+
public static final String INBOUND_EVENTS_AIRSENSE_WARNING = "inboundEventsAirsenseWarning";
public static final String INBOUND_EVENTS_FLIGHT_AREAS_SYNC_PROGRESS = "inboundEventsFlightAreasSyncProgress";
diff --git a/dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/mqtt/events/EventsMethodEnum.java b/dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/mqtt/events/EventsMethodEnum.java
index 8d85540..0016fda 100644
--- a/dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/mqtt/events/EventsMethodEnum.java
+++ b/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.interconnection.CustomDataTransmissionFromEsdk;
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.map.OfflineMapSyncProgress;
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() {}),
+ PSDK_FLOARUBF_WINDOW_TEXT("psdk_floating_window_text", ChannelName.INBOUND_EVENTS_PSDK_FLOARUBF_WINDOW_TEXT, new TypeReference() {}),
+
+
+
AIRSENSE_WARNING("airsense_warning", ChannelName.INBOUND_EVENTS_AIRSENSE_WARNING, new TypeReference>() {}),
FLIGHT_AREAS_SYNC_PROGRESS("flight_areas_sync_progress", ChannelName.INBOUND_EVENTS_FLIGHT_AREAS_SYNC_PROGRESS, new TypeReference() {}),
diff --git a/dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/mqtt/state/DockStateDataKeyEnum.java b/dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/mqtt/state/DockStateDataKeyEnum.java
index 9dadfd9..34aa24b 100644
--- a/dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/mqtt/state/DockStateDataKeyEnum.java
+++ b/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.DockDroneOfflineMapEnable;
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 java.util.Arrays;
@@ -50,6 +52,12 @@ public enum DockStateDataKeyEnum {
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),
+
+
+ //AI_SPOTLIGHT_ZOOM_STATE(Set.of("ai_spotlight_zoom_state"), PsdkUiResource.class),
;
private final Set keys;
diff --git a/dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/mqtt/state/StateDataKeyEnum.java b/dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/mqtt/state/StateDataKeyEnum.java
index 671c691..2f14f7f 100644
--- a/dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/mqtt/state/StateDataKeyEnum.java
+++ b/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.DockDroneOfflineMapEnable;
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 java.util.Arrays;
@@ -59,6 +61,11 @@ public enum StateDataKeyEnum {
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);
private final String channelName;
diff --git a/dk-common/common-oss/src/main/java/org/dromara/common/oss/core/OssClient.java b/dk-common/common-oss/src/main/java/org/dromara/common/oss/core/OssClient.java
index 3268f86..a155797 100644
--- a/dk-common/common-oss/src/main/java/org/dromara/common/oss/core/OssClient.java
+++ b/dk-common/common-oss/src/main/java/org/dromara/common/oss/core/OssClient.java
@@ -388,6 +388,10 @@ public class OssClient {
return upload(inputStream, getPath(properties.getPrefix(), suffix), length, contentType);
}
+ public UploadResult uploadSuffix(InputStream inputStream, String suffix, String fileName,Long length, String contentType) {
+ return upload(inputStream, getPath(properties.getPrefix(), suffix,fileName), length, contentType);
+ }
+
/**
* 上传文件到 Amazon S3,使用指定的后缀构造对象键
*
@@ -502,13 +506,18 @@ public class OssClient {
* @return 文件路径
*/
public String getPath(String prefix, String suffix) {
+ // 生成日期路径
+ return prefix + StringUtils.SLASH + DateUtils.datePath() + StringUtils.SLASH + suffix ;
+ }
+
+ public String getPath(String prefix,String fileName, String suffix) {
// 生成uuid
String uuid = IdUtil.fastSimpleUUID();
// 生成日期路径
String datePath = DateUtils.datePath();
// 拼接路径
String path = StringUtils.isNotEmpty(prefix) ?
- prefix + StringUtils.SLASH + datePath + StringUtils.SLASH + uuid : datePath + StringUtils.SLASH + uuid;
+ prefix + StringUtils.SLASH + datePath + StringUtils.SLASH + uuid : datePath + StringUtils.SLASH + fileName;
return path + suffix;
}
diff --git a/dk-common/common-oss/src/main/java/org/dromara/common/oss/factory/Minio.java b/dk-common/common-oss/src/main/java/org/dromara/common/oss/factory/Minio.java
index e97686c..cc1fb4f 100644
--- a/dk-common/common-oss/src/main/java/org/dromara/common/oss/factory/Minio.java
+++ b/dk-common/common-oss/src/main/java/org/dromara/common/oss/factory/Minio.java
@@ -32,8 +32,8 @@ public class Minio {
AssumeRoleProvider provider = new AssumeRoleProvider(client.getIsHttps()+client.getOssProperties().getEndpoint(), client.getOssProperties().getAccessKey(),
client.getOssProperties().getSecretKey(), Math.toIntExact(client.getOssProperties().getExpire()),
null, client.getOssProperties().getRegion(), null, null, null, null);
- Credentials credential = provider.fetch();
- return new CredentialsToken(credential.accessKey(), credential.secretKey(), credential.sessionToken(), client.getOssProperties().getExpire());
+ //Credentials credential = provider.fetch();
+ return new CredentialsToken(client.getOssProperties().getAccessKey(),client.getOssProperties().getSecretKey(), "", client.getOssProperties().getExpire());
} catch (NoSuchAlgorithmException e) {
log.debug("Failed to obtain sts.");
e.printStackTrace();
diff --git a/dk-common/common-websocket/pom.xml b/dk-common/common-websocket/pom.xml
index f2e6e4e..ac54281 100644
--- a/dk-common/common-websocket/pom.xml
+++ b/dk-common/common-websocket/pom.xml
@@ -7,6 +7,18 @@
dk-common
${revision}
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+
+ 21
+ 21
+
+
+
+
4.0.0
common-websocket
@@ -36,5 +48,11 @@
org.springframework.boot
spring-boot-starter-websocket
+
+ org.dromara
+ common-cloudsdk
+ 2.2.2
+ compile
+
diff --git a/dk-common/common-websocket/src/main/java/org/dromara/common/websocket/ConcurrentWebSocketSession.java b/dk-common/common-websocket/src/main/java/org/dromara/common/websocket/ConcurrentWebSocketSession.java
new file mode 100644
index 0000000..340481e
--- /dev/null
+++ b/dk-common/common-websocket/src/main/java/org/dromara/common/websocket/ConcurrentWebSocketSession.java
@@ -0,0 +1,25 @@
+package org.dromara.common.websocket;
+
+import org.springframework.web.socket.WebSocketSession;
+import org.springframework.web.socket.handler.ConcurrentWebSocketSessionDecorator;
+
+/**
+ * @author sean.zhou
+ * @version 0.1
+ * @date 2021/11/24
+ */
+public class ConcurrentWebSocketSession extends ConcurrentWebSocketSessionDecorator {
+
+ private static final int SEND_BUFFER_SIZE_LIMIT = 1024 * 1024;
+
+ private static final int SEND_TIME_LIMIT = 1000;
+
+ private ConcurrentWebSocketSession(WebSocketSession delegate, int sendTimeLimit, int bufferSizeLimit) {
+ super(delegate, sendTimeLimit, bufferSizeLimit);
+ }
+
+ ConcurrentWebSocketSession(WebSocketSession delegate) {
+ this(delegate, SEND_TIME_LIMIT, SEND_BUFFER_SIZE_LIMIT);
+ }
+
+}
diff --git a/dk-common/common-websocket/src/main/java/org/dromara/common/websocket/WebSocketConfiguration.java b/dk-common/common-websocket/src/main/java/org/dromara/common/websocket/WebSocketConfiguration.java
new file mode 100644
index 0000000..a7b19ed
--- /dev/null
+++ b/dk-common/common-websocket/src/main/java/org/dromara/common/websocket/WebSocketConfiguration.java
@@ -0,0 +1,40 @@
+package org.dromara.common.websocket;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.socket.config.annotation.EnableWebSocketMessageBroker;
+import org.springframework.web.socket.config.annotation.StompEndpointRegistry;
+import org.springframework.web.socket.config.annotation.WebSocketMessageBrokerConfigurer;
+import org.springframework.web.socket.config.annotation.WebSocketTransportRegistration;
+import org.springframework.web.socket.handler.WebSocketHandlerDecoratorFactory;
+import org.springframework.web.socket.server.HandshakeHandler;
+
+/**
+ *
+ * @author sean.zhou
+ * @date 2021/11/17
+ * @version 0.1
+ */
+@EnableWebSocketMessageBroker
+@Configuration
+public class WebSocketConfiguration implements WebSocketMessageBrokerConfigurer {
+
+ @Autowired(required = false)
+ private HandshakeHandler handshakeHandler;
+
+ @Autowired
+ private WebSocketHandlerDecoratorFactory webSocketHandlerDecoratorFactory;
+
+ @Override
+ public void registerStompEndpoints(StompEndpointRegistry registry) {
+ // Set the WebSocket connection address
+ registry.addEndpoint("/websocket").setAllowedOriginPatterns("*")
+ .setHandshakeHandler(handshakeHandler);
+ }
+
+ @Override
+ public void configureWebSocketTransport(WebSocketTransportRegistration registry) {
+ registry.addDecoratorFactory(webSocketHandlerDecoratorFactory);
+ }
+
+}
diff --git a/dk-common/common-websocket/src/main/java/org/dromara/common/websocket/WebSocketDefaultFactory.java b/dk-common/common-websocket/src/main/java/org/dromara/common/websocket/WebSocketDefaultFactory.java
new file mode 100644
index 0000000..c8ef0c4
--- /dev/null
+++ b/dk-common/common-websocket/src/main/java/org/dromara/common/websocket/WebSocketDefaultFactory.java
@@ -0,0 +1,20 @@
+package org.dromara.common.websocket;
+
+import org.springframework.stereotype.Component;
+import org.springframework.web.socket.WebSocketHandler;
+import org.springframework.web.socket.handler.WebSocketHandlerDecoratorFactory;
+
+/**
+ *
+ * @author sean.zhou
+ * @date 2021/11/16
+ * @version 0.1
+ */
+@Component
+public class WebSocketDefaultFactory implements WebSocketHandlerDecoratorFactory {
+
+ @Override
+ public WebSocketHandler decorate(WebSocketHandler handler) {
+ return new WebSocketDefaultHandler(handler);
+ }
+}
diff --git a/dk-common/common-websocket/src/main/java/org/dromara/common/websocket/WebSocketDefaultHandler.java b/dk-common/common-websocket/src/main/java/org/dromara/common/websocket/WebSocketDefaultHandler.java
new file mode 100644
index 0000000..801571a
--- /dev/null
+++ b/dk-common/common-websocket/src/main/java/org/dromara/common/websocket/WebSocketDefaultHandler.java
@@ -0,0 +1,40 @@
+package org.dromara.common.websocket;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.web.socket.CloseStatus;
+import org.springframework.web.socket.WebSocketHandler;
+import org.springframework.web.socket.WebSocketMessage;
+import org.springframework.web.socket.WebSocketSession;
+import org.springframework.web.socket.handler.WebSocketHandlerDecorator;
+
+/**
+ *
+ * @author sean.zhou
+ * @date 2021/11/16
+ * @version 0.1
+ */
+public class WebSocketDefaultHandler extends WebSocketHandlerDecorator {
+
+ private static final Logger log = LoggerFactory.getLogger(WebSocketDefaultHandler.class);
+
+ public WebSocketDefaultHandler(WebSocketHandler delegate) {
+ super(delegate);
+ }
+
+ @Override
+ public void afterConnectionEstablished(WebSocketSession session) throws Exception {
+ log.debug("{} is connected.", session.getId());
+ }
+
+ @Override
+ public void afterConnectionClosed(WebSocketSession session, CloseStatus closeStatus) throws Exception {
+ log.debug("{} is disconnected.", session.getId());
+ }
+
+ @Override
+ public void handleMessage(WebSocketSession session, WebSocketMessage> message) throws Exception {
+ log.info("received message: {}, from: {}", message.getPayload(), session.getId());
+ }
+
+}
diff --git a/dk-common/common-websocket/src/main/java/org/dromara/common/websocket/WebSocketMessageResponse.java b/dk-common/common-websocket/src/main/java/org/dromara/common/websocket/WebSocketMessageResponse.java
new file mode 100644
index 0000000..072a888
--- /dev/null
+++ b/dk-common/common-websocket/src/main/java/org/dromara/common/websocket/WebSocketMessageResponse.java
@@ -0,0 +1,84 @@
+package org.dromara.common.websocket;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.Min;
+import jakarta.validation.constraints.NotNull;
+import org.dromara.common.websocket.dto.BizCodeEnum;
+
+
+/**
+ * The format of WebSocket messages that the pilot can receive.
+ * @author sean.zhou
+ * @date 2021/11/17
+ * @version 0.1
+ */
+@Schema(description = "The format of WebSocket messages that the pilot can receive.")
+public class WebSocketMessageResponse {
+
+ @JsonProperty("biz_code")
+ @NotNull
+ @Schema(description = "webSocket messages identity", implementation = BizCodeEnum.class)
+ private String bizCode;
+
+ @Schema(description = "webSocket messages version")
+ private String version = "1.0";
+
+ @NotNull
+ @Min(123456789012L)
+ @Schema(description = "timestamp (milliseconds)")
+ private Long timestamp;
+
+ @NotNull
+ @Schema(description = "Data corresponding to business functions")
+ private T data;
+
+ public WebSocketMessageResponse() {
+ }
+
+ @Override
+ public String toString() {
+ return "WebSocketMessageResponse{" +
+ "bizCode=" + bizCode +
+ ", version='" + version + '\'' +
+ ", timestamp=" + timestamp +
+ ", data=" + data +
+ '}';
+ }
+
+ public String getBizCode() {
+ return bizCode;
+ }
+
+ public WebSocketMessageResponse setBizCode(String bizCode) {
+ this.bizCode = bizCode;
+ return this;
+ }
+
+ public String getVersion() {
+ return version;
+ }
+
+ public WebSocketMessageResponse setVersion(String version) {
+ this.version = version;
+ return this;
+ }
+
+ public Long getTimestamp() {
+ return timestamp;
+ }
+
+ public WebSocketMessageResponse setTimestamp(Long timestamp) {
+ this.timestamp = timestamp;
+ return this;
+ }
+
+ public T getData() {
+ return data;
+ }
+
+ public WebSocketMessageResponse setData(T data) {
+ this.data = data;
+ return this;
+ }
+}
diff --git a/dk-common/common-websocket/src/main/java/org/dromara/common/websocket/api/WebSocketMessageSend.java b/dk-common/common-websocket/src/main/java/org/dromara/common/websocket/api/WebSocketMessageSend.java
new file mode 100644
index 0000000..da59306
--- /dev/null
+++ b/dk-common/common-websocket/src/main/java/org/dromara/common/websocket/api/WebSocketMessageSend.java
@@ -0,0 +1,64 @@
+package org.dromara.common.websocket.api;
+
+import org.dromara.common.sdk.common.Common;
+import org.dromara.common.sdk.exception.CloudSDKErrorEnum;
+import org.dromara.common.sdk.exception.CloudSDKException;
+import org.dromara.common.websocket.ConcurrentWebSocketSession;
+import org.dromara.common.websocket.dto.WebSocketMessageResponse;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.web.socket.TextMessage;
+
+import java.io.IOException;
+import java.util.Collection;
+
+/**
+ * @author sean.zhou
+ * @version 0.1
+ * @date 2021/11/24
+ */
+public class WebSocketMessageSend {
+
+ private static final Logger log = LoggerFactory.getLogger(WebSocketMessageSend.class);
+
+ public void sendMessage(ConcurrentWebSocketSession session, WebSocketMessageResponse message) {
+ if (session == null) {
+ return;
+ }
+
+ try {
+ if (!session.isOpen()) {
+ session.close();
+ log.info("This session is closed.");
+ return;
+ }
+
+ session.sendMessage(new TextMessage(Common.getObjectMapper().writeValueAsBytes(message)));
+ } catch (IOException e) {
+ throw new CloudSDKException(CloudSDKErrorEnum.WEBSOCKET_PUBLISH_ABNORMAL, e.getLocalizedMessage());
+ }
+ }
+
+ public void sendBatch(Collection sessions, WebSocketMessageResponse message) {
+ if (sessions.isEmpty()) {
+ return;
+ }
+
+ try {
+
+ TextMessage data = new TextMessage(Common.getObjectMapper().writeValueAsBytes(message));
+
+ for (ConcurrentWebSocketSession session : sessions) {
+ if (!session.isOpen()) {
+ session.close();
+ log.info("This session is closed.");
+ return;
+ }
+ session.sendMessage(data);
+ }
+
+ } catch (IOException e) {
+ throw new CloudSDKException(CloudSDKErrorEnum.WEBSOCKET_PUBLISH_ABNORMAL, e.getLocalizedMessage());
+ }
+ }
+}
diff --git a/dk-common/common-websocket/src/main/java/org/dromara/common/websocket/config/WebSocketConfig.java b/dk-common/common-websocket/src/main/java/org/dromara/common/websocket/config/WebSocketConfig.java
deleted file mode 100644
index 5d77db5..0000000
--- a/dk-common/common-websocket/src/main/java/org/dromara/common/websocket/config/WebSocketConfig.java
+++ /dev/null
@@ -1,71 +0,0 @@
-package org.dromara.common.websocket.config;
-
-import cn.hutool.core.util.StrUtil;
-import org.dromara.common.websocket.config.properties.WebSocketProperties;
-import org.dromara.common.websocket.handler.PlusWebSocketHandler;
-import org.dromara.common.websocket.interceptor.PlusWebSocketInterceptor;
-import org.dromara.common.websocket.listener.WebSocketTopicListener;
-import org.springframework.boot.autoconfigure.AutoConfiguration;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
-import org.springframework.boot.context.properties.EnableConfigurationProperties;
-import org.springframework.context.annotation.Bean;
-import org.springframework.web.socket.WebSocketHandler;
-import org.springframework.web.socket.WebSocketSession;
-import org.springframework.web.socket.config.annotation.EnableWebSocket;
-import org.springframework.web.socket.config.annotation.WebSocketConfigurer;
-import org.springframework.web.socket.config.annotation.WebSocketMessageBrokerConfigurer;
-import org.springframework.web.socket.config.annotation.WebSocketTransportRegistration;
-import org.springframework.web.socket.server.HandshakeInterceptor;
-
-/**
- * WebSocket 配置
- *
- * @author zendwang
- */
-@AutoConfiguration
-@ConditionalOnProperty(value = "websocket.enabled", havingValue = "true")
-@EnableConfigurationProperties(WebSocketProperties.class)
-@EnableWebSocket
-public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {
- @Override
- public void configureWebSocketTransport(WebSocketTransportRegistration registration) {
- registration.setSendTimeLimit(15 * 1000); // 消息发送最大超时
- registration.setSendBufferSizeLimit(1024 * 1024); // 发送缓冲区大小
- registration.setMessageSizeLimit(128 * 1024); // 消息大小限制
- }
- @Bean
- public WebSocketConfigurer webSocketConfigurer(HandshakeInterceptor handshakeInterceptor,
- WebSocketHandler webSocketHandler, WebSocketProperties webSocketProperties) {
- // 如果WebSocket的路径为空,则设置默认路径为 "/websocket"
- if (StrUtil.isBlank(webSocketProperties.getPath())) {
- webSocketProperties.setPath("/websocket");
- }
-
- // 如果允许跨域访问的地址为空,则设置为 "*",表示允许所有来源的跨域请求
- if (StrUtil.isBlank(webSocketProperties.getAllowedOrigins())) {
- webSocketProperties.setAllowedOrigins("*");
- }
-
- // 返回一个WebSocketConfigurer对象,用于配置WebSocket
- return registry -> registry
- // 添加WebSocket处理程序和拦截器到指定路径,设置允许的跨域来源
- .addHandler(webSocketHandler, webSocketProperties.getPath())
- .addInterceptors(handshakeInterceptor)
- .setAllowedOrigins(webSocketProperties.getAllowedOrigins());
- }
-
- @Bean
- public HandshakeInterceptor handshakeInterceptor() {
- return new PlusWebSocketInterceptor();
- }
-
- @Bean
- public WebSocketHandler webSocketHandler() {
- return new PlusWebSocketHandler();
- }
-
- @Bean
- public WebSocketTopicListener topicListener() {
- return new WebSocketTopicListener();
- }
-}
diff --git a/dk-common/common-websocket/src/main/java/org/dromara/common/websocket/config/properties/WebSocketProperties.java b/dk-common/common-websocket/src/main/java/org/dromara/common/websocket/config/properties/WebSocketProperties.java
deleted file mode 100644
index d629fe5..0000000
--- a/dk-common/common-websocket/src/main/java/org/dromara/common/websocket/config/properties/WebSocketProperties.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package org.dromara.common.websocket.config.properties;
-
-import lombok.Data;
-import org.springframework.boot.context.properties.ConfigurationProperties;
-
-/**
- * WebSocket 配置项
- *
- * @author zendwang
- */
-@ConfigurationProperties("websocket")
-@Data
-public class WebSocketProperties {
-
- private Boolean enabled;
-
- /**
- * 路径
- */
- private String path;
-
- /**
- * 设置访问源地址
- */
- private String allowedOrigins;
-}
diff --git a/dk-common/common-websocket/src/main/java/org/dromara/common/websocket/constant/WebSocketConstants.java b/dk-common/common-websocket/src/main/java/org/dromara/common/websocket/constant/WebSocketConstants.java
deleted file mode 100644
index e243279..0000000
--- a/dk-common/common-websocket/src/main/java/org/dromara/common/websocket/constant/WebSocketConstants.java
+++ /dev/null
@@ -1,29 +0,0 @@
-package org.dromara.common.websocket.constant;
-
-/**
- * websocket的常量配置
- *
- * @author zendwang
- */
-public interface WebSocketConstants {
-
- /**
- * websocketSession中的参数的key
- */
- String LOGIN_USER_KEY = "loginUser";
-
- /**
- * 订阅的频道
- */
- String WEB_SOCKET_TOPIC = "global:websocket";
-
- /**
- * 前端心跳检查的命令
- */
- String PING = "ping";
-
- /**
- * 服务端心跳恢复的字符串
- */
- String PONG = "pong";
-}
diff --git a/dk-common/common-websocket/src/main/java/org/dromara/common/websocket/handler/PlusWebSocketHandler.java b/dk-common/common-websocket/src/main/java/org/dromara/common/websocket/handler/PlusWebSocketHandler.java
deleted file mode 100644
index a65fd1f..0000000
--- a/dk-common/common-websocket/src/main/java/org/dromara/common/websocket/handler/PlusWebSocketHandler.java
+++ /dev/null
@@ -1,135 +0,0 @@
-package org.dromara.common.websocket.handler;
-
-import cn.hutool.core.util.ObjectUtil;
-import lombok.extern.slf4j.Slf4j;
-import org.dromara.common.websocket.dto.WebSocketMessageDto;
-import org.dromara.common.websocket.holder.WebSocketSessionHolder;
-import org.dromara.common.websocket.utils.WebSocketUtils;
-import org.dromara.system.api.model.LoginUser;
-import org.springframework.web.socket.*;
-import org.springframework.web.socket.handler.AbstractWebSocketHandler;
-
-import java.io.IOException;
-import java.util.List;
-
-import static org.dromara.common.websocket.constant.WebSocketConstants.LOGIN_USER_KEY;
-
-/**
- * WebSocketHandler 实现类
- *
- * @author zendwang
- */
-@Slf4j
-public class PlusWebSocketHandler extends AbstractWebSocketHandler {
-
- /**
- * 连接成功后
- */
- @Override
- public void afterConnectionEstablished(WebSocketSession session) throws IOException {
- LoginUser loginUser = (LoginUser) session.getAttributes().get(LOGIN_USER_KEY);
- if (ObjectUtil.isNull(loginUser)) {
- session.close(CloseStatus.BAD_DATA);
- log.info("[connect] invalid token received. sessionId: {}", session.getId());
- return;
- }
- WebSocketSessionHolder.addSession(loginUser.getUserId(), session);
- log.info("[connect] sessionId: {},userId:{},userType:{}", session.getId(), loginUser.getUserId(), loginUser.getUserType());
- }
-
- /**
- * 处理接收到的文本消息
- *
- * @param session WebSocket会话
- * @param message 接收到的文本消息
- * @throws Exception 处理消息过程中可能抛出的异常
- */
- @Override
- protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {
- // 从WebSocket会话中获取登录用户信息
- LoginUser loginUser = (LoginUser) session.getAttributes().get(LOGIN_USER_KEY);
- // 检查loginUser是否为空
- if (ObjectUtil.isNull(loginUser)) {
- log.error("[handleTextMessage] loginUser is null. sessionId: {}", session.getId());
- session.close(CloseStatus.BAD_DATA);
- return;
- }
- // 创建WebSocket消息DTO对象
- /*WebSocketMessageDto webSocketMessageDto = new WebSocketMessageDto();
- webSocketMessageDto.setSessionKeys(List.of(loginUser.getUserId()));
- webSocketMessageDto.setMessage(message.getPayload());*/
- WebSocketUtils.sendMessage(loginUser.getUserId(),"pong");
- WebSocketUtils.sendPongMessage(session);
- }
-
- /**
- * 处理接收到的二进制消息
- *
- * @param session WebSocket会话
- * @param message 接收到的二进制消息
- * @throws Exception 处理消息过程中可能抛出的异常
- */
- @Override
- protected void handleBinaryMessage(WebSocketSession session, BinaryMessage message) throws Exception {
- super.handleBinaryMessage(session, message);
- }
-
- /**
- * 处理接收到的Pong消息(心跳监测)
- *
- * @param session WebSocket会话
- * @param message 接收到的Pong消息
- * @throws Exception 处理消息过程中可能抛出的异常
- */
- @Override
- protected void handlePongMessage(WebSocketSession session, PongMessage message) throws Exception {
- WebSocketUtils.sendPongMessage(session);
- }
-
- /**
- * 处理WebSocket传输错误
- *
- * @param session WebSocket会话
- * @param exception 发生的异常
- * @throws Exception 处理过程中可能抛出的异常
- */
- @Override
- public void handleTransportError(WebSocketSession session, Throwable exception) throws Exception {
- LoginUser loginUser = (LoginUser) session.getAttributes().get(LOGIN_USER_KEY);
- // 检查loginUser是否为空
- if (ObjectUtil.isNull(loginUser)) {
- log.error("[handleTextMessage] loginUser is null. sessionId: {}", session.getId());
- session.close(CloseStatus.BAD_DATA);
- return;
- }
- log.error("[transport error] sessionId: {} , exception:{}", session.getId(), exception.getMessage());
- }
-
- /**
- * 在WebSocket连接关闭后执行清理操作
- *
- * @param session WebSocket会话
- * @param status 关闭状态信息
- */
- @Override
- public void afterConnectionClosed(WebSocketSession session, CloseStatus status) {
- LoginUser loginUser = (LoginUser) session.getAttributes().get(LOGIN_USER_KEY);
- if (ObjectUtil.isNull(loginUser)) {
- log.info("[disconnect] invalid token received. sessionId: {}", session.getId());
- return;
- }
- WebSocketSessionHolder.removeSession(loginUser.getUserId());
- log.info("[disconnect] sessionId: {},userId:{},userType:{}", session.getId(), loginUser.getUserId(), loginUser.getUserType());
- }
-
- /**
- * 指示处理程序是否支持接收部分消息
- *
- * @return 如果支持接收部分消息,则返回true;否则返回false
- */
- @Override
- public boolean supportsPartialMessages() {
- return false;
- }
-
-}
diff --git a/dk-common/common-websocket/src/main/java/org/dromara/common/websocket/holder/WebSocketSessionHolder.java b/dk-common/common-websocket/src/main/java/org/dromara/common/websocket/holder/WebSocketSessionHolder.java
deleted file mode 100644
index 368801c..0000000
--- a/dk-common/common-websocket/src/main/java/org/dromara/common/websocket/holder/WebSocketSessionHolder.java
+++ /dev/null
@@ -1,70 +0,0 @@
-package org.dromara.common.websocket.holder;
-
-import lombok.AccessLevel;
-import lombok.NoArgsConstructor;
-import org.springframework.web.socket.WebSocketSession;
-
-import java.util.Map;
-import java.util.Set;
-import java.util.concurrent.ConcurrentHashMap;
-
-/**
- * WebSocketSession 用于保存当前所有在线的会话信息
- *
- * @author zendwang
- */
-@NoArgsConstructor(access = AccessLevel.PRIVATE)
-public class WebSocketSessionHolder {
-
- private static final Map USER_SESSION_MAP = new ConcurrentHashMap<>();
-
- /**
- * 将WebSocket会话添加到用户会话Map中
- *
- * @param sessionKey 会话键,用于检索会话
- * @param session 要添加的WebSocket会话
- */
- public static void addSession(Long sessionKey, WebSocketSession session) {
- USER_SESSION_MAP.put(sessionKey, session);
- }
-
- /**
- * 从用户会话Map中移除指定会话键对应的WebSocket会话
- *
- * @param sessionKey 要移除的会话键
- */
- public static void removeSession(Long sessionKey) {
- if (USER_SESSION_MAP.containsKey(sessionKey)) {
- USER_SESSION_MAP.remove(sessionKey);
- }
- }
-
- /**
- * 根据会话键从用户会话Map中获取WebSocket会话
- *
- * @param sessionKey 要获取的会话键
- * @return 与给定会话键对应的WebSocket会话,如果不存在则返回null
- */
- public static WebSocketSession getSessions(Long sessionKey) {
- return USER_SESSION_MAP.get(sessionKey);
- }
-
- /**
- * 获取存储在用户会话Map中所有WebSocket会话的会话键集合
- *
- * @return 所有WebSocket会话的会话键集合
- */
- public static Set getSessionsAll() {
- return USER_SESSION_MAP.keySet();
- }
-
- /**
- * 检查给定的会话键是否存在于用户会话Map中
- *
- * @param sessionKey 要检查的会话键
- * @return 如果存在对应的会话键,则返回true;否则返回false
- */
- public static Boolean existSession(Long sessionKey) {
- return USER_SESSION_MAP.containsKey(sessionKey);
- }
-}
diff --git a/dk-common/common-websocket/src/main/java/org/dromara/common/websocket/interceptor/PlusWebSocketInterceptor.java b/dk-common/common-websocket/src/main/java/org/dromara/common/websocket/interceptor/PlusWebSocketInterceptor.java
deleted file mode 100644
index fafe699..0000000
--- a/dk-common/common-websocket/src/main/java/org/dromara/common/websocket/interceptor/PlusWebSocketInterceptor.java
+++ /dev/null
@@ -1,58 +0,0 @@
-package org.dromara.common.websocket.interceptor;
-
-import cn.dev33.satoken.exception.NotLoginException;
-import lombok.extern.slf4j.Slf4j;
-import org.dromara.common.satoken.utils.LoginHelper;
-import org.dromara.system.api.model.LoginUser;
-import org.springframework.http.server.ServerHttpRequest;
-import org.springframework.http.server.ServerHttpResponse;
-import org.springframework.web.socket.WebSocketHandler;
-import org.springframework.web.socket.server.HandshakeInterceptor;
-
-import java.util.Map;
-
-import static org.dromara.common.websocket.constant.WebSocketConstants.LOGIN_USER_KEY;
-
-/**
- * WebSocket握手请求的拦截器
- *
- * @author zendwang
- */
-@Slf4j
-public class PlusWebSocketInterceptor implements HandshakeInterceptor {
-
- /**
- * WebSocket握手之前执行的前置处理方法
- *
- * @param request WebSocket握手请求
- * @param response WebSocket握手响应
- * @param wsHandler WebSocket处理程序
- * @param attributes 与WebSocket会话关联的属性
- * @return 如果允许握手继续进行,则返回true;否则返回false
- */
- @Override
- public boolean beforeHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler, Map attributes) {
- try {
- LoginUser loginUser = LoginHelper.getLoginUser();
- attributes.put(LOGIN_USER_KEY, loginUser);
- return true;
- } catch (NotLoginException e) {
- log.error("WebSocket 认证失败'{}',无法访问系统资源", e.getMessage());
- return false;
- }
- }
-
- /**
- * WebSocket握手成功后执行的后置处理方法
- *
- * @param request WebSocket握手请求
- * @param response WebSocket握手响应
- * @param wsHandler WebSocket处理程序
- * @param exception 握手过程中可能出现的异常
- */
- @Override
- public void afterHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler, Exception exception) {
- // 在这个方法中可以执行一些握手成功后的后续处理逻辑,比如记录日志或者其他操作
- }
-
-}
diff --git a/dk-common/common-websocket/src/main/java/org/dromara/common/websocket/listener/WebSocketTopicListener.java b/dk-common/common-websocket/src/main/java/org/dromara/common/websocket/listener/WebSocketTopicListener.java
deleted file mode 100644
index 31617df..0000000
--- a/dk-common/common-websocket/src/main/java/org/dromara/common/websocket/listener/WebSocketTopicListener.java
+++ /dev/null
@@ -1,54 +0,0 @@
-package org.dromara.common.websocket.listener;
-
-import cn.hutool.core.collection.CollUtil;
-import lombok.extern.slf4j.Slf4j;
-import org.dromara.common.websocket.holder.WebSocketSessionHolder;
-import org.dromara.common.websocket.utils.WebSocketUtils;
-import org.springframework.boot.ApplicationArguments;
-import org.springframework.boot.ApplicationRunner;
-import org.springframework.core.Ordered;
-
-/**
- * WebSocket 主题订阅监听器
- *
- * @author zendwang
- */
-@Slf4j
-public class WebSocketTopicListener implements ApplicationRunner, Ordered {
-
- /**
- * 在Spring Boot应用程序启动时初始化WebSocket主题订阅监听器
- *
- * @param args 应用程序参数
- * @throws Exception 初始化过程中可能抛出的异常
- */
- @Override
- public void run(ApplicationArguments args) throws Exception {
- // 订阅WebSocket消息
- WebSocketUtils.subscribeMessage((message) -> {
- try {
- log.info("WebSocket主题订阅收到消息session keys={} message={}", message.getSessionKeys(), message.getMessage());
- // 如果key不为空就按照key发消息 如果为空就群发
- if (CollUtil.isNotEmpty(message.getSessionKeys())) {
- message.getSessionKeys().forEach(key -> {
- if (WebSocketSessionHolder.existSession(key)) {
- WebSocketUtils.sendMessage(key, message.getMessage());
- }
- });
- } else {
- WebSocketSessionHolder.getSessionsAll().forEach(key -> {
- WebSocketUtils.sendMessage(key, message.getMessage());
- });
- }
- } catch (Exception e) {
- log.error("处理消息时发生异常", e);
- }
- });
- log.info("初始化WebSocket主题订阅监听器成功");
- }
-
- @Override
- public int getOrder() {
- return -1;
- }
-}
diff --git a/dk-common/common-websocket/src/main/java/org/dromara/common/websocket/utils/WebSocketUtils.java b/dk-common/common-websocket/src/main/java/org/dromara/common/websocket/utils/WebSocketUtils.java
deleted file mode 100644
index bf6b127..0000000
--- a/dk-common/common-websocket/src/main/java/org/dromara/common/websocket/utils/WebSocketUtils.java
+++ /dev/null
@@ -1,185 +0,0 @@
-package org.dromara.common.websocket.utils;
-
-import cn.hutool.core.collection.CollUtil;
-import com.fasterxml.jackson.annotation.JsonInclude;
-import com.fasterxml.jackson.core.JsonProcessingException;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.PropertyNamingStrategy;
-import lombok.AccessLevel;
-import lombok.NoArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import org.checkerframework.checker.units.qual.C;
-import org.dromara.common.json.utils.JsonUtils;
-import org.dromara.common.redis.utils.RedisUtils;
-import org.dromara.common.websocket.dto.WebSocketMessageDto;
-import org.dromara.common.websocket.dto.WebSocketMessageResponse;
-import org.dromara.common.websocket.holder.WebSocketSessionHolder;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.socket.PongMessage;
-import org.springframework.web.socket.TextMessage;
-import org.springframework.web.socket.WebSocketMessage;
-import org.springframework.web.socket.WebSocketSession;
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Objects;
-import java.util.function.Consumer;
-
-import static org.dromara.common.websocket.constant.WebSocketConstants.WEB_SOCKET_TOPIC;
-
-/**
- * WebSocket工具类
- *
- * @author zendwang
- */
-@Slf4j
-@NoArgsConstructor(access = AccessLevel.PRIVATE)
-public class WebSocketUtils {
-
- /**
- * 向指定的WebSocket会话发送消息
- *
- * @param sessionKey 要发送消息的用户id
- * @param message 要发送的消息内容
- */
- public static void sendMessage(Long sessionKey, String message) {
- WebSocketSession session = WebSocketSessionHolder.getSessions(sessionKey);
- sendMessage(session, message);
- }
-
- /**
- * 订阅WebSocket消息主题,并提供一个消费者函数来处理接收到的消息
- *
- * @param consumer 处理WebSocket消息的消费者函数
- */
- public static void subscribeMessage(Consumer consumer) {
- RedisUtils.subscribe(WEB_SOCKET_TOPIC, WebSocketMessageDto.class, consumer);
- }
-
- /**
- * 发布WebSocket订阅消息
- *
- * @param webSocketMessage 要发布的WebSocket消息对象
- */
- public static void publishMessage(WebSocketMessageDto webSocketMessage) {
- List unsentSessionKeys = new ArrayList<>();
- // 当前服务内session,直接发送消息
- for (Long sessionKey : webSocketMessage.getSessionKeys()) {
- if (WebSocketSessionHolder.existSession(sessionKey)) {
- WebSocketUtils.sendMessage(sessionKey, webSocketMessage.getMessage());
- continue;
- }
- unsentSessionKeys.add(sessionKey);
- }
- // 不在当前服务内session,发布订阅消息
- if (CollUtil.isNotEmpty(unsentSessionKeys)) {
- WebSocketMessageDto broadcastMessage = new WebSocketMessageDto();
- broadcastMessage.setMessage(webSocketMessage.getMessage());
- broadcastMessage.setSessionKeys(unsentSessionKeys);
- RedisUtils.publish(WEB_SOCKET_TOPIC, broadcastMessage, consumer -> {
- log.info("WebSocket发送主题订阅消息topic:{} session keys:{} message:{}",
- WEB_SOCKET_TOPIC, unsentSessionKeys, webSocketMessage.getMessage());
- });
- }
- }
-
- /**
- * 发布WebSocket订阅消息
- *
- * @param
- */
- public static void publishAll(Integer userType, String bizCode, Object data) {
- WebSocketMessageResponse message = new WebSocketMessageResponse()
- .setData(Objects.requireNonNullElse(data, ""))
- .setTimestamp(System.currentTimeMillis())
- .setBizCode(bizCode);
- try {
- ObjectMapper mapper = new ObjectMapper();
- mapper.setPropertyNamingStrategy(PropertyNamingStrategy.SNAKE_CASE);
- mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
- String jsonString = mapper.writeValueAsString(message);
- WebSocketSessionHolder.getSessionsAll().forEach(key -> {
- WebSocketSession session = WebSocketSessionHolder.getSessions(key);
- sendMessage(session, jsonString);
- });
- }catch (Exception e) {
- e.printStackTrace();
- }
- }
- /**
- * 发布WebSocket订阅消息
- *
- * @param
- */
- public static void publishAll(String bizCode, Object data) {
- WebSocketMessageResponse message = new WebSocketMessageResponse()
- .setData(Objects.requireNonNullElse(data, ""))
- .setTimestamp(System.currentTimeMillis())
- .setBizCode(bizCode);
- try {
- ObjectMapper mapper = new ObjectMapper();
- mapper.setPropertyNamingStrategy(PropertyNamingStrategy.SNAKE_CASE);
- mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
- String jsonString = mapper.writeValueAsString(message);
- WebSocketSessionHolder.getSessionsAll().forEach(key -> {
- WebSocketSession session = WebSocketSessionHolder.getSessions(key);
- sendMessage(session, jsonString);
- });
- }catch (Exception e) {
- e.printStackTrace();
- }
- }
-
-
-
- /**
- * 向所有的WebSocket会话发布订阅的消息(群发)
- *
- * @param message 要发布的消息内容
- */
- public static void publishAll(String message) {
- WebSocketMessageDto broadcastMessage = new WebSocketMessageDto();
- broadcastMessage.setMessage(message);
- RedisUtils.publish(WEB_SOCKET_TOPIC, broadcastMessage, consumer -> {
- log.info("WebSocket发送主题订阅消息topic:{} message:{}", WEB_SOCKET_TOPIC, message);
- });
- }
-
- /**
- * 向指定的WebSocket会话发送Pong消息
- *
- * @param session 要发送Pong消息的WebSocket会话
- */
- public static void sendPongMessage(WebSocketSession session) {
- sendMessage(session, new PongMessage());
- }
-
- /**
- * 向指定的WebSocket会话发送文本消息
- *
- * @param session WebSocket会话
- * @param message 要发送的文本消息内容
- */
- public static void sendMessage(WebSocketSession session, String message) {
- sendMessage(session, new TextMessage(message));
- }
-
- /**
- * 向指定的WebSocket会话发送WebSocket消息对象
- *
- * @param session WebSocket会话
- * @param message 要发送的WebSocket消息对象
- */
- private synchronized static void sendMessage(WebSocketSession session, WebSocketMessage> message) {
- if (session == null || !session.isOpen()) {
- log.warn("[send] session会话已经关闭");
- } else {
- try {
- session.sendMessage(message);
- } catch (IOException e) {
- log.error("[send] session({}) 发送消息({}) 异常", session, message, e);
- }
- }
- }
-}
diff --git a/dk-common/common-websocket/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/dk-common/common-websocket/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
deleted file mode 100644
index c3a7305..0000000
--- a/dk-common/common-websocket/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
+++ /dev/null
@@ -1 +0,0 @@
-org.dromara.common.websocket.config.WebSocketConfig
diff --git a/dk-modules/business/src/main/java/org/dromara/business/controller/BusinessTaskController.java b/dk-modules/business/src/main/java/org/dromara/business/controller/BusinessTaskController.java
index f16fb86..080b3c4 100644
--- a/dk-modules/business/src/main/java/org/dromara/business/controller/BusinessTaskController.java
+++ b/dk-modules/business/src/main/java/org/dromara/business/controller/BusinessTaskController.java
@@ -106,4 +106,8 @@ public class BusinessTaskController extends BaseController {
@PathVariable Long[] ids) {
return toAjax(businessTaskService.deleteWithValidByIds(List.of(ids), true));
}
+
+
+
+
}
diff --git a/dk-modules/business/src/main/java/org/dromara/business/domain/BusinessAlert.java b/dk-modules/business/src/main/java/org/dromara/business/domain/BusinessAlert.java
index 41629d6..d742f17 100644
--- a/dk-modules/business/src/main/java/org/dromara/business/domain/BusinessAlert.java
+++ b/dk-modules/business/src/main/java/org/dromara/business/domain/BusinessAlert.java
@@ -25,7 +25,7 @@ public class BusinessAlert {
/**
*
*/
- @TableId(type = IdType.ASSIGN_ID)
+ @TableId(type = IdType.AUTO)
private Long id;
/**
diff --git a/dk-modules/business/src/main/java/org/dromara/business/domain/vo/BusinessTaskVo.java b/dk-modules/business/src/main/java/org/dromara/business/domain/vo/BusinessTaskVo.java
index d2aebe5..8ba27e9 100644
--- a/dk-modules/business/src/main/java/org/dromara/business/domain/vo/BusinessTaskVo.java
+++ b/dk-modules/business/src/main/java/org/dromara/business/domain/vo/BusinessTaskVo.java
@@ -70,7 +70,7 @@ public class BusinessTaskVo implements Serializable {
* 工单状态(0预约中 1 等待中,2执行中 3 未完成 4已完结 )
*/
@ExcelProperty(value = "工单状态", converter = ExcelDictConvert.class)
- @ExcelDictFormat(readConverterExp = "0=预约中,1=,等=待中,2执行中,3=,未=完成,4=已完结")
+ @ExcelDictFormat(readConverterExp = "0:预约中,1:等待中,2:执行中,3:未完成,4:已完结")
private String status;
@ExcelProperty(value = "完成时间")
@@ -94,4 +94,5 @@ public class BusinessTaskVo implements Serializable {
+
}
diff --git a/dk-modules/business/src/main/java/org/dromara/business/service/IBusinessTaskService.java b/dk-modules/business/src/main/java/org/dromara/business/service/IBusinessTaskService.java
index 8fa0321..2d93025 100644
--- a/dk-modules/business/src/main/java/org/dromara/business/service/IBusinessTaskService.java
+++ b/dk-modules/business/src/main/java/org/dromara/business/service/IBusinessTaskService.java
@@ -70,4 +70,6 @@ public interface IBusinessTaskService {
Boolean deleteWithValidByIds(Collection ids, Boolean isValid);
BusinessTaskVo queryBusinessTask(String waylineId);
+
+
}
diff --git a/dk-modules/business/src/main/java/org/dromara/business/service/impl/BusinessTaskServiceImpl.java b/dk-modules/business/src/main/java/org/dromara/business/service/impl/BusinessTaskServiceImpl.java
index fa8fd63..c53435e 100644
--- a/dk-modules/business/src/main/java/org/dromara/business/service/impl/BusinessTaskServiceImpl.java
+++ b/dk-modules/business/src/main/java/org/dromara/business/service/impl/BusinessTaskServiceImpl.java
@@ -47,7 +47,8 @@ public class BusinessTaskServiceImpl implements IBusinessTaskService {
*/
@Override
public BusinessTaskVo queryById(Long id){
- return baseMapper.selectVoById(id);
+ BusinessTaskVo businessTaskVo = baseMapper.selectVoById(id);
+ return businessTaskVo;
}
/**
diff --git a/dk-modules/sample/pom.xml b/dk-modules/sample/pom.xml
index 92d0bc5..7f3292f 100644
--- a/dk-modules/sample/pom.xml
+++ b/dk-modules/sample/pom.xml
@@ -136,6 +136,10 @@
org.dromara
api-workflow
+
+ org.springframework.boot
+ spring-boot-starter
+
${project.artifactId}
diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/configuration/GlobalThreadPoolConfiguration.java b/dk-modules/sample/src/main/java/org/dromara/sample/configuration/GlobalThreadPoolConfiguration.java
index d40db01..89fbf86 100644
--- a/dk-modules/sample/src/main/java/org/dromara/sample/configuration/GlobalThreadPoolConfiguration.java
+++ b/dk-modules/sample/src/main/java/org/dromara/sample/configuration/GlobalThreadPoolConfiguration.java
@@ -18,7 +18,7 @@ public class GlobalThreadPoolConfiguration {
@Value("${thread.pool.core-pool-size: 10}")
private int corePoolSize;
- @Value("${thread.pool.maximum-pool-size: 20}")
+ @Value("${thread.pool.maximum-pool-size: 30}")
private int maximumPoolSize;
@Value("${thread.pool.keep-alive-time: 60}")
diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/control/service/impl/ControlServiceImpl.java b/dk-modules/sample/src/main/java/org/dromara/sample/control/service/impl/ControlServiceImpl.java
index 54ef9ae..7e78d0b 100644
--- a/dk-modules/sample/src/main/java/org/dromara/sample/control/service/impl/ControlServiceImpl.java
+++ b/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.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
* @version 1.2
diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/control/service/impl/SDKControlService.java b/dk-modules/sample/src/main/java/org/dromara/sample/control/service/impl/SDKControlService.java
index 8c8f38d..1473203 100644
--- a/dk-modules/sample/src/main/java/org/dromara/sample/control/service/impl/SDKControlService.java
+++ b/dk-modules/sample/src/main/java/org/dromara/sample/control/service/impl/SDKControlService.java
@@ -2,7 +2,6 @@ package org.dromara.sample.control.service.impl;
import org.dromara.common.websocket.dto.BizCodeEnum;
-import org.dromara.common.websocket.utils.WebSocketUtils;
import org.dromara.sample.manage.model.dto.DeviceDTO;
import org.dromara.sample.manage.model.enums.UserTypeEnum;
import org.dromara.sample.manage.service.IDeviceRedisService;
@@ -14,6 +13,7 @@ import org.dromara.common.sdk.mqtt.MqttReply;
import org.dromara.common.sdk.mqtt.events.TopicEventsRequest;
import org.dromara.common.sdk.mqtt.events.TopicEventsResponse;
import org.dromara.sample.control.model.dto.ResultNotifyDTO;
+import org.dromara.sample.websocket.service.IWebSocketMessageService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.messaging.MessageHeaders;
import org.springframework.stereotype.Service;
@@ -29,6 +29,8 @@ import java.util.Optional;
@Slf4j
public class SDKControlService extends AbstractControlService {
+ @Autowired
+ private IWebSocketMessageService webSocketMessageService;
@Autowired
private IDeviceRedisService deviceRedisService;
@@ -47,7 +49,7 @@ public class SDKControlService extends AbstractControlService {
}
FlyToPointProgress eventsReceiver = request.getData();
- WebSocketUtils.publishAll( UserTypeEnum.WEB.getVal(),
+ webSocketMessageService.sendBatch(deviceOpt.get().getWorkspaceId(), UserTypeEnum.WEB.getVal(),
BizCodeEnum.FLY_TO_POINT_PROGRESS.getCode(),
ResultNotifyDTO.builder().sn(dockSn)
.message(eventsReceiver.getResult().toString())
@@ -67,12 +69,12 @@ public class SDKControlService extends AbstractControlService {
}
TakeoffToPointProgress eventsReceiver = request.getData();
- WebSocketUtils.publishAll(UserTypeEnum.WEB.getVal(),
- BizCodeEnum.TAKE_OFF_TO_POINT_PROGRESS.getCode(),
- ResultNotifyDTO.builder().sn(dockSn)
- .message(eventsReceiver.getResult().toString())
- .result(eventsReceiver.getResult().getCode())
- .build());
+ webSocketMessageService.sendBatch(deviceOpt.get().getWorkspaceId(), UserTypeEnum.WEB.getVal(),
+ BizCodeEnum.TAKE_OFF_TO_POINT_PROGRESS.getCode(),
+ ResultNotifyDTO.builder().sn(dockSn)
+ .message(eventsReceiver.getResult().toString())
+ .result(eventsReceiver.getResult().getCode())
+ .build());
return new TopicEventsResponse().setData(MqttReply.success());
}
@@ -88,11 +90,11 @@ public class SDKControlService extends AbstractControlService {
DrcStatusNotify eventsReceiver = request.getData();
if (DrcStatusErrorEnum.SUCCESS != eventsReceiver.getResult()) {
- WebSocketUtils.publishAll(
- UserTypeEnum.WEB.getVal(), BizCodeEnum.DRC_STATUS_NOTIFY.getCode(),
- ResultNotifyDTO.builder().sn(dockSn)
- .message(eventsReceiver.getResult().getMessage())
- .result(eventsReceiver.getResult().getCode()).build());
+ webSocketMessageService.sendBatch(
+ deviceOpt.get().getWorkspaceId(), UserTypeEnum.WEB.getVal(), BizCodeEnum.DRC_STATUS_NOTIFY.getCode(),
+ ResultNotifyDTO.builder().sn(dockSn)
+ .message(eventsReceiver.getResult().getMessage())
+ .result(eventsReceiver.getResult().getCode()).build());
}
return new TopicEventsResponse().setData(MqttReply.success());
}
@@ -107,11 +109,11 @@ public class SDKControlService extends AbstractControlService {
}
JoystickInvalidNotify eventsReceiver = request.getData();
- WebSocketUtils.publishAll(
- UserTypeEnum.WEB.getVal(), BizCodeEnum.JOYSTICK_INVALID_NOTIFY.getCode(),
- ResultNotifyDTO.builder().sn(dockSn)
- .message(eventsReceiver.getReason().getMessage())
- .result(eventsReceiver.getReason().getVal()).build());
+ webSocketMessageService.sendBatch(
+ deviceOpt.get().getWorkspaceId(), UserTypeEnum.WEB.getVal(), BizCodeEnum.JOYSTICK_INVALID_NOTIFY.getCode(),
+ ResultNotifyDTO.builder().sn(dockSn)
+ .message(eventsReceiver.getReason().getMessage())
+ .result(eventsReceiver.getReason().getVal()).build());
return new TopicEventsResponse().setData(MqttReply.success());
}
}
diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/control/service/impl/SDKRemoteDebug.java b/dk-modules/sample/src/main/java/org/dromara/sample/control/service/impl/SDKRemoteDebug.java
index d173628..ee4f8d4 100644
--- a/dk-modules/sample/src/main/java/org/dromara/sample/control/service/impl/SDKRemoteDebug.java
+++ b/dk-modules/sample/src/main/java/org/dromara/sample/control/service/impl/SDKRemoteDebug.java
@@ -1,6 +1,5 @@
package org.dromara.sample.control.service.impl;
-import org.dromara.common.websocket.utils.WebSocketUtils;
import org.dromara.sample.manage.model.dto.DeviceDTO;
import org.dromara.sample.manage.model.enums.UserTypeEnum;
import org.dromara.sample.manage.service.IDeviceRedisService;
@@ -12,6 +11,7 @@ import org.dromara.common.sdk.mqtt.events.EventsDataRequest;
import org.dromara.common.sdk.mqtt.events.TopicEventsRequest;
import org.dromara.common.sdk.mqtt.events.TopicEventsResponse;
import org.dromara.sample.component.mqtt.model.EventsReceiver;
+import org.dromara.sample.websocket.service.IWebSocketMessageService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.messaging.MessageHeaders;
import org.springframework.stereotype.Service;
@@ -27,6 +27,8 @@ import java.util.Optional;
@Slf4j
public class SDKRemoteDebug extends AbstractDebugService {
+ @Autowired
+ private IWebSocketMessageService webSocketMessageService;
@Autowired
private IDeviceRedisService deviceRedisService;
@@ -53,7 +55,7 @@ public class SDKRemoteDebug extends AbstractDebugService {
}
DeviceDTO device = deviceOpt.get();
- WebSocketUtils.publishAll( UserTypeEnum.WEB.getVal(),
+ webSocketMessageService.sendBatch(device.getWorkspaceId(),UserTypeEnum.WEB.getVal(),
request.getMethod(), eventsReceiver);
return new TopicEventsResponse().setData(MqttReply.success());
diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/DeviceFirmwareServiceImpl.java b/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/DeviceFirmwareServiceImpl.java
index 491658f..eaca268 100644
--- a/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/DeviceFirmwareServiceImpl.java
+++ b/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/DeviceFirmwareServiceImpl.java
@@ -21,7 +21,6 @@ import org.dromara.common.sdk.mqtt.events.EventsDataRequest;
import org.dromara.common.sdk.mqtt.events.TopicEventsRequest;
import org.dromara.common.sdk.mqtt.events.TopicEventsResponse;
import org.dromara.common.websocket.dto.BizCodeEnum;
-import org.dromara.common.websocket.utils.WebSocketUtils;
import org.dromara.sample.component.mqtt.model.EventsReceiver;
import org.dromara.sample.manage.mapper.IDeviceFirmwareMapper;
import org.dromara.sample.manage.model.dto.*;
@@ -35,6 +34,7 @@ import org.dromara.sample.manage.service.IFirmwareModelService;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.extern.slf4j.Slf4j;
+import org.dromara.sample.websocket.service.IWebSocketMessageService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.messaging.MessageHeaders;
import org.springframework.stereotype.Service;
@@ -76,6 +76,9 @@ public class DeviceFirmwareServiceImpl extends AbstractFirmwareService implement
@Autowired
private IDeviceRedisService deviceRedisService;
+ @Autowired
+ private IWebSocketMessageService webSocketMessageService;
+
@Override
public Optional getFirmware(String workspaceId, String deviceName, String version) {
return Optional.ofNullable(entity2Dto(mapper.selectOne(
@@ -159,7 +162,7 @@ public class DeviceFirmwareServiceImpl extends AbstractFirmwareService implement
deviceRedisService.setFirmwareUpgrading(sn, events);
}
events.setSn(sn);
- WebSocketUtils.publishAll(UserTypeEnum.WEB.getVal(), BizCodeEnum.OTA_PROGRESS.getCode(), events);
+ webSocketMessageService.sendBatch(workspaceId,UserTypeEnum.WEB.getVal(), BizCodeEnum.OTA_PROGRESS.getCode(), events);
}
@Override
diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/DeviceHmsServiceImpl.java b/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/DeviceHmsServiceImpl.java
index 924bd64..a860e35 100644
--- a/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/DeviceHmsServiceImpl.java
+++ b/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/DeviceHmsServiceImpl.java
@@ -12,7 +12,6 @@ import org.dromara.common.sdk.common.Pagination;
import org.dromara.common.sdk.common.PaginationData;
import org.dromara.common.sdk.mqtt.events.TopicEventsRequest;
import org.dromara.common.websocket.dto.BizCodeEnum;
-import org.dromara.common.websocket.utils.WebSocketUtils;
import org.dromara.sample.manage.mapper.IDeviceHmsMapper;
import org.dromara.sample.manage.model.common.HmsJsonUtil;
import org.dromara.sample.manage.model.common.HmsMessage;
@@ -26,6 +25,7 @@ import org.dromara.sample.manage.service.IDeviceHmsService;
import org.dromara.sample.manage.service.IDeviceRedisService;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.extern.slf4j.Slf4j;
+import org.dromara.sample.websocket.service.IWebSocketMessageService;
import org.jetbrains.annotations.NotNull;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.messaging.MessageHeaders;
@@ -60,6 +60,9 @@ public class DeviceHmsServiceImpl extends AbstractHmsService implements IDeviceH
@Autowired
private IDeviceRedisService deviceRedisService;
+ @Autowired
+ private IWebSocketMessageService sendMessageService;
+
private static final Pattern PATTERN_KEY = Pattern.compile(
"(" +
Arrays.stream(HmsFormatKeyEnum.values())
@@ -102,7 +105,7 @@ public class DeviceHmsServiceImpl extends AbstractHmsService implements IDeviceH
if (deviceOpt.isEmpty()) {
return;
}
- WebSocketUtils.publishAll(UserTypeEnum.WEB.getVal(),
+ sendMessageService.sendBatch(deviceOpt.get().getWorkspaceId(),UserTypeEnum.WEB.getVal(),
BizCodeEnum.DEVICE_HMS.getCode(), TelemetryDTO.>builder().sn(sn).host(unReadList).build());
}
diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/DeviceLogsServiceImpl.java b/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/DeviceLogsServiceImpl.java
index ebcef21..4df70a8 100644
--- a/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/DeviceLogsServiceImpl.java
+++ b/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/DeviceLogsServiceImpl.java
@@ -19,7 +19,6 @@ import org.dromara.common.sdk.mqtt.events.TopicEventsResponse;
import org.dromara.common.sdk.mqtt.services.ServicesReplyData;
import org.dromara.common.sdk.mqtt.services.TopicServicesResponse;
import org.dromara.common.websocket.dto.BizCodeEnum;
-import org.dromara.common.websocket.utils.WebSocketUtils;
import org.dromara.sample.component.mqtt.model.EventsReceiver;
import org.dromara.sample.manage.mapper.IDeviceLogsMapper;
@@ -36,6 +35,7 @@ import org.dromara.sample.manage.service.ITopologyService;
import org.dromara.sample.storage.service.IStorageService;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.extern.slf4j.Slf4j;
+import org.dromara.sample.websocket.service.IWebSocketMessageService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.messaging.MessageHeaders;
import org.springframework.stereotype.Service;
@@ -83,6 +83,9 @@ public class DeviceLogsServiceImpl extends AbstractLogService implements IDevice
@Autowired
private AbstractLogService abstractLogService;
+ @Autowired
+ private IWebSocketMessageService webSocketMessageService;
+
@Override
public PaginationData getUploadedLogs(String deviceSn, DeviceLogsQueryParam param) {
LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper()
@@ -265,7 +268,7 @@ public class DeviceLogsServiceImpl extends AbstractLogService implements IDevice
RedisOpsUtils.del(key);
}
- WebSocketUtils.publishAll(UserTypeEnum.WEB.getVal(),
+ webSocketMessageService.sendBatch(device.getWorkspaceId(),UserTypeEnum.WEB.getVal(),
BizCodeEnum.FILE_UPLOAD_PROGRESS.getCode(), webSocketData);
return new TopicEventsResponse().setData(MqttReply.success());
diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/DevicePayloadServiceImpl.java b/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/DevicePayloadServiceImpl.java
index d833e64..a1a4e99 100644
--- a/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/DevicePayloadServiceImpl.java
+++ b/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/DevicePayloadServiceImpl.java
@@ -5,7 +5,6 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import org.dromara.common.sdk.cloudapi.device.*;
import org.dromara.common.websocket.dto.BizCodeEnum;
-import org.dromara.common.websocket.utils.WebSocketUtils;
import org.dromara.sample.control.model.enums.DroneAuthorityEnum;
import org.dromara.sample.manage.mapper.IDevicePayloadMapper;
import org.dromara.sample.manage.model.dto.*;
@@ -16,6 +15,7 @@ import org.dromara.sample.manage.service.IDeviceDictionaryService;
import org.dromara.sample.manage.service.IDevicePayloadService;
import org.dromara.sample.manage.service.IDeviceRedisService;
import lombok.extern.slf4j.Slf4j;
+import org.dromara.sample.websocket.service.IWebSocketMessageService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -46,6 +46,9 @@ public class DevicePayloadServiceImpl implements IDevicePayloadService {
@Autowired
private IDeviceRedisService deviceRedisService;
+ @Autowired
+ private IWebSocketMessageService webSocketMessageService;
+
@Override
public Integer checkPayloadExist(String payloadSn) {
DevicePayloadEntity devicePayload = mapper.selectOne(
@@ -81,7 +84,7 @@ public class DevicePayloadServiceImpl implements IDevicePayloadService {
return false;
}
if (controlMap.get(payloadReceiver.getSn()) != payloadReceiver.getControlSource()) {
- WebSocketUtils.publishAll( UserTypeEnum.WEB.getVal(),
+ webSocketMessageService.sendBatch(device.getWorkspaceId(), UserTypeEnum.WEB.getVal(),
BizCodeEnum.CONTROL_SOURCE_CHANGE.getCode(),
DeviceAuthorityDTO.builder()
.controlSource(payloadReceiver.getControlSource())
diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/DeviceServiceImpl.java b/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/DeviceServiceImpl.java
index 4afdd1a..c1af8c5 100644
--- a/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/DeviceServiceImpl.java
+++ b/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/DeviceServiceImpl.java
@@ -25,7 +25,6 @@ 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.common.websocket.utils.WebSocketUtils;
import org.dromara.sample.common.error.CommonErrorEnum;
import org.dromara.sample.component.mqtt.model.EventsReceiver;
import org.dromara.sample.control.model.enums.DroneAuthorityEnum;
@@ -41,6 +40,7 @@ import org.dromara.sample.manage.service.*;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.extern.slf4j.Slf4j;
+import org.dromara.sample.websocket.service.IWebSocketMessageService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -122,6 +122,9 @@ public class DeviceServiceImpl implements IDeviceService {
@Autowired
private AbstractFirmwareService abstractFirmwareService;
+ @Autowired
+ private IWebSocketMessageService webSocketMessageService;
+
@Override
public void subDeviceOffline(String deviceSn) {
// If no information about this device exists in the cache, the drone is considered to be offline.
@@ -302,20 +305,20 @@ public class DeviceServiceImpl implements IDeviceService {
@Override
public void pushDeviceOfflineTopo(String workspaceId, String deviceSn) {
- WebSocketUtils.publishAll(
+ webSocketMessageService.sendBatch(workspaceId,
null,BizCodeEnum.DEVICE_OFFLINE.getCode(),
new TopologyDeviceDTO().setSn(deviceSn).setOnlineStatus(false));
}
@Override
public void pushDeviceOnlineTopo(String workspaceId, String gatewaySn, String deviceSn) {
- WebSocketUtils.publishAll(null,BizCodeEnum.DEVICE_ONLINE.getCode(),
+ webSocketMessageService.sendBatch(null,BizCodeEnum.DEVICE_ONLINE.getCode(),
getDeviceTopoForPilot(deviceSn).orElseGet(TopologyDeviceDTO::new).setGatewaySn(gatewaySn));
}
@Override
public void pushOsdDataToPilot(String workspaceId, String sn, DeviceOsdHost data) {
- WebSocketUtils.publishAll( UserTypeEnum.PILOT.getVal(), BizCodeEnum.DEVICE_OSD.getCode(),
+ webSocketMessageService.sendBatch(workspaceId, UserTypeEnum.PILOT.getVal(), BizCodeEnum.DEVICE_OSD.getCode(),
new DeviceOsdWsResponse()
.setSn(sn)
.setHost(data));
@@ -323,7 +326,7 @@ public class DeviceServiceImpl implements IDeviceService {
@Override
public void pushOsdDataToWeb(String workspaceId, BizCodeEnum codeEnum, String sn, Object data) {
- WebSocketUtils.publishAll(UserTypeEnum.WEB.getVal(), codeEnum.getCode(), TelemetryDTO.builder().sn(sn).host(data).build());
+ webSocketMessageService.sendBatch(workspaceId,UserTypeEnum.WEB.getVal(), codeEnum.getCode(), TelemetryDTO.builder().sn(sn).host(data).build());
}
/**
@@ -655,7 +658,7 @@ public class DeviceServiceImpl implements IDeviceService {
gateway.setControlSource(controlSource);
deviceRedisService.setDeviceOnline(gateway);
- WebSocketUtils.publishAll(UserTypeEnum.WEB.getVal(),
+ webSocketMessageService.sendBatch(gateway.getWorkspaceId(),UserTypeEnum.WEB.getVal(),
BizCodeEnum.CONTROL_SOURCE_CHANGE.getCode(),
DeviceAuthorityDTO.builder()
.controlSource(gateway.getControlSource())
diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/InterconnectionService.java b/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/InterconnectionService.java
new file mode 100644
index 0000000..4f3156c
--- /dev/null
+++ b/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 request, MessageHeaders headers) {
+ log.info(request.toString());
+ }
+
+ public void psdkFloatingWindowText(TopicEventsRequest request, MessageHeaders headers) {
+ log.info(request.toString());
+ }
+}
diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/SDKDeviceService.java b/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/SDKDeviceService.java
index a6ad008..49765c0 100644
--- a/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/SDKDeviceService.java
+++ b/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.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.IconUrlEnum;
import org.dromara.common.sdk.common.SDKManager;
@@ -360,6 +362,16 @@ public class SDKDeviceService extends AbstractDeviceService {
.build()).collect(Collectors.toList()));
}
+ @Override
+ public void dockPsdkUiResource(TopicStateRequest request, MessageHeaders headers){
+ log.info(request.toString());
+ }
+
+ @Override
+ public void dockPsdkWidgetValues(TopicStateRequest request, MessageHeaders headers){
+ log.info(request.toString());
+ }
+
private void dockGoOnline(DeviceDTO gateway, DeviceDTO subDevice) {
if (DeviceDomainEnum.DOCK != gateway.getDomain()) {
return;
diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/map/service/impl/FlightAreaFileServiceImpl.java b/dk-modules/sample/src/main/java/org/dromara/sample/map/service/impl/FlightAreaFileServiceImpl.java
index 3cd911b..c3165d8 100644
--- a/dk-modules/sample/src/main/java/org/dromara/sample/map/service/impl/FlightAreaFileServiceImpl.java
+++ b/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.databind.ObjectMapper;
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.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -39,6 +41,7 @@ import java.util.stream.Collectors;
@Transactional
public class FlightAreaFileServiceImpl implements IFlightAreaFileService {
+ private static final Logger log = LoggerFactory.getLogger(FlightAreaFileServiceImpl.class);
@Autowired
private IFlightAreaFileMapper mapper;
@@ -101,7 +104,6 @@ public class FlightAreaFileServiceImpl implements IFlightAreaFileService {
}
private FlightAreaFileDTO generateFlightAreaFile(String workspaceId, List flightAreas) {
-
FlightAreaJson flightAreaJson = new FlightAreaJson()
.setFeatures(flightAreas.stream()
.map(this::generateFlightAreaFeature)
@@ -117,6 +119,7 @@ public class FlightAreaFileServiceImpl implements IFlightAreaFileService {
}
is.reset();
OssClient storage = OssFactory.instance("flightareafile");
+ log.info(is.toString()+"==========================="+name+"======================"+length);
storage.uploadSuffix(is,name,length,"json");
return FlightAreaFileDTO.builder()
.name(name)
diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/map/service/impl/FlightAreaServiceImpl.java b/dk-modules/sample/src/main/java/org/dromara/sample/map/service/impl/FlightAreaServiceImpl.java
index 3189b6a..184d09c 100644
--- a/dk-modules/sample/src/main/java/org/dromara/sample/map/service/impl/FlightAreaServiceImpl.java
+++ b/dk-modules/sample/src/main/java/org/dromara/sample/map/service/impl/FlightAreaServiceImpl.java
@@ -17,7 +17,6 @@ import org.dromara.common.sdk.mqtt.requests.TopicRequestsResponse;
import org.dromara.common.sdk.mqtt.services.ServicesReplyData;
import org.dromara.common.sdk.mqtt.services.TopicServicesResponse;
import org.dromara.common.websocket.dto.BizCodeEnum;
-import org.dromara.common.websocket.utils.WebSocketUtils;
import org.dromara.sample.common.error.CommonErrorEnum;
import org.dromara.sample.manage.model.dto.DeviceDTO;
import org.dromara.sample.manage.model.dto.TelemetryDTO;
@@ -30,6 +29,7 @@ import org.dromara.sample.map.model.param.PutFlightAreaParam;
import org.dromara.sample.map.service.*;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.extern.slf4j.Slf4j;
+import org.dromara.sample.websocket.service.IWebSocketMessageService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.messaging.MessageHeaders;
import org.springframework.stereotype.Service;
@@ -70,7 +70,8 @@ public class FlightAreaServiceImpl extends AbstractFlightAreaService implements
@Autowired
private IDeviceFlightAreaService deviceFlightAreaService;
-
+ @Autowired
+ private IWebSocketMessageService webSocketMessageService;
@Autowired
private ObjectMapper objectMapper;
@@ -139,7 +140,7 @@ public class FlightAreaServiceImpl extends AbstractFlightAreaService implements
}
flightAreaFileService.setNonLatestByWorkspaceId(workspaceId);
- WebSocketUtils.publishAll( BizCodeEnum.FLIGHT_AREAS_UPDATE.getCode(),
+ webSocketMessageService.sendBatch(workspaceId, BizCodeEnum.FLIGHT_AREAS_UPDATE.getCode(),
FlightAreaWs.builder()
.operation(FlightAreaOpertaionEnum.ADD)
.areaId(param.getId())
@@ -171,6 +172,9 @@ public class FlightAreaServiceImpl extends AbstractFlightAreaService implements
@Override
public FlightAreaFileDTO packageFlightArea(String workspaceId) {
List flightAreas = getFlightAreaList(workspaceId);
+ if(flightAreas.size() == 0){
+ return null;
+ }
return flightAreaFileService.packageFlightAreaFile(workspaceId, flightAreas);
}
@@ -185,7 +189,7 @@ public class FlightAreaServiceImpl extends AbstractFlightAreaService implements
throw new RuntimeException("无法删除飞行区域属性。");
}
flightAreaFileService.setNonLatestByWorkspaceId(workspaceId);
- WebSocketUtils.publishAll( BizCodeEnum.FLIGHT_AREAS_UPDATE.getCode(),
+ webSocketMessageService.sendBatch(workspaceId,BizCodeEnum.FLIGHT_AREAS_UPDATE.getCode(),
FlightAreaWs.builder()
.operation(FlightAreaOpertaionEnum.DELETE)
.areaId(areaId)
@@ -222,7 +226,7 @@ public class FlightAreaServiceImpl extends AbstractFlightAreaService implements
}
flightAreaFileService.setNonLatestByWorkspaceId(workspaceId);
Optional areaOpt = getFlightAreaByAreaId(areaId);
- areaOpt.ifPresent(area -> WebSocketUtils.publishAll(
+ areaOpt.ifPresent(area -> webSocketMessageService.sendBatch(workspaceId,
BizCodeEnum.FLIGHT_AREAS_UPDATE.getCode(),
FlightAreaWs.builder()
.operation(FlightAreaOpertaionEnum.UPDATE)
@@ -256,7 +260,7 @@ public class FlightAreaServiceImpl extends AbstractFlightAreaService implements
.syncCode(data.getReason())
.build();
deviceFlightAreaService.updateOrSaveDeviceFile(deviceFlightArea);
- WebSocketUtils.publishAll( BizCodeEnum.FLIGHT_AREAS_SYNC_PROGRESS.getCode(),
+ webSocketMessageService.sendBatch(workspaceId, BizCodeEnum.FLIGHT_AREAS_SYNC_PROGRESS.getCode(),
FlightAreaNotifyDTO.builder()
.sn(request.getGateway())
.result(data.getReason().getReason())
@@ -276,7 +280,7 @@ public class FlightAreaServiceImpl extends AbstractFlightAreaService implements
if (request.getData().getDroneLocations().isEmpty()) {
return new TopicEventsResponse<>();
}
- WebSocketUtils.publishAll( BizCodeEnum.FLIGHT_AREAS_DRONE_LOCATION.getCode(),
+ webSocketMessageService.sendBatch(deviceOpt.get().getWorkspaceId(),BizCodeEnum.FLIGHT_AREAS_DRONE_LOCATION.getCode(),
TelemetryDTO.builder().sn(deviceOpt.get().getChildDeviceSn()).host(request.getData()).build());
return new TopicEventsResponse<>();
}
@@ -296,6 +300,9 @@ public class FlightAreaServiceImpl extends AbstractFlightAreaService implements
FlightAreaFileDTO file = fileOpt.orElse(null);
if (flightAreaOpt.isEmpty() || fileOpt.isEmpty()) {
file = packageFlightArea(device.getWorkspaceId());
+ if(file == null){
+ return null;
+ }
}
OssClient storage = OssFactory.instance("flightareafile");
return new TopicRequestsResponse>().setData(
diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/map/service/impl/WorkspaceElementServiceImpl.java b/dk-modules/sample/src/main/java/org/dromara/sample/map/service/impl/WorkspaceElementServiceImpl.java
index 3529f9e..dd94c70 100644
--- a/dk-modules/sample/src/main/java/org/dromara/sample/map/service/impl/WorkspaceElementServiceImpl.java
+++ b/dk-modules/sample/src/main/java/org/dromara/sample/map/service/impl/WorkspaceElementServiceImpl.java
@@ -3,12 +3,12 @@ package org.dromara.sample.map.service.impl;
import org.dromara.common.sdk.cloudapi.map.*;
import org.dromara.common.sdk.common.HttpResultResponse;
import org.dromara.common.websocket.dto.BizCodeEnum;
-import org.dromara.common.websocket.utils.WebSocketUtils;
import org.dromara.sample.map.model.dto.GroupElementDTO;
import org.dromara.sample.map.service.IElementCoordinateService;
import org.dromara.sample.map.service.IGroupElementService;
import org.dromara.sample.map.service.IGroupService;
import org.dromara.sample.map.service.IWorkspaceElementService;
+import org.dromara.sample.websocket.service.IWebSocketMessageService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -34,6 +34,8 @@ public class WorkspaceElementServiceImpl implements IWorkspaceElementService {
@Autowired
private IElementCoordinateService elementCoordinateService;
+ @Autowired
+ private IWebSocketMessageService webSocketMessageService;
@Override
public List getAllGroupsByWorkspaceId(String workspaceId, String groupId, Boolean isDistributed) {
@@ -51,8 +53,8 @@ public class WorkspaceElementServiceImpl implements IWorkspaceElementService {
if (notify) {
// Notify all WebSocket connections in this workspace to be updated when an element is created.
getElementByElementId(elementCreate.getId())
- .ifPresent(groupElement -> WebSocketUtils.publishAll(
- BizCodeEnum.MAP_ELEMENT_CREATE.getCode(),
+ .ifPresent(groupElement -> webSocketMessageService.sendBatch(
+ workspaceId,BizCodeEnum.MAP_ELEMENT_CREATE.getCode(),
element2CreateWsElement(groupElement)));
}
return HttpResultResponse.success();
@@ -68,8 +70,8 @@ public class WorkspaceElementServiceImpl implements IWorkspaceElementService {
if (notify) {
// Notify all WebSocket connections in this workspace to update when there is an element update.
getElementByElementId(elementId)
- .ifPresent(groupElement -> WebSocketUtils.publishAll(
- BizCodeEnum.MAP_ELEMENT_UPDATE.getCode(),
+ .ifPresent(groupElement -> webSocketMessageService.sendBatch(
+ workspaceId,BizCodeEnum.MAP_ELEMENT_UPDATE.getCode(),
element2UpdateWsElement(groupElement)));
}
return HttpResultResponse.success();
@@ -92,7 +94,8 @@ public class WorkspaceElementServiceImpl implements IWorkspaceElementService {
if (notify) {
// Notify all WebSocket connections in this workspace to update when an element is deleted.
elementOpt.ifPresent(element ->
- WebSocketUtils.publishAll( BizCodeEnum.MAP_ELEMENT_DELETE.getCode(),
+ webSocketMessageService.sendBatch(
+ workspaceId,BizCodeEnum.MAP_ELEMENT_DELETE.getCode(),
new MapElementDeleteWsResponse()
.setGroupId(element.getGroupId())
.setId(elementId)));
diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/media/service/impl/FileServiceImpl.java b/dk-modules/sample/src/main/java/org/dromara/sample/media/service/impl/FileServiceImpl.java
index 8720d12..b5e02fc 100644
--- a/dk-modules/sample/src/main/java/org/dromara/sample/media/service/impl/FileServiceImpl.java
+++ b/dk-modules/sample/src/main/java/org/dromara/sample/media/service/impl/FileServiceImpl.java
@@ -1,8 +1,8 @@
package org.dromara.sample.media.service.impl;
-import com.baomidou.mybatisplus.core.conditions.Wrapper;
+
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 org.dromara.common.oss.core.OssClient;
import org.dromara.common.oss.factory.OssFactory;
@@ -24,10 +24,7 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.net.URL;
-import java.sql.Time;
-import java.time.Instant;
-import java.time.LocalDateTime;
-import java.time.ZoneId;
+
import java.util.*;
import java.util.stream.Collectors;
diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/media/service/impl/MediaServiceImpl.java b/dk-modules/sample/src/main/java/org/dromara/sample/media/service/impl/MediaServiceImpl.java
index 81880ee..2b25936 100644
--- a/dk-modules/sample/src/main/java/org/dromara/sample/media/service/impl/MediaServiceImpl.java
+++ b/dk-modules/sample/src/main/java/org/dromara/sample/media/service/impl/MediaServiceImpl.java
@@ -6,7 +6,6 @@ import org.dromara.common.sdk.mqtt.MqttReply;
import org.dromara.common.sdk.mqtt.events.TopicEventsRequest;
import org.dromara.common.sdk.mqtt.events.TopicEventsResponse;
import org.dromara.common.websocket.dto.BizCodeEnum;
-import org.dromara.common.websocket.utils.WebSocketUtils;
import org.dromara.sample.manage.model.dto.DeviceDTO;
import org.dromara.sample.manage.model.enums.UserTypeEnum;
import org.dromara.sample.manage.service.IDeviceRedisService;
@@ -19,6 +18,7 @@ import org.dromara.sample.media.service.IMediaService;
import org.dromara.sample.wayline.service.IWaylineJobService;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.extern.slf4j.Slf4j;
+import org.dromara.sample.websocket.service.IWebSocketMessageService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.messaging.MessageHeaders;
import org.springframework.stereotype.Service;
@@ -57,6 +57,9 @@ public class MediaServiceImpl extends AbstractMediaService implements IMediaServ
@Autowired
private IMediaRedisService mediaRedisService;
+ @Autowired
+ private IWebSocketMessageService webSocketMessageService;
+
@Override
public Boolean fastUpload(String workspaceId, String fingerprint) {
return fileService.checkExist(workspaceId, fingerprint);
@@ -140,7 +143,7 @@ public class MediaServiceImpl extends AbstractMediaService implements IMediaServ
return null;
}
- WebSocketUtils.publishAll(UserTypeEnum.WEB.getVal(),
+ webSocketMessageService.sendBatch(deviceOpt.get().getWorkspaceId(),UserTypeEnum.WEB.getVal(),
BizCodeEnum.HIGHEST_PRIORITY_UPLOAD_FLIGHT_TASK_MEDIA.getCode(), countDTO);
return new TopicEventsResponse().setData(MqttReply.success());
@@ -183,7 +186,7 @@ public class MediaServiceImpl extends AbstractMediaService implements IMediaServ
mediaRedisService.setMediaCount(request.getGateway(), jobId, mediaFileCount);
}
- WebSocketUtils.publishAll( UserTypeEnum.WEB.getVal(),
+ webSocketMessageService.sendBatch(dock.getWorkspaceId(), UserTypeEnum.WEB.getVal(),
BizCodeEnum.FILE_UPLOAD_CALLBACK.getCode(), mediaFileCount);
}
diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/storage/service/impl/StorageServiceImpl.java b/dk-modules/sample/src/main/java/org/dromara/sample/storage/service/impl/StorageServiceImpl.java
index af53d55..08e165d 100644
--- a/dk-modules/sample/src/main/java/org/dromara/sample/storage/service/impl/StorageServiceImpl.java
+++ b/dk-modules/sample/src/main/java/org/dromara/sample/storage/service/impl/StorageServiceImpl.java
@@ -39,7 +39,7 @@ public class StorageServiceImpl extends AbstractMediaService implements IStorage
OssClient ossClient = OssFactory.instance("mediafile");
return new StsCredentialsResponse()
.setEndpoint(ossClient.getIsHttps()+ossClient.getOssProperties().getEndpoint())
- .setBucket("mediafile")
+ .setBucket(ossClient.getOssProperties().getBucketName())
.setCredentials(OssFactory.getCredentials(ossClient))
.setProvider(OssTypeEnum.fromType(ossClient.getOssProperties().getSThreeType()))
.setObjectKeyPrefix(ossClient.getOssProperties().getPrefix())
diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/impl/FlightTaskServiceImpl.java b/dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/impl/FlightTaskServiceImpl.java
index b94a0f7..95ecd26 100644
--- a/dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/impl/FlightTaskServiceImpl.java
+++ b/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.events.TopicEventsRequest;
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.TopicServicesResponse;
import org.dromara.sample.common.error.CommonErrorEnum;
@@ -184,6 +185,10 @@ public class FlightTaskServiceImpl extends AbstractWaylineService implements IFl
}
+ public void returnHomeInfo(TopicRequestsRequest request, MessageHeaders headers) {
+ log.info(request.toString());
+ }
+
/**
* For immediate tasks, the server time shall prevail.
* @param param
diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/impl/SDKWaylineService.java b/dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/impl/SDKWaylineService.java
index 62d07d1..aefb7ed 100644
--- a/dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/impl/SDKWaylineService.java
+++ b/dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/impl/SDKWaylineService.java
@@ -9,7 +9,6 @@ import org.dromara.common.sdk.mqtt.events.TopicEventsResponse;
import org.dromara.common.sdk.mqtt.requests.TopicRequestsRequest;
import org.dromara.common.sdk.mqtt.requests.TopicRequestsResponse;
import org.dromara.common.websocket.dto.BizCodeEnum;
-import org.dromara.common.websocket.utils.WebSocketUtils;
import org.dromara.sample.common.error.CommonErrorEnum;
import org.dromara.sample.component.mqtt.model.EventsReceiver;
import org.dromara.sample.manage.model.dto.DeviceDTO;
@@ -23,6 +22,7 @@ import org.dromara.sample.wayline.service.IWaylineFileService;
import org.dromara.sample.wayline.service.IWaylineJobService;
import org.dromara.sample.wayline.service.IWaylineRedisService;
import lombok.extern.slf4j.Slf4j;
+import org.dromara.sample.websocket.service.IWebSocketMessageService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.messaging.MessageHeaders;
import org.springframework.stereotype.Service;
@@ -59,6 +59,10 @@ public class SDKWaylineService extends AbstractWaylineService {
@Autowired
private IWaylineFileService waylineFileService;
+
+ @Autowired
+ private IWebSocketMessageService webSocketMessageService;
+
@Override
public TopicEventsResponse deviceExitHomingNotify(TopicEventsRequest request, MessageHeaders headers) {
return super.deviceExitHomingNotify(request, headers);
@@ -109,7 +113,7 @@ public class SDKWaylineService extends AbstractWaylineService {
waylineRedisService.delRunningWaylineJob(response.getGateway());
waylineRedisService.delPausedWaylineJob(response.getBid());
}
- WebSocketUtils.publishAll(UserTypeEnum.WEB.getVal(),
+ webSocketMessageService.sendBatch(deviceOpt.get().getWorkspaceId(),UserTypeEnum.WEB.getVal(),
BizCodeEnum.FLIGHT_TASK_PROGRESS.getCode(), eventsReceiver);
return new TopicEventsResponse<>();
diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/impl/WaylineFileServiceImpl.java b/dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/impl/WaylineFileServiceImpl.java
index d228af7..aaa2fb9 100644
--- a/dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/impl/WaylineFileServiceImpl.java
+++ b/dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/impl/WaylineFileServiceImpl.java
@@ -197,8 +197,7 @@ public class WaylineFileServiceImpl implements IWaylineFileService {
waylineFile.setUsername(creator);
OssClient storage = OssFactory.instance("waylinefile");
String originalfileName = file.getOriginalFilename();
- String suffix = org.apache.commons.lang3.StringUtils.substring(originalfileName, originalfileName.lastIndexOf("."), originalfileName.length());
- UploadResult uploadResult = storage.uploadSuffix(file.getBytes(), suffix, file.getContentType());
+ UploadResult uploadResult = storage.uploadSuffix(file.getBytes(), originalfileName, file.getContentType());
waylineFile.setObjectKey(uploadResult.getFilename());
List deviceSns = new ArrayList<>();
deviceSns.add(deviceSn);
diff --git a/dk-common/common-websocket/src/main/java/org/dromara/common/websocket/config/MyConcurrentWebSocketSession.java b/dk-modules/sample/src/main/java/org/dromara/sample/websocket/config/MyConcurrentWebSocketSession.java
similarity index 94%
rename from dk-common/common-websocket/src/main/java/org/dromara/common/websocket/config/MyConcurrentWebSocketSession.java
rename to dk-modules/sample/src/main/java/org/dromara/sample/websocket/config/MyConcurrentWebSocketSession.java
index 03a40bd..1b07002 100644
--- a/dk-common/common-websocket/src/main/java/org/dromara/common/websocket/config/MyConcurrentWebSocketSession.java
+++ b/dk-modules/sample/src/main/java/org/dromara/sample/websocket/config/MyConcurrentWebSocketSession.java
@@ -1,4 +1,4 @@
-package org.dromara.common.websocket.config;
+package org.dromara.sample.websocket.config;
import org.springframework.web.socket.WebSocketSession;
import org.springframework.web.socket.handler.ConcurrentWebSocketSessionDecorator;
diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/websocket/config/MyWebSocketFactory.java b/dk-modules/sample/src/main/java/org/dromara/sample/websocket/config/MyWebSocketFactory.java
new file mode 100644
index 0000000..23a04ab
--- /dev/null
+++ b/dk-modules/sample/src/main/java/org/dromara/sample/websocket/config/MyWebSocketFactory.java
@@ -0,0 +1,27 @@
+package org.dromara.sample.websocket.config;
+
+import org.dromara.common.websocket.WebSocketDefaultFactory;
+import org.dromara.sample.websocket.service.IWebSocketManageService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Primary;
+import org.springframework.stereotype.Component;
+import org.springframework.web.socket.WebSocketHandler;
+
+/**
+ *
+ * @author sean.zhou
+ * @date 2021/11/16
+ * @version 0.1
+ */
+@Component
+@Primary
+public class MyWebSocketFactory extends WebSocketDefaultFactory {
+
+ @Autowired
+ private IWebSocketManageService webSocketManageService;
+
+ @Override
+ public WebSocketHandler decorate(WebSocketHandler handler) {
+ return new MyWebSocketHandler(handler, webSocketManageService);
+ }
+}
diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/websocket/config/MyWebSocketHandler.java b/dk-modules/sample/src/main/java/org/dromara/sample/websocket/config/MyWebSocketHandler.java
new file mode 100644
index 0000000..1a1b1c1
--- /dev/null
+++ b/dk-modules/sample/src/main/java/org/dromara/sample/websocket/config/MyWebSocketHandler.java
@@ -0,0 +1,69 @@
+package org.dromara.sample.websocket.config;
+
+import cn.hutool.core.bean.BeanUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.dromara.common.core.constant.CacheConstants;
+import org.dromara.common.redis.utils.RedisUtils;
+import org.dromara.common.satoken.utils.LoginHelper;
+import org.dromara.common.websocket.WebSocketDefaultHandler;
+import org.dromara.sample.websocket.service.IWebSocketManageService;
+import org.dromara.system.api.domain.SysUserOnline;
+import org.dromara.system.api.model.LoginUser;
+import org.springframework.util.StringUtils;
+import org.springframework.web.socket.CloseStatus;
+import org.springframework.web.socket.WebSocketHandler;
+import org.springframework.web.socket.WebSocketMessage;
+import org.springframework.web.socket.WebSocketSession;
+
+import java.security.Principal;
+
+import static org.dromara.common.satoken.utils.LoginHelper.LOGIN_USER_KEY;
+
+/**
+ *
+ * @author sean.zhou
+ * @date 2021/11/16
+ * @version 0.1
+ */
+@Slf4j
+public class MyWebSocketHandler extends WebSocketDefaultHandler {
+
+ private IWebSocketManageService webSocketManageService;
+
+ MyWebSocketHandler(WebSocketHandler delegate, IWebSocketManageService webSocketManageService) {
+ super(delegate);
+ this.webSocketManageService = webSocketManageService;
+ }
+
+ @Override
+ public void afterConnectionEstablished(WebSocketSession session) throws Exception {
+
+ Object cacheObject = RedisUtils.getCacheObject("000000:online_tokens:" + session.getUri().toString().substring(session.getUri().toString().indexOf("%20") + 3, session.getUri().toString().indexOf("&")));
+ SysUserOnline sysUserOnline = BeanUtil.copyProperties(cacheObject, SysUserOnline.class);
+ if (StringUtils.hasText(sysUserOnline.getUserName())) {
+ webSocketManageService.put(sysUserOnline.getUserName(), new MyConcurrentWebSocketSession(session));
+ log.debug("{} is connected. ID: {}. WebSocketSession[current count: {}]",
+ sysUserOnline.getUserName(), session.getId(), webSocketManageService.getConnectedCount());
+ return;
+ }
+ session.close();
+ }
+
+ @Override
+ public void afterConnectionClosed(WebSocketSession session, CloseStatus closeStatus) throws Exception {
+ Object cacheObject = RedisUtils.getCacheObject("000000:online_tokens:" + session.getUri().toString().substring(session.getUri().toString().indexOf("%20") + 3, session.getUri().toString().indexOf("&")));
+ SysUserOnline sysUserOnline = BeanUtil.copyProperties(cacheObject, SysUserOnline.class);
+ if (StringUtils.hasText(sysUserOnline.getUserName())) {
+ webSocketManageService.remove(sysUserOnline.getUserName(), session.getId());
+ log.debug("{} is disconnected. ID: {}. WebSocketSession[current count: {}]",
+ sysUserOnline.getUserName(), session.getId(), webSocketManageService.getConnectedCount());
+ }
+
+ }
+
+ @Override
+ public void handleMessage(WebSocketSession session, WebSocketMessage> message) throws Exception {
+ log.debug("received message: {}", message.getPayload());
+ }
+
+}
diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/websocket/model/BizCodeEnum.java b/dk-modules/sample/src/main/java/org/dromara/sample/websocket/model/BizCodeEnum.java
new file mode 100644
index 0000000..cb39f28
--- /dev/null
+++ b/dk-modules/sample/src/main/java/org/dromara/sample/websocket/model/BizCodeEnum.java
@@ -0,0 +1,93 @@
+package org.dromara.sample.websocket.model;
+
+/**
+ * @author sean
+ * @version 0.1
+ * @date 2021/11/26
+ */
+public enum BizCodeEnum {
+
+ DEVICE_ONLINE("device_online"),
+
+ DEVICE_OFFLINE("device_offline"),
+
+ DEVICE_UPDATE_TOPO("device_update_topo"),
+
+ DEVICE_OSD("device_osd"),
+
+ RC_OSD("gateway_osd"),
+
+ DOCK_OSD("dock_osd"),
+
+ MAP_ELEMENT_CREATE("map_element_create"),
+
+ MAP_ELEMENT_UPDATE("map_element_update"),
+
+ MAP_ELEMENT_DELETE("map_element_delete"),
+
+ MAP_GROUP_REFRESH("map_group_refresh"),
+
+ FLIGHT_TASK_PROGRESS("flighttask_progress"),
+
+ DEVICE_HMS("device_hms"),
+
+ DEVICE_REBOOT("device_reboot"),
+
+ DRONE_OPEN("drone_open"),
+
+ DRONE_CLOSE("drone_close"),
+
+ DEVICE_CHECK("device_check"),
+
+ DRONE_FORMAT("drone_format"),
+
+ DEVICE_FORMAT("device_format"),
+
+ COVER_OPEN("cover_open"),
+
+ COVER_CLOSE("cover_close"),
+
+ PUTTER_OPEN("putter_open"),
+
+ PUTTER_CLOSE("putter_close"),
+
+ CHARGE_OPEN("charge_open"),
+
+ CHARGE_CLOSE("charge_close"),
+
+ FILE_UPLOAD_CALLBACK("file_upload_callback"),
+
+ FILE_UPLOAD_PROGRESS("fileupload_progress"),
+
+ OTA_PROGRESS("ota_progress"),
+
+ HIGHEST_PRIORITY_UPLOAD_FLIGHT_TASK_MEDIA("highest_priority_upload_flighttask_media"),
+
+ CONTROL_SOURCE_CHANGE("control_source_change"),
+
+ FLY_TO_POINT_PROGRESS("fly_to_point_progress"),
+
+ TAKE_OFF_TO_POINT_PROGRESS("takeoff_to_point_progress"),
+
+ DRC_STATUS_NOTIFY("drc_status_notify"),
+
+ JOYSTICK_INVALID_NOTIFY("joystick_invalid_notify"),
+
+ FLIGHT_AREAS_SYNC_PROGRESS("flight_areas_sync_progress"),
+
+ FLIGHT_AREAS_DRONE_LOCATION("flight_areas_drone_location"),
+
+ FLIGHT_AREAS_UPDATE("flight_areas_update"),
+
+ ;
+
+ private String code;
+
+ BizCodeEnum(String code) {
+ this.code = code;
+ }
+
+ public String getCode() {
+ return code;
+ }
+}
diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/websocket/service/IWebSocketManageService.java b/dk-modules/sample/src/main/java/org/dromara/sample/websocket/service/IWebSocketManageService.java
new file mode 100644
index 0000000..5030c4a
--- /dev/null
+++ b/dk-modules/sample/src/main/java/org/dromara/sample/websocket/service/IWebSocketManageService.java
@@ -0,0 +1,26 @@
+package org.dromara.sample.websocket.service;
+
+
+
+import org.dromara.sample.websocket.config.MyConcurrentWebSocketSession;
+
+import java.util.Collection;
+
+/**
+ * @author sean
+ * @version 1.0
+ * @date 2022/4/25
+ */
+public interface IWebSocketManageService {
+
+ void put(String key, MyConcurrentWebSocketSession val);
+
+ void remove(String key, String sessionId);
+
+ Collection getValueWithWorkspace(String workspaceId);
+
+ Collection getValueWithWorkspaceAndUserType(String workspaceId, Integer userType);
+
+ Long getConnectedCount();
+
+}
diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/websocket/service/IWebSocketMessageService.java b/dk-modules/sample/src/main/java/org/dromara/sample/websocket/service/IWebSocketMessageService.java
new file mode 100644
index 0000000..6811db1
--- /dev/null
+++ b/dk-modules/sample/src/main/java/org/dromara/sample/websocket/service/IWebSocketMessageService.java
@@ -0,0 +1,33 @@
+package org.dromara.sample.websocket.service;
+
+
+import org.dromara.common.websocket.dto.WebSocketMessageResponse;
+import org.dromara.sample.websocket.config.MyConcurrentWebSocketSession;
+
+import java.util.Collection;
+
+/**
+ * @author sean.zhou
+ * @date 2021/11/24
+ * @version 0.1
+ */
+public interface IWebSocketMessageService {
+
+ /**
+ * Send a message to the specific connection.
+ * @param session A WebSocket connection object
+ * @param message message
+ */
+ void sendMessage(MyConcurrentWebSocketSession session, WebSocketMessageResponse message);
+
+ /**
+ * Send the same message to specific connection.
+ * @param sessions A collection of WebSocket connection objects.
+ * @param message message
+ */
+ void sendBatch(Collection sessions, WebSocketMessageResponse message);
+
+ void sendBatch(String workspaceId, Integer userType, String bizCode, Object data);
+
+ void sendBatch(String workspaceId, String bizCode, Object data);
+}
diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/websocket/service/impl/WebSocketManageServiceImpl.java b/dk-modules/sample/src/main/java/org/dromara/sample/websocket/service/impl/WebSocketManageServiceImpl.java
new file mode 100644
index 0000000..c576b31
--- /dev/null
+++ b/dk-modules/sample/src/main/java/org/dromara/sample/websocket/service/impl/WebSocketManageServiceImpl.java
@@ -0,0 +1,73 @@
+package org.dromara.sample.websocket.service.impl;
+
+import lombok.extern.slf4j.Slf4j;
+import org.dromara.common.redis.config.RedisConst;
+import org.dromara.common.redis.utils.RedisOpsUtils;
+import org.dromara.sample.manage.model.enums.UserTypeEnum;
+import org.dromara.sample.websocket.config.MyConcurrentWebSocketSession;
+import org.dromara.sample.websocket.service.IWebSocketManageService;
+import org.springframework.stereotype.Service;
+import org.springframework.util.StringUtils;
+
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Objects;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.stream.Collectors;
+
+/**
+ * @author sean
+ * @version 1.0
+ * @date 2022/4/25
+ */
+@Slf4j
+@Service
+public class WebSocketManageServiceImpl implements IWebSocketManageService {
+
+ private static final ConcurrentHashMap SESSIONS = new ConcurrentHashMap<>(16);
+
+ @Override
+ public void put(String key, MyConcurrentWebSocketSession val) {
+ String[] name = key.split("/");
+ String workspaceKey = RedisConst.WEBSOCKET_PREFIX;
+ RedisOpsUtils.hashSet(workspaceKey, name[0], name[0]);
+ SESSIONS.put(name[0], val);
+ RedisOpsUtils.expireKey(workspaceKey, RedisConst.WEBSOCKET_ALIVE_SECOND);
+ }
+
+ @Override
+ public void remove(String key, String sessionId) {
+ String[] name = key.split("/");
+ RedisOpsUtils.hashDel(RedisConst.WEBSOCKET_PREFIX , name);
+ SESSIONS.remove(name[0]);
+ }
+
+ @Override
+ public Collection getValueWithWorkspace(String workspaceId) {
+ if (!StringUtils.hasText(workspaceId)) {
+ return Collections.emptySet();
+ }
+ String key = RedisConst.WEBSOCKET_PREFIX;
+
+ return RedisOpsUtils.hashKeys(key)
+ .stream()
+ .map(SESSIONS::get)
+ .filter(Objects::nonNull)
+ .collect(Collectors.toSet());
+ }
+
+ @Override
+ public Collection getValueWithWorkspaceAndUserType(String workspaceId, Integer userType) {
+ String key = RedisConst.WEBSOCKET_PREFIX;
+ return RedisOpsUtils.hashKeys(key)
+ .stream()
+ .map(SESSIONS::get)
+ .filter(getValueWithWorkspace(workspaceId)::contains)
+ .collect(Collectors.toSet());
+ }
+
+ @Override
+ public Long getConnectedCount() {
+ return SESSIONS.mappingCount();
+ }
+}
diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/websocket/service/impl/WebSocketMessageServiceImpl.java b/dk-modules/sample/src/main/java/org/dromara/sample/websocket/service/impl/WebSocketMessageServiceImpl.java
new file mode 100644
index 0000000..437d579
--- /dev/null
+++ b/dk-modules/sample/src/main/java/org/dromara/sample/websocket/service/impl/WebSocketMessageServiceImpl.java
@@ -0,0 +1,99 @@
+package org.dromara.sample.websocket.service.impl;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import lombok.extern.slf4j.Slf4j;
+import org.dromara.common.websocket.dto.WebSocketMessageResponse;
+import org.dromara.sample.websocket.config.MyConcurrentWebSocketSession;
+import org.dromara.sample.websocket.service.IWebSocketManageService;
+import org.dromara.sample.websocket.service.IWebSocketMessageService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.util.StringUtils;
+import org.springframework.web.socket.TextMessage;
+
+import java.io.IOException;
+import java.util.Collection;
+import java.util.Objects;
+
+/**
+ * @author sean.zhou
+ * @version 0.1
+ * @date 2021/11/24
+ */
+@Service
+@Slf4j
+public class WebSocketMessageServiceImpl implements IWebSocketMessageService {
+
+ @Autowired
+ private ObjectMapper mapper;
+
+ @Autowired
+ private IWebSocketManageService webSocketManageService;
+
+ @Override
+ public void sendMessage(MyConcurrentWebSocketSession session, WebSocketMessageResponse message) {
+ if (session == null) {
+ return;
+ }
+
+ try {
+ if (!session.isOpen()) {
+ session.close();
+ log.debug("This session is closed.");
+ return;
+ }
+
+
+ session.sendMessage(new TextMessage(mapper.writeValueAsBytes(message)));
+ } catch (IOException e) {
+ log.info("Failed to publish the message. {}", message.toString());
+ e.printStackTrace();
+ }
+ }
+
+ @Override
+ public void sendBatch(Collection sessions, WebSocketMessageResponse message) {
+ if (sessions.isEmpty()) {
+ return;
+ }
+
+ try {
+
+ TextMessage data = new TextMessage(mapper.writeValueAsBytes(message));
+
+ for (MyConcurrentWebSocketSession session : sessions) {
+ if (!session.isOpen()) {
+ session.close();
+ log.debug("This session is closed.");
+ return;
+ }
+ session.sendMessage(data);
+ }
+
+ } catch (IOException e) {
+ log.info("Failed to publish the message. {}", message.toString());
+
+ e.printStackTrace();
+ }
+ }
+
+ @Override
+ public void sendBatch(String workspaceId, Integer userType, String bizCode, Object data) {
+ if (!StringUtils.hasText(workspaceId)) {
+ throw new RuntimeException("工作区ID不存在。");
+ }
+ Collection sessions = Objects.isNull(userType) ?
+ webSocketManageService.getValueWithWorkspace(workspaceId) :
+ webSocketManageService.getValueWithWorkspaceAndUserType(workspaceId, userType);
+
+ this.sendBatch(sessions, new WebSocketMessageResponse()
+ .setData(Objects.requireNonNullElse(data, ""))
+ .setTimestamp(System.currentTimeMillis())
+ .setBizCode(bizCode));
+ }
+
+ @Override
+ public void sendBatch(String workspaceId, String bizCode, Object data) {
+ this.sendBatch(workspaceId, null, bizCode, data);
+ }
+}
diff --git a/dk-visual/nacos/src/main/resources/application.properties b/dk-visual/nacos/src/main/resources/application.properties
index 44fe8a3..431e2e7 100644
--- a/dk-visual/nacos/src/main/resources/application.properties
+++ b/dk-visual/nacos/src/main/resources/application.properties
@@ -40,9 +40,9 @@ spring.sql.init.platform=mysql
db.num=1
### Connect URL of DB:
-db.url.0=jdbc:mysql://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.password.0=dkcy@yf
+db.password.0=123456
### the maximum retry times for push
nacos.config.push.maxRetryTime=50
diff --git a/pom.xml b/pom.xml
index 7555b9f..eca3ddd 100644
--- a/pom.xml
+++ b/pom.xml
@@ -82,10 +82,10 @@
- dev
+ wuyuan
- dev
+ wuyuan
127.0.0.1:8848
DEFAULT_GROUP
DEFAULT_GROUP