Merge branch 'nanjing-yancao-wuliuzhongxin' of https://gitlab.hzleaper.com:81/duoji/backend-duoji-monitor into nanjing-yancao-wuliuzhongxin

# Conflicts:
#	web/src/main/java/com/zhehekeji/web/service/client/NettyServer.java
nanjing-yancao-wuliuzhongxin
qiushui 3 years ago
commit a377b6a227

@ -25,6 +25,11 @@ public class StreetVO extends Street {
private Integer rightSensorGunPort;
/**
* 线 1线
*/
private Integer connectStatus;
@JsonProperty(value="RFIDIp")
private String RFIDIp;

@ -11,6 +11,7 @@ import com.zhehekeji.web.lib.joyware.JoywareLoginModuleImpl;
import com.zhehekeji.web.mapper.CameraMapper;
import com.zhehekeji.web.mapper.SensorGunMapper;
import com.zhehekeji.web.mapper.StreetMapper;
import com.zhehekeji.web.service.client.ClientChanel;
import com.zhehekeji.web.service.client.NettyServer;
import com.zhehekeji.web.service.ksec.KsecNettyClient;
import com.zhehekeji.web.service.putian.PuTianNettyClient;
@ -86,6 +87,11 @@ public class InitService implements ApplicationRunner {
LoginThread loginThread = new LoginThread(camera);
loginThread.start();
});
//所有客户端的IP 标识保存到map内存
List<Street> streets = streetMapper.selectByMap(new HashMap<>());
streets.forEach(street -> {
ClientChanel.putIp(street.getPlcIp(),street.getPlcId());
});
ConfigProperties.KSEC ksec = configProperties.getKsec();
if(ksec != null){
StreetConn.init(1,"ksec");

@ -16,6 +16,7 @@ import com.zhehekeji.web.mapper.SensorGunMapper;
import com.zhehekeji.web.mapper.StreetMapper;
import com.zhehekeji.web.pojo.street.StreetSearch;
import com.zhehekeji.web.pojo.street.StreetVO;
import com.zhehekeji.web.service.client.ClientChanel;
import com.zhehekeji.web.service.robotic.NettyClient;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
@ -85,6 +86,9 @@ public class StreetService {
} catch (DuplicateKeyException e) {
Assert.isTrue(false, "PLC ID已存在");
}
if(!StringUtils.isEmpty(street.getPlcIp())){
ClientChanel.putIp(street.getPlcIp(),street.getPlcId());
}
if(configProperties.getServerMode().equals(0)){
StreetConn.init(street.getId(), street.getPlcId());
Thread thread = new Thread(new Runnable() {
@ -147,6 +151,10 @@ public class StreetService {
lightSourceMapper.deleteByMap(map);
rfidMapper.deleteByMap(map);
StreetConn.del(id);
if(!StringUtils.isEmpty(street.getPlcIp())){
ClientChanel.deleteIp(street.getPlcIp());
}
}
//只是为了删除缓存
@ -177,6 +185,9 @@ public class StreetService {
} catch (DuplicateKeyException e) {
Assert.isTrue(false, "PLC ID已存在");
}
if(!StringUtils.isEmpty(street.getPlcIp())){
ClientChanel.putIp(street.getPlcIp(),street.getPlcId());
}
List<LightSource> list = lightSourceMapper.selectList(new QueryWrapper<LightSource>().eq("street_id",street.getId()));
if(list.size() == 0){
if(!StringUtils.isEmpty(streetVO.getLightSourceIp()) && streetVO.getLightSourcePort() != null && streetVO.getLightSourcePort() != 0){
@ -204,6 +215,12 @@ public class StreetService {
public PageInfo<StreetVO> page(StreetSearch search) {
PageHelper.startPage(search.getPageNum(), search.getPageSize());
List<StreetVO> streetVOS = streetMapper.list();
streetVOS.forEach(streetVO -> {
//存在chanel则认为在线
if(ClientChanel.get(streetVO.getPlcId()) != null){
streetVO.setConnectStatus(1);
}
});
return new PageInfo<>(streetVOS);
}

@ -23,6 +23,23 @@ public class ClientChanel {
*/
private static Map<String, Channel> channelMap = new HashMap<>();
/**
* key :IP
* value:
*/
private static Map<String,String> IPMap = new HashMap<>();
public static void putIp(String ip,String ID){
IPMap.put(ip,ID);
}
public static void deleteIp(String ip){
IPMap.remove(ip);
}
public static String getIDFromIp(String ip){
return IPMap.get(ip);
}
public static void connect(String key, Channel channel){
channelMap.put(key,channel);
@ -43,4 +60,5 @@ public class ClientChanel {
tcpLogger.info("no connect client:{}",key);
}
}
}

@ -1,40 +1,28 @@
package com.zhehekeji.web.service.client;
import com.zhehekeji.web.service.StreetConn;
import com.zhehekeji.web.service.ksec.KsecInfo;
import com.zhehekeji.web.service.ksec.KsecNettyClient;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.ChannelInboundHandlerAdapter;
import io.netty.handler.timeout.IdleStateEvent;
import lombok.extern.slf4j.Slf4j;
import java.net.InetSocketAddress;
/**
* PLC
* 线
*
* @author Administrator
*
*/
@Slf4j
public class NettyConnectHandler extends ChannelInboundHandlerAdapter {
/** 客户端请求的心跳命令 */
private KsecInfo heart;
private KsecNettyClient nettyClient;
public NettyConnectHandler(KsecInfo ksecInfo, KsecNettyClient nettyClient){
this.heart = ksecInfo;
this.nettyClient = nettyClient;
}
/**
*
*/
@Override
public void channelActive(ChannelHandlerContext ctx) throws Exception {
log.info("upPc connected ");
StreetConn.conn(1);
InetSocketAddress socketAddress = (InetSocketAddress) ctx.channel().remoteAddress();
String clientIp = socketAddress.getAddress().getHostAddress();
log.info("ip:{} connected",clientIp);
ctx.fireChannelActive();
}
@ -43,22 +31,12 @@ public class NettyConnectHandler extends ChannelInboundHandlerAdapter {
*/
@Override
public void channelInactive(ChannelHandlerContext ctx) throws Exception {
log.info("upPc closed");
InetSocketAddress socketAddress = (InetSocketAddress) ctx.channel().remoteAddress();
String clientIp = socketAddress.getAddress().getHostAddress();
log.info("ip:{} disconnected",clientIp);
String ID = ClientChanel.getIDFromIp(clientIp);
//设置客户端下线
ClientChanel.disConnect(ID);
}
/**
* 4;
*
*/
@Override
public void userEventTriggered(ChannelHandlerContext ctx, Object obj) throws Exception {
if (obj instanceof IdleStateEvent) {
log.debug("upPc send heart");
ctx.channel().writeAndFlush(heart);
IdleStateEvent event = (IdleStateEvent) obj;
}
}
}

@ -40,6 +40,7 @@ public class NettyServer {
.childHandler(new ChannelInitializer<SocketChannel>() {
@Override
public void initChannel(SocketChannel ch) {
ch.pipeline().addLast(new NettyConnectHandler());
ch.pipeline().addLast(new Decoder(plcService,emptyCheckService));
ch.pipeline().addLast(new Encoder());
}}); // 子处理器用于处理workerGroup

Loading…
Cancel
Save