From 39ce3f4768c068d53d9322d39727cbdce7236d42 Mon Sep 17 00:00:00 2001
From: 何书鹏 <heshupeng@bronet.cn>
Date: Thu, 3 Mar 2022 14:26:03 +0800
Subject: [PATCH] 给骑手佣金

---
 application/admin/lang/zh-cn/litestore_rider_rule.php | 14 ++++++++------
 application/admin/view/litestore_rider_rule/edit.html | 16 ++++++++++++++--
 application/api/controller/Order.php                  | 28 ++++++++++++++++++++++++----
 application/api/controller/Rider.php                  |  2 +-
 public/assets/js/backend/litestore_rider_rule.js      |  4 +++-
 5 files changed, 50 insertions(+), 14 deletions(-)

diff --git a/application/admin/lang/zh-cn/litestore_rider_rule.php b/application/admin/lang/zh-cn/litestore_rider_rule.php
index 86986f6..b30f3c7 100644
--- a/application/admin/lang/zh-cn/litestore_rider_rule.php
+++ b/application/admin/lang/zh-cn/litestore_rider_rule.php
@@ -1,10 +1,12 @@
 <?php
 
 return [
-    'First'          => '首公里',
-    'First_fee'      => '运费(元)',
-    'Additional'     => '续公里',
-    'Max_distance'     => '最大距离',
-    'Additional_fee' => '运费(元)',
-    'Goods_total_price' => '商品起送金额(元)'
+    'First'                 => '首公里',
+    'First_fee'             => '收用户运费(元)',
+    'First_rider_fee'       => '给骑手运费(元)',
+    'Additional'            => '续公里',
+    'Additional_fee'        => '收用户运费(元)',
+    'Additional_rider_fee'  => '给骑手运费(元)',
+    'Max_distance'          => '最大距离',
+    'Delivery_threshold'    => '商品起送金额(元)'
 ];
diff --git a/application/admin/view/litestore_rider_rule/edit.html b/application/admin/view/litestore_rider_rule/edit.html
index c417e96..d11ccc0 100644
--- a/application/admin/view/litestore_rider_rule/edit.html
+++ b/application/admin/view/litestore_rider_rule/edit.html
@@ -13,6 +13,12 @@
         </div>
     </div>
     <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('First_rider_fee')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-first_rider_fee" data-rule="required" min="0" class="form-control" step="0.01" name="row[first_rider_fee]" type="number" value="{$row.first_rider_fee|htmlentities}">
+        </div>
+    </div>
+    <div class="form-group">
         <label class="control-label col-xs-12 col-sm-2">{:__('Additional')}:</label>
         <div class="col-xs-12 col-sm-8">
             <input id="c-additional" data-rule="required" min="0" class="form-control" name="row[additional]" type="number" value="{$row.additional|htmlentities}">
@@ -25,15 +31,21 @@
         </div>
     </div>
     <div class="form-group">
+        <label class="control-label col-xs-12 col-sm-2">{:__('Additional_rider_fee')}:</label>
+        <div class="col-xs-12 col-sm-8">
+            <input id="c-additional_rider_fee" data-rule="required" min="0" class="form-control" step="0.01" name="row[additional_rider_fee]" type="number" value="{$row.additional_rider_fee|htmlentities}">
+        </div>
+    </div>
+    <div class="form-group">
         <label class="control-label col-xs-12 col-sm-2">{:__('Max_distance')}:</label>
         <div class="col-xs-12 col-sm-8">
             <input id="c-max_distance" data-rule="required" min="0" class="form-control" step="1" name="row[max_distance]" type="number" value="{$row.max_distance|htmlentities}">
         </div>
     </div>
     <div class="form-group">
-        <label class="control-label col-xs-12 col-sm-2">{:__('Goods_total_price')}:</label>
+        <label class="control-label col-xs-12 col-sm-2">{:__('Delivery_threshold')}:</label>
         <div class="col-xs-12 col-sm-8">
-            <input id="c-goods_total_price" data-rule="required" min="0" class="form-control" step="1" name="row[goods_total_price]" type="number" value="{$row.goods_total_price|htmlentities}">
+            <input id="c-delivery_threshold" data-rule="required" min="0" class="form-control" step="1" name="row[delivery_threshold]" type="number" value="{$row.delivery_threshold|htmlentities}">
         </div>
     </div>
     <div class="form-group layer-footer">
diff --git a/application/api/controller/Order.php b/application/api/controller/Order.php
index 51c3c1a..caaa31e 100644
--- a/application/api/controller/Order.php
+++ b/application/api/controller/Order.php
@@ -323,7 +323,8 @@ class Order extends Api
     'code':'1',
     'msg':'计算运费'
     'data':
-        "price": "37574.00" 总价
+        "price": "37574.00", 总价
+        "delivery_threshold": "20.00", 起送价
     })
      */
     public function freightCalculation()
@@ -342,7 +343,11 @@ class Order extends Api
         $lng2 = $admin_address['lng'];
         $sum_price = $this->distancePrice($lat1,$lng1,$lat2,$lng2,$goods_total_price);
         if ($sum_price === false) $this->error('地址超出配送距离');
-        $this->success('计算运费',['price'=>$sum_price]);
+        $delivery_threshold = Db::name('litestore_rider_rule')->value('delivery_threshold');
+        $this->success('计算运费',[
+            'price' => $sum_price,
+            'delivery_threshold' => $delivery_threshold
+        ]);
     }
 
     /**
@@ -504,6 +509,20 @@ class Order extends Api
         $sum_price += $distance_price; // 订单总价
         $order_no = 'LQ-'.time().mt_rand(1000,9999); // 订单号
         $couponprice = isset($coupon['price'])?$coupon['price']:0;  // 优惠价格
+
+        // 给骑手佣金
+        $config = Db::name('litestore_rider_rule')->find();
+        $distance = ceil(getDistance($lat1,$lng1,$lat2,$lng2));
+        if ($distance > $config['first']){
+            $first_rider_fee = $config['first_rider_fee'];
+            $subdistance = $distance-$config['first'];
+            $count = ceil(bcdiv($subdistance,$config['additional'],1));
+            $second_rider_price = bcmul($count,$config['additional_rider_fee'],2);
+            $rider_price = bcadd($first_rider_fee,$second_rider_price,2);
+        }else{
+            $rider_price = $config['first_rider_fee'];
+        }
+
         // 订单信息
         $order = [
             'order_no' => $order_no,
@@ -512,7 +531,8 @@ class Order extends Api
             'pay_price' => bcsub($sum_price,$couponprice,2),  // 支付总价
             'express_price' => $distance_price,  // 骑手费用
             'user_id' => $user_id,
-            'user_coupon_id' => $coupon_id > 0 ? $coupon_id : 0
+            'user_coupon_id' => $coupon_id > 0 ? $coupon_id : 0,
+            'rider_price' => $rider_price
         ];
 
         // 添加订单
@@ -633,7 +653,7 @@ class Order extends Api
         $rider_order->sendtime = time(); //送达时间
         $rider_order->save();
         // 发放订单运费
-        \app\common\model\User::money($order->express_price,$order->rider_user_id,'订单运费');
+        \app\common\model\User::money($order->rider_price,$order->rider_user_id,'订单运费');
 
         $this->success('收货成功');
     }
diff --git a/application/api/controller/Rider.php b/application/api/controller/Rider.php
index 2aa49fe..b50bf44 100644
--- a/application/api/controller/Rider.php
+++ b/application/api/controller/Rider.php
@@ -339,7 +339,7 @@ class Rider extends Api
         $rider_order->sendtime = time(); //送达时间
         $rider_order->save();
         // 发放订单运费
-        User::money($order->express_price,$order->rider_user_id,'订单运费');
+        User::money($order->rider_price,$order->rider_user_id,'订单运费');
 
         $this->success('送达成功',$order);
     }
diff --git a/public/assets/js/backend/litestore_rider_rule.js b/public/assets/js/backend/litestore_rider_rule.js
index 8100d0b..afac38f 100644
--- a/public/assets/js/backend/litestore_rider_rule.js
+++ b/public/assets/js/backend/litestore_rider_rule.js
@@ -31,10 +31,12 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefin
                         {field: 'id', title: __('Id')},
                         {field: 'first', title: __('First'), operate:'BETWEEN'},
                         {field: 'first_fee', title: __('First_fee'), operate:'BETWEEN'},
+                        {field: 'first_rider_fee', title: __('First_rider_fee'), operate:'BETWEEN'},
                         {field: 'additional', title: __('Additional'), operate:'BETWEEN'},
                         {field: 'additional_fee', title: __('Additional_fee'), operate:'BETWEEN'},
+                        {field: 'additional_rider_fee', title: __('Additional_rider_fee'), operate:'BETWEEN'},
                         {field: 'max_distance', title: __('Max_distance'), operate:'BETWEEN'},
-                        {field: 'goods_total_price', title: __('Goods_total_price'), operate:'BETWEEN'},
+                        {field: 'delivery_threshold', title: __('Delivery_threshold'), operate:'BETWEEN'},
                         // {field: 'create_time', title: __('Create_time'), operate:'RANGE', addclass:'datetimerange', autocomplete:false, formatter: Table.api.formatter.datetime},
                         {field: 'operate', title: __('Operate'), table: table, events: Table.api.events.operate, formatter: Table.api.formatter.operate}
                     ]
--
libgit2 0.24.0