From 6c0d8fb2db64b8982c4162c7527e72841547110b Mon Sep 17 00:00:00 2001 From: Pu Zhibing <393733352@qq.com> Date: 星期五, 27 十二月 2024 15:28:50 +0800 Subject: [PATCH] 修改推单规则 --- UserAHTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java | 172 +++++++++++++++++++++++++++++++++------------------------ 1 files changed, 100 insertions(+), 72 deletions(-) diff --git a/UserAHTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java b/UserAHTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java index 6610910..3cc8479 100644 --- a/UserAHTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java +++ b/UserAHTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java @@ -41,6 +41,7 @@ import java.math.MathContext; import java.math.RoundingMode; import java.util.*; +import java.util.stream.Collectors; @Service @@ -338,7 +339,8 @@ //推单操作 if(orderPrivateCar.getState() == 1){ - this.pushOrder(orderPrivateCar); + Integer id = orderPrivateCar.getId(); + redisUtil.addListRight("push_order_ids", id.toString()); } //添加消息 @@ -521,36 +523,8 @@ if(orderPrivateCar.getState() != 1){ return ResultUtil.error("订单已被司机接单,不能重复推送"); } - //处理摆渡订单的继续推单操作 - if(orderPrivateCar.getType() == 2){ - OrderCrossCityServiceImpl.pushEndMap.put(orderPrivateCar.getCrossCityOrderId(), false);//还原标识数据 - List<OrderPrivateCar> list = this.selectList(new EntityWrapper<OrderPrivateCar>().eq("type", 2).eq("crossCityOrderId", orderPrivateCar.getCrossCityOrderId()).eq("place", orderPrivateCar.getPlace())); - List<Map<String, Integer>> orders = new ArrayList<>(); - for(OrderPrivateCar orderPrivateCar1 : list){ - if(orderPrivateCar1.getState() != 1){ - return ResultUtil.error("订单已被司机接单,推单取消"); - } - Map<String, Integer> map = new HashMap<>(); - map.put("orderType", 1); - map.put("orderId", orderPrivateCar1.getId()); - orders.add(map); - } -// List<OrderTaxi> list1 = orderTaxiService.selectList(new EntityWrapper<OrderTaxi>().eq("type", 2).eq("crossCityOrderId", orderPrivateCar.getCrossCityOrderId()).eq("place", orderPrivateCar.getPlace())); -// for(OrderTaxi orderTaxi : list1){ -// if(orderTaxi.getState() != 1){ -// return ResultUtil.error("订单已被司机接单,推单取消"); -// } -// Map<String, Integer> map = new HashMap<>(); -// map.put("orderType", 2); -// map.put("orderId", orderTaxi.getId()); -// orders.add(map); -// } - //开始重新推单 - orderCrossCityService.pushOrder(orders); - - }else{ - this.pushOrder(orderPrivateCar); - } + //继续将订单添加到推送列表中 + redisUtil.addListLeft("push_order_ids", id.toString()); return ResultUtil.success(); } @@ -852,15 +826,28 @@ public boolean pushOrder1(Integer id){ try { OrderPrivateCar orderPrivateCar = this.selectById(id); + if(1 != orderPrivateCar.getState()){ + return true; + } + long time = System.currentTimeMillis() - orderPrivateCar.getInsertTime().getTime(); Company query = companyCityService.query(String.valueOf(orderPrivateCar.getStartLon()), String.valueOf(orderPrivateCar.getStartLat()));//获取起点所属分公司 + List<PushOrder> querys = pushOrderService.querys(null, 1, query.getId());//获取需要推送的次数 + long pushTime = 0; + if(null != querys && querys.size() > 0){ + pushTime = querys.stream().mapToInt(PushOrder::getPushTime).sum() * 1000; + } + if(time >= pushTime){ + pushUtil.pushEndPush(1, orderPrivateCar.getUserId(), orderPrivateCar.getId(), 1); + return true; + } + List<Driver> drivers = driverMapper.queryIdleDriver_(1, orderPrivateCar.getServerCarModelId(), query.getId()); - System.err.println("当前获取的司机:"+drivers); - - List<Driver> list = new ArrayList<>(); + drivers = drivers.stream().filter(s->s.getBalance() > -100).collect(Collectors.toList()); + System.err.println("当前获取的司机:"+ JSON.toJSONString(drivers)); //找出距离最近且评分最高的司机 Double dis = 100000D; - Double pf = 0d; + Double pf = -1d; Driver driver1 = null; for(Driver driver : drivers){ List<OrderCrossCity> orderCrossCities = crossCityService.selectList(new EntityWrapper<OrderCrossCity>().eq("state", 2).eq("driverId", driver.getId())); @@ -868,6 +855,7 @@ continue; } String value = redisUtil.getValue("DRIVER" + driver.getId()); + System.err.println("------" + value); if(null != value){ Map<String, Double> distance1 = geodesyUtil.getDistance(orderPrivateCar.getStartLon() + "," + orderPrivateCar.getStartLat(), value); double d = Double.valueOf(distance1.get("WGS84")).doubleValue(); @@ -876,13 +864,20 @@ if(fraction > 0){ fraction = fraction / evaluates.size(); } - if(dis > d && fraction > pf){ + if(dis > d){ dis = d; pf = fraction; driver1 = driver; + }else if(dis == d){ + if(fraction > pf){ + dis = d; + pf = fraction; + driver1 = driver; + } } } } + System.err.println("------" + JSON.toJSONString(driver1)); if(null != driver1){ orderPrivateCar.setDriverId(driver1.getId()); orderPrivateCar.setCarId(driver1.getCarId()); @@ -1075,14 +1070,27 @@ BigDecimal c = null;//司机收入 Driver driver = driverService.selectById(orderPrivateCar.getDriverId()); Double speMoney = driver.getSpecialCarCommission(); - if(driver.getSpecialCarCommissionType() == 2){//固定 - d = new BigDecimal(speMoney); - c = new BigDecimal(orderPrivateCar.getOrderMoney()).subtract(d);//只有出行金额参与抽成,其余归属司机 - } - if(driver.getSpecialCarCommissionType() == 1){//比例 - Double price = orderPrivateCar.getStartMoney() + orderPrivateCar.getMileageMoney() + orderPrivateCar.getWaitMoney() + orderPrivateCar.getDurationMoney() + orderPrivateCar.getLongDistanceMoney(); - d = new BigDecimal(price).multiply(new BigDecimal(speMoney).divide(new BigDecimal(100), new MathContext(2, RoundingMode.HALF_EVEN))).setScale(2, BigDecimal.ROUND_HALF_EVEN); - c = new BigDecimal(orderPrivateCar.getOrderMoney()).subtract(d).setScale(2, BigDecimal.ROUND_HALF_EVEN); + if(null == speMoney){ + speMoney = company.getSpeMoney(); + if(company.getIsSpeFixedOrProportional() == 2){//固定 + d = new BigDecimal(speMoney); + c = new BigDecimal(orderPrivateCar.getOrderMoney()).subtract(d).setScale(2, BigDecimal.ROUND_HALF_EVEN); + } + if(company.getIsSpeFixedOrProportional() == 1){//比例 + Double price = orderPrivateCar.getStartMoney() + orderPrivateCar.getMileageMoney() + orderPrivateCar.getWaitMoney() + orderPrivateCar.getDurationMoney() + orderPrivateCar.getLongDistanceMoney(); + d = new BigDecimal(price).multiply(new BigDecimal(speMoney).divide(new BigDecimal(100), new MathContext(2, RoundingMode.HALF_EVEN))).setScale(2, BigDecimal.ROUND_HALF_EVEN); + c = new BigDecimal(orderPrivateCar.getOrderMoney()).subtract(d).setScale(2, BigDecimal.ROUND_HALF_EVEN); + } + }else{ + if(driver.getSpecialCarCommissionType() == 2){//固定 + d = new BigDecimal(speMoney); + c = new BigDecimal(orderPrivateCar.getOrderMoney()).subtract(d).setScale(2, BigDecimal.ROUND_HALF_EVEN); + } + if(driver.getSpecialCarCommissionType() == 1){//比例 + Double price = orderPrivateCar.getStartMoney() + orderPrivateCar.getMileageMoney() + orderPrivateCar.getWaitMoney() + orderPrivateCar.getDurationMoney() + orderPrivateCar.getLongDistanceMoney(); + d = new BigDecimal(price).multiply(new BigDecimal(speMoney).divide(new BigDecimal(100), new MathContext(2, RoundingMode.HALF_EVEN))).setScale(2, BigDecimal.ROUND_HALF_EVEN); + c = new BigDecimal(orderPrivateCar.getOrderMoney()).subtract(d).setScale(2, BigDecimal.ROUND_HALF_EVEN); + } } incomeService.saveData(1, orderPrivateCar.getCompanyId(), 2, orderPrivateCar.getId(), 1, d.doubleValue()); incomeService.saveData(2, orderPrivateCar.getDriverId(), 2, orderPrivateCar.getId(), 1, c.doubleValue()); @@ -1290,15 +1298,30 @@ BigDecimal c = null;//司机收入 Driver driver = driverService.selectById(orderPrivateCar.getDriverId()); Double taxi = driver.getSpecialCarCommission(); - if(driver.getSpecialCarCommissionType() == 2){//固定 - d = new BigDecimal(taxi); - c = new BigDecimal(orderPrivateCar.getOrderMoney()).subtract(d).setScale(2, BigDecimal.ROUND_HALF_EVEN); + if(null == taxi){ + taxi = company.getSpeMoney(); + if(company.getIsSpeFixedOrProportional() == 2){//固定 + d = new BigDecimal(taxi); + c = new BigDecimal(orderPrivateCar.getOrderMoney()).subtract(d).setScale(2, BigDecimal.ROUND_HALF_EVEN); + } + if(company.getIsSpeFixedOrProportional() == 1){//比例 + Double price = orderPrivateCar.getStartMoney() + orderPrivateCar.getMileageMoney() + orderPrivateCar.getWaitMoney() + orderPrivateCar.getDurationMoney() + orderPrivateCar.getLongDistanceMoney(); + d = new BigDecimal(price).multiply(new BigDecimal(taxi).divide(new BigDecimal(100), new MathContext(2, RoundingMode.HALF_EVEN))).setScale(2, BigDecimal.ROUND_HALF_EVEN); + c = new BigDecimal(orderPrivateCar.getOrderMoney()).subtract(d).setScale(2, BigDecimal.ROUND_HALF_EVEN); + } + }else{ + if(driver.getSpecialCarCommissionType() == 2){//固定 + d = new BigDecimal(taxi); + c = new BigDecimal(orderPrivateCar.getOrderMoney()).subtract(d).setScale(2, BigDecimal.ROUND_HALF_EVEN); + } + if(driver.getSpecialCarCommissionType() == 1){//比例 + Double price = orderPrivateCar.getStartMoney() + orderPrivateCar.getMileageMoney() + orderPrivateCar.getWaitMoney() + orderPrivateCar.getDurationMoney() + orderPrivateCar.getLongDistanceMoney(); + d = new BigDecimal(price).multiply(new BigDecimal(taxi).divide(new BigDecimal(100), new MathContext(2, RoundingMode.HALF_EVEN))).setScale(2, BigDecimal.ROUND_HALF_EVEN); + c = new BigDecimal(orderPrivateCar.getOrderMoney()).subtract(d).setScale(2, BigDecimal.ROUND_HALF_EVEN); + } } - if(driver.getSpecialCarCommissionType() == 1){//比例 - Double price = orderPrivateCar.getStartMoney() + orderPrivateCar.getMileageMoney() + orderPrivateCar.getWaitMoney() + orderPrivateCar.getDurationMoney() + orderPrivateCar.getLongDistanceMoney(); - d = new BigDecimal(price).multiply(new BigDecimal(taxi).divide(new BigDecimal(100), new MathContext(2, RoundingMode.HALF_EVEN))).setScale(2, BigDecimal.ROUND_HALF_EVEN); - c = new BigDecimal(orderPrivateCar.getOrderMoney()).subtract(d).setScale(2, BigDecimal.ROUND_HALF_EVEN); - } + + incomeService.saveData(1, orderPrivateCar.getCompanyId(), 2, orderPrivateCar.getId(), 1, d.doubleValue()); incomeService.saveData(2, orderPrivateCar.getDriverId(), 2, orderPrivateCar.getId(), 1, c.doubleValue()); @@ -1394,28 +1417,33 @@ @Override public OrderServerWarpper queryOrderServer(Integer orderId, Integer uid) throws Exception { OrderPrivateCar orderPrivateCar = this.selectById(orderId); - //计算预计距离和剩余时间 - String value = redisUtil.getValue("DRIVER" + String.valueOf(orderPrivateCar.getDriverId())); - if(null == value || "".equals(value)){ - System.err.println("司机没有上传位置信息"); - - //调用获取轨迹中的数据 - List<Map<String, Object>> list = orderPositionService.queryTrack(orderId, 2); - if(list.size() > 0){ - Map<String, Object> map = list.get(list.size() - 1); - value = map.get("lon") + "," + map.get("lat"); - } - - } - Map<String, String> distance = gdMapElectricFenceUtil.getDistance(value, orderPrivateCar.getStartLon() + "," + orderPrivateCar.getStartLat(), 1); + String value = null; String d = "0"; String t = "0"; - if(null == distance){ - System.err.println("查询距离出错了"); - }else{ - d = new BigDecimal(distance.get("distance")).divide(new BigDecimal(1000), new MathContext(2, RoundingMode.HALF_EVEN)).setScale(2, BigDecimal.ROUND_HALF_EVEN).toString(); - t = new BigDecimal(distance.get("duration")).divide(new BigDecimal(60), new MathContext(2, RoundingMode.HALF_EVEN)).setScale(2, BigDecimal.ROUND_HALF_EVEN).intValue() + ""; + if(null != orderPrivateCar.getDriverId()){ + //计算预计距离和剩余时间 + value = redisUtil.getValue("DRIVER" + orderPrivateCar.getDriverId()); + if(null == value || "".equals(value)){ + System.err.println("司机没有上传位置信息"); + + //调用获取轨迹中的数据 + List<Map<String, Object>> list = orderPositionService.queryTrack(orderId, 2); + if(list.size() > 0){ + Map<String, Object> map = list.get(list.size() - 1); + value = map.get("lon") + "," + map.get("lat"); + } + + } + Map<String, String> distance = gdMapElectricFenceUtil.getDistance(value, orderPrivateCar.getStartLon() + "," + orderPrivateCar.getStartLat(), 1); + + if(null == distance){ + System.err.println("查询距离出错了"); + }else{ + d = new BigDecimal(distance.get("distance")).divide(new BigDecimal(1000), new MathContext(2, RoundingMode.HALF_EVEN)).setScale(2, BigDecimal.ROUND_HALF_EVEN).toString(); + t = new BigDecimal(distance.get("duration")).divide(new BigDecimal(60), new MathContext(2, RoundingMode.HALF_EVEN)).setScale(2, BigDecimal.ROUND_HALF_EVEN).intValue() + ""; + } } + OrderServerWarpper orderServerWarpper = new OrderServerWarpper(); orderServerWarpper.setOrderId(orderPrivateCar.getId()); orderServerWarpper.setOrderType(1); @@ -1432,7 +1460,7 @@ orderServerWarpper.setLaveTime("0"); } if(orderPrivateCar.getState() == 5 || orderPrivateCar.getState() == 6){//服务中 - distance = gdMapElectricFenceUtil.getDistance(value, orderPrivateCar.getEndLon() + "," + orderPrivateCar.getEndLat(), 1); + Map<String, String> distance = gdMapElectricFenceUtil.getDistance(value, orderPrivateCar.getEndLon() + "," + orderPrivateCar.getEndLat(), 1); if(null == distance){ System.err.println("查询距离出错了"); }else{ -- Gitblit v1.7.1