wisdomisite-java/src/main/java/com/zhgd/netty/udp/UDPServerHandler.java
2024-01-10 17:48:38 +08:00

92 lines
4.0 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package com.zhgd.netty.udp;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.IdUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.zhgd.xmgl.modules.location.entity.LocationData;
import com.zhgd.xmgl.modules.location.entity.LocationTunnel;
import com.zhgd.xmgl.modules.location.mapper.LocationDataMapper;
import com.zhgd.xmgl.modules.location.mapper.LocationTunnelMapper;
import com.zhgd.xmgl.modules.poisonous.mapper.PoisonousGasDevMapper;
import com.zhgd.xmgl.modules.worker.entity.WorkerInfo;
import com.zhgd.xmgl.modules.worker.mapper.WorkerInfoMapper;
import io.netty.buffer.ByteBuf;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.SimpleChannelInboundHandler;
import io.netty.channel.socket.DatagramPacket;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.List;
@Slf4j
@Component
public class UDPServerHandler extends SimpleChannelInboundHandler<DatagramPacket> {
@Autowired
private PoisonousGasDevMapper poisonousGasDevMapper;
@Autowired
private LocationDataMapper locationDataMapper;
@Autowired
private LocationTunnelMapper locationTunnelMapper;
@Autowired
private WorkerInfoMapper workerInfoMapper;
@Override
protected void channelRead0(ChannelHandlerContext ctx, DatagramPacket msg)
throws Exception {
ByteBuf buf = msg.content();
int len = buf.readableBytes();
byte[] data = new byte[len];
buf.readBytes(data);
String receive = new String(data, "UTF-8");
log.info("udp接收{}", receive);
//LCID7TT8lc99:display: 69,05F9ED,26285,2024-01-09 17:19:22.744,1,-10.27,0.00,0.00
String val = StringUtils.substring(receive, "LCID7TT8lc99:display: ".length());
String[] valArr = StringUtils.split(val, ",");
String cardno = valArr[1];
String inlX = valArr[5];
String time = valArr[3];
List<WorkerInfo> workerInfos = workerInfoMapper.selectList(new LambdaQueryWrapper<WorkerInfo>()
.eq(WorkerInfo::getLocationCardno, cardno));
if (CollUtil.isNotEmpty(workerInfos)) {
String projectSn = workerInfos.get(0).getProjectSn();
List<LocationTunnel> locationTunnels = locationTunnelMapper.selectList(new LambdaQueryWrapper<LocationTunnel>()
.eq(LocationTunnel::getProjectSn, projectSn));
if (CollUtil.isNotEmpty(locationTunnels)) {
//清除以前标签
locationDataMapper.update(null, new LambdaUpdateWrapper<LocationData>()
.set(LocationData::getRealtimeId, null)
.eq(LocationData::getCardno, cardno)
.isNotNull(LocationData::getRealtimeId));
LocationTunnel locationTunnel = locationTunnels.get(0);
Long realtimeId = locationTunnel.getRealtimeId();
if (realtimeId == null) {
realtimeId = IdUtil.getSnowflake().nextId();
}
LocationData locationData = new LocationData();
locationData.setCardType("1510");
locationData.setCardno(cardno);
locationData.setPersonName(workerInfos.get(0).getWorkerName());
//算出洞口的距离
locationData.setInlX(Double.valueOf(inlX) + 271);
locationData.setAlarm(0);
locationData.setProjectSn(projectSn);
locationData.setRealtimeId(realtimeId);
locationData.setTunnelId(locationTunnel.getTunnelId());
locationDataMapper.insert(locationData);
locationTunnel.setRealtimeId(realtimeId);
locationTunnelMapper.updateById(locationTunnel);
}
}
}
}