From 3a0bef313cbc6cd71bcb234d208805c022827e13 Mon Sep 17 00:00:00 2001 From: liujie <1793218484@qq.com> Date: 星期三, 13 八月 2025 18:59:01 +0800 Subject: [PATCH] Merge branch 'master' of http://120.76.84.145:10101/gitblit/r/java/QianYunTong --- MessagePushTravel/src/main/java/com/sinata/push/util/echo/NettyServerController.java | 76 +++++++++++++++++++++++++++++-------- 1 files changed, 59 insertions(+), 17 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..a4bbdfb 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; @@ -95,13 +103,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 +131,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 +157,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 +176,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 +199,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 +248,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