| | |
| | | BigDecimal multiply = new BigDecimal(w).divide(new BigDecimal(60), 0, RoundingMode.UP).multiply(new BigDecimal(num4)); |
| | | order.setOutWaitTime(w);//等待时长超出分钟 |
| | | order.setOutWaitTimePrice(multiply.doubleValue());//等待时长超出费用 |
| | | }else{ |
| | | order.setWaitTime(waitTime);//等待时长 |
| | | order.setWaitTimePrice(num2);//等待费用 |
| | | } |
| | | |
| | | //恶劣天气 |
| | |
| | | * 合适司:积分 > 评分 > 距离 |
| | | * 3.司机没有接单直接将订单置入大厅 |
| | | */ |
| | | boolean lock = redisUtil.lock(5); |
| | | boolean lock = redisUtil.lock(orderId.toString(), 5); |
| | | if(!lock){ |
| | | int num1 = 1; |
| | | while (num1 <= 10){ |
| | | Thread.sleep(3000);//等待3秒 |
| | | lock = redisUtil.lock(5); |
| | | lock = redisUtil.lock(orderId.toString(),5); |
| | | if(lock){ |
| | | break; |
| | | }else{ |
| | |
| | | order.setHallOrder(1); |
| | | this.updateById(order); |
| | | ExtraPushOrder(order); |
| | | redisUtil.unlock(); |
| | | redisUtil.unlock(orderId.toString()); |
| | | return; |
| | | } |
| | | SystemConfig systemConfig = systemConfigService.selectOne(new EntityWrapper<SystemConfig>().eq("type", 1)); |
| | | if(null == systemConfig){ |
| | | redisUtil.unlock(); |
| | | redisUtil.unlock(orderId.toString()); |
| | | return; |
| | | } |
| | | JSONObject jsonObject = JSON.parseObject(systemConfig.getContent()); |
| | |
| | | this.updateById(order); |
| | | ExtraPushOrder(order); |
| | | } |
| | | redisUtil.unlock(); |
| | | redisUtil.unlock(orderId.toString()); |
| | | }catch (Exception e){ |
| | | e.printStackTrace(); |
| | | redisUtil.unlock(); |
| | | redisUtil.unlock(orderId.toString()); |
| | | } |
| | | } |
| | | |
| | |
| | | if(count > 0){ |
| | | return ResultUtil.error("还有未完成的订单"); |
| | | } |
| | | boolean lock = redisUtil.lock(5); |
| | | boolean lock = redisUtil.lock(orderId.toString(), 5); |
| | | if(!lock){ |
| | | int num1 = 1; |
| | | while (num1 <= 10){ |
| | | Thread.sleep(3000);//等待3秒 |
| | | lock = redisUtil.lock(5); |
| | | lock = redisUtil.lock(orderId.toString(),5); |
| | | if(lock){ |
| | | break; |
| | | }else{ |
| | |
| | | } |
| | | } |
| | | if(!lock){ |
| | | redisUtil.unlock(orderId.toString()); |
| | | return ResultUtil.error("请重试"); |
| | | } |
| | | Order order = this.selectById(orderId); |
| | | Integer state = order.getState(); |
| | | Integer oldDriverId = order.getDriverId(); |
| | | if(state == 301){ |
| | | redisUtil.unlock(); |
| | | redisUtil.unlock(orderId.toString()); |
| | | return ResultUtil.error("订单已被取消"); |
| | | } |
| | | if(state != 101 && state != 201){ |
| | | redisUtil.unlock(); |
| | | redisUtil.unlock(orderId.toString()); |
| | | return ResultUtil.error("手速慢了哦"); |
| | | } |
| | | order.setDriverId(uid); |
| | |
| | | order.setState(102); |
| | | order.setOrderTakingTime(new Date()); |
| | | this.updateById(order); |
| | | redisUtil.unlock(); |
| | | redisUtil.unlock(orderId.toString()); |
| | | |
| | | if(null != order.getUserId()){ |
| | | AppUser appUser = appUserService.selectById(order.getUserId()); |
| | |
| | | orderTransfer.setSuccessTime(new Date()); |
| | | orderTransferService.insert(orderTransfer); |
| | | } |
| | | |
| | | pushUtil.pushTransferSuccessful(order.getUserId(), 1, order.getId()); |
| | | pushUtil.pushTransferSuccessful(oldDriverId, 2, order.getId()); |
| | | if(null != order.getUserId()){ |
| | | pushUtil.pushTransferSuccessful(order.getUserId(), 1, order.getId()); |
| | | } |
| | | } |
| | | |
| | | //推动订单数据 |
| | |
| | | pushUtil.pushOrderStatus(order.getUserId(), 1, order.getId(), order.getState()); |
| | | } |
| | | }catch (Exception e){ |
| | | redisUtil.unlock(); |
| | | redisUtil.unlock(orderId.toString()); |
| | | e.printStackTrace(); |
| | | throw e; |
| | | } |
| | |
| | | Map<String, String> distance1 = MapUtil.getDistance(orderInfoWarpper.getStartLng() + "," + orderInfoWarpper.getStartLat(), value, 0); |
| | | orderInfoWarpper.setPickUpTime(Integer.valueOf(distance1.get("duration")) / 60); |
| | | } |
| | | orderInfoWarpper.setDriverId(order.getDriverId()); |
| | | return orderInfoWarpper; |
| | | } |
| | | |
| | |
| | | .where("'" + geocode.getCity() + "' like CONCAT('%', city, '%') and '" + geocode.getDistrict() + "' like CONCAT('%', district, '%') ")); |
| | | city = null != weatherCity ? weatherCity.getId().toString() : ""; |
| | | } |
| | | order = getOrderPrice(2, Double.valueOf(order.getActualMileage()) / 1000, order.getWaitTime(), order, city); |
| | | try { |
| | | order = getOrderPrice(2, Double.valueOf(order.getActualMileage()) / 1000, order.getWaitTime(), order, city); |
| | | }catch (Exception e){ |
| | | e.printStackTrace(); |
| | | return ResultUtil.error("计算费用异常"); |
| | | } |
| | | Coupon coupon = userToCouponService.queryCoupon(order.getUserId(), order.getOrderMoney()); |
| | | if(null != coupon){ |
| | | order.setCouponId(coupon.getId()); |
| | |
| | | order.setPayMoney(order.getOrderMoney()); |
| | | } |
| | | |
| | | //修改司机状态和积分 |
| | | Driver driver = driverService.selectById(order.getDriverId()); |
| | | driver.setServerStatus(1); |
| | | driverService.updateById(driver); |
| | | saveIntegral(order); |
| | | redisUtil.delSetValue("orderService", order.getId().toString()); |
| | | break; |
| | |
| | | @Override |
| | | public ResultUtil driverCancelOrder(Integer uid, Long orderId, String cause) throws Exception { |
| | | Order order = this.selectById(orderId); |
| | | if(null == order){ |
| | | return ResultUtil.error("订单数据异常"); |
| | | } |
| | | if(uid.compareTo(order.getDriverId()) != 0){ |
| | | return ResultUtil.error("无法取消订单"); |
| | | } |
| | |
| | | orderPriceWarpper.setOverDriveDistance(order.getOverDriveDistance()); |
| | | orderPriceWarpper.setMileageFee(order.getOverDrivePrice()); |
| | | }else{ |
| | | String[] split = order.getLongDistance().split("-"); |
| | | orderPriceWarpper.setStartPrice(order.getLongDistancePrice()); |
| | | orderPriceWarpper.setStartDistance(Double.valueOf(split[1])); |
| | | orderPriceWarpper.setOverDriveDistance(order.getOverLongDistance()); |
| | | orderPriceWarpper.setMileageFee(order.getOverLongDistancePrice()); |
| | | if(order.getLongDistance().indexOf("-") >= 0){ |
| | | String[] split = order.getLongDistance().split("-"); |
| | | orderPriceWarpper.setStartPrice(order.getLongDistancePrice()); |
| | | orderPriceWarpper.setStartDistance(Double.valueOf(split[1])); |
| | | orderPriceWarpper.setOverDriveDistance(order.getOverLongDistance()); |
| | | orderPriceWarpper.setMileageFee(order.getOverLongDistancePrice()); |
| | | } |
| | | } |
| | | Integer waitTime = order.getWaitTime() + order.getOutWaitTime(); |
| | | Integer s = waitTime % 60; |
| | |
| | | } |
| | | } |
| | | this.updateById(order); |
| | | |
| | | if((payType == 1 && state == 107) || (payType == 2 && state == 108)){ |
| | | //修改司机状态和积分 |
| | | Driver driver = driverService.selectById(order.getDriverId()); |
| | | driver.setServerStatus(1); |
| | | driverService.updateById(driver); |
| | | } |
| | | |
| | | if(payType == 2 && state == 108){//计算抽成 |
| | | saveRevenue(order); |
| | |
| | | } |
| | | if(type == 3){//收入 |
| | | performanceRankingWarppers = revenueService.queryDriverRank(1, time, dayType); |
| | | |
| | | // 通过司机id 去差订单的优惠金额 |
| | | for (PerformanceRankingWarpper performanceRankingWarpper : performanceRankingWarppers) { |
| | | List<Order> orders = this.baseMapper.selectList(new EntityWrapper<Order>().eq("driverId", performanceRankingWarpper.getDriverId()).isNotNull("payMoney")); |
| | | double sum = orders.stream().mapToDouble(Order::getDiscountedPrice).sum(); |
| | | double sum1 = orders.stream().mapToDouble(Order::getDiscountAmount).sum(); |
| | | performanceRankingWarpper.setAmountOfData(new BigDecimal(performanceRankingWarpper.getAmountOfData()+sum+sum1).setScale(2,RoundingMode.HALF_UP).doubleValue()); |
| | | } |
| | | } |
| | | for (int i = 0; i < performanceRankingWarppers.size(); i++) { |
| | | PerformanceRankingWarpper performanceRankingWarpper = performanceRankingWarppers.get(i); |