WIN-2308041133\Administrator пре 1 недеља
родитељ
комит
8875bcb329

+ 76 - 0
app/services/order/StoreOrderSuccessServices.php

@@ -124,6 +124,7 @@ class StoreOrderSuccessServices extends BaseServices
         $spread_id = User::where('uid',$orderInfo['uid'])->value('spread_uid');
         if ($spread_id>0){
             self::spreadReward($spread_id,$orderInfo);
+            self::issueServiceFee($orderInfo['uid'],$orderInfo['order_type']);
         }
         return false !== $res;
     }
@@ -202,6 +203,81 @@ class StoreOrderSuccessServices extends BaseServices
         }
     }
 
+    /**
+     * 发放礼包/复购服务费
+     * 下级用户购买礼包或复购商品后,向上查找分销等级为V2或大于V2的用户,发放服务费
+     * @param int $uid 购买用户的UID
+     * @param int $orderType 订单类型:1=礼包商品,2=复购商品
+     * @return bool
+     */
+    public function issueServiceFee($uid, $orderType){
+        try {
+            // 根据订单类型获取服务费金额
+            $serviceAmount = $orderType === 1
+                ? floatval(sys_config('service_gift', 0))
+                : floatval(sys_config('service_repeat', 0));
+
+            if ($serviceAmount <= 0) {
+                return false;
+            }
+
+            // 获取分销等级表中grade >= 2的等级ID(V2及以上)
+            $qualifiedLevels = \app\model\agent\AgentLevel::where('grade', '>=', 2)
+                ->where('is_del', 0)
+                ->where('status', 1)
+                ->column('id');
+
+            if (empty($qualifiedLevels)) {
+                return false;
+            }
+
+            // 从购买用户开始,向上查找第一个V2或以上等级的用户
+            $currentUid = $uid;
+            while ($currentUid > 0) {
+                $spreadUid = User::where('uid', $currentUid)->value('spread_uid');
+                if (!$spreadUid || $spreadUid <= 0) {
+                    break;
+                }
+
+                $spreadAgentLevelId = User::where('uid', $spreadUid)->value('agent_level');
+                if (!$spreadAgentLevelId) {
+                    $currentUid = $spreadUid;
+                    continue;
+                }
+
+                // 检查上级的分销等级是否在V2及以上
+                if (in_array($spreadAgentLevelId, $qualifiedLevels)) {
+                    // 找到了,发放服务费
+                    /** @var UserServices $userServices */
+                    $userServices = app()->make(UserServices::class);
+                    /** @var UserBrokerageServices $userBrokerageServices */
+                    $userBrokerageServices = app()->make(UserBrokerageServices::class);
+
+                    $incomeType = $orderType === 1 ? 'service_gift' : 'service_repeat';
+                    $balance = $userServices->value(['uid' => $spreadUid], 'brokerage_price');
+
+                    $userBrokerageServices->income($incomeType, $spreadUid, [
+                        'number' => $serviceAmount,
+                    ], bcadd((string)$balance, (string)$serviceAmount, 2), 0);
+                    $userServices->bcInc($spreadUid, 'brokerage_price', $serviceAmount, 'uid');
+
+                    // 找到后停止查找
+                    break;
+                }
+
+                $currentUid = $spreadUid;
+            }
+
+            return true;
+        } catch (\Exception $e) {
+            @file_put_contents("quanju.txt", json_encode($e->getMessage())."-issueServiceFee报错内容\r\n", 8);
+            @file_put_contents("quanju.txt", json_encode($e->getLine())."-issueServiceFee报错位置\r\n", 8);
+            @file_put_contents("quanju.txt", json_encode($e->getFile())."-issueServiceFee报错文件\r\n", 8);
+            throw $e;
+        }
+    }
+
+
     /**
      * 发放核销订单线路奖励   定时任务
      * 针对分销等级为4的用户,统计其直推下级团队中门店核销订单数量

+ 14 - 0
app/services/user/UserBrokerageServices.php

@@ -169,6 +169,20 @@ class UserBrokerageServices extends BaseServices
             'status' => 1,
             'pm' => 1
         ],
+        'service_gift' => [
+            'title' => '获得礼包服务费',
+            'type' => 'service_gift',
+            'mark' => '下级购买礼包商品,奖励服务费{%number%}元',
+            'status' => 1,
+            'pm' => 1
+        ],
+        'service_repeat' => [
+            'title' => '获得复购服务费',
+            'type' => 'service_repeat',
+            'mark' => '下级购买复购商品,奖励服务费{%number%}元',
+            'status' => 1,
+            'pm' => 1
+        ],
     ];