From e1735c6321318ed0edad6d324989f8a379814888 Mon Sep 17 00:00:00 2001 From: lishouyi <linlangsur163@163.com> Date: 星期五, 02 六月 2023 14:16:39 +0800 Subject: [PATCH] 用户端、司机端、后台:订单推送的附加推送;后台订单添加的地图点击获取到地址信息的优化 --- user/guns-admin/src/main/java/com/agentdriving/user/modular/system/service/impl/OrderServiceImpl.java | 238 +++++++++++++++++++++++++++++++++++++++++++++-------------- 1 files changed, 180 insertions(+), 58 deletions(-) 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 de79ec0..fc16a71 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 @@ -222,7 +222,6 @@ if(date.getTime() >= s.getTimeInMillis() && date.getTime() < e.getTimeInMillis()){ b = false; - Double dd = 0d; for (int j = 0; j < num3.size(); j++) { JSONObject jsonObject2 = num3.getJSONObject(j); Double num1_1 = jsonObject2.getDouble("num1"); @@ -231,58 +230,13 @@ if(num1_1.compareTo(distance) <= 0 && num2_1.compareTo(distance) > 0){ order.setStartDistance(distance);//起步里程 order.setStartPrice(num3_1);//起步价 + break; } if(j == num3.size() - 1 && order.getStartPrice() == 0){ order.setStartDistance(num2_1);//起步里程 order.setStartPrice(num3_1);//起步价 - dd = distance - num2_1; } } - if(dd != 0){ - //计算长途费 - if(distance.compareTo(num4) > 0){ - order.setLongDistance(num4 + "-" + num5);//长途里程 - order.setLongDistancePrice(num6);//长途费 - } - //计算长途里程超出的部分 - if(distance.compareTo(num5) > 0){ - BigDecimal subtract1 = new BigDecimal(distance).subtract(new BigDecimal(num5)); - BigDecimal divide1 = subtract1.divide(new BigDecimal(num7), new MathContext(2, RoundingMode.HALF_EVEN)); - BigDecimal multiply1 = divide1.multiply(new BigDecimal(num8)); - order.setOverLongDistance(subtract1.doubleValue());//超出长途里程 - order.setOverLongDistancePrice(multiply1.doubleValue());//超出长途里程费 - } - } - break; - } - } - - if(b){//默认配置 - JSONObject jsonObject1 = chargeStandard.getJSONObject(0); - JSONArray num3 = jsonObject1.getJSONArray("num3");//起步里程 - Double num4 = jsonObject1.getDouble("num4");//长途里程 - Double num5 = jsonObject1.getDouble("num5");//长途里程 - Double num6 = jsonObject1.getDouble("num6");//长途费 - Double num7 = jsonObject1.getDouble("num7");//超出长途里程每num10公里 - Double num8 = jsonObject1.getDouble("num8");//超过num8每num10公里收取num11 - - Double dd = 0d; - for (int j = 0; j < num3.size(); j++) { - JSONObject jsonObject2 = num3.getJSONObject(j); - Double num1_1 = jsonObject2.getDouble("num1"); - Double num2_1 = jsonObject2.getDouble("num2"); - Double num3_1 = jsonObject2.getDouble("num3"); - if(num1_1.compareTo(distance) <= 0 && num2_1.compareTo(distance) > 0){ - order.setStartDistance(distance);//起步里程 - order.setStartPrice(num3_1);//起步价 - } - if(j == num3.size() - 1 && order.getStartPrice() == 0){ - order.setStartDistance(num2_1);//起步里程 - order.setStartPrice(num3_1);//起步价 - dd = distance - num2_1; - } - } - if(dd != 0){ //计算长途费 if(distance.compareTo(num4) > 0){ order.setLongDistance(num4 + "-" + num5);//长途里程 @@ -296,6 +250,45 @@ order.setOverLongDistance(subtract1.doubleValue());//超出长途里程 order.setOverLongDistancePrice(multiply1.doubleValue());//超出长途里程费 } + } + } + + if(b){//默认配置 + JSONObject jsonObject1 = chargeStandard.getJSONObject(0); + JSONArray num3 = jsonObject1.getJSONArray("num3");//起步里程 + Double num4 = jsonObject1.getDouble("num4");//长途里程 + Double num5 = jsonObject1.getDouble("num5");//长途里程 + Double num6 = jsonObject1.getDouble("num6");//长途费 + Double num7 = jsonObject1.getDouble("num7");//超出长途里程每num10公里 + Double num8 = jsonObject1.getDouble("num8");//超过num8每num10公里收取num11 + + for (int j = 0; j < num3.size(); j++) { + JSONObject jsonObject2 = num3.getJSONObject(j); + Double num1_1 = jsonObject2.getDouble("num1"); + Double num2_1 = jsonObject2.getDouble("num2"); + Double num3_1 = jsonObject2.getDouble("num3"); + if(num1_1.compareTo(distance) <= 0 && num2_1.compareTo(distance) > 0){ + order.setStartDistance(distance);//起步里程 + order.setStartPrice(num3_1);//起步价 + break; + } + if(j == num3.size() - 1 && order.getStartPrice() == 0){ + order.setStartDistance(num2_1);//起步里程 + order.setStartPrice(num3_1);//起步价 + } + } + //计算长途费 + if(distance.compareTo(num4) > 0){ + order.setLongDistance(num4 + "-" + num5);//长途里程 + order.setLongDistancePrice(num6);//长途费 + } + //计算长途里程超出的部分 + if(distance.compareTo(num5) > 0){ + BigDecimal subtract1 = new BigDecimal(distance).subtract(new BigDecimal(num5)); + BigDecimal divide1 = subtract1.divide(new BigDecimal(num7), new MathContext(2, RoundingMode.HALF_EVEN)); + BigDecimal multiply1 = divide1.multiply(new BigDecimal(num8)); + order.setOverLongDistance(subtract1.doubleValue());//超出长途里程 + order.setOverLongDistancePrice(multiply1.doubleValue());//超出长途里程费 } } @@ -465,15 +458,14 @@ return ResultUtil.error("司机还未上班"); } Driver driver = driverService.selectById(travelOrder.getDriverId()); - if(driver.getServerStatus() == 2){ - return ResultUtil.error("司机正在服务中"); - } - order.setAgentId(driver.getAgentId()); - order.setBranchOfficeId(driver.getBranchOfficeId()); - order.setOrderTakingTime(new Date()); + if(driver.getServerStatus() == 1){ + order.setAgentId(driver.getAgentId()); + order.setBranchOfficeId(driver.getBranchOfficeId()); + order.setOrderTakingTime(new Date()); - driver.setServerStatus(2); - driverService.updateById(driver); + driver.setServerStatus(2); + driverService.updateById(driver); + } appUser.setCancelCount(0); appUser.setIsException(1); @@ -635,6 +627,136 @@ if(null != driver){ pushUtil.pushGrabOrder(driver, 2, order.getId(), num4); + //创建定时任务处理订单到大厅 + 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); + 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 @@ -1042,9 +1164,9 @@ } if(appUser.getHavDiscount() == 1){//9折 - payMoney = payMoney * 0.9; order.setDiscount(9D); order.setDiscountAmount(payMoney * 0.1); + payMoney = payMoney * 0.9; } order.setPayType(2); @@ -1107,7 +1229,7 @@ order.setPayType(1); order.setPayMoney(payMoney); - payMoney = payMoney > appUser.getAccountBalance() ? payMoney - appUser.getAccountBalance() : 0D; + payMoney = payMoney.compareTo(appUser.getAccountBalance()) > 0 ? payMoney - appUser.getAccountBalance() : 0D; AccountChangeDetail accountChangeDetail = new AccountChangeDetail(); accountChangeDetail.setCode(System.currentTimeMillis() + UUIDUtil.getNumberRandom(3)); @@ -1119,7 +1241,7 @@ accountChangeDetail.setChangeType(2); accountChangeDetail.setOrderId(order.getId()); accountChangeDetail.setExplain("代驾服务费"); - appUser.setAccountBalance(appUser.getAccountBalance() > payMoney ? appUser.getAccountBalance() - payMoney : 0); + appUser.setAccountBalance(appUser.getAccountBalance().compareTo(payMoney) > 0 ? appUser.getAccountBalance() - payMoney : 0); accountChangeDetail.setNewData(appUser.getAccountBalance()); appUserService.updateById(appUser); accountChangeDetailService.insert(accountChangeDetail); -- Gitblit v1.7.1