From d466b1394fd97ec0a51ca0e9f56d5087ec2c52d6 Mon Sep 17 00:00:00 2001 From: yq183 <645046984@qq.com> Date: Sun, 30 Mar 2025 10:57:33 +0800 Subject: [PATCH 01/12] =?UTF-8?q?=E6=8F=90=E4=BA=A4=EF=BC=9A=E9=A2=84?= =?UTF-8?q?=E8=AD=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dromara/business/api/RemoteBusinessAlertService.java | 2 +- .../business/controller/BusinessTaskController.java | 4 ++++ .../java/org/dromara/business/domain/BusinessAlert.java | 2 +- .../org/dromara/business/domain/vo/BusinessTaskVo.java | 3 ++- .../business/dubbo/RemoteBusinessAlertServiceImpl.java | 4 ++-- .../dromara/business/service/IBusinessAlertService.java | 5 +++-- .../org/dromara/business/service/IBusinessTaskService.java | 2 ++ .../business/service/impl/BusinessAlertServiceImpl.java | 7 ++++--- .../business/service/impl/BusinessTaskServiceImpl.java | 3 ++- .../sample/wayline/service/impl/AiCompareServiceImpl.java | 7 ++----- 10 files changed, 23 insertions(+), 16 deletions(-) diff --git a/dk-api/api-business/src/main/java/org/dromara/business/api/RemoteBusinessAlertService.java b/dk-api/api-business/src/main/java/org/dromara/business/api/RemoteBusinessAlertService.java index eb14684..9597fd3 100644 --- a/dk-api/api-business/src/main/java/org/dromara/business/api/RemoteBusinessAlertService.java +++ b/dk-api/api-business/src/main/java/org/dromara/business/api/RemoteBusinessAlertService.java @@ -16,7 +16,7 @@ public interface RemoteBusinessAlertService { /** * 生成预警,待验证状态 */ - void saveBusinessAlert(RemoteBusinessAlertBo businessAlertBo); + Boolean saveBusinessAlert(List alertVoList); /** * 更新此条预警审批时候的状态 * @param businessId 业务id(预警、工单) 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 54ea506..9c5d103 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 @@ -29,7 +29,7 @@ public class BusinessAlert extends BaseEntity { /** * */ - @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 f8f2965..0617d2e 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/dubbo/RemoteBusinessAlertServiceImpl.java b/dk-modules/business/src/main/java/org/dromara/business/dubbo/RemoteBusinessAlertServiceImpl.java index 18b80c3..bd8b33f 100644 --- a/dk-modules/business/src/main/java/org/dromara/business/dubbo/RemoteBusinessAlertServiceImpl.java +++ b/dk-modules/business/src/main/java/org/dromara/business/dubbo/RemoteBusinessAlertServiceImpl.java @@ -27,8 +27,8 @@ public class RemoteBusinessAlertServiceImpl implements RemoteBusinessAlertServic @Override - public void saveBusinessAlert(RemoteBusinessAlertBo businessAlertBo) { - + public Boolean saveBusinessAlert(List alertVoList) { + return businessAlertService.batchAddBusinessAlert(alertVoList); } /** diff --git a/dk-modules/business/src/main/java/org/dromara/business/service/IBusinessAlertService.java b/dk-modules/business/src/main/java/org/dromara/business/service/IBusinessAlertService.java index b7329bc..da4eada 100644 --- a/dk-modules/business/src/main/java/org/dromara/business/service/IBusinessAlertService.java +++ b/dk-modules/business/src/main/java/org/dromara/business/service/IBusinessAlertService.java @@ -1,6 +1,7 @@ package org.dromara.business.service; import org.dromara.business.api.domain.bo.RemoteBusinessAlertBo; +import org.dromara.business.api.domain.vo.RemoteBusinessAlertVo; import org.dromara.business.domain.BusinessAlert; import org.dromara.business.domain.bo.BusinessAlertBo; import org.dromara.business.domain.vo.BusinessAlertVo; @@ -38,10 +39,10 @@ public interface IBusinessAlertService { /** * 批量新增预警任务 * - * @param alertList 预警任务 + * @param alertVoList 预警任务 * @return 是否新增成功 */ - Boolean batchAddBusinessAlert(List alertList); + Boolean batchAddBusinessAlert(List alertVoList); /** * 修改预警任务 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/BusinessAlertServiceImpl.java b/dk-modules/business/src/main/java/org/dromara/business/service/impl/BusinessAlertServiceImpl.java index 7a1942f..9aeab15 100644 --- a/dk-modules/business/src/main/java/org/dromara/business/service/impl/BusinessAlertServiceImpl.java +++ b/dk-modules/business/src/main/java/org/dromara/business/service/impl/BusinessAlertServiceImpl.java @@ -70,12 +70,13 @@ public class BusinessAlertServiceImpl implements IBusinessAlertService { /** * 批量添加 - * @param alertList 预警任务 + * @param alertVoList 预警任务 * @return */ @Override - public Boolean batchAddBusinessAlert(List alertList) { - return this.baseMapper.insertBatch(alertList); + public Boolean batchAddBusinessAlert(List alertVoList) { + List businessAlerts = MapstructUtils.convert(alertVoList, BusinessAlert.class); + return this.baseMapper.insertBatch(businessAlerts); } /** 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..bc36d80 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 ; } /** diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/impl/AiCompareServiceImpl.java b/dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/impl/AiCompareServiceImpl.java index 18f6f60..a5f6fe8 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/impl/AiCompareServiceImpl.java +++ b/dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/impl/AiCompareServiceImpl.java @@ -221,12 +221,9 @@ public class AiCompareServiceImpl implements IAiCompareService { @Override public Boolean alert(Mapmap) { - - System.out.println(map); AiCompareAlertDTO compareAlertDTO = Convert.convert(AiCompareAlertDTO.class,map); - RemoteBusinessAlertBo businessAlertBo=new RemoteBusinessAlertBo(); - businessAlertService.saveBusinessAlert(businessAlertBo); - return null; + List handleList = compareAlertDTO.getHandleList(); + return businessAlertService.saveBusinessAlert(handleList); } @Override From 9096bfd65e07281ddbaed90797a44dc9981c6e50 Mon Sep 17 00:00:00 2001 From: wuyuan <15505152113@163.com> Date: Sun, 30 Mar 2025 11:26:40 +0800 Subject: [PATCH 02/12] websocket --- .../device/AirConditionerStateEnum.java | 14 ++- .../device/api/AbstractDeviceService.java | 15 +++ .../PsdkFloatingWindowTextPsdk.java | 48 +++++++ .../api/AbstractInterconnectionService.java | 13 +- .../cloudapi/livestream/VideoTypeEnum.java | 2 +- .../common/sdk/cloudapi/psdk/PsdkSpeaker.java | 104 +++++++++++++++ .../sdk/cloudapi/psdk/PsdkUiResource.java | 56 +++++++++ .../sdk/cloudapi/psdk/PsdkWidgetValue.java | 119 ++++++++++++++++++ .../sdk/cloudapi/psdk/PsdkWidgetValues.java | 39 ++++++ .../wayline/api/AbstractWaylineService.java | 2 +- .../dromara/common/sdk/mqtt/ChannelName.java | 8 ++ .../sdk/mqtt/events/EventsMethodEnum.java | 5 + .../sdk/mqtt/state/DockStateDataKeyEnum.java | 5 + .../sdk/mqtt/state/StateDataKeyEnum.java | 7 ++ dk-modules/sample/pom.xml | 22 ++++ .../service/impl/ControlServiceImpl.java | 3 + .../service/impl/InterconnectionService.java | 26 ++++ .../manage/service/impl/SDKDeviceService.java | 12 ++ .../impl/FlightAreaFileServiceImpl.java | 5 +- .../service/impl/FlightAreaServiceImpl.java | 6 + .../service/impl/FlightTaskServiceImpl.java | 5 + .../service/impl/WaylineFileServiceImpl.java | 1 + .../src/main/resources/application.properties | 4 +- .../testrocketmq/RocketMQApplication.java | 25 ---- .../testrocketmq/config/ConsumerConfig.java | 64 ---------- .../testrocketmq/config/MessageConfig.java | 27 ---- .../testrocketmq/config/ProducerConfig.java | 48 ------- .../consumer/RocketMsgListener.java | 100 --------------- .../testrocketmq/enums/MessageCodeEnum.java | 60 --------- .../testrocketmq/model/ConsumerMode.java | 22 ---- .../testrocketmq/model/ProducerMode.java | 25 ---- .../testrocketmq/producer/AsyncProducer.java | 47 ------- .../producer/ConsumeException.java | 20 --- .../testrocketmq/producer/MessageContext.java | 34 ----- .../producer/MessageProducer.java | 110 ---------------- 35 files changed, 510 insertions(+), 593 deletions(-) create mode 100644 dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/interconnection/PsdkFloatingWindowTextPsdk.java create mode 100644 dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/psdk/PsdkSpeaker.java create mode 100644 dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/psdk/PsdkUiResource.java create mode 100644 dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/psdk/PsdkWidgetValue.java create mode 100644 dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/psdk/PsdkWidgetValues.java create mode 100644 dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/InterconnectionService.java delete mode 100644 dk-visual/rocketmq/src/test/java/com/ruoyi/testrocketmq/RocketMQApplication.java delete mode 100644 dk-visual/rocketmq/src/test/java/com/ruoyi/testrocketmq/config/ConsumerConfig.java delete mode 100644 dk-visual/rocketmq/src/test/java/com/ruoyi/testrocketmq/config/MessageConfig.java delete mode 100644 dk-visual/rocketmq/src/test/java/com/ruoyi/testrocketmq/config/ProducerConfig.java delete mode 100644 dk-visual/rocketmq/src/test/java/com/ruoyi/testrocketmq/consumer/RocketMsgListener.java delete mode 100644 dk-visual/rocketmq/src/test/java/com/ruoyi/testrocketmq/enums/MessageCodeEnum.java delete mode 100644 dk-visual/rocketmq/src/test/java/com/ruoyi/testrocketmq/model/ConsumerMode.java delete mode 100644 dk-visual/rocketmq/src/test/java/com/ruoyi/testrocketmq/model/ProducerMode.java delete mode 100644 dk-visual/rocketmq/src/test/java/com/ruoyi/testrocketmq/producer/AsyncProducer.java delete mode 100644 dk-visual/rocketmq/src/test/java/com/ruoyi/testrocketmq/producer/ConsumeException.java delete mode 100644 dk-visual/rocketmq/src/test/java/com/ruoyi/testrocketmq/producer/MessageContext.java delete mode 100644 dk-visual/rocketmq/src/test/java/com/ruoyi/testrocketmq/producer/MessageProducer.java 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..39a2ad2 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,9 @@ 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), ; 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-modules/sample/pom.xml b/dk-modules/sample/pom.xml index 4548b5d..bd050ec 100644 --- a/dk-modules/sample/pom.xml +++ b/dk-modules/sample/pom.xml @@ -131,6 +131,28 @@ aws-java-sdk-sts 1.12.261 + + org.springframework.boot + spring-boot-starter + + + ${project.artifactId} + + + org.springframework.boot + spring-boot-maven-plugin + ${spring-boot.version} + + + + repackage + + + + + + + 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/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..d974a41 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 @@ -171,6 +171,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); } @@ -296,6 +299,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/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/WaylineFileServiceImpl.java b/dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/impl/WaylineFileServiceImpl.java index d228af7..0ed105b 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 @@ -198,6 +198,7 @@ public class WaylineFileServiceImpl implements IWaylineFileService { OssClient storage = OssFactory.instance("waylinefile"); String originalfileName = file.getOriginalFilename(); String suffix = org.apache.commons.lang3.StringUtils.substring(originalfileName, originalfileName.lastIndexOf("."), originalfileName.length()); + suffix = "waylinefile/"+suffix; UploadResult uploadResult = storage.uploadSuffix(file.getBytes(), suffix, file.getContentType()); waylineFile.setObjectKey(uploadResult.getFilename()); List deviceSns = new ArrayList<>(); 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/dk-visual/rocketmq/src/test/java/com/ruoyi/testrocketmq/RocketMQApplication.java b/dk-visual/rocketmq/src/test/java/com/ruoyi/testrocketmq/RocketMQApplication.java deleted file mode 100644 index 4ec745a..0000000 --- a/dk-visual/rocketmq/src/test/java/com/ruoyi/testrocketmq/RocketMQApplication.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.ruoyi.testrocketmq; - -import com.ruoyi.common.security.annotation.EnableCustomConfig; -import com.ruoyi.common.security.annotation.EnableRyFeignClients; -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.scheduling.annotation.EnableAsync; - -/** - * 平台管理模块 - * - * @author ruoyi - */ -@EnableCustomConfig -@EnableRyFeignClients -@SpringBootApplication -@EnableAsync -public class RocketMQApplication -{ - public static void main(String[] args) - { - SpringApplication.run(RocketMQApplication.class, args); - System.out.println("(♥◠‿◠)ノ゙ RocketMQ模块启动成功 ლ(´ڡ`ლ)゙"); - } -} diff --git a/dk-visual/rocketmq/src/test/java/com/ruoyi/testrocketmq/config/ConsumerConfig.java b/dk-visual/rocketmq/src/test/java/com/ruoyi/testrocketmq/config/ConsumerConfig.java deleted file mode 100644 index 38ebbae..0000000 --- a/dk-visual/rocketmq/src/test/java/com/ruoyi/testrocketmq/config/ConsumerConfig.java +++ /dev/null @@ -1,64 +0,0 @@ -package com.ruoyi.testrocketmq.config; - -import com.ruoyi.testrocketmq.consumer.RocketMsgListener; -import com.ruoyi.testrocketmq.enums.MessageCodeEnum; -import com.ruoyi.testrocketmq.model.ConsumerMode; -import lombok.extern.slf4j.Slf4j; -import org.apache.rocketmq.client.consumer.DefaultMQPushConsumer; -import org.apache.rocketmq.client.exception.MQClientException; -import org.apache.rocketmq.common.consumer.ConsumeFromWhere; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.cloud.context.config.annotation.RefreshScope; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -/** - * 消费者配置 - */ -@RefreshScope -@Configuration -@Slf4j -public class ConsumerConfig { - @Autowired - private ConsumerMode consumerMode; - - @Bean - public DefaultMQPushConsumer getRocketMQConsumer() throws MQClientException { -// ConsumerMode consumerMode = new ConsumerMode(); - DefaultMQPushConsumer consumer = new DefaultMQPushConsumer(consumerMode.getGroupName()); - consumer.setNamesrvAddr(consumerMode.getNamesrvAddr()); - consumer.setConsumeThreadMin(consumerMode.getConsumeThreadMin()); - consumer.setConsumeThreadMax(consumerMode.getConsumeThreadMax()); - consumer.registerMessageListener(new RocketMsgListener()); - /** - * 1. CONSUME_FROM_LAST_OFFSET:第一次启动从队列最后位置消费,后续再启动接着上次消费的进度开始消费 - * 2. CONSUME_FROM_FIRST_OFFSET:第一次启动从队列初始位置消费,后续再启动接着上次消费的进度开始消费 - * 3. CONSUME_FROM_TIMESTAMP:第一次启动从指定时间点位置消费,后续再启动接着上次消费的进度开始消费 - * 以上所说的第一次启动是指从来没有消费过的消费者,如果该消费者消费过,那么会在broker端记录该消费者的消费位置,如果该消费者挂了再启动,那么自动从上次消费的进度开始 - */ - consumer.setConsumeFromWhere(ConsumeFromWhere.CONSUME_FROM_LAST_OFFSET); - /** - * CLUSTERING (集群模式) :默认模式,同一个ConsumerGroup(groupName相同)每个consumer只消费所订阅消息的一部分内容,同一个ConsumerGroup里所有的Consumer消息加起来才是所 - * 订阅topic整体,从而达到负载均衡的目的 - * BROADCASTING (广播模式) :同一个ConsumerGroup每个consumer都消费到所订阅topic所有消息,也就是一个消费会被多次分发,被多个consumer消费。 - * - */ - // consumer.setMessageModel(MessageModel.BROADCASTING); - - consumer.setVipChannelEnabled(false); - consumer.setConsumeMessageBatchMaxSize(consumerMode.getConsumeMessageBatchMaxSize()); - try { - /** - * 订阅topic,可以对指定消息进行过滤,例如:"TopicTest","tagl||tag2||tag3",*或null表示topic所有消息 - */ - consumer.subscribe(MessageCodeEnum.ORDER_MESSAGE.getCode(),"*"); - consumer.subscribe(MessageCodeEnum.USER_MESSAGE.getCode(),"*"); - consumer.start(); - log.info("消费者初始化成功:{}", consumer.toString()); - } catch (MQClientException e) { - e.printStackTrace(); - log.error("消费者初始化失败:{}",e.getMessage()); - } - return consumer; - } -} diff --git a/dk-visual/rocketmq/src/test/java/com/ruoyi/testrocketmq/config/MessageConfig.java b/dk-visual/rocketmq/src/test/java/com/ruoyi/testrocketmq/config/MessageConfig.java deleted file mode 100644 index 1d4b56e..0000000 --- a/dk-visual/rocketmq/src/test/java/com/ruoyi/testrocketmq/config/MessageConfig.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.ruoyi.testrocketmq.config; - -/** - * @author yz - */ -public class MessageConfig { - private Class messageClass; - private boolean orderlyMessage; - - public Class getMessageClass() { - return messageClass; - } - - public void setMessageClass(Class messageClass) { - this.messageClass = messageClass; - } - - public boolean isOrderlyMessage() { - return orderlyMessage; - } - - public void setOrderlyMessage(boolean orderlyMessage) { - this.orderlyMessage = orderlyMessage; - } - - -} diff --git a/dk-visual/rocketmq/src/test/java/com/ruoyi/testrocketmq/config/ProducerConfig.java b/dk-visual/rocketmq/src/test/java/com/ruoyi/testrocketmq/config/ProducerConfig.java deleted file mode 100644 index b55917e..0000000 --- a/dk-visual/rocketmq/src/test/java/com/ruoyi/testrocketmq/config/ProducerConfig.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.ruoyi.testrocketmq.config; - -import com.ruoyi.testrocketmq.model.ProducerMode; -import lombok.extern.slf4j.Slf4j; -import org.apache.rocketmq.client.exception.MQClientException; -import org.apache.rocketmq.client.producer.DefaultMQProducer; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - - -@Configuration -@Slf4j -public class ProducerConfig { - - public static DefaultMQProducer producer; - - @Autowired - private ProducerMode producerMode; - - - - @Bean - public DefaultMQProducer getRocketMQProducer() { - producer = new DefaultMQProducer(producerMode.getGroupName()); - producer.setNamesrvAddr(producerMode.getNamesrvAddr()); - //如果需要同一个jvm中不同的producer往不同的mq集群发送消息,需要设置不同的instanceName - if(producerMode.getMaxMessageSize()!=null){ - producer.setMaxMessageSize(producerMode.getMaxMessageSize()); - } - if(producerMode.getSendMsgTimeout()!=null){ - producer.setSendMsgTimeout(producerMode.getSendMsgTimeout()); - } - //如果发送消息失败,设置重试次数,默认为2次 - if(producerMode.getRetryTimesWhenSendFailed()!=null){ - producer.setRetryTimesWhenSendFailed(producerMode.getRetryTimesWhenSendFailed()); - } - producer.setVipChannelEnabled(false); - try { - producer.start(); - log.info("生产者初始化成功:{}",producer.toString()); - } catch (MQClientException e) { - log.error("生产者初始化失败:{}",e.getMessage()); - } - return producer; - } - -} diff --git a/dk-visual/rocketmq/src/test/java/com/ruoyi/testrocketmq/consumer/RocketMsgListener.java b/dk-visual/rocketmq/src/test/java/com/ruoyi/testrocketmq/consumer/RocketMsgListener.java deleted file mode 100644 index 88d2b05..0000000 --- a/dk-visual/rocketmq/src/test/java/com/ruoyi/testrocketmq/consumer/RocketMsgListener.java +++ /dev/null @@ -1,100 +0,0 @@ -package com.ruoyi.testrocketmq.consumer; - -import com.ruoyi.testrocketmq.enums.MessageCodeEnum; -import com.ruoyi.testrocketmq.producer.ConsumeException; -import lombok.extern.slf4j.Slf4j; -import org.apache.rocketmq.client.consumer.listener.ConsumeConcurrentlyContext; -import org.apache.rocketmq.client.consumer.listener.ConsumeConcurrentlyStatus; -import org.apache.rocketmq.client.consumer.listener.MessageListenerConcurrently; -import org.apache.rocketmq.common.message.MessageExt; -import org.springframework.stereotype.Component; -import org.springframework.util.CollectionUtils; - -import java.io.UnsupportedEncodingException; -import java.text.DateFormat; -import java.text.SimpleDateFormat; -import java.util.Date; -import java.util.List; - -/** - * 消息监听 - */ -@Slf4j -@Component -public class RocketMsgListener implements MessageListenerConcurrently { - - /** - * 消费消息 - * - * @param list msgs.size() >= 1 - * DefaultMQPushConsumer.consumeMessageBatchMaxSize=1,you can modify here - * 这里只设置为1,当设置为多个时,list中只要有一条消息消费失败,就会整体重试 - * @param consumeConcurrentlyContext 上下文信息 - * @return 消费状态 成功(CONSUME_SUCCESS)或者 重试 (RECONSUME_LATER) - */ - @Override - public ConsumeConcurrentlyStatus consumeMessage(List list, ConsumeConcurrentlyContext consumeConcurrentlyContext) { - - if (!CollectionUtils.isEmpty(list)) { - for (MessageExt messageExt : list) { - // 消息内容 - String body = new String(messageExt.getBody()); - log.info("接受到的消息为:{}", body); - String tags = messageExt.getTags(); - String topic = messageExt.getTopic(); - String msgId = messageExt.getMsgId(); - String keys = messageExt.getKeys(); - int reConsume = messageExt.getReconsumeTimes(); - // 消息已经重试了3次,如果不需要再次消费,则返回成功 - if (reConsume == 3) { - // TODO 补偿信息 - //smsLogService.insertLog(topic, tags, msgId, keys, body, "【" + EnumUtil.getStrMsgByCode(tags, TagsCodeEnum.class) + "】消费失败"); - log.error("消息重试超过3次,消费失败!"); - return ConsumeConcurrentlyStatus.CONSUME_SUCCESS; - } - // 订单超时处理 - if (MessageCodeEnum.ORDER_MESSAGE.getCode().equals(topic)) { - if (MessageCodeEnum.ORDER_TIMEOUT_TAG.getCode().equals(tags)) { -// //获取订单 -// DealUserOrder dealUserOrder = pcRemoteDealUserOrderService.selectDealUserOrderByOrderNumber(keys); -// if (dealUserOrder != null) { -// //订单状态超时未支付关闭订单 处理 -// if (dealUserOrder.getStatus().equals("1")) { -// DealUserOrder dealUserOrders = new DealUserOrder(); -// dealUserOrders.setOrderId(dealUserOrder.getOrderId()); -// dealUserOrders.setStatus("4"); -// pcRemoteDealUserOrderService.updateDealUserOrder(dealUserOrders); -// return ConsumeConcurrentlyStatus.CONSUME_SUCCESS; -// } -// log.info("Order does not exist."); -// } - log.info("Consumption success:" + body); - DateFormat format =new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - log.info("Consumption time:{}", format.format(new Date())); - } else { - log.info("未匹配到Tag【{}】" + tags); - } - } - } - } - // 消息消费成功 - //ConsumeConcurrentlyStatus.RECONSUME_LATER broker会根据设置的messageDelayLevel发起重试,默认16次 - return ConsumeConcurrentlyStatus.CONSUME_SUCCESS; - } - - /** - * 异常处理 - * - * @param e 捕获的异常 - * @return 消息消费结果 - */ - private static ConsumeConcurrentlyStatus handleException(final Exception e) { - Class exceptionClass = e.getClass(); - if (exceptionClass.equals(UnsupportedEncodingException.class)) { - log.error(e.getMessage()); - } else if (exceptionClass.equals(ConsumeException.class)) { - log.error(e.getMessage()); - } - return ConsumeConcurrentlyStatus.RECONSUME_LATER; - } -} diff --git a/dk-visual/rocketmq/src/test/java/com/ruoyi/testrocketmq/enums/MessageCodeEnum.java b/dk-visual/rocketmq/src/test/java/com/ruoyi/testrocketmq/enums/MessageCodeEnum.java deleted file mode 100644 index e6ff8c4..0000000 --- a/dk-visual/rocketmq/src/test/java/com/ruoyi/testrocketmq/enums/MessageCodeEnum.java +++ /dev/null @@ -1,60 +0,0 @@ -package com.ruoyi.testrocketmq.enums; - - -import lombok.Getter; - -@Getter -public enum MessageCodeEnum { - /** - * 消息模块主题 - */ - MESSAGE_TOPIC("elink-message","消息服务模块topic名称"), - /** - * 系统消息 - */ - NOTE_MESSAGE("system-message","系统消息服务模块topic名称"), - /** - * 用户消息 - */ - USER_MESSAGE("user-message","用户消息服务模块topic名称"), - - /** - * 订单消息 - */ - ORDER_MESSAGE("order-message","订单消息服务模块topic名称"), - - /** - * 平台编号 - */ - USER_MESSAGE_TAG("user_message_tag","用户消息推送"), - NOTE_MESSAGE_TAG("system_message_tag","系统消息推送"), - ORDER_MESSAGE_TAG("order_message_tag","订单消息推送"), - - /** - * 订单处理编号 - */ - //订单超时处理 - ORDER_TIMEOUT_TAG("order_timeout_tag","订单超时处理"); - - - private final String code; - private final String msg; - - MessageCodeEnum(String code, String msg){ - this.code = code; - this.msg = msg; - } - - public static String valuesOfType(String code) { - String value = ""; - for (MessageCodeEnum e : MessageCodeEnum.values()) { - if (code.equals(e.code)) { - value = e.msg; - } - - } - return value; - } - - -} diff --git a/dk-visual/rocketmq/src/test/java/com/ruoyi/testrocketmq/model/ConsumerMode.java b/dk-visual/rocketmq/src/test/java/com/ruoyi/testrocketmq/model/ConsumerMode.java deleted file mode 100644 index e66738a..0000000 --- a/dk-visual/rocketmq/src/test/java/com/ruoyi/testrocketmq/model/ConsumerMode.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.ruoyi.testrocketmq.model; - -import lombok.Data; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Configuration; -import org.springframework.stereotype.Component; - -@Data -@Configuration -@Component -public class ConsumerMode { - @Value("${suning.rocketmq.namesrvAddr}") - private String namesrvAddr; - @Value("${suning.rocketmq.conumer.groupName}") - private String groupName ; - @Value("${suning.rocketmq.conumer.consumeThreadMin}") - private int consumeThreadMin; - @Value("${suning.rocketmq.conumer.consumeThreadMax}") - private int consumeThreadMax; - @Value("${suning.rocketmq.conumer.consumeMessageBatchMaxSize}") - private int consumeMessageBatchMaxSize; -} diff --git a/dk-visual/rocketmq/src/test/java/com/ruoyi/testrocketmq/model/ProducerMode.java b/dk-visual/rocketmq/src/test/java/com/ruoyi/testrocketmq/model/ProducerMode.java deleted file mode 100644 index 0cd4060..0000000 --- a/dk-visual/rocketmq/src/test/java/com/ruoyi/testrocketmq/model/ProducerMode.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.ruoyi.testrocketmq.model; - -import lombok.Data; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.cloud.context.config.annotation.RefreshScope; -import org.springframework.context.annotation.Configuration; - -/** - * 生产者初始化 - */ -@RefreshScope -@Data -@Configuration -public class ProducerMode { - @Value("${suning.rocketmq.producer.groupName}") - private String groupName; - @Value("${suning.rocketmq.namesrvAddr}") - private String namesrvAddr; - @Value("${suning.rocketmq.producer.maxMessageSize}") - private Integer maxMessageSize; - @Value("${suning.rocketmq.producer.sendMsgTimeout}") - private Integer sendMsgTimeout; - @Value("${suning.rocketmq.producer.retryTimesWhenSendFailed}") - private Integer retryTimesWhenSendFailed; -} diff --git a/dk-visual/rocketmq/src/test/java/com/ruoyi/testrocketmq/producer/AsyncProducer.java b/dk-visual/rocketmq/src/test/java/com/ruoyi/testrocketmq/producer/AsyncProducer.java deleted file mode 100644 index 86ed05c..0000000 --- a/dk-visual/rocketmq/src/test/java/com/ruoyi/testrocketmq/producer/AsyncProducer.java +++ /dev/null @@ -1,47 +0,0 @@ -package com.ruoyi.testrocketmq.producer; - -import com.ruoyi.testrocketmq.config.ProducerConfig; -import org.springframework.beans.factory.annotation.Autowired; - -public class AsyncProducer { - - @Autowired - private ProducerConfig producerConfig; - - /** - * 发送异步的消息 - * @param topic 主题 - * @param tag 标签 - * @param key 自定义的key,根据业务来定 - * @param value 消息的内容 - * @return org.apache.rocketmq.client.producer.SendResult - */ -// public SendResult sendAsyncProducerMessage(String topic, String tag, String key, String value) throws UnsupportedEncodingException { -// -// try { -// DefaultMQProducer defaultMQProducer = producerConfig.producer; -// //Create a message instance, specifying topic, tag and message body. -// Message msg = new Message(topic, tag, key,value.getBytes(RemotingHelper.DEFAULT_CHARSET)); -// defaultMQProducer.send(msg, new SendCallback() { -// // 异步回调的处理 -// @Override -// public void onSuccess(SendResult sendResult) { -// System.out.printf("%-10d 异步发送消息成功 %s %n", msg, sendResult.getMsgId()); -// } -// -// @Override -// public void onException(Throwable e) { -// System.out.printf("%-10d 异步发送消息失败 %s %n", msg, e); -// e.printStackTrace(); -// } -// }); -// } catch (MQClientException e) { -// e.printStackTrace(); -// } catch (RemotingException e) { -// e.printStackTrace(); -// } catch (InterruptedException e) { -// e.printStackTrace(); -// } -// return null; -// } -} diff --git a/dk-visual/rocketmq/src/test/java/com/ruoyi/testrocketmq/producer/ConsumeException.java b/dk-visual/rocketmq/src/test/java/com/ruoyi/testrocketmq/producer/ConsumeException.java deleted file mode 100644 index 82d4314..0000000 --- a/dk-visual/rocketmq/src/test/java/com/ruoyi/testrocketmq/producer/ConsumeException.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.ruoyi.testrocketmq.producer; - -/** - * @author 影子 - */ -public class ConsumeException extends RuntimeException{ - private static final long serialVersionUID = 4093867789628938836L; - - public ConsumeException(String message) { - super(message); - } - - public ConsumeException(Throwable cause) { - super(cause); - } - - public ConsumeException(String message, Throwable cause) { - super(message, cause); - } -} diff --git a/dk-visual/rocketmq/src/test/java/com/ruoyi/testrocketmq/producer/MessageContext.java b/dk-visual/rocketmq/src/test/java/com/ruoyi/testrocketmq/producer/MessageContext.java deleted file mode 100644 index fa6afbe..0000000 --- a/dk-visual/rocketmq/src/test/java/com/ruoyi/testrocketmq/producer/MessageContext.java +++ /dev/null @@ -1,34 +0,0 @@ -package com.ruoyi.testrocketmq.producer; - - - -import lombok.Data; -import lombok.ToString; -import org.apache.rocketmq.common.message.MessageExt; -import org.apache.rocketmq.common.message.MessageQueue; - -/** - * 消费时,当前所消费的消息的上下文信息 - * - * @author jolly - */ -@ToString -@Data -public final class MessageContext { - - /** - * 所消费消息所在的消息队列 - * - * @see MessageQueue - */ - private MessageQueue messageQueue; - - /** - * 所消费的消息的扩展属性 - * - * @see MessageExt - */ - private MessageExt messageExt; - - -} diff --git a/dk-visual/rocketmq/src/test/java/com/ruoyi/testrocketmq/producer/MessageProducer.java b/dk-visual/rocketmq/src/test/java/com/ruoyi/testrocketmq/producer/MessageProducer.java deleted file mode 100644 index 7450530..0000000 --- a/dk-visual/rocketmq/src/test/java/com/ruoyi/testrocketmq/producer/MessageProducer.java +++ /dev/null @@ -1,110 +0,0 @@ -package com.ruoyi.testrocketmq.producer; - -import com.alibaba.fastjson.JSON; -import lombok.extern.slf4j.Slf4j; -import org.apache.rocketmq.client.exception.MQBrokerException; -import org.apache.rocketmq.client.exception.MQClientException; -import org.apache.rocketmq.client.producer.SendResult; -import org.apache.rocketmq.common.message.Message; -import org.apache.rocketmq.remoting.common.RemotingHelper; -import org.apache.rocketmq.remoting.exception.RemotingException; - -import java.io.UnsupportedEncodingException; -import java.text.DateFormat; -import java.text.SimpleDateFormat; -import java.util.Date; -import java.util.List; - -import static com.ruoyi.rocketmq.config.ProducerConfig.producer; - -/** - * 消息发送 - */ -@Slf4j -public class MessageProducer { - - - /** - * 同步发送消息 - * @param topic 主题 - * @param tag 标签 - * @param key 自定义的key,根据业务来定 - * @param value 消息的内容 - * @return org.apache.rocketmq.client.producer.SendResult - */ - public SendResult sendSynchronizeMessage(String topic, String tag, String key, String value){ - String body = "topic:【"+topic+"】, tag:【"+tag+"】, key:【"+key+"】, value:【"+value+"】"; - try { - Message msg = new Message(topic,tag,key, value.getBytes(RemotingHelper.DEFAULT_CHARSET)); - System.out.println("生产者发送消息:"+ JSON.toJSONString(value)); - SendResult result = producer.send(msg); - return result; - } catch (UnsupportedEncodingException e) { - log.error("消息初始化失败!body:{}",body); - - } catch (MQClientException | InterruptedException | RemotingException | MQBrokerException e) { - log.error("消息发送失败! body:{}",body); - } - return null; - } - - - - /** - * 发送有序的消息 - * @param messagesList Message集合 - * @param messageQueueNumber 消息队列编号 - * @return org.apache.rocketmq.client.producer.SendResult - */ - public SendResult sendOrderlyMessage(List messagesList, int messageQueueNumber) { - SendResult result = null; - for (Message message : messagesList) { - try { -// DefaultMQProducer defaultMQProducer = ProducerConfig.producer.send(message); -// System.out.println(defaultMQProducer); - result = producer.send(message, (list, msg, arg) -> { - Integer queueNumber = (Integer) arg; - return list.get(queueNumber); - }, messageQueueNumber); - } catch (MQClientException | RemotingException | MQBrokerException | InterruptedException e) { - log.error("发送有序消息失败"); - return result; - } - } - return result; - } - - /** - * 推送延迟消息 - * @param topic - * @param tag - * @param key - * @return boolean - */ - public SendResult sendDelayMessage(String topic, String tag, String key, String value) - { - SendResult result = null; - try - { - Message msg = new Message(topic,tag,key, value.getBytes(RemotingHelper.DEFAULT_CHARSET)); - //设置消息延迟级别,我这里设置5,对应就是延时一分钟 - // "1s 5s 10s 30s 1m 2m 3m 4m 5m 6m 7m 8m 9m 10m 20m 30m 1h 2h" - msg.setDelayTimeLevel(4); - // 发送消息到一个Broker - result = producer.send(msg); - // 通过sendResult返回消息是否成功送达 - log.info("发送延迟消息结果:======sendResult:{}", result); - DateFormat format =new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - log.info("发送时间:{}", format.format(new Date())); - return result; - } - catch (Exception e) - { - e.printStackTrace(); - log.error("延迟消息队列推送消息异常:{},推送内容:{}", e.getMessage(), result); - } - return result; - } - - -} From de934e6c328340afd94d0b476bdbc473223e37e0 Mon Sep 17 00:00:00 2001 From: yq183 <645046984@qq.com> Date: Sun, 30 Mar 2025 11:39:10 +0800 Subject: [PATCH 03/12] =?UTF-8?q?=E6=8F=90=E4=BA=A4=EF=BC=9Ajob=E6=9F=A5?= =?UTF-8?q?=E8=AF=A2=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dk-api/api-bom/pom.xml | 5 + dk-api/api-sample/pom.xml | 31 ++++++ .../dromara/sample/api/RemoteJobService.java | 19 ++++ .../api/domain/vo/RemoteMediaFileVo.java | 100 ++++++++++++++++++ dk-api/pom.xml | 2 + .../service/impl/BusinessTaskServiceImpl.java | 2 +- dk-modules/sample/pom.xml | 8 ++ .../sample/dubbo/RemoteJobServiceImpl.java | 30 ++++++ .../sample/media/service/IFileService.java | 4 +- .../media/service/impl/FileServiceImpl.java | 8 ++ 10 files changed, 207 insertions(+), 2 deletions(-) create mode 100644 dk-api/api-sample/pom.xml create mode 100644 dk-api/api-sample/src/main/java/org/dromara/sample/api/RemoteJobService.java create mode 100644 dk-api/api-sample/src/main/java/org/dromara/sample/api/domain/vo/RemoteMediaFileVo.java create mode 100644 dk-modules/sample/src/main/java/org/dromara/sample/dubbo/RemoteJobServiceImpl.java diff --git a/dk-api/api-bom/pom.xml b/dk-api/api-bom/pom.xml index 3e6a7b4..9efdd68 100644 --- a/dk-api/api-bom/pom.xml +++ b/dk-api/api-bom/pom.xml @@ -45,6 +45,11 @@ org.dromara 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-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 bc36d80..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 @@ -48,7 +48,7 @@ public class BusinessTaskServiceImpl implements IBusinessTaskService { @Override public BusinessTaskVo queryById(Long id){ BusinessTaskVo businessTaskVo = baseMapper.selectVoById(id); - return ; + return businessTaskVo; } /** diff --git a/dk-modules/sample/pom.xml b/dk-modules/sample/pom.xml index 7249b87..5b8cc62 100644 --- a/dk-modules/sample/pom.xml +++ b/dk-modules/sample/pom.xml @@ -7,6 +7,10 @@ dk-modules ${revision} + pom + + ../../dk-api/api-sample + 4.0.0 sample @@ -103,6 +107,10 @@ org.dromara api-business + + org.dromara + api-sample + org.dromara api-resource diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/dubbo/RemoteJobServiceImpl.java b/dk-modules/sample/src/main/java/org/dromara/sample/dubbo/RemoteJobServiceImpl.java new file mode 100644 index 0000000..42e4da4 --- /dev/null +++ b/dk-modules/sample/src/main/java/org/dromara/sample/dubbo/RemoteJobServiceImpl.java @@ -0,0 +1,30 @@ +package org.dromara.sample.dubbo; + +import lombok.RequiredArgsConstructor; +import org.apache.dubbo.config.annotation.DubboService; +import org.dromara.common.core.utils.MapstructUtils; +import org.dromara.sample.api.RemoteJobService; +import org.dromara.sample.api.domain.vo.RemoteMediaFileVo; +import org.dromara.sample.media.model.MediaFileEntity; +import org.dromara.sample.media.service.IFileService; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * @auther yq + * @data 2025/3/30 + */ +@RequiredArgsConstructor +@Service +@DubboService +public class RemoteJobServiceImpl implements RemoteJobService { + private final IFileService fileService; + + @Override + public List getRemoteMediaFileVo(String jobId, String fileType) { + List remoteMediaFileVo = fileService.getRemoteMediaFileVo(jobId, fileType); + List mediaFileEntities = MapstructUtils.convert(remoteMediaFileVo, RemoteMediaFileVo.class); + return mediaFileEntities; + } +} diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/media/service/IFileService.java b/dk-modules/sample/src/main/java/org/dromara/sample/media/service/IFileService.java index dead30b..71017fc 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/media/service/IFileService.java +++ b/dk-modules/sample/src/main/java/org/dromara/sample/media/service/IFileService.java @@ -3,7 +3,9 @@ package org.dromara.sample.media.service; import org.dromara.common.sdk.cloudapi.media.FlightTask; import org.dromara.common.sdk.cloudapi.media.MediaUploadCallbackRequest; import org.dromara.common.sdk.common.PaginationData; +import org.dromara.sample.api.domain.vo.RemoteMediaFileVo; import org.dromara.sample.media.model.MediaFileDTO; +import org.dromara.sample.media.model.MediaFileEntity; import java.net.URL; import java.util.List; @@ -79,5 +81,5 @@ public interface IFileService { */ URL getObjectUrlOne(String bucket,String pathUrl,Integer seconds); - + List getRemoteMediaFileVo(String jobId, String fileType); } 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 524fa2b..ac32589 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,6 +1,7 @@ package org.dromara.sample.media.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import org.dromara.common.oss.core.OssClient; import org.dromara.common.oss.factory.OssFactory; @@ -10,6 +11,7 @@ import org.dromara.common.sdk.cloudapi.media.MediaSubFileTypeEnum; import org.dromara.common.sdk.cloudapi.media.MediaUploadCallbackRequest; import org.dromara.common.sdk.common.Pagination; import org.dromara.common.sdk.common.PaginationData; +import org.dromara.sample.api.domain.vo.RemoteMediaFileVo; import org.dromara.sample.manage.model.dto.DeviceDictionaryDTO; import org.dromara.sample.manage.service.IDeviceDictionaryService; import org.dromara.sample.media.mapper.IFileMapper; @@ -149,6 +151,12 @@ public class FileServiceImpl implements IFileService { return storage.getPrivateUrlURL(pathUrl,seconds); } + @Override + public List getRemoteMediaFileVo(String jobId, String fileType) { + QueryWrapper wrapper = new QueryWrapper().eq("job_id", jobId).in("file_type", fileType).orderByAsc("file_index"); + return mapper.selectList(wrapper); + } + /** * Convert the received file object into a database entity object. * @param file From 61f983ba536e2449c168980bb745df8545d58b2d Mon Sep 17 00:00:00 2001 From: yq183 <645046984@qq.com> Date: Sun, 30 Mar 2025 11:46:05 +0800 Subject: [PATCH 04/12] =?UTF-8?q?=E6=8F=90=E4=BA=A4;wuyu?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dk-api/api-bom/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dk-api/api-bom/pom.xml b/dk-api/api-bom/pom.xml index 9efdd68..c37882b 100644 --- a/dk-api/api-bom/pom.xml +++ b/dk-api/api-bom/pom.xml @@ -45,7 +45,7 @@ org.dromara api-business ${revision} - · + org.dromara api-sample From 84a856fe55b054b2237dafd7d5c111fef77fca19 Mon Sep 17 00:00:00 2001 From: wuyuan <15505152113@163.com> Date: Sun, 30 Mar 2025 11:51:16 +0800 Subject: [PATCH 05/12] websocket --- dk-modules/sample/pom.xml | 3 --- 1 file changed, 3 deletions(-) diff --git a/dk-modules/sample/pom.xml b/dk-modules/sample/pom.xml index 21a74b7..7c06940 100644 --- a/dk-modules/sample/pom.xml +++ b/dk-modules/sample/pom.xml @@ -8,9 +8,6 @@ ${revision} pom - - ../../dk-api/api-sample - 4.0.0 sample From 6ed0057f3d4b4e2f5a6edd53b91db39a8cfe4dd4 Mon Sep 17 00:00:00 2001 From: yq183 <645046984@qq.com> Date: Sun, 30 Mar 2025 12:26:40 +0800 Subject: [PATCH 06/12] =?UTF-8?q?=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dk-modules/sample/pom.xml | 4 ---- .../java/org/dromara/sample/media/service/IFileService.java | 2 +- .../dromara/sample/media/service/impl/FileServiceImpl.java | 1 - 3 files changed, 1 insertion(+), 6 deletions(-) diff --git a/dk-modules/sample/pom.xml b/dk-modules/sample/pom.xml index 7c06940..83d5fb0 100644 --- a/dk-modules/sample/pom.xml +++ b/dk-modules/sample/pom.xml @@ -104,10 +104,6 @@ org.dromara api-business - - org.dromara - api-sample - org.dromara api-resource diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/media/service/IFileService.java b/dk-modules/sample/src/main/java/org/dromara/sample/media/service/IFileService.java index 71017fc..1553d8b 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/media/service/IFileService.java +++ b/dk-modules/sample/src/main/java/org/dromara/sample/media/service/IFileService.java @@ -3,7 +3,7 @@ package org.dromara.sample.media.service; import org.dromara.common.sdk.cloudapi.media.FlightTask; import org.dromara.common.sdk.cloudapi.media.MediaUploadCallbackRequest; import org.dromara.common.sdk.common.PaginationData; -import org.dromara.sample.api.domain.vo.RemoteMediaFileVo; + import org.dromara.sample.media.model.MediaFileDTO; import org.dromara.sample.media.model.MediaFileEntity; 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 ac32589..e70f0d8 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 @@ -11,7 +11,6 @@ import org.dromara.common.sdk.cloudapi.media.MediaSubFileTypeEnum; import org.dromara.common.sdk.cloudapi.media.MediaUploadCallbackRequest; import org.dromara.common.sdk.common.Pagination; import org.dromara.common.sdk.common.PaginationData; -import org.dromara.sample.api.domain.vo.RemoteMediaFileVo; import org.dromara.sample.manage.model.dto.DeviceDictionaryDTO; import org.dromara.sample.manage.service.IDeviceDictionaryService; import org.dromara.sample.media.mapper.IFileMapper; From f8d93796557b608ac4e8a8739b00984e225306d0 Mon Sep 17 00:00:00 2001 From: wuyuan <15505152113@163.com> Date: Sun, 30 Mar 2025 13:13:36 +0800 Subject: [PATCH 07/12] 111 --- dk-api/api-bom/pom.xml | 5 + .../api/RemoteBusinessAlertService.java | 5 +- .../api/domain/vo/RemoteBusinessAlertVo.java | 2 +- .../workflow/api/RemoteWorkflowService.java | 6 +- .../workflow/api/domain/FlowDepartVo.java | 22 --- .../BusinessAlertStatisticsController.java | 6 +- .../controller/BusinessTaskController.java | 4 + .../business/domain/BusinessAlert.java | 6 +- .../business/domain/bo/BusinessAlertBo.java | 14 +- .../business/domain/model/StatObj.java | 31 ++++ .../business/domain/vo/BusinessAlertVo.java | 4 +- .../business/domain/vo/BusinessTaskVo.java | 3 +- .../dubbo/RemoteBusinessAlertServiceImpl.java | 5 + .../business/mapper/BusinessAlertMapper.java | 4 +- .../service/IBusinessAlertService.java | 5 +- .../IBusinessAlertStatisticsService.java | 6 +- .../service/IBusinessTaskService.java | 2 + .../impl/BusinessAlertServiceImpl.java | 30 ++-- .../BusinessAlertStatisticsServiceImpl.java | 152 +++++++++++------- .../service/impl/BusinessTaskServiceImpl.java | 3 +- .../mapper/business/BusinessAlertMapper.xml | 104 +++++++----- .../sample/media/service/IFileService.java | 4 +- .../media/service/impl/FileServiceImpl.java | 7 + .../controller/AiCompareController.java | 34 +++- .../sample/wayline/model/dto/FrameDTO.java | 4 + .../wayline/service/IAiCompareService.java | 8 +- .../service/impl/AiCompareServiceImpl.java | 46 ++++-- .../controller/system/AiLabelController.java | 2 +- .../org/dromara/system/domain/AiLabel.java | 6 + .../dromara/system/domain/bo/AiLabelBo.java | 5 + .../system/domain/bo/AiLabelPostBindBo.java | 2 +- .../dromara/system/domain/vo/AiLabelVo.java | 5 + .../system/dubbo/RemotePostServiceImpl.java | 13 +- .../service/impl/AiLablePostServiceImpl.java | 18 ++- .../controller/FlwDepartController.java | 46 ------ .../dromara/workflow/domain/FlowDepart.java | 48 ------ .../workflow/domain/vo/FlowDefinitionVo.java | 2 +- .../dubbo/RemoteWorkflowServiceImpl.java | 11 +- .../workflow/handler/FlwAlertHandler.java | 6 +- .../workflow/handler/ListTypeHandler.java | 16 +- .../workflow/mapper/FlwCategoryMapper.java | 2 + .../workflow/mapper/FlwDepartMapper.java | 15 -- .../workflow/service/FlwDepartService.java | 11 -- .../service/IFlwDefinitionService.java | 3 + .../workflow/service/IFlwTaskService.java | 13 +- .../impl/FlwDefinitionServiceImpl.java | 16 +- .../service/impl/FlwDepartServiceImpl.java | 49 ------ .../service/impl/FlwInstanceServiceImpl.java | 3 +- .../service/impl/FlwTaskServiceImpl.java | 22 +-- .../mapper/workflow/FlwCategoryMapper.xml | 4 + .../mapper/workflow/FlwDepartMapper.xml | 22 --- pom.xml | 20 ++- 52 files changed, 434 insertions(+), 448 deletions(-) delete mode 100644 dk-api/api-workflow/src/main/java/org/dromara/workflow/api/domain/FlowDepartVo.java delete mode 100644 dk-modules/workflow/src/main/java/org/dromara/workflow/controller/FlwDepartController.java delete mode 100644 dk-modules/workflow/src/main/java/org/dromara/workflow/domain/FlowDepart.java delete mode 100644 dk-modules/workflow/src/main/java/org/dromara/workflow/mapper/FlwDepartMapper.java delete mode 100644 dk-modules/workflow/src/main/java/org/dromara/workflow/service/FlwDepartService.java delete mode 100644 dk-modules/workflow/src/main/java/org/dromara/workflow/service/impl/FlwDepartServiceImpl.java delete mode 100644 dk-modules/workflow/src/main/resources/mapper/workflow/FlwDepartMapper.xml 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-business/src/main/java/org/dromara/business/api/RemoteBusinessAlertService.java b/dk-api/api-business/src/main/java/org/dromara/business/api/RemoteBusinessAlertService.java index e7138d7..9597fd3 100644 --- a/dk-api/api-business/src/main/java/org/dromara/business/api/RemoteBusinessAlertService.java +++ b/dk-api/api-business/src/main/java/org/dromara/business/api/RemoteBusinessAlertService.java @@ -13,7 +13,10 @@ import java.util.List; */ public interface RemoteBusinessAlertService { - + /** + * 生成预警,待验证状态 + */ + Boolean saveBusinessAlert(List alertVoList); /** * 更新此条预警审批时候的状态 * @param businessId 业务id(预警、工单) diff --git a/dk-api/api-business/src/main/java/org/dromara/business/api/domain/vo/RemoteBusinessAlertVo.java b/dk-api/api-business/src/main/java/org/dromara/business/api/domain/vo/RemoteBusinessAlertVo.java index 6beda09..6ef5b3d 100644 --- a/dk-api/api-business/src/main/java/org/dromara/business/api/domain/vo/RemoteBusinessAlertVo.java +++ b/dk-api/api-business/src/main/java/org/dromara/business/api/domain/vo/RemoteBusinessAlertVo.java @@ -18,7 +18,7 @@ public class RemoteBusinessAlertVo implements Serializable { /** * */ - private String id; + private Long id; /** * job任务id diff --git a/dk-api/api-workflow/src/main/java/org/dromara/workflow/api/RemoteWorkflowService.java b/dk-api/api-workflow/src/main/java/org/dromara/workflow/api/RemoteWorkflowService.java index f83753a..0efe75e 100644 --- a/dk-api/api-workflow/src/main/java/org/dromara/workflow/api/RemoteWorkflowService.java +++ b/dk-api/api-workflow/src/main/java/org/dromara/workflow/api/RemoteWorkflowService.java @@ -1,15 +1,13 @@ package org.dromara.workflow.api; import org.dromara.system.api.domain.vo.RemoteUserVo; -import org.dromara.workflow.api.domain.FlowDepartVo; +import org.dromara.workflow.api.domain.FlowLabelVo; import org.dromara.workflow.api.domain.RemoteCompleteTask; import org.dromara.workflow.api.domain.RemoteStartProcess; import org.dromara.workflow.api.domain.RemoteStartProcessReturn; -import java.util.LinkedList; import java.util.List; import java.util.Map; -import java.util.concurrent.CompletableFuture; /** * 通用 工作流服务 @@ -128,6 +126,6 @@ public interface RemoteWorkflowService { */ List currentTaskAllUser(Long taskId); - FlowDepartVo getFlowDepart(Long deptId); + String getFlowCode(String postCode); } diff --git a/dk-api/api-workflow/src/main/java/org/dromara/workflow/api/domain/FlowDepartVo.java b/dk-api/api-workflow/src/main/java/org/dromara/workflow/api/domain/FlowDepartVo.java deleted file mode 100644 index 84dc82b..0000000 --- a/dk-api/api-workflow/src/main/java/org/dromara/workflow/api/domain/FlowDepartVo.java +++ /dev/null @@ -1,22 +0,0 @@ -package org.dromara.workflow.api.domain; - -import lombok.Data; - -@Data -public class FlowDepartVo { - - - private Long id; - - /** - * 流程类型 - */ - private String flowType; - - /** - * 流程编码 - */ - private String flowCode; - - -} diff --git a/dk-modules/business/src/main/java/org/dromara/business/controller/BusinessAlertStatisticsController.java b/dk-modules/business/src/main/java/org/dromara/business/controller/BusinessAlertStatisticsController.java index 5b0e5e1..4f10000 100644 --- a/dk-modules/business/src/main/java/org/dromara/business/controller/BusinessAlertStatisticsController.java +++ b/dk-modules/business/src/main/java/org/dromara/business/controller/BusinessAlertStatisticsController.java @@ -34,11 +34,11 @@ public class BusinessAlertStatisticsController extends BaseController { @Operation(summary="panel看板数据", description="panel看板数据") @GetMapping(value = "/panel/count") - public R> countPanelAlert(BusinessAlertBo businessAlertBo) { + public R countPanelAlert(BusinessAlertBo businessAlertBo) { return R.ok(statisticsService.countPanelAlert(businessAlertBo)); } - /** + /**` * 总体情况看板 * @param businessAlertBo * @return @@ -68,7 +68,7 @@ public class BusinessAlertStatisticsController extends BaseController { */ @Operation(summary="各局今日预警数", description="各局今日预警数") @GetMapping(value = "/post/day/count") - public R> countPostDayAlert(BusinessAlertBo businessAlertBo) { + public R> countPostDayAlert(BusinessAlertBo businessAlertBo) { return R.ok(statisticsService.countPostDayAlert(businessAlertBo)); } 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 c553849..9c5d103 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 @@ -29,7 +29,7 @@ public class BusinessAlert extends BaseEntity { /** * */ - @TableId(type = IdType.ASSIGN_ID) + @TableId(type = IdType.AUTO) private Long id; /** @@ -65,12 +65,12 @@ public class BusinessAlert extends BaseEntity { /** * 纬度 */ - private Long lat; + private String lat; /** * 精度 */ - private Long lng; + private String lng; /** * 标签名-中 diff --git a/dk-modules/business/src/main/java/org/dromara/business/domain/bo/BusinessAlertBo.java b/dk-modules/business/src/main/java/org/dromara/business/domain/bo/BusinessAlertBo.java index 32a7b36..9dd64c8 100644 --- a/dk-modules/business/src/main/java/org/dromara/business/domain/bo/BusinessAlertBo.java +++ b/dk-modules/business/src/main/java/org/dromara/business/domain/bo/BusinessAlertBo.java @@ -42,16 +42,6 @@ public class BusinessAlertBo { private String images; - /** - * 纬度 - */ - private Long lat; - - /** - * 精度 - */ - private Long lng; - /** * 预警类型 */ @@ -245,4 +235,8 @@ public class BusinessAlertBo { */ private Integer dateType; + private String startTime; + + private String endTime; + } diff --git a/dk-modules/business/src/main/java/org/dromara/business/domain/model/StatObj.java b/dk-modules/business/src/main/java/org/dromara/business/domain/model/StatObj.java index b2aacc1..d7def7a 100644 --- a/dk-modules/business/src/main/java/org/dromara/business/domain/model/StatObj.java +++ b/dk-modules/business/src/main/java/org/dromara/business/domain/model/StatObj.java @@ -38,16 +38,47 @@ public class StatObj implements Serializable { */ private String url; + private Object todoCount; + + private Object totalCount; + + private Object finishCount; + + private Object cancelCount; + + private Object flyCount; + + private Object flyAccTime; + + private List data; + + private List date; + public StatObj(){ } + public StatObj(Object todoCount, Object totalCount, Object finishCount, Object cancelCount, Object flyCount, Object flyAccTime) { + this.todoCount = todoCount; + this.totalCount = totalCount; + this.finishCount = finishCount; + this.cancelCount = cancelCount; + this.flyCount = flyCount; + this.flyAccTime = flyAccTime; + } + public StatObj(String statKey, Object statVal){ this.statKey = statKey; this.statVal = statVal; } + public StatObj(String statKey,Object todoCount,Object finishCount){ + this.statKey = statKey; + this.todoCount =todoCount; + this.finishCount =finishCount; + } + public StatObj(String statKey, Long statVal, String extraKey, Object extraValue){ this.statKey = statKey; this.statVal = statVal; diff --git a/dk-modules/business/src/main/java/org/dromara/business/domain/vo/BusinessAlertVo.java b/dk-modules/business/src/main/java/org/dromara/business/domain/vo/BusinessAlertVo.java index 84b99d8..47f8c51 100644 --- a/dk-modules/business/src/main/java/org/dromara/business/domain/vo/BusinessAlertVo.java +++ b/dk-modules/business/src/main/java/org/dromara/business/domain/vo/BusinessAlertVo.java @@ -67,12 +67,12 @@ public class BusinessAlertVo implements Serializable { /** * 纬度 */ - private Long lat; + private String lat; /** * 精度 */ - private Long lng; + private String lng; /** * 标签名-中 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 f8f2965..0617d2e 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/dubbo/RemoteBusinessAlertServiceImpl.java b/dk-modules/business/src/main/java/org/dromara/business/dubbo/RemoteBusinessAlertServiceImpl.java index 3551115..bd8b33f 100644 --- a/dk-modules/business/src/main/java/org/dromara/business/dubbo/RemoteBusinessAlertServiceImpl.java +++ b/dk-modules/business/src/main/java/org/dromara/business/dubbo/RemoteBusinessAlertServiceImpl.java @@ -26,6 +26,11 @@ public class RemoteBusinessAlertServiceImpl implements RemoteBusinessAlertServic private final IBusinessAlertService businessAlertService; + @Override + public Boolean saveBusinessAlert(List alertVoList) { + return businessAlertService.batchAddBusinessAlert(alertVoList); + } + /** * 更新此条预警审批时候的状态 * @param businessId 业务id(预警、工单) diff --git a/dk-modules/business/src/main/java/org/dromara/business/mapper/BusinessAlertMapper.java b/dk-modules/business/src/main/java/org/dromara/business/mapper/BusinessAlertMapper.java index 4f4b7bc..7f7698d 100644 --- a/dk-modules/business/src/main/java/org/dromara/business/mapper/BusinessAlertMapper.java +++ b/dk-modules/business/src/main/java/org/dromara/business/mapper/BusinessAlertMapper.java @@ -64,7 +64,7 @@ public interface BusinessAlertMapper extends BaseMapperPlus> countAlertCompare(@Param("param")BusinessAlertBo businessAlertBo); - List> countPanelAlert(@Param("param")BusinessAlertBo businessAlertBo); + Map countPanelAlert(@Param("param")BusinessAlertBo businessAlertBo); List> countAlertTypeCompare(@Param("param") BusinessAlertBo businessAlertBo); @@ -77,7 +77,7 @@ public interface BusinessAlertMapper extends BaseMapperPlus countCurrentDayAlert(@Param("param") BusinessAlertBo businessAlertBo); - Map handlerRate(@Param("param") BusinessAlertBo businessAlertBo,@Param("month") String month); + List> handlerRate(@Param("param") BusinessAlertBo businessAlertBo,@Param("months") List months); Map countPastYearAlert(@Param("param") BusinessAlertBo businessAlertBo,@Param("startTime") String startTime,@Param("endTime") String endTime); diff --git a/dk-modules/business/src/main/java/org/dromara/business/service/IBusinessAlertService.java b/dk-modules/business/src/main/java/org/dromara/business/service/IBusinessAlertService.java index b7329bc..da4eada 100644 --- a/dk-modules/business/src/main/java/org/dromara/business/service/IBusinessAlertService.java +++ b/dk-modules/business/src/main/java/org/dromara/business/service/IBusinessAlertService.java @@ -1,6 +1,7 @@ package org.dromara.business.service; import org.dromara.business.api.domain.bo.RemoteBusinessAlertBo; +import org.dromara.business.api.domain.vo.RemoteBusinessAlertVo; import org.dromara.business.domain.BusinessAlert; import org.dromara.business.domain.bo.BusinessAlertBo; import org.dromara.business.domain.vo.BusinessAlertVo; @@ -38,10 +39,10 @@ public interface IBusinessAlertService { /** * 批量新增预警任务 * - * @param alertList 预警任务 + * @param alertVoList 预警任务 * @return 是否新增成功 */ - Boolean batchAddBusinessAlert(List alertList); + Boolean batchAddBusinessAlert(List alertVoList); /** * 修改预警任务 diff --git a/dk-modules/business/src/main/java/org/dromara/business/service/IBusinessAlertStatisticsService.java b/dk-modules/business/src/main/java/org/dromara/business/service/IBusinessAlertStatisticsService.java index 38a699c..8fe4bd8 100644 --- a/dk-modules/business/src/main/java/org/dromara/business/service/IBusinessAlertStatisticsService.java +++ b/dk-modules/business/src/main/java/org/dromara/business/service/IBusinessAlertStatisticsService.java @@ -18,15 +18,15 @@ public interface IBusinessAlertStatisticsService { List> countAlertStatusCompare(BusinessAlertBo businessAlertBo); - List countPanelAlert(BusinessAlertBo businessAlertBo); + StatObj countPanelAlert(BusinessAlertBo businessAlertBo); List> countAlertTypeCompare(BusinessAlertBo businessAlertBo); Map countPanelTotalAlert(BusinessAlertBo businessAlertBo); - Map countCurrentDayAlert(BusinessAlertBo businessAlertBo); + Map countCurrentDayAlert(BusinessAlertBo businessAlertBo); - Map countPostDayAlert(BusinessAlertBo businessAlertBo); + List countPostDayAlert(BusinessAlertBo businessAlertBo); List countPostAlert(BusinessAlertBo businessAlertBo); 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/BusinessAlertServiceImpl.java b/dk-modules/business/src/main/java/org/dromara/business/service/impl/BusinessAlertServiceImpl.java index 91f1d6f..9aeab15 100644 --- a/dk-modules/business/src/main/java/org/dromara/business/service/impl/BusinessAlertServiceImpl.java +++ b/dk-modules/business/src/main/java/org/dromara/business/service/impl/BusinessAlertServiceImpl.java @@ -70,12 +70,13 @@ public class BusinessAlertServiceImpl implements IBusinessAlertService { /** * 批量添加 - * @param alertList 预警任务 + * @param alertVoList 预警任务 * @return */ @Override - public Boolean batchAddBusinessAlert(List alertList) { - return this.baseMapper.insertBatch(alertList); + public Boolean batchAddBusinessAlert(List alertVoList) { + List businessAlerts = MapstructUtils.convert(alertVoList, BusinessAlert.class); + return this.baseMapper.insertBatch(businessAlerts); } /** @@ -170,14 +171,14 @@ public class BusinessAlertServiceImpl implements IBusinessAlertService { */ @Override public TableDataInfo pageBusinessAlertCancel(BusinessAlertBo bo, PageQuery pageQuery) { - bo.setHandleType(BusinessStatusEnum.INVALID.getStatus()); + bo.setHandleType(BusinessStatusEnum.CANCEL.getStatus()); QueryWrapper wrapper = buildQueryWrapper(bo); if (ObjectUtil.isEmpty(wrapper)){ return new TableDataInfo<>(); } - wrapper.in("t.flowStatus", BusinessStatusEnum.INVALID.getStatus()); + wrapper.in("t.flowStatus", BusinessStatusEnum.CANCEL.getStatus()); Page page = this.baseMapper.pageBusinessAlertCancel(pageQuery.build(), wrapper); @@ -199,7 +200,7 @@ public class BusinessAlertServiceImpl implements IBusinessAlertService { return new TableDataInfo<>(); } - wrapper.notIn("t.flowStatus", BusinessStatusEnum.INVALID.getStatus()); + wrapper.notIn("t.flowStatus", BusinessStatusEnum.CANCEL.getStatus()); wrapper.apply(" EXISTS(select * from dk_workflow.flow_his_task ht where ht.approver ='" + LoginHelper.getUserId() + "' and ht.instance_id = t.instanceId)"); @@ -279,8 +280,9 @@ public class BusinessAlertServiceImpl implements IBusinessAlertService { wrapper.like("t.job_name", bo.getJobName()); } - if (ObjectUtil.isNotEmpty(bo.getCreateTime())){ - wrapper.eq("DATE_FORMAT(t.create_time, '%Y-%m-%d')", bo.getCreateTime()); + if (ObjectUtil.isNotEmpty(bo.getStartTime()) && ObjectUtil.isNotEmpty(bo.getEndTime())){ + wrapper.ge("DATE_FORMAT(t.create_time, '%Y-%m-%d')", bo.getStartTime()); + wrapper.le("DATE_FORMAT(t.create_time, '%Y-%m-%d')", bo.getEndTime()); } wrapper.orderByDesc("t.create_time","t.complete_date"); @@ -341,6 +343,8 @@ public class BusinessAlertServiceImpl implements IBusinessAlertService { List postVoList = remoteLablePostService.selectLabelByList(businessAlertBo.getPostCode(), LoginHelper.getDeptId()); postVoList.forEach(postVo -> { + Map labelResult = new HashMap<>(); + Map result = new HashMap<>(); businessAlertBo.setAiLabelEnList(List.of(postVo.getLabelEn())); @@ -350,9 +354,9 @@ public class BusinessAlertServiceImpl implements IBusinessAlertService { List alertList = this.baseMapper.listAlert(businessAlertBo, startTime, endTime); handlerMap.put("total",alertList.size()); - handlerMap.put("finishCount",alertList.stream().filter(p-> p.getHandleType().equalsIgnoreCase(BusinessStatusEnum.FINISH.getStatus())).count()); - handlerMap.put("todoCount",alertList.stream().filter(p-> p.getHandleType().equalsIgnoreCase(BusinessStatusEnum.WAITING.getStatus())).count()); - handlerMap.put("cancelCount",alertList.stream().filter(p-> p.getHandleType().equalsIgnoreCase(BusinessStatusEnum.INVALID.getStatus())).count()); + handlerMap.put("finishCount",ObjectUtil.isEmpty(alertList)?0:alertList.stream().filter(p-> p.getHandleType().equalsIgnoreCase(BusinessStatusEnum.FINISH.getStatus())).count()); + handlerMap.put("todoCount",ObjectUtil.isEmpty(alertList)?0:alertList.stream().filter(p-> p.getHandleType().equalsIgnoreCase(BusinessStatusEnum.WAITING.getStatus())).count()); + handlerMap.put("cancelCount",ObjectUtil.isEmpty(alertList)?0:alertList.stream().filter(p-> p.getHandleType().equalsIgnoreCase(BusinessStatusEnum.CANCEL.getStatus())).count()); result.put("panel",handlerMap); @@ -360,7 +364,9 @@ public class BusinessAlertServiceImpl implements IBusinessAlertService { result.put("date", startTime + "~" + endTime); - resultList.add(result); + labelResult.put(postVo.getLabelCn(),result); + + resultList.add(labelResult); }); diff --git a/dk-modules/business/src/main/java/org/dromara/business/service/impl/BusinessAlertStatisticsServiceImpl.java b/dk-modules/business/src/main/java/org/dromara/business/service/impl/BusinessAlertStatisticsServiceImpl.java index 705cd17..0d3ec23 100644 --- a/dk-modules/business/src/main/java/org/dromara/business/service/impl/BusinessAlertStatisticsServiceImpl.java +++ b/dk-modules/business/src/main/java/org/dromara/business/service/impl/BusinessAlertStatisticsServiceImpl.java @@ -25,6 +25,7 @@ import java.time.LocalDate; import java.time.format.DateTimeFormatter; import java.time.temporal.TemporalAdjusters; import java.util.*; +import java.util.concurrent.atomic.AtomicInteger; import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.stream.Collectors; @@ -105,6 +106,7 @@ public class BusinessAlertStatisticsServiceImpl implements IBusinessAlertStatist @Override public List countDepartAlertStatus(BusinessAlertBo businessAlertBo) { + businessAlertBo.setDeptId(String.valueOf(LoginHelper.getDeptId())); businessAlertBo.setAiLabelEnList(getAiLabel(businessAlertBo.getPostCode()).stream().map(RemoteAiLabelPostVo::getLabelEn).collect(Collectors.toList())); List> mapList = baseMapper.listDepartAlertStatus(businessAlertBo); @@ -136,19 +138,12 @@ public class BusinessAlertStatisticsServiceImpl implements IBusinessAlertStatist } @Override - public List countPanelAlert(BusinessAlertBo businessAlertBo) { + public StatObj countPanelAlert(BusinessAlertBo businessAlertBo) { LocalDate today = LocalDate.now(); if (ObjectUtil.isNotEmpty(businessAlertBo.getPostCode())){ if (ObjectUtil.isEmpty(getAiLabel(businessAlertBo.getPostCode()))){ - return Stream.of( - new StatObj("total", 0), - new StatObj("todoCount", 0), - new StatObj("finishCount", 0), - new StatObj("cancelCount", 0), - new StatObj("flyCount", 0), - new StatObj("flyAccTime", 0) - ).toList(); + return new StatObj(0, 0,0,0,0,0); } businessAlertBo.setCreateTime(today.getYear()+"-"+today.getMonthValue()+"-"+today.getDayOfMonth()); @@ -194,18 +189,15 @@ public class BusinessAlertStatisticsServiceImpl implements IBusinessAlertStatist //----------------------------------------------获取飞行总架次、总时长---------------------------------------------- - List> mapList = baseMapper.countPanelAlert(businessAlertBo); + Map panel = baseMapper.countPanelAlert(businessAlertBo); - return mapList.stream() - .flatMap(map -> Stream.of( - new StatObj("total", map.get("total")), - new StatObj("todoCount", map.get("todoCount")), - new StatObj("finishCount", map.get("finishCount")), - new StatObj("cancelCount", map.get("cancelCount")), - new StatObj("flyCount", flyCount), - new StatObj("flyAccTime", flyAccTime) - )) - .collect(Collectors.toList()); + return new StatObj( + ObjectUtil.isEmpty(panel.get("todoCount"))?0:panel.get("todoCount"), + ObjectUtil.isEmpty(panel.get("total"))?0:panel.get("total"), + ObjectUtil.isEmpty(panel.get("finishCount"))?0:panel.get("finishCount"), + ObjectUtil.isEmpty(panel.get("cancelCount"))?0:panel.get("cancelCount"), + flyCount, + flyAccTime); } @Override @@ -316,20 +308,23 @@ public class BusinessAlertStatisticsServiceImpl implements IBusinessAlertStatist * @return */ @Override - public Map countPostDayAlert(BusinessAlertBo businessAlertBo) { - Map result = new HashMap<>(); + public List countPostDayAlert(BusinessAlertBo businessAlertBo) { + List result = new ArrayList<>(); //查询所有的职能岗位 List postVoList = remotePostService.listPost(); if (ObjectUtil.isEmpty(postVoList)) { - return Map.of(); + return ListUtil.empty(); } + AtomicInteger number = new AtomicInteger(1); + postVoList.forEach(postVo -> { List labelList = getAiLabel(postVo.getPostCode()).stream().map(RemoteAiLabelPostVo::getLabelEn).collect(Collectors.toList()); businessAlertBo.setAiLabelEnList(labelList); Map dayMap = this.baseMapper.countCurrentDayAlert(businessAlertBo); - result.put(postVo.getPostName(), dayMap.get("total")); + number.getAndIncrement(); + result.add(new StatObj(postVo.getPostName(), ObjectUtil.isEmpty(dayMap.get("total"))? number.get() + 1:dayMap.get("total"))); }); return result; @@ -364,7 +359,11 @@ public class BusinessAlertStatisticsServiceImpl implements IBusinessAlertStatist endTime = dateMap.get("endTime"); } + AtomicInteger number = new AtomicInteger(1); + postVoList.forEach(postVo -> { + number.getAndIncrement(); + List labelList = getAiLabel(postVo.getPostCode()).stream().map(RemoteAiLabelPostVo::getLabelEn).collect(Collectors.toList()); Map dateMap = new HashMap<>(); if (ObjectUtil.isEmpty(labelList)) { @@ -377,10 +376,8 @@ public class BusinessAlertStatisticsServiceImpl implements IBusinessAlertStatist result.add(new StatObj( postVo.getPostName(), - List.of( - new StatObj("todoCount", dateMap.get("todoCount")), - new StatObj("finishCount", dateMap.get("finishCount")) - ) + ObjectUtil.isEmpty(dateMap.get("todoCount"))?number.get() + 1:dateMap.get("todoCount"), + ObjectUtil.isEmpty(dateMap.get("finishCount"))?number.get() + 2:dateMap.get("finishCount") )); }); @@ -401,32 +398,47 @@ public class BusinessAlertStatisticsServiceImpl implements IBusinessAlertStatist List result = new ArrayList<>(); - monthList.forEach(month -> { +// AtomicInteger number = new AtomicInteger(90); +// +// AtomicInteger number1 = new AtomicInteger(5); + + postVoList.forEach(postVo -> { +// number.getAndIncrement(); StatObj statObj = new StatObj(); - statObj.setStatKey(month); - List statObjs = new ArrayList<>(); - postVoList.forEach(postVo -> { - List labelList = getAiLabel(postVo.getPostCode()).stream().map(RemoteAiLabelPostVo::getLabelEn).collect(Collectors.toList()); - StatObj statObj1 = new StatObj(); - statObj1.setStatKey(postVo.getPostName()); - if (ObjectUtil.isEmpty(labelList)){ - statObj1.setStatVal(0); + statObj.setStatKey(postVo.getPostName()); + + statObj.setDate(monthList); + + List data = new ArrayList<>(); + + List labelList = getAiLabel(postVo.getPostCode()).stream().map(RemoteAiLabelPostVo::getLabelEn).collect(Collectors.toList()); + + if (ObjectUtil.isEmpty(labelList)){ + monthList.forEach(month -> { + data.add(0.0); + }); + }else { + businessAlertBo.setAiLabelEnList(labelList); + List> rateList = baseMapper.handlerRate(businessAlertBo,monthList); + if (ObjectUtil.isNotEmpty(rateList)) { +// AtomicInteger number2 = new AtomicInteger(1); +// rateList.forEach(rate -> { +// number2.getAndIncrement(); +// rate.put("avgInfo",number.get() + number1.get() + number2.get()); +// }); + + data.addAll(rateList.stream().map(p-> p.get("avgInfo")).toList()); }else { - businessAlertBo.setAiLabelEnList(labelList); - Map rateMap = baseMapper.handlerRate(businessAlertBo,month); - if (ObjectUtil.isNotEmpty(rateMap)) { - statObj1.setStatVal(rateMap.get("avgInfo")); - }else { - statObj1.setStatVal(0); - } + monthList.forEach(month -> { + data.add(0.0); + }); } + } - statObjs.add(statObj1); - }); - statObj.setNextStatList(statObjs); - + statObj.setData(data); result.add(statObj); }); + return result; } @@ -468,8 +480,14 @@ public class BusinessAlertStatisticsServiceImpl implements IBusinessAlertStatist List> labelMapList = this.baseMapper.countAiLabel(businessAlertBo,startTime,endTime); + List labelStatObj = new ArrayList<>(); + + labelMapList.forEach(labelMap -> { + labelStatObj.add(new StatObj(labelMap.get("labelCn").toString(),labelMap.get("total"))); + }); + //识别类型存储 - result.put("label", labelMapList); + result.put("label", labelStatObj); //-------------------------------------------------------街道事件高发区Top5-------------------------------------------- //事件高发区 @@ -480,21 +498,40 @@ public class BusinessAlertStatisticsServiceImpl implements IBusinessAlertStatist List> top5Map = this.baseMapper.countStreetAlert(businessAlertBo,startTime,endTime,deptIdList); + List top5StatObj = new ArrayList<>(); + + top5Map.forEach(map -> { + top5StatObj.add(new StatObj(map.get("deptName").toString(),map.get("total"))); + }); + //街道事件高发区前5个 - result.put("incidentTop5", top5Map); + result.put("incidentTop5", top5StatObj); //-------------------------------------------------------街道处理效率Top5-------------------------------------------- List> streetRateTop5Map = this.baseMapper.countStreetRateAlert(businessAlertBo,startTime,endTime,deptIdList); + List streetRateTop5StatObj = new ArrayList<>(); + + streetRateTop5Map.forEach(map -> { + streetRateTop5StatObj.add(new StatObj(map.get("deptName").toString(),map.get("avgInfo"))); + }); + + //街道处理效率top5 - result.put("incidentHandlerTop5", streetRateTop5Map); + result.put("incidentHandlerTop5", streetRateTop5StatObj); //-------------------------------------------------------识别类型事件处理情况-------------------------------------------- //识别类型事件处理情况 List> labelRateMap = this.baseMapper.countLabelRateAlert(businessAlertBo,startTime,endTime); - result.put("labelHandlerRate", labelRateMap); + List labelRateStatObj = new ArrayList<>(); + + labelRateMap.forEach(map -> { + labelRateStatObj.add(new StatObj(map.get("labelCn").toString(),map.get("avgInfo"))); + }); + + result.put("labelHandlerRate", labelRateStatObj); return result; } @@ -595,7 +632,13 @@ public class BusinessAlertStatisticsServiceImpl implements IBusinessAlertStatist List> labelMapList = this.baseMapper.countAiLabel(businessAlertBo,startTime,endTime); - keyMap.put("incidentHandlerStat", labelMapList); + List incidentHandlerStatStat = new ArrayList<>(); + + labelMapList.forEach(map -> { + incidentHandlerStatStat.add(new StatObj(map.get("labelCn").toString(),map.get("total"))); + }); + + keyMap.put("incidentHandlerStat", incidentHandlerStatStat); //-------------------------------------------------------事件高发区-------------------------------------------- @@ -629,7 +672,7 @@ public class BusinessAlertStatisticsServiceImpl implements IBusinessAlertStatist LocalDate currentDate = LocalDate.now(); DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM"); - for (int i = 0; i < 6; i++) { + for (int i = 5; i >=0 ; i--) { LocalDate date = currentDate.minusMonths(i); months.add(date.format(formatter)); } @@ -637,6 +680,7 @@ public class BusinessAlertStatisticsServiceImpl implements IBusinessAlertStatist return months; } + private List buildDateList(BusinessAlertBo businessAlertBo) { List resultList = new ArrayList<>(); String currentYear = String.valueOf(Calendar.getInstance().get(Calendar.YEAR)); 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/business/src/main/resources/mapper/business/BusinessAlertMapper.xml b/dk-modules/business/src/main/resources/mapper/business/BusinessAlertMapper.xml index dad7d7e..692edc5 100644 --- a/dk-modules/business/src/main/resources/mapper/business/BusinessAlertMapper.xml +++ b/dk-modules/business/src/main/resources/mapper/business/BusinessAlertMapper.xml @@ -149,33 +149,34 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" ), - sub_depts AS ( SELECT - sda.dept_id, - sda.parent_id, - sda.tenant_id - FROM - dk_cloud.sys_dept sda - WHERE - sda.parent_id IN (SELECT dd.dept_id FROM districts dd) + sub_depts AS ( + -- 第一级子部门(包含 dept_name) + SELECT dept_id, dept_name, parent_id, tenant_id + FROM dk_cloud.sys_dept + + + parent_id = #{param.deptId} + + + parent_id in (select dsd.dept_id from dk_cloud.sys_dept dsd where dsd.parent_id = '0') + + UNION ALL - SELECT - d.dept_id, - d.parent_id, - d.tenant_id - FROM - dk_cloud.sys_dept d + -- 递归查询下级部门(同样包含 dept_name) + SELECT d.dept_id, d.dept_name, d.parent_id, d.tenant_id + FROM dk_cloud.sys_dept d INNER JOIN sub_depts st ON d.parent_id = st.dept_id - ), + ), warning_summary AS ( SELECT - d.parent_id AS district_id, + d.dept_id AS district_id, COUNT( ba.id ) AS total_warnings FROM business_alert ba INNER JOIN sub_depts d ON ba.dept_id = d.dept_id GROUP BY - d.parent_id + d.dept_id ) SELECT d.dept_id deptId, @@ -199,7 +200,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" IFNULL(COUNT(ba.id), 0) AS total, IFNULL(SUM(ba.handle_type = 'waiting'), 0) AS todoCount, IFNULL(SUM(ba.handle_type = 'finish'), 0) AS finishCount, - IFNULL(SUM( ba.handle_type = 'invalid' ),0) AS cancelCount + IFNULL(SUM( ba.handle_type = 'cancel' ),0) AS cancelCount FROM months m LEFT JOIN business_alert ba ON DATE_FORMAT(ba.create_time, '%Y-%m') = DATE_FORMAT(m.dateMonth, '%Y-%m') @@ -220,37 +221,37 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" ), sub_depts AS ( - SELECT - sda.dept_id, - sda.parent_id, - sda.tenant_id - FROM - dk_cloud.sys_dept sda - WHERE - sda.parent_id IN (SELECT dd.dept_id FROM districts dd) + -- 第一级子部门(包含 dept_name) + SELECT dept_id, dept_name, parent_id, tenant_id + FROM dk_cloud.sys_dept + + + parent_id = #{param.deptId} + + + parent_id in (select dsd.dept_id from dk_cloud.sys_dept dsd where dsd.parent_id = '0') + + UNION ALL - SELECT - d.dept_id, - d.parent_id, - d.tenant_id - FROM - dk_cloud.sys_dept d + -- 递归查询下级部门(同样包含 dept_name) + SELECT d.dept_id, d.dept_name, d.parent_id, d.tenant_id + FROM dk_cloud.sys_dept d INNER JOIN sub_depts st ON d.parent_id = st.dept_id ), warning_summary AS ( SELECT - d.parent_id AS district_id, + d.dept_id AS district_id, COUNT(ba.id) AS total_warnings, IFNULL(SUM(handle_type = 'waiting'), 0) AS todoCount, IFNULL(SUM(handle_type = 'finish'), 0) AS finishCount, - IFNULL(SUM(ba.handle_type = 'invalid'), 0) AS cancelCount + IFNULL(SUM(ba.handle_type = 'cancel'), 0) AS cancelCount FROM business_alert ba INNER JOIN sub_depts d ON ba.dept_id = d.dept_id AND ba.handle_type != 'verify' GROUP BY - d.parent_id + d.dept_id ) SELECT d.dept_id deptId, @@ -310,7 +311,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" COUNT(DISTINCT ba.id) AS total, IFNULL(SUM( ba.handle_type = 'waiting' ),0) AS todoCount, IFNULL(SUM( ba.handle_type = 'finish' ),0) AS finishCount, - IFNULL(SUM( ba.handle_type = 'invalid' ),0) AS cancelCount + IFNULL(SUM( ba.handle_type = 'cancel' ),0) AS cancelCount FROM month_department md LEFT JOIN business_alert ba ON md.dept_id = ba.dept_id @@ -324,7 +325,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" select COUNT(DISTINCT ba.id) AS total, IFNULL(SUM( ba.handle_type = 'waiting' ),0) AS todoCount, IFNULL(SUM( ba.handle_type = 'finish' ),0) AS finishCount, - IFNULL(SUM( ba.handle_type = 'invalid' ),0) AS cancelCount + IFNULL(SUM( ba.handle_type = 'cancel' ),0) AS cancelCount from business_alert ba where 1=1 @@ -428,13 +429,24 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" select ba.label_en labelEn, + ba.images images, ba.label_cn labelCn, ba.create_time createTime, + ba.handle_type handleType, + ba.lat, + ba.lng, b.flow_status flowStatus, b.business_id businessId, b.id instanceId diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/media/service/IFileService.java b/dk-modules/sample/src/main/java/org/dromara/sample/media/service/IFileService.java index dead30b..1553d8b 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/media/service/IFileService.java +++ b/dk-modules/sample/src/main/java/org/dromara/sample/media/service/IFileService.java @@ -3,7 +3,9 @@ package org.dromara.sample.media.service; import org.dromara.common.sdk.cloudapi.media.FlightTask; import org.dromara.common.sdk.cloudapi.media.MediaUploadCallbackRequest; import org.dromara.common.sdk.common.PaginationData; + import org.dromara.sample.media.model.MediaFileDTO; +import org.dromara.sample.media.model.MediaFileEntity; import java.net.URL; import java.util.List; @@ -79,5 +81,5 @@ public interface IFileService { */ URL getObjectUrlOne(String bucket,String pathUrl,Integer seconds); - + List getRemoteMediaFileVo(String jobId, String fileType); } 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 524fa2b..e70f0d8 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,6 +1,7 @@ package org.dromara.sample.media.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import org.dromara.common.oss.core.OssClient; import org.dromara.common.oss.factory.OssFactory; @@ -149,6 +150,12 @@ public class FileServiceImpl implements IFileService { return storage.getPrivateUrlURL(pathUrl,seconds); } + @Override + public List getRemoteMediaFileVo(String jobId, String fileType) { + QueryWrapper wrapper = new QueryWrapper().eq("job_id", jobId).in("file_type", fileType).orderByAsc("file_index"); + return mapper.selectList(wrapper); + } + /** * Convert the received file object into a database entity object. * @param file diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/wayline/controller/AiCompareController.java b/dk-modules/sample/src/main/java/org/dromara/sample/wayline/controller/AiCompareController.java index 251489c..8e217c9 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/wayline/controller/AiCompareController.java +++ b/dk-modules/sample/src/main/java/org/dromara/sample/wayline/controller/AiCompareController.java @@ -4,7 +4,9 @@ import cn.dev33.satoken.annotation.SaCheckPermission; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.validation.constraints.NotNull; import lombok.RequiredArgsConstructor; +import org.dromara.business.api.domain.vo.RemoteBusinessAlertVo; import org.dromara.common.core.domain.R; +import org.dromara.common.core.utils.MapstructUtils; import org.dromara.common.core.validate.AddGroup; import org.dromara.common.core.validate.EditGroup; import org.dromara.common.idempotent.annotation.RepeatSubmit; @@ -121,18 +123,18 @@ public class AiCompareController extends BaseController { /** * 画框 - * 参数:jobId */ @SaCheckPermission("sample:compare:add") @Log(title = "预警画框", businessType = BusinessType.INSERT) @RepeatSubmit() @PostMapping("/pictureFrame") - public R pictureFrame(@RequestBody FrameDTO frameDTO) { - return toAjax(aiCompareService.pictureFrame(frameDTO)); + public R pictureFrame(@RequestBody MapobjectMap) { + + return toAjax(aiCompareService.pictureFrame(objectMap)); } /** - * 算法结果 + * 算法结果 算法使用 */ @PostMapping("/expose") public R expose(@RequestBody List> mapList) { @@ -140,11 +142,29 @@ public class AiCompareController extends BaseController { } /** - * 算法预警生成 + * 算法预警生成 算法使用 */ @PostMapping("/expose/alert") - public R alert(@RequestBody List> mapList) { - return toAjax(aiCompareService.expose(mapList)); + public R alert(@RequestBody Mapmap) { + return toAjax(aiCompareService.alert(map)); + } + + /** + * 验证预警列表 + */ + @PostMapping("/alertList") + public R> alertList(String jobId) { + return R.ok(aiCompareService.alertList(jobId)); } + + /** + * + * 删除验证列表预警 + * @param ids 主键串 + * * */ + @DeleteMapping("/delAlertList") + public R delAlertList(Listids) { + return toAjax(aiCompareService.delAlertList(ids)); + } } diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/wayline/model/dto/FrameDTO.java b/dk-modules/sample/src/main/java/org/dromara/sample/wayline/model/dto/FrameDTO.java index 908171f..886f697 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/wayline/model/dto/FrameDTO.java +++ b/dk-modules/sample/src/main/java/org/dromara/sample/wayline/model/dto/FrameDTO.java @@ -32,6 +32,7 @@ public class FrameDTO { */ private String jobId; + private String jobName; /** * * 像素坐标集合 @@ -44,4 +45,7 @@ public class FrameDTO { */ private String fileUrl; + + /**模板图片*/ + private String mateFileUrl; } diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/IAiCompareService.java b/dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/IAiCompareService.java index 499b94f..0d1f49e 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/IAiCompareService.java +++ b/dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/IAiCompareService.java @@ -1,5 +1,6 @@ package org.dromara.sample.wayline.service; +import org.dromara.business.api.domain.vo.RemoteBusinessAlertVo; import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.sample.wayline.model.dto.AiCompareDTO; @@ -25,7 +26,10 @@ public interface IAiCompareService { AiCompareEntity getInfo(Long id); List queryById(Long id); - Boolean pictureFrame(FrameDTO frameDTO); + Boolean pictureFrame(MapobjectMap); Boolean expose(List> mapList); - Boolean alert(List> mapList); + Boolean alert(Mapmap); + + List alertList(String jobId); + Boolean delAlertList(Listids); } diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/impl/AiCompareServiceImpl.java b/dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/impl/AiCompareServiceImpl.java index 132a052..a5f6fe8 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/impl/AiCompareServiceImpl.java +++ b/dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/impl/AiCompareServiceImpl.java @@ -9,10 +9,15 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.apache.dubbo.config.annotation.DubboReference; import org.apache.ibatis.executor.BatchResult; +import org.dromara.business.api.RemoteBusinessAlertService; +import org.dromara.business.api.domain.bo.RemoteBusinessAlertBo; +import org.dromara.business.api.domain.vo.RemoteBusinessAlertVo; import org.dromara.common.core.constant.AiCompareStatusConstants; import org.dromara.common.core.constant.BusinessConstants; +import org.dromara.common.core.utils.MapstructUtils; import org.dromara.common.core.utils.StringUtils; import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.TableDataInfo; @@ -28,10 +33,7 @@ import org.dromara.sample.media.service.IMediaService; import org.dromara.sample.wayline.mapper.IAiCompareMapper; import org.dromara.sample.wayline.mapper.IAiComparePlateMapper; import org.dromara.sample.wayline.mapper.IWaylineJobMapper; -import org.dromara.sample.wayline.model.dto.AiCompareDTO; -import org.dromara.sample.wayline.model.dto.AiCompareMediaFileDTO; -import org.dromara.sample.wayline.model.dto.AiComparePlateDTO; -import org.dromara.sample.wayline.model.dto.FrameDTO; +import org.dromara.sample.wayline.model.dto.*; import org.dromara.sample.wayline.model.entity.AiCompareEntity; import org.dromara.sample.wayline.model.entity.AiComparePlateEntity; import org.dromara.sample.wayline.model.entity.AiCompareQueueEntity; @@ -63,6 +65,8 @@ public class AiCompareServiceImpl implements IAiCompareService { private final IFileService fileService; private final MqttGatewayPublish mqttGatewayPublish; private final IAiComparePlateMapper aiComparePlateMapper; + @DubboReference + private final RemoteBusinessAlertService businessAlertService; @Override public TableDataInfo queryPageList(AiCompareDTO bo, PageQuery pageQuery) { return TableDataInfo.build(aiCompareMapper.selectPage(pageQuery.build(),this.buildAiCompareDTOQueryWrapper(bo))); @@ -144,7 +148,7 @@ public class AiCompareServiceImpl implements IAiCompareService { if(isIllegal){ QueryWrapper queryWrapper = new QueryWrapper().eq("file_id", e.getFileId()); AiComparePlateEntity plateEntity = aiComparePlateMapper.selectOne(queryWrapper); - e.setPatternUrl(fileService.getObjectUrlOne(MinIOConstants.BUCKET_PATTERN,plateEntity.getPatternName(),seconds).toString()); + e.setPatternUrl(fileService.getObjectUrlOne(MinIOConstants.BUCKET_ALERT,plateEntity.getPatternName(),seconds).toString()); } }); } @@ -181,12 +185,16 @@ public class AiCompareServiceImpl implements IAiCompareService { return listMediaFile(aiCompareEntity.getJobId(),3600,true); } @Override - public Boolean pictureFrame(FrameDTO frameDTO) { - if(!frameDTO.getFrameList().isEmpty()){ - throw new RuntimeException("未获取到违建数据"); - } + public Boolean pictureFrame(MapobjectMap) { + FrameDTO frameDTO = Convert.convert(FrameDTO.class, objectMap); + AiCompareEntity aiCompareEntity = aiCompareMapper.selectById(frameDTO.getCompareId()); + aiCompareEntity.setStatus(AiCompareStatusConstants.COMPARE_STATUS_3); + aiCompareEntity.setId(frameDTO.getCompareId()); + aiCompareMapper.updateById(aiCompareEntity); + frameDTO.setJobName(aiCompareEntity.getJobName()); + frameDTO.setFileUrl(fileService.getObjectUrlOne(MinIOConstants.BUCKET_MEDIAFILE,frameDTO.getFileUrl(),3600).toString()); + frameDTO.setMateFileUrl(fileService.getObjectUrlOne(MinIOConstants.BUCKET_MEDIAFILE,frameDTO.getMateFileUrl(),3600).toString()); String topic = TopicConst.IMAGE +TopicConst.FRAME; - mqttGatewayPublish.publish(topic,new CommonTopicRequest().setData(frameDTO),1); return true; } @@ -212,8 +220,22 @@ public class AiCompareServiceImpl implements IAiCompareService { } @Override - public Boolean alert(List> mapList) { - return null; + public Boolean alert(Mapmap) { + AiCompareAlertDTO compareAlertDTO = Convert.convert(AiCompareAlertDTO.class,map); + List handleList = compareAlertDTO.getHandleList(); + return businessAlertService.saveBusinessAlert(handleList); + } + + @Override + public List alertList(String jobId) { + RemoteBusinessAlertBo businessAlertBo = new RemoteBusinessAlertBo(); + businessAlertBo.setJobId(jobId); + return businessAlertService.listVerifyAlert(businessAlertBo); + } + + @Override + public Boolean delAlertList(List ids) { + return businessAlertService.deleteAlert(ids); } diff --git a/dk-modules/system/src/main/java/org/dromara/system/controller/system/AiLabelController.java b/dk-modules/system/src/main/java/org/dromara/system/controller/system/AiLabelController.java index cb13acb..babe5c3 100644 --- a/dk-modules/system/src/main/java/org/dromara/system/controller/system/AiLabelController.java +++ b/dk-modules/system/src/main/java/org/dromara/system/controller/system/AiLabelController.java @@ -43,10 +43,10 @@ public class AiLabelController extends BaseController { @SaCheckPermission("system:label:list") @GetMapping("/list") public TableDataInfo list(AiLabelBo bo, PageQuery pageQuery) { - pageQuery.setPageSize(30); return aiLabelService.queryPageList(bo, pageQuery); } + /** * 下拉框集合 */ diff --git a/dk-modules/system/src/main/java/org/dromara/system/domain/AiLabel.java b/dk-modules/system/src/main/java/org/dromara/system/domain/AiLabel.java index 9294670..c97754d 100644 --- a/dk-modules/system/src/main/java/org/dromara/system/domain/AiLabel.java +++ b/dk-modules/system/src/main/java/org/dromara/system/domain/AiLabel.java @@ -48,4 +48,10 @@ public class AiLabel { private String aiName; + /** + * 算法标签 + */ + private String aiEn; + + } diff --git a/dk-modules/system/src/main/java/org/dromara/system/domain/bo/AiLabelBo.java b/dk-modules/system/src/main/java/org/dromara/system/domain/bo/AiLabelBo.java index 2b4fc9c..e8dd54f 100644 --- a/dk-modules/system/src/main/java/org/dromara/system/domain/bo/AiLabelBo.java +++ b/dk-modules/system/src/main/java/org/dromara/system/domain/bo/AiLabelBo.java @@ -61,6 +61,11 @@ public class AiLabelBo { private String aiName; + /** + * 算法标签 + */ + private String aiEn; + /** * 请求参数 diff --git a/dk-modules/system/src/main/java/org/dromara/system/domain/bo/AiLabelPostBindBo.java b/dk-modules/system/src/main/java/org/dromara/system/domain/bo/AiLabelPostBindBo.java index 0f6a117..95a8c63 100644 --- a/dk-modules/system/src/main/java/org/dromara/system/domain/bo/AiLabelPostBindBo.java +++ b/dk-modules/system/src/main/java/org/dromara/system/domain/bo/AiLabelPostBindBo.java @@ -17,7 +17,7 @@ public class AiLabelPostBindBo { private Long postId; - @NotNull(message = "标签不能为空") +// @NotNull(message = "标签不能为空") private List lableIdList; } diff --git a/dk-modules/system/src/main/java/org/dromara/system/domain/vo/AiLabelVo.java b/dk-modules/system/src/main/java/org/dromara/system/domain/vo/AiLabelVo.java index 3280c78..4f66f15 100644 --- a/dk-modules/system/src/main/java/org/dromara/system/domain/vo/AiLabelVo.java +++ b/dk-modules/system/src/main/java/org/dromara/system/domain/vo/AiLabelVo.java @@ -54,5 +54,10 @@ public class AiLabelVo implements Serializable { // @ExcelProperty(value = "算法名称") private String aiName; + /** + * 算法标签 + */ + private String aiEn; + } diff --git a/dk-modules/system/src/main/java/org/dromara/system/dubbo/RemotePostServiceImpl.java b/dk-modules/system/src/main/java/org/dromara/system/dubbo/RemotePostServiceImpl.java index c94d62e..78a0ec9 100644 --- a/dk-modules/system/src/main/java/org/dromara/system/dubbo/RemotePostServiceImpl.java +++ b/dk-modules/system/src/main/java/org/dromara/system/dubbo/RemotePostServiceImpl.java @@ -2,20 +2,23 @@ package org.dromara.system.dubbo; import lombok.RequiredArgsConstructor; import org.apache.dubbo.config.annotation.DubboService; -import org.dromara.common.core.utils.MapstructUtils; + import org.dromara.system.api.RemotePostService; -import org.dromara.system.api.domain.vo.RemoteAiLabelPostVo; import org.dromara.system.api.domain.vo.RemotePostVo; import org.dromara.system.domain.bo.SysPostBo; import org.dromara.system.domain.vo.SysPostVo; import org.dromara.system.service.ISysPostService; -import org.springframework.beans.BeanUtils; + import org.springframework.stereotype.Service; -import java.util.ArrayList; + import java.util.List; import java.util.stream.Collectors; - +/** + * @author sean + * @version 1.1 + * @date 2022/6/1 + */ @RequiredArgsConstructor @Service @DubboService diff --git a/dk-modules/system/src/main/java/org/dromara/system/service/impl/AiLablePostServiceImpl.java b/dk-modules/system/src/main/java/org/dromara/system/service/impl/AiLablePostServiceImpl.java index b5cc7b5..879c29a 100644 --- a/dk-modules/system/src/main/java/org/dromara/system/service/impl/AiLablePostServiceImpl.java +++ b/dk-modules/system/src/main/java/org/dromara/system/service/impl/AiLablePostServiceImpl.java @@ -154,13 +154,19 @@ public class AiLablePostServiceImpl implements IAiLabelPostService { public Boolean insertByBatchBo(AiLabelPostBindBo aiLabelPostBindBo) { delPostId(aiLabelPostBindBo.getPostId()); List resultlist = new ArrayList<>(); - for (Long labelId : aiLabelPostBindBo.getLableIdList()) { - AiLabelPost ailabelPost = new AiLabelPost(); - ailabelPost.setPostId(aiLabelPostBindBo.getPostId()); - ailabelPost.setLabelId(labelId); - resultlist.add(ailabelPost); + + if (ObjectUtil.isNotEmpty(aiLabelPostBindBo.getLableIdList())){ + for (Long labelId : aiLabelPostBindBo.getLableIdList()) { + AiLabelPost ailabelPost = new AiLabelPost(); + ailabelPost.setPostId(aiLabelPostBindBo.getPostId()); + ailabelPost.setLabelId(labelId); + resultlist.add(ailabelPost); + } + + return this.baseMapper.insertBatch(resultlist); } - return this.baseMapper.insertBatch(resultlist); + + return true; } @Override diff --git a/dk-modules/workflow/src/main/java/org/dromara/workflow/controller/FlwDepartController.java b/dk-modules/workflow/src/main/java/org/dromara/workflow/controller/FlwDepartController.java deleted file mode 100644 index 848ce37..0000000 --- a/dk-modules/workflow/src/main/java/org/dromara/workflow/controller/FlwDepartController.java +++ /dev/null @@ -1,46 +0,0 @@ -package org.dromara.workflow.controller; - - -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.tags.Tag; -import lombok.RequiredArgsConstructor; -import org.dromara.common.core.domain.R; -import org.dromara.common.core.validate.AddGroup; -import org.dromara.workflow.common.ConditionalOnEnable; -import org.dromara.workflow.domain.FlowDepart; -import org.dromara.workflow.service.FlwDepartService; -import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.*; - -@Tag(name = "流程部门管理") -@ConditionalOnEnable -@Validated -@RequiredArgsConstructor -@RestController -@RequestMapping("/depart") -public class FlwDepartController { - - - private final FlwDepartService flwDepartService; - - /** - * 查询流程部门关系 - * flowCode - */ - @Operation(summary = "查询流程部门关系",description = "查询流程部门关系") - @GetMapping("/{flowCode}/getInfo") - public R getInfo(@PathVariable String flowCode) { - return R.ok(flwDepartService.getInfo(flowCode)); - } - - - /** - * 绑定流程部门关系 - * flowCode - */ - @Operation(summary = "绑定流程部门关系",description = "绑定流程部门关系") - @PostMapping("/bind/depart") - public R bindDepart(@Validated({AddGroup.class}) @RequestBody FlowDepart flowDepart) { - return R.ok(flwDepartService.bindDepart(flowDepart)); - } -} diff --git a/dk-modules/workflow/src/main/java/org/dromara/workflow/domain/FlowDepart.java b/dk-modules/workflow/src/main/java/org/dromara/workflow/domain/FlowDepart.java deleted file mode 100644 index f52887a..0000000 --- a/dk-modules/workflow/src/main/java/org/dromara/workflow/domain/FlowDepart.java +++ /dev/null @@ -1,48 +0,0 @@ -package org.dromara.workflow.domain; - -import com.baomidou.mybatisplus.annotation.IdType; -import com.baomidou.mybatisplus.annotation.TableField; -import com.baomidou.mybatisplus.annotation.TableId; -import com.baomidou.mybatisplus.annotation.TableName; -import jakarta.validation.constraints.NotNull; -import lombok.Data; -import org.dromara.common.core.validate.AddGroup; -import org.dromara.workflow.handler.ListTypeHandler; - -import java.util.List; - -/** - * 部门流程关系表 - */ -@Data -@TableName(value = "flow_depart",autoResultMap = true) -public class FlowDepart { - - - @TableId(type = IdType.ASSIGN_ID) - private Long id; - - /** - * 流程类型 - */ -// @NotNull(message = "流程类型不能为空", groups = AddGroup.class) -// private String flowType; - - /** - * 流程编码 - */ - @NotNull(message = "流程编码不能为空", groups = AddGroup.class) - private String flowCode; - - /** - * 租户编号 - */ - private String tenantId; - - /** - * 部门id集合 - */ - @NotNull(message = "部门id不能为空", groups = AddGroup.class) - @TableField(value = "dept_ids",typeHandler = ListTypeHandler.class) - List departIds; -} diff --git a/dk-modules/workflow/src/main/java/org/dromara/workflow/domain/vo/FlowDefinitionVo.java b/dk-modules/workflow/src/main/java/org/dromara/workflow/domain/vo/FlowDefinitionVo.java index a235d22..d9fcc2b 100644 --- a/dk-modules/workflow/src/main/java/org/dromara/workflow/domain/vo/FlowDefinitionVo.java +++ b/dk-modules/workflow/src/main/java/org/dromara/workflow/domain/vo/FlowDefinitionVo.java @@ -103,5 +103,5 @@ public class FlowDefinitionVo implements Serializable { */ private String ext; - private List deptIds; + private List labelIds; } diff --git a/dk-modules/workflow/src/main/java/org/dromara/workflow/dubbo/RemoteWorkflowServiceImpl.java b/dk-modules/workflow/src/main/java/org/dromara/workflow/dubbo/RemoteWorkflowServiceImpl.java index c5e2d02..9ecd7b0 100644 --- a/dk-modules/workflow/src/main/java/org/dromara/workflow/dubbo/RemoteWorkflowServiceImpl.java +++ b/dk-modules/workflow/src/main/java/org/dromara/workflow/dubbo/RemoteWorkflowServiceImpl.java @@ -1,21 +1,20 @@ package org.dromara.workflow.dubbo; -import cn.dev33.satoken.stp.StpUtil; import lombok.RequiredArgsConstructor; import org.apache.dubbo.config.annotation.DubboService; import org.dromara.system.api.domain.vo.RemoteUserVo; import org.dromara.workflow.api.RemoteWorkflowService; -import org.dromara.workflow.api.domain.FlowDepartVo; +import org.dromara.workflow.api.domain.FlowLabelVo; import org.dromara.workflow.api.domain.RemoteCompleteTask; import org.dromara.workflow.api.domain.RemoteStartProcess; import org.dromara.workflow.api.domain.RemoteStartProcessReturn; +import org.dromara.workflow.service.IFlwDefinitionService; import org.dromara.workflow.service.IFlwTaskService; import org.dromara.workflow.service.WorkflowService; import org.springframework.stereotype.Service; import java.util.List; import java.util.Map; -import java.util.concurrent.CompletableFuture; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; @@ -34,6 +33,8 @@ public class RemoteWorkflowServiceImpl implements RemoteWorkflowService { private final IFlwTaskService flwTaskService; + private final IFlwDefinitionService flwDefinitionService; + private static final ExecutorService executor = Executors.newFixedThreadPool(10); @Override @@ -102,8 +103,8 @@ public class RemoteWorkflowServiceImpl implements RemoteWorkflowService { } @Override - public FlowDepartVo getFlowDepart(Long deptId) { - return flwTaskService.getFlowDepart(deptId); + public String getFlowCode(String postCode){ + return flwDefinitionService.getFlowCode(postCode); } @Override diff --git a/dk-modules/workflow/src/main/java/org/dromara/workflow/handler/FlwAlertHandler.java b/dk-modules/workflow/src/main/java/org/dromara/workflow/handler/FlwAlertHandler.java index 3554140..bbae4a6 100644 --- a/dk-modules/workflow/src/main/java/org/dromara/workflow/handler/FlwAlertHandler.java +++ b/dk-modules/workflow/src/main/java/org/dromara/workflow/handler/FlwAlertHandler.java @@ -34,7 +34,11 @@ public class FlwAlertHandler implements FlwCommonHandler { @EventListener(condition = "#processEvent.flowCode.startsWith('alert')") @Override public void processHandler(ProcessEvent processEvent) { - alertService.updateAlertStatus(processEvent.getBusinessId(),processEvent.getStatus(),processEvent.getIsIllegal(),processEvent.getAlertType(),null,null); + String message = null; + if (ObjectUtil.isNotEmpty(processEvent.getParams())){ + message = processEvent.getParams().get("message").toString(); + } + alertService.updateAlertStatus(processEvent.getBusinessId(),processEvent.getStatus(),processEvent.getIsIllegal(),processEvent.getAlertType(),message,null); } /** diff --git a/dk-modules/workflow/src/main/java/org/dromara/workflow/handler/ListTypeHandler.java b/dk-modules/workflow/src/main/java/org/dromara/workflow/handler/ListTypeHandler.java index f63591d..d367369 100644 --- a/dk-modules/workflow/src/main/java/org/dromara/workflow/handler/ListTypeHandler.java +++ b/dk-modules/workflow/src/main/java/org/dromara/workflow/handler/ListTypeHandler.java @@ -16,36 +16,36 @@ import java.util.List; @MappedJdbcTypes(JdbcType.VARCHAR) @MappedTypes({List.class}) -public class ListTypeHandler implements TypeHandler> { +public class ListTypeHandler implements TypeHandler> { @Override - public void setParameter(PreparedStatement ps, int i, List list, JdbcType jdbcType) throws SQLException { + public void setParameter(PreparedStatement ps, int i, List list, JdbcType jdbcType) throws SQLException { ps.setString(i, JsonUtil.toJson(list)); } @Override - public List getResult(ResultSet rs, String columnName) throws SQLException { + public List getResult(ResultSet rs, String columnName) throws SQLException { if (StringUtils.isBlank(rs.getString(columnName))) { return new ArrayList<>(); } - return JsonUtil.jsonToList(rs.getString(columnName), Long.class); + return JsonUtil.jsonToList(rs.getString(columnName), String.class); } @Override - public List getResult(ResultSet rs, int columnIndex) throws SQLException { + public List getResult(ResultSet rs, int columnIndex) throws SQLException { if (StringUtils.isBlank(rs.getString(columnIndex))) { return new ArrayList<>(); } - return JsonUtil.jsonToList(rs.getString(columnIndex), Long.class); + return JsonUtil.jsonToList(rs.getString(columnIndex), String.class); } @Override - public List getResult(CallableStatement cs, int columnIndex) throws SQLException { + public List getResult(CallableStatement cs, int columnIndex) throws SQLException { String value = cs.getString(columnIndex); if (StringUtils.isBlank(value)) { return new ArrayList<>(); } - return JsonUtil.jsonToList(value, Long.class); + return JsonUtil.jsonToList(value, String.class); } } diff --git a/dk-modules/workflow/src/main/java/org/dromara/workflow/mapper/FlwCategoryMapper.java b/dk-modules/workflow/src/main/java/org/dromara/workflow/mapper/FlwCategoryMapper.java index d2c0b3a..d48d4cb 100644 --- a/dk-modules/workflow/src/main/java/org/dromara/workflow/mapper/FlwCategoryMapper.java +++ b/dk-modules/workflow/src/main/java/org/dromara/workflow/mapper/FlwCategoryMapper.java @@ -1,6 +1,7 @@ package org.dromara.workflow.mapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import org.apache.ibatis.annotations.Param; import org.dromara.common.mybatis.annotation.DataColumn; import org.dromara.common.mybatis.annotation.DataPermission; import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; @@ -57,4 +58,5 @@ public interface FlwCategoryMapper extends BaseMapperPlus { - FlowDepart getFlowDepart(@Param("deptId") Long deptId); - - Integer checkFlowDepart(@Param("deptIds") List departIds); -} diff --git a/dk-modules/workflow/src/main/java/org/dromara/workflow/service/FlwDepartService.java b/dk-modules/workflow/src/main/java/org/dromara/workflow/service/FlwDepartService.java deleted file mode 100644 index c8c478a..0000000 --- a/dk-modules/workflow/src/main/java/org/dromara/workflow/service/FlwDepartService.java +++ /dev/null @@ -1,11 +0,0 @@ -package org.dromara.workflow.service; - -import org.dromara.workflow.domain.FlowDepart; - -public interface FlwDepartService { - FlowDepart getInfo(String flowCode); - - FlowDepart bindDepart(FlowDepart flowDepart); - - FlowDepart getFlowDepart(Long deptId); -} diff --git a/dk-modules/workflow/src/main/java/org/dromara/workflow/service/IFlwDefinitionService.java b/dk-modules/workflow/src/main/java/org/dromara/workflow/service/IFlwDefinitionService.java index 1a2d29f..79eb252 100644 --- a/dk-modules/workflow/src/main/java/org/dromara/workflow/service/IFlwDefinitionService.java +++ b/dk-modules/workflow/src/main/java/org/dromara/workflow/service/IFlwDefinitionService.java @@ -76,4 +76,7 @@ public interface IFlwDefinitionService { * @param tenantId 租户id */ void syncDef(String tenantId); + + String getFlowCode(String postCode); + } diff --git a/dk-modules/workflow/src/main/java/org/dromara/workflow/service/IFlwTaskService.java b/dk-modules/workflow/src/main/java/org/dromara/workflow/service/IFlwTaskService.java index e21c6c8..8564763 100644 --- a/dk-modules/workflow/src/main/java/org/dromara/workflow/service/IFlwTaskService.java +++ b/dk-modules/workflow/src/main/java/org/dromara/workflow/service/IFlwTaskService.java @@ -3,20 +3,15 @@ package org.dromara.workflow.service; import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.system.api.domain.vo.RemoteUserVo; -import org.dromara.warm.flow.core.dto.FlowParams; import org.dromara.warm.flow.core.entity.Node; -import org.dromara.warm.flow.core.entity.Task; -import org.dromara.warm.flow.core.service.impl.TaskServiceImpl; import org.dromara.warm.flow.orm.entity.FlowHisTask; -import org.dromara.warm.flow.orm.entity.FlowNode; import org.dromara.warm.flow.orm.entity.FlowTask; -import org.dromara.workflow.api.domain.FlowDepartVo; +import org.dromara.workflow.api.domain.FlowLabelVo; import org.dromara.workflow.api.domain.RemoteStartProcessReturn; import org.dromara.workflow.domain.bo.*; import org.dromara.workflow.domain.vo.FlowHisTaskVo; import org.dromara.workflow.domain.vo.FlowTaskVo; -import java.util.Collections; import java.util.List; import java.util.Map; @@ -212,10 +207,4 @@ public interface IFlwTaskService { */ List getByNodeCodes(String nodeCode,Long definitionId); - /** - * 根据部门获取流程 - * @param deptId - * @return - */ - FlowDepartVo getFlowDepart(Long deptId); } diff --git a/dk-modules/workflow/src/main/java/org/dromara/workflow/service/impl/FlwDefinitionServiceImpl.java b/dk-modules/workflow/src/main/java/org/dromara/workflow/service/impl/FlwDefinitionServiceImpl.java index 08901e9..9af6154 100644 --- a/dk-modules/workflow/src/main/java/org/dromara/workflow/service/impl/FlwDefinitionServiceImpl.java +++ b/dk-modules/workflow/src/main/java/org/dromara/workflow/service/impl/FlwDefinitionServiceImpl.java @@ -32,10 +32,10 @@ import org.dromara.warm.flow.orm.mapper.FlowSkipMapper; import org.dromara.workflow.common.ConditionalOnEnable; import org.dromara.workflow.common.constant.FlowConstant; import org.dromara.workflow.domain.FlowCategory; -import org.dromara.workflow.domain.FlowDepart; +import org.dromara.workflow.domain.FlowLabel; import org.dromara.workflow.domain.vo.FlowDefinitionVo; import org.dromara.workflow.mapper.FlwCategoryMapper; -import org.dromara.workflow.service.FlwDepartService; +import org.dromara.workflow.service.FlwLabelService; import org.dromara.workflow.service.IFlwDefinitionService; import org.dromara.workflow.utils.WorkflowUtils; import org.springframework.stereotype.Service; @@ -67,7 +67,6 @@ public class FlwDefinitionServiceImpl implements IFlwDefinitionService { private final FlowNodeMapper flowNodeMapper; private final FlowSkipMapper flowSkipMapper; private final FlwCategoryMapper flwCategoryMapper; - private final FlwDepartService flwDepartService; /** * 查询流程定义列表 @@ -84,12 +83,6 @@ public class FlwDefinitionServiceImpl implements IFlwDefinitionService { TableDataInfo build = TableDataInfo.build(); build.setRows(BeanUtil.copyToList(page.getRecords(), FlowDefinitionVo.class)); build.setTotal(page.getTotal()); - build.getRows().forEach(p ->{ - FlowDepart info = flwDepartService.getInfo(p.getFlowCode()); - if(ObjectUtil.isNotEmpty(info)){ - p.setDeptIds(info.getDepartIds()); - } - }); return build; } @@ -278,4 +271,9 @@ public class FlwDefinitionServiceImpl implements IFlwDefinitionService { } } } + + @Override + public String getFlowCode(String postCode) { + return flwCategoryMapper.getFlowCode(postCode); + } } diff --git a/dk-modules/workflow/src/main/java/org/dromara/workflow/service/impl/FlwDepartServiceImpl.java b/dk-modules/workflow/src/main/java/org/dromara/workflow/service/impl/FlwDepartServiceImpl.java deleted file mode 100644 index 5cfb40c..0000000 --- a/dk-modules/workflow/src/main/java/org/dromara/workflow/service/impl/FlwDepartServiceImpl.java +++ /dev/null @@ -1,49 +0,0 @@ -package org.dromara.workflow.service.impl; - -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import lombok.RequiredArgsConstructor; -import org.dromara.common.core.exception.ServiceException; -import org.dromara.workflow.domain.FlowDepart; -import org.dromara.workflow.mapper.FlwDepartMapper; -import org.dromara.workflow.service.FlwDepartService; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import java.util.Map; - -@Service -@RequiredArgsConstructor -public class FlwDepartServiceImpl extends ServiceImpl implements FlwDepartService { - - - @Override - public FlowDepart getInfo(String flowCode) { - LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); - wrapper.eq(FlowDepart::getFlowCode, flowCode); - - return this.baseMapper.selectOne(wrapper); - } - - @Transactional(rollbackFor = Exception.class) - @Override - public FlowDepart bindDepart(FlowDepart flowDepart) { - LambdaQueryWrapper updateWrapper = new LambdaQueryWrapper<>(); - updateWrapper.eq(FlowDepart::getFlowCode, flowDepart.getFlowCode()); - this.baseMapper.delete(updateWrapper); - - //查询部门是否还存在别的流程 - if (this.baseMapper.checkFlowDepart(flowDepart.getDepartIds()) > 0){ - throw new ServiceException("所选的部门中,已存在在其他流程中,请检查后在提交!"); - } - - this.baseMapper.insert(flowDepart); - - return flowDepart; - } - - @Override - public FlowDepart getFlowDepart(Long deptId) { - return this.baseMapper.getFlowDepart(deptId); - } -} diff --git a/dk-modules/workflow/src/main/java/org/dromara/workflow/service/impl/FlwInstanceServiceImpl.java b/dk-modules/workflow/src/main/java/org/dromara/workflow/service/impl/FlwInstanceServiceImpl.java index 62bf673..3e5152c 100644 --- a/dk-modules/workflow/src/main/java/org/dromara/workflow/service/impl/FlwInstanceServiceImpl.java +++ b/dk-modules/workflow/src/main/java/org/dromara/workflow/service/impl/FlwInstanceServiceImpl.java @@ -256,7 +256,8 @@ public class FlwInstanceServiceImpl implements IFlwInstanceService { WorkflowUtils.deleteRunTask(StreamUtils.toList(currentTaskList, Task::getId)); } } - + //删除流程实例 + this.deleteByInstanceIds(List.of(instance.getId())); } catch (Exception e) { log.error("撤销失败: {}", e.getMessage(), e); throw new ServiceException(e.getMessage()); diff --git a/dk-modules/workflow/src/main/java/org/dromara/workflow/service/impl/FlwTaskServiceImpl.java b/dk-modules/workflow/src/main/java/org/dromara/workflow/service/impl/FlwTaskServiceImpl.java index e149a0d..deaedb7 100644 --- a/dk-modules/workflow/src/main/java/org/dromara/workflow/service/impl/FlwTaskServiceImpl.java +++ b/dk-modules/workflow/src/main/java/org/dromara/workflow/service/impl/FlwTaskServiceImpl.java @@ -13,7 +13,6 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.dubbo.config.annotation.DubboReference; -import org.dromara.business.api.RemoteBusinessAlertService; import org.dromara.common.core.enums.BusinessStatusEnum; import org.dromara.common.core.exception.ServiceException; import org.dromara.common.core.utils.SpringUtils; @@ -22,13 +21,9 @@ import org.dromara.common.core.utils.StringUtils; import org.dromara.common.core.utils.ValidatorUtils; import org.dromara.common.core.validate.AddGroup; import org.dromara.common.core.validate.EditGroup; -import org.dromara.common.mail.utils.MailUtils; import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.satoken.utils.LoginHelper; -import org.dromara.common.sse.dto.SseMessageDto; -import org.dromara.common.sse.utils.SseMessageUtils; -import org.dromara.resource.api.RemoteMessageService; import org.dromara.system.api.RemoteUserService; import org.dromara.system.api.domain.vo.RemoteUserVo; import org.dromara.warm.flow.core.dto.FlowParams; @@ -40,13 +35,13 @@ import org.dromara.warm.flow.orm.entity.*; import org.dromara.warm.flow.orm.mapper.FlowHisTaskMapper; import org.dromara.warm.flow.orm.mapper.FlowInstanceMapper; import org.dromara.warm.flow.orm.mapper.FlowTaskMapper; -import org.dromara.workflow.api.domain.FlowDepartVo; +import org.dromara.workflow.api.domain.FlowLabelVo; import org.dromara.workflow.api.domain.RemoteStartProcessReturn; import org.dromara.workflow.common.ConditionalOnEnable; import org.dromara.workflow.common.enums.MessageTypeEnum; import org.dromara.workflow.common.enums.TaskAssigneeType; import org.dromara.workflow.common.enums.TaskStatusEnum; -import org.dromara.workflow.domain.FlowDepart; +import org.dromara.workflow.domain.FlowLabel; import org.dromara.workflow.domain.bo.*; import org.dromara.workflow.domain.vo.FlowHisTaskVo; import org.dromara.workflow.domain.vo.FlowTaskVo; @@ -54,7 +49,7 @@ import org.dromara.workflow.handler.FlowProcessEventHandler; import org.dromara.workflow.handler.WorkflowPermissionHandler; import org.dromara.workflow.mapper.FlwCategoryMapper; import org.dromara.workflow.mapper.FlwTaskMapper; -import org.dromara.workflow.service.FlwDepartService; +import org.dromara.workflow.service.FlwLabelService; import org.dromara.workflow.service.IFlwTaskService; import org.dromara.workflow.utils.WorkflowUtils; import org.springframework.beans.BeanUtils; @@ -65,8 +60,6 @@ import org.springframework.transaction.annotation.Transactional; import java.math.BigDecimal; import java.util.*; -import java.util.concurrent.ScheduledExecutorService; -import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; import static org.dromara.workflow.common.constant.FlowConstant.*; @@ -94,7 +87,7 @@ public class FlwTaskServiceImpl implements IFlwTaskService { private final FlowProcessEventHandler flowProcessEventHandler; private final FlwTaskMapper flwTaskMapper; private final FlwCategoryMapper flwCategoryMapper; - private final FlwDepartService flwDepartService; + private final FlwLabelService flwDepartService; @DubboReference private RemoteUserService remoteUserService; @@ -328,13 +321,6 @@ public class FlwTaskServiceImpl implements IFlwTaskService { return nodeService.getByNodeCodes(Collections.singletonList(nodeCode), definitionId); } - @Override - public FlowDepartVo getFlowDepart(Long deptId) { - FlowDepart flowDepart = flwDepartService.getFlowDepart(deptId); - FlowDepartVo flowDepartVo = new FlowDepartVo(); - BeanUtils.copyProperties(flowDepart, flowDepartVo); - return flowDepartVo; - } /** * 查询当前用户的已办任务 diff --git a/dk-modules/workflow/src/main/resources/mapper/workflow/FlwCategoryMapper.xml b/dk-modules/workflow/src/main/resources/mapper/workflow/FlwCategoryMapper.xml index e9918f1..95ae1de 100644 --- a/dk-modules/workflow/src/main/resources/mapper/workflow/FlwCategoryMapper.xml +++ b/dk-modules/workflow/src/main/resources/mapper/workflow/FlwCategoryMapper.xml @@ -8,4 +8,8 @@ select count(*) from flow_category where del_flag = '0' and category_id = #{categoryId} + + diff --git a/dk-modules/workflow/src/main/resources/mapper/workflow/FlwDepartMapper.xml b/dk-modules/workflow/src/main/resources/mapper/workflow/FlwDepartMapper.xml deleted file mode 100644 index e8d2908..0000000 --- a/dk-modules/workflow/src/main/resources/mapper/workflow/FlwDepartMapper.xml +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - - - - - diff --git a/pom.xml b/pom.xml index 699db26..7555b9f 100644 --- a/pom.xml +++ b/pom.xml @@ -16,7 +16,7 @@ 2.2.2 UTF-8 UTF-8 - 21 + 17 3.2.11 2023.0.3 3.2.3 @@ -85,7 +85,7 @@ dev - wuyuan + dev 127.0.0.1:8848 DEFAULT_GROUP DEFAULT_GROUP @@ -472,6 +472,16 @@ + + org.apache.maven.plugins + maven-compiler-plugin + 3.1 + + ${java.version} + ${java.version} + ${project.build.sourceEncoding} + + org.apache.maven.plugins @@ -511,6 +521,10 @@ + + org.springframework.boot + spring-boot-maven-plugin + @@ -600,5 +614,7 @@ + + From 678106e643f4b27f0c055b472660ca7ffc878444 Mon Sep 17 00:00:00 2001 From: wuyuan <15505152113@163.com> Date: Sun, 30 Mar 2025 13:15:50 +0800 Subject: [PATCH 08/12] 11 --- .../workflow/api/domain/FlowLabelVo.java | 22 ++++++++ .../wayline/model/dto/AiCompareAlertDTO.java | 29 +++++++++++ .../controller/FlwLabelController.java | 46 +++++++++++++++++ .../dromara/workflow/domain/FlowLabel.java | 42 ++++++++++++++++ .../workflow/mapper/FlwLabelMapper.java | 13 +++++ .../workflow/service/FlwLabelService.java | 11 ++++ .../service/impl/FlwLabelServiceImpl.java | 50 +++++++++++++++++++ .../mapper/workflow/FlwLabelMapper.xml | 22 ++++++++ 8 files changed, 235 insertions(+) create mode 100644 dk-api/api-workflow/src/main/java/org/dromara/workflow/api/domain/FlowLabelVo.java create mode 100644 dk-modules/sample/src/main/java/org/dromara/sample/wayline/model/dto/AiCompareAlertDTO.java create mode 100644 dk-modules/workflow/src/main/java/org/dromara/workflow/controller/FlwLabelController.java create mode 100644 dk-modules/workflow/src/main/java/org/dromara/workflow/domain/FlowLabel.java create mode 100644 dk-modules/workflow/src/main/java/org/dromara/workflow/mapper/FlwLabelMapper.java create mode 100644 dk-modules/workflow/src/main/java/org/dromara/workflow/service/FlwLabelService.java create mode 100644 dk-modules/workflow/src/main/java/org/dromara/workflow/service/impl/FlwLabelServiceImpl.java create mode 100644 dk-modules/workflow/src/main/resources/mapper/workflow/FlwLabelMapper.xml diff --git a/dk-api/api-workflow/src/main/java/org/dromara/workflow/api/domain/FlowLabelVo.java b/dk-api/api-workflow/src/main/java/org/dromara/workflow/api/domain/FlowLabelVo.java new file mode 100644 index 0000000..a67987f --- /dev/null +++ b/dk-api/api-workflow/src/main/java/org/dromara/workflow/api/domain/FlowLabelVo.java @@ -0,0 +1,22 @@ +package org.dromara.workflow.api.domain; + +import lombok.Data; + +@Data +public class FlowLabelVo { + + + private Long id; + + /** + * 流程类型 + */ + private String flowType; + + /** + * 流程编码 + */ + private String flowCode; + + +} diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/wayline/model/dto/AiCompareAlertDTO.java b/dk-modules/sample/src/main/java/org/dromara/sample/wayline/model/dto/AiCompareAlertDTO.java new file mode 100644 index 0000000..89e54e1 --- /dev/null +++ b/dk-modules/sample/src/main/java/org/dromara/sample/wayline/model/dto/AiCompareAlertDTO.java @@ -0,0 +1,29 @@ +package org.dromara.sample.wayline.model.dto; + +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.dromara.business.api.domain.bo.RemoteBusinessAlertBo; +import org.dromara.business.api.domain.vo.RemoteBusinessAlertVo; +import org.dromara.sample.wayline.model.entity.AiComparePlateEntity; + +import java.util.List; + +/** + * @auther yq + * @data 2025/3/29 + */ +@Data +@EqualsAndHashCode() +public class AiCompareAlertDTO { + + private String fileId; + private String compareId; + + private String jobId; + private String jobName; + + private String discernImgUrl; + + private List handleList; +} diff --git a/dk-modules/workflow/src/main/java/org/dromara/workflow/controller/FlwLabelController.java b/dk-modules/workflow/src/main/java/org/dromara/workflow/controller/FlwLabelController.java new file mode 100644 index 0000000..e520b9d --- /dev/null +++ b/dk-modules/workflow/src/main/java/org/dromara/workflow/controller/FlwLabelController.java @@ -0,0 +1,46 @@ +package org.dromara.workflow.controller; + + +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; +import org.dromara.common.core.domain.R; +import org.dromara.common.core.validate.AddGroup; +import org.dromara.workflow.common.ConditionalOnEnable; +import org.dromara.workflow.domain.FlowLabel; +import org.dromara.workflow.service.FlwLabelService; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +@Tag(name = "流程部门管理") +@ConditionalOnEnable +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/flow/label") +public class FlwLabelController { + + + private final FlwLabelService flwDepartService; + + /** + * 查询流程标签关系 + * flowCode + */ + @Operation(summary = "查询流程标签关系",description = "查询流程标签关系") + @GetMapping("/{flowCode}/getInfo") + public R getInfo(@PathVariable String flowCode) { + return R.ok(flwDepartService.getInfo(flowCode)); + } + + + /** + * 绑定流程标签关系 + * flowCode + */ + @Operation(summary = "绑定流程标签关系",description = "绑定流程标签关系") + @PostMapping("/bind/label") + public R bindLabel(@Validated({AddGroup.class}) @RequestBody FlowLabel flowLabel) { + return R.ok(flwDepartService.bindLabel(flowLabel)); + } +} diff --git a/dk-modules/workflow/src/main/java/org/dromara/workflow/domain/FlowLabel.java b/dk-modules/workflow/src/main/java/org/dromara/workflow/domain/FlowLabel.java new file mode 100644 index 0000000..d04d1ee --- /dev/null +++ b/dk-modules/workflow/src/main/java/org/dromara/workflow/domain/FlowLabel.java @@ -0,0 +1,42 @@ +package org.dromara.workflow.domain; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import jakarta.validation.constraints.NotNull; +import lombok.Data; +import org.dromara.common.core.validate.AddGroup; +import org.dromara.workflow.handler.ListTypeHandler; + +import java.util.List; + +/** + * 部门流程关系表 + */ +@Data +@TableName(value = "flow_label",autoResultMap = true) +public class FlowLabel { + + + @TableId(type = IdType.ASSIGN_ID) + private Long id; + + + /** + * 流程编码 + */ + @NotNull(message = "流程编码不能为空", groups = AddGroup.class) + private String flowCode; + + /** + * 租户编号 + */ + private String tenantId; + + /** + * 部门id集合 + */ + @TableField(value = "label_ids",typeHandler = ListTypeHandler.class) + List labelIds; +} diff --git a/dk-modules/workflow/src/main/java/org/dromara/workflow/mapper/FlwLabelMapper.java b/dk-modules/workflow/src/main/java/org/dromara/workflow/mapper/FlwLabelMapper.java new file mode 100644 index 0000000..34900e1 --- /dev/null +++ b/dk-modules/workflow/src/main/java/org/dromara/workflow/mapper/FlwLabelMapper.java @@ -0,0 +1,13 @@ +package org.dromara.workflow.mapper; + +import org.apache.ibatis.annotations.Param; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; +import org.dromara.workflow.domain.FlowLabel; + +import java.util.List; + +public interface FlwLabelMapper extends BaseMapperPlus { + FlowLabel getFlowLabel(@Param("labelId") String labelId); + + Integer checkFlowLabel(@Param("labelIds") List labelIds); +} diff --git a/dk-modules/workflow/src/main/java/org/dromara/workflow/service/FlwLabelService.java b/dk-modules/workflow/src/main/java/org/dromara/workflow/service/FlwLabelService.java new file mode 100644 index 0000000..619edf8 --- /dev/null +++ b/dk-modules/workflow/src/main/java/org/dromara/workflow/service/FlwLabelService.java @@ -0,0 +1,11 @@ +package org.dromara.workflow.service; + +import org.dromara.workflow.domain.FlowLabel; + +public interface FlwLabelService { + FlowLabel getInfo(String flowCode); + + FlowLabel bindLabel(FlowLabel flowDepart); + + FlowLabel getFlowLabel(String labelId); +} diff --git a/dk-modules/workflow/src/main/java/org/dromara/workflow/service/impl/FlwLabelServiceImpl.java b/dk-modules/workflow/src/main/java/org/dromara/workflow/service/impl/FlwLabelServiceImpl.java new file mode 100644 index 0000000..1eebe4f --- /dev/null +++ b/dk-modules/workflow/src/main/java/org/dromara/workflow/service/impl/FlwLabelServiceImpl.java @@ -0,0 +1,50 @@ +package org.dromara.workflow.service.impl; + +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import lombok.RequiredArgsConstructor; +import org.dromara.common.core.exception.ServiceException; +import org.dromara.workflow.domain.FlowLabel; +import org.dromara.workflow.mapper.FlwLabelMapper; +import org.dromara.workflow.service.FlwLabelService; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@Service +@RequiredArgsConstructor +public class FlwLabelServiceImpl extends ServiceImpl implements FlwLabelService { + + + @Override + public FlowLabel getInfo(String flowCode) { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(FlowLabel::getFlowCode, flowCode); + + return this.baseMapper.selectOne(wrapper); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public FlowLabel bindLabel(FlowLabel flowDepart) { + LambdaQueryWrapper updateWrapper = new LambdaQueryWrapper<>(); + updateWrapper.eq(FlowLabel::getFlowCode, flowDepart.getFlowCode()); + this.baseMapper.delete(updateWrapper); + + if (ObjectUtil.isNotEmpty(flowDepart.getLabelIds())) { + //查询部门是否还存在别的流程 + if (this.baseMapper.checkFlowLabel(flowDepart.getLabelIds()) > 0){ + throw new ServiceException("所选的标签中,已存在在其他流程中,请检查后在提交!"); + } + + this.baseMapper.insert(flowDepart); + } + + return flowDepart; + } + + @Override + public FlowLabel getFlowLabel(String labelId) { + return this.baseMapper.getFlowLabel(labelId); + } +} diff --git a/dk-modules/workflow/src/main/resources/mapper/workflow/FlwLabelMapper.xml b/dk-modules/workflow/src/main/resources/mapper/workflow/FlwLabelMapper.xml new file mode 100644 index 0000000..ad82fca --- /dev/null +++ b/dk-modules/workflow/src/main/resources/mapper/workflow/FlwLabelMapper.xml @@ -0,0 +1,22 @@ + + + + + + + + + + From 179b2dd68c174a9b5e395efe3a7be2d7fb7c403c Mon Sep 17 00:00:00 2001 From: wuyuan <15505152113@163.com> Date: Sun, 30 Mar 2025 13:18:29 +0800 Subject: [PATCH 09/12] 11 --- dk-modules/sample/pom.xml | 1 - 1 file changed, 1 deletion(-) diff --git a/dk-modules/sample/pom.xml b/dk-modules/sample/pom.xml index 83d5fb0..bd050ec 100644 --- a/dk-modules/sample/pom.xml +++ b/dk-modules/sample/pom.xml @@ -7,7 +7,6 @@ dk-modules ${revision} - pom 4.0.0 sample From 41cb9680fc76a4d70ebe1f59790674e4e128ddbf Mon Sep 17 00:00:00 2001 From: wuyuan <15505152113@163.com> Date: Sun, 30 Mar 2025 13:21:33 +0800 Subject: [PATCH 10/12] 11 --- .../sample/dubbo/RemoteJobServiceImpl.java | 30 ------------------- 1 file changed, 30 deletions(-) delete mode 100644 dk-modules/sample/src/main/java/org/dromara/sample/dubbo/RemoteJobServiceImpl.java diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/dubbo/RemoteJobServiceImpl.java b/dk-modules/sample/src/main/java/org/dromara/sample/dubbo/RemoteJobServiceImpl.java deleted file mode 100644 index 42e4da4..0000000 --- a/dk-modules/sample/src/main/java/org/dromara/sample/dubbo/RemoteJobServiceImpl.java +++ /dev/null @@ -1,30 +0,0 @@ -package org.dromara.sample.dubbo; - -import lombok.RequiredArgsConstructor; -import org.apache.dubbo.config.annotation.DubboService; -import org.dromara.common.core.utils.MapstructUtils; -import org.dromara.sample.api.RemoteJobService; -import org.dromara.sample.api.domain.vo.RemoteMediaFileVo; -import org.dromara.sample.media.model.MediaFileEntity; -import org.dromara.sample.media.service.IFileService; -import org.springframework.stereotype.Service; - -import java.util.List; - -/** - * @auther yq - * @data 2025/3/30 - */ -@RequiredArgsConstructor -@Service -@DubboService -public class RemoteJobServiceImpl implements RemoteJobService { - private final IFileService fileService; - - @Override - public List getRemoteMediaFileVo(String jobId, String fileType) { - List remoteMediaFileVo = fileService.getRemoteMediaFileVo(jobId, fileType); - List mediaFileEntities = MapstructUtils.convert(remoteMediaFileVo, RemoteMediaFileVo.class); - return mediaFileEntities; - } -} From 793a5bca70f156a97cdcf99953d6e9af308f9873 Mon Sep 17 00:00:00 2001 From: wuyuan <15505152113@163.com> Date: Sun, 30 Mar 2025 18:19:57 +0800 Subject: [PATCH 11/12] 11 --- .../sdk/mqtt/state/DockStateDataKeyEnum.java | 3 + dk-common/common-websocket/pom.xml | 18 ++ .../websocket/ConcurrentWebSocketSession.java | 25 +++ .../websocket/WebSocketConfiguration.java | 40 ++++ .../websocket/WebSocketDefaultFactory.java | 20 ++ .../websocket/WebSocketDefaultHandler.java | 40 ++++ .../websocket/WebSocketMessageResponse.java | 84 ++++++++ .../websocket/api/WebSocketMessageSend.java | 64 ++++++ .../websocket/config/WebSocketConfig.java | 71 ------- .../properties/WebSocketProperties.java | 26 --- .../constant/WebSocketConstants.java | 29 --- .../handler/PlusWebSocketHandler.java | 135 ------------- .../holder/WebSocketSessionHolder.java | 70 ------- .../interceptor/PlusWebSocketInterceptor.java | 58 ------ .../listener/WebSocketTopicListener.java | 54 ----- .../websocket/utils/WebSocketUtils.java | 185 ------------------ .../GlobalThreadPoolConfiguration.java | 2 +- .../service/impl/SDKControlService.java | 38 ++-- .../control/service/impl/SDKRemoteDebug.java | 6 +- .../service/impl/DeviceHmsServiceImpl.java | 7 +- .../service/impl/DeviceLogsServiceImpl.java | 7 +- .../service/impl/FlightAreaServiceImpl.java | 15 +- .../impl/WorkspaceElementServiceImpl.java | 15 +- .../media/service/impl/MediaServiceImpl.java | 9 +- .../service/impl/SDKWaylineService.java | 8 +- .../service/impl/WaylineFileServiceImpl.java | 1 - .../config/MyConcurrentWebSocketSession.java | 2 +- .../websocket/config/MyWebSocketFactory.java | 27 +++ .../websocket/config/MyWebSocketHandler.java | 58 ++++++ .../sample/websocket/model/BizCodeEnum.java | 93 +++++++++ .../service/IWebSocketManageService.java | 26 +++ .../service/IWebSocketMessageService.java | 33 ++++ .../impl/WebSocketManageServiceImpl.java | 86 ++++++++ .../impl/WebSocketMessageServiceImpl.java | 99 ++++++++++ pom.xml | 4 +- 35 files changed, 783 insertions(+), 675 deletions(-) create mode 100644 dk-common/common-websocket/src/main/java/org/dromara/common/websocket/ConcurrentWebSocketSession.java create mode 100644 dk-common/common-websocket/src/main/java/org/dromara/common/websocket/WebSocketConfiguration.java create mode 100644 dk-common/common-websocket/src/main/java/org/dromara/common/websocket/WebSocketDefaultFactory.java create mode 100644 dk-common/common-websocket/src/main/java/org/dromara/common/websocket/WebSocketDefaultHandler.java create mode 100644 dk-common/common-websocket/src/main/java/org/dromara/common/websocket/WebSocketMessageResponse.java create mode 100644 dk-common/common-websocket/src/main/java/org/dromara/common/websocket/api/WebSocketMessageSend.java delete mode 100644 dk-common/common-websocket/src/main/java/org/dromara/common/websocket/config/WebSocketConfig.java delete mode 100644 dk-common/common-websocket/src/main/java/org/dromara/common/websocket/config/properties/WebSocketProperties.java delete mode 100644 dk-common/common-websocket/src/main/java/org/dromara/common/websocket/constant/WebSocketConstants.java delete mode 100644 dk-common/common-websocket/src/main/java/org/dromara/common/websocket/handler/PlusWebSocketHandler.java delete mode 100644 dk-common/common-websocket/src/main/java/org/dromara/common/websocket/holder/WebSocketSessionHolder.java delete mode 100644 dk-common/common-websocket/src/main/java/org/dromara/common/websocket/interceptor/PlusWebSocketInterceptor.java delete mode 100644 dk-common/common-websocket/src/main/java/org/dromara/common/websocket/listener/WebSocketTopicListener.java delete mode 100644 dk-common/common-websocket/src/main/java/org/dromara/common/websocket/utils/WebSocketUtils.java rename {dk-common/common-websocket/src/main/java/org/dromara/common => dk-modules/sample/src/main/java/org/dromara/sample}/websocket/config/MyConcurrentWebSocketSession.java (94%) create mode 100644 dk-modules/sample/src/main/java/org/dromara/sample/websocket/config/MyWebSocketFactory.java create mode 100644 dk-modules/sample/src/main/java/org/dromara/sample/websocket/config/MyWebSocketHandler.java create mode 100644 dk-modules/sample/src/main/java/org/dromara/sample/websocket/model/BizCodeEnum.java create mode 100644 dk-modules/sample/src/main/java/org/dromara/sample/websocket/service/IWebSocketManageService.java create mode 100644 dk-modules/sample/src/main/java/org/dromara/sample/websocket/service/IWebSocketMessageService.java create mode 100644 dk-modules/sample/src/main/java/org/dromara/sample/websocket/service/impl/WebSocketManageServiceImpl.java create mode 100644 dk-modules/sample/src/main/java/org/dromara/sample/websocket/service/impl/WebSocketMessageServiceImpl.java 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 39a2ad2..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 @@ -55,6 +55,9 @@ public enum DockStateDataKeyEnum { 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-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..7eb4af7 --- /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("/dkcyclog/sample/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-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/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/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/map/service/impl/FlightAreaServiceImpl.java b/dk-modules/sample/src/main/java/org/dromara/sample/map/service/impl/FlightAreaServiceImpl.java index d974a41..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()) @@ -188,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) @@ -225,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) @@ -259,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()) @@ -279,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<>(); } 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/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/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 0ed105b..d228af7 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 @@ -198,7 +198,6 @@ public class WaylineFileServiceImpl implements IWaylineFileService { OssClient storage = OssFactory.instance("waylinefile"); String originalfileName = file.getOriginalFilename(); String suffix = org.apache.commons.lang3.StringUtils.substring(originalfileName, originalfileName.lastIndexOf("."), originalfileName.length()); - suffix = "waylinefile/"+suffix; UploadResult uploadResult = storage.uploadSuffix(file.getBytes(), suffix, file.getContentType()); waylineFile.setObjectKey(uploadResult.getFilename()); List deviceSns = new ArrayList<>(); 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..35f1e38 --- /dev/null +++ b/dk-modules/sample/src/main/java/org/dromara/sample/websocket/config/MyWebSocketHandler.java @@ -0,0 +1,58 @@ +package org.dromara.sample.websocket.config; + +import lombok.extern.slf4j.Slf4j; +import org.dromara.common.websocket.WebSocketDefaultHandler; +import org.dromara.sample.websocket.service.IWebSocketManageService; +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; + +/** + * + * @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 { + Principal principal = session.getPrincipal(); + if (StringUtils.hasText(principal.getName())) { + webSocketManageService.put(principal.getName(), new MyConcurrentWebSocketSession(session)); + log.debug("{} is connected. ID: {}. WebSocketSession[current count: {}]", + principal.getName(), session.getId(), webSocketManageService.getConnectedCount()); + return; + } + session.close(); + } + + @Override + public void afterConnectionClosed(WebSocketSession session, CloseStatus closeStatus) throws Exception { + Principal principal = session.getPrincipal(); + if (StringUtils.hasText(principal.getName())) { + webSocketManageService.remove(principal.getName(), session.getId()); + log.debug("{} is disconnected. ID: {}. WebSocketSession[current count: {}]", + principal.getName(), 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..17bfaaa --- /dev/null +++ b/dk-modules/sample/src/main/java/org/dromara/sample/websocket/service/impl/WebSocketManageServiceImpl.java @@ -0,0 +1,86 @@ +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("/"); + if (name.length != 3) { + log.debug("The key is out of format. [{workspaceId}/{userType}/{userId}]"); + return; + } + String sessionId = val.getId(); + String workspaceKey = RedisConst.WEBSOCKET_PREFIX + name[0]; + String userTypeKey = RedisConst.WEBSOCKET_PREFIX + UserTypeEnum.find(Integer.parseInt(name[1])).getDesc(); + RedisOpsUtils.hashSet(workspaceKey, sessionId, name[2]); + RedisOpsUtils.hashSet(userTypeKey, sessionId, name[2]); + SESSIONS.put(sessionId, val); + RedisOpsUtils.expireKey(workspaceKey, RedisConst.WEBSOCKET_ALIVE_SECOND); + RedisOpsUtils.expireKey(userTypeKey, RedisConst.WEBSOCKET_ALIVE_SECOND); + } + + @Override + public void remove(String key, String sessionId) { + String[] name = key.split("/"); + if (name.length != 3) { + log.debug("The key is out of format. [{workspaceId}/{userType}/{userId}]"); + return; + } + RedisOpsUtils.hashDel(RedisConst.WEBSOCKET_PREFIX + name[0], new String[] {sessionId}); + RedisOpsUtils.hashDel(RedisConst.WEBSOCKET_PREFIX + UserTypeEnum.find(Integer.parseInt(name[1])).getDesc(), new String[] {sessionId}); + SESSIONS.remove(sessionId); + } + + @Override + public Collection getValueWithWorkspace(String workspaceId) { + if (!StringUtils.hasText(workspaceId)) { + return Collections.emptySet(); + } + String key = RedisConst.WEBSOCKET_PREFIX + workspaceId; + + 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 + UserTypeEnum.find(userType).getDesc(); + 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/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 From afa4b6c49285111b88e87508de12cc71be5c6dae Mon Sep 17 00:00:00 2001 From: wuyuan <15505152113@163.com> Date: Mon, 31 Mar 2025 09:57:36 +0800 Subject: [PATCH 12/12] 11 --- .../dromara/common/oss/core/OssClient.java | 11 +++++++- .../org/dromara/common/oss/factory/Minio.java | 4 +-- .../websocket/WebSocketConfiguration.java | 2 +- ...ot.autoconfigure.AutoConfiguration.imports | 1 - .../impl/DeviceFirmwareServiceImpl.java | 7 +++-- .../impl/DevicePayloadServiceImpl.java | 7 +++-- .../service/impl/DeviceServiceImpl.java | 15 ++++++----- .../service/impl/StorageServiceImpl.java | 2 +- .../service/impl/WaylineFileServiceImpl.java | 3 +-- .../websocket/config/MyWebSocketHandler.java | 27 +++++++++++++------ .../impl/WebSocketManageServiceImpl.java | 27 +++++-------------- 11 files changed, 60 insertions(+), 46 deletions(-) delete mode 100644 dk-common/common-websocket/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports 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/src/main/java/org/dromara/common/websocket/WebSocketConfiguration.java b/dk-common/common-websocket/src/main/java/org/dromara/common/websocket/WebSocketConfiguration.java index 7eb4af7..a7b19ed 100644 --- 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 @@ -28,7 +28,7 @@ public class WebSocketConfiguration implements WebSocketMessageBrokerConfigurer @Override public void registerStompEndpoints(StompEndpointRegistry registry) { // Set the WebSocket connection address - registry.addEndpoint("/dkcyclog/sample/websocket").setAllowedOriginPatterns("*") + registry.addEndpoint("/websocket").setAllowedOriginPatterns("*") .setHandshakeHandler(handshakeHandler); } 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/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/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/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/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-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 index 35f1e38..1a1b1c1 100644 --- 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 @@ -1,8 +1,14 @@ 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; @@ -11,6 +17,8 @@ import org.springframework.web.socket.WebSocketSession; import java.security.Principal; +import static org.dromara.common.satoken.utils.LoginHelper.LOGIN_USER_KEY; + /** * * @author sean.zhou @@ -29,11 +37,13 @@ public class MyWebSocketHandler extends WebSocketDefaultHandler { @Override public void afterConnectionEstablished(WebSocketSession session) throws Exception { - Principal principal = session.getPrincipal(); - if (StringUtils.hasText(principal.getName())) { - webSocketManageService.put(principal.getName(), new MyConcurrentWebSocketSession(session)); + + 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: {}]", - principal.getName(), session.getId(), webSocketManageService.getConnectedCount()); + sysUserOnline.getUserName(), session.getId(), webSocketManageService.getConnectedCount()); return; } session.close(); @@ -41,11 +51,12 @@ public class MyWebSocketHandler extends WebSocketDefaultHandler { @Override public void afterConnectionClosed(WebSocketSession session, CloseStatus closeStatus) throws Exception { - Principal principal = session.getPrincipal(); - if (StringUtils.hasText(principal.getName())) { - webSocketManageService.remove(principal.getName(), session.getId()); + 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: {}]", - principal.getName(), session.getId(), webSocketManageService.getConnectedCount()); + sysUserOnline.getUserName(), session.getId(), webSocketManageService.getConnectedCount()); } } 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 index 17bfaaa..c576b31 100644 --- 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 @@ -29,30 +29,17 @@ public class WebSocketManageServiceImpl implements IWebSocketManageService { @Override public void put(String key, MyConcurrentWebSocketSession val) { String[] name = key.split("/"); - if (name.length != 3) { - log.debug("The key is out of format. [{workspaceId}/{userType}/{userId}]"); - return; - } - String sessionId = val.getId(); - String workspaceKey = RedisConst.WEBSOCKET_PREFIX + name[0]; - String userTypeKey = RedisConst.WEBSOCKET_PREFIX + UserTypeEnum.find(Integer.parseInt(name[1])).getDesc(); - RedisOpsUtils.hashSet(workspaceKey, sessionId, name[2]); - RedisOpsUtils.hashSet(userTypeKey, sessionId, name[2]); - SESSIONS.put(sessionId, val); + String workspaceKey = RedisConst.WEBSOCKET_PREFIX; + RedisOpsUtils.hashSet(workspaceKey, name[0], name[0]); + SESSIONS.put(name[0], val); RedisOpsUtils.expireKey(workspaceKey, RedisConst.WEBSOCKET_ALIVE_SECOND); - RedisOpsUtils.expireKey(userTypeKey, RedisConst.WEBSOCKET_ALIVE_SECOND); } @Override public void remove(String key, String sessionId) { String[] name = key.split("/"); - if (name.length != 3) { - log.debug("The key is out of format. [{workspaceId}/{userType}/{userId}]"); - return; - } - RedisOpsUtils.hashDel(RedisConst.WEBSOCKET_PREFIX + name[0], new String[] {sessionId}); - RedisOpsUtils.hashDel(RedisConst.WEBSOCKET_PREFIX + UserTypeEnum.find(Integer.parseInt(name[1])).getDesc(), new String[] {sessionId}); - SESSIONS.remove(sessionId); + RedisOpsUtils.hashDel(RedisConst.WEBSOCKET_PREFIX , name); + SESSIONS.remove(name[0]); } @Override @@ -60,7 +47,7 @@ public class WebSocketManageServiceImpl implements IWebSocketManageService { if (!StringUtils.hasText(workspaceId)) { return Collections.emptySet(); } - String key = RedisConst.WEBSOCKET_PREFIX + workspaceId; + String key = RedisConst.WEBSOCKET_PREFIX; return RedisOpsUtils.hashKeys(key) .stream() @@ -71,7 +58,7 @@ public class WebSocketManageServiceImpl implements IWebSocketManageService { @Override public Collection getValueWithWorkspaceAndUserType(String workspaceId, Integer userType) { - String key = RedisConst.WEBSOCKET_PREFIX + UserTypeEnum.find(userType).getDesc(); + String key = RedisConst.WEBSOCKET_PREFIX; return RedisOpsUtils.hashKeys(key) .stream() .map(SESSIONS::get)