From 9a66aa395b78b5df07058560eec181a66d6db2b9 Mon Sep 17 00:00:00 2001 From: Pu Zhibing <393733352@qq.com> Date: 星期二, 30 九月 2025 11:41:51 +0800 Subject: [PATCH] 优化指派逻辑 --- UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/DriverMapper.xml | 2 +- UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java | 22 ++++++++++++---------- UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/RedisUtil.java | 5 +++++ UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/DriverServiceImpl.java | 14 ++++++++------ 4 files changed, 26 insertions(+), 17 deletions(-) diff --git a/UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java b/UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java index 807cc03..bc09638 100644 --- a/UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java +++ b/UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java @@ -431,11 +431,8 @@ } String value = redisUtil.getValue("DRIVER" + drivers.get(j).getId()); if (null != value) { -// Map<String, String> distance1 = gdMapElectricFenceUtil.getDistance(orderPrivateCar.getStartLon() + "," + orderPrivateCar.getStartLat(), value, 0);//计算距离 -// Integer d = Integer.valueOf(distance1.get("distance")); - String[] split = value.split(","); - double distance = GDMapGeocodingUtil.getDistance(orderPrivateCar.getStartLat(), orderPrivateCar.getStartLon(), Double.valueOf(split[1]), Double.valueOf(split[0])); - int d = Double.valueOf(distance).intValue(); + Map<String, Double> distance1 = geodesyUtil.getDistance(orderPrivateCar.getStartLat() + "," + orderPrivateCar.getStartLon(), value); + int d = distance1.get("WGS84").intValue(); if ((0 == m && null == driver) || (d < m)) { driver = drivers.get(j); m = d; @@ -452,11 +449,11 @@ for (Driver driver : ds) { String value = redisUtil.getValue("DRIVER" + driver.getId()); if (null != value) { - Map<String, Double> distance = geodesyUtil.getDistance(orderPrivateCar.getStartLon() + "," + orderPrivateCar.getStartLat(), value); - Double wgs84 = distance.get("WGS84"); - if ((0 == m && null == dr) || (wgs84.intValue() < m.intValue())) { + Map<String, String> distance = gdMapElectricFenceUtil.getDistance(startLon + "," + startLat, value, 1); + int distance1 = Integer.parseInt(distance.get("distance")); + if ((0 == m && null == dr) || (distance1 < m.intValue())) { dr = driver; - m = wgs84.intValue(); + m = distance1; } } } @@ -480,6 +477,7 @@ dr.setState(3); } driverService.updateById(dr); + redisUtil.setStrValue("DRIVER_ORDER" + dr.getId(), orderPrivateCar.getId().toString(), 600); new Thread(new Runnable() { @Override public void run() { @@ -1378,6 +1376,11 @@ if(!lock){ return ResultUtil.error("系统繁忙,请稍后重试"); } + String key = orderId + "_during_payment"; + if(redisUtil.hasKey(key)){ + return ResultUtil.error("支付中,不能重复发起支付"); + } + redisUtil.setStrValue(key, UUIDUtil.getRandomCode(), 10); try { OrderPrivateCar orderPrivateCar = this.selectById(orderId); if(orderPrivateCar.getState() == 8 || orderPrivateCar.getState() == 9){ @@ -1888,7 +1891,6 @@ if(!lock){ return; } - try { PaymentRecord query = paymentRecordService.query(1, null, null, Integer.valueOf(id), 1, type, null); if(null != query){ diff --git a/UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/DriverMapper.xml b/UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/DriverMapper.xml index e6d749d..8152cba 100644 --- a/UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/DriverMapper.xml +++ b/UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/DriverMapper.xml @@ -239,7 +239,7 @@ updateTime as updateTime, updateUser as updateUser from t_driver - where flag != 3 and state = 2 and authState = 2 + where flag != 3 and state in (2, 3) and authState = 2 <if test="null != companyId"> <choose> <when test="companyId != 1"> diff --git a/UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/DriverServiceImpl.java b/UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/DriverServiceImpl.java index 799d8b3..9acdc9d 100644 --- a/UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/DriverServiceImpl.java +++ b/UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/DriverServiceImpl.java @@ -15,6 +15,7 @@ import com.stylefeng.guns.modular.system.service.IDriverService; import com.stylefeng.guns.modular.system.util.GDMapElectricFenceUtil; import com.stylefeng.guns.modular.system.util.GDMapGeocodingUtil; +import com.stylefeng.guns.modular.system.util.GeodesyUtil; import com.stylefeng.guns.modular.system.util.RedisUtil; import com.stylefeng.guns.modular.system.warpper.BaseWarpper; import org.springframework.beans.factory.annotation.Autowired; @@ -45,6 +46,9 @@ @Autowired private GDMapElectricFenceUtil gdMapElectricFenceUtil; + + @Autowired + private GeodesyUtil geodesyUtil; @Autowired private ICompanyCityService companyCityService; @@ -105,13 +109,11 @@ if(0 != count){ continue; } - String value = redisUtil.getValue("DRIVER" + String.valueOf(driver.getId())); + String value = redisUtil.getValue("DRIVER" + driver.getId()); if(null != value){ - /*Map<String, String> distance1 = gdMapElectricFenceUtil.getDistance(lon + "," + lat, value, 0);//计算距离 - double d = Double.valueOf(distance1.get("distance")).doubleValue();*/ -// double d = GDMapGeocodingUtil.getDistance(lat,lon,Double.parseDouble(value.split(",")[1]),Double.parseDouble(value.split(",")[0])); - double d = gdMapElectricFenceUtil.getDrivingRoute(lat,lon,Double.parseDouble(value.split(",")[1]),Double.parseDouble(value.split(",")[0])); - if(d < (distance * 1000)){ + Map<String, Double> distance1 = geodesyUtil.getDistance(lon + "," + lat, value); + Double wgs84 = distance1.get("WGS84"); + if(wgs84 < (distance * 1000)){ list.add(driver); } } diff --git a/UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/RedisUtil.java b/UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/RedisUtil.java index 3f1b4ef..07a7dcd 100644 --- a/UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/RedisUtil.java +++ b/UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/RedisUtil.java @@ -54,6 +54,11 @@ redisTemplate.opsForValue().set(key, value, time, TimeUnit.SECONDS); } } + + + public boolean hasKey(String key){ + return redisTemplate.hasKey(key); + } /** -- Gitblit v1.7.1