92 lines
4.0 KiB
Java
92 lines
4.0 KiB
Java
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);
|
||
}
|
||
}
|
||
|
||
}
|
||
|
||
|
||
}
|