2024-01-10 11:26:22 +08:00
|
|
|
|
package com.zhgd.netty.udp;
|
|
|
|
|
|
|
|
|
|
|
|
import cn.hutool.core.collection.CollUtil;
|
|
|
|
|
|
import cn.hutool.core.util.IdUtil;
|
2024-01-12 11:16:17 +08:00
|
|
|
|
import cn.hutool.core.util.RandomUtil;
|
2024-01-10 11:26:22 +08:00
|
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
2024-01-10 17:48:38 +08:00
|
|
|
|
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
2024-01-10 11:26:22 +08:00
|
|
|
|
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;
|
2024-01-10 17:48:38 +08:00
|
|
|
|
import org.springframework.stereotype.Component;
|
2024-01-10 11:26:22 +08:00
|
|
|
|
|
|
|
|
|
|
import java.util.List;
|
|
|
|
|
|
|
|
|
|
|
|
@Slf4j
|
2024-01-10 17:48:38 +08:00
|
|
|
|
@Component
|
2024-01-10 11:26:22 +08:00
|
|
|
|
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)) {
|
2024-01-10 17:48:38 +08:00
|
|
|
|
//清除以前标签
|
|
|
|
|
|
locationDataMapper.update(null, new LambdaUpdateWrapper<LocationData>()
|
|
|
|
|
|
.set(LocationData::getRealtimeId, null)
|
|
|
|
|
|
.eq(LocationData::getCardno, cardno)
|
|
|
|
|
|
.isNotNull(LocationData::getRealtimeId));
|
|
|
|
|
|
|
2024-01-10 11:26:22 +08:00
|
|
|
|
LocationTunnel locationTunnel = locationTunnels.get(0);
|
2024-01-10 17:48:38 +08:00
|
|
|
|
Long realtimeId = locationTunnel.getRealtimeId();
|
|
|
|
|
|
if (realtimeId == null) {
|
|
|
|
|
|
realtimeId = IdUtil.getSnowflake().nextId();
|
|
|
|
|
|
}
|
2024-01-10 11:26:22 +08:00
|
|
|
|
LocationData locationData = new LocationData();
|
|
|
|
|
|
locationData.setCardType("1510");
|
|
|
|
|
|
locationData.setCardno(cardno);
|
|
|
|
|
|
locationData.setPersonName(workerInfos.get(0).getWorkerName());
|
|
|
|
|
|
//算出洞口的距离
|
2024-01-20 17:44:00 +08:00
|
|
|
|
locationData.setInlX(Double.parseDouble(inlX));
|
2024-01-12 11:16:17 +08:00
|
|
|
|
try {
|
|
|
|
|
|
locationData.setPY((double) RandomUtil.randomInt(locationTunnel.getYValueRandomRangeStart(), locationTunnel.getYValueRandomRangeEnd()));
|
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
|
locationData.setPY(Double.valueOf(locationTunnel.getYValueRandomRangeStart()));
|
|
|
|
|
|
}
|
2024-01-10 11:26:22 +08:00
|
|
|
|
locationData.setAlarm(0);
|
|
|
|
|
|
locationData.setProjectSn(projectSn);
|
2024-01-10 17:48:38 +08:00
|
|
|
|
locationData.setRealtimeId(realtimeId);
|
2024-01-10 11:26:22 +08:00
|
|
|
|
locationData.setTunnelId(locationTunnel.getTunnelId());
|
|
|
|
|
|
locationDataMapper.insert(locationData);
|
|
|
|
|
|
|
2024-01-10 17:48:38 +08:00
|
|
|
|
locationTunnel.setRealtimeId(realtimeId);
|
2024-01-10 11:26:22 +08:00
|
|
|
|
locationTunnelMapper.updateById(locationTunnel);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|