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 { @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 workerInfos = workerInfoMapper.selectList(new LambdaQueryWrapper() .eq(WorkerInfo::getLocationCardno, cardno)); if (CollUtil.isNotEmpty(workerInfos)) { String projectSn = workerInfos.get(0).getProjectSn(); List locationTunnels = locationTunnelMapper.selectList(new LambdaQueryWrapper() .eq(LocationTunnel::getProjectSn, projectSn)); if (CollUtil.isNotEmpty(locationTunnels)) { //清除以前标签 locationDataMapper.update(null, new LambdaUpdateWrapper() .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); } } } }