From 40b94a2b7afb9acc38fcda17b5375a47ec928da8 Mon Sep 17 00:00:00 2001 From: Pu Zhibing <393733352@qq.com> Date: 星期日, 15 十二月 2024 01:36:00 +0800 Subject: [PATCH] 新增加功能 --- UserAHTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java | 139 +++++++++++++++++++++++++++++++++------------ 1 files changed, 101 insertions(+), 38 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 b54f179..6610910 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 @@ -78,6 +78,9 @@ @Autowired private IDriverService driverService; + + @Resource + private DriverMapper driverMapper; @Autowired private IDriverServiceService driverServiceService; @@ -164,6 +167,15 @@ @Value("${pushMinistryOfTransport}") private boolean pushMinistryOfTransport; + + @Autowired + private IOrderCrossCityService crossCityService; + + @Autowired + private GeodesyUtil geodesyUtil; + + @Autowired + private IOrderEvaluateService orderEvaluateService; @@ -482,7 +494,8 @@ //推单操作 if(orderPrivateCar.getState() == 1){ - this.pushOrder(orderPrivateCar); + Integer id = orderPrivateCar.getId(); + redisUtil.addListRight("push_order_ids", id.toString()); } //添加消息 @@ -550,7 +563,7 @@ double amount = 0; CancleOrder query = cancleOrderService.query(orderPrivateCar.getOrderType(), 1, orderPrivateCar.getCompanyId()); if(null != orderPrivateCar.getDriverId() && - (orderPrivateCar.getSnatchOrderTime().getTime() + query.getMinuteNum() * 60 * 1000) < new Date().getTime()){//收费的情况 + (orderPrivateCar.getSnatchOrderTime().getTime() + query.getMinuteNum() * 60 * 1000) < System.currentTimeMillis()){//收费的情况 if(null != query){ amount += query.getMoney(); } @@ -830,6 +843,82 @@ } }).start(); } + + + /** + * 推送抢单数据 + * @throws Exception + */ + public boolean pushOrder1(Integer id){ + try { + OrderPrivateCar orderPrivateCar = this.selectById(id); + Company query = companyCityService.query(String.valueOf(orderPrivateCar.getStartLon()), String.valueOf(orderPrivateCar.getStartLat()));//获取起点所属分公司 + List<Driver> drivers = driverMapper.queryIdleDriver_(1, orderPrivateCar.getServerCarModelId(), query.getId()); + System.err.println("当前获取的司机:"+drivers); + + List<Driver> list = new ArrayList<>(); + + //找出距离最近且评分最高的司机 + Double dis = 100000D; + Double pf = 0d; + Driver driver1 = null; + for(Driver driver : drivers){ + List<OrderCrossCity> orderCrossCities = crossCityService.selectList(new EntityWrapper<OrderCrossCity>().eq("state", 2).eq("driverId", driver.getId())); + if (orderCrossCities!=null&& !orderCrossCities.isEmpty()){ + continue; + } + String value = redisUtil.getValue("DRIVER" + driver.getId()); + if(null != value){ + Map<String, Double> distance1 = geodesyUtil.getDistance(orderPrivateCar.getStartLon() + "," + orderPrivateCar.getStartLat(), value); + double d = Double.valueOf(distance1.get("WGS84")).doubleValue(); + List<OrderEvaluate> evaluates = orderEvaluateService.selectList(new EntityWrapper<OrderEvaluate>().eq("driverId", driver.getId())); + double fraction = evaluates.stream().mapToDouble(OrderEvaluate::getFraction).sum(); + if(fraction > 0){ + fraction = fraction / evaluates.size(); + } + if(dis > d && fraction > pf){ + dis = d; + pf = fraction; + driver1 = driver; + } + } + } + if(null != driver1){ + orderPrivateCar.setDriverId(driver1.getId()); + orderPrivateCar.setCarId(driver1.getCarId()); + orderPrivateCar.setCompanyId(driver1.getFranchiseeId() != null && driver1.getFranchiseeId() != 0 ? driver1.getFranchiseeId() : ( + driver1.getCompanyId() != null && driver1.getCompanyId() != 0 ? driver1.getCompanyId() : 1)); + orderPrivateCar.setState(2); + orderPrivateCar.setSnatchOrderTime(new Date()); + orderPrivateCarMapper.updateById(orderPrivateCar); + //修改司机状态 + //如果是预约单,则不修改司机为服务中 + if(orderPrivateCar.getOrderType() != 2 || (orderPrivateCar.getOrderType() == 2 && orderPrivateCar.getTravelTime().getTime() < System.currentTimeMillis() + 600000)){ + //修改司机为服务中 + driver1.setState(3); + driverService.updateById(driver1); + } + new Thread(new Runnable() { + @Override + public void run() { + pushUtil.pushOrderState(1, orderPrivateCar.getUserId(), orderPrivateCar.getId(), 1, orderPrivateCar.getState(), 0); + pushUtil.pushOrderState(2, orderPrivateCar.getDriverId(), orderPrivateCar.getId(), 1, orderPrivateCar.getState(), 0); + if(orderPrivateCar.getType() == 2){ + pushUtil.pushFerryOrderState(1, orderPrivateCar.getUserId(), orderPrivateCar.getId(), 1, 2); + } + } + }).start(); + + return true; + } + } catch (Exception e) { + e.printStackTrace(); + } + return false; + } + + + @Override public synchronized String getOrderNum() throws Exception{ @@ -950,34 +1039,6 @@ resultUtil = payMoneyUtil.alipay("完成订单", "完成订单", "", orderId + "_1_" + UUIDUtil.getRandomCode(5), orderMoney.toString(), "/base/aliPayOrderTaxi"); paymentRecordService.saveData(1, orderPrivateCar.getUserId(), 1, orderId, 1, 2, orderMoney, "", 1);//添加预支付数据 } - - -// if(payType == 1){//微信支付 -// String value = redisUtil.getValue("appletOpenId"); -// String appletsOpenId = null; -// if(ToolUtil.isNotEmpty(value)){ -// JSONObject jsonObject = JSON.parseObject(value); -// appletsOpenId = jsonObject.getString(uid.toString()); -// }else{ -// appletsOpenId = userInfo.getAppletsOpenId(); -// } -// Map<String, String> map = icbcPayUtil.placeAnOrder(orderId + ",1", 9, 5, uid.toString(), "完成订单", orderMoney, callbackPath + "/base/wxPayOrderTaxi", "", type, appletsOpenId); -// if(map.get("code").equals("200")){ -// paymentRecordService.saveData(1, orderPrivateCar.getUserId(), 1, orderId, 1, 1, orderMoney, map.get("order_id"), 1);//添加预支付数据 -// resultUtil = ResultUtil.success(map.get("data")); -// }else{ -// resultUtil = ResultUtil.error(map.get("msg"), ""); -// } -// } -// if(payType == 2) {//支付宝支付 -// Map<String, String> map = icbcPayUtil.placeAnOrder(orderId + ",1", 10, 5, uid.toString(), "完成订单", orderMoney, callbackPath + "/base/aliPayOrderTaxi", "", type, null); -// if (map.get("code").equals("200")) { -// paymentRecordService.saveData(1, orderPrivateCar.getUserId(), 1, orderId, 1, 2, orderMoney, map.get("order_id"), 1);//添加预支付数据 -// resultUtil = ResultUtil.success(map.get("data")); -// } else { -// resultUtil = ResultUtil.error(map.get("msg"), ""); -// } -// } if(payType == 3){//余额支付 if(userInfo.getBalance() == null || userInfo.getBalance() < orderMoney){ return ResultUtil.error("余额不足,无法完成支付"); @@ -1010,21 +1071,22 @@ //添加已收入明细 Company company = companyService.selectById(orderPrivateCar.getCompanyId()); - Double speMoney = company.getSpeMoney(); BigDecimal d = null;//企业收入 BigDecimal c = null;//司机收入 - if(company.getIsSpeFixedOrProportional() == 2){//固定 + 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(company.getIsSpeFixedOrProportional() == 1){//比例 + 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()); - Driver driver = driverService.selectById(orderPrivateCar.getDriverId()); + driver.setBusinessMoney(new BigDecimal(null != driver.getBusinessMoney() ? driver.getBusinessMoney() : 0).add(c).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); driver.setLaveBusinessMoney(new BigDecimal(null != driver.getLaveBusinessMoney() ? driver.getLaveBusinessMoney() : 0).add(c).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); driver.setBalance(new BigDecimal(null != driver.getBalance() ? driver.getBalance() : 0).add(c).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); @@ -1224,21 +1286,22 @@ //添加已收入明细 Company company = companyService.selectById(orderPrivateCar.getCompanyId()); - Double taxi = company.getSpeMoney(); BigDecimal d = null;//企业收入 BigDecimal c = null;//司机收入 - if(company.getIsSpeFixedOrProportional() == 2){//固定 + 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(company.getIsSpeFixedOrProportional() == 1){//比例 + 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()); - Driver driver = driverService.selectById(orderPrivateCar.getDriverId()); + driver.setBusinessMoney(new BigDecimal(null != driver.getBusinessMoney() ? driver.getBusinessMoney() : 0).add(c).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); driver.setLaveBusinessMoney(new BigDecimal(null != driver.getLaveBusinessMoney() ? driver.getLaveBusinessMoney() : 0).add(c).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); driver.setBalance(new BigDecimal(null != driver.getBalance() ? driver.getBalance() : 0).add(c).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); -- Gitblit v1.7.1