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.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 java.util.List; @Slf4j 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)) { long l = IdUtil.getSnowflake().nextId(); LocationTunnel locationTunnel = locationTunnels.get(0); LocationData locationData = new LocationData(); locationData.setCardType("1510"); locationData.setCardno(cardno); locationData.setPersonName(workerInfos.get(0).getWorkerName()); //locationData.setRegionId(); //locationData.setRegionCode(); //locationData.setRegionName(); //locationData.setPileNo(); //locationData.setNX(); //locationData.setNY(); //locationData.setPX(); //locationData.setPY(); //算出洞口的距离 locationData.setInlX(Double.valueOf(inlX) + 271); //locationData.setMasterX(); //locationData.setRingNum(); //locationData.setLongitude(); //locationData.setLatitude(); //locationData.setAltitude(); locationData.setAlarm(0); //locationData.setVolume(); //locationData.setHeartRate(); locationData.setProjectSn(projectSn); locationData.setRealtimeId(l); locationData.setTunnelId(locationTunnel.getTunnelId()); locationDataMapper.insert(locationData); locationTunnel.setRealtimeId(l); locationTunnelMapper.updateById(locationTunnel); } } } }