From 1c40baaf9ca0183945b9881d11ceed5aeebc8290 Mon Sep 17 00:00:00 2001
From: Pu Zhibing <393733352@qq.com>
Date: 星期四, 23 十月 2025 11:35:44 +0800
Subject: [PATCH] 修改bug
---
MessagePushTravel/src/main/java/com/sinata/push/util/echo/NettyServerController.java | 80 ++++++++++++++++++++++++++++++----------
1 files changed, 60 insertions(+), 20 deletions(-)
diff --git a/MessagePushTravel/src/main/java/com/sinata/push/util/echo/NettyServerController.java b/MessagePushTravel/src/main/java/com/sinata/push/util/echo/NettyServerController.java
index 0f10527..cf893ba 100644
--- a/MessagePushTravel/src/main/java/com/sinata/push/util/echo/NettyServerController.java
+++ b/MessagePushTravel/src/main/java/com/sinata/push/util/echo/NettyServerController.java
@@ -5,6 +5,7 @@
import cn.hutool.http.HttpUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
+import com.sinata.push.config.QYTConfig;
import com.sinata.push.util.*;
import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
@@ -33,18 +34,25 @@
public static Hashtable<String, Hashtable<ChannelHandlerContext, String>> map = new Hashtable<String, Hashtable<ChannelHandlerContext,String>>();
public static Hashtable<String,String> table;
+
+ public static QYTConfig qytConfig;
private RedisUtil redisUtil = SpringUtil.getObject(RedisUtil.class);
private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
-
+
static{
if(table == null){
table = new Hashtable<>();
}
+ }
+
+
+ public static void setQytConfig(QYTConfig qytConfig) {
+ NettyServerController.qytConfig = qytConfig;
}
public static boolean isdebug = false;
@@ -74,9 +82,7 @@
if(msgStr.indexOf("{") == -1 || msgStr.indexOf("}") == -1 || msgStr.indexOf("code") == -1 || msgStr.indexOf("msg") == -1 || msgStr.indexOf("data") == -1 || msgStr.indexOf("method") == -1) {
return;
}
- if(isdebug) {
-// System.out.println("<<<--receive-->>>" + msg);
- }
+ System.out.println("<<<--receive-->>>" + msg);
// 获取socket信息,保存相应的socket
JSONObject jsonMsg = JSONObject.parseObject(msg.toString());
@@ -95,13 +101,15 @@
String userId1 = jsonCon.getString("userId");
String device = jsonCon.getString("device");
String version = jsonCon.getString("version");
+ String businessType = jsonCon.getString("businessType");//1:打车,2=代驾
+ String business = "2".equals(businessType) ? "daijia" : "dache";
if(StringUtil.isNotEmpty(userId1)){
//判断用户或者司机长连接
if(type==1){
//确保账号在单个设备上登录
if(StringUtil.isNotEmpty(token)){
- String token_ = redisUtil.getValue("USER_APP_"+ userId1);//获取缓存中最新的数据
+ String token_ = redisUtil.getValue(business + ":USER_APP_"+ userId1);//获取缓存中最新的数据
if(StringUtil.isNotEmpty(token_) && !token.equals(token_)){//不在同一设备上登录,向其他设备发送数据
ChannelHandlerContext data_ = NettyChannelMap.getData_(token_.substring(token_.length() - 16));
JSONObject msg_ = new JSONObject();
@@ -121,18 +129,18 @@
}, 5000);
}
NettyChannelMap.update_(token.substring(token.length() - 16), ctx);
- NettyChannelMap.update("USER" + userId1, ctx);
- redisUtil.setStrValue("USER_APP_" + userId1, token);
+ NettyChannelMap.update(business + ":USER" + userId1, ctx);
+ redisUtil.setStrValue(business + ":USER_APP_" + userId1, token);
}
//存储通讯通道
if(null != ctx && ctx.channel().isActive()){
- NettyChannelMap.update("USER" + userId1, ctx);
+ NettyChannelMap.update(business + ":USER" + userId1, ctx);
}
}else{
//确保账号在单个设备上登录
if(StringUtil.isNotEmpty(token)){//APP端登录的操作
- String token_ = redisUtil.getValue("DRIVER_" + userId1);//缓存中拿最新数据
+ String token_ = redisUtil.getValue(business + ":DRIVER_" + userId1);//缓存中拿最新数据
if(StringUtil.isNotEmpty(token_) && !token.equals(token_)){//不在同一设备上登录,向当前设备发送数据
ChannelHandlerContext data_ = NettyChannelMap.getData_(token_.substring(token_.length() - 16));
if(null != data_){
@@ -147,13 +155,13 @@
}
}
}
- NettyChannelMap.update("DRIVER" + userId1, ctx);
+ NettyChannelMap.update(business + ":DRIVER" + userId1, ctx);
NettyChannelMap.update_(token.substring(token.length() - 16), ctx);
- redisUtil.setStrValue("DRIVER_" + userId1, token);
+ redisUtil.setStrValue(business + ":DRIVER_" + userId1, token);
}
//存储通讯通道
if(null != ctx && ctx.channel().isActive()){
- NettyChannelMap.update("DRIVER" + userId1, ctx);
+ NettyChannelMap.update(business + ":DRIVER" + userId1, ctx);
}
}
}
@@ -166,15 +174,18 @@
//司机上传位置
if(method.equals(Method.location)){
Integer driverId = jsonCon.getInteger("driverId");
- String fluid_control = redisUtil.getValue("location_" + driverId);
+ String businessType = jsonCon.getString("businessType");//1:打车,2=代驾
+ String business = "2".equals(businessType) || null==businessType ? "daijia" : "dache";
+
+ String fluid_control = redisUtil.getValue(business + ":location_" + driverId);
if(!StringUtils.hasLength(fluid_control)){
- redisUtil.setStrValue("location_" + driverId, System.currentTimeMillis() + "");
+ redisUtil.setStrValue(business + ":location_" + driverId, System.currentTimeMillis() + "");
}else{
long l = System.currentTimeMillis() - Long.valueOf(fluid_control);
if(l < 5000){
return;
}
- redisUtil.setStrValue("location_" + driverId, System.currentTimeMillis() + "");
+ redisUtil.setStrValue(business + ":location_" + driverId, System.currentTimeMillis() + "");
}
Integer orderId = jsonCon.getInteger("orderId");
@@ -186,16 +197,44 @@
System.out.println("司机上传位置:" + sdf.format(new Date()) + "----" + jsonCon.toJSONString());
if(SinataUtil.isNotEmpty(driverId)){
if(null != lon && 0 != lon && null != lat && 0 != lat){
- if(null != orderId && 0 != driverId && null != orderType && 0 != orderType){//开始存入数据库
+ if("dache".equals(business)){
+ if(null != orderId && 0 != driverId && null != orderType && 0 != orderType){//开始存入数据库
+ Map<String, Object> params = new HashMap<>();
+ params.put("orderType", String.valueOf(orderType));
+ params.put("orderId", String.valueOf(orderId));
+ params.put("driverId", String.valueOf(driverId));
+ params.put("lon", String.valueOf(lon));
+ params.put("lat", String.valueOf(lat));
+ params.put("directionAngle", String.valueOf(computeAzimuth));
+ params.put("altitude", String.valueOf(altitude));
+ HttpRequest post = HttpUtil.createPost(qytConfig.getChuxingUrl() + "/driver-server/base/savePosition");
+ post.contentType(MediaType.APPLICATION_FORM_URLENCODED_VALUE);
+ post.form(params);
+ HttpResponse execute = post.execute();
+ if(200 != execute.getStatus()){
+ System.err.println("调用driver-server存储位置数据出错了");
+ }
+ JSONObject jsonObject = JSON.parseObject(execute.body(), JSONObject.class);
+ if(jsonObject.getIntValue("code") != 200){
+ System.err.println("调用driver-server存储位置数据出错了");
+ }
+ }
+ }
+
+ if("daijia".equals(business)){
+ HttpHeaders headers = new HttpHeaders();
+ // 以表单的方式提交
+ headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
+ //将请求头部和参数合成一个请求
Map<String, Object> params = new HashMap<>();
- params.put("orderType", String.valueOf(orderType));
- params.put("orderId", String.valueOf(orderId));
+ params.put("orderType", null == orderType ? orderType : String.valueOf(orderType));
+ params.put("orderId", null == orderId ? orderId : String.valueOf(orderId));
params.put("driverId", String.valueOf(driverId));
params.put("lon", String.valueOf(lon));
params.put("lat", String.valueOf(lat));
params.put("directionAngle", String.valueOf(computeAzimuth));
params.put("altitude", String.valueOf(altitude));
- HttpRequest post = HttpUtil.createPost(URLUtil.zuul + "/driver-server/base/savePosition");
+ HttpRequest post = HttpUtil.createPost(qytConfig.getDaijiaurl() + "/driver-server/base/driver/addDriverPosition");
post.contentType(MediaType.APPLICATION_FORM_URLENCODED_VALUE);
post.form(params);
HttpResponse execute = post.execute();
@@ -207,7 +246,8 @@
System.err.println("调用driver-server存储位置数据出错了");
}
}
- redisUtil.setStrValue("DRIVER" + driverId, lon + "," + lat, 30);//实时位置存入redis中
+
+ redisUtil.setStrValue(business + ":DRIVER" + driverId, lon + "," + lat, 30);//实时位置存入redis中
}else{
this.sendMsgToClient(ctx, "__error__" + msg.toString());
}
--
Gitblit v1.7.1