xxxrrrdddd 3 vuotta sitten
vanhempi
commit
b50858689c

+ 0 - 8
application/api/controller/UserOrder.php

@@ -63,19 +63,15 @@ class UserOrder extends UserApi
     /**
      * 预下单
      * @ApiMethod (POST)
-     * @param array from_addr 必须,取宠地址信息
      * @param string from_addr[longitude] 必须,取宠地址经度
      * @param string from_addr[latitude] 必须,取宠地址纬度
      * @param string from_addr[name] 必须,取宠人
      * @param string from_addr[mobile] 必须,取宠手机号
-     * @paramNo string from_addr[city] 必须,取宠城市
      * @param string from_addr[address] 必须,取宠详细地址
-     * @param array to_addr 必须,收宠地址信息
      * @param string to_addr[longitude] 必须,收宠地址经度
      * @param string to_addr[latitude] 必须,收宠地址纬度
      * @param string to_addr[name] 必须,收宠人
      * @param string to_addr[mobile] 必须,收宠手机号
-     * @paramNo string to_addr[city] 必须,收宠城市
      * @param string to_addr[address] 必须,收宠详细地址
      * @param string pick_up 0无1上门接2上门送4上门接送
      * @param string agree_time 取宠时间
@@ -126,19 +122,15 @@ class UserOrder extends UserApi
     }
     /**
      * 提交订单
-     * @param array from_addr 必须,取宠地址信息
      * @param string from_addr[longitude] 必须,取宠地址经度
      * @param string from_addr[latitude] 必须,取宠地址纬度
      * @param string from_addr[name] 必须,取宠人
      * @param string from_addr[mobile] 必须,取宠手机号
-     * @param string from_addr[city] 必须,取宠城市
      * @param string from_addr[address] 必须,取宠详细地址
-     * @param array to_addr 必须,收宠地址信息
      * @param string to_addr[longitude] 必须,收宠地址经度
      * @param string to_addr[latitude] 必须,收宠地址纬度
      * @param string to_addr[name] 必须,收宠人
      * @param string to_addr[mobile] 必须,收宠手机号
-     * @param string to_addr[city] 必须,收宠城市
      * @param string to_addr[address] 必须,收宠详细地址
      * @param string pick_up 0无1上门接2上门送4上门接送
      * @param string agree_time 取宠时间

+ 12 - 0
application/common.php

@@ -550,4 +550,16 @@ function dd(...$params){
         dump($param);
     }
     exit;
+}
+
+function ll_distance($lng1, $lat1, $lng2, $lat2) {
+    // 将角度转为狐度
+    $radLat1 = deg2rad($lat1); //deg2rad()函数将角度转换为弧度
+    $radLat2 = deg2rad($lat2);
+    $radLng1 = deg2rad($lng1);
+    $radLng2 = deg2rad($lng2);
+    $a = $radLat1 - $radLat2;
+    $b = $radLng1 - $radLng2;
+    $s = 2 * asin(sqrt(pow(sin($a / 2), 2) + cos($radLat1) * cos($radLat2) * pow(sin($b / 2), 2))) * 6378.137;
+    return bcadd(0,$s,2);
 }

+ 58 - 11
application/service/UserOrderService.php

@@ -1,18 +1,18 @@
 <?php
 namespace app\service;
 
-use app\common\model\Area;
+use app\common\model\SysConfig;
 use app\common\model\User;
 use app\common\model\UserCoupon;
 use app\common\model\UserOrder;
-use think\Exception;
 
 class UserOrderService{
     protected $order;
     protected $user;
-    /** @var UserCoupon[] */
     protected $coupon;
     protected $user_coupon=[];
+    protected $config=[];
+    protected $cage_spec;
 
     /**
      * @return UserCoupon[]
@@ -40,6 +40,7 @@ class UserOrderService{
     public function __construct()
     {
         bcscale(2);
+        $this->config=SysConfig::look('price_config',config('process'));
     }
 
     /**
@@ -95,10 +96,20 @@ class UserOrderService{
         $this->order['to_latitude']=$this->order['to_addr']['latitude'];
     }
 
+    protected function distance(){
+        $this->order['distance']=ll_distance(
+            $this->order['from_longitude'],
+            $this->order['from_latitude'],
+            $this->order['to_longitude'],
+            $this->order['to_latitude']
+        );
+    }
+
     public function import(&$data){
         list($data['agree_date'],$data['agree_time'])=explode(' ',$data['agree_time']);
         $data['pet_category']=Pet::category()[$data['pet_category']]['name']??throw_user("宠物类目不存在");
-        $data['spec']=Pet::spec()[$data['spec']]['name']??throw_user('宠具规格不存在');
+        $this->cage_spec=Pet::spec()[$data['spec']]??throw_user('宠具规格不存在');
+        $data['spec']=$this->cage_spec['name'];
         if(!empty($data['protect_id'])) {
             $protect=Pet::protect()[$data['protect_id']];
             $data['protect_amount'] = $protect['price'];
@@ -108,6 +119,7 @@ class UserOrderService{
         $data['real_amount']=0;
         $this->order=$data;
         $this->area();
+        $this->distance();
         return $this;
     }
 
@@ -118,8 +130,8 @@ class UserOrderService{
             $item=[
                 'type'=>$type,//类型
                 'price'=>0,#实付
-                'total_price'=>0,#总价
-                'coupon'=>[],
+                'total_price'=>0,#单个类型支付总价
+                'coupon'=>[],//可用的优惠券列表
             ];
             $item['total_price']=$this->{$type}();
             $item['price']=$item['total_price'];
@@ -158,8 +170,25 @@ class UserOrderService{
     }
 
     protected function fast(){
-        $price=bcmul(bcmul(bcmul(2,$this->order['num']),$this->order['weight']),$this->order['piece']);
-        return $price;
+        #距离
+        $distance=$this->order['distance'];
+        $start_kilo=$this->config['fast']['start_kilo'];
+        $start_amount=$this->config['fast']['start_amount'];
+        if($distance<=$start_kilo){
+            $distance_price=$start_amount;
+        }else{
+            $out_price=$start_amount;
+            foreach ($this->config['fast']['detail'] as $detail){
+                if($distance>=$detail['start_kilo'] && $distance<$detail['end_kilo']){
+                    $out_price=bcadd($out_price,bcmul($detail['amount'],$distance));
+                    break;
+                }
+            }
+            $distance_price=$out_price;
+        }
+        #宠具
+        $cage_price=$this->cage();
+        return bcadd($distance_price,$cage_price);
     }
     protected function air(){
         $price=bcmul(bcmul(bcmul(2,$this->order['num']),$this->order['weight']),$this->order['piece']);
@@ -167,8 +196,26 @@ class UserOrderService{
         return $price;
     }
     protected function special(){
-        $price=bcmul(bcmul(bcmul(2,$this->order['num']),$this->order['weight']),$this->order['piece']);
-        $price=bcmul($price,2);
-        return $price;
+        #距离
+        $distance=$this->order['distance'];
+        $start_kilo=$this->config['special']['start_kilo'];
+        $start_amount=$this->config['special']['start_amount'];
+        if($distance<=$start_kilo){
+            $distance_price=$start_amount;
+        }else{
+            $distance_price=bcmul(bcsub($distance,$start_kilo),$this->config['special']['out_amount']);
+            $distance_price=bcadd($start_amount,$distance_price);
+        }
+        #笼具
+        $cage_price=$this->cage();
+
+        return bcadd($distance_price,$cage_price);
+    }
+    protected function cage(){
+        if($this->order['has_cage']){
+            return 0;
+        }
+        $cage_num=$this->order['piece'];
+        return bcmul($cage_num,$this->cage_spec['amount']);
     }
 }

+ 1 - 81
public/api.html

@@ -3039,12 +3039,6 @@
                                                 </thead>
                                                 <tbody>
                                                                                                         <tr>
-                                                        <td>from_addr</td>
-                                                        <td>array</td>
-                                                        <td>是</td>
-                                                        <td>必须,取宠地址信息</td>
-                                                    </tr>
-                                                                                                        <tr>
                                                         <td>from_addr[longitude]</td>
                                                         <td>string</td>
                                                         <td>是</td>
@@ -3069,24 +3063,12 @@
                                                         <td>必须,取宠手机号</td>
                                                     </tr>
                                                                                                         <tr>
-                                                        <td>string</td>
-                                                        <td>No</td>
-                                                        <td>是</td>
-                                                        <td>from_addr[city]</td>
-                                                    </tr>
-                                                                                                        <tr>
                                                         <td>from_addr[address]</td>
                                                         <td>string</td>
                                                         <td>是</td>
                                                         <td>必须,取宠详细地址</td>
                                                     </tr>
                                                                                                         <tr>
-                                                        <td>to_addr</td>
-                                                        <td>array</td>
-                                                        <td>是</td>
-                                                        <td>必须,收宠地址信息</td>
-                                                    </tr>
-                                                                                                        <tr>
                                                         <td>to_addr[longitude]</td>
                                                         <td>string</td>
                                                         <td>是</td>
@@ -3111,12 +3093,6 @@
                                                         <td>必须,收宠手机号</td>
                                                     </tr>
                                                                                                         <tr>
-                                                        <td>string</td>
-                                                        <td>No</td>
-                                                        <td>是</td>
-                                                        <td>to_addr[city]</td>
-                                                    </tr>
-                                                                                                        <tr>
                                                         <td>to_addr[address]</td>
                                                         <td>string</td>
                                                         <td>是</td>
@@ -3223,10 +3199,6 @@
                                                 <div class="panel-body">
                                                     <form enctype="application/x-www-form-urlencoded" role="form" action="/api/user_order/prepare" method="POST" name="form77" id="form77">
                                                                                                                 <div class="form-group">
-                                                            <label class="control-label" for="from_addr">from_addr</label>
-                                                            <input type="array" class="form-control input-sm" id="from_addr" required placeholder="必须,取宠地址信息" name="from_addr">
-                                                        </div>
-                                                                                                                <div class="form-group">
                                                             <label class="control-label" for="from_addr[longitude]">from_addr[longitude]</label>
                                                             <input type="string" class="form-control input-sm" id="from_addr[longitude]" required placeholder="必须,取宠地址经度" name="from_addr[longitude]">
                                                         </div>
@@ -3243,18 +3215,10 @@
                                                             <input type="string" class="form-control input-sm" id="from_addr[mobile]" required placeholder="必须,取宠手机号" name="from_addr[mobile]">
                                                         </div>
                                                                                                                 <div class="form-group">
-                                                            <label class="control-label" for="string">string</label>
-                                                            <input type="No" class="form-control input-sm" id="string" required placeholder="from_addr[city]" name="string">
-                                                        </div>
-                                                                                                                <div class="form-group">
                                                             <label class="control-label" for="from_addr[address]">from_addr[address]</label>
                                                             <input type="string" class="form-control input-sm" id="from_addr[address]" required placeholder="必须,取宠详细地址" name="from_addr[address]">
                                                         </div>
                                                                                                                 <div class="form-group">
-                                                            <label class="control-label" for="to_addr">to_addr</label>
-                                                            <input type="array" class="form-control input-sm" id="to_addr" required placeholder="必须,收宠地址信息" name="to_addr">
-                                                        </div>
-                                                                                                                <div class="form-group">
                                                             <label class="control-label" for="to_addr[longitude]">to_addr[longitude]</label>
                                                             <input type="string" class="form-control input-sm" id="to_addr[longitude]" required placeholder="必须,收宠地址经度" name="to_addr[longitude]">
                                                         </div>
@@ -3271,10 +3235,6 @@
                                                             <input type="string" class="form-control input-sm" id="to_addr[mobile]" required placeholder="必须,收宠手机号" name="to_addr[mobile]">
                                                         </div>
                                                                                                                 <div class="form-group">
-                                                            <label class="control-label" for="string">string</label>
-                                                            <input type="No" class="form-control input-sm" id="string" required placeholder="to_addr[city]" name="string">
-                                                        </div>
-                                                                                                                <div class="form-group">
                                                             <label class="control-label" for="to_addr[address]">to_addr[address]</label>
                                                             <input type="string" class="form-control input-sm" id="to_addr[address]" required placeholder="必须,收宠详细地址" name="to_addr[address]">
                                                         </div>
@@ -3515,12 +3475,6 @@
                                                 </thead>
                                                 <tbody>
                                                                                                         <tr>
-                                                        <td>from_addr</td>
-                                                        <td>array</td>
-                                                        <td>是</td>
-                                                        <td>必须,取宠地址信息</td>
-                                                    </tr>
-                                                                                                        <tr>
                                                         <td>from_addr[longitude]</td>
                                                         <td>string</td>
                                                         <td>是</td>
@@ -3545,24 +3499,12 @@
                                                         <td>必须,取宠手机号</td>
                                                     </tr>
                                                                                                         <tr>
-                                                        <td>from_addr[city]</td>
-                                                        <td>string</td>
-                                                        <td>是</td>
-                                                        <td>必须,取宠城市</td>
-                                                    </tr>
-                                                                                                        <tr>
                                                         <td>from_addr[address]</td>
                                                         <td>string</td>
                                                         <td>是</td>
                                                         <td>必须,取宠详细地址</td>
                                                     </tr>
                                                                                                         <tr>
-                                                        <td>to_addr</td>
-                                                        <td>array</td>
-                                                        <td>是</td>
-                                                        <td>必须,收宠地址信息</td>
-                                                    </tr>
-                                                                                                        <tr>
                                                         <td>to_addr[longitude]</td>
                                                         <td>string</td>
                                                         <td>是</td>
@@ -3587,12 +3529,6 @@
                                                         <td>必须,收宠手机号</td>
                                                     </tr>
                                                                                                         <tr>
-                                                        <td>to_addr[city]</td>
-                                                        <td>string</td>
-                                                        <td>是</td>
-                                                        <td>必须,收宠城市</td>
-                                                    </tr>
-                                                                                                        <tr>
                                                         <td>to_addr[address]</td>
                                                         <td>string</td>
                                                         <td>是</td>
@@ -3705,10 +3641,6 @@
                                                 <div class="panel-body">
                                                     <form enctype="application/x-www-form-urlencoded" role="form" action="/api/user_order/submit" method="get" name="form78" id="form78">
                                                                                                                 <div class="form-group">
-                                                            <label class="control-label" for="from_addr">from_addr</label>
-                                                            <input type="array" class="form-control input-sm" id="from_addr" required placeholder="必须,取宠地址信息" name="from_addr">
-                                                        </div>
-                                                                                                                <div class="form-group">
                                                             <label class="control-label" for="from_addr[longitude]">from_addr[longitude]</label>
                                                             <input type="string" class="form-control input-sm" id="from_addr[longitude]" required placeholder="必须,取宠地址经度" name="from_addr[longitude]">
                                                         </div>
@@ -3725,18 +3657,10 @@
                                                             <input type="string" class="form-control input-sm" id="from_addr[mobile]" required placeholder="必须,取宠手机号" name="from_addr[mobile]">
                                                         </div>
                                                                                                                 <div class="form-group">
-                                                            <label class="control-label" for="from_addr[city]">from_addr[city]</label>
-                                                            <input type="string" class="form-control input-sm" id="from_addr[city]" required placeholder="必须,取宠城市" name="from_addr[city]">
-                                                        </div>
-                                                                                                                <div class="form-group">
                                                             <label class="control-label" for="from_addr[address]">from_addr[address]</label>
                                                             <input type="string" class="form-control input-sm" id="from_addr[address]" required placeholder="必须,取宠详细地址" name="from_addr[address]">
                                                         </div>
                                                                                                                 <div class="form-group">
-                                                            <label class="control-label" for="to_addr">to_addr</label>
-                                                            <input type="array" class="form-control input-sm" id="to_addr" required placeholder="必须,收宠地址信息" name="to_addr">
-                                                        </div>
-                                                                                                                <div class="form-group">
                                                             <label class="control-label" for="to_addr[longitude]">to_addr[longitude]</label>
                                                             <input type="string" class="form-control input-sm" id="to_addr[longitude]" required placeholder="必须,收宠地址经度" name="to_addr[longitude]">
                                                         </div>
@@ -3753,10 +3677,6 @@
                                                             <input type="string" class="form-control input-sm" id="to_addr[mobile]" required placeholder="必须,收宠手机号" name="to_addr[mobile]">
                                                         </div>
                                                                                                                 <div class="form-group">
-                                                            <label class="control-label" for="to_addr[city]">to_addr[city]</label>
-                                                            <input type="string" class="form-control input-sm" id="to_addr[city]" required placeholder="必须,收宠城市" name="to_addr[city]">
-                                                        </div>
-                                                                                                                <div class="form-group">
                                                             <label class="control-label" for="to_addr[address]">to_addr[address]</label>
                                                             <input type="string" class="form-control input-sm" id="to_addr[address]" required placeholder="必须,收宠详细地址" name="to_addr[address]">
                                                         </div>
@@ -16937,7 +16857,7 @@
 
                 </div>
                 <div class="col-md-6" align="right">
-                    Generated on 2021-10-20 15:17:41 <a href="./" target="_blank">宠365</a>
+                    Generated on 2021-10-21 09:21:50 <a href="./" target="_blank">宠365</a>
                 </div>
             </div>