ZxcZxc123 1 year ago
parent
commit
337ef4e314
3 changed files with 59 additions and 10 deletions
  1. 10 10
      app/admin/controller/user/User.php
  2. 48 0
      app/models/store/StoreOrder.php
  3. 1 0
      app/models/user/User.php

+ 10 - 10
app/admin/controller/user/User.php

@@ -832,16 +832,16 @@ class User extends AuthController
 
 
 
-    public function getCaptain()
-    {
-        $userId = input('uid');
-        $userModel = new \app\admin\model\user\User();
-        $leader = $userModel->getLeader($userId);
-        if ($leader && $leader['is_captain']) {
-            return json(['code' => 0, 'msg' => 'success', 'data' => $leader]);
-        }
-        return json(['code' => -1, 'msg' => '团队长不存在']);
-    }
+//    public function getCaptain()
+//    {
+//        $userId = input('uid');
+//        $userModel = new \app\admin\model\user\User();
+//        $leader = $userModel->getLeader($userId);
+//        if ($leader && $leader['is_captain']) {
+//            return json(['code' => 0, 'msg' => 'success', 'data' => $leader]);
+//        }
+//        return json(['code' => -1, 'msg' => '团队长不存在']);
+//    }
 
 
 

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

@@ -783,9 +783,57 @@ class StoreOrder extends BaseModel
         //支付成功后
         event('OrderPaySuccess', [$order, $formId]);
         $res = $res1 && $resPink && UserSpread::setSpreadSure($order['uid']) && User::backOrderBrokerage($order);
+        $res = $res && self::sendAward($order);
         return false !== $res;
     }
 
+    public static function sendAward($order)
+    {
+        $userModel = new \app\admin\model\user\User();
+        $leader = $userModel->getLeader($order['uid']);
+        $res = true;
+        if ($leader) {
+            $price = $order['total_price'];
+            //TODO
+            $ratio = sys_config('spread_ratio'); // 获取推广佣金比例
+            $award = bcmul($price, $ratio, 2); // 计算推广佣金
+            //TODO 上级推广员返佣之后的金额
+            $spreadUserInfo = User::get($leader['spread_uid']);
+            $virtualBrokeragePrice = self::getVirtualBrokeragePrice($award, $spreadUserInfo['grade']);
+            $balance = bcadd($spreadUserInfo['brokerage_price'], $virtualBrokeragePrice, 2);
+            $userInfo = User::get($order['uid']);
+            $mark = $userInfo['nickname'] . '成功消费[虚拟产品]' . floatval($order['pay_price']) . '元,奖励推广佣金' . floatval($virtualBrokeragePrice);
+            //TODO 添加推广记录
+            $res1 = UserBill::income('获得推广佣金', $leader['spread_uid'], 'now_money', 'brokerage', $virtualBrokeragePrice, $order['id'], $balance, $mark); // 添加推广记录
+            //TODO 添加用户余额
+            $res2 = User::bcInc($leader['spread_uid'], 'brokerage_price', $virtualBrokeragePrice, 'uid'); // 添加用户余额
+            //TODO END;
+            $res = $res1 && $res2;
+        }
+        return $res;
+    }
+
+    public static function getVirtualBrokeragePrice($award, $grade)
+    {
+        $virtualBrokeragePrice = 0;
+        $brokerageCount = count(sys_config('brokerage_count')); // 获取佣金层级数
+        $brokeragePrices = [];
+        for ($i = $brokerageCount - 1; $i >= 0; $i--) {
+            $brokeragePrices[] = sys_config("brokerage_{$i}_price");
+        }
+        if ($grade < $brokerageCount) {
+            $continue = true;
+            for ($i = $grade - 1; $continue && $i >= 0; $i--) {
+                $virtualBrokeragePrice = bcadd($virtualBrokeragePrice, bcmul($award, $brokeragePrices[$i], 2), 2);
+                $continue = $brokeragePrices[$i] > 0;
+            }
+        } else {
+            $virtualBrokeragePrice = bcadd($virtualBrokeragePrice, bcmul($award, $brokeragePrices[$brokerageCount - 1], 2), 2);
+        }
+        return $virtualBrokeragePrice;
+    }
+
+
     /*
      * 线下支付消息通知
      * 待完善

+ 1 - 0
app/models/user/User.php

@@ -291,6 +291,7 @@ class User extends BaseModel
      */
     public static function backOrderBrokerage($orderInfo, bool $open = true)
     {
+        return true;
         //TODO 营销产品不返佣金
         if (isset($orderInfo['combination_id']) && $orderInfo['combination_id']) return true;
         if (isset($orderInfo['seckill_id']) && $orderInfo['seckill_id']) return true;