From 36695821ea10197d7758babc7bc2b5dfb66dd88e Mon Sep 17 00:00:00 2001 From: puzhibing <393733352@qq.com> Date: 星期六, 24 六月 2023 09:30:26 +0800 Subject: [PATCH] 修改bug --- driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/service/impl/OrderServiceImpl.java | 210 +++++++++++++++++++++++++++------------------------- 1 files changed, 108 insertions(+), 102 deletions(-) diff --git a/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/service/impl/OrderServiceImpl.java b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/service/impl/OrderServiceImpl.java index ed9b1de..a87c1fc 100644 --- a/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/service/impl/OrderServiceImpl.java +++ b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/service/impl/OrderServiceImpl.java @@ -34,7 +34,6 @@ import org.springframework.stereotype.Service; import java.math.BigDecimal; -import java.math.MathContext; import java.math.RoundingMode; import java.util.*; import java.util.stream.Collectors; @@ -110,8 +109,6 @@ @Value("${callbackPath}") private String callbackPath;//支付回调网关地址 - - private Map<String, Timer> timerMap = new HashMap<>(); @@ -204,6 +201,8 @@ driverService.updateById(driver); //推送状态 if(null != order.getDriverId()){ + //推动订单数据 + redisUtil.addSetValue("orderService", order.getId().toString()); pushUtil.pushOrderStatus(uid, 2, order.getId(), order.getStatus()); }else{ //开始推单 @@ -229,8 +228,6 @@ * @return */ public Order getOrderPrice(Integer type, Double distance, Integer waitTime, Order order, String city){ - distance = new BigDecimal(distance).setScale(0, BigDecimal.ROUND_UP).doubleValue(); - waitTime = new BigDecimal(waitTime).setScale(0, BigDecimal.ROUND_UP).intValue(); order = getOrderInitialPrice(order); SystemConfig systemConfig = systemConfigService.selectOne(new EntityWrapper<SystemConfig>().eq("type", 5)); if(null == systemConfig){ @@ -290,12 +287,14 @@ order.setStartDistance(distance);//起步里程 order.setStartPrice(num4);//起步价 }else{ - BigDecimal subtract = new BigDecimal(distance).subtract(new BigDecimal(num3)).setScale(2, BigDecimal.ROUND_HALF_EVEN);//超出起步里程 - BigDecimal divide = subtract.divide(new BigDecimal(num5), 2, BigDecimal.ROUND_HALF_EVEN); - BigDecimal multiply = divide.multiply(new BigDecimal(num6)); + Double distance1 = distance;//原始里程 order.setStartDistance(num3);//起步里程 order.setStartPrice(num4);//起步价 - order.setOverDriveDistance(subtract.doubleValue());//超出起步里程 + order.setOverDriveDistance(new BigDecimal(distance1 - num3).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());//超出起步里程 + + distance = new BigDecimal(distance).setScale(0, RoundingMode.UP).doubleValue();//向上取整 + BigDecimal divide = new BigDecimal(distance - num3).divide(new BigDecimal(num5), 2, BigDecimal.ROUND_HALF_EVEN); + BigDecimal multiply = divide.multiply(new BigDecimal(num6)); order.setOverDrivePrice(multiply.doubleValue());//超出起步里程费 //计算长途费(超出长途起始公里,费用开始按照长途规则计算。) @@ -310,10 +309,10 @@ } //计算长途里程超出的部分 if(distance.compareTo(num8) > 0){ - BigDecimal subtract1 = new BigDecimal(distance).subtract(new BigDecimal(num8)).setScale(2, BigDecimal.ROUND_HALF_EVEN); - BigDecimal divide1 = subtract1.divide(new BigDecimal(num10), 2, BigDecimal.ROUND_HALF_EVEN); + order.setOverLongDistance(new BigDecimal(distance1 - num8).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());//超出长途里程 + + BigDecimal divide1 = new BigDecimal(distance - num8).divide(new BigDecimal(num10), 2, BigDecimal.ROUND_HALF_EVEN); BigDecimal multiply1 = divide1.multiply(new BigDecimal(num11)); - order.setOverLongDistance(subtract1.doubleValue());//超出长途里程 order.setOverLongDistancePrice(multiply1.doubleValue());//超出长途里程费 } } @@ -334,10 +333,10 @@ //等待费用 if(waitTime.compareTo(num1 * 60) >= 0){ - order.setWaitTime(num1);//等待时长 + order.setWaitTime(num1 * 60);//等待时长 order.setWaitTimePrice(num2);//等待费用 - Integer w = waitTime - (num3 * 60); + Integer w = waitTime - (num1 * 60); BigDecimal multiply = new BigDecimal(w).divide(new BigDecimal(60), 0, RoundingMode.UP).multiply(new BigDecimal(num4)); order.setOutWaitTime(w);//等待时长超出分钟 order.setOutWaitTimePrice(multiply.doubleValue());//等待时长超出费用 @@ -426,7 +425,6 @@ /** * 订单推送逻辑 - * @param order */ public void pushOrder(Long orderId){ try { @@ -594,11 +592,16 @@ new Timer().schedule(new TimerTask() { @Override public void run() { - driver1.setServerStatus(1); - driverService.updateById(driver1); - Order order1 = OrderServiceImpl.this.selectById(order.getId()); - if(order1.getState() == 101 || order1.getState() == 201){ + if(order1.getState() != 101 && order1.getState() != 201 && order1.getDriverId().compareTo(driver1.getId()) != 0){ + driver1.setServerStatus(1); + driverService.updateById(driver1); + } + + if(order1.getState() == 201 || (order1.getState() == 101 && null == order1.getDriverId())){ + driver1.setServerStatus(1); + driverService.updateById(driver1); + order1.setHallOrder(1); OrderServiceImpl.this.updateById(order1); ExtraPushOrder(order); @@ -805,11 +808,7 @@ driverService.updateById(driver); if(state == 201){//转单的订单 //停止定时任务 - Timer timer = timerMap.get(order.getId().toString()); - if(null != timer){ - timer.cancel(); - timerMap.remove(order.getId().toString()); - } + redisUtil.delSetValue("orderService", order.getId().toString()); //原司机下班 TODO 2023-06-21 客户说取消此功能 Driver oldDriver = driverService.selectById(oldDriverId); oldDriver.setServerStatus(1); @@ -842,7 +841,7 @@ } //推动订单数据 - pushOrderInfo(order.getId(), uid);//开始推送订单数据 + redisUtil.addSetValue("orderService", order.getId().toString()); //发送系统消息 systemMessageService.addSystemMessage(uid, 2, "接单成功", "您已成功接到用户订单,请尽快联系客户!"); pushUtil.pushOrderStatus(order.getDriverId(), 2, order.getId(), order.getState()); @@ -859,6 +858,9 @@ } + + + /** * 获取订单详情 * @param orderId @@ -867,7 +869,18 @@ */ @Override public OrderInfoWarpper queryOrderInfo(Integer uid, Long orderId) throws Exception { + Order order = this.selectById(orderId); OrderInfoWarpper orderInfoWarpper = this.baseMapper.queryOrderInfo(orderId); + Integer wait = Integer.valueOf(orderInfoWarpper.getWaitTime()); + if(null != order.getStartWaitTime()){ + wait += Double.valueOf((System.currentTimeMillis() - order.getStartWaitTime().getTime()) / 1000).intValue(); + } + Integer s = wait % 60; + int m = Double.valueOf(wait / 60).intValue(); + orderInfoWarpper.setWaitTime((m < 10 ? ("0" + m) : m) + ":" + (s < 10 ? ("0" + s) : s)); + Double actualMileage = orderInfoWarpper.getActualMileage(); + orderInfoWarpper.setActualMileage(new BigDecimal(actualMileage / 1000).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); + if(orderInfoWarpper.getTravelTime() == null){ orderInfoWarpper.setTravelTime(0); } @@ -946,13 +959,14 @@ .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); + order = getOrderPrice(2, Double.valueOf(order.getActualMileage()) / 1000, order.getWaitTime(), order, city); //修改司机状态和积分 Driver driver = driverService.selectById(order.getDriverId()); driver.setServerStatus(1); driverService.updateById(driver); saveIntegral(order); + redisUtil.delSetValue("orderService", order.getId().toString()); break; case 401: order.setStartWaitTime(new Date()); @@ -1031,58 +1045,45 @@ /** * 定时任务推送订单数据 * @param orderId - * @param uid */ - public void pushOrderInfo(Long orderId, Integer uid){ - Timer timer = new Timer(); - timer.schedule(new TimerTask() { - @Override - public void run() { - String value = redisUtil.getValue("DRIVER" + uid); - Order order = OrderServiceImpl.this.selectById(orderId); - if(order.getState() == 106 || order.getState() == 301){ - Timer timer = timerMap.get(order.getId().toString()); - if(null != timer){ - timer.cancel(); - timerMap.remove(order.getId().toString()); - } - } + @Override + public void pushOrderInfo(Long orderId){ + Order order = this.selectById(orderId); + Integer driverId = order.getDriverId(); + String value = redisUtil.getValue("DRIVER" + driverId); + if(order.getState() == 106 || order.getState() == 301){ + redisUtil.delSetValue("orderService", orderId.toString()); + return; + } - PushOrderInfoWarpper pushOrderInfoWarpper = new PushOrderInfoWarpper(); - pushOrderInfoWarpper.setId(orderId); - if(ToolUtil.isNotEmpty(value)){ - String[] split = value.split(","); - pushOrderInfoWarpper.setDriverLat(split[1]); - pushOrderInfoWarpper.setDriverLng(split[0]); - } - Integer w = 0; - if(null != order.getStartWaitTime()){ - w = Double.valueOf((System.currentTimeMillis() - order.getStartWaitTime().getTime()) / 1000).intValue(); - } - Integer wait = order.getWaitTime() + w; - Integer s = wait % 60; - pushOrderInfoWarpper.setWaitTime(Double.valueOf(wait / 60).intValue() + "." + s); - pushOrderInfoWarpper.setState(order.getState()); - pushOrderInfoWarpper.setActualMileage(Double.valueOf(order.getActualMileage() / 1000)); - pushOrderInfoWarpper.setTravelTime("0"); - if(null != order.getStartTime()){ - int travelTime = Double.valueOf((System.currentTimeMillis() - order.getStartTime().getTime()) / 1000).intValue(); - Integer ss = travelTime % 60; - pushOrderInfoWarpper.setTravelTime(Double.valueOf(travelTime / 60).intValue() + "." + ss); - } - if(null != order.getUserId()){ - pushUtil.pushOrderInfo(order.getUserId(), 1, pushOrderInfoWarpper); - } - if(order.getState() == 301){//司机取消不推送给司机 - CancelOrder cancelOrder = cancelOrderService.selectOne(new EntityWrapper<CancelOrder>().eq("orderId", order.getId()).eq("status", 1)); - if(null != cancelOrder && cancelOrder.getUserType() == 2){ - return; - } - } - pushUtil.pushOrderInfo(uid, 2, pushOrderInfoWarpper); + PushOrderInfoWarpper pushOrderInfoWarpper = new PushOrderInfoWarpper(); + pushOrderInfoWarpper.setId(orderId); + if(ToolUtil.isNotEmpty(value)){ + String[] split = value.split(","); + pushOrderInfoWarpper.setDriverLat(split[1]); + pushOrderInfoWarpper.setDriverLng(split[0]); + } + Integer w = 0; + if(null != order.getStartWaitTime()){ + w = Double.valueOf((System.currentTimeMillis() - order.getStartWaitTime().getTime()) / 1000).intValue(); + } + Integer wait = order.getWaitTime() + w; + Integer s = wait % 60; + Integer m = wait / 60; + pushOrderInfoWarpper.setWaitTime((m < 10 ? ("0" + m) : m) + ":" + (s < 10 ? ("0" + s) : s)); + pushOrderInfoWarpper.setState(order.getState()); + pushOrderInfoWarpper.setActualMileage(new BigDecimal(order.getActualMileage()).divide(new BigDecimal(1000), 2, RoundingMode.HALF_EVEN).doubleValue()); + pushOrderInfoWarpper.setTravelTime("0"); + if(null != order.getUserId()){ + pushUtil.pushOrderInfo(order.getUserId(), 1, pushOrderInfoWarpper); + } + if(order.getState() == 301){//司机取消不推送给司机 + CancelOrder cancelOrder = cancelOrderService.selectOne(new EntityWrapper<CancelOrder>().eq("orderId", order.getId()).eq("status", 1)); + if(null != cancelOrder && cancelOrder.getUserType() == 2){ + return; } - },0, 5000); - timerMap.put(orderId.toString(), timer); + } + pushUtil.pushOrderInfo(driverId, 2, pushOrderInfoWarpper); } @@ -1207,6 +1208,7 @@ order.setState(301); this.updateById(order); + redisUtil.delSetValue("orderService", orderId.toString()); CancelOrder cancelOrder = new CancelOrder(); cancelOrder.setOrderId(orderId); @@ -1222,7 +1224,9 @@ driverService.updateById(driver); } - pushUtil.pushOrderStatus(order.getUserId(), 1, order.getId(), order.getStatus()); + if(null != order.getUserId()){ + pushUtil.pushOrderStatus(order.getUserId(), 1, order.getId(), order.getStatus()); + } return ResultUtil.success(); } @@ -1256,7 +1260,8 @@ } Integer waitTime = order.getWaitTime() + order.getOutWaitTime(); Integer s = waitTime % 60; - orderPriceWarpper.setWaitTime(Double.valueOf(waitTime / 60).intValue() + "." + s); + Integer m = waitTime / 60; + orderPriceWarpper.setWaitTime((m < 10 ? "0" + m : m) + ":" + (s < 10 ? "0" + s : s)); orderPriceWarpper.setWaitTimePrice(order.getWaitTimePrice() + order.getOutWaitTimePrice()); orderPriceWarpper.setDiscountAmount(order.getDiscountAmount()); orderPriceWarpper.setDiscountedPrice(order.getDiscountedPrice()); @@ -1457,31 +1462,32 @@ Driver driver = driverService.selectById(order.getDriverId()); AppUser appUser = appUserService.selectById(order.getUserId()); - //司机推荐首单收入 - List<Integer> state = Arrays.asList(107, 108, 109); - int count = this.selectCount(new EntityWrapper<Order>().eq("userId", order.getUserId()).eq("status", 1).in("state", state)); - if(null != appUser.getInviterType() && appUser.getInviterType() == 2 && count == 1){ - Driver driver1 = driverService.selectById(appUser.getInviterId()); - //首单积分奖励 - SystemConfig systemConfig1 = systemConfigService.selectOne(new EntityWrapper<SystemConfig>().eq("type", 4)); - JSONObject jsonObject2 = JSON.parseObject(systemConfig1.getContent()); - Integer num4 = jsonObject2.getInteger("num4"); - AccountChangeDetail accountChangeDetail = new AccountChangeDetail(); - accountChangeDetail.setCode(System.currentTimeMillis() + UUIDUtil.getNumberRandom(3)); - accountChangeDetail.setUserType(2); - accountChangeDetail.setUserId(driver1.getId()); - accountChangeDetail.setType(2); - accountChangeDetail.setChangeType(5); - accountChangeDetail.setOrderId(order.getId()); - accountChangeDetail.setOldData(driver1.getIntegral().doubleValue()); - accountChangeDetail.setExplain("邀请用户首单积分奖励"); - accountChangeDetail.setCreateTime(new Date()); - driver1.setIntegral(driver1.getIntegral() + num4); - accountChangeDetail.setNewData(driver1.getIntegral().doubleValue()); - accountChangeDetailService.insert(accountChangeDetail); - driverService.updateById(driver1); + if(null != order.getUserId()){ + //司机推荐首单收入 + List<Integer> state = Arrays.asList(107, 108, 109); + int count = this.selectCount(new EntityWrapper<Order>().eq("userId", order.getUserId()).eq("status", 1).in("state", state)); + if(null != appUser.getInviterType() && appUser.getInviterType() == 2 && count == 1){ + Driver driver1 = driverService.selectById(appUser.getInviterId()); + //首单积分奖励 + SystemConfig systemConfig1 = systemConfigService.selectOne(new EntityWrapper<SystemConfig>().eq("type", 4)); + JSONObject jsonObject2 = JSON.parseObject(systemConfig1.getContent()); + Integer num4 = jsonObject2.getInteger("num4"); + AccountChangeDetail accountChangeDetail = new AccountChangeDetail(); + accountChangeDetail.setCode(System.currentTimeMillis() + UUIDUtil.getNumberRandom(3)); + accountChangeDetail.setUserType(2); + accountChangeDetail.setUserId(driver1.getId()); + accountChangeDetail.setType(2); + accountChangeDetail.setChangeType(5); + accountChangeDetail.setOrderId(order.getId()); + accountChangeDetail.setOldData(driver1.getIntegral().doubleValue()); + accountChangeDetail.setExplain("邀请用户首单积分奖励"); + accountChangeDetail.setCreateTime(new Date()); + driver1.setIntegral(driver1.getIntegral() + num4); + accountChangeDetail.setNewData(driver1.getIntegral().doubleValue()); + accountChangeDetailService.insert(accountChangeDetail); + driverService.updateById(driver1); + } } - SystemConfig systemConfig = systemConfigService.selectOne(new EntityWrapper<SystemConfig>().eq("type", 3)); @@ -1512,7 +1518,7 @@ if(null != systemConfig1){ JSONObject jsonObject1 = JSON.parseObject(systemConfig1.getContent()); //司机推荐用户收入 - if(null != appUser.getInviterType() && appUser.getInviterType() == 2){ + if(null != appUser && null != appUser.getInviterType() && appUser.getInviterType() == 2){ Double num1 = jsonObject1.getDouble("num1"); num1 = (num3 >= num1 ? num1 : num3); -- Gitblit v1.7.1