From 0c8f82bf60b20be15cf29e068d02a090312a761e Mon Sep 17 00:00:00 2001 From: wujiawei <12345678> Date: Wed, 24 Jan 2024 18:37:25 +0800 Subject: [PATCH] =?UTF-8?q?[fix]=20=E6=B7=BB=E5=8A=A0=E6=B5=81=E9=87=8F?= =?UTF-8?q?=E6=8E=A7=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...teSingleClientRealConnectTypeAdvanced.java | 17 +- .../netty/handler/NettyClientRealHandler.java | 4 + .../netty/socket/NettyClientRealSocket.java | 1 + .../AbstractHandleChannelFlowAdvanced.java | 4 +- .../utils/ChannelAttributeKeyUtils.java | 20 +++ .../src/main/resources/application-dev.yml | 10 +- .../application/VisitorFlowApplication.java | 109 +++++++++++++ .../assembler/VisitorFlowDTOAssembler.java | 93 +++++++++++ .../flow/VisitorFlowQueryListCommand.java | 80 +++++++++ .../flow/VisitorFlowQueryOneCommand.java | 80 +++++++++ .../flow/VisitorFlowRemoveCommand.java | 80 +++++++++ .../visitor/flow/VisitorFlowStoryCommand.java | 80 +++++++++ .../flow/VisitorFlowUpdateCommand.java | 80 +++++++++ .../application/dto/VisitorFlowDTO.java | 80 +++++++++ .../impl/VisitorFlowApplicationImpl.java | 144 +++++++++++++++++ .../controller/VisitorFlowProvider.java | 142 ++++++++++++++++ .../model/visitor/flow/VisitorFlow.java | 80 +++++++++ .../visitor/flow/VisitorFlowRepository.java | 106 ++++++++++++ .../converter/VisitorFlowConverter.java | 48 ++++++ .../infrastructure/entity/VisitorFlowDO.java | 96 +++++++++++ .../mapper/VisitorFlowMapper.java | 15 ++ .../VisitorFlowRepositoryImpl.java | 152 ++++++++++++++++++ .../infrastructure/xml/VisitorFlowMapper.xml | 15 ++ ...portHandleChannelTransferTypeAdvanced.java | 23 ++- ...rtSingleClientRealConnectTypeAdvanced.java | 1 + .../config/HeartbeatServerConfiguration.java | 5 +- .../netty/config/ServerFlowConfiguration.java | 27 +++- .../flow/ServerHandlerInFlowHandler.java | 66 ++++++++ .../flow/ServerHandlerOutFlowHandler.java | 66 ++++++++ 29 files changed, 1706 insertions(+), 18 deletions(-) create mode 100644 wu-lazy-cloud-heartbeat-server/src/main/java/wu/framework/lazy/cloud/heartbeat/server/application/VisitorFlowApplication.java create mode 100644 wu-lazy-cloud-heartbeat-server/src/main/java/wu/framework/lazy/cloud/heartbeat/server/application/assembler/VisitorFlowDTOAssembler.java create mode 100644 wu-lazy-cloud-heartbeat-server/src/main/java/wu/framework/lazy/cloud/heartbeat/server/application/command/visitor/flow/VisitorFlowQueryListCommand.java create mode 100644 wu-lazy-cloud-heartbeat-server/src/main/java/wu/framework/lazy/cloud/heartbeat/server/application/command/visitor/flow/VisitorFlowQueryOneCommand.java create mode 100644 wu-lazy-cloud-heartbeat-server/src/main/java/wu/framework/lazy/cloud/heartbeat/server/application/command/visitor/flow/VisitorFlowRemoveCommand.java create mode 100644 wu-lazy-cloud-heartbeat-server/src/main/java/wu/framework/lazy/cloud/heartbeat/server/application/command/visitor/flow/VisitorFlowStoryCommand.java create mode 100644 wu-lazy-cloud-heartbeat-server/src/main/java/wu/framework/lazy/cloud/heartbeat/server/application/command/visitor/flow/VisitorFlowUpdateCommand.java create mode 100644 wu-lazy-cloud-heartbeat-server/src/main/java/wu/framework/lazy/cloud/heartbeat/server/application/dto/VisitorFlowDTO.java create mode 100644 wu-lazy-cloud-heartbeat-server/src/main/java/wu/framework/lazy/cloud/heartbeat/server/application/impl/VisitorFlowApplicationImpl.java create mode 100644 wu-lazy-cloud-heartbeat-server/src/main/java/wu/framework/lazy/cloud/heartbeat/server/controller/VisitorFlowProvider.java create mode 100644 wu-lazy-cloud-heartbeat-server/src/main/java/wu/framework/lazy/cloud/heartbeat/server/domain/model/visitor/flow/VisitorFlow.java create mode 100644 wu-lazy-cloud-heartbeat-server/src/main/java/wu/framework/lazy/cloud/heartbeat/server/domain/model/visitor/flow/VisitorFlowRepository.java create mode 100644 wu-lazy-cloud-heartbeat-server/src/main/java/wu/framework/lazy/cloud/heartbeat/server/infrastructure/converter/VisitorFlowConverter.java create mode 100644 wu-lazy-cloud-heartbeat-server/src/main/java/wu/framework/lazy/cloud/heartbeat/server/infrastructure/entity/VisitorFlowDO.java create mode 100644 wu-lazy-cloud-heartbeat-server/src/main/java/wu/framework/lazy/cloud/heartbeat/server/infrastructure/mapper/VisitorFlowMapper.java create mode 100644 wu-lazy-cloud-heartbeat-server/src/main/java/wu/framework/lazy/cloud/heartbeat/server/infrastructure/persistence/VisitorFlowRepositoryImpl.java create mode 100644 wu-lazy-cloud-heartbeat-server/src/main/java/wu/framework/lazy/cloud/heartbeat/server/infrastructure/xml/VisitorFlowMapper.xml create mode 100644 wu-lazy-cloud-heartbeat-server/src/main/java/wu/framework/lazy/cloud/heartbeat/server/netty/flow/ServerHandlerInFlowHandler.java create mode 100644 wu-lazy-cloud-heartbeat-server/src/main/java/wu/framework/lazy/cloud/heartbeat/server/netty/flow/ServerHandlerOutFlowHandler.java diff --git a/wu-lazy-cloud-heartbeat-client/src/main/java/wu/framework/lazy/cloud/heartbeat/client/netty/advanced/ClientHandleDistributeSingleClientRealConnectTypeAdvanced.java b/wu-lazy-cloud-heartbeat-client/src/main/java/wu/framework/lazy/cloud/heartbeat/client/netty/advanced/ClientHandleDistributeSingleClientRealConnectTypeAdvanced.java index 76ed3f9..0d946f7 100644 --- a/wu-lazy-cloud-heartbeat-client/src/main/java/wu/framework/lazy/cloud/heartbeat/client/netty/advanced/ClientHandleDistributeSingleClientRealConnectTypeAdvanced.java +++ b/wu-lazy-cloud-heartbeat-client/src/main/java/wu/framework/lazy/cloud/heartbeat/client/netty/advanced/ClientHandleDistributeSingleClientRealConnectTypeAdvanced.java @@ -41,13 +41,16 @@ public class ClientHandleDistributeSingleClientRealConnectTypeAdvanced extends A byte[] clientTargetIp = msg.getClientTargetIp(); byte[] clientTargetPort = msg.getClientTargetPort(); byte[] visitorIdBytes = msg.getVisitorId(); - InternalNetworkPenetrationRealClient internalNetworkPenetrationRealClient = new InternalNetworkPenetrationRealClient(); - internalNetworkPenetrationRealClient.setClientId(new String(clientIdBytes)); - internalNetworkPenetrationRealClient.setVisitorPort(Integer.valueOf(new String(visitorPort))); - internalNetworkPenetrationRealClient.setClientTargetIp(new String( clientTargetIp)); - internalNetworkPenetrationRealClient.setClientTargetPort(Integer.valueOf(new String( clientTargetPort))); - String visitorId=new String(visitorIdBytes);// 访客ID - internalNetworkPenetrationRealClient.setVisitorId(visitorId); + InternalNetworkPenetrationRealClient internalNetworkPenetrationRealClient = + InternalNetworkPenetrationRealClient + .builder() + .clientId(new String(clientIdBytes)) + .visitorPort(Integer.valueOf(new String(visitorPort))) + .clientTargetIp(new String( clientTargetIp)) + .clientTargetPort(Integer.valueOf(new String( clientTargetPort))) + .visitorId(new String(visitorIdBytes)) + .build() + ; // 绑定真实服务端口 NettyClientRealSocket.buildRealServer(internalNetworkPenetrationRealClient,nettyServerProperties, handleChannelTypeAdvancedList); diff --git a/wu-lazy-cloud-heartbeat-client/src/main/java/wu/framework/lazy/cloud/heartbeat/client/netty/handler/NettyClientRealHandler.java b/wu-lazy-cloud-heartbeat-client/src/main/java/wu/framework/lazy/cloud/heartbeat/client/netty/handler/NettyClientRealHandler.java index f904b49..8cfa6a2 100644 --- a/wu-lazy-cloud-heartbeat-client/src/main/java/wu/framework/lazy/cloud/heartbeat/client/netty/handler/NettyClientRealHandler.java +++ b/wu-lazy-cloud-heartbeat-client/src/main/java/wu/framework/lazy/cloud/heartbeat/client/netty/handler/NettyClientRealHandler.java @@ -25,11 +25,15 @@ public class NettyClientRealHandler extends SimpleChannelInboundHandler buf.readBytes(bytes); log.debug("接收客户端真实服务数据:{}", new String(bytes)); String visitorId = ChannelAttributeKeyUtils.getVisitorId(ctx.channel()); + Integer visitorPort = ChannelAttributeKeyUtils.getVisitorPort(ctx.channel()); + String clientId = ChannelAttributeKeyUtils.getClientId(ctx.channel()); // 访客通信通道 上报服务端代理完成 Channel visitorChannel = NettyCommunicationIdContext.getVisitor(visitorId); NettyProxyMsg returnMessage = new NettyProxyMsg(); returnMessage.setType(MessageType.REPORT_CLIENT_TRANSFER); returnMessage.setVisitorId(visitorId); + returnMessage.setClientId(clientId); + returnMessage.setVisitorPort(visitorPort); returnMessage.setData(bytes); visitorChannel.writeAndFlush(returnMessage); diff --git a/wu-lazy-cloud-heartbeat-client/src/main/java/wu/framework/lazy/cloud/heartbeat/client/netty/socket/NettyClientRealSocket.java b/wu-lazy-cloud-heartbeat-client/src/main/java/wu/framework/lazy/cloud/heartbeat/client/netty/socket/NettyClientRealSocket.java index e818144..2369c24 100644 --- a/wu-lazy-cloud-heartbeat-client/src/main/java/wu/framework/lazy/cloud/heartbeat/client/netty/socket/NettyClientRealSocket.java +++ b/wu-lazy-cloud-heartbeat-client/src/main/java/wu/framework/lazy/cloud/heartbeat/client/netty/socket/NettyClientRealSocket.java @@ -66,6 +66,7 @@ public class NettyClientRealSocket { // 绑定访客ID到当前真实通道属性 ChannelAttributeKeyUtils.buildVisitorId(realChannel, visitorId); ChannelAttributeKeyUtils.buildClientId(realChannel, clientId); + ChannelAttributeKeyUtils.buildVisitorPort(realChannel, visitorPort); // 通知服务端访客连接成功 diff --git a/wu-lazy-cloud-heartbeat-common/src/main/java/wu/framework/lazy/cloud/heartbeat/common/advanced/flow/AbstractHandleChannelFlowAdvanced.java b/wu-lazy-cloud-heartbeat-common/src/main/java/wu/framework/lazy/cloud/heartbeat/common/advanced/flow/AbstractHandleChannelFlowAdvanced.java index 4f54255..7e72770 100644 --- a/wu-lazy-cloud-heartbeat-common/src/main/java/wu/framework/lazy/cloud/heartbeat/common/advanced/flow/AbstractHandleChannelFlowAdvanced.java +++ b/wu-lazy-cloud-heartbeat-common/src/main/java/wu/framework/lazy/cloud/heartbeat/common/advanced/flow/AbstractHandleChannelFlowAdvanced.java @@ -25,7 +25,7 @@ public abstract class AbstractHandleChannelFlowAdvanced implements HandleChannel * @param channelFlow 数据 * @return boolean */ - abstract boolean doSupport(ChannelFlow channelFlow); + protected abstract boolean doSupport(ChannelFlow channelFlow); /** * 处理当前数据 @@ -43,5 +43,5 @@ public abstract class AbstractHandleChannelFlowAdvanced implements HandleChannel * @param channel 当前通道 * @param channelFlow 通道数据 */ - abstract void doHandler(Channel channel, ChannelFlow channelFlow); + protected abstract void doHandler(Channel channel, ChannelFlow channelFlow); } diff --git a/wu-lazy-cloud-heartbeat-common/src/main/java/wu/framework/lazy/cloud/heartbeat/common/utils/ChannelAttributeKeyUtils.java b/wu-lazy-cloud-heartbeat-common/src/main/java/wu/framework/lazy/cloud/heartbeat/common/utils/ChannelAttributeKeyUtils.java index 271b3d7..7a6bebb 100644 --- a/wu-lazy-cloud-heartbeat-common/src/main/java/wu/framework/lazy/cloud/heartbeat/common/utils/ChannelAttributeKeyUtils.java +++ b/wu-lazy-cloud-heartbeat-common/src/main/java/wu/framework/lazy/cloud/heartbeat/common/utils/ChannelAttributeKeyUtils.java @@ -9,6 +9,7 @@ import io.netty.util.AttributeKey; public class ChannelAttributeKeyUtils { private static final AttributeKey VISITOR_ID = AttributeKey.newInstance("visitorId"); + private static final AttributeKey VISITOR_PORT = AttributeKey.newInstance("visitorPort"); private static final AttributeKey CLIENT_ID = AttributeKey.newInstance("clientId"); private static final AttributeKey OUT_FLOW = AttributeKey.newInstance("outFlow"); private static final AttributeKey IN_FLOW = AttributeKey.newInstance("inFlow"); @@ -111,4 +112,23 @@ public class ChannelAttributeKeyUtils { public static Integer getInFlow(Channel channel) { return channel.attr(IN_FLOW).get(); } + + /** + * 为通道绑定 通道中访客端口 + * + * @param channel 通道 + * @param visitorPort 进口流量 + */ + public static void buildVisitorPort(Channel channel, Integer visitorPort) { + channel.attr(VISITOR_PORT).set(visitorPort); + } + + /** + * 获取 通道中访客端口 + * + * @param channel 通道 + */ + public static Integer getVisitorPort(Channel channel) { + return channel.attr(VISITOR_PORT).get(); + } } diff --git a/wu-lazy-cloud-heartbeat-sample/wu-lazy-cloud-heartbeat-client-sample/src/main/resources/application-dev.yml b/wu-lazy-cloud-heartbeat-sample/wu-lazy-cloud-heartbeat-client-sample/src/main/resources/application-dev.yml index b4f6c8c..f484c3d 100644 --- a/wu-lazy-cloud-heartbeat-sample/wu-lazy-cloud-heartbeat-client-sample/src/main/resources/application-dev.yml +++ b/wu-lazy-cloud-heartbeat-sample/wu-lazy-cloud-heartbeat-client-sample/src/main/resources/application-dev.yml @@ -1,13 +1,13 @@ spring: lazy: netty: -# inet-host: 127.0.0.1 -# inet-port: 7001 + inet-host: 127.0.0.1 + inet-port: 7001 # inet-path: wu-lazy-cloud-heartbeat-server - inet-host: 124.222.48.62 # 服务端地址 - inet-port: 30676 #服务端端口 +# inet-host: 124.222.48.62 # 服务端地址 +# inet-port: 30676 #服务端端口 # inet-path: wu-lazy-cloud-heartbeat-server - client-id: wujiawei # 客户端ID + client-id: local # 客户端ID data: redis: host: 192.168.17.221 diff --git a/wu-lazy-cloud-heartbeat-server/src/main/java/wu/framework/lazy/cloud/heartbeat/server/application/VisitorFlowApplication.java b/wu-lazy-cloud-heartbeat-server/src/main/java/wu/framework/lazy/cloud/heartbeat/server/application/VisitorFlowApplication.java new file mode 100644 index 0000000..245ba53 --- /dev/null +++ b/wu-lazy-cloud-heartbeat-server/src/main/java/wu/framework/lazy/cloud/heartbeat/server/application/VisitorFlowApplication.java @@ -0,0 +1,109 @@ +package wu.framework.lazy.cloud.heartbeat.server.application; + +import com.wu.framework.response.Result; +import com.wu.framework.response.ResultFactory; +import wu.framework.lazy.cloud.heartbeat.server.domain.model.visitor.flow.VisitorFlow; +import wu.framework.lazy.cloud.heartbeat.server.application.command.visitor.flow.VisitorFlowRemoveCommand; +import wu.framework.lazy.cloud.heartbeat.server.application.command.visitor.flow.VisitorFlowStoryCommand; +import wu.framework.lazy.cloud.heartbeat.server.application.command.visitor.flow.VisitorFlowUpdateCommand; +import wu.framework.lazy.cloud.heartbeat.server.application.command.visitor.flow.VisitorFlowQueryListCommand; +import wu.framework.lazy.cloud.heartbeat.server.application.command.visitor.flow.VisitorFlowQueryOneCommand; +import wu.framework.lazy.cloud.heartbeat.server.application.dto.VisitorFlowDTO; +import java.util.List; +import com.wu.framework.inner.lazy.database.expand.database.persistence.domain.LazyPage; +/** + * describe 访客端流量 + * + * @author Jia wei Wu + * @date 2024/01/24 05:19 下午 + * @see com.wu.framework.inner.lazy.persistence.reverse.lazy.ddd.DefaultDDDLazyApplication + **/ + +public interface VisitorFlowApplication { + + + /** + * describe 新增访客端流量 + * + * @param visitorFlowStoryCommand 新增访客端流量 + * @return {@link Result} 访客端流量新增后领域对象 + + * @author Jia wei Wu + * @date 2024/01/24 05:19 下午 + **/ + + Result story(VisitorFlowStoryCommand visitorFlowStoryCommand); + + /** + * describe 批量新增访客端流量 + * + * @param visitorFlowStoryCommandList 批量新增访客端流量 + * @return {@link Result>} 访客端流量新增后领域对象集合 + + * @author Jia wei Wu + * @date 2024/01/24 05:19 下午 + **/ + + Result> batchStory(List visitorFlowStoryCommandList); + + /** + * describe 更新访客端流量 + * + * @param visitorFlowUpdateCommand 更新访客端流量 + * @return {@link Result} 访客端流量领域对象 + + * @author Jia wei Wu + * @date 2024/01/24 05:19 下午 + **/ + + Result updateOne(VisitorFlowUpdateCommand visitorFlowUpdateCommand); + + /** + * describe 查询单个访客端流量 + * + * @param visitorFlowQueryOneCommand 查询单个访客端流量 + * @return {@link Result} 访客端流量DTO对象 + + * @author Jia wei Wu + * @date 2024/01/24 05:19 下午 + **/ + + Result findOne(VisitorFlowQueryOneCommand visitorFlowQueryOneCommand); + + /** + * describe 查询多个访客端流量 + * + * @param visitorFlowQueryListCommand 查询多个访客端流量 + * @return {@link Result >} 访客端流量DTO对象 + + * @author Jia wei Wu + * @date 2024/01/24 05:19 下午 + **/ + + Result > findList(VisitorFlowQueryListCommand visitorFlowQueryListCommand); + + /** + * describe 分页查询多个访客端流量 + * + * @param visitorFlowQueryListCommand 分页查询多个访客端流量 + * @return {@link Result >} 分页访客端流量DTO对象 + + * @author Jia wei Wu + * @date 2024/01/24 05:19 下午 + **/ + + Result > findPage(int size,int current,VisitorFlowQueryListCommand visitorFlowQueryListCommand); + + /** + * describe 删除访客端流量 + * + * @param visitorFlowRemoveCommand 删除访客端流量 + * @return {@link Result} 访客端流量 + + * @author Jia wei Wu + * @date 2024/01/24 05:19 下午 + **/ + + Result remove(VisitorFlowRemoveCommand visitorFlowRemoveCommand); + +} \ No newline at end of file diff --git a/wu-lazy-cloud-heartbeat-server/src/main/java/wu/framework/lazy/cloud/heartbeat/server/application/assembler/VisitorFlowDTOAssembler.java b/wu-lazy-cloud-heartbeat-server/src/main/java/wu/framework/lazy/cloud/heartbeat/server/application/assembler/VisitorFlowDTOAssembler.java new file mode 100644 index 0000000..20868b4 --- /dev/null +++ b/wu-lazy-cloud-heartbeat-server/src/main/java/wu/framework/lazy/cloud/heartbeat/server/application/assembler/VisitorFlowDTOAssembler.java @@ -0,0 +1,93 @@ +package wu.framework.lazy.cloud.heartbeat.server.application.assembler; + +import wu.framework.lazy.cloud.heartbeat.server.domain.model.visitor.flow.VisitorFlow; +import wu.framework.lazy.cloud.heartbeat.server.application.command.visitor.flow.VisitorFlowRemoveCommand; +import wu.framework.lazy.cloud.heartbeat.server.application.command.visitor.flow.VisitorFlowStoryCommand; +import wu.framework.lazy.cloud.heartbeat.server.application.command.visitor.flow.VisitorFlowUpdateCommand; +import wu.framework.lazy.cloud.heartbeat.server.application.command.visitor.flow.VisitorFlowQueryListCommand; +import wu.framework.lazy.cloud.heartbeat.server.application.command.visitor.flow.VisitorFlowQueryOneCommand; +import wu.framework.lazy.cloud.heartbeat.server.application.dto.VisitorFlowDTO; +import org.mapstruct.factory.Mappers; +import org.mapstruct.Mapper; +/** + * describe 访客端流量 + * + * @author Jia wei Wu + * @date 2024/01/24 05:19 下午 + * @see com.wu.framework.inner.lazy.persistence.reverse.lazy.ddd.DefaultDDDLazyAssembler + **/ +@Mapper +public interface VisitorFlowDTOAssembler { + + + /** + * describe MapStruct 创建的代理对象 + * + + + + * @author Jia wei Wu + * @date 2024/01/24 05:19 下午 + **/ + VisitorFlowDTOAssembler INSTANCE = Mappers.getMapper(VisitorFlowDTOAssembler.class); + /** + * describe 应用层存储入参转换成 领域对象 + * + * @param visitorFlowStoryCommand 保存访客端流量对象 + * @return {@link VisitorFlow} 访客端流量领域对象 + + * @author Jia wei Wu + * @date 2024/01/24 05:19 下午 + **/ + VisitorFlow toVisitorFlow(VisitorFlowStoryCommand visitorFlowStoryCommand); + /** + * describe 应用层更新入参转换成 领域对象 + * + * @param visitorFlowUpdateCommand 更新访客端流量对象 + * @return {@link VisitorFlow} 访客端流量领域对象 + + * @author Jia wei Wu + * @date 2024/01/24 05:19 下午 + **/ + VisitorFlow toVisitorFlow(VisitorFlowUpdateCommand visitorFlowUpdateCommand); + /** + * describe 应用层查询入参转换成 领域对象 + * + * @param visitorFlowQueryOneCommand 查询单个访客端流量对象参数 + * @return {@link VisitorFlow} 访客端流量领域对象 + + * @author Jia wei Wu + * @date 2024/01/24 05:19 下午 + **/ + VisitorFlow toVisitorFlow(VisitorFlowQueryOneCommand visitorFlowQueryOneCommand); + /** + * describe 应用层查询入参转换成 领域对象 + * + * @param visitorFlowQueryListCommand 查询集合访客端流量对象参数 + * @return {@link VisitorFlow} 访客端流量领域对象 + + * @author Jia wei Wu + * @date 2024/01/24 05:19 下午 + **/ + VisitorFlow toVisitorFlow(VisitorFlowQueryListCommand visitorFlowQueryListCommand); + /** + * describe 应用层删除入参转换成 领域对象 + * + * @param visitorFlowRemoveCommand 删除访客端流量对象参数 + * @return {@link VisitorFlow} 访客端流量领域对象 + + * @author Jia wei Wu + * @date 2024/01/24 05:19 下午 + **/ + VisitorFlow toVisitorFlow(VisitorFlowRemoveCommand visitorFlowRemoveCommand); + /** + * describe 持久层领域对象转换成DTO对象 + * + * @param visitorFlow 访客端流量领域对象 + * @return {@link VisitorFlowDTO} 访客端流量DTO对象 + + * @author Jia wei Wu + * @date 2024/01/24 05:19 下午 + **/ + VisitorFlowDTO fromVisitorFlow(VisitorFlow visitorFlow); +} \ No newline at end of file diff --git a/wu-lazy-cloud-heartbeat-server/src/main/java/wu/framework/lazy/cloud/heartbeat/server/application/command/visitor/flow/VisitorFlowQueryListCommand.java b/wu-lazy-cloud-heartbeat-server/src/main/java/wu/framework/lazy/cloud/heartbeat/server/application/command/visitor/flow/VisitorFlowQueryListCommand.java new file mode 100644 index 0000000..ecc0d84 --- /dev/null +++ b/wu-lazy-cloud-heartbeat-server/src/main/java/wu/framework/lazy/cloud/heartbeat/server/application/command/visitor/flow/VisitorFlowQueryListCommand.java @@ -0,0 +1,80 @@ +package wu.framework.lazy.cloud.heartbeat.server.application.command.visitor.flow; + +import lombok.Data; +import lombok.experimental.Accessors; +import io.swagger.v3.oas.annotations.media.Schema; +import java.lang.String; +import java.time.LocalDateTime; +import java.lang.Long; +import java.lang.Integer; +import java.lang.Boolean; +/** + * describe 访客端流量 + * + * @author Jia wei Wu + * @date 2024/01/24 05:19 下午 + * @see com.wu.framework.inner.lazy.persistence.reverse.lazy.ddd.DefaultDDDLazyQueryListCommand + **/ +@Data +@Accessors(chain = true) +@Schema(title = "visitor_flow_query_List_command",description = "访客端流量") +public class VisitorFlowQueryListCommand { + + + /** + * + * 客户端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 ="inFlow",example = "") + private Integer inFlow; + + /** + * + * 是否删除 + */ + @Schema(description ="是否删除",name ="isDeleted",example = "") + private Boolean isDeleted; + + /** + * + * 当前访客出口流量 + */ + @Schema(description ="当前访客出口流量",name ="outFlow",example = "") + private Integer outFlow; + + /** + * + * 修改时间 + */ + @Schema(description ="修改时间",name ="updateTime",example = "") + private LocalDateTime updateTime; + + /** + * + * 访客端口 + */ + @Schema(description ="访客端口",name ="visitorPort",example = "") + private Integer visitorPort; + +} \ No newline at end of file diff --git a/wu-lazy-cloud-heartbeat-server/src/main/java/wu/framework/lazy/cloud/heartbeat/server/application/command/visitor/flow/VisitorFlowQueryOneCommand.java b/wu-lazy-cloud-heartbeat-server/src/main/java/wu/framework/lazy/cloud/heartbeat/server/application/command/visitor/flow/VisitorFlowQueryOneCommand.java new file mode 100644 index 0000000..600a5f2 --- /dev/null +++ b/wu-lazy-cloud-heartbeat-server/src/main/java/wu/framework/lazy/cloud/heartbeat/server/application/command/visitor/flow/VisitorFlowQueryOneCommand.java @@ -0,0 +1,80 @@ +package wu.framework.lazy.cloud.heartbeat.server.application.command.visitor.flow; + +import lombok.Data; +import lombok.experimental.Accessors; +import io.swagger.v3.oas.annotations.media.Schema; +import java.lang.String; +import java.time.LocalDateTime; +import java.lang.Long; +import java.lang.Integer; +import java.lang.Boolean; +/** + * describe 访客端流量 + * + * @author Jia wei Wu + * @date 2024/01/24 05:19 下午 + * @see com.wu.framework.inner.lazy.persistence.reverse.lazy.ddd.DefaultDDDLazyQueryOneCommand + **/ +@Data +@Accessors(chain = true) +@Schema(title = "visitor_flow_query_one_command",description = "访客端流量") +public class VisitorFlowQueryOneCommand { + + + /** + * + * 客户端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 ="inFlow",example = "") + private Integer inFlow; + + /** + * + * 是否删除 + */ + @Schema(description ="是否删除",name ="isDeleted",example = "") + private Boolean isDeleted; + + /** + * + * 当前访客出口流量 + */ + @Schema(description ="当前访客出口流量",name ="outFlow",example = "") + private Integer outFlow; + + /** + * + * 修改时间 + */ + @Schema(description ="修改时间",name ="updateTime",example = "") + private LocalDateTime updateTime; + + /** + * + * 访客端口 + */ + @Schema(description ="访客端口",name ="visitorPort",example = "") + private Integer visitorPort; + +} \ No newline at end of file diff --git a/wu-lazy-cloud-heartbeat-server/src/main/java/wu/framework/lazy/cloud/heartbeat/server/application/command/visitor/flow/VisitorFlowRemoveCommand.java b/wu-lazy-cloud-heartbeat-server/src/main/java/wu/framework/lazy/cloud/heartbeat/server/application/command/visitor/flow/VisitorFlowRemoveCommand.java new file mode 100644 index 0000000..b169f2e --- /dev/null +++ b/wu-lazy-cloud-heartbeat-server/src/main/java/wu/framework/lazy/cloud/heartbeat/server/application/command/visitor/flow/VisitorFlowRemoveCommand.java @@ -0,0 +1,80 @@ +package wu.framework.lazy.cloud.heartbeat.server.application.command.visitor.flow; + +import lombok.Data; +import lombok.experimental.Accessors; +import io.swagger.v3.oas.annotations.media.Schema; +import java.lang.String; +import java.time.LocalDateTime; +import java.lang.Long; +import java.lang.Integer; +import java.lang.Boolean; +/** + * describe 访客端流量 + * + * @author Jia wei Wu + * @date 2024/01/24 05:19 下午 + * @see com.wu.framework.inner.lazy.persistence.reverse.lazy.ddd.DefaultDDDLazyRemoveCommand + **/ +@Data +@Accessors(chain = true) +@Schema(title = "visitor_flow_remove_command",description = "访客端流量") +public class VisitorFlowRemoveCommand { + + + /** + * + * 客户端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 ="inFlow",example = "") + private Integer inFlow; + + /** + * + * 是否删除 + */ + @Schema(description ="是否删除",name ="isDeleted",example = "") + private Boolean isDeleted; + + /** + * + * 当前访客出口流量 + */ + @Schema(description ="当前访客出口流量",name ="outFlow",example = "") + private Integer outFlow; + + /** + * + * 修改时间 + */ + @Schema(description ="修改时间",name ="updateTime",example = "") + private LocalDateTime updateTime; + + /** + * + * 访客端口 + */ + @Schema(description ="访客端口",name ="visitorPort",example = "") + private Integer visitorPort; + +} \ No newline at end of file diff --git a/wu-lazy-cloud-heartbeat-server/src/main/java/wu/framework/lazy/cloud/heartbeat/server/application/command/visitor/flow/VisitorFlowStoryCommand.java b/wu-lazy-cloud-heartbeat-server/src/main/java/wu/framework/lazy/cloud/heartbeat/server/application/command/visitor/flow/VisitorFlowStoryCommand.java new file mode 100644 index 0000000..2643781 --- /dev/null +++ b/wu-lazy-cloud-heartbeat-server/src/main/java/wu/framework/lazy/cloud/heartbeat/server/application/command/visitor/flow/VisitorFlowStoryCommand.java @@ -0,0 +1,80 @@ +package wu.framework.lazy.cloud.heartbeat.server.application.command.visitor.flow; + +import lombok.Data; +import lombok.experimental.Accessors; +import io.swagger.v3.oas.annotations.media.Schema; +import java.lang.String; +import java.time.LocalDateTime; +import java.lang.Long; +import java.lang.Integer; +import java.lang.Boolean; +/** + * describe 访客端流量 + * + * @author Jia wei Wu + * @date 2024/01/24 05:19 下午 + * @see com.wu.framework.inner.lazy.persistence.reverse.lazy.ddd.DefaultDDDLazyStoryCommand + **/ +@Data +@Accessors(chain = true) +@Schema(title = "visitor_flow_story_command",description = "访客端流量") +public class VisitorFlowStoryCommand { + + + /** + * + * 客户端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 ="inFlow",example = "") + private Integer inFlow; + + /** + * + * 是否删除 + */ + @Schema(description ="是否删除",name ="isDeleted",example = "") + private Boolean isDeleted; + + /** + * + * 当前访客出口流量 + */ + @Schema(description ="当前访客出口流量",name ="outFlow",example = "") + private Integer outFlow; + + /** + * + * 修改时间 + */ + @Schema(description ="修改时间",name ="updateTime",example = "") + private LocalDateTime updateTime; + + /** + * + * 访客端口 + */ + @Schema(description ="访客端口",name ="visitorPort",example = "") + private Integer visitorPort; + +} \ No newline at end of file diff --git a/wu-lazy-cloud-heartbeat-server/src/main/java/wu/framework/lazy/cloud/heartbeat/server/application/command/visitor/flow/VisitorFlowUpdateCommand.java b/wu-lazy-cloud-heartbeat-server/src/main/java/wu/framework/lazy/cloud/heartbeat/server/application/command/visitor/flow/VisitorFlowUpdateCommand.java new file mode 100644 index 0000000..5d265ff --- /dev/null +++ b/wu-lazy-cloud-heartbeat-server/src/main/java/wu/framework/lazy/cloud/heartbeat/server/application/command/visitor/flow/VisitorFlowUpdateCommand.java @@ -0,0 +1,80 @@ +package wu.framework.lazy.cloud.heartbeat.server.application.command.visitor.flow; + +import lombok.Data; +import lombok.experimental.Accessors; +import io.swagger.v3.oas.annotations.media.Schema; +import java.lang.String; +import java.time.LocalDateTime; +import java.lang.Long; +import java.lang.Integer; +import java.lang.Boolean; +/** + * describe 访客端流量 + * + * @author Jia wei Wu + * @date 2024/01/24 05:19 下午 + * @see com.wu.framework.inner.lazy.persistence.reverse.lazy.ddd.DefaultDDDLazyUpdateCommand + **/ +@Data +@Accessors(chain = true) +@Schema(title = "visitor_flow_update_command",description = "访客端流量") +public class VisitorFlowUpdateCommand { + + + /** + * + * 客户端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 ="inFlow",example = "") + private Integer inFlow; + + /** + * + * 是否删除 + */ + @Schema(description ="是否删除",name ="isDeleted",example = "") + private Boolean isDeleted; + + /** + * + * 当前访客出口流量 + */ + @Schema(description ="当前访客出口流量",name ="outFlow",example = "") + private Integer outFlow; + + /** + * + * 修改时间 + */ + @Schema(description ="修改时间",name ="updateTime",example = "") + private LocalDateTime updateTime; + + /** + * + * 访客端口 + */ + @Schema(description ="访客端口",name ="visitorPort",example = "") + private Integer visitorPort; + +} \ No newline at end of file diff --git a/wu-lazy-cloud-heartbeat-server/src/main/java/wu/framework/lazy/cloud/heartbeat/server/application/dto/VisitorFlowDTO.java b/wu-lazy-cloud-heartbeat-server/src/main/java/wu/framework/lazy/cloud/heartbeat/server/application/dto/VisitorFlowDTO.java new file mode 100644 index 0000000..a2e7480 --- /dev/null +++ b/wu-lazy-cloud-heartbeat-server/src/main/java/wu/framework/lazy/cloud/heartbeat/server/application/dto/VisitorFlowDTO.java @@ -0,0 +1,80 @@ +package wu.framework.lazy.cloud.heartbeat.server.application.dto; + +import lombok.Data; +import lombok.experimental.Accessors; +import io.swagger.v3.oas.annotations.media.Schema; +import java.lang.String; +import java.time.LocalDateTime; +import java.lang.Long; +import java.lang.Integer; +import java.lang.Boolean; +/** + * describe 访客端流量 + * + * @author Jia wei Wu + * @date 2024/01/24 05:19 下午 + * @see com.wu.framework.inner.lazy.persistence.reverse.lazy.ddd.DefaultDDDLazyDTO + **/ +@Data +@Accessors(chain = true) +@Schema(title = "visitor_flow_command_dto",description = "访客端流量") +public class VisitorFlowDTO { + + + /** + * + * 客户端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 ="inFlow",example = "") + private Integer inFlow; + + /** + * + * 是否删除 + */ + @Schema(description ="是否删除",name ="isDeleted",example = "") + private Boolean isDeleted; + + /** + * + * 当前访客出口流量 + */ + @Schema(description ="当前访客出口流量",name ="outFlow",example = "") + private Integer outFlow; + + /** + * + * 修改时间 + */ + @Schema(description ="修改时间",name ="updateTime",example = "") + private LocalDateTime updateTime; + + /** + * + * 访客端口 + */ + @Schema(description ="访客端口",name ="visitorPort",example = "") + private Integer visitorPort; + +} \ No newline at end of file diff --git a/wu-lazy-cloud-heartbeat-server/src/main/java/wu/framework/lazy/cloud/heartbeat/server/application/impl/VisitorFlowApplicationImpl.java b/wu-lazy-cloud-heartbeat-server/src/main/java/wu/framework/lazy/cloud/heartbeat/server/application/impl/VisitorFlowApplicationImpl.java new file mode 100644 index 0000000..e21601f --- /dev/null +++ b/wu-lazy-cloud-heartbeat-server/src/main/java/wu/framework/lazy/cloud/heartbeat/server/application/impl/VisitorFlowApplicationImpl.java @@ -0,0 +1,144 @@ +package wu.framework.lazy.cloud.heartbeat.server.application.impl; + +import com.wu.framework.database.lazy.web.plus.stereotype.LazyApplication; +import wu.framework.lazy.cloud.heartbeat.server.application.VisitorFlowApplication; +import org.springframework.web.bind.annotation.*; +import com.wu.framework.response.Result; +import com.wu.framework.response.ResultFactory; +import org.springframework.beans.factory.annotation.Autowired; +import wu.framework.lazy.cloud.heartbeat.server.domain.model.visitor.flow.VisitorFlow; +import wu.framework.lazy.cloud.heartbeat.server.application.command.visitor.flow.VisitorFlowRemoveCommand; +import wu.framework.lazy.cloud.heartbeat.server.application.command.visitor.flow.VisitorFlowStoryCommand; +import wu.framework.lazy.cloud.heartbeat.server.application.command.visitor.flow.VisitorFlowUpdateCommand; +import wu.framework.lazy.cloud.heartbeat.server.application.command.visitor.flow.VisitorFlowQueryListCommand; +import wu.framework.lazy.cloud.heartbeat.server.application.command.visitor.flow.VisitorFlowQueryOneCommand; +import wu.framework.lazy.cloud.heartbeat.server.application.assembler.VisitorFlowDTOAssembler; +import wu.framework.lazy.cloud.heartbeat.server.application.dto.VisitorFlowDTO; +import java.util.stream.Collectors; +import jakarta.annotation.Resource; +import wu.framework.lazy.cloud.heartbeat.server.domain.model.visitor.flow.VisitorFlowRepository; +import java.util.List; +import com.wu.framework.inner.lazy.database.expand.database.persistence.domain.LazyPage; +/** + * describe 访客端流量 + * + * @author Jia wei Wu + * @date 2024/01/24 05:19 下午 + * @see com.wu.framework.inner.lazy.persistence.reverse.lazy.ddd.DefaultDDDLazyApplicationImpl + **/ +@LazyApplication +public class VisitorFlowApplicationImpl implements VisitorFlowApplication { + + @Resource + VisitorFlowRepository visitorFlowRepository; + /** + * describe 新增访客端流量 + * + * @param visitorFlowStoryCommand 新增访客端流量 + * @return {@link Result} 访客端流量新增后领域对象 + + * @author Jia wei Wu + * @date 2024/01/24 05:19 下午 + **/ + + @Override + public Result story(VisitorFlowStoryCommand visitorFlowStoryCommand) { + VisitorFlow visitorFlow = VisitorFlowDTOAssembler.INSTANCE.toVisitorFlow(visitorFlowStoryCommand); + return visitorFlowRepository.story(visitorFlow); + } + /** + * describe 批量新增访客端流量 + * + * @param visitorFlowStoryCommandList 批量新增访客端流量 + * @return {@link Result>} 访客端流量新增后领域对象集合 + + * @author Jia wei Wu + * @date 2024/01/24 05:19 下午 + **/ + + @Override + public Result> batchStory(List visitorFlowStoryCommandList) { + List visitorFlowList = visitorFlowStoryCommandList.stream().map( VisitorFlowDTOAssembler.INSTANCE::toVisitorFlow).collect(Collectors.toList()); + return visitorFlowRepository.batchStory(visitorFlowList); + } + /** + * describe 更新访客端流量 + * + * @param visitorFlowUpdateCommand 更新访客端流量 + * @return {@link Result} 访客端流量领域对象 + + * @author Jia wei Wu + * @date 2024/01/24 05:19 下午 + **/ + + @Override + public Result updateOne(VisitorFlowUpdateCommand visitorFlowUpdateCommand) { + VisitorFlow visitorFlow = VisitorFlowDTOAssembler.INSTANCE.toVisitorFlow(visitorFlowUpdateCommand); + return visitorFlowRepository.story(visitorFlow); + } + + /** + * describe 查询单个访客端流量 + * + * @param visitorFlowQueryOneCommand 查询单个访客端流量 + * @return {@link Result} 访客端流量DTO对象 + + * @author Jia wei Wu + * @date 2024/01/24 05:19 下午 + **/ + + @Override + public Result findOne(VisitorFlowQueryOneCommand visitorFlowQueryOneCommand) { + VisitorFlow visitorFlow = VisitorFlowDTOAssembler.INSTANCE.toVisitorFlow(visitorFlowQueryOneCommand); + return visitorFlowRepository.findOne(visitorFlow).convert(VisitorFlowDTOAssembler.INSTANCE::fromVisitorFlow); + } + + /** + * describe 查询多个访客端流量 + * + * @param visitorFlowQueryListCommand 查询多个访客端流量 + * @return {@link Result>} 访客端流量DTO对象 + + * @author Jia wei Wu + * @date 2024/01/24 05:19 下午 + **/ + + @Override + public Result> findList(VisitorFlowQueryListCommand visitorFlowQueryListCommand) { + VisitorFlow visitorFlow = VisitorFlowDTOAssembler.INSTANCE.toVisitorFlow(visitorFlowQueryListCommand); + return visitorFlowRepository.findList(visitorFlow) .convert(visitorFlows -> visitorFlows.stream().map(VisitorFlowDTOAssembler.INSTANCE::fromVisitorFlow).collect(Collectors.toList())) ; + } + + /** + * describe 分页查询多个访客端流量 + * + * @param visitorFlowQueryListCommand 分页查询多个访客端流量 + * @return {@link Result>} 分页访客端流量DTO对象 + + * @author Jia wei Wu + * @date 2024/01/24 05:19 下午 + **/ + + @Override + public Result> findPage(int size,int current,VisitorFlowQueryListCommand visitorFlowQueryListCommand) { + VisitorFlow visitorFlow = VisitorFlowDTOAssembler.INSTANCE.toVisitorFlow(visitorFlowQueryListCommand); + return visitorFlowRepository.findPage(size,current,visitorFlow) .convert(page -> page.convert(VisitorFlowDTOAssembler.INSTANCE::fromVisitorFlow)) ; + } + + /** + * describe 删除访客端流量 + * + * @param visitorFlowRemoveCommand 删除访客端流量 + * @return {@link Result} 访客端流量 + + * @author Jia wei Wu + * @date 2024/01/24 05:19 下午 + **/ + + @Override + public Result remove(VisitorFlowRemoveCommand visitorFlowRemoveCommand) { + VisitorFlow visitorFlow = VisitorFlowDTOAssembler.INSTANCE.toVisitorFlow(visitorFlowRemoveCommand); + return visitorFlowRepository.remove(visitorFlow); + } + +} \ No newline at end of file diff --git a/wu-lazy-cloud-heartbeat-server/src/main/java/wu/framework/lazy/cloud/heartbeat/server/controller/VisitorFlowProvider.java b/wu-lazy-cloud-heartbeat-server/src/main/java/wu/framework/lazy/cloud/heartbeat/server/controller/VisitorFlowProvider.java new file mode 100644 index 0000000..bc19b1f --- /dev/null +++ b/wu-lazy-cloud-heartbeat-server/src/main/java/wu/framework/lazy/cloud/heartbeat/server/controller/VisitorFlowProvider.java @@ -0,0 +1,142 @@ +package wu.framework.lazy.cloud.heartbeat.server.controller; + +import io.swagger.v3.oas.annotations.tags.Tag; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import com.wu.framework.inner.layer.web.EasyController; +import org.springframework.web.bind.annotation.*; +import com.wu.framework.response.Result; +import com.wu.framework.response.ResultFactory; +import org.springframework.beans.factory.annotation.Autowired; +import jakarta.annotation.Resource; +import wu.framework.lazy.cloud.heartbeat.server.domain.model.visitor.flow.VisitorFlow; +import wu.framework.lazy.cloud.heartbeat.server.application.command.visitor.flow.VisitorFlowRemoveCommand; +import wu.framework.lazy.cloud.heartbeat.server.application.command.visitor.flow.VisitorFlowStoryCommand; +import wu.framework.lazy.cloud.heartbeat.server.application.command.visitor.flow.VisitorFlowUpdateCommand; +import wu.framework.lazy.cloud.heartbeat.server.application.command.visitor.flow.VisitorFlowQueryListCommand; +import wu.framework.lazy.cloud.heartbeat.server.application.command.visitor.flow.VisitorFlowQueryOneCommand; +import wu.framework.lazy.cloud.heartbeat.server.application.VisitorFlowApplication; +import wu.framework.lazy.cloud.heartbeat.server.application.dto.VisitorFlowDTO; +import java.util.List; +import com.wu.framework.inner.lazy.database.expand.database.persistence.domain.LazyPage; +/** + * describe 访客端流量 + * + * @author Jia wei Wu + * @date 2024/01/24 05:19 下午 + * @see com.wu.framework.inner.lazy.persistence.reverse.lazy.ddd.DefaultDDDLazyController + **/ +@Tag(name = "访客端流量提供者") +@EasyController("/visitor/flow") +public class VisitorFlowProvider { + + @Resource + private VisitorFlowApplication visitorFlowApplication; + + /** + * describe 新增访客端流量 + * + * @param visitorFlowStoryCommand 新增访客端流量 + * @return {@link Result} 访客端流量新增后领域对象 + + * @author Jia wei Wu + * @date 2024/01/24 05:19 下午 + **/ + + @Operation(summary = "新增访客端流量") + @PostMapping("/story") + public Result story(@RequestBody VisitorFlowStoryCommand visitorFlowStoryCommand){ + return visitorFlowApplication.story(visitorFlowStoryCommand); + } + /** + * describe 批量新增访客端流量 + * + * @param visitorFlowStoryCommandList 批量新增访客端流量 + * @return {@link Result>} 访客端流量新增后领域对象集合 + + * @author Jia wei Wu + * @date 2024/01/24 05:19 下午 + **/ + + @Operation(summary = "批量新增访客端流量") + @PostMapping("/batchStory") + public Result> batchStory(@RequestBody List visitorFlowStoryCommandList){ + return visitorFlowApplication.batchStory(visitorFlowStoryCommandList); + } + /** + * describe 更新访客端流量 + * + * @param visitorFlowUpdateCommand 更新访客端流量 + * @return {@link Result} 访客端流量领域对象 + + * @author Jia wei Wu + * @date 2024/01/24 05:19 下午 + **/ + + @Operation(summary = "更新访客端流量") + @PutMapping("/updateOne") + public Result updateOne(@RequestBody VisitorFlowUpdateCommand visitorFlowUpdateCommand){ + return visitorFlowApplication.updateOne(visitorFlowUpdateCommand); + } + /** + * describe 查询单个访客端流量 + * + * @param visitorFlowQueryOneCommand 查询单个访客端流量 + * @return {@link Result} 访客端流量DTO对象 + + * @author Jia wei Wu + * @date 2024/01/24 05:19 下午 + **/ + + @Operation(summary = "查询单个访客端流量") + @GetMapping("/findOne") + public Result findOne(@ModelAttribute VisitorFlowQueryOneCommand visitorFlowQueryOneCommand){ + return visitorFlowApplication.findOne(visitorFlowQueryOneCommand); + } + /** + * describe 查询多个访客端流量 + * + * @param visitorFlowQueryListCommand 查询多个访客端流量 + * @return {@link Result>} 访客端流量DTO对象 + + * @author Jia wei Wu + * @date 2024/01/24 05:19 下午 + **/ + + @Operation(summary = "查询多个访客端流量") + @GetMapping("/findList") + public Result> findList(@ModelAttribute VisitorFlowQueryListCommand visitorFlowQueryListCommand){ + return visitorFlowApplication.findList(visitorFlowQueryListCommand); + } + /** + * describe 分页查询多个访客端流量 + * + * @param visitorFlowQueryListCommand 分页查询多个访客端流量 + * @return {@link Result>} 分页访客端流量DTO对象 + + * @author Jia wei Wu + * @date 2024/01/24 05:19 下午 + **/ + + @Operation(summary = "分页查询多个访客端流量") + @GetMapping("/findPage") + public Result> findPage(@Parameter(description ="分页大小") @RequestParam(defaultValue = "10", value = "size") int size, + @Parameter(description ="当前页数") @RequestParam(defaultValue = "1", value = "current") int current,@ModelAttribute VisitorFlowQueryListCommand visitorFlowQueryListCommand){ + return visitorFlowApplication.findPage(size,current,visitorFlowQueryListCommand); + } + /** + * describe 删除访客端流量 + * + * @param visitorFlowRemoveCommand 删除访客端流量 + * @return {@link Result} 访客端流量 + + * @author Jia wei Wu + * @date 2024/01/24 05:19 下午 + **/ + + @Operation(summary = "删除访客端流量") + @DeleteMapping("/remove") + public Result remove(@ModelAttribute VisitorFlowRemoveCommand visitorFlowRemoveCommand){ + return visitorFlowApplication.remove(visitorFlowRemoveCommand); + } +} \ No newline at end of file diff --git a/wu-lazy-cloud-heartbeat-server/src/main/java/wu/framework/lazy/cloud/heartbeat/server/domain/model/visitor/flow/VisitorFlow.java b/wu-lazy-cloud-heartbeat-server/src/main/java/wu/framework/lazy/cloud/heartbeat/server/domain/model/visitor/flow/VisitorFlow.java new file mode 100644 index 0000000..25983ce --- /dev/null +++ b/wu-lazy-cloud-heartbeat-server/src/main/java/wu/framework/lazy/cloud/heartbeat/server/domain/model/visitor/flow/VisitorFlow.java @@ -0,0 +1,80 @@ +package wu.framework.lazy.cloud.heartbeat.server.domain.model.visitor.flow; + +import lombok.Data; +import lombok.experimental.Accessors; +import io.swagger.v3.oas.annotations.media.Schema; +import java.lang.String; +import java.time.LocalDateTime; +import java.lang.Long; +import java.lang.Integer; +import java.lang.Boolean; +/** + * describe 访客端流量 + * + * @author Jia wei Wu + * @date 2024/01/24 05:19 下午 + * @see com.wu.framework.inner.lazy.persistence.reverse.lazy.ddd.DefaultDDDLazyDomain + **/ +@Data +@Accessors(chain = true) +@Schema(title = "visitor_flow",description = "访客端流量") +public class VisitorFlow { + + + /** + * + * 客户端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 ="inFlow",example = "") + private Integer inFlow; + + /** + * + * 是否删除 + */ + @Schema(description ="是否删除",name ="isDeleted",example = "") + private Boolean isDeleted; + + /** + * + * 当前访客出口流量 + */ + @Schema(description ="当前访客出口流量",name ="outFlow",example = "") + private Integer outFlow; + + /** + * + * 修改时间 + */ + @Schema(description ="修改时间",name ="updateTime",example = "") + private LocalDateTime updateTime; + + /** + * + * 访客端口 + */ + @Schema(description ="访客端口",name ="visitorPort",example = "") + private Integer visitorPort; + +} \ No newline at end of file diff --git a/wu-lazy-cloud-heartbeat-server/src/main/java/wu/framework/lazy/cloud/heartbeat/server/domain/model/visitor/flow/VisitorFlowRepository.java b/wu-lazy-cloud-heartbeat-server/src/main/java/wu/framework/lazy/cloud/heartbeat/server/domain/model/visitor/flow/VisitorFlowRepository.java new file mode 100644 index 0000000..fbb90d7 --- /dev/null +++ b/wu-lazy-cloud-heartbeat-server/src/main/java/wu/framework/lazy/cloud/heartbeat/server/domain/model/visitor/flow/VisitorFlowRepository.java @@ -0,0 +1,106 @@ +package wu.framework.lazy.cloud.heartbeat.server.domain.model.visitor.flow; + +import com.wu.framework.response.Result; +import com.wu.framework.response.ResultFactory; +import org.springframework.beans.factory.annotation.Autowired; +import wu.framework.lazy.cloud.heartbeat.server.domain.model.visitor.flow.VisitorFlow; +import java.util.List; +import com.wu.framework.inner.lazy.database.expand.database.persistence.domain.LazyPage; +/** + * describe 访客端流量 + * + * @author Jia wei Wu + * @date 2024/01/24 05:19 下午 + * @see com.wu.framework.inner.lazy.persistence.reverse.lazy.ddd.DefaultDDDLazyDomainRepository + **/ + +public interface VisitorFlowRepository { + + + /** + * describe 新增访客端流量 + * + * @param visitorFlow 新增访客端流量 + * @return {@link Result} 访客端流量新增后领域对象 + + * @author Jia wei Wu + * @date 2024/01/24 05:19 下午 + **/ + + Result story(VisitorFlow visitorFlow); + + /** + * describe 批量新增访客端流量 + * + * @param visitorFlowList 批量新增访客端流量 + * @return {@link Result>} 访客端流量新增后领域对象集合 + + * @author Jia wei Wu + * @date 2024/01/24 05:19 下午 + **/ + + Result> batchStory(List visitorFlowList); + + /** + * describe 查询单个访客端流量 + * + * @param visitorFlow 查询单个访客端流量 + * @return {@link Result} 访客端流量DTO对象 + + * @author Jia wei Wu + * @date 2024/01/24 05:19 下午 + **/ + + Result findOne(VisitorFlow visitorFlow); + + /** + * describe 查询多个访客端流量 + * + * @param visitorFlow 查询多个访客端流量 + * @return {@link Result>} 访客端流量DTO对象 + + * @author Jia wei Wu + * @date 2024/01/24 05:19 下午 + **/ + + Result> findList(VisitorFlow visitorFlow); + + /** + * describe 分页查询多个访客端流量 + * + * @param size 当前页数 + * @param current 当前页 + * @param visitorFlow 分页查询多个访客端流量 + * @return {@link Result>} 分页访客端流量领域对象 + + * @author Jia wei Wu + * @date 2024/01/24 05:19 下午 + **/ + + Result> findPage(int size,int current,VisitorFlow visitorFlow); + + /** + * describe 删除访客端流量 + * + * @param visitorFlow 删除访客端流量 + * @return {@link Result} 访客端流量 + + * @author Jia wei Wu + * @date 2024/01/24 05:19 下午 + **/ + + Result remove(VisitorFlow visitorFlow); + + /** + * describe 是否存在访客端流量 + * + * @param visitorFlow 是否存在访客端流量 + * @return {@link Result} 访客端流量是否存在 + + * @author Jia wei Wu + * @date 2024/01/24 05:19 下午 + **/ + + Result exists(VisitorFlow visitorFlow); + +} \ No newline at end of file diff --git a/wu-lazy-cloud-heartbeat-server/src/main/java/wu/framework/lazy/cloud/heartbeat/server/infrastructure/converter/VisitorFlowConverter.java b/wu-lazy-cloud-heartbeat-server/src/main/java/wu/framework/lazy/cloud/heartbeat/server/infrastructure/converter/VisitorFlowConverter.java new file mode 100644 index 0000000..49c2bbd --- /dev/null +++ b/wu-lazy-cloud-heartbeat-server/src/main/java/wu/framework/lazy/cloud/heartbeat/server/infrastructure/converter/VisitorFlowConverter.java @@ -0,0 +1,48 @@ +package wu.framework.lazy.cloud.heartbeat.server.infrastructure.converter; + +import wu.framework.lazy.cloud.heartbeat.server.domain.model.visitor.flow.VisitorFlow; +import wu.framework.lazy.cloud.heartbeat.server.infrastructure.entity.VisitorFlowDO; +import org.mapstruct.factory.Mappers; +import org.mapstruct.Mapper; +/** + * describe 访客端流量 + * + * @author Jia wei Wu + * @date 2024/01/24 05:19 下午 + * @see com.wu.framework.inner.lazy.persistence.reverse.lazy.ddd.DefaultDDDLazyInfrastructureConverter + **/ +@Mapper +public interface VisitorFlowConverter { + + + /** + * describe MapStruct 创建的代理对象 + * + + + + * @author Jia wei Wu + * @date 2024/01/24 05:19 下午 + **/ + VisitorFlowConverter INSTANCE = Mappers.getMapper(VisitorFlowConverter.class); + /** + * describe 实体对象 转换成领域对象 + * + * @param visitorFlowDO 访客端流量实体对象 + * @return {@link VisitorFlow} 访客端流量领域对象 + + * @author Jia wei Wu + * @date 2024/01/24 05:19 下午 + **/ + VisitorFlow toVisitorFlow(VisitorFlowDO visitorFlowDO); + /** + * describe 领域对象 转换成实体对象 + * + * @param visitorFlow 访客端流量领域对象 + * @return {@link VisitorFlowDO} 访客端流量实体对象 + + * @author Jia wei Wu + * @date 2024/01/24 05:19 下午 + **/ + VisitorFlowDO fromVisitorFlow(VisitorFlow visitorFlow); +} \ No newline at end of file diff --git a/wu-lazy-cloud-heartbeat-server/src/main/java/wu/framework/lazy/cloud/heartbeat/server/infrastructure/entity/VisitorFlowDO.java b/wu-lazy-cloud-heartbeat-server/src/main/java/wu/framework/lazy/cloud/heartbeat/server/infrastructure/entity/VisitorFlowDO.java new file mode 100644 index 0000000..659ef02 --- /dev/null +++ b/wu-lazy-cloud-heartbeat-server/src/main/java/wu/framework/lazy/cloud/heartbeat/server/infrastructure/entity/VisitorFlowDO.java @@ -0,0 +1,96 @@ +package wu.framework.lazy.cloud.heartbeat.server.infrastructure.entity; + +import lombok.Data; +import lombok.experimental.Accessors; +import com.wu.framework.inner.lazy.stereotype.LazyTableIndex; +import com.wu.framework.inner.layer.stereotype.LayerField; +import com.wu.framework.inner.layer.stereotype.LayerField.LayerFieldType; +import com.wu.framework.inner.lazy.stereotype.LazyTable; +import com.wu.framework.inner.lazy.stereotype.LazyTableField; +import com.wu.framework.inner.lazy.stereotype.*; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.media.Schema; +import java.lang.String; +import java.time.LocalDateTime; +import java.lang.Long; +import java.lang.Integer; +import java.lang.Boolean; +/** + * describe 访客端流量 + * + * @author Jia wei Wu + * @date 2024/01/24 05:19 下午 + * @see com.wu.framework.inner.lazy.persistence.reverse.lazy.ddd.DefaultDDDLazyInfrastructureEntity + **/ +@Data +@Accessors(chain = true) +@LazyTable(tableName = "visitor_flow",schema = "wu_lazy_cloud_netty_server",comment = "访客端流量") +@Schema(title = "visitor_flow",description = "访客端流量") +public class VisitorFlowDO { + + + /** + * + * 客户端ID + */ + @Schema(description ="客户端ID",name ="clientId",example = "") + @LazyTableFieldUnique(name="client_id",comment="客户端ID",columnType="varchar(50)") + private String clientId; + + /** + * + * 创建时间 + */ + @Schema(description ="创建时间",name ="createTime",example = "") + @LazyTableFieldCreateTime + private LocalDateTime createTime; + + /** + * + * 主键 + */ + @Schema(description ="主键",name ="id",example = "") + @LazyTableFieldId(name="id",comment="主键") + private Long id; + + /** + * + * 当前访客当前进口流量 + */ + @Schema(description ="当前访客当前进口流量",name ="inFlow",example = "") + @LazyTableField(name="in_flow",comment="当前访客当前进口流量",columnType="int") + private Integer inFlow; + + /** + * + * 是否删除 + */ + @Schema(description ="是否删除",name ="isDeleted",example = "") + @LazyTableField(name="is_deleted",comment="是否删除",defaultValue="'0'",upsertStrategy = LazyFieldStrategy.NEVER,columnType="tinyint") + private Boolean isDeleted; + + /** + * + * 当前访客出口流量 + */ + @Schema(description ="当前访客出口流量",name ="outFlow",example = "") + @LazyTableField(name="out_flow",comment="当前访客出口流量",columnType="int") + private Integer outFlow; + + /** + * + * 修改时间 + */ + @Schema(description ="修改时间",name ="updateTime",example = "") + @LazyTableFieldUpdateTime + private LocalDateTime updateTime; + + /** + * + * 访客端口 + */ + @Schema(description ="访客端口",name ="visitorPort",example = "") + @LazyTableFieldUnique(name="visitor_port",comment="访客端口",columnType="int") + private Integer visitorPort; + +} \ No newline at end of file diff --git a/wu-lazy-cloud-heartbeat-server/src/main/java/wu/framework/lazy/cloud/heartbeat/server/infrastructure/mapper/VisitorFlowMapper.java b/wu-lazy-cloud-heartbeat-server/src/main/java/wu/framework/lazy/cloud/heartbeat/server/infrastructure/mapper/VisitorFlowMapper.java new file mode 100644 index 0000000..c0412c8 --- /dev/null +++ b/wu-lazy-cloud-heartbeat-server/src/main/java/wu/framework/lazy/cloud/heartbeat/server/infrastructure/mapper/VisitorFlowMapper.java @@ -0,0 +1,15 @@ +package wu.framework.lazy.cloud.heartbeat.server.infrastructure.mapper; + +/** + * describe 访客端流量 + * + * @author Jia wei Wu + * @date 2024/01/24 05:19 下午 + * @see com.wu.framework.inner.lazy.persistence.reverse.lazy.ddd.DefaultDDDLazyInfrastructureMapper + **/ + +public interface VisitorFlowMapper { + + + +} \ No newline at end of file diff --git a/wu-lazy-cloud-heartbeat-server/src/main/java/wu/framework/lazy/cloud/heartbeat/server/infrastructure/persistence/VisitorFlowRepositoryImpl.java b/wu-lazy-cloud-heartbeat-server/src/main/java/wu/framework/lazy/cloud/heartbeat/server/infrastructure/persistence/VisitorFlowRepositoryImpl.java new file mode 100644 index 0000000..7569b43 --- /dev/null +++ b/wu-lazy-cloud-heartbeat-server/src/main/java/wu/framework/lazy/cloud/heartbeat/server/infrastructure/persistence/VisitorFlowRepositoryImpl.java @@ -0,0 +1,152 @@ +package wu.framework.lazy.cloud.heartbeat.server.infrastructure.persistence; + +import wu.framework.lazy.cloud.heartbeat.server.infrastructure.entity.VisitorFlowDO; +import wu.framework.lazy.cloud.heartbeat.server.infrastructure.converter.VisitorFlowConverter; +import wu.framework.lazy.cloud.heartbeat.server.infrastructure.mapper.VisitorFlowMapper; +import wu.framework.lazy.cloud.heartbeat.server.domain.model.visitor.flow.VisitorFlowRepository; +import org.springframework.stereotype.Repository; +import java.util.stream.Collectors; +import com.wu.framework.inner.lazy.database.expand.database.persistence.stream.wrapper.LazyWrappers; +import com.wu.framework.response.Result; +import com.wu.framework.response.ResultFactory; +import jakarta.annotation.Resource; +import wu.framework.lazy.cloud.heartbeat.server.domain.model.visitor.flow.VisitorFlow; +import com.wu.framework.inner.lazy.database.expand.database.persistence.stream.lambda.LazyLambdaStream; +import java.util.List; +import com.wu.framework.inner.lazy.database.expand.database.persistence.domain.LazyPage; +/** + * describe 访客端流量 + * + * @author Jia wei Wu + * @date 2024/01/24 05:19 下午 + * @see com.wu.framework.inner.lazy.persistence.reverse.lazy.ddd.DefaultDDDLazyInfrastructurePersistence + **/ +@Repository +public class VisitorFlowRepositoryImpl implements VisitorFlowRepository { + + @Resource + LazyLambdaStream lazyLambdaStream; + + /** + * describe 新增访客端流量 + * + * @param visitorFlow 新增访客端流量 + * @return {@link Result} 访客端流量新增后领域对象 + + * @author Jia wei Wu + * @date 2024/01/24 05:19 下午 + **/ + + @Override + public Result story(VisitorFlow visitorFlow) { + VisitorFlowDO visitorFlowDO = VisitorFlowConverter.INSTANCE.fromVisitorFlow(visitorFlow); + lazyLambdaStream.upsertRemoveNull(visitorFlowDO); + return ResultFactory.successOf(); + } + + /** + * describe 批量新增访客端流量 + * + * @param visitorFlowList 批量新增访客端流量 + * @return {@link Result>} 访客端流量新增后领域对象集合 + + * @author Jia wei Wu + * @date 2024/01/24 05:19 下午 + **/ + + @Override + public Result> batchStory(List visitorFlowList) { + List visitorFlowDOList = visitorFlowList.stream().map(VisitorFlowConverter.INSTANCE::fromVisitorFlow).collect(Collectors.toList()); + lazyLambdaStream.upsert(visitorFlowDOList); + return ResultFactory.successOf(); + } + + /** + * describe 查询单个访客端流量 + * + * @param visitorFlow 查询单个访客端流量 + * @return {@link Result} 访客端流量领域对象 + + * @author Jia wei Wu + * @date 2024/01/24 05:19 下午 + **/ + + @Override + public Result findOne(VisitorFlow visitorFlow) { + VisitorFlowDO visitorFlowDO = VisitorFlowConverter.INSTANCE.fromVisitorFlow(visitorFlow); + VisitorFlow visitorFlowOne = lazyLambdaStream.selectOne(LazyWrappers.lambdaWrapperBean(visitorFlowDO), VisitorFlow.class); + return ResultFactory.successOf(visitorFlowOne); + } + + /** + * describe 查询多个访客端流量 + * + * @param visitorFlow 查询多个访客端流量 + * @return {@link Result>} 访客端流量领域对象 + + * @author Jia wei Wu + * @date 2024/01/24 05:19 下午 + **/ + + @Override + public Result> findList(VisitorFlow visitorFlow) { + VisitorFlowDO visitorFlowDO = VisitorFlowConverter.INSTANCE.fromVisitorFlow(visitorFlow); + List visitorFlowList = lazyLambdaStream.selectList(LazyWrappers.lambdaWrapperBean(visitorFlowDO), VisitorFlow.class); + return ResultFactory.successOf(visitorFlowList); + } + + /** + * describe 分页查询多个访客端流量 + * + * @param size 当前页数 + * @param current 当前页 + * @param visitorFlow 分页查询多个访客端流量 + * @return {@link Result>} 分页访客端流量领域对象 + + * @author Jia wei Wu + * @date 2024/01/24 05:19 下午 + **/ + + @Override + public Result> findPage(int size,int current,VisitorFlow visitorFlow) { + VisitorFlowDO visitorFlowDO = VisitorFlowConverter.INSTANCE.fromVisitorFlow(visitorFlow); + LazyPage lazyPage = new LazyPage<>(current,size); + LazyPage visitorFlowLazyPage = lazyLambdaStream.selectPage(LazyWrappers.lambdaWrapperBean(visitorFlowDO),lazyPage, VisitorFlow.class); + return ResultFactory.successOf(visitorFlowLazyPage); + } + + /** + * describe 删除访客端流量 + * + * @param visitorFlow 删除访客端流量 + * @return {@link Result} 访客端流量 + + * @author Jia wei Wu + * @date 2024/01/24 05:19 下午 + **/ + + @Override + public Result remove(VisitorFlow visitorFlow) { + VisitorFlowDO visitorFlowDO = VisitorFlowConverter.INSTANCE.fromVisitorFlow(visitorFlow); + // lazyLambdaStream.delete(LazyWrappers.lambdaWrapperBean(visitorFlowDO)); + return ResultFactory.successOf(); + } + + /** + * describe 是否存在访客端流量 + * + * @param visitorFlow 访客端流量领域对象 + * @return {@link Result} 是否存在 true 存在,false 不存在 + + * @author Jia wei Wu + * @date 2024/01/24 05:19 下午 + **/ + + @Override + public Result exists(VisitorFlow visitorFlow) { + VisitorFlowDO visitorFlowDO = VisitorFlowConverter.INSTANCE.fromVisitorFlow(visitorFlow); + Boolean exists=lazyLambdaStream.exists(LazyWrappers.lambdaWrapperBean(visitorFlowDO)); + return ResultFactory.successOf(exists); + } + +} \ No newline at end of file diff --git a/wu-lazy-cloud-heartbeat-server/src/main/java/wu/framework/lazy/cloud/heartbeat/server/infrastructure/xml/VisitorFlowMapper.xml b/wu-lazy-cloud-heartbeat-server/src/main/java/wu/framework/lazy/cloud/heartbeat/server/infrastructure/xml/VisitorFlowMapper.xml new file mode 100644 index 0000000..57e5691 --- /dev/null +++ b/wu-lazy-cloud-heartbeat-server/src/main/java/wu/framework/lazy/cloud/heartbeat/server/infrastructure/xml/VisitorFlowMapper.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/wu-lazy-cloud-heartbeat-server/src/main/java/wu/framework/lazy/cloud/heartbeat/server/netty/advanced/ServerHandleReportHandleChannelTransferTypeAdvanced.java b/wu-lazy-cloud-heartbeat-server/src/main/java/wu/framework/lazy/cloud/heartbeat/server/netty/advanced/ServerHandleReportHandleChannelTransferTypeAdvanced.java index c027860..5193f39 100644 --- a/wu-lazy-cloud-heartbeat-server/src/main/java/wu/framework/lazy/cloud/heartbeat/server/netty/advanced/ServerHandleReportHandleChannelTransferTypeAdvanced.java +++ b/wu-lazy-cloud-heartbeat-server/src/main/java/wu/framework/lazy/cloud/heartbeat/server/netty/advanced/ServerHandleReportHandleChannelTransferTypeAdvanced.java @@ -3,11 +3,14 @@ package wu.framework.lazy.cloud.heartbeat.server.netty.advanced; import wu.framework.lazy.cloud.heartbeat.common.NettyProxyMsg; import wu.framework.lazy.cloud.heartbeat.common.NettyRealIdContext; +import wu.framework.lazy.cloud.heartbeat.common.adapter.ChannelFlowAdapter; import wu.framework.lazy.cloud.heartbeat.common.advanced.server.AbstractHandleReportHandleChannelTransferTypeAdvanced; import io.netty.buffer.ByteBuf; import io.netty.channel.Channel; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; +import wu.framework.lazy.cloud.heartbeat.common.enums.ChannelFlowEnum; +import wu.framework.lazy.cloud.heartbeat.server.netty.flow.ServerChannelFlow; /** @@ -18,6 +21,12 @@ import org.springframework.stereotype.Component; @Component public class ServerHandleReportHandleChannelTransferTypeAdvanced extends AbstractHandleReportHandleChannelTransferTypeAdvanced { + private final ChannelFlowAdapter channelFlowAdapter; + + public ServerHandleReportHandleChannelTransferTypeAdvanced(ChannelFlowAdapter channelFlowAdapter) { + this.channelFlowAdapter = channelFlowAdapter; + } + /** * 处理当前数据 * @@ -26,7 +35,9 @@ public class ServerHandleReportHandleChannelTransferTypeAdvanced extends Abstrac */ @Override public void doHandler(Channel channel, NettyProxyMsg msg) { - log.debug("接收到客户端:[{}]内网穿透返回的数据:[{}]", new String(msg.getClientId()), new String(msg.getData())); + String clientId = new String(msg.getClientId()); + Integer visitorPort = Integer.valueOf(new String(msg.getVisitorPort())); + log.debug("接收到客户端:[{}]内网穿透返回的数据:[{}]", clientId, new String(msg.getData())); // 将数据转发访客通道 byte[] visitorId = msg.getVisitorId(); Channel visitor = NettyRealIdContext.getReal(visitorId); @@ -34,6 +45,16 @@ public class ServerHandleReportHandleChannelTransferTypeAdvanced extends Abstrac ByteBuf buf = visitor.config().getAllocator().buffer(msg.getData().length); buf.writeBytes(msg.getData()); visitor.writeAndFlush(buf); + + // 记录出口数据 + ServerChannelFlow serverChannelFlow = ServerChannelFlow + .builder() + .channelFlowEnum(ChannelFlowEnum.OUT_FLOW) + .port(visitorPort) + .clientId(clientId) + .flow(msg.getData().length) + .build(); + channelFlowAdapter.handler(channel,serverChannelFlow); } } diff --git a/wu-lazy-cloud-heartbeat-server/src/main/java/wu/framework/lazy/cloud/heartbeat/server/netty/advanced/ServerHandleReportSingleClientRealConnectTypeAdvanced.java b/wu-lazy-cloud-heartbeat-server/src/main/java/wu/framework/lazy/cloud/heartbeat/server/netty/advanced/ServerHandleReportSingleClientRealConnectTypeAdvanced.java index 1a2fba7..eece7d5 100644 --- a/wu-lazy-cloud-heartbeat-server/src/main/java/wu/framework/lazy/cloud/heartbeat/server/netty/advanced/ServerHandleReportSingleClientRealConnectTypeAdvanced.java +++ b/wu-lazy-cloud-heartbeat-server/src/main/java/wu/framework/lazy/cloud/heartbeat/server/netty/advanced/ServerHandleReportSingleClientRealConnectTypeAdvanced.java @@ -33,6 +33,7 @@ public class ServerHandleReportSingleClientRealConnectTypeAdvanced extends Abstr NettyCommunicationIdContext.pushVisitor(channel,new String(visitorId)); ChannelAttributeKeyUtils.buildVisitorId(channel, visitorId); ChannelAttributeKeyUtils.buildClientId(channel, clientId); + ChannelAttributeKeyUtils.buildVisitorPort(channel,Integer.valueOf(new String(visitorPort))); // 访客通道开启自动读取 Channel visitorRealChannel = NettyRealIdContext.getReal(new String(visitorId)); visitorRealChannel.config().setOption(ChannelOption.AUTO_READ, true); diff --git a/wu-lazy-cloud-heartbeat-server/src/main/java/wu/framework/lazy/cloud/heartbeat/server/netty/config/HeartbeatServerConfiguration.java b/wu-lazy-cloud-heartbeat-server/src/main/java/wu/framework/lazy/cloud/heartbeat/server/netty/config/HeartbeatServerConfiguration.java index 2b739c0..7c8e9cc 100644 --- a/wu-lazy-cloud-heartbeat-server/src/main/java/wu/framework/lazy/cloud/heartbeat/server/netty/config/HeartbeatServerConfiguration.java +++ b/wu-lazy-cloud-heartbeat-server/src/main/java/wu/framework/lazy/cloud/heartbeat/server/netty/config/HeartbeatServerConfiguration.java @@ -4,6 +4,7 @@ package wu.framework.lazy.cloud.heartbeat.server.netty.config; import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Role; +import wu.framework.lazy.cloud.heartbeat.common.adapter.ChannelFlowAdapter; import wu.framework.lazy.cloud.heartbeat.server.application.InternalNetworkPenetrationMappingApplication; import wu.framework.lazy.cloud.heartbeat.server.application.NettyClientBlacklistApplication; import wu.framework.lazy.cloud.heartbeat.server.application.ServerNettyConfigApplication; @@ -31,8 +32,8 @@ public class HeartbeatServerConfiguration { */ @Role(BeanDefinition.ROLE_INFRASTRUCTURE) @Bean - public ServerHandleReportHandleChannelTransferTypeAdvanced serverReportChannelTransferTypeAdvanced() { - return new ServerHandleReportHandleChannelTransferTypeAdvanced(); + public ServerHandleReportHandleChannelTransferTypeAdvanced serverReportChannelTransferTypeAdvanced(ChannelFlowAdapter channelFlowAdapter) { + return new ServerHandleReportHandleChannelTransferTypeAdvanced(channelFlowAdapter); } @Role(BeanDefinition.ROLE_INFRASTRUCTURE) diff --git a/wu-lazy-cloud-heartbeat-server/src/main/java/wu/framework/lazy/cloud/heartbeat/server/netty/config/ServerFlowConfiguration.java b/wu-lazy-cloud-heartbeat-server/src/main/java/wu/framework/lazy/cloud/heartbeat/server/netty/config/ServerFlowConfiguration.java index ae8abe5..6542b9c 100644 --- a/wu-lazy-cloud-heartbeat-server/src/main/java/wu/framework/lazy/cloud/heartbeat/server/netty/config/ServerFlowConfiguration.java +++ b/wu-lazy-cloud-heartbeat-server/src/main/java/wu/framework/lazy/cloud/heartbeat/server/netty/config/ServerFlowConfiguration.java @@ -6,6 +6,9 @@ import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Role; import wu.framework.lazy.cloud.heartbeat.common.adapter.ChannelFlowAdapter; import wu.framework.lazy.cloud.heartbeat.common.advanced.flow.HandleChannelFlowAdvanced; +import wu.framework.lazy.cloud.heartbeat.server.domain.model.visitor.flow.VisitorFlowRepository; +import wu.framework.lazy.cloud.heartbeat.server.netty.flow.ServerHandlerInFlowHandler; +import wu.framework.lazy.cloud.heartbeat.server.netty.flow.ServerHandlerOutFlowHandler; import java.util.List; @@ -15,17 +18,39 @@ import java.util.List; */ @Role(BeanDefinition.ROLE_INFRASTRUCTURE) public class ServerFlowConfiguration { + /** + * 进口数据处理 + * + * @return ServerHandlerInFlowHandler + */ + @Role(BeanDefinition.ROLE_INFRASTRUCTURE) + @Bean + public ServerHandlerInFlowHandler serverHandlerInFlowHandler(VisitorFlowRepository visitorFlowRepository) { + return new ServerHandlerInFlowHandler(visitorFlowRepository); + } + + /** + * 出口数据处理 + * + * @return ServerHandlerOutFlowHandler + */ + @Role(BeanDefinition.ROLE_INFRASTRUCTURE) + @Bean + public ServerHandlerOutFlowHandler serverHandlerOutFlowHandler(VisitorFlowRepository visitorFlowRepository) { + return new ServerHandlerOutFlowHandler(visitorFlowRepository); + } /** * 服务端流量适配器 + * * @param handleChannelFlowAdvancedList 服务端流量适配者 * @return 服务端流量适配器 */ @ConditionalOnMissingBean(ChannelFlowAdapter.class) @Bean @Role(BeanDefinition.ROLE_INFRASTRUCTURE) - public ChannelFlowAdapter channelFlowAdapter(List handleChannelFlowAdvancedList){ + public ChannelFlowAdapter channelFlowAdapter(List handleChannelFlowAdvancedList) { return new ChannelFlowAdapter(handleChannelFlowAdvancedList); } diff --git a/wu-lazy-cloud-heartbeat-server/src/main/java/wu/framework/lazy/cloud/heartbeat/server/netty/flow/ServerHandlerInFlowHandler.java b/wu-lazy-cloud-heartbeat-server/src/main/java/wu/framework/lazy/cloud/heartbeat/server/netty/flow/ServerHandlerInFlowHandler.java new file mode 100644 index 0000000..bd8a977 --- /dev/null +++ b/wu-lazy-cloud-heartbeat-server/src/main/java/wu/framework/lazy/cloud/heartbeat/server/netty/flow/ServerHandlerInFlowHandler.java @@ -0,0 +1,66 @@ +package wu.framework.lazy.cloud.heartbeat.server.netty.flow; + +import io.netty.channel.Channel; +import org.springframework.util.ObjectUtils; +import wu.framework.lazy.cloud.heartbeat.common.advanced.flow.AbstractHandleChannelFlowAdvanced; +import wu.framework.lazy.cloud.heartbeat.common.advanced.flow.ChannelFlow; +import wu.framework.lazy.cloud.heartbeat.common.enums.ChannelFlowEnum; +import wu.framework.lazy.cloud.heartbeat.server.domain.model.visitor.flow.VisitorFlow; +import wu.framework.lazy.cloud.heartbeat.server.domain.model.visitor.flow.VisitorFlowRepository; + +/** + * 进口流量处理 + */ +public class ServerHandlerInFlowHandler extends AbstractHandleChannelFlowAdvanced { + private final VisitorFlowRepository visitorFlowRepository; + + public ServerHandlerInFlowHandler(VisitorFlowRepository visitorFlowRepository) { + this.visitorFlowRepository = visitorFlowRepository; + } + + /** + * 处理是否支持这种类型 + * + * @param channelFlow 数据 + * @return boolean + */ + @Override + protected boolean doSupport(ChannelFlow channelFlow) { + return ChannelFlowEnum.IN_FLOW.equals(channelFlow.channelFlowEnum()); + } + + /** + * 处理当前数据 + * + * @param channel 当前通道 + * @param channelFlow 通道数据 + */ + @Override + protected void doHandler(Channel channel, ChannelFlow channelFlow) { + String clientId = channelFlow.clientId(); + Integer port = channelFlow.port(); + Integer flow = channelFlow.flow(); + + // 进口流量处理 + VisitorFlow visitorFlow = new VisitorFlow(); + visitorFlow.setInFlow(flow); + visitorFlow.setClientId(clientId); + visitorFlow.setVisitorPort(port); + visitorFlow.setIsDeleted(false); + // 查询是否存在已有流量 而后进行统计汇总 + VisitorFlow findOneVisitorFlowQuery = new VisitorFlow(); + findOneVisitorFlowQuery.setClientId(clientId); + findOneVisitorFlowQuery.setVisitorPort(port); + visitorFlowRepository.findOne(findOneVisitorFlowQuery).accept(existVisitorFlow -> { + Integer inFlow = existVisitorFlow.getInFlow(); + Integer outFlow = existVisitorFlow.getOutFlow(); + if(!ObjectUtils.isEmpty(inFlow)){ + visitorFlow.setInFlow(visitorFlow.getInFlow()+inFlow); + } + if (!ObjectUtils.isEmpty(outFlow)) { + visitorFlow.setOutFlow( outFlow); + } + }); + visitorFlowRepository.story(visitorFlow); + } +} diff --git a/wu-lazy-cloud-heartbeat-server/src/main/java/wu/framework/lazy/cloud/heartbeat/server/netty/flow/ServerHandlerOutFlowHandler.java b/wu-lazy-cloud-heartbeat-server/src/main/java/wu/framework/lazy/cloud/heartbeat/server/netty/flow/ServerHandlerOutFlowHandler.java new file mode 100644 index 0000000..3dbd06a --- /dev/null +++ b/wu-lazy-cloud-heartbeat-server/src/main/java/wu/framework/lazy/cloud/heartbeat/server/netty/flow/ServerHandlerOutFlowHandler.java @@ -0,0 +1,66 @@ +package wu.framework.lazy.cloud.heartbeat.server.netty.flow; + +import io.netty.channel.Channel; +import org.springframework.util.ObjectUtils; +import wu.framework.lazy.cloud.heartbeat.common.advanced.flow.AbstractHandleChannelFlowAdvanced; +import wu.framework.lazy.cloud.heartbeat.common.advanced.flow.ChannelFlow; +import wu.framework.lazy.cloud.heartbeat.common.enums.ChannelFlowEnum; +import wu.framework.lazy.cloud.heartbeat.server.domain.model.visitor.flow.VisitorFlow; +import wu.framework.lazy.cloud.heartbeat.server.domain.model.visitor.flow.VisitorFlowRepository; + +/** + * 出口流量处理 + */ +public class ServerHandlerOutFlowHandler extends AbstractHandleChannelFlowAdvanced { + private final VisitorFlowRepository visitorFlowRepository; + + public ServerHandlerOutFlowHandler(VisitorFlowRepository visitorFlowRepository) { + this.visitorFlowRepository = visitorFlowRepository; + } + + /** + * 处理是否支持这种类型 + * + * @param channelFlow 数据 + * @return boolean + */ + @Override + protected boolean doSupport(ChannelFlow channelFlow) { + return ChannelFlowEnum.OUT_FLOW.equals(channelFlow.channelFlowEnum()); + } + + /** + * 处理当前数据 + * + * @param channel 当前通道 + * @param channelFlow 通道数据 + */ + @Override + protected void doHandler(Channel channel, ChannelFlow channelFlow) { + String clientId = channelFlow.clientId(); + Integer port = channelFlow.port(); + Integer flow = channelFlow.flow(); + + // 进口流量处理 + VisitorFlow visitorFlow = new VisitorFlow(); + visitorFlow.setOutFlow(flow); + visitorFlow.setClientId(clientId); + visitorFlow.setVisitorPort(port); + visitorFlow.setIsDeleted(false); + // 查询是否存在已有流量 而后进行统计汇总 + VisitorFlow findOneVisitorFlowQuery = new VisitorFlow(); + findOneVisitorFlowQuery.setClientId(clientId); + findOneVisitorFlowQuery.setVisitorPort(port); + visitorFlowRepository.findOne(findOneVisitorFlowQuery).accept(existVisitorFlow -> { + Integer outFlow = existVisitorFlow.getOutFlow(); + Integer inFlow = existVisitorFlow.getInFlow(); + if (!ObjectUtils.isEmpty(outFlow)) { + visitorFlow.setOutFlow(visitorFlow.getOutFlow() + outFlow); + } + if (!ObjectUtils.isEmpty(inFlow)) { + visitorFlow.setInFlow( inFlow); + } + }); + visitorFlowRepository.story(visitorFlow); + } +}