From 6303854b482179fefc3498739aed3f86e930e6fb Mon Sep 17 00:00:00 2001 From: puzhibing <393733352@qq.com> Date: 星期五, 02 六月 2023 15:30:31 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/master' --- user/guns-admin/src/main/java/com/agentdriving/user/modular/system/util/PushUtil.java | 33 +++ driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/util/PushUtil.java | 34 +++ management/guns-admin/src/main/webapp/WEB-INF/view/system/tOrder/tOrder_add.html | 50 ++++ user/guns-admin/src/main/java/com/agentdriving/user/modular/system/service/impl/OrderServiceImpl.java | 130 +++++++++++++ management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TOrderServiceImpl.java | 132 +++++++++++++ management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/PushUtil.java | 35 +++ driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/impl/OrderServiceImpl.java | 131 +++++++++++++ 7 files changed, 536 insertions(+), 9 deletions(-) diff --git a/driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/impl/OrderServiceImpl.java b/driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/impl/OrderServiceImpl.java index 5c8b059..a88400a 100644 --- a/driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/impl/OrderServiceImpl.java +++ b/driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/impl/OrderServiceImpl.java @@ -576,6 +576,8 @@ if(order1.getState() == 101 || order1.getState() == 201){ order1.setHallOrder(1); OrderServiceImpl.this.updateById(order1); + + ExtraPushOrder(order1,systemConfig); } } }, num4 * 1000); @@ -586,6 +588,135 @@ } + public void ExtraPushOrder(Order order, SystemConfig systemConfig){ + JSONObject jsonObject = JSON.parseObject(systemConfig.getContent()); + Double num3 = jsonObject.getDouble("num3");//推单最大范围 + Integer num4 = jsonObject.getInteger("num4");//接单时间 + String startLat = order.getStartLat(); + String startLng = order.getStartLng(); + + //找到中心点 + GeoJsonPoint geoJsonPoint = new GeoJsonPoint(Double.valueOf(startLng), Double.valueOf(startLat)); + Double num = num3 / 1000;//范围公里 + //构造半径 + Distance distanceR = new Distance(num, Metrics.KILOMETERS); + //画圆 + Circle circle = new Circle(geoJsonPoint, distanceR); + // 构造query对象 + Query query = Query.query(Criteria.where("location").withinSphere(circle)); + List<Location> locations = mongoTemplate.find(query, Location.class); + List<Integer> driverIds = locations.stream().map(Location::getDriverId).collect(Collectors.toList()); + Integer driver = null; + YouTuiDriver youTuiDriver1 = null; + if(driverIds.size() > 0){ + List<YouTuiDriver> youTuiDrivers = youTuiDriverService.selectList(new EntityWrapper<YouTuiDriver>().in("driverId", driverIds) + .eq("state", 2).last(" and (surplusQuantity > 0 or now() < endTime) and now() < failureTime")); + Double d = null; + for (YouTuiDriver youTuiDriver : youTuiDrivers) { + String value = redisUtil.getValue("DRIVER" + youTuiDriver.getDriverId()); + if(ToolUtil.isEmpty(value)){ + continue; + } + Driver driver1 = driverService.selectById(youTuiDriver.getDriverId()); + if(driver1.getServerStatus() == 2 || driver1.getOpenOrderQRCode() == 1){ + continue; + } + Map<String, Double> distance = GeodesyUtil.getDistance(value, order.getStartLng() + "," + order.getStartLat()); + Double wgs84 = distance.get("WGS84"); + if(d == null || d.compareTo(wgs84) > 0){ + d = wgs84; + driver = youTuiDriver.getDriverId(); + youTuiDriver1 = youTuiDriver; + } + } + } + if(null != youTuiDriver1 && youTuiDriver1.getType() == 1){ + youTuiDriver1.setSurplusQuantity(youTuiDriver1.getSurplusQuantity() - 1); + youTuiDriverService.updateById(youTuiDriver1); + } + for (int i = 1; i < 4; i++) { + if(null == driver){ + + num = jsonObject.getDouble("num"+i) / 1000;//范围公里 + //构造半径 + distanceR = new Distance(num, Metrics.KILOMETERS); + //画圆 + circle = new Circle(geoJsonPoint, distanceR); + // 构造query对象 + query = Query.query(Criteria.where("location").withinSphere(circle)); + locations = mongoTemplate.find(query, Location.class); + + driverIds = locations.stream().map(Location::getDriverId).collect(Collectors.toList()); + + if(driverIds.size() > 0){ + List<Driver> drivers = driverService.selectList(new EntityWrapper<Driver>().eq("approvalStatus", 2) + .eq("serverStatus", 1).eq("openOrderQRCode", 0).eq("status", 1).in("id", driverIds)); + if(drivers.size() == 0){ + continue; + } + + Integer integral = null;//积分 + Double score = null;//评分 + Double d = null; + for (Driver driver1 : drivers) { + String value = redisUtil.getValue("DRIVER" + driver1.getId()); + if(ToolUtil.isEmpty(value)){ + return; + } + if(integral == null || integral.compareTo(driver1.getIntegral()) < 0){//积分大 + integral = driver1.getIntegral(); + score = driver1.getScore(); + driver = driver1.getId(); + Map<String, Double> distance = GeodesyUtil.getDistance(value, order.getStartLng() + "," + order.getStartLat()); + Double wgs84 = distance.get("WGS84"); + d = wgs84; + continue; + } + if(integral.compareTo(driver1.getIntegral()) == 0 && score.compareTo(driver1.getScore()) < 0){//积分相同对比评分 + integral = driver1.getIntegral(); + score = driver1.getScore(); + driver = driver1.getId(); + Map<String, Double> distance = GeodesyUtil.getDistance(value, order.getStartLng() + "," + order.getStartLat()); + Double wgs84 = distance.get("WGS84"); + d = wgs84; + continue; + } + if(integral.compareTo(driver1.getIntegral()) == 0 && score.compareTo(driver1.getScore()) == 0){//积分相同/评分相同对比距离 + Map<String, Double> distance = GeodesyUtil.getDistance(value, order.getStartLng() + "," + order.getStartLat()); + Double wgs84 = distance.get("WGS84"); + if(d.compareTo(wgs84) > 0){ + d = wgs84; + integral = driver1.getIntegral(); + score = driver1.getScore(); + driver = driver1.getId(); + continue; + } + } + } + + } + } + } + + if(null != driver){ + pushUtil.pushGrabOrderExtras(driver, 2); + //创建定时任务处理订单到大厅 + new Timer().schedule(new TimerTask() { + @Override + public void run() { + Order order1 = OrderServiceImpl.this.selectById(order.getId()); + if(order1.getState() == 101 || order1.getState() == 201){ + order1.setHallOrder(1); + OrderServiceImpl.this.updateById(order1); + } + } + }, num4 * 1000); + }else{ + order.setHallOrder(1); + this.updateById(order); + } + } + /** * 获取大厅订单列表 diff --git a/driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/util/PushUtil.java b/driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/util/PushUtil.java index da404d8..a580218 100644 --- a/driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/util/PushUtil.java +++ b/driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/util/PushUtil.java @@ -165,6 +165,40 @@ /** + * 系统推单推送 附加(防止 用户推单后,范围内的司机20s 内接不到单的补充方法) + * @param id 接受对象id + * @param type 接受对象类型(1=用户,2=司机) + */ + public void pushGrabOrderExtras(Integer id, Integer type){ + JSONObject msg = new JSONObject(); + msg.put("code", 200); + msg.put("msg", "SUCCESS"); + msg.put("method", "PUSH_ORDER"); + + Map<String, Object> map = new HashMap<>(); + msg.put("data", map); + + //调用推送 + HttpHeaders headers = new HttpHeaders(); + // 以表单的方式提交 + headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); + //将请求头部和参数合成一个请求 + MultiValueMap<String, Object> params = new LinkedMultiValueMap<>(); + params.add("msg", msg.toJSONString()); + params.add("id", id.toString()); + params.add("type", type.toString()); + HttpEntity<MultiValueMap<String, Object>> requestEntity = new HttpEntity<>(params, headers); + String s = internalRestTemplate.postForObject("http://zuul-gateway/netty/sendMsgToClient",requestEntity , String.class); + JSONObject jsonObject1 = JSON.parseObject(s, JSONObject.class); + if(jsonObject1.getIntValue("code") != 200){ + logger.debug(jsonObject1.getString("msg")); + System.err.println(jsonObject1.getString("msg")); + } + } + + + + /** * 推送订单数据 * @param id * @param type diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TOrderServiceImpl.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TOrderServiceImpl.java index b2ef182..d26139d 100644 --- a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TOrderServiceImpl.java +++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TOrderServiceImpl.java @@ -830,6 +830,8 @@ if(order1.getState() == 101 || order1.getState() == 201){ order1.setHallOrder(1); TOrderServiceImpl.this.updateById(order1); + + ExtraPushOrder(order1,systemConfig); } } }, num4 * 1000); @@ -838,4 +840,134 @@ this.updateById(order); } } + + public void ExtraPushOrder(TOrder order, TSystemConfig systemConfig){ + JSONObject jsonObject = JSON.parseObject(systemConfig.getContent()); + Double num3 = jsonObject.getDouble("num3");//推单最大范围 + Integer num4 = jsonObject.getInteger("num4");//接单时间 + String startLat = order.getStartLat(); + String startLng = order.getStartLng(); + + //找到中心点 + GeoJsonPoint geoJsonPoint = new GeoJsonPoint(Double.valueOf(startLng), Double.valueOf(startLat)); + Double num = num3 / 1000;//范围公里 + //构造半径 + Distance distanceR = new Distance(num, Metrics.KILOMETERS); + //画圆 + Circle circle = new Circle(geoJsonPoint, distanceR); + // 构造query对象 + Query query = Query.query(Criteria.where("location").withinSphere(circle)); + List<Location> locations = mongoTemplate.find(query, Location.class); + List<Integer> driverIds = locations.stream().map(Location::getDriverId).collect(Collectors.toList()); + Integer driver = null; + TYouTuiDriver youTuiDriver1 = null; + if(driverIds.size() > 0){ + List<TYouTuiDriver> youTuiDrivers = youTuiDriverService.selectList(new EntityWrapper<TYouTuiDriver>().in("driverId", driverIds) + .eq("state", 2).last(" and (surplusQuantity > 0 or now() < endTime) and now() < failureTime")); + Double d = null; + for (TYouTuiDriver youTuiDriver : youTuiDrivers) { + String value = redisUtil.getValue("DRIVER" + youTuiDriver.getDriverId()); + if(ToolUtil.isEmpty(value)){ + continue; + } + TDriver driver1 = tDriverMapper.selectById(youTuiDriver.getDriverId()); + if(driver1.getServerStatus() == 2 ){ + continue; + } + Map<String, Double> distance = GeodesyUtil.getDistance(value, order.getStartLng() + "," + order.getStartLat()); + Double wgs84 = distance.get("WGS84"); + if(d == null || d.compareTo(wgs84) > 0){ + d = wgs84; + driver = youTuiDriver.getDriverId(); + youTuiDriver1 = youTuiDriver; + } + } + } + if(null != youTuiDriver1 && youTuiDriver1.getType() == 1){ + youTuiDriver1.setSurplusQuantity(youTuiDriver1.getSurplusQuantity() - 1); + youTuiDriverService.updateById(youTuiDriver1); + } + for (int i = 1; i < 4; i++) { + if(null == driver){ + + num = jsonObject.getDouble("num"+i) / 1000;//范围公里 + //构造半径 + distanceR = new Distance(num, Metrics.KILOMETERS); + //画圆 + circle = new Circle(geoJsonPoint, distanceR); + // 构造query对象 + query = Query.query(Criteria.where("location").withinSphere(circle)); + locations = mongoTemplate.find(query, Location.class); + + driverIds = locations.stream().map(Location::getDriverId).collect(Collectors.toList()); + + if(driverIds.size() > 0){ + List<TDriver> drivers = tDriverMapper.selectList(new EntityWrapper<TDriver>().eq("approvalStatus", 2) + .eq("serverStatus", 1).eq("openOrderQRCode", 0).eq("status", 1).in("id", driverIds)); + if(drivers.size() == 0){ + continue; + } + + Integer integral = null;//积分 + Double score = null;//评分 + Double d = null; + for (TDriver driver1 : drivers) { + String value = redisUtil.getValue("DRIVER" + driver1.getId()); + if(ToolUtil.isEmpty(value)){ + return; + } + if(integral == null || integral.compareTo(driver1.getIntegral()) < 0){//积分大 + integral = driver1.getIntegral(); + score = driver1.getScore(); + driver = driver1.getId(); + Map<String, Double> distance = GeodesyUtil.getDistance(value, order.getStartLng() + "," + order.getStartLat()); + Double wgs84 = distance.get("WGS84"); + d = wgs84; + continue; + } + if(integral.compareTo(driver1.getIntegral()) == 0 && score.compareTo(driver1.getScore()) < 0){//积分相同对比评分 + integral = driver1.getIntegral(); + score = driver1.getScore(); + driver = driver1.getId(); + Map<String, Double> distance = GeodesyUtil.getDistance(value, order.getStartLng() + "," + order.getStartLat()); + Double wgs84 = distance.get("WGS84"); + d = wgs84; + continue; + } + if(integral.compareTo(driver1.getIntegral()) == 0 && score.compareTo(driver1.getScore()) == 0){//积分相同/评分相同对比距离 + Map<String, Double> distance = GeodesyUtil.getDistance(value, order.getStartLng() + "," + order.getStartLat()); + Double wgs84 = distance.get("WGS84"); + if(d.compareTo(wgs84) > 0){ + d = wgs84; + integral = driver1.getIntegral(); + score = driver1.getScore(); + driver = driver1.getId(); + continue; + } + } + } + + } + } + } + + if(null != driver){ + pushUtil.pushGrabOrderExtras(driver, 2); + //创建定时任务处理订单到大厅 + new Timer().schedule(new TimerTask() { + @Override + public void run() { + TOrder order1 = TOrderServiceImpl.this.selectById(order.getId()); + if(order1.getState() == 101 || order1.getState() == 201){ + order1.setHallOrder(1); + TOrderServiceImpl.this.updateById(order1); + } + } + }, num4 * 1000); + }else{ + order.setHallOrder(1); + this.updateById(order); + } + } + } diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/PushUtil.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/PushUtil.java index 69f1e92..9291d96 100644 --- a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/PushUtil.java +++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/PushUtil.java @@ -69,4 +69,39 @@ } } + + /** + * 系统推单推送 附加(防止 用户推单后,范围内的司机20s 内接不到单的补充方法) + * @param id 接受对象id + * @param type 接受对象类型(1=用户,2=司机) + */ + public void pushGrabOrderExtras(Integer id, Integer type){ + JSONObject msg = new JSONObject(); + msg.put("code", 200); + msg.put("msg", "SUCCESS"); + msg.put("method", "PUSH_ORDER"); + + Map<String, Object> map = new HashMap<>(); + msg.put("data", map); + + //调用推送 + HttpHeaders headers = new HttpHeaders(); + // 以表单的方式提交 + headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); + //将请求头部和参数合成一个请求 + MultiValueMap<String, Object> params = new LinkedMultiValueMap<>(); + params.add("msg", msg.toJSONString()); + params.add("id", id.toString()); + params.add("type", type.toString()); + HttpEntity<MultiValueMap<String, Object>> requestEntity = new HttpEntity<>(params, headers); + String s = restTemplate.postForObject(PushURL.zull_user_url + "/netty/sendMsgToClient",requestEntity , String.class); + JSONObject jsonObject1 = JSON.parseObject(s, JSONObject.class); + if(jsonObject1.getIntValue("code") != 200){ + logger.debug(jsonObject1.getString("msg")); + System.err.println(jsonObject1.getString("msg")); + } + } + + + } diff --git a/management/guns-admin/src/main/webapp/WEB-INF/view/system/tOrder/tOrder_add.html b/management/guns-admin/src/main/webapp/WEB-INF/view/system/tOrder/tOrder_add.html index 7dc2b2f..20ddd02 100644 --- a/management/guns-admin/src/main/webapp/WEB-INF/view/system/tOrder/tOrder_add.html +++ b/management/guns-admin/src/main/webapp/WEB-INF/view/system/tOrder/tOrder_add.html @@ -70,7 +70,7 @@ } </script> <script src="${ctxPath}/static/modular/system/tOrder/tOrder_info.js"></script> -<script type="text/javascript" src="https://webapi.amap.com/maps?v=2.0&key=86fcccf007b64ae97b01c3c982c0ef0f&plugin=AMap.PlaceSearch,AMap.AutoComplete,AMap.Marker,AMap.Geocoder"></script> +<script type="text/javascript" src="https://webapi.amap.com/maps?v=2.0&key=86fcccf007b64ae97b01c3c982c0ef0f&plugin=AMap.PlaceSearch,AMap.AutoComplete,AMap.Marker,AMap.Geocoder,AMap.Geolocation"></script> <script type="text/javascript"> //地图加载 var map1 = new AMap.Map("container1", { @@ -81,7 +81,6 @@ function autoInput1(){ var keywords = document.getElementById("tipinput1").value; - AMap.plugin('AMap.AutoComplete', function(){ // 实例化Autocomplete var autoOptions = { city: '全国' @@ -95,7 +94,6 @@ $(".amap-sug-result-one").append('<div class="auto-item amapaddr" id="amap-sug4" onclick="javascript:geoCode1(\''+result.tips[key].name+'\', \''+result.tips[key].district+ result.tips[key].address+'\');">' + result.tips[key].name+ " <span style='color: darkgray;margin-left: 13px;'>" + result.tips[key].district+ result.tips[key].address+ " </span></div>"); } }) - }) } autoInput1(); @@ -113,7 +111,7 @@ var address = t; //document.getElementById('address').value; geocoder1.getLocation(address, function(status, result) { if (status === 'complete'&&result.geocodes.length) { - console.log(result); + // console.log(result); var lnglat = result.geocodes[0].location; TOrderInfoDlg.startAddress = { name: t, @@ -135,7 +133,26 @@ map1.on('click', function(e) { - console.log(e,'e') + + var lnglatXY = [e.lnglat.getLng(), e.lnglat.getLat()]; + geocoder1.getAddress(lnglatXY, function (status, result) { + if (status === 'complete' && result.info === 'OK') { + // console.log(result,'result') + + var address = result.regeocode.formattedAddress; + // console.log(address,'address'); + TOrderInfoDlg.startAddress = { + name: address, + address: result.regeocode.addressComponent.province+result.regeocode.addressComponent.city+result.regeocode.addressComponent.district, + lat: e.lnglat.getLat(), + lon: e.lnglat.getLng(), + }; + document.getElementById('tipinput1').value = address; + } else { + log.error('根据坐标查询地址失败'); + } + }); + // console.log(e,'e') ln = e.lnglat.getLng(); lt = e.lnglat.getLat(); if (marker1){ @@ -166,7 +183,7 @@ autoComplete.search(keywords, function(status, result) { $(".amap-sug-result-two").html(""); $(".amap-sug-result-two").show(); - console.log(result.info); + // console.log(result.info); for(const key in result.tips){ $(".amap-sug-result-two").append('<div class="auto-item amapaddr" id="amap-sug4" onclick="javascript:geoCode2(\''+result.tips[key].name+'\', \''+result.tips[key].district+ result.tips[key].address+'\');">' + result.tips[key].name+ " <span style='color: darkgray;margin-left: 13px;'>" + result.tips[key].district+ result.tips[key].address+ " </span></div>"); } @@ -189,8 +206,6 @@ var address = t; //document.getElementById('address').value; geocoder2.getLocation(address, function(status, result) { if (status === 'complete'&&result.geocodes.length) { - console.log(t); - console.log(result); var lnglat = result.geocodes[0].location; TOrderInfoDlg.endAddress = { name: t, @@ -211,7 +226,24 @@ map2.on('click', function(e) { - console.log(e,'e'); + + var lnglatXY = [e.lnglat.getLng(), e.lnglat.getLat()]; + geocoder2.getAddress(lnglatXY, function (status, result) { + if (status === 'complete' && result.info === 'OK') { + + var address = result.regeocode.formattedAddress; + TOrderInfoDlg.endAddress = { + name: address, + address: result.regeocode.addressComponent.province+result.regeocode.addressComponent.city+result.regeocode.addressComponent.district, + lat: e.lnglat.getLat(), + lon: e.lnglat.getLng(), + }; + document.getElementById('tipinput2').value = address; + } else { + log.error('根据坐标查询地址失败'); + } + }); + ln = e.lnglat.getLng(); lt = e.lnglat.getLat(); diff --git a/user/guns-admin/src/main/java/com/agentdriving/user/modular/system/service/impl/OrderServiceImpl.java b/user/guns-admin/src/main/java/com/agentdriving/user/modular/system/service/impl/OrderServiceImpl.java index f639970..08723d3 100644 --- a/user/guns-admin/src/main/java/com/agentdriving/user/modular/system/service/impl/OrderServiceImpl.java +++ b/user/guns-admin/src/main/java/com/agentdriving/user/modular/system/service/impl/OrderServiceImpl.java @@ -644,6 +644,136 @@ if(order1.getState() == 101 || order1.getState() == 201){ order1.setHallOrder(1); OrderServiceImpl.this.updateById(order1); + ExtraPushOrder(order1,systemConfig); + } + } + }, num4 * 1000); + }else{ + order.setHallOrder(1); + this.updateById(order); + } + } + + public void ExtraPushOrder(Order order, SystemConfig systemConfig){ + JSONObject jsonObject = JSON.parseObject(systemConfig.getContent()); + Double num3 = jsonObject.getDouble("num3");//推单最大范围 + Integer num4 = jsonObject.getInteger("num4");//接单时间 + String startLat = order.getStartLat(); + String startLng = order.getStartLng(); + + //找到中心点 + GeoJsonPoint geoJsonPoint = new GeoJsonPoint(Double.valueOf(startLng), Double.valueOf(startLat)); + Double num = num3 / 1000;//范围公里 + //构造半径 + Distance distanceR = new Distance(num, Metrics.KILOMETERS); + //画圆 + Circle circle = new Circle(geoJsonPoint, distanceR); + // 构造query对象 + Query query = Query.query(Criteria.where("location").withinSphere(circle)); + List<Location> locations = mongoTemplate.find(query, Location.class); + List<Integer> driverIds = locations.stream().map(Location::getDriverId).collect(Collectors.toList()); + Integer driver = null; + YouTuiDriver youTuiDriver1 = null; + if(driverIds.size() > 0){ + List<YouTuiDriver> youTuiDrivers = youTuiDriverService.selectList(new EntityWrapper<YouTuiDriver>().in("driverId", driverIds) + .eq("state", 2).last(" and (surplusQuantity > 0 or now() < endTime) and now() < failureTime")); + Double d = null; + for (YouTuiDriver youTuiDriver : youTuiDrivers) { + String value = redisUtil.getValue("DRIVER" + youTuiDriver.getDriverId()); + if(ToolUtil.isEmpty(value)){ + continue; + } + Driver driver1 = driverService.selectById(youTuiDriver.getDriverId()); + if(driver1.getServerStatus() == 2 || driver1.getOpenOrderQRCode() == 1){ + continue; + } + Map<String, Double> distance = GeodesyUtil.getDistance(value, order.getStartLng() + "," + order.getStartLat()); + Double wgs84 = distance.get("WGS84"); + if(d == null || d.compareTo(wgs84) > 0){ + d = wgs84; + driver = youTuiDriver.getDriverId(); + youTuiDriver1 = youTuiDriver; + } + } + } + if(null != youTuiDriver1 && youTuiDriver1.getType() == 1){ + youTuiDriver1.setSurplusQuantity(youTuiDriver1.getSurplusQuantity() - 1); + youTuiDriverService.updateById(youTuiDriver1); + } + for (int i = 1; i < 4; i++) { + if(null == driver){ + + num = jsonObject.getDouble("num"+i) / 1000;//范围公里 + //构造半径 + distanceR = new Distance(num, Metrics.KILOMETERS); + //画圆 + circle = new Circle(geoJsonPoint, distanceR); + // 构造query对象 + query = Query.query(Criteria.where("location").withinSphere(circle)); + locations = mongoTemplate.find(query, Location.class); + + driverIds = locations.stream().map(Location::getDriverId).collect(Collectors.toList()); + + if(driverIds.size() > 0){ + List<Driver> drivers = driverService.selectList(new EntityWrapper<Driver>().eq("approvalStatus", 2) + .eq("serverStatus", 1).eq("openOrderQRCode", 0).eq("status", 1).in("id", driverIds)); + if(drivers.size() == 0){ + continue; + } + + Integer integral = null;//积分 + Double score = null;//评分 + Double d = null; + for (Driver driver1 : drivers) { + String value = redisUtil.getValue("DRIVER" + driver1.getId()); + if(ToolUtil.isEmpty(value)){ + return; + } + if(integral == null || integral.compareTo(driver1.getIntegral()) < 0){//积分大 + integral = driver1.getIntegral(); + score = driver1.getScore(); + driver = driver1.getId(); + Map<String, Double> distance = GeodesyUtil.getDistance(value, order.getStartLng() + "," + order.getStartLat()); + Double wgs84 = distance.get("WGS84"); + d = wgs84; + continue; + } + if(integral.compareTo(driver1.getIntegral()) == 0 && score.compareTo(driver1.getScore()) < 0){//积分相同对比评分 + integral = driver1.getIntegral(); + score = driver1.getScore(); + driver = driver1.getId(); + Map<String, Double> distance = GeodesyUtil.getDistance(value, order.getStartLng() + "," + order.getStartLat()); + Double wgs84 = distance.get("WGS84"); + d = wgs84; + continue; + } + if(integral.compareTo(driver1.getIntegral()) == 0 && score.compareTo(driver1.getScore()) == 0){//积分相同/评分相同对比距离 + Map<String, Double> distance = GeodesyUtil.getDistance(value, order.getStartLng() + "," + order.getStartLat()); + Double wgs84 = distance.get("WGS84"); + if(d.compareTo(wgs84) > 0){ + d = wgs84; + integral = driver1.getIntegral(); + score = driver1.getScore(); + driver = driver1.getId(); + continue; + } + } + } + + } + } + } + + if(null != driver){ + pushUtil.pushGrabOrderExtras(driver, 2); + //创建定时任务处理订单到大厅 + new Timer().schedule(new TimerTask() { + @Override + public void run() { + Order order1 = OrderServiceImpl.this.selectById(order.getId()); + if(order1.getState() == 101 || order1.getState() == 201){ + order1.setHallOrder(1); + OrderServiceImpl.this.updateById(order1); } } }, num4 * 1000); diff --git a/user/guns-admin/src/main/java/com/agentdriving/user/modular/system/util/PushUtil.java b/user/guns-admin/src/main/java/com/agentdriving/user/modular/system/util/PushUtil.java index 72aaae7..eaa0dd4 100644 --- a/user/guns-admin/src/main/java/com/agentdriving/user/modular/system/util/PushUtil.java +++ b/user/guns-admin/src/main/java/com/agentdriving/user/modular/system/util/PushUtil.java @@ -203,6 +203,39 @@ } + /** + * 系统推单推送 附加(防止 用户推单后,范围内的司机20s 内接不到单的补充方法) + * @param id 接受对象id + * @param type 接受对象类型(1=用户,2=司机) + */ + public void pushGrabOrderExtras(Integer id, Integer type){ + JSONObject msg = new JSONObject(); + msg.put("code", 200); + msg.put("msg", "SUCCESS"); + msg.put("method", "PUSH_ORDER"); + + Map<String, Object> map = new HashMap<>(); + msg.put("data", map); + + //调用推送 + HttpHeaders headers = new HttpHeaders(); + // 以表单的方式提交 + headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); + //将请求头部和参数合成一个请求 + MultiValueMap<String, Object> params = new LinkedMultiValueMap<>(); + params.add("msg", msg.toJSONString()); + params.add("id", id.toString()); + params.add("type", type.toString()); + HttpEntity<MultiValueMap<String, Object>> requestEntity = new HttpEntity<>(params, headers); + String s = internalRestTemplate.postForObject("http://zuul-gateway/netty/sendMsgToClient",requestEntity , String.class); + JSONObject jsonObject1 = JSON.parseObject(s, JSONObject.class); + if(jsonObject1.getIntValue("code") != 200){ + logger.debug(jsonObject1.getString("msg")); + System.err.println(jsonObject1.getString("msg")); + } + } + + /** -- Gitblit v1.7.1