Kirin 3 rokov pred
rodič
commit
b5fdafeeb2
2 zmenil súbory, kde vykonal 30 pridanie a 0 odobranie
  1. 22 0
      app/common.php
  2. 8 0
      app/models/store/StoreOrder.php

+ 22 - 0
app/common.php

@@ -594,3 +594,25 @@ if (!function_exists('do_request')) {
         return $result;
     }
 }
+
+if (!function_exists('getDistance')) {
+    function getDistance($lat1, $lng1, $lat2, $lng2)
+    {
+        $EARTH_RADIUS = 6378137;
+
+        $radLat1 = rad($lat1);
+        $radLat2 = rad($lat2);
+        $a = $radLat1 - $radLat2;
+        $b = rad($lng1) - rad($lng2);
+        $s = 2 * asin(sqrt(pow(sin($a / 2), 2) + cos($radLat1) * cos($radLat2) * pow(sin($b / 2), 2)));
+        $s = $s * $EARTH_RADIUS;
+        $s = round($s * 10000) / 10000;
+        return $s;
+    }
+}
+if (!function_exists('rad')) {
+    function rad($d)
+    {
+        return $d * M_PI / 180.0;
+    }
+}

+ 8 - 0
app/models/store/StoreOrder.php

@@ -313,6 +313,14 @@ class StoreOrder extends BaseModel
                 if (!$test && !$addressId) return self::setErrorInfo('请选择收货地址!', true);
                 if (!$test && (!UserAddress::be(['uid' => $uid, 'id' => $addressId, 'is_del' => 0]) || !($addressInfo = UserAddress::find($addressId))))
                     return self::setErrorInfo('地址选择有误!', true);
+                if (!$storeId && !$test) {
+                    return self::setErrorInfo('请选择配送门店!', true);
+                }
+                $store = SystemStore::verificWhere()->where('id', $storeId)->find();
+                if (!$store) {
+                    return self::setErrorInfo('门店错误!', true);
+                }
+                if (getDistance($addr['latitude'], $addr['longitude'], $store['latitude'], $store['longitude']) / 1000 > $store['radius']) return self::setErrorInfo('地址在派送范围外!', true);
             } else {
                 if ((!$real_name || !$phone) && !$test) return self::setErrorInfo('请填写姓名和电话', true);
                 $addressInfo['real_name'] = $real_name;