|
|
@@ -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']]);
|