Parcourir la source

fix:修改地址从新计算车费

wrj il y a 10 mois
Parent
commit
c3f3987dd6

+ 13 - 13
nightFragrance-admin/src/main/java/com/ylx/web/controller/massage/RedisGeoController.java

@@ -79,19 +79,19 @@ public class RedisGeoController {
         return R.ok(radius);
     }
 
-//    @ApiOperation("测试")
-//    @RequestMapping(value = "test", method = RequestMethod.GET)
-//    public List<TWxUser> test() {
-//        locationUtil.geoAdd("shijiazhuang1", 114.48, 38.03);
-//        locationUtil.geoAdd("shijiazhuang2", 114.48, 38.02);
-//        locationUtil.geoAdd("shijiazhuang3", 114.48, 39.03);
-//
-//        Map<String, Double> shijiazhuang1 = locationUtil.distanceInclude("shijiazhuang1", 30000);
-//
-//        log.error(shijiazhuang1.toString());
-//
-//        return null;
-//    }
+    @ApiOperation("测试")
+    @RequestMapping(value = "test", method = RequestMethod.GET)
+    public List<TWxUser> test() {
+        locationUtil.geoAdd(LocationUtil.GEO_KEY_USER,"o-HEJ6VP2YNi0HPeLaIHCQsQD69s", 112.521465, 37.857166);
+        locationUtil.geoAdd(LocationUtil.GEO_KEY_USER,"o-HEJ6RAjBDjFvuZcAdHRX8mIZXw", 116.396151, 39.939414);
+
+        Map<String, Double> shijiazhuang1 = locationUtil.distanceInclude("shijiazhuang1", 30000);
+
+        locationUtil.getDistance("o-HEJ6VP2YNi0HPeLaIHCQsQD69s","o-HEJ6RAjBDjFvuZcAdHRX8mIZXw");
+        log.error(shijiazhuang1.toString());
+
+        return null;
+    }
 
 }
 

+ 1 - 1
nightFragrance-admin/src/main/java/com/ylx/web/controller/massage/TOrderController.java

@@ -249,7 +249,7 @@ public class TOrderController {
     @RequestMapping(value = "/update", method = RequestMethod.POST)
     public R update(@RequestBody TOrder borrow) {
         try {
-            return R.ok(orderService.updateById(borrow));
+            return R.ok(orderService.updateAddressById(borrow));
         } catch (ServiceException s) {
             log.error(s.toString());
             return R.fail(s.getMessage());

+ 2 - 0
nightFragrance-massage/src/main/java/com/ylx/massage/service/TOrderService.java

@@ -53,4 +53,6 @@ public interface TOrderService extends IService<TOrder> {
     void takingOrders(TOrder order);
 
     void payNotifyOrder(String outTradeNo);
+
+    Object updateAddressById(TOrder borrow);
 }

+ 39 - 5
nightFragrance-massage/src/main/java/com/ylx/massage/service/impl/TOrderServiceImpl.java

@@ -132,6 +132,7 @@ public class TOrderServiceImpl extends ServiceImpl<TOrderMapper, TOrder> impleme
 //        BigDecimal preferential = this.setCoupon(coupons);
 //        order.setPreferential(preferential);
 
+        order.setOrderNo(generator.generateNextOrderNumber(OrderNumberGenerator.KEY_PREFIX_ORDER));
         //订单价格
         List<TXiangmu> list = JSONObject.parseArray(order.getcGoods().toJSONString(), TXiangmu.class);
         BigDecimal sum = list.stream().map(TXiangmu::getSum).reduce(BigDecimal.ZERO, BigDecimal::add);
@@ -144,10 +145,10 @@ public class TOrderServiceImpl extends ServiceImpl<TOrderMapper, TOrder> impleme
         }
         TJs js = jsService.getById(order.getcJsId());
         //添加位置信息
-        locationUtil.geoAdd(LocationUtil.GEO_KEY_USER, js.getcOpenId(), Double.parseDouble(js.getLongitude().toString()), Double.parseDouble(js.getLatitude().toString()));
-        locationUtil.geoAdd(LocationUtil.GEO_KEY_USER, order.getcOpenId(), Double.parseDouble(address.getLongitude().toString()), Double.parseDouble(address.getLatitude().toString()));
-        double distance = locationUtil.getDistance(js.getcOpenId(), order.getcOpenId());
-        locationUtil.remove(LocationUtil.GEO_KEY_USER, js.getcOpenId() + "," + order.getcOpenId());
+        locationUtil.geoAdd(LocationUtil.GEO_KEY_USER, js.getcOpenId() + order.getOrderNo(), Double.parseDouble(js.getLongitude().toString()), Double.parseDouble(js.getLatitude().toString()));
+        locationUtil.geoAdd(LocationUtil.GEO_KEY_USER, order.getcOpenId() + order.getOrderNo(), Double.parseDouble(address.getLongitude().toString()), Double.parseDouble(address.getLatitude().toString()));
+        double distance = locationUtil.getDistance(js.getcOpenId() + order.getOrderNo(), order.getcOpenId() + order.getOrderNo());
+        locationUtil.remove(LocationUtil.GEO_KEY_USER, js.getcOpenId() + order.getOrderNo(), order.getcOpenId() + order.getOrderNo());
         order.setDistance(new BigDecimal(distance));
         //计算车费
         if (order.getDistance() != null && order.getDistance().compareTo(BigDecimal.ZERO) > 0) {
@@ -173,7 +174,6 @@ public class TOrderServiceImpl extends ServiceImpl<TOrderMapper, TOrder> impleme
         order.setcName(address.getUserName());
         order.setAtlasAdd(address.getAtlasAdd());
 
-        order.setOrderNo(generator.generateNextOrderNumber(OrderNumberGenerator.KEY_PREFIX_ORDER));
         order.setnStatus(OrderStatusEnum.WAIT_PAY.getCode());
         order.setDtCreateTime(LocalDateTime.now());
         Date date = DateTimeUtils.addMinute(new Date(), 10);
@@ -209,6 +209,40 @@ public class TOrderServiceImpl extends ServiceImpl<TOrderMapper, TOrder> impleme
         orderPayManage(user, orderNew);
     }
 
+    @Override
+    public Object updateAddressById(TOrder borrow) {
+        TOrder order = this.getById(borrow.getcId());
+        if(borrow.getLatitude()!=null && borrow.getLatitude()!=0 && borrow.getLongitude()!=null && borrow.getLongitude()!=0){
+
+
+            order.setAtlasAdd(borrow.getAtlasAdd());
+            order.setcName(borrow.getcName());
+            order.setcPhone(borrow.getcPhone());
+            order.setName(borrow.getName());
+            order.setAddress(borrow.getAddress());
+            order.setLatitude(borrow.getLatitude());
+            order.setLongitude(borrow.getLongitude());
+            TJs js = jsService.getById(order.getcJsId());
+            //添加位置信息
+            locationUtil.geoAdd(LocationUtil.GEO_KEY_USER, js.getcOpenId() + order.getOrderNo(), Double.parseDouble(js.getLongitude().toString()), Double.parseDouble(js.getLatitude().toString()));
+            locationUtil.geoAdd(LocationUtil.GEO_KEY_USER, order.getcOpenId() + order.getOrderNo(), Double.parseDouble(borrow.getLongitude().toString()), Double.parseDouble(borrow.getLatitude().toString()));
+            double distance = locationUtil.getDistance(js.getcOpenId() + order.getOrderNo(), order.getcOpenId() + order.getOrderNo());
+            locationUtil.remove(LocationUtil.GEO_KEY_USER, js.getcOpenId() + order.getOrderNo(), order.getcOpenId() + order.getOrderNo());
+            order.setDistance(new BigDecimal(distance));
+            //计算车费
+            if (order.getDistance() != null && order.getDistance().compareTo(BigDecimal.ZERO) > 0) {
+                //判断是否可以免车费
+                if (!this.isFree(js, order.getDistance())) {
+                    BigDecimal bigDecimal = massageUtil.calculateTaxiFare(order.getDistance());
+                    order.setFare(bigDecimal.setScale(MassageConstants.INTEGER_TWO, RoundingMode.HALF_UP));
+                }
+            }
+            order.setTotalPrice(order.getdTotalMoney().add(Optional.ofNullable(order.getFare()).orElse(BigDecimal.ZERO)));
+            this.updateById(order);
+        }
+        return order;
+    }
+
 
     /**
      * 支付订单

+ 10 - 4
nightFragrance-massage/src/main/java/com/ylx/massage/utils/LocationUtil.java

@@ -6,6 +6,7 @@ import com.ylx.massage.domain.Location;
 import com.ylx.massage.domain.TJs;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.compress.utils.Lists;
+import org.redisson.api.RGeoAsync;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.geo.*;
 import org.springframework.data.redis.connection.RedisGeoCommands;
@@ -44,15 +45,20 @@ public class LocationUtil {
      * @param latitude  纬度
      */
     public void geoAdd(String geoKey,String certId, double longitude, double latitude) {
+
+        log.info("LocationUtil.geoAdd:" + geoKey + ":" + certId + ":" + longitude + ":" + latitude);
         GeoOperations geoOperations = redisTemplate.opsForGeo();
         Point point = new Point(longitude, latitude);
         RedisGeoCommands.GeoLocation geoLocation = new RedisGeoCommands.GeoLocation(certId, point);
-        geoOperations.add(geoKey, geoLocation);
+        Long add = geoOperations.add(geoKey, geoLocation);
+        log.info("LocationUtil.geoAdd:" + add);
     }
 
-    public void remove(String geoKey,String certId) {
+
+    public void remove(String geoKey,String certId1,String certId2) {
         GeoOperations geoOperations = redisTemplate.opsForGeo();
-        geoOperations.remove(geoKey, certId);
+        Long remove = geoOperations.remove(geoKey, certId1, certId2);
+        log.info("LocationUtil.remove:" + remove);
     }
 
     /**
@@ -136,7 +142,7 @@ public class LocationUtil {
      * */
     public double getDistance(String jsKey,String userKey) {
         // 获取两个城市之间的距离
-        Distance distance = redisTemplate.opsForGeo().distance(GEO_KEY, jsKey, userKey, RedisGeoCommands.DistanceUnit.KILOMETERS);
+        Distance distance = redisTemplate.opsForGeo().distance(GEO_KEY_USER, jsKey, userKey, RedisGeoCommands.DistanceUnit.KILOMETERS);
         log.info("distance:"+distance.toString());
         log.info("获取"+jsKey + "--"+userKey +"两之间的距离:"+distance.getValue()+"千米");
         return distance.getValue();