From 2eb6dc2775f49b65fdf156d1dacf25030c135542 Mon Sep 17 00:00:00 2001 From: wujiawei <12345678> Date: Wed, 30 Oct 2024 20:56:46 +0800 Subject: [PATCH] =?UTF-8?q?[fix]=20=20=20=20=20=20=20//=20TODO=20=E6=B5=81?= =?UTF-8?q?=E9=87=8F=E5=B9=B6=E5=8F=91=E5=BC=82=E5=B8=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...HandleReportStagingOpenedTypeAdvanced.java | 21 +++-- .../LazyNettyClientStateApplication.java | 24 ++++++ .../NettyClientStateDTOAssembler.java | 12 +++ .../dto/LazyNettyClientStateDTO.java | 11 ++- .../LazyNettyClientStateGroupByClientDTO.java | 81 +++++++++++++++++++ .../LazyClientStatsChangeApplicationImpl.java | 42 +++++++--- .../LazyNettyClientStateApplicationImpl.java | 36 +++++++++ .../LazyNettyClientStateProvider.java | 32 ++++++++ .../client/state/LazyNettyClientState.java | 13 ++- .../LazyNettyClientStateGroupByClient.java | 76 +++++++++++++++++ .../state/LazyNettyClientStateRepository.java | 23 ++++++ .../record/LazyNettyClientStateRecord.java | 13 ++- .../entity/LazyNettyClientStateDO.java | 13 ++- .../entity/LazyNettyClientStateRecordDO.java | 10 +++ .../LazyNettyClientStateRepositoryImpl.java | 55 ++++++++++++- .../src/main/resources/application.yml | 6 +- 16 files changed, 439 insertions(+), 29 deletions(-) create mode 100644 wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/standalone/application/dto/LazyNettyClientStateGroupByClientDTO.java create mode 100644 wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/standalone/domain/model/lazy/netty/client/state/LazyNettyClientStateGroupByClient.java diff --git a/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/netty/advanced/ServerHandleReportStagingOpenedTypeAdvanced.java b/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/netty/advanced/ServerHandleReportStagingOpenedTypeAdvanced.java index 8fdf4af..a6093a3 100644 --- a/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/netty/advanced/ServerHandleReportStagingOpenedTypeAdvanced.java +++ b/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/netty/advanced/ServerHandleReportStagingOpenedTypeAdvanced.java @@ -6,6 +6,7 @@ import org.framework.lazy.cloud.network.heartbeat.common.ChannelContext; import org.framework.lazy.cloud.network.heartbeat.common.MessageType; import org.framework.lazy.cloud.network.heartbeat.common.NettyProxyMsg; import org.framework.lazy.cloud.network.heartbeat.common.advanced.server.AbstractHandleReportStagingOpenedTypeAdvanced; +import org.framework.lazy.cloud.network.heartbeat.common.enums.NettyClientStatus; import org.framework.lazy.cloud.network.heartbeat.common.utils.ChannelAttributeKeyUtils; import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.LazyClientStatsChangeApplication; import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.command.lazy.netty.client.state.LazyNettyClientLoginCommand; @@ -40,18 +41,22 @@ public class ServerHandleReportStagingOpenedTypeAdvanced extends AbstractHandleR String appKey = ChannelAttributeKeyUtils.getAppKey(stagingOpenedChannel); String appSecret = ChannelAttributeKeyUtils.getAppSecret(stagingOpenedChannel); String originalIp = ChannelAttributeKeyUtils.getOriginalIp(stagingOpenedChannel); + List stagingOpenedClientChannel = ChannelContext.get(clientIdBytes); + + // 存储当前客户端暂存关闭 + String clientId = new String(clientIdBytes); + LazyNettyClientLoginCommand lazyNettyClientLoginCommand = new LazyNettyClientLoginCommand(); + lazyNettyClientLoginCommand.setClientId(clientId); + lazyNettyClientLoginCommand.setAppKey(appKey); + lazyNettyClientLoginCommand.setAppSecret(appSecret); + lazyNettyClientLoginCommand.setOriginalIp(originalIp); + lazyNettyClientLoginCommand.setOnLineState(NettyClientStatus.OFF_LINE); + lazyClientStatsChangeApplication.stagingOpened(lazyNettyClientLoginCommand); + if (stagingOpenedClientChannel != null) { ChannelContext.getChannels().forEach((existClientId, channels) -> { for (Channel channel : channels) { - // 存储当前客户端暂存关闭 - String clientId = new String(clientIdBytes); - LazyNettyClientLoginCommand lazyNettyClientLoginCommand = new LazyNettyClientLoginCommand(); - lazyNettyClientLoginCommand.setClientId(clientId); - lazyNettyClientLoginCommand.setAppKey(appKey); - lazyNettyClientLoginCommand.setAppSecret(appSecret); - lazyNettyClientLoginCommand.setOriginalIp(originalIp); - lazyClientStatsChangeApplication.stagingOpened(lazyNettyClientLoginCommand); // 告诉他们 当前参数这个通道 暂存开启了 NettyProxyMsg nettyMsg = new NettyProxyMsg(); nettyMsg.setType(MessageType.DISTRIBUTE_CLIENT_STAGING_OPENED_NOTIFICATION); diff --git a/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/standalone/application/LazyNettyClientStateApplication.java b/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/standalone/application/LazyNettyClientStateApplication.java index 40ae689..5184999 100644 --- a/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/standalone/application/LazyNettyClientStateApplication.java +++ b/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/standalone/application/LazyNettyClientStateApplication.java @@ -3,6 +3,7 @@ package org.framework.lazy.cloud.network.heartbeat.server.standalone.application import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.command.lazy.netty.client.state.*; import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.dto.LazyNettyClientStateDTO; +import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.dto.LazyNettyClientStateGroupByClientDTO; import org.framework.lazy.cloud.network.heartbeat.server.standalone.domain.model.lazy.netty.client.state.LazyNettyClientState; import org.wu.framework.lazy.orm.database.lambda.domain.LazyPage; import org.wu.framework.web.response.Result; @@ -88,6 +89,29 @@ public interface LazyNettyClientStateApplication { Result> findPage(int size, int current, LazyNettyClientStateQueryListCommand lazyNettyClientStateQueryListCommand); + + /** + * describe 查询多个客户端状态 + * + * @param lazyNettyClientStateQueryListCommand 查询多个客户端状态 + * @return {@link Result >} 客户端状态DTO对象 + * @author Jia wei Wu + * @date 2023/12/27 03:46 下午 + **/ + + Result> findListGroupByClient(LazyNettyClientStateQueryListCommand lazyNettyClientStateQueryListCommand); + + /** + * describe 分页查询多个客户端状态 + * + * @param lazyNettyClientStateQueryListCommand 分页查询多个客户端状态 + * @return {@link Result >} 分页客户端状态DTO对象 + * @author Jia wei Wu + * @date 2023/12/27 03:46 下午 + **/ + + Result> findPageGroupByClient(int size, int current, LazyNettyClientStateQueryListCommand lazyNettyClientStateQueryListCommand); + /** * describe 删除客户端状态 * diff --git a/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/standalone/application/assembler/NettyClientStateDTOAssembler.java b/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/standalone/application/assembler/NettyClientStateDTOAssembler.java index 64323d8..b866fb9 100644 --- a/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/standalone/application/assembler/NettyClientStateDTOAssembler.java +++ b/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/standalone/application/assembler/NettyClientStateDTOAssembler.java @@ -1,8 +1,10 @@ package org.framework.lazy.cloud.network.heartbeat.server.standalone.application.assembler; import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.command.lazy.netty.client.state.*; +import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.dto.LazyNettyClientStateGroupByClientDTO; import org.framework.lazy.cloud.network.heartbeat.server.standalone.domain.model.lazy.netty.client.state.LazyNettyClientState; import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.dto.LazyNettyClientStateDTO; +import org.framework.lazy.cloud.network.heartbeat.server.standalone.domain.model.lazy.netty.client.state.LazyNettyClientStateGroupByClient; import org.mapstruct.Mapper; import org.mapstruct.factory.Mappers; import org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyAssembler; @@ -86,4 +88,14 @@ public interface NettyClientStateDTOAssembler { * @date 2023/12/27 03:46 下午 **/ LazyNettyClientStateDTO fromNettyClientState(LazyNettyClientState lazyNettyClientState); + + /** + * describe 持久层领域对象转换成DTO对象 + * + * @param lazyNettyClientStateGroupByClient 客户端状态领域对象 + * @return {@link LazyNettyClientStateGroupByClientDTO} 客户端状态DTO对象 + * @author Jia wei Wu + * @date 2023/12/27 03:46 下午 + **/ + LazyNettyClientStateGroupByClientDTO fromNettyClientState(LazyNettyClientStateGroupByClient lazyNettyClientStateGroupByClient); } \ No newline at end of file diff --git a/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/standalone/application/dto/LazyNettyClientStateDTO.java b/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/standalone/application/dto/LazyNettyClientStateDTO.java index a06f3cf..28bb108 100644 --- a/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/standalone/application/dto/LazyNettyClientStateDTO.java +++ b/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/standalone/application/dto/LazyNettyClientStateDTO.java @@ -67,10 +67,19 @@ public class LazyNettyClientStateDTO { * 描述 */ @Schema(description = "描述", name = "describe", example = "") - private String describe; /** + private String describe; + /** * 服务端ID */ @Schema(description = "服务端ID", name = "serverId", example = "") private String serverId; + /** + * 原始IP + * byte[] 长度 4 + * + * @since 1.2.9 + */ + private String originalIp; + } \ No newline at end of file diff --git a/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/standalone/application/dto/LazyNettyClientStateGroupByClientDTO.java b/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/standalone/application/dto/LazyNettyClientStateGroupByClientDTO.java new file mode 100644 index 0000000..e9a87db --- /dev/null +++ b/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/standalone/application/dto/LazyNettyClientStateGroupByClientDTO.java @@ -0,0 +1,81 @@ +package org.framework.lazy.cloud.network.heartbeat.server.standalone.application.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.experimental.Accessors; +import org.framework.lazy.cloud.network.heartbeat.common.enums.NettyClientStatus; +import org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyDTO; + +import java.time.LocalDateTime; + +/** + * describe 客户端状态 + * + * @author Jia wei Wu + * @date 2023/12/27 03:46 下午 + * @see DefaultDDDLazyDTO + **/ +@Data +@Accessors(chain = true) +@Schema(title = "lazy_netty_client_state_group_by_client_dto", description = "客户端状态") +public class LazyNettyClientStateGroupByClientDTO { + + + /** + * 客户端ID + */ + @Schema(description = "客户端ID", name = "clientId", example = "") + private String clientId; + + /** + * 创建时间 + */ + @Schema(description = "创建时间", name = "createTime", example = "") + private LocalDateTime createTime; + + /** + * 主键 + */ + @Schema(description = "主键", name = "id", example = "") + private Long id; + + /** + * 是否删除 + */ + @Schema(description = "是否删除", name = "isDeleted", example = "") + private Boolean isDeleted; + + + /** + * 修改时间 + */ + @Schema(description = "修改时间", name = "updateTime", example = "") + private LocalDateTime updateTime; + + /** + * 描述 + */ + @Schema(description = "描述", name = "describe", example = "") + private String describe; + /** + * 服务端ID + */ + @Schema(description = "服务端ID", name = "serverId", example = "") + private String serverId; + /** + * 客户端数量 + */ + @Schema(description = "客户端数量", name = "clientNum", example = "") + private Integer clientNum; + + /** + * 在线数量 + */ + @Schema(description = "在线数量", name = "onLineNum", example = "") + private Integer onLineNum; + /** + * 暂存打开数量 + */ + @Schema(description = "暂存打开数量", name = "onStagingNum", example = "") + private Integer onStagingNum; +} \ No newline at end of file diff --git a/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/standalone/application/impl/LazyClientStatsChangeApplicationImpl.java b/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/standalone/application/impl/LazyClientStatsChangeApplicationImpl.java index 352f0cf..aca312a 100644 --- a/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/standalone/application/impl/LazyClientStatsChangeApplicationImpl.java +++ b/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/standalone/application/impl/LazyClientStatsChangeApplicationImpl.java @@ -1,17 +1,17 @@ package org.framework.lazy.cloud.network.heartbeat.server.standalone.application.impl; +import lombok.extern.slf4j.Slf4j; +import org.framework.lazy.cloud.network.heartbeat.common.constant.ClientConfigKeyUtils; +import org.framework.lazy.cloud.network.heartbeat.common.enums.NettyClientStatus; import org.framework.lazy.cloud.network.heartbeat.server.properties.ServerNodeProperties; import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.LazyClientStatsChangeApplication; import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.command.lazy.netty.client.state.LazyNettyClientLoginCommand; import org.framework.lazy.cloud.network.heartbeat.server.standalone.domain.model.lazy.netty.client.state.LazyNettyClientState; +import org.framework.lazy.cloud.network.heartbeat.server.standalone.domain.model.lazy.netty.client.state.LazyNettyClientStateRepository; import org.framework.lazy.cloud.network.heartbeat.server.standalone.domain.model.lazy.netty.client.state.record.LazyNettyClientStateRecord; import org.framework.lazy.cloud.network.heartbeat.server.standalone.domain.model.lazy.netty.client.state.record.LazyNettyClientStateRecordRepository; -import org.framework.lazy.cloud.network.heartbeat.server.standalone.domain.model.lazy.netty.client.state.LazyNettyClientStateRepository; import org.wu.framework.database.lazy.web.plus.stereotype.LazyApplication; -import lombok.extern.slf4j.Slf4j; -import org.framework.lazy.cloud.network.heartbeat.common.constant.ClientConfigKeyUtils; -import org.framework.lazy.cloud.network.heartbeat.common.enums.NettyClientStatus; import java.time.LocalDateTime; @@ -34,13 +34,20 @@ public class LazyClientStatsChangeApplicationImpl implements LazyClientStatsChan this.lazyNettyClientStateRecordRepository = lazyNettyClientStateRecordRepository; } - private void storyClientStateRecord(String clientId,String serverId,String onLineState,String stagingState){ + // private void storyClientStateRecord(String clientId,String serverId,String onLineState,String stagingState){ + private void storyClientStateRecord(LazyNettyClientLoginCommand lazyNettyClientLoginCommand) { + String clientId = lazyNettyClientLoginCommand.getClientId(); + String serverId = lazyNettyClientLoginCommand.getServerId(); + NettyClientStatus onLineState = lazyNettyClientLoginCommand.getOnLineState(); + String originalIp = lazyNettyClientLoginCommand.getOriginalIp(); + String stagingState = lazyNettyClientLoginCommand.getStagingState(); LazyNettyClientStateRecord lazyNettyClientStateRecord = new LazyNettyClientStateRecord(); lazyNettyClientStateRecord.setClientId(clientId); lazyNettyClientStateRecord.setCreateTime(LocalDateTime.now()); lazyNettyClientStateRecord.setServerId(serverId); lazyNettyClientStateRecord.setOnLineState(onLineState); lazyNettyClientStateRecord.setStagingState(stagingState); + lazyNettyClientStateRecord.setOriginalIp(originalIp); lazyNettyClientStateRecordRepository.story(lazyNettyClientStateRecord); } @@ -60,8 +67,12 @@ public class LazyClientStatsChangeApplicationImpl implements LazyClientStatsChan lazyNettyClientState.setOnLineState(NettyClientStatus.ON_LINE); String serverId = serverNodeProperties.getNodeId(); lazyNettyClientState.setServerId(serverId); + lazyNettyClientState.setOriginalIp(lazyNettyClientLoginCommand.getOriginalIp()); lazyNettyClientStateRepository.updateOnLIneState(lazyNettyClientState); - storyClientStateRecord(clientId,serverId,NettyClientStatus.ON_LINE.name(),null); + lazyNettyClientLoginCommand.setOnLineState(NettyClientStatus.ON_LINE); + lazyNettyClientLoginCommand.setStagingState("CLOSE"); + lazyNettyClientLoginCommand.setServerId(serverId); + storyClientStateRecord(lazyNettyClientLoginCommand); // 触发暂存扫描 // ClientOnLineState clientOnLineState = new ClientOnLineState(); // clientOnLineState.setClientId(clientId); @@ -87,9 +98,13 @@ public class LazyClientStatsChangeApplicationImpl implements LazyClientStatsChan lazyNettyClientState.setStagingState("OPENED"); String serverId = serverNodeProperties.getNodeId(); lazyNettyClientState.setServerId(serverId); + lazyNettyClientState.setOriginalIp(lazyNettyClientLoginCommand.getOriginalIp()); lazyNettyClientStateRepository.updateOnLIneState(lazyNettyClientState); // 创建变更记录 - storyClientStateRecord(clientId,serverId,NettyClientStatus.OFF_LINE.name(),null); + lazyNettyClientLoginCommand.setOnLineState(NettyClientStatus.OFF_LINE); + lazyNettyClientLoginCommand.setStagingState("OPENED"); + lazyNettyClientLoginCommand.setServerId(serverId); + storyClientStateRecord(lazyNettyClientLoginCommand); // // 触发暂存扫描 // ClientOnLineState clientOnLineState = new ClientOnLineState(); // clientOnLineState.setClientId(lazyNettyClientLoginCommand); @@ -111,15 +126,17 @@ public class LazyClientStatsChangeApplicationImpl implements LazyClientStatsChan lazyNettyClientState.setStagingState("CLOSED"); String serverId = serverNodeProperties.getNodeId(); lazyNettyClientState.setServerId(serverId); + lazyNettyClientState.setOriginalIp(lazyNettyClientLoginCommand.getOriginalIp()); lazyNettyClientStateRepository.updateStagingState(lazyNettyClientState); - storyClientStateRecord(clientId,serverId,null,"CLOSE"); + lazyNettyClientLoginCommand.setStagingState("CLOSED"); + lazyNettyClientLoginCommand.setServerId(serverId); + storyClientStateRecord(lazyNettyClientLoginCommand); } /** * 客户端暂存开启 * - * @param clientId 客户端ID - * @param lazyNettyClientLoginCommand + * @param lazyNettyClientLoginCommand 客户端登陆信息 */ @Override public void stagingOpened(LazyNettyClientLoginCommand lazyNettyClientLoginCommand) { @@ -130,6 +147,9 @@ public class LazyClientStatsChangeApplicationImpl implements LazyClientStatsChan String serverId = serverNodeProperties.getNodeId(); lazyNettyClientState.setServerId(serverId); lazyNettyClientStateRepository.updateStagingState(lazyNettyClientState); - storyClientStateRecord(clientId,serverId,null,"CLOSE"); + lazyNettyClientLoginCommand.setStagingState("OPENED"); + lazyNettyClientLoginCommand.setOnLineState(NettyClientStatus.OFF_LINE); + lazyNettyClientLoginCommand.setServerId(serverId); + storyClientStateRecord(lazyNettyClientLoginCommand); } } diff --git a/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/standalone/application/impl/LazyNettyClientStateApplicationImpl.java b/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/standalone/application/impl/LazyNettyClientStateApplicationImpl.java index 4de1fa2..bdb72da 100644 --- a/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/standalone/application/impl/LazyNettyClientStateApplicationImpl.java +++ b/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/standalone/application/impl/LazyNettyClientStateApplicationImpl.java @@ -13,6 +13,7 @@ import org.framework.lazy.cloud.network.heartbeat.server.standalone.application. import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.assembler.NettyClientStateDTOAssembler; import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.command.lazy.netty.client.state.*; import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.dto.LazyNettyClientStateDTO; +import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.dto.LazyNettyClientStateGroupByClientDTO; import org.framework.lazy.cloud.network.heartbeat.server.standalone.domain.model.lazy.netty.client.state.LazyNettyClientState; import org.framework.lazy.cloud.network.heartbeat.server.standalone.domain.model.lazy.netty.client.state.LazyNettyClientStateRepository; import org.wu.framework.core.utils.ObjectUtils; @@ -150,6 +151,41 @@ public class LazyNettyClientStateApplicationImpl implements LazyNettyClientState return lazyNettyClientStateRepository.findPage(size, current, lazyNettyClientState).convert(page -> page.convert(NettyClientStateDTOAssembler.INSTANCE::fromNettyClientState)); } + /** + * describe 查询多个客户端状态 + * + * @param lazyNettyClientStateQueryListCommand 查询多个客户端状态 + * @return {@link Result >} 客户端状态DTO对象 + * @author Jia wei Wu + * @date 2023/12/27 03:46 下午 + **/ + @Override + public Result> findListGroupByClient(LazyNettyClientStateQueryListCommand lazyNettyClientStateQueryListCommand) { + LazyNettyClientState lazyNettyClientState = NettyClientStateDTOAssembler.INSTANCE.toNettyClientState(lazyNettyClientStateQueryListCommand); + String serverId = serverNodeProperties.getNodeId(); + lazyNettyClientState.setServerId(serverId); + return lazyNettyClientStateRepository.findListGroupByClient(lazyNettyClientState).convert(nettyClientStates -> nettyClientStates.stream().map(NettyClientStateDTOAssembler.INSTANCE::fromNettyClientState).collect(Collectors.toList())); + + } + + /** + * describe 分页查询多个客户端状态 + * + * @param size + * @param current + * @param lazyNettyClientStateQueryListCommand 分页查询多个客户端状态 + * @return {@link Result >} 分页客户端状态DTO对象 + * @author Jia wei Wu + * @date 2023/12/27 03:46 下午 + **/ + @Override + public Result> findPageGroupByClient(int size, int current, LazyNettyClientStateQueryListCommand lazyNettyClientStateQueryListCommand) { + LazyNettyClientState lazyNettyClientState = NettyClientStateDTOAssembler.INSTANCE.toNettyClientState(lazyNettyClientStateQueryListCommand); + String serverId = serverNodeProperties.getNodeId(); + lazyNettyClientState.setServerId(serverId); + return lazyNettyClientStateRepository.findPageGroupByClient(size, current, lazyNettyClientState).convert(page -> page.convert(NettyClientStateDTOAssembler.INSTANCE::fromNettyClientState)); + } + /** * describe 删除客户端状态 * diff --git a/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/standalone/controller/LazyNettyClientStateProvider.java b/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/standalone/controller/LazyNettyClientStateProvider.java index 09ea8f7..c849033 100644 --- a/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/standalone/controller/LazyNettyClientStateProvider.java +++ b/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/standalone/controller/LazyNettyClientStateProvider.java @@ -3,6 +3,7 @@ package org.framework.lazy.cloud.network.heartbeat.server.standalone.controller; import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.command.lazy.netty.client.state.*; import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.dto.LazyNettyClientStateDTO; +import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.dto.LazyNettyClientStateGroupByClientDTO; import org.framework.lazy.cloud.network.heartbeat.server.standalone.domain.model.lazy.netty.client.state.LazyNettyClientState; import org.wu.framework.web.spring.EasyController; import org.wu.framework.lazy.orm.database.lambda.domain.LazyPage; @@ -122,6 +123,37 @@ public class LazyNettyClientStateProvider { return lazyNettyClientStateApplication.findPage(size, current, lazyNettyClientStateQueryListCommand); } + /** + * describe 查询多个客户端状态 + * + * @param lazyNettyClientStateQueryListCommand 查询多个客户端状态 + * @return {@link Result>} 客户端状态DTO对象 + * @author Jia wei Wu + * @date 2023/12/27 03:46 下午 + **/ + + @Operation(summary = "查询多个客户端状态") + @GetMapping("/findListGroupByClient") + public Result> findListGroupByClient(@ModelAttribute LazyNettyClientStateQueryListCommand lazyNettyClientStateQueryListCommand) { + return lazyNettyClientStateApplication.findListGroupByClient(lazyNettyClientStateQueryListCommand); + } + + /** + * describe 分页查询多个客户端状态 + * + * @param lazyNettyClientStateQueryListCommand 分页查询多个客户端状态 + * @return {@link Result< LazyPage < LazyNettyClientStateDTO >>} 分页客户端状态DTO对象 + * @author Jia wei Wu + * @date 2023/12/27 03:46 下午 + **/ + + @Operation(summary = "分页查询多个客户端状态") + @GetMapping("/findPageGroupByClient") + public Result> findPageGroupByClient(@Parameter(description = "分页大小") @RequestParam(defaultValue = "10", value = "size") int size, + @Parameter(description = "当前页数") @RequestParam(defaultValue = "1", value = "current") int current, @ModelAttribute LazyNettyClientStateQueryListCommand lazyNettyClientStateQueryListCommand) { + return lazyNettyClientStateApplication.findPageGroupByClient(size, current, lazyNettyClientStateQueryListCommand); + } + /** * describe 删除客户端状态 * diff --git a/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/standalone/domain/model/lazy/netty/client/state/LazyNettyClientState.java b/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/standalone/domain/model/lazy/netty/client/state/LazyNettyClientState.java index 3ea21ae..15b1971 100644 --- a/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/standalone/domain/model/lazy/netty/client/state/LazyNettyClientState.java +++ b/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/standalone/domain/model/lazy/netty/client/state/LazyNettyClientState.java @@ -3,8 +3,8 @@ package org.framework.lazy.cloud.network.heartbeat.server.standalone.domain.mode import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import lombok.experimental.Accessors; -import org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyDomain; import org.framework.lazy.cloud.network.heartbeat.common.enums.NettyClientStatus; +import org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyDomain; import java.time.LocalDateTime; @@ -66,10 +66,19 @@ public class LazyNettyClientState { * 描述 */ @Schema(description = "描述", name = "describe", example = "") - private String describe; /** + private String describe; + /** * 服务端ID */ @Schema(description = "服务端ID", name = "serverId", example = "") private String serverId; + /** + * 原始IP + * byte[] 长度 4 + * + * @since 1.2.9 + */ + private String originalIp; + } \ No newline at end of file diff --git a/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/standalone/domain/model/lazy/netty/client/state/LazyNettyClientStateGroupByClient.java b/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/standalone/domain/model/lazy/netty/client/state/LazyNettyClientStateGroupByClient.java new file mode 100644 index 0000000..ee4cb94 --- /dev/null +++ b/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/standalone/domain/model/lazy/netty/client/state/LazyNettyClientStateGroupByClient.java @@ -0,0 +1,76 @@ +package org.framework.lazy.cloud.network.heartbeat.server.standalone.domain.model.lazy.netty.client.state; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.experimental.Accessors; +import org.framework.lazy.cloud.network.heartbeat.common.enums.NettyClientStatus; +import org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyDomain; + +import java.time.LocalDateTime; + +/** + * describe 客户端状态 + * + * @author Jia wei Wu + * @date 2023/12/27 03:46 下午 + * @see DefaultDDDLazyDomain + **/ +@Data +@Accessors(chain = true) +@Schema(title = "LazyNettyClientStateGroupByClient", description = "客户端状态") +public class LazyNettyClientStateGroupByClient { + + + /** + * 客户端ID + */ + @Schema(description = "客户端ID", name = "clientId", example = "") + private String clientId; + + /** + * 创建时间 + */ + @Schema(description = "创建时间", name = "createTime", example = "") + private LocalDateTime createTime; + + /** + * 主键 + */ + @Schema(description = "主键", name = "id", example = "") + private Long id; + + /** + * 修改时间 + */ + @Schema(description = "修改时间", name = "updateTime", example = "") + private LocalDateTime updateTime; + /** + * 描述 + */ + @Schema(description = "描述", name = "describe", example = "") + private String describe; + /** + * 服务端ID + */ + @Schema(description = "服务端ID", name = "serverId", example = "") + private String serverId; + + /** + * 客户端数量 + */ + @Schema(description = "客户端数量", name = "clientNum", example = "") + private Integer clientNum; + + /** + * 在线数量 + */ + @Schema(description = "在线数量", name = "onLineNum", example = "") + private Integer onLineNum; + + + /** + * 暂存打开数量 + */ + @Schema(description = "暂存打开数量", name = "onStagingNum", example = "") + private Integer onStagingNum; +} \ No newline at end of file diff --git a/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/standalone/domain/model/lazy/netty/client/state/LazyNettyClientStateRepository.java b/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/standalone/domain/model/lazy/netty/client/state/LazyNettyClientStateRepository.java index 3beff72..9bd5034 100644 --- a/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/standalone/domain/model/lazy/netty/client/state/LazyNettyClientStateRepository.java +++ b/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/standalone/domain/model/lazy/netty/client/state/LazyNettyClientStateRepository.java @@ -74,6 +74,29 @@ public interface LazyNettyClientStateRepository { Result> findPage(int size, int current, LazyNettyClientState lazyNettyClientState); + /** + * describe 查询多个客户端状态 + * + * @param lazyNettyClientState 查询多个客户端状态 + * @return {@link Result>} 客户端状态DTO对象 + * @author Jia wei Wu + * @date 2023/12/27 03:46 下午 + **/ + + Result> findListGroupByClient(LazyNettyClientState lazyNettyClientState); + + /** + * describe 分页查询多个客户端状态 + * + * @param size 当前页数 + * @param current 当前页 + * @param lazyNettyClientState 分页查询多个客户端状态 + * @return {@link Result>} 分页客户端状态领域对象 + * @author Jia wei Wu + * @date 2023/12/27 03:46 下午 + **/ + + Result> findPageGroupByClient(int size, int current, LazyNettyClientState lazyNettyClientState); /** * describe 删除客户端状态 * diff --git a/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/standalone/domain/model/lazy/netty/client/state/record/LazyNettyClientStateRecord.java b/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/standalone/domain/model/lazy/netty/client/state/record/LazyNettyClientStateRecord.java index d951ce6..a2d8c24 100644 --- a/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/standalone/domain/model/lazy/netty/client/state/record/LazyNettyClientStateRecord.java +++ b/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/standalone/domain/model/lazy/netty/client/state/record/LazyNettyClientStateRecord.java @@ -3,6 +3,8 @@ package org.framework.lazy.cloud.network.heartbeat.server.standalone.domain.mode import lombok.Data; import lombok.experimental.Accessors; import io.swagger.v3.oas.annotations.media.Schema; +import org.framework.lazy.cloud.network.heartbeat.common.enums.NettyClientStatus; + import java.lang.String; import java.time.LocalDateTime; import java.lang.Long; @@ -45,7 +47,7 @@ public class LazyNettyClientStateRecord { * 在线状态(true在线,false离线) */ @Schema(description ="在线状态(true在线,false离线)",name ="onLineState",example = "") - private String onLineState; + private NettyClientStatus onLineState; /** * @@ -61,4 +63,13 @@ public class LazyNettyClientStateRecord { @Schema(description ="暂存状态(开启、关闭)",name ="stagingState",example = "") private String stagingState; + /** + * 原始IP + * byte[] 长度 4 + * + * @since 1.2.9 + */ + private String originalIp; + + } \ No newline at end of file diff --git a/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/standalone/infrastructure/entity/LazyNettyClientStateDO.java b/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/standalone/infrastructure/entity/LazyNettyClientStateDO.java index 61fe60c..f010613 100644 --- a/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/standalone/infrastructure/entity/LazyNettyClientStateDO.java +++ b/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/standalone/infrastructure/entity/LazyNettyClientStateDO.java @@ -4,9 +4,9 @@ package org.framework.lazy.cloud.network.heartbeat.server.standalone.infrastruct import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import lombok.experimental.Accessors; +import org.framework.lazy.cloud.network.heartbeat.common.enums.NettyClientStatus; import org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyInfrastructureEntity; import org.wu.framework.lazy.orm.core.stereotype.*; -import org.framework.lazy.cloud.network.heartbeat.common.enums.NettyClientStatus; import java.time.LocalDateTime; @@ -79,10 +79,21 @@ public class LazyNettyClientStateDO { @Schema(description = "描述", name = "describe", example = "") @LazyTableField(comment = "描述") private String describe; + /** * 服务端ID */ @LazyTableFieldUnique(name = "server_id", comment = "服务端ID",notNull = true) @Schema(description = "服务端ID", name = "serverId", example = "") private String serverId; + + /** + * 原始IP + * byte[] 长度 4 + * + * @since 1.2.9 + */ + @Schema(description = "客户端IP", name = "originalIp", example = "") + @LazyTableFieldUnique(name = "original_ip", comment = "客户端IP", columnType = "varchar(255)", notNull = true) + private String originalIp; } \ No newline at end of file diff --git a/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/standalone/infrastructure/entity/LazyNettyClientStateRecordDO.java b/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/standalone/infrastructure/entity/LazyNettyClientStateRecordDO.java index d1a54d4..b990bca 100644 --- a/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/standalone/infrastructure/entity/LazyNettyClientStateRecordDO.java +++ b/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/standalone/infrastructure/entity/LazyNettyClientStateRecordDO.java @@ -76,4 +76,14 @@ public class LazyNettyClientStateRecordDO { @LazyTableField(name="staging_state",comment="暂存状态(开启、关闭)",columnType="varchar(255)") private String stagingState; + /** + * 原始IP + * byte[] 长度 4 + * + * @since 1.2.9 + */ + @Schema(description ="客户端IP",name ="originalIp",example = "") + @LazyTableField(name="original_ip",comment="客户端IP",columnType="varchar(255)") + private String originalIp; + } \ No newline at end of file diff --git a/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/standalone/infrastructure/persistence/LazyNettyClientStateRepositoryImpl.java b/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/standalone/infrastructure/persistence/LazyNettyClientStateRepositoryImpl.java index 3fb5c46..816678f 100644 --- a/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/standalone/infrastructure/persistence/LazyNettyClientStateRepositoryImpl.java +++ b/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/standalone/infrastructure/persistence/LazyNettyClientStateRepositoryImpl.java @@ -2,14 +2,15 @@ package org.framework.lazy.cloud.network.heartbeat.server.standalone.infrastruct import jakarta.annotation.Resource; import org.framework.lazy.cloud.network.heartbeat.server.standalone.domain.model.lazy.netty.client.state.LazyNettyClientState; +import org.framework.lazy.cloud.network.heartbeat.server.standalone.domain.model.lazy.netty.client.state.LazyNettyClientStateGroupByClient; import org.framework.lazy.cloud.network.heartbeat.server.standalone.domain.model.lazy.netty.client.state.LazyNettyClientStateRepository; -import org.framework.lazy.cloud.network.heartbeat.server.standalone.infrastructure.entity.LazyNettyClientStateDO; import org.framework.lazy.cloud.network.heartbeat.server.standalone.infrastructure.converter.LazyNettyClientStateConverter; +import org.framework.lazy.cloud.network.heartbeat.server.standalone.infrastructure.entity.LazyNettyClientStateDO; import org.springframework.stereotype.Repository; +import org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyInfrastructurePersistence; import org.wu.framework.lazy.orm.database.lambda.domain.LazyPage; import org.wu.framework.lazy.orm.database.lambda.stream.lambda.LazyLambdaStream; import org.wu.framework.lazy.orm.database.lambda.stream.wrapper.LazyWrappers; -import org.wu.framework.lazy.orm.core.persistence.reverse.lazy.ddd.DefaultDDDLazyInfrastructurePersistence; import org.wu.framework.web.response.Result; import org.wu.framework.web.response.ResultFactory; @@ -118,6 +119,56 @@ public class LazyNettyClientStateRepositoryImpl implements LazyNettyClientStateR return ResultFactory.successOf(nettyClientStateLazyPage); } + /** + * describe 查询多个客户端状态 + * + * @param lazyNettyClientState 查询多个客户端状态 + * @return {@link Result>} 客户端状态DTO对象 + * @author Jia wei Wu + * @date 2023/12/27 03:46 下午 + **/ + @Override + public Result> findListGroupByClient(LazyNettyClientState lazyNettyClientState) { + LazyNettyClientStateDO lazyNettyClientStateDO = LazyNettyClientStateConverter.INSTANCE.fromNettyClientState(lazyNettyClientState); + List lazyNettyClientStateList = lazyLambdaStream + .selectList(LazyWrappers.lambdaWrapperBean(lazyNettyClientStateDO) + .eq(LazyNettyClientStateDO::getIsDeleted, false) + .orderByDesc(LazyNettyClientStateDO::getCreateTime) + .groupBy(LazyNettyClientStateDO::getClientId) + .as(LazyNettyClientStateDO.class) + .functionAs("count(1)", LazyNettyClientStateGroupByClient::getClientNum) + .functionAs("SUM(CASE WHEN on_line_state = 'ON_LINE' THEN 1 ELSE 0 END)", LazyNettyClientStateGroupByClient::getOnLineNum) + .functionAs("SUM(CASE WHEN staging_state = 'CLOSED' THEN 1 ELSE 0 END)", LazyNettyClientStateGroupByClient::getOnStagingNum) + , LazyNettyClientStateGroupByClient.class); + return ResultFactory.successOf(lazyNettyClientStateList); + } + + /** + * describe 分页查询多个客户端状态 + * + * @param size 当前页数 + * @param current 当前页 + * @param lazyNettyClientState 分页查询多个客户端状态 + * @return {@link Result>} 分页客户端状态领域对象 + * @author Jia wei Wu + * @date 2023/12/27 03:46 下午 + **/ + @Override + public Result> findPageGroupByClient(int size, int current, LazyNettyClientState lazyNettyClientState) { + LazyNettyClientStateDO lazyNettyClientStateDO = LazyNettyClientStateConverter.INSTANCE.fromNettyClientState(lazyNettyClientState); + LazyPage lazyPage = new LazyPage<>(current, size); + LazyPage nettyClientStateLazyPage = lazyLambdaStream.selectPage( + LazyWrappers.lambdaWrapperBean(lazyNettyClientStateDO) + .groupBy(LazyNettyClientStateDO::getClientId) + .as(LazyNettyClientStateDO.class) + .functionAs("count(1)", LazyNettyClientStateGroupByClient::getClientNum) + .functionAs("SUM(CASE WHEN on_line_state = 'ON_LINE' THEN 1 ELSE 0 END)", LazyNettyClientStateGroupByClient::getOnLineNum) + .functionAs("SUM(CASE WHEN staging_state = 'CLOSED' THEN 1 ELSE 0 END)", LazyNettyClientStateGroupByClient::getOnStagingNum) + + , lazyPage, LazyNettyClientStateGroupByClient.class); + return ResultFactory.successOf(nettyClientStateLazyPage); + } + /** * describe 删除客户端状态 * diff --git a/wu-lazy-cloud-heartbeat-start/wu-lazy-cloud-heartbeat-client-start/src/main/resources/application.yml b/wu-lazy-cloud-heartbeat-start/wu-lazy-cloud-heartbeat-client-start/src/main/resources/application.yml index d7fcc09..2684ca9 100644 --- a/wu-lazy-cloud-heartbeat-start/wu-lazy-cloud-heartbeat-client-start/src/main/resources/application.yml +++ b/wu-lazy-cloud-heartbeat-start/wu-lazy-cloud-heartbeat-client-start/src/main/resources/application.yml @@ -19,6 +19,6 @@ spring: # inet-port: 7101 --- -logging1: - level: - root: DEBUG \ No newline at end of file +#logging: +# level: +# root: DEBUG \ No newline at end of file