From 98d63d51c8488dadd819d540350f578e025e02c1 Mon Sep 17 00:00:00 2001 From: Pu Zhibing <393733352@qq.com> Date: 星期二, 23 九月 2025 14:49:28 +0800 Subject: [PATCH] 更新代码 --- MessagePushTravel/src/main/java/com/sinata/push/util/applets/NettyWebSocketController.java | 32 ++-- UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/DriverMapper.xml | 11 + UserZYTravel/guns-admin/src/main/resources/application.yml | 4 DriverZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/dao/mapping/OrderPrivateCarMapper.xml | 2 UserZYTravel/guns-admin/src/test/java/com/stylefeng/guns/GunsApplicationTest.java | 21 +-- DriverZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/OrderPositionServiceImpl.java | 4 UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/DriverServiceImpl.java | 10 + MessagePushTravel/src/main/java/com/sinata/push/util/echo/NettyServerController.java | 95 ++++++------ MessagePushTravel/src/main/java/com/sinata/push/util/RedisUtil.java | 14 ++ UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/RedisUtil.java | 50 +++++++ ZuulZYTravel/src/main/java/com/sinata/zuul/util/applets/NettyWebSocketController.java | 30 ++-- DriverZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/TaskUtil.java | 8 ZuulZYTravel/src/main/java/com/sinata/zuul/util/echo/NettyServerController.java | 96 ++++++------ DriverZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/OrderServiceImpl.java | 4 DriverZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/RedisUtil.java | 14 ++ UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/DriverMapper.java | 3 UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/PayMoneyUtil.java | 8 17 files changed, 249 insertions(+), 157 deletions(-) diff --git a/DriverZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/dao/mapping/OrderPrivateCarMapper.xml b/DriverZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/dao/mapping/OrderPrivateCarMapper.xml index de390aa..37921fb 100644 --- a/DriverZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/dao/mapping/OrderPrivateCarMapper.xml +++ b/DriverZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/dao/mapping/OrderPrivateCarMapper.xml @@ -81,7 +81,7 @@ <select id="getSmsOrderList" resultType="com.stylefeng.guns.modular.specialTrain.model.OrderPrivateCar"> SELECT o.id, - o.getoffTime, + o.travelTime, o.smsTime,o.smsNumber,o.userId,o.orderMoney, u.phone passengersPhone FROM diff --git a/DriverZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/OrderPositionServiceImpl.java b/DriverZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/OrderPositionServiceImpl.java index 2e223a4..09d468d 100644 --- a/DriverZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/OrderPositionServiceImpl.java +++ b/DriverZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/OrderPositionServiceImpl.java @@ -10,6 +10,7 @@ import com.stylefeng.guns.modular.system.service.IOrderService; import com.stylefeng.guns.modular.system.util.GDMapElectricFenceUtil; import com.stylefeng.guns.modular.system.util.PushMinistryOfTransportUtil; +import com.stylefeng.guns.modular.system.util.RedisUtil; import com.stylefeng.guns.modular.taxi.service.IOrderTaxiService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; @@ -40,7 +41,8 @@ @Value("${pushMinistryOfTransport}") private boolean pushMinistryOfTransport; - + @Autowired + private RedisUtil redisUtil; /** diff --git a/DriverZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/OrderServiceImpl.java b/DriverZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/OrderServiceImpl.java index 1208840..7a39c43 100644 --- a/DriverZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/OrderServiceImpl.java +++ b/DriverZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/OrderServiceImpl.java @@ -1051,7 +1051,7 @@ for(OrderPrivateCar order : orderList){ if(order.getSmsTime()==null ){ - if(order.getGetoffTime().getTime()+24*60*60*1000L<day.getTime()){ + if((order.getTravelTime().getTime()+24*60*60*1000L)<day.getTime()){ order.setSmsNumber(order.getSmsNumber()+1); order.setSmsTime(day); //发送短信 @@ -1073,7 +1073,7 @@ systemNoticeService.addSystemNotice(1, "有一笔订单未付款,请前往支付!", order.getUserId()); } }else{ - if(order.getSmsTime().getTime()+24*60*60*1000L<day.getTime()){ + if((order.getSmsTime().getTime()+24*60*60*1000L)<day.getTime()){ order.setSmsNumber(order.getSmsNumber()+1); order.setSmsTime(day); //发送短信 diff --git a/DriverZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/RedisUtil.java b/DriverZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/RedisUtil.java index f9a24a1..83c640b 100644 --- a/DriverZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/RedisUtil.java +++ b/DriverZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/RedisUtil.java @@ -2,6 +2,7 @@ import com.stylefeng.guns.core.util.ToolUtil; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.geo.Point; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Component; import org.springframework.util.StringUtils; @@ -129,4 +130,17 @@ public boolean unlock(){ return unlock("redis"); } + + + /** + * 添加地理空间索引坐标 + * @param k + * @param lon + * @param lat + * @param object + */ + public void addGeo(String k, Double lon, Double lat, String object){ + Point point = new Point(lon, lat); + redisTemplate.opsForGeo().add(k, point, object); + } } diff --git a/DriverZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/TaskUtil.java b/DriverZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/TaskUtil.java index d758861..6c67778 100644 --- a/DriverZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/TaskUtil.java +++ b/DriverZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/TaskUtil.java @@ -37,7 +37,7 @@ public void taskMinute(){ try { //修改满足活动条件的数据(在线时长,订单量) - driverService.taskMinute(); +// driverService.taskMinute(); // 处理车载端断电后的自动下班 // driverService.taskOffWork(); // 处理结束订单后30分钟解绑小号功能 @@ -70,10 +70,10 @@ public void taskFiveMinute(){ try { //处理未支付订单发送短信通知 -// orderService.taskSmsSend(); - for (Integer id: driverIds){ + orderService.taskSmsSend(); +// for (Integer id: driverIds){ // jgPushUtil.push(1, "您的预约订单出行时间就要到了,请尽快前往预约地点接乘客", "DRIVER" + id); - } +// } this.driverIds.clear(); } catch (Exception e) { e.printStackTrace(); diff --git a/MessagePushTravel/src/main/java/com/sinata/push/util/RedisUtil.java b/MessagePushTravel/src/main/java/com/sinata/push/util/RedisUtil.java index 17a8e74..ce79415 100644 --- a/MessagePushTravel/src/main/java/com/sinata/push/util/RedisUtil.java +++ b/MessagePushTravel/src/main/java/com/sinata/push/util/RedisUtil.java @@ -1,6 +1,7 @@ package com.sinata.push.util; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.geo.Point; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Component; import org.springframework.util.StringUtils; @@ -132,4 +133,17 @@ public boolean unlock(){ return unlock("redis"); } + + + /** + * 添加地理空间索引坐标 + * @param k + * @param lon + * @param lat + * @param object + */ + public void addGeo(String k, Double lon, Double lat, String object){ + Point point = new Point(lon, lat); + redisTemplate.opsForGeo().add(k, point, object); + } } diff --git a/MessagePushTravel/src/main/java/com/sinata/push/util/applets/NettyWebSocketController.java b/MessagePushTravel/src/main/java/com/sinata/push/util/applets/NettyWebSocketController.java index 1b7ee60..dd1c3e9 100644 --- a/MessagePushTravel/src/main/java/com/sinata/push/util/applets/NettyWebSocketController.java +++ b/MessagePushTravel/src/main/java/com/sinata/push/util/applets/NettyWebSocketController.java @@ -77,22 +77,22 @@ if(StringUtil.isNotEmpty(token)){ String token_ = redisUtil.getValue("USER_" + userId1);//获取缓存中最新的数据 if(StringUtil.isNotEmpty(token_) && !token.equals(token_)){//不在同一设备上登录,向其他设备发送数据 - ChannelHandlerContext context = NettyChannelMap.getData("Applets" + userId1); - JSONObject msg_ = new JSONObject(); - msg_.put("code", 200); - msg_.put("msg", "SUCCESS"); - msg_.put("method", "OFFLINE"); - msg_.put("data", new Object()); - this.sendMsgToClient(context, msg_.toJSONString()); - TimerTask timerTask = new TimerTask() { - @Override - public void run() { - NettyChannelMap.remove(context); - } - }; - Timer timer = new Timer(); - timer.schedule(timerTask, 3000); - timer.cancel(); +// ChannelHandlerContext context = NettyChannelMap.getData("Applets" + userId1); +// JSONObject msg_ = new JSONObject(); +// msg_.put("code", 200); +// msg_.put("msg", "SUCCESS"); +// msg_.put("method", "OFFLINE"); +// msg_.put("data", new Object()); +// this.sendMsgToClient(context, msg_.toJSONString()); +// TimerTask timerTask = new TimerTask() { +// @Override +// public void run() { +// NettyChannelMap.remove(context); +// } +// }; +// Timer timer = new Timer(); +// timer.schedule(timerTask, 3000); +// timer.cancel(); } if(StringUtil.isEmpty(token_)){//确保登录的时候存储token失败的情况 redisUtil.setStrValue("USER_" + userId1, token); 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 2f91d83..6baef1c 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 @@ -115,22 +115,22 @@ if(StringUtil.isNotEmpty(token)){ String token_ = redisUtil.getValue("USER_" + userId1);//获取缓存中最新的数据 if(StringUtil.isNotEmpty(token_) && !token.equals(token_)){//不在同一设备上登录,向其他设备发送数据 - ChannelHandlerContext context = NettyChannelMap.getData("USER" + userId1); - JSONObject msg_ = new JSONObject(); - msg_.put("code", 200); - msg_.put("msg", "SUCCESS"); - msg_.put("method", "OFFLINE"); - msg_.put("data", new Object()); - this.sendMsgToClient(context, msg_.toJSONString());//给当前通道发送消息 - TimerTask timerTask = new TimerTask() { - @Override - public void run() { - NettyChannelMap.remove(context); - } - }; - Timer timer = new Timer(); - timer.schedule(timerTask, 3000); - timer.cancel(); +// ChannelHandlerContext context = NettyChannelMap.getData("USER" + userId1); +// JSONObject msg_ = new JSONObject(); +// msg_.put("code", 200); +// msg_.put("msg", "SUCCESS"); +// msg_.put("method", "OFFLINE"); +// msg_.put("data", new Object()); +// this.sendMsgToClient(context, msg_.toJSONString());//给当前通道发送消息 +// TimerTask timerTask = new TimerTask() { +// @Override +// public void run() { +// NettyChannelMap.remove(context); +// } +// }; +// Timer timer = new Timer(); +// timer.schedule(timerTask, 3000); +// timer.cancel(); } if(StringUtil.isEmpty(token_)){//确保登录的时候存储token失败的情况 redisUtil.setStrValue("USER_" + userId1, token); @@ -165,21 +165,21 @@ String token_ = redisUtil.getValue("DRIVER_" + userId1);//缓存中拿最新数据 if(StringUtil.isNotEmpty(token_) && !token_.equals(token)){ //如果是车载端登录,则将其它端都强迫下线 - JSONObject msg_ = new JSONObject(); - msg_.put("code", 200); - msg_.put("msg", "SUCCESS"); - msg_.put("method", "OFFLINE"); - msg_.put("data", new Object()); - this.sendMsgToClient(ctx, msg_.toJSONString());//给当前通道发送消息 - TimerTask timerTask = new TimerTask() { - @Override - public void run() { - NettyChannelMap.remove(ctx); - } - }; - Timer timer = new Timer(); - timer.schedule(timerTask, 3000); - timer.cancel(); +// JSONObject msg_ = new JSONObject(); +// msg_.put("code", 200); +// msg_.put("msg", "SUCCESS"); +// msg_.put("method", "OFFLINE"); +// msg_.put("data", new Object()); +// this.sendMsgToClient(ctx, msg_.toJSONString());//给当前通道发送消息 +// TimerTask timerTask = new TimerTask() { +// @Override +// public void run() { +// NettyChannelMap.remove(ctx); +// } +// }; +// Timer timer = new Timer(); +// timer.schedule(timerTask, 3000); +// timer.cancel(); } if(StringUtil.isEmpty(token_)){//确保登录的时候存储token失败的情况 redisUtil.setStrValue("DRIVER_" + userId1, token); @@ -192,22 +192,22 @@ if(StringUtil.isNotEmpty(token) && StringUtil.isEmpty(value)){//APP端登录的操作 String token_ = redisUtil.getValue("DRIVER_" + userId1);//缓存中拿最新数据 if(StringUtil.isNotEmpty(token_) && !token.equals(token_)){//不在同一设备上登录,向当前设备发送数据 - ChannelHandlerContext context = NettyChannelMap.getData("DRIVER" + userId1); - JSONObject msg_ = new JSONObject(); - msg_.put("code", 200); - msg_.put("msg", "SUCCESS"); - msg_.put("method", "OFFLINE"); - msg_.put("data", new Object()); - this.sendMsgToClient(context, msg_.toJSONString());//给当前通道发送消息 - TimerTask timerTask = new TimerTask() { - @Override - public void run() { - NettyChannelMap.remove(context); - } - }; - Timer timer = new Timer(); - timer.schedule(timerTask, 3000); - timer.cancel(); +// ChannelHandlerContext context = NettyChannelMap.getData("DRIVER" + userId1); +// JSONObject msg_ = new JSONObject(); +// msg_.put("code", 200); +// msg_.put("msg", "SUCCESS"); +// msg_.put("method", "OFFLINE"); +// msg_.put("data", new Object()); +// this.sendMsgToClient(context, msg_.toJSONString());//给当前通道发送消息 +// TimerTask timerTask = new TimerTask() { +// @Override +// public void run() { +// NettyChannelMap.remove(context); +// } +// }; +// Timer timer = new Timer(); +// timer.schedule(timerTask, 3000); +// timer.cancel(); } if(StringUtil.isEmpty(token_)){//确保登录的时候存储token失败的情况 redisUtil.setStrValue("DRIVER_" + userId1, token); @@ -270,6 +270,7 @@ } System.out.println("id:" + driverId + "---lon" + lon + "---lat" + lat); redisUtil.setStrValue("DRIVER" + driverId, lon + "," + lat, 300);//实时位置存入redis中 + redisUtil.addGeo("DRIVER_POSITION", lon, lat, driverId.toString()); }else{ NettyServerController.sendMsgToClient(ctx, "__error__" + msg.toString()); } diff --git a/UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/DriverMapper.java b/UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/DriverMapper.java index 16f4b83..13b4983 100644 --- a/UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/DriverMapper.java +++ b/UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/DriverMapper.java @@ -18,6 +18,9 @@ List<Driver> queryIdleDriver(@Param("type") Integer type, @Param("companyId") Integer companyId); + List<Driver> queryIdleDriverByIds(@Param("type") Integer type, @Param("ids") List<String> ids); + + /** * 获取当前已上班type业务类型、设置了可以接此类型的单据、服务车型匹配且空闲的司机 * @param type diff --git a/UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/DriverMapper.xml b/UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/DriverMapper.xml index 3213550..e6d749d 100644 --- a/UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/DriverMapper.xml +++ b/UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/DriverMapper.xml @@ -163,7 +163,16 @@ </select> - + <select id="queryIdleDriverByIds" resultType="Driver"> + select * + from t_driver + where flag != 3 and state = 2 and authState = 2 and id in + <foreach collection="ids" index="index" item="item" open="(" separator="," close=")"> + #{item} + </foreach> + and id in(select driverId from t_driver_work where startTime < now() and state = 1 and `type` like CONCAT('%', #{type}, '%')) + and id in (select driverId from t_driver_orders where `type` = #{type}) + </select> <select id="queryIdleDriver_" resultType="Driver"> select diff --git a/UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/DriverServiceImpl.java b/UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/DriverServiceImpl.java index b54efa8..799d8b3 100644 --- a/UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/DriverServiceImpl.java +++ b/UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/DriverServiceImpl.java @@ -18,6 +18,8 @@ import com.stylefeng.guns.modular.system.util.RedisUtil; import com.stylefeng.guns.modular.system.warpper.BaseWarpper; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.geo.GeoResult; +import org.springframework.data.redis.connection.RedisGeoCommands; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; @@ -215,10 +217,14 @@ @Override public List<Driver> queryDriverLimitTen(Integer type, Double lon, Double lat) { - List<Driver> drivers = driverMapper.queryIdleDriver(type, null); - if(CollectionUtils.isEmpty(drivers)){ + List<GeoResult<RedisGeoCommands.GeoLocation<String>>> driverPosition = redisUtil.getNearGeoSortAscending("DRIVER_POSITION", lon, lat, 5000D); + if(CollectionUtils.isEmpty(driverPosition)){ return new ArrayList<>(); } + List<RedisGeoCommands.GeoLocation<String>> geoLocations = driverPosition.stream().map(GeoResult::getContent).collect(Collectors.toList()); + driverPosition.stream().map(GeoResult::getContent).collect(Collectors.toList()); + List<String> dis = geoLocations.stream().map(RedisGeoCommands.GeoLocation::getName).collect(Collectors.toList()); + List<Driver> drivers = driverMapper.queryIdleDriverByIds(type, dis); Iterator<Driver> iterator = drivers.iterator(); while (iterator.hasNext()){ Driver driver = iterator.next(); diff --git a/UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/PayMoneyUtil.java b/UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/PayMoneyUtil.java index bec3771..cf9f995 100644 --- a/UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/PayMoneyUtil.java +++ b/UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/PayMoneyUtil.java @@ -609,7 +609,7 @@ Map<String, String> map1 = null; String body1 = null; try { - String certPath = "D:\\app\\cert\\weixin\\1716524249\\apiclient_cert.p12"; + String certPath = "D:\\app\\cert\\weixin\\1602881362\\apiclient_cert.p12"; body1 = httpClientUtil.pushHttpsRequsetXml(url, xmlString.toString(), new HashMap<>(), mchId, certPath, "PKCS12"); } catch (Exception e) { e.printStackTrace(); @@ -865,7 +865,7 @@ // 一个商户号只能初始化一个配置,否则会因为重复的下载任务报错 Config config = new RSAAutoCertificateConfig.Builder() .merchantId(mchId) - .privateKeyFromPath("D:\\app\\cert\\weixin\\1716524249\\apiclient_key.pem") + .privateKeyFromPath("D:\\app\\cert\\weixin\\1602881362\\apiclient_key.pem") .merchantSerialNumber("5410CEAE9C7E9CDFCB58B88E1C607D2841F62437") .apiV3Key("FCB58B88E1C607D2841F62437QIGZOdM") .build(); @@ -920,7 +920,7 @@ xmlString.append("</xml>"); Map<String, String> map1 = null; - String certPath = "D:\\app\\cert\\weixin\\1716524249\\apiclient_cert.p12";//证书地址 + String certPath = "D:\\app\\cert\\weixin\\1602881362\\apiclient_cert.p12";//证书地址 String body1 = httpClientUtil.pushHttpsRequsetXml(url, xmlString.toString(), new HashMap<>(), mchId, certPath, "PKCS12"); //将结果xml解析成map body1 = body1.replaceAll("<!\\[CDATA\\[",""); @@ -997,7 +997,7 @@ xmlString.append("</xml>"); Map<String, String> map1 = null; - String certPath = "D:\\app\\cert\\weixin\\1716524249\\apiclient_cert.p12";//证书地址 + String certPath = "D:\\app\\cert\\weixin\\1602881362\\apiclient_cert.p12";//证书地址 String body1 = httpClientUtil.pushHttpsRequsetXml(url, xmlString.toString(), new HashMap<>(), mchId, certPath, "PKCS12"); //将结果xml解析成map body1 = body1.replaceAll("<!\\[CDATA\\[",""); diff --git a/UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/RedisUtil.java b/UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/RedisUtil.java index 2e15fec..44e7679 100644 --- a/UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/RedisUtil.java +++ b/UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/RedisUtil.java @@ -2,6 +2,11 @@ import com.stylefeng.guns.core.util.ToolUtil; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.geo.Circle; +import org.springframework.data.geo.GeoResult; +import org.springframework.data.geo.GeoResults; +import org.springframework.data.geo.Point; +import org.springframework.data.redis.connection.RedisGeoCommands; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Component; import org.springframework.util.StringUtils; @@ -131,4 +136,49 @@ public boolean unlock(){ return unlock("redis"); } + + + /** + * 检索坐标为中心直径范围内的数据,单位米 + * @param k + * @param lon + * @param lat + * @param radius + * @return + */ + public List<GeoResult<RedisGeoCommands.GeoLocation<String>>> getNearGeo(String k, Double lon, Double lat, Double radius){ + Circle within = new Circle(lon, lat, radius); + GeoResults<RedisGeoCommands.GeoLocation<String>> geoResults = redisTemplate.opsForGeo().radius(k, within); + return geoResults.getContent(); + } + + + /** + * 检索坐标为中心直径范围内的数据,单位米,由近到远排序 + * @param k + * @param lon + * @param lat + * @param radius + * @return + */ + public List<GeoResult<RedisGeoCommands.GeoLocation<String>>> getNearGeoSortAscending(String k, Double lon, Double lat, Double radius){ + Circle within = new Circle(lon, lat, radius); + RedisGeoCommands.GeoRadiusCommandArgs geoRadiusCommandArgs = RedisGeoCommands.GeoRadiusCommandArgs.newGeoRadiusArgs(); + geoRadiusCommandArgs.sortAscending(); + GeoResults<RedisGeoCommands.GeoLocation<String>> geoResults = redisTemplate.opsForGeo().radius(k, within, geoRadiusCommandArgs); + return geoResults.getContent(); + } + + + /** + * 添加地理空间索引坐标 + * @param k + * @param lon + * @param lat + * @param object + */ + public void addGeo(String k, Double lon, Double lat, String object){ + Point point = new Point(lon, lat); + redisTemplate.opsForGeo().add(k, point, object); + } } diff --git a/UserZYTravel/guns-admin/src/main/resources/application.yml b/UserZYTravel/guns-admin/src/main/resources/application.yml index 4eead0f..02a6398 100644 --- a/UserZYTravel/guns-admin/src/main/resources/application.yml +++ b/UserZYTravel/guns-admin/src/main/resources/application.yml @@ -84,8 +84,8 @@ appletsAppSecret: 4d966de14ab6c6a5137ad44ee67c5307 #应用密钥AppSecret,在微信开放平台提交应用审核通过后获得 appid: 1 #小程序APPid appSecret: 1 # - mchId: 1716524249 #微信支付分配的商户号 - key: FCB58B88E1C607D2841F62437QIGZOdM #key为商户平台设置的密钥key: + mchId: 1602881362 #微信支付分配的商户号 + key: xMCkkqlmQO3VEHwV5BgTSfdMIGZewO5I #key为商户平台设置的密钥key: --- diff --git a/UserZYTravel/guns-admin/src/test/java/com/stylefeng/guns/GunsApplicationTest.java b/UserZYTravel/guns-admin/src/test/java/com/stylefeng/guns/GunsApplicationTest.java index 2bf3187..d141e34 100644 --- a/UserZYTravel/guns-admin/src/test/java/com/stylefeng/guns/GunsApplicationTest.java +++ b/UserZYTravel/guns-admin/src/test/java/com/stylefeng/guns/GunsApplicationTest.java @@ -1,17 +1,16 @@ //package com.stylefeng.guns; // -//import com.stylefeng.guns.modular.specialTrain.server.IOrderPrivateCarService; -//import com.stylefeng.guns.modular.system.util.PayMoneyUtil; -//import com.stylefeng.guns.modular.system.util.ResultUtil; +//import com.stylefeng.guns.modular.system.util.RedisUtil; //import org.junit.Test; //import org.junit.runner.RunWith; //import org.springframework.beans.factory.annotation.Autowired; //import org.springframework.boot.test.context.SpringBootTest; +//import org.springframework.data.geo.GeoResult; +//import org.springframework.data.redis.connection.RedisGeoCommands; //import org.springframework.test.context.junit4.SpringRunner; // -//import java.util.Map; +//import java.util.List; // -///** // * @author zhibing.pu // * @Date 2024/9/24 9:24 // */ @@ -20,18 +19,12 @@ //public class GunsApplicationTest { // // @Autowired -// private PayMoneyUtil payMoneyUtil; -// -// @Autowired -// private IOrderPrivateCarService orderPrivateCarService; +// private RedisUtil redisUtil; // // // @Test // public void test(){ -// try { -// orderPrivateCarService.payPrivateCarOrder(1, 37630, null, 1); -// } catch (Exception e) { -// throw new RuntimeException(e); -// } +// List<GeoResult<RedisGeoCommands.GeoLocation<String>>> driverPosition = redisUtil.getNearGeo("DRIVER_POSITION", 104.5615D, 30.456275D, 50000D); +// System.err.println(driverPosition); // } //} diff --git a/ZuulZYTravel/src/main/java/com/sinata/zuul/util/applets/NettyWebSocketController.java b/ZuulZYTravel/src/main/java/com/sinata/zuul/util/applets/NettyWebSocketController.java index f94ae71..a713b8a 100644 --- a/ZuulZYTravel/src/main/java/com/sinata/zuul/util/applets/NettyWebSocketController.java +++ b/ZuulZYTravel/src/main/java/com/sinata/zuul/util/applets/NettyWebSocketController.java @@ -78,21 +78,21 @@ NettyChannelMap.update_(token.substring(0, 23), ctx);//存储单点登录的通道 String token_ = redisUtil.getValue("USER_" + userId1);//获取缓存中最新的数据 if(StringUtil.isNotEmpty(token_) && !token.equals(token_)){//不在同一设备上登录,向其他设备发送数据 - JSONObject msg_ = new JSONObject(); - msg_.put("code", 200); - msg_.put("msg", "SUCCESS"); - msg_.put("method", "OFFLINE"); - msg_.put("data", new Object()); - this.sendMsgToClient(ctx, msg_.toJSONString()); - TimerTask timerTask = new TimerTask() { - @Override - public void run() { - NettyChannelMap.remove_(ctx); - } - }; - Timer timer = new Timer(); - timer.schedule(timerTask, 3000); - timer.cancel(); +// JSONObject msg_ = new JSONObject(); +// msg_.put("code", 200); +// msg_.put("msg", "SUCCESS"); +// msg_.put("method", "OFFLINE"); +// msg_.put("data", new Object()); +// this.sendMsgToClient(ctx, msg_.toJSONString()); +// TimerTask timerTask = new TimerTask() { +// @Override +// public void run() { +// NettyChannelMap.remove_(ctx); +// } +// }; +// Timer timer = new Timer(); +// timer.schedule(timerTask, 3000); +// timer.cancel(); } if(StringUtil.isEmpty(token_)){//确保登录的时候存储token失败的情况 redisUtil.setStrValue("USER_" + userId1, token); diff --git a/ZuulZYTravel/src/main/java/com/sinata/zuul/util/echo/NettyServerController.java b/ZuulZYTravel/src/main/java/com/sinata/zuul/util/echo/NettyServerController.java index 0ddae06..2ebd326 100644 --- a/ZuulZYTravel/src/main/java/com/sinata/zuul/util/echo/NettyServerController.java +++ b/ZuulZYTravel/src/main/java/com/sinata/zuul/util/echo/NettyServerController.java @@ -100,22 +100,22 @@ if(StringUtil.isNotEmpty(token)){ String token_ = redisUtil.getValue("USER_" + userId1);//获取缓存中最新的数据 if(StringUtil.isNotEmpty(token_) && !token.equals(token_)){//不在同一设备上登录,向其他设备发送数据 - JSONObject msg_ = new JSONObject(); - msg_.put("code", 200); - msg_.put("msg", "SUCCESS"); - msg_.put("method", "OFFLINE"); - msg_.put("data", new Object()); - this.sendMsgToClient(ctx, msg_.toJSONString());//给当前通道发送消息 - TimerTask timerTask = new TimerTask() { - @Override - public void run() { - NettyChannelMap.remove_(ctx); - NettyChannelMap.remove(ctx); - } - }; - Timer timer = new Timer(); - timer.schedule(timerTask, 3000); - timer.cancel(); +// JSONObject msg_ = new JSONObject(); +// msg_.put("code", 200); +// msg_.put("msg", "SUCCESS"); +// msg_.put("method", "OFFLINE"); +// msg_.put("data", new Object()); +// this.sendMsgToClient(ctx, msg_.toJSONString());//给当前通道发送消息 +// TimerTask timerTask = new TimerTask() { +// @Override +// public void run() { +// NettyChannelMap.remove_(ctx); +// NettyChannelMap.remove(ctx); +// } +// }; +// Timer timer = new Timer(); +// timer.schedule(timerTask, 3000); +// timer.cancel(); }else{ NettyChannelMap.update_(token.substring(0, 23), ctx); NettyChannelMap.update("USER" + userId1, ctx); @@ -149,22 +149,22 @@ String token_ = redisUtil.getValue("DRIVER_" + userId1);//缓存中拿最新数据 if(StringUtil.isNotEmpty(token_) && !token_.equals(token)){ //如果是车载端登录,则将其它端都强迫下线 - JSONObject msg_ = new JSONObject(); - msg_.put("code", 200); - msg_.put("msg", "SUCCESS"); - msg_.put("method", "OFFLINE"); - msg_.put("data", new Object()); - this.sendMsgToClient(ctx, msg_.toJSONString());//给当前通道发送消息 - TimerTask timerTask = new TimerTask() { - @Override - public void run() { - NettyChannelMap.remove_(ctx); - NettyChannelMap.remove(ctx); - } - }; - Timer timer = new Timer(); - timer.schedule(timerTask, 3000); - timer.cancel(); +// JSONObject msg_ = new JSONObject(); +// msg_.put("code", 200); +// msg_.put("msg", "SUCCESS"); +// msg_.put("method", "OFFLINE"); +// msg_.put("data", new Object()); +// this.sendMsgToClient(ctx, msg_.toJSONString());//给当前通道发送消息 +// TimerTask timerTask = new TimerTask() { +// @Override +// public void run() { +// NettyChannelMap.remove_(ctx); +// NettyChannelMap.remove(ctx); +// } +// }; +// Timer timer = new Timer(); +// timer.schedule(timerTask, 3000); +// timer.cancel(); }else{ System.err.println("开始存储司机通道" + userId1); NettyChannelMap.update("DRIVER" + userId1, ctx); @@ -183,22 +183,22 @@ if(StringUtil.isNotEmpty(token) && StringUtil.isEmpty(device) && StringUtil.isEmpty(value)){//APP端登录的操作 String token_ = redisUtil.getValue("DRIVER_" + userId1);//缓存中拿最新数据 if(StringUtil.isNotEmpty(token_) && !token.equals(token_)){//不在同一设备上登录,向当前设备发送数据 - JSONObject msg_ = new JSONObject(); - msg_.put("code", 200); - msg_.put("msg", "SUCCESS"); - msg_.put("method", "OFFLINE"); - msg_.put("data", new Object()); - this.sendMsgToClient(ctx, msg_.toJSONString());//给当前通道发送消息 - TimerTask timerTask = new TimerTask() { - @Override - public void run() { - NettyChannelMap.remove_(ctx); - NettyChannelMap.remove(ctx); - } - }; - Timer timer = new Timer(); - timer.schedule(timerTask, 3000); - timer.cancel(); +// JSONObject msg_ = new JSONObject(); +// msg_.put("code", 200); +// msg_.put("msg", "SUCCESS"); +// msg_.put("method", "OFFLINE"); +// msg_.put("data", new Object()); +// this.sendMsgToClient(ctx, msg_.toJSONString());//给当前通道发送消息 +// TimerTask timerTask = new TimerTask() { +// @Override +// public void run() { +// NettyChannelMap.remove_(ctx); +// NettyChannelMap.remove(ctx); +// } +// }; +// Timer timer = new Timer(); +// timer.schedule(timerTask, 3000); +// timer.cancel(); }else{ System.err.println("开始存储司机通道" + userId1); NettyChannelMap.update("DRIVER" + userId1, ctx); -- Gitblit v1.7.1