WIN-2308041133\Administrator 2 月之前
父節點
當前提交
1109b8e65e
共有 2 個文件被更改,包括 48 次插入12 次删除
  1. 47 11
      app/services/order/StoreOrderSuccessServices.php
  2. 1 1
      app/services/user/UserRechargeServices.php

+ 47 - 11
app/services/order/StoreOrderSuccessServices.php

@@ -197,6 +197,9 @@ class StoreOrderSuccessServices extends BaseServices
                 ];
 
 // 处理小组关系
+                // 获取小组人数上限配置
+                $groupMaxNum = sys_config('gift_group_num', 10);
+                
                 // 判断直推上级在该商品下是否有下级
                 $hasSubordinate = $giftGroupService->getOne([
                     'product_id' => $product_id,
@@ -204,15 +207,48 @@ class StoreOrderSuccessServices extends BaseServices
                 ]);
 
                 if ($hasSubordinate) {
-                    // 直推上级已有下级,新成员的group_pid是最后一个下级
+                    // 直推上级已有下级,获取所有下级
                     $groupMembers = $giftGroupService->getList([
                         'product_id' => $product_id,
                         'pid' => $spread_uid
                     ], '*', 0, 0, 'create_time ASC');
 
-                    $lastMember = $groupMembers[count($groupMembers) - 1];
-                    $data['group_pid'] = $lastMember['uid'];
-                    $data['fake_pid'] = $spread_uid;
+                    // 判断小组是否满人
+                    if (count($groupMembers) >= $groupMaxNum) {
+                        // 小组满人,从后往前查找未满的直推下级小组
+                        $foundGroup = false;
+                        
+                        // 倒序遍历小组成员,查找未满的直推下级小组
+                        for ($i = count($groupMembers) - 1; $i >= 0; $i--) {
+                            $member = $groupMembers[$i];
+                            
+                            // 查找该成员的直推下级
+                            $subGroupMembers = $giftGroupService->getList([
+                                'product_id' => $product_id,
+                                'pid' => $member['uid']
+                            ], '*', 0, 0, 'create_time ASC');
+                            
+                            // 如果该成员没有下级,或者下级小组未满,可以加入
+                            if (count($subGroupMembers) < $groupMaxNum) {
+                                $data['group_pid'] = $member['uid'];
+                                $data['fake_pid'] = $spread_uid;
+                                $foundGroup = true;
+                                break;
+                            }
+                        }
+                        
+                        // 如果所有成员的直推下级小组都满了,建立新小组
+                        if (!$foundGroup) {
+                            $lastMember = $groupMembers[count($groupMembers) - 1];
+                            $data['group_pid'] = 0;
+                            $data['fake_pid'] = $lastMember['uid'];
+                        }
+                    } else {
+                        // 小组未满,新成员的group_pid是最后一个下级
+                        $lastMember = $groupMembers[count($groupMembers) - 1];
+                        $data['group_pid'] = $lastMember['uid'];
+                        $data['fake_pid'] = $spread_uid;
+                    }
                 } else {
                     // 直推上级没有下级,这是该推广人的第一个下级,建立新小组
                     $data['group_pid'] = 0;
@@ -277,7 +313,7 @@ class StoreOrderSuccessServices extends BaseServices
             $frozenTime = time() + intval(sys_config('extract_time')) * 86400;
 
             // 直推上级分成
-            $directBrokerage = $brokerage_price * 0.3;
+            $directBrokerage = $brokerage_price * (sys_config('gift_direct_referral', 10) / 100);
             @file_put_contents('quanju4.txt', json_encode($userRelation) . "-礼包推荐关系表\r\n", 8);
 
             if ($userRelation['pid'] == $userRelation['fake_pid']) {
@@ -295,7 +331,7 @@ class StoreOrderSuccessServices extends BaseServices
                 ], $balance, $order['id']);
             } else {
                 // 真直推上级和假直推上级不同,各分50%
-                $halfBrokerage = $directBrokerage * 0.5;
+                $halfBrokerage = $directBrokerage * (sys_config('gift_spread_spot_bonus', 50) / 100);
 
                 // 真上级分得50%
                 $pid_brokerage = $userServices->getOne(['uid' => $userRelation['pid']]);
@@ -321,12 +357,12 @@ class StoreOrderSuccessServices extends BaseServices
             }
 
             // 见点奖处理
-            $spotBrokerage = $brokerage_price * 0.025;
+            $spotBrokerage = $brokerage_price * (sys_config('gift_spot_bonus', 2.5) / 100);
             $totalSpots = 0;
 
             // 1. 真直推链上找15人
             $currentUid = $userRelation['pid'];
-            for ($i = 0; $i < 15; $i++) {
+            for ($i = 0; $i < sys_config('gift_spot_bonus_up', 15); $i++) {
                 $parentRelation = $giftGroupService->getOne([
                     'product_id' => $product_id,
                     'uid' => $currentUid
@@ -353,7 +389,7 @@ class StoreOrderSuccessServices extends BaseServices
             if ($currentIndex !== false) {
                 @file_put_contents('quanju4.txt', '找到当前用户在链中的位置: ' . $currentIndex . ', 链成员总数: ' . count($chainMembers) . "\r\n", 8);
                 // 从当前用户的下一个位置开始找,最多找5人
-                for ($i = $currentIndex + 1; $i < count($chainMembers) && $totalSpots < 5; $i++) {
+                for ($i = $currentIndex + 1; $i < count($chainMembers) && $totalSpots < sys_config('gift_spot_bonus_down', 5); $i++) {
                     $memberBrokerage = $userServices->getOne(['uid' => $chainMembers[$i]['uid']]);
                     $userServices->bcInc($chainMembers[$i]['uid'], 'brokerage_price', $spotBrokerage, 'uid');
                     $balance = bcadd($memberBrokerage['brokerage_price'], $spotBrokerage);
@@ -372,11 +408,11 @@ class StoreOrderSuccessServices extends BaseServices
             }
 
             // 3. 如果同组下级不足5人,找自己的直推下级
-            if ($totalSpots < 5) {
+            if ($totalSpots < sys_config('gift_spot_bonus_down', 5)) {
                 $directSubordinates = $giftGroupService->getList([
                     'product_id' => $product_id,
                     'pid' => $order['uid']
-                ], '*', 0, 5 - $totalSpots, 'create_time asc');
+                ], '*', 0, sys_config('gift_spot_bonus_down', 5) - $totalSpots, 'create_time asc');
 
                 foreach ($directSubordinates as $subordinate) {
                     $subBrokerage = $userServices->getOne(['uid' => $subordinate['uid']]);

+ 1 - 1
app/services/user/UserRechargeServices.php

@@ -364,7 +364,7 @@ class UserRechargeServices extends BaseServices
         }
 
         // 计算手续费
-        $transferFeeRate = sys_config('transfer_fee', 0);
+        $transferFeeRate = sys_config('yue_transfer_fee', 0);
         $transferFee = bcmul((string)$price, bcdiv((string)$transferFeeRate, '100', 4), 2);
         $actualAmount = bcsub((string)$price, $transferFee, 2);