修改netty编码解压规则

segment2.0
linrf 2 years ago
parent ec0d828ec3
commit 931194abcf

@ -1,33 +1,33 @@
package com.docus.server; //package com.docus.server;
//
import com.baomidou.mybatisplus.generator.AutoGenerator; //import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.docus.infrastructure.generator.BaseCodeGenerator; //import com.docus.infrastructure.generator.BaseCodeGenerator;
//
import java.util.HashMap; //import java.util.HashMap;
import java.util.Map; //import java.util.Map;
//
public class CodeGenerator { //public class CodeGenerator {
public static void main(String[] args) { // public static void main(String[] args) {
//字段名和枚举名的映射,不区分表名 // //字段名和枚举名的映射,不区分表名
Map<String, String> enumColumnMap = new HashMap<>(); // Map<String, String> enumColumnMap = new HashMap<>();
enumColumnMap.put("PROFILE_ITЕM", "AdminProfileItemEnum"); // enumColumnMap.put("PROFILE_ITЕM", "AdminProfileItemEnum");
//
enumColumnMap.put("ORGANIZATION_TYPE", "OrganizationTypeEnum "); // enumColumnMap.put("ORGANIZATION_TYPE", "OrganizationTypeEnum ");
enumColumnMap.put("OPERATE_STATUS", "OperateStatusEnum"); // enumColumnMap.put("OPERATE_STATUS", "OperateStatusEnum");
enumColumnMap.put("STATE", "StateEnum"); // enumColumnMap.put("STATE", "StateEnum");
enumColumnMap.put("PRIVILEGE_LEVEL", "PrivilegeLevelEnum"); // enumColumnMap.put("PRIVILEGE_LEVEL", "PrivilegeLevelEnum");
enumColumnMap.put("FLAG", "FlagEnum"); // enumColumnMap.put("FLAG", "FlagEnum");
enumColumnMap.put("collect_type", "CollectTypeEnum"); // enumColumnMap.put("collect_type", "CollectTypeEnum");
BaseCodeGenerator.setEnumColumnMap(enumColumnMap); // BaseCodeGenerator.setEnumColumnMap(enumColumnMap);
BaseCodeGenerator.setModuleName("collector-scheduling-management");//多个module需要指定modulename // BaseCodeGenerator.setModuleName("collector-scheduling-management");//多个module需要指定modulename
//指定entity生成到独立module里并生成 api interface // //指定entity生成到独立module里并生成 api interface
BaseCodeGenerator.setClientInterfaceModuleName("docus-client-interface"); // BaseCodeGenerator.setClientInterfaceModuleName("docus-client-interface");
BaseCodeGenerator.setClientInterfaceSubFolder("scheduling.management");//文件夹 // BaseCodeGenerator.setClientInterfaceSubFolder("scheduling.management");//文件夹
BaseCodeGenerator.setClientInterfaceBasePackage("com.docus.server"); // BaseCodeGenerator.setClientInterfaceBasePackage("com.docus.server");
AutoGenerator defaultConfig = BaseCodeGenerator.getDefaultConfig(); // AutoGenerator defaultConfig = BaseCodeGenerator.getDefaultConfig();
defaultConfig.getGlobalConfig().setSwagger2(true); // defaultConfig.getGlobalConfig().setSwagger2(true);
defaultConfig.getStrategy().setEntityLombokModel(true); // defaultConfig.getStrategy().setEntityLombokModel(true);
defaultConfig.getStrategy().setInclude("sch_virtual_log", "sch_collect_error_log", "sch_collect_record", "sch_collect_record_retry_log", "sch_collector", "sch_collector_config", "sch_collector_version", "sch_collector_version_file", "sch_collector_version_log", "sch_operation_log", "sch_system_params", "sch_terminator");//需要生成的表,可指定多个,留空为全部生成 // defaultConfig.getStrategy().setInclude("sch_virtual_log", "sch_collect_error_log", "sch_collect_record", "sch_collect_record_retry_log", "sch_collector", "sch_collector_config", "sch_collector_version", "sch_collector_version_file", "sch_collector_version_log", "sch_operation_log", "sch_system_params", "sch_terminator");//需要生成的表,可指定多个,留空为全部生成
BaseCodeGenerator.generate(defaultConfig); // BaseCodeGenerator.generate(defaultConfig);
} // }
} //}

@ -0,0 +1,56 @@
package com.docus.server.common;
public class MsgConstants {
/**
*
*/
public static final String HEARTBEAT_REQUEST = "0".trim();
/**
* 线
*/
public static final String ONLINE_REGISTER = "1".trim();
/**
* 线
*/
public static final String OFFLINE_REMOVE = "2".trim();
/**
*
*/
public static final String EXCEPTION_REMOVE = "3".trim();
/**
*
*/
public static final String TERMINATOR_RESTART = "4".trim();
/**
*
*/
public static final String COLLECTOR_RESTART = "5".trim();
/**
*
*/
public static final String VIRTUAL_RESTART = "6".trim();
/**
*
*/
public static final String UPDATE_COLLECTOR_FILE = "7".trim();
/**
*
*/
public static final String UPDATE_COLLECTOR_CONFIG = "8".trim();
/**
*
*/
public static final String SCH_DISTRIBUTE_TASKS = "9".trim();
}

@ -1,10 +1,13 @@
package com.docus.server.common.netty.server; package com.docus.server.common.netty.server;
import com.docus.server.enums.OnlineStateEnum;
import com.docus.server.service.ISchTerminatorService;
import io.netty.channel.Channel; import io.netty.channel.Channel;
import io.netty.util.AttributeKey; import io.netty.util.AttributeKey;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.util.Map; import java.util.Map;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
@ -14,22 +17,23 @@ import java.util.concurrent.ConcurrentHashMap;
@Component @Component
@Slf4j @Slf4j
public class ChannelRepository { public class ChannelRepository {
@Resource
private ISchTerminatorService iSchTerminatorService;
/**
* <IP-Channel>
*/
private final static Map<String, Channel> CHANNEL_CACHE_MAP = new ConcurrentHashMap<>(); private final static Map<String, Channel> CHANNEL_CACHE_MAP = new ConcurrentHashMap<>();
/** /**
* 线 * 线
*
* @param key
* @param value
*/ */
public void put(String key, Channel value) { public void put(String key, Channel value, OnlineStateEnum onlineState) {
//客户端上线 //客户端上线
CHANNEL_CACHE_MAP.put(key, value); CHANNEL_CACHE_MAP.put(key, value);
AttributeKey<String> attributeKey = AttributeKey.valueOf("user"); AttributeKey<String> attributeKey = AttributeKey.valueOf("user");
value.attr(attributeKey).set(key); value.attr(attributeKey).set(key);
//todo 数据库更新工控机状态上线 iSchTerminatorService.saveOrUpdate(key, onlineState);
} }
public String getClientKey(Channel channel) { public String getClientKey(Channel channel) {
@ -49,13 +53,11 @@ public class ChannelRepository {
} }
/** /**
* 线,线 * 线
*
* @param key
*/ */
public void remove(String key) { public void remove(String key) {
CHANNEL_CACHE_MAP.remove(key); CHANNEL_CACHE_MAP.remove(key);
//todo 数据库更新工控机状态离线 iSchTerminatorService.saveOrUpdate(key, OnlineStateEnum.OFFLINE);
} }
} }

@ -51,7 +51,7 @@ public class EchoServerHandler extends ChannelInboundHandlerAdapter {
//将byte[]转成字符串用于打印 //将byte[]转成字符串用于打印
String str = new String(barray); String str = new String(barray);
CommMsg<Test> commMsg = JSON.fromJSONWithGeneric(str, new TypeReference<CommMsg<Test>>() { CommMsg<TerminatorContent> commMsg = JSON.fromJSONWithGeneric(str, new TypeReference<CommMsg<TerminatorContent>>() {
}); });
if (str.length() > 0) { if (str.length() > 0) {

@ -2,9 +2,10 @@ package com.docus.server.common.netty.server.handler;
import com.docus.core.util.StringUtils; import com.docus.core.util.StringUtils;
import com.docus.core.util.json.JSON; import com.docus.core.util.json.JSON;
import com.docus.server.common.MsgConstants;
import com.docus.server.common.netty.CommMsg; import com.docus.server.common.netty.CommMsg;
import com.docus.server.common.netty.Payload;
import com.docus.server.common.netty.server.ChannelRepository; import com.docus.server.common.netty.server.ChannelRepository;
import com.docus.server.enums.OnlineStateEnum;
import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.core.type.TypeReference;
import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBuf;
import io.netty.channel.Channel; import io.netty.channel.Channel;
@ -28,33 +29,13 @@ import java.net.InetSocketAddress;
@Component @Component
public class NettyBusinessHandler extends SimpleChannelInboundHandler<ByteBuf> { public class NettyBusinessHandler extends SimpleChannelInboundHandler<ByteBuf> {
private static final ChannelGroup GROUP = new DefaultChannelGroup(GlobalEventExecutor.INSTANCE); private static final ChannelGroup DEFAULT_CHANNEL_GROUP = new DefaultChannelGroup(GlobalEventExecutor.INSTANCE);
@Resource @Resource
private ChannelRepository repository; private ChannelRepository repository;
protected void channelRead0(ChannelHandlerContext channelHandlerContext, Payload.Message message) {
if (message.getCmd() == Payload.Message.type.AUTH) {
log.info("接受到工控机<{}>的认证消息:{}", message.getClient(), message.getContent());
InetSocketAddress ipSocket = (InetSocketAddress) channelHandlerContext.channel().remoteAddress();
String clientIp = ipSocket.getAddress().getHostAddress();
log.info("工控机:{},连接上线,IP地址信息:{}", message.getClient(), clientIp);
Channel channel = repository.get(message.getClient());
if (channel != null && channel.isOpen()) {
channel.close();
}
repository.put(message.getClient(), channelHandlerContext.channel());
}
if (message.getCmd() == Payload.Message.type.PRINT_DONE) {
log.info("接受到打印回馈指令,内容{}", message.getContent());
}
if (message.getCmd() == Payload.Message.type.WHATEVER) {
log.info("收到测试消息:{}", message.getContent());
}
}
@Override @Override
protected void channelRead0(ChannelHandlerContext ctx, ByteBuf msg) throws Exception { protected void channelRead0(ChannelHandlerContext channelHandlerContext, ByteBuf msg) throws Exception {
ByteBuf buf = (ByteBuf) msg; ByteBuf buf = (ByteBuf) msg;
//创建目标大小的数组 //创建目标大小的数组
byte[] barray = new byte[buf.readableBytes()]; byte[] barray = new byte[buf.readableBytes()];
@ -68,47 +49,76 @@ public class NettyBusinessHandler extends SimpleChannelInboundHandler<ByteBuf> {
return; return;
} }
CommMsg<Test> commMsg = JSON.fromJSONWithGeneric(message, new TypeReference<CommMsg<Test>>() { CommMsg<TerminatorContent> commMsg = JSON.fromJSONWithGeneric(message, new TypeReference<CommMsg<TerminatorContent>>() {
}); });
String messageType = commMsg.getMessageType(); String messageType = commMsg.getMessageType();
String messageTime = commMsg.getMessageTime();
TerminatorContent messageContent = commMsg.getContent();
// if (message.getCmd() == Payload.Message.type.AUTH) { // if (messageType.equals(MsgConstants.ONLINE_REGISTER)) {
// log.info("接受到工控机<{}>的认证消息:{}", message.getClient(), message.getContent()); // log.info("接受到【采集器-终端】的上线注册消息:消息类型={},消息时间={},消息内容={}", messageType, messageTime, messageContent);
// InetSocketAddress ipSocket = (InetSocketAddress) channelHandlerContext.channel().remoteAddress(); // InetSocketAddress ipSocket = (InetSocketAddress) channelHandlerContext.channel().remoteAddress();
// String clientIp = ipSocket.getAddress().getHostAddress(); // String clientIp = ipSocket.getAddress().getHostAddress();
// log.info("工控机:{},连接上线,IP地址信息:{}", message.getClient(), clientIp); // log.info("【采集器-终端IP】:{},连接上线,IP地址信息:{}", clientIp, clientIp);
// Channel channel = repository.get(message.getClient()); // Channel channel = repository.get(clientIp);
// if (channel != null && channel.isOpen()) { // if (channel != null && channel.isOpen()) {
// channel.close(); // channel.close();
// } // }
// repository.put(message.getClient(), channelHandlerContext.channel()); //
// } // /*
// if (message.getCmd() == Payload.Message.type.PRINT_DONE) { // * 将ip和channel进行映射
// log.info("接受到打印回馈指令,内容{}", message.getContent()); // */
// } // repository.put(clientIp, channelHandlerContext.channel(), OnlineStateEnum.OFFLINE);
// if (message.getCmd() == Payload.Message.type.WHATEVER) {
// log.info("收到测试消息:{}", message.getContent());
// } // }
//心跳 if (messageType.equals(MsgConstants.TERMINATOR_RESTART)) {
//注册 log.info("接受到终端重启命令,内容{}", messageContent);
//业务消息 }
if (messageType.equals(MsgConstants.COLLECTOR_RESTART)) {
log.info("收到采集器重启命令,内容{}", messageContent);
}
if (messageType.equals(MsgConstants.VIRTUAL_RESTART)) {
log.info("收到虚拟机重启命令,内容{}", messageContent);
}
if (messageType.equals(MsgConstants.UPDATE_COLLECTOR_FILE)) {
log.info("收到更新采集器文件命令,内容{}", messageContent);
}
if (messageType.equals(MsgConstants.UPDATE_COLLECTOR_CONFIG)) {
log.info("收到更新采集器配置命令,内容{}", messageContent);
}
if (messageType.equals(MsgConstants.SCH_DISTRIBUTE_TASKS)) {
log.info("收到采集调度器下发任务命令,内容{}", messageContent);
}
} }
@Override @Override
public void channelActive(ChannelHandlerContext ctx) throws Exception { public void channelActive(ChannelHandlerContext ctx) throws Exception {
Channel channel = ctx.channel(); ctx.fireChannelRegistered();
InetSocketAddress ipSocket = (InetSocketAddress) ctx.channel().remoteAddress();
String clientIp = ipSocket.getAddress().getHostAddress();
log.info("【采集器-终端IP】:{},连接上线,IP地址信息:{}", clientIp, clientIp);
Channel channel = repository.get(clientIp);
if (channel != null && channel.isOpen()) {
channel.close();
}
GROUP.add(channel); repository.put(clientIp, ctx.channel(), OnlineStateEnum.OFFLINE);
System.out.println(channel.remoteAddress() + " 上线," + "在线数量:" + GROUP.size());
DEFAULT_CHANNEL_GROUP.add(ctx.channel());
System.out.println(ctx.channel().remoteAddress() + " 上线," + "在线数量:" + DEFAULT_CHANNEL_GROUP.size());
} }
@Override @Override
public void channelInactive(ChannelHandlerContext ctx) throws Exception { public void channelInactive(ChannelHandlerContext ctx) throws Exception {
// 获取到当前要断开连接的Channel
Channel channel = ctx.channel(); Channel channel = ctx.channel();
System.out.println(channel.remoteAddress() + "下线," + "在线数量:" + GROUP.size()); System.out.println(channel.remoteAddress() + " 下线," + "在线数量:" + DEFAULT_CHANNEL_GROUP.size());
} }
@Override @Override
@ -118,6 +128,7 @@ public class NettyBusinessHandler extends SimpleChannelInboundHandler<ByteBuf> {
if (channel.isActive()) { if (channel.isActive()) {
ctx.close(); ctx.close();
} }
super.exceptionCaught(ctx, cause); super.exceptionCaught(ctx, cause);
} }

@ -1,14 +1,21 @@
package com.docus.server.common.netty.server.handler; package com.docus.server.common.netty.server.handler;
import com.docus.core.util.StringUtils;
import com.docus.core.util.json.JSON;
import com.docus.server.common.MsgConstants;
import com.docus.server.common.netty.CommMsg;
import com.docus.server.common.netty.server.ChannelRepository; import com.docus.server.common.netty.server.ChannelRepository;
import com.docus.server.enums.OnlineStateEnum;
import com.fasterxml.jackson.core.type.TypeReference;
import io.netty.buffer.ByteBuf;
import io.netty.channel.Channel;
import io.netty.channel.ChannelHandler; import io.netty.channel.ChannelHandler;
import io.netty.channel.ChannelHandlerContext; import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.ChannelInboundHandlerAdapter; import io.netty.channel.ChannelInboundHandlerAdapter;
import io.netty.handler.timeout.IdleState;
import io.netty.handler.timeout.IdleStateEvent;
import io.netty.util.ReferenceCountUtil;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import java.net.InetSocketAddress;
/** /**
* *
*/ */
@ -17,19 +24,54 @@ import lombok.extern.slf4j.Slf4j;
public class NettyHeartbeatHandler extends ChannelInboundHandlerAdapter { public class NettyHeartbeatHandler extends ChannelInboundHandlerAdapter {
@Override @Override
public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception { public void channelRead(ChannelHandlerContext channelHandlerContext, Object msg) throws Exception {
// Payload.Message message = (Payload.Message) msg; ByteBuf buf = (ByteBuf) msg;
// if (message.getCmd().equals(Payload.Message.type.HEARTBEAT_REQUEST)) { //创建目标大小的数组
log.info("接收到客户端的心跳"); byte[] barray = new byte[buf.readableBytes()];
// } else { //把数据从bytebuf转移到byte[]
if (ctx.channel().isOpen()) { buf.getBytes(0, barray);
//触发下一个handler //将byte[]转成字符串用于打印
ctx.fireChannelRead(msg); String message = new String(barray);
//空消息不处理
if (!StringUtils.hasText(message)) {
return;
} }
// }
ReferenceCountUtil.release(msg);
//
CommMsg<TerminatorContent> commMsg = JSON.fromJSONWithGeneric(message, new TypeReference<CommMsg<TerminatorContent>>() {
});
String messageType = commMsg.getMessageType();
String messageTime = commMsg.getMessageTime();
TerminatorContent messageContent = commMsg.getContent();
if (messageType.equals(MsgConstants.HEARTBEAT_REQUEST)) {
log.info("接收到客户端的心跳");
log.info("接受到【采集器-终端】的心跳消息:消息类型={},消息时间={},消息内容={}", messageType, messageTime, messageContent);
InetSocketAddress ipSocket = (InetSocketAddress) channelHandlerContext.channel().remoteAddress();
String clientIp = ipSocket.getAddress().getHostAddress();
log.info("【采集器-终端IP】:{},连接上线,IP地址信息:{}", clientIp, clientIp);
Channel channel = repository.get(clientIp);
if (channel != null && channel.isOpen()) {
channel.close();
}
/*
* ipchannel
*/
repository.put(clientIp, channelHandlerContext.channel(), OnlineStateEnum.ONLINE);
} else {
if (channelHandlerContext.channel().isOpen()) {
//触发下一个handler
channelHandlerContext.fireChannelRead(msg);
}
}
// ReferenceCountUtil.release(msg);
} }
private ChannelRepository repository; private ChannelRepository repository;
@ -38,21 +80,21 @@ public class NettyHeartbeatHandler extends ChannelInboundHandlerAdapter {
this.repository = repository; this.repository = repository;
} }
@Override // @Override
public void userEventTriggered(ChannelHandlerContext ctx, Object evt) throws Exception { // public void userEventTriggered(ChannelHandlerContext ctx, Object evt) throws Exception {
if (evt instanceof IdleStateEvent) { // if (evt instanceof IdleStateEvent) {
IdleStateEvent event = (IdleStateEvent) evt; // IdleStateEvent event = (IdleStateEvent) evt;
if (event.state() == IdleState.READER_IDLE) { // if (event.state() == IdleState.READER_IDLE) {
String clientId = repository.getClientKey(ctx.channel()); // String clientId = repository.getClientKey(ctx.channel());
//移除工控机缓存,设备离线 // //移除工控机缓存,设备离线
repository.remove(clientId); // repository.remove(clientId);
log.info("{},关闭这个不活跃通道=================>", clientId); // log.info("{},关闭这个不活跃通道=================>", clientId);
ctx.channel().close(); // ctx.channel().close();
} // }
} else { // } else {
super.userEventTriggered(ctx, evt); // super.userEventTriggered(ctx, evt);
} // }
} // }
@Override @Override
public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception { public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {

@ -0,0 +1,22 @@
package com.docus.server.common.netty.server.handler;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Data
public class TerminatorContent implements Serializable {
/*终端IP*/
private String terminatorIp;
/*终端名称*/
private String terminatorName;
}

@ -1,32 +0,0 @@
package com.docus.server.common.netty.server.handler;
import java.io.Serializable;
public class Test implements Serializable {
private int age;
private String name;
public Test() {
}
public Test(int age, String name) {
this.age = age;
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}

@ -1,12 +1,10 @@
package com.docus.server.convert; package com.docus.server.convert;
import com.docus.infrastructure.web.response.PageResult; import com.docus.infrastructure.web.response.PageResult;
import com.docus.server.entity.scheduling.management.SchTerminator;
import com.docus.server.dto.scheduling.management.schterminator.AddSchTerminatorDTO; import com.docus.server.dto.scheduling.management.schterminator.AddSchTerminatorDTO;
import com.docus.server.dto.scheduling.management.schterminator.EditSchTerminatorDTO; import com.docus.server.dto.scheduling.management.schterminator.EditSchTerminatorDTO;
import com.docus.server.dto.scheduling.management.schterminator.DeleteSchTerminatorDTO; import com.docus.server.entity.scheduling.management.SchTerminator;
import com.docus.server.vo.scheduling.management.schterminator.SchTerminatorVO; import com.docus.server.vo.scheduling.management.schterminator.SchTerminatorVO;
import org.mapstruct.Mapper; import org.mapstruct.Mapper;
import org.mapstruct.Mappings; import org.mapstruct.Mappings;
import org.mapstruct.factory.Mappers; import org.mapstruct.factory.Mappers;

@ -86,15 +86,12 @@ public class SchTerminatorDaoImpl extends BaseDaoImpl<SchTerminatorMapper, SchTe
Date endTime = searchDTO.getEndTime(); Date endTime = searchDTO.getEndTime();
query.le(SchTerminator::getCreateTime, endTime); query.le(SchTerminator::getCreateTime, endTime);
} }
//关键字比较多个列or
//if (!StringUtils.isEmpty(searchDTO.getKeyword())) { //在线状态
//单个列用like if (searchDTO.getParams("onlineState") != null) {
//query. like(SchTerminator::getxxx, searchDTO.getKeyword()); query.eq(SchTerminator::getOnlineState, searchDTO.getParams("onlineState"));
//多个列用like }
//query. and(sub -> sub.like(SchTerminator::getxx1, searchDTO.getKeyword())
// оr(). like(SchTerminator::getXX2, searchDTO.getKeyword()))
//);
//}
//默认createTime倒序排序 //默认createTime倒序排序
query.orderByDesc(SchTerminator::getCreateTime); query.orderByDesc(SchTerminator::getCreateTime);
List<SchTerminator> list = super.find(query); List<SchTerminator> list = super.find(query);

@ -5,6 +5,7 @@ import com.docus.infrastructure.web.response.PageResult;
import com.docus.server.dto.scheduling.management.schterminator.AddSchTerminatorDTO; import com.docus.server.dto.scheduling.management.schterminator.AddSchTerminatorDTO;
import com.docus.server.dto.scheduling.management.schterminator.DeleteSchTerminatorDTO; import com.docus.server.dto.scheduling.management.schterminator.DeleteSchTerminatorDTO;
import com.docus.server.dto.scheduling.management.schterminator.EditSchTerminatorDTO; import com.docus.server.dto.scheduling.management.schterminator.EditSchTerminatorDTO;
import com.docus.server.enums.OnlineStateEnum;
import com.docus.server.vo.scheduling.management.schterminator.SchTerminatorVO; import com.docus.server.vo.scheduling.management.schterminator.SchTerminatorVO;
/** /**
@ -53,4 +54,12 @@ public interface ISchTerminatorService {
* @return * @return
*/ */
PageResult<SchTerminatorVO> search(SearchDTO searchDTO); PageResult<SchTerminatorVO> search(SearchDTO searchDTO);
/**
*
*
* @param terminatorIp
* @param onlineState
*/
void saveOrUpdate(String terminatorIp, OnlineStateEnum onlineState);
} }

@ -1,5 +1,7 @@
package com.docus.server.service.impl; package com.docus.server.service.impl;
import com.docus.core.util.Func;
import com.docus.infrastructure.redis.service.IdService;
import com.docus.infrastructure.web.request.SearchDTO; import com.docus.infrastructure.web.request.SearchDTO;
import com.docus.infrastructure.web.response.PageResult; import com.docus.infrastructure.web.response.PageResult;
import com.docus.server.convert.SchTerminatorConvert; import com.docus.server.convert.SchTerminatorConvert;
@ -7,12 +9,15 @@ import com.docus.server.dto.scheduling.management.schterminator.AddSchTerminator
import com.docus.server.dto.scheduling.management.schterminator.DeleteSchTerminatorDTO; import com.docus.server.dto.scheduling.management.schterminator.DeleteSchTerminatorDTO;
import com.docus.server.dto.scheduling.management.schterminator.EditSchTerminatorDTO; import com.docus.server.dto.scheduling.management.schterminator.EditSchTerminatorDTO;
import com.docus.server.entity.scheduling.management.SchTerminator; import com.docus.server.entity.scheduling.management.SchTerminator;
import com.docus.server.enums.BusyStateEnum;
import com.docus.server.enums.OnlineStateEnum;
import com.docus.server.infrastructure.dao.ISchTerminatorDao; import com.docus.server.infrastructure.dao.ISchTerminatorDao;
import com.docus.server.service.ISchTerminatorService; import com.docus.server.service.ISchTerminatorService;
import com.docus.server.vo.scheduling.management.schterminator.SchTerminatorVO; import com.docus.server.vo.scheduling.management.schterminator.SchTerminatorVO;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.util.Date;
/** /**
* *
@ -24,6 +29,8 @@ import javax.annotation.Resource;
public class SchTerminatorServiceImpl implements ISchTerminatorService { public class SchTerminatorServiceImpl implements ISchTerminatorService {
@Resource @Resource
private ISchTerminatorDao iSchTerminatorDao; private ISchTerminatorDao iSchTerminatorDao;
@Resource
private IdService idService;
/** /**
* *
@ -47,6 +54,31 @@ public class SchTerminatorServiceImpl implements ISchTerminatorService {
return SchTerminatorConvert.INSTANCE.convertVO(iSchTerminatorDao.search(searchDTO)); return SchTerminatorConvert.INSTANCE.convertVO(iSchTerminatorDao.search(searchDTO));
} }
@Override
public void saveOrUpdate(String terminatorIp, OnlineStateEnum onlineStateEnum) {
SchTerminator schTerminator = iSchTerminatorDao.findOneBy("terminatorIp", terminatorIp);
if (Func.isNull(schTerminator)) {
SchTerminator schTerminatorVO = new SchTerminator();
schTerminatorVO.setId(idService.getDateSeq());
schTerminatorVO.setTerminatorIp(terminatorIp);
schTerminatorVO.setTerminatorName(terminatorIp);
schTerminatorVO.setOnlineState(onlineStateEnum);
schTerminatorVO.setBusyState(BusyStateEnum.IDLE);
iSchTerminatorDao.save(schTerminatorVO);
} else {
schTerminator.setBusyState(BusyStateEnum.IDLE);
schTerminator.setOnlineState(onlineStateEnum);
schTerminator.setUpdateTime(new Date());
iSchTerminatorDao.updateById(schTerminator);
}
}
/** /**
* *
* *

@ -1,15 +1,16 @@
package com.docus.server.dto.scheduling.management.schterminator; package com.docus.server.dto.scheduling.management.schterminator;
import com.baomidou.mybatisplus.annotation.TableField;
import com.docus.server.enums.BusyStateEnum;
import com.docus.server.enums.OnlineStateEnum;
import com.docus.server.enums.RestrictStateEnum;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import com.docus.server.enums.*;
import java.io.Serializable; import java.io.Serializable;
import java.time.LocalDateTime; import java.util.Date;
/** /**
* *
@ -22,44 +23,59 @@ import java.time.LocalDateTime;
@ApiModel(value="AddSchTerminatorDTO对象", description="执行管理器") @ApiModel(value="AddSchTerminatorDTO对象", description="执行管理器")
public class AddSchTerminatorDTO implements Serializable { public class AddSchTerminatorDTO implements Serializable {
@ApiModelProperty(value = "主键") @ApiModelProperty(value = "主键")
private Long id; private Long id;
@ApiModelProperty(value = "终端IP") @ApiModelProperty(value = "终端IP")
@TableField("terminator_ip")
private String terminatorIp; private String terminatorIp;
@ApiModelProperty(value = "资源管理器名称") @ApiModelProperty(value = "资源管理器名称")
@TableField("terminator_name")
private String terminatorName; private String terminatorName;
@ApiModelProperty(value = "只干某些任务,任务偏好属性") @ApiModelProperty(value = "只干某些任务,任务偏好属性")
@TableField("only_collector_ids")
private String onlyCollectorIds; private String onlyCollectorIds;
@ApiModelProperty(value = "优先干某些任务,任务偏好属性(优先给哪个采集器,若不空闲再给任意采集器)") @ApiModelProperty(value = "优先干某些任务,任务偏好属性(优先给哪个采集器,若不空闲再给任意采集器)")
@TableField("priority_collector_ids")
private String priorityCollectorIds; private String priorityCollectorIds;
@ApiModelProperty(value = "是否限制采集器类型01是") @ApiModelProperty(value = "是否限制采集器类型01是")
private String restrictState; @TableField("restrict_state")
private RestrictStateEnum restrictState;
@ApiModelProperty(value = "忙闲状态0空闲1繁忙") @ApiModelProperty(value = "忙闲状态0空闲1繁忙")
private String busyState; @TableField("busy_state")
private BusyStateEnum busyState;
@ApiModelProperty(value = "在线状态0离线1在线") @ApiModelProperty(value = "在线状态0离线1在线")
private String onlineState; @TableField("online_state")
private OnlineStateEnum onlineState;
@ApiModelProperty(value = "最近任务执行时间") @ApiModelProperty(value = "最近任务执行时间")
private LocalDateTime lastTaskExecTime; @TableField("last_task_exec_time")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date lastTaskExecTime;
@ApiModelProperty(value = "正在执行任务的名称") @ApiModelProperty(value = "正在执行任务的名称")
@TableField("executing_task_name")
private String executingTaskName; private String executingTaskName;
@ApiModelProperty(value = "最近一次任务执行失败原因") @ApiModelProperty(value = "最近一次任务执行失败原因")
@TableField("last_task_error_msg")
private String lastTaskErrorMsg; private String lastTaskErrorMsg;
@ApiModelProperty(value = "入库时间") @ApiModelProperty(value = "入库时间")
private LocalDateTime createTime; @TableField("create_time")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date createTime;
@ApiModelProperty(value = "入库更新时间") @ApiModelProperty(value = "入库更新时间")
private LocalDateTime updateTime; @TableField("update_time")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date updateTime;
} }

@ -1,65 +1,80 @@
package com.docus.server.dto.scheduling.management.schterminator; package com.docus.server.dto.scheduling.management.schterminator;
import com.baomidou.mybatisplus.annotation.TableField;
import com.docus.server.enums.BusyStateEnum;
import com.docus.server.enums.OnlineStateEnum;
import com.docus.server.enums.RestrictStateEnum;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import com.docus.server.enums.*;
import java.io.Serializable; import java.io.Serializable;
import java.time.LocalDateTime; import java.util.Date;
/** /**
* * EditDTO
* EditDTO *
* * @author AutoGenerator
* @author AutoGenerator * @since 2023-07-15
* @since 2023-07-15 */
*/
@Data @Data
@ApiModel(value="EditSchTerminatorDTO对象", description="执行管理器") @ApiModel(value = "EditSchTerminatorDTO对象", description = "执行管理器")
public class EditSchTerminatorDTO implements Serializable { public class EditSchTerminatorDTO implements Serializable {
@ApiModelProperty(value = "主键") @ApiModelProperty(value = "主键")
private Long id; private Long id;
@ApiModelProperty(value = "终端IP") @ApiModelProperty(value = "终端IP")
@TableField("terminator_ip")
private String terminatorIp; private String terminatorIp;
@ApiModelProperty(value = "资源管理器名称") @ApiModelProperty(value = "资源管理器名称")
@TableField("terminator_name")
private String terminatorName; private String terminatorName;
@ApiModelProperty(value = "只干某些任务,任务偏好属性") @ApiModelProperty(value = "只干某些任务,任务偏好属性")
@TableField("only_collector_ids")
private String onlyCollectorIds; private String onlyCollectorIds;
@ApiModelProperty(value = "优先干某些任务,任务偏好属性(优先给哪个采集器,若不空闲再给任意采集器)") @ApiModelProperty(value = "优先干某些任务,任务偏好属性(优先给哪个采集器,若不空闲再给任意采集器)")
@TableField("priority_collector_ids")
private String priorityCollectorIds; private String priorityCollectorIds;
@ApiModelProperty(value = "是否限制采集器类型01是") @ApiModelProperty(value = "是否限制采集器类型01是")
private String restrictState; @TableField("restrict_state")
private RestrictStateEnum restrictState;
@ApiModelProperty(value = "忙闲状态0空闲1繁忙") @ApiModelProperty(value = "忙闲状态0空闲1繁忙")
private String busyState; @TableField("busy_state")
private BusyStateEnum busyState;
@ApiModelProperty(value = "在线状态0离线1在线") @ApiModelProperty(value = "在线状态0离线1在线")
private String onlineState; @TableField("online_state")
private OnlineStateEnum onlineState;
@ApiModelProperty(value = "最近任务执行时间") @ApiModelProperty(value = "最近任务执行时间")
private LocalDateTime lastTaskExecTime; @TableField("last_task_exec_time")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date lastTaskExecTime;
@ApiModelProperty(value = "正在执行任务的名称") @ApiModelProperty(value = "正在执行任务的名称")
@TableField("executing_task_name")
private String executingTaskName; private String executingTaskName;
@ApiModelProperty(value = "最近一次任务执行失败原因") @ApiModelProperty(value = "最近一次任务执行失败原因")
@TableField("last_task_error_msg")
private String lastTaskErrorMsg; private String lastTaskErrorMsg;
@ApiModelProperty(value = "入库时间") @ApiModelProperty(value = "入库时间")
private LocalDateTime createTime; @TableField("create_time")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date createTime;
@ApiModelProperty(value = "入库更新时间") @ApiModelProperty(value = "入库更新时间")
private LocalDateTime updateTime; @TableField("update_time")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date updateTime;
} }

@ -1,30 +1,31 @@
package com.docus.server.entity.scheduling.management; package com.docus.server.entity.scheduling.management;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import java.time.LocalDateTime;
import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableField;
import java.io.Serializable; import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.docus.server.enums.BusyStateEnum;
import com.docus.server.enums.OnlineStateEnum;
import com.docus.server.enums.RestrictStateEnum;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import com.docus.server.enums.*; import java.io.Serializable;
import java.util.Date;
/** /**
* *
* *
* * @author AutoGenerator
* @author AutoGenerator * @since 2023-07-15
* @since 2023-07-15 */
*/
@Data @Data
@EqualsAndHashCode(callSuper = false) @EqualsAndHashCode(callSuper = false)
@TableName("sch_terminator") @TableName("sch_terminator")
@ApiModel(value="SchTerminator对象", description="执行管理器") @ApiModel(value = "SchTerminator对象", description = "执行管理器")
public class SchTerminator implements Serializable { public class SchTerminator implements Serializable {
@ApiModelProperty(value = "主键") @ApiModelProperty(value = "主键")
@ -49,19 +50,20 @@ public class SchTerminator implements Serializable {
@ApiModelProperty(value = "是否限制采集器类型01是") @ApiModelProperty(value = "是否限制采集器类型01是")
@TableField("restrict_state") @TableField("restrict_state")
private String restrictState; private RestrictStateEnum restrictState;
@ApiModelProperty(value = "忙闲状态0空闲1繁忙") @ApiModelProperty(value = "忙闲状态0空闲1繁忙")
@TableField("busy_state") @TableField("busy_state")
private String busyState; private BusyStateEnum busyState;
@ApiModelProperty(value = "在线状态0离线1在线") @ApiModelProperty(value = "在线状态0离线1在线")
@TableField("online_state") @TableField("online_state")
private String onlineState; private OnlineStateEnum onlineState;
@ApiModelProperty(value = "最近任务执行时间") @ApiModelProperty(value = "最近任务执行时间")
@TableField("last_task_exec_time") @TableField("last_task_exec_time")
private LocalDateTime lastTaskExecTime; @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date lastTaskExecTime;
@ApiModelProperty(value = "正在执行任务的名称") @ApiModelProperty(value = "正在执行任务的名称")
@TableField("executing_task_name") @TableField("executing_task_name")
@ -73,11 +75,13 @@ public class SchTerminator implements Serializable {
@ApiModelProperty(value = "入库时间") @ApiModelProperty(value = "入库时间")
@TableField("create_time") @TableField("create_time")
private LocalDateTime createTime; @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date createTime;
@ApiModelProperty(value = "入库更新时间") @ApiModelProperty(value = "入库更新时间")
@TableField("update_time") @TableField("update_time")
private LocalDateTime updateTime; @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date updateTime;
} }

@ -0,0 +1,31 @@
package com.docus.server.enums;
import com.docus.infrastructure.core.db.enums.IIntegerEnum;
/**
*
*/
public enum BusyStateEnum implements IIntegerEnum {
IDLE(0, "空闲"),
BUSY(1, "繁忙");
private Integer value;
private String display;
BusyStateEnum(Integer value, String display) {
this.value = value;
this.display = display;
}
@Override
public Integer getValue() {
return value;
}
@Override
public String getDisplay() {
return display;
}
}

@ -0,0 +1,31 @@
package com.docus.server.enums;
import com.docus.infrastructure.core.db.enums.IIntegerEnum;
/**
* 线
*/
public enum OnlineStateEnum implements IIntegerEnum {
OFFLINE(0, "离线"),
ONLINE(1, "在线");
private Integer value;
private String display;
OnlineStateEnum(Integer value, String display) {
this.value = value;
this.display = display;
}
@Override
public Integer getValue() {
return value;
}
@Override
public String getDisplay() {
return display;
}
}

@ -0,0 +1,31 @@
package com.docus.server.enums;
import com.docus.infrastructure.core.db.enums.IIntegerEnum;
/**
*
*/
public enum RestrictStateEnum implements IIntegerEnum {
NO(0, "否"),
YES(1, "是");
private Integer value;
private String display;
RestrictStateEnum(Integer value, String display) {
this.value = value;
this.display = display;
}
@Override
public Integer getValue() {
return value;
}
@Override
public String getDisplay() {
return display;
}
}

@ -1,65 +1,79 @@
package com.docus.server.vo.scheduling.management.schterminator; package com.docus.server.vo.scheduling.management.schterminator;
import com.baomidou.mybatisplus.annotation.TableField;
import com.docus.server.enums.BusyStateEnum;
import com.docus.server.enums.OnlineStateEnum;
import com.docus.server.enums.RestrictStateEnum;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import com.docus.server.enums.*;
import java.io.Serializable; import java.io.Serializable;
import java.time.LocalDateTime; import java.util.Date;
/** /**
* * VO
* VO *
* * @author AutoGenerator
* @author AutoGenerator * @since 2023-07-15
* @since 2023-07-15 */
*/
@Data @Data
@ApiModel(value="SchTerminatorVO对象", description="执行管理器") @ApiModel(value = "SchTerminatorVO对象", description = "执行管理器")
public class SchTerminatorVO implements Serializable { public class SchTerminatorVO implements Serializable {
@ApiModelProperty(value = "主键") @ApiModelProperty(value = "主键")
private Long id; private Long id;
@ApiModelProperty(value = "终端IP") @ApiModelProperty(value = "终端IP")
@TableField("terminator_ip")
private String terminatorIp; private String terminatorIp;
@ApiModelProperty(value = "资源管理器名称") @ApiModelProperty(value = "资源管理器名称")
@TableField("terminator_name")
private String terminatorName; private String terminatorName;
@ApiModelProperty(value = "只干某些任务,任务偏好属性") @ApiModelProperty(value = "只干某些任务,任务偏好属性")
@TableField("only_collector_ids")
private String onlyCollectorIds; private String onlyCollectorIds;
@ApiModelProperty(value = "优先干某些任务,任务偏好属性(优先给哪个采集器,若不空闲再给任意采集器)") @ApiModelProperty(value = "优先干某些任务,任务偏好属性(优先给哪个采集器,若不空闲再给任意采集器)")
@TableField("priority_collector_ids")
private String priorityCollectorIds; private String priorityCollectorIds;
@ApiModelProperty(value = "是否限制采集器类型01是") @ApiModelProperty(value = "是否限制采集器类型01是")
private String restrictState; @TableField("restrict_state")
private RestrictStateEnum restrictState;
@ApiModelProperty(value = "忙闲状态0空闲1繁忙") @ApiModelProperty(value = "忙闲状态0空闲1繁忙")
private String busyState; @TableField("busy_state")
private BusyStateEnum busyState;
@ApiModelProperty(value = "在线状态0离线1在线") @ApiModelProperty(value = "在线状态0离线1在线")
private String onlineState; @TableField("online_state")
private OnlineStateEnum onlineState;
@ApiModelProperty(value = "最近任务执行时间") @ApiModelProperty(value = "最近任务执行时间")
private LocalDateTime lastTaskExecTime; @TableField("last_task_exec_time")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date lastTaskExecTime;
@ApiModelProperty(value = "正在执行任务的名称") @ApiModelProperty(value = "正在执行任务的名称")
@TableField("executing_task_name")
private String executingTaskName; private String executingTaskName;
@ApiModelProperty(value = "最近一次任务执行失败原因") @ApiModelProperty(value = "最近一次任务执行失败原因")
@TableField("last_task_error_msg")
private String lastTaskErrorMsg; private String lastTaskErrorMsg;
@ApiModelProperty(value = "入库时间") @ApiModelProperty(value = "入库时间")
private LocalDateTime createTime; @TableField("create_time")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date createTime;
@ApiModelProperty(value = "入库更新时间") @ApiModelProperty(value = "入库更新时间")
private LocalDateTime updateTime; @TableField("update_time")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date updateTime;
} }

Loading…
Cancel
Save