فهرست منبع

feat: NG-15: 新会员注册时增加国家与语言选项.

zhangl 1 سال پیش
والد
کامیت
3f1cd4b70f
1فایلهای تغییر یافته به همراه46 افزوده شده و 15 حذف شده
  1. 46 15
      frontendApi/modules/v1/controllers/UserController.php

+ 46 - 15
frontendApi/modules/v1/controllers/UserController.php

@@ -740,27 +740,58 @@ class UserController extends BaseController {
             ]);
         }
 
-        // 实际推荐人是否是推荐人的推荐网上级
-        $periodNum = Period::instance()->getNowPeriodNum();
-
-        $relation = new Relation();
-        $allowable = $relation->loopRelationParentDo($userId, function ($parent) use ($actualId, $periodNum) {
-            $parentUser = CalcCache::getUserInfo($parent['PARENT_UID'], $periodNum);
-            if ($parentUser['USER_ID'] == $actualId) {
-                return self::LOOP_FINISH;
-            }
-
-            unset($parent);
-        });
-
-        if ($allowable) {
+        // 实际推荐人必须是推荐人的推荐网上级
+        $sqlUp =<<<SQL
+            WITH recursive t_rec AS 
+            (
+                SELECT
+                    m.USER_ID,
+                    U.USER_NAME,
+                    m.PARENT_UID,
+                    U2.USER_NAME AS PARENT_NAME,
+                    1 AS node_level 
+                FROM
+                    AR_USER_RELATION_NEW m 
+                    LEFT JOIN AR_USER U ON U.ID = m.USER_ID
+                    LEFT JOIN AR_USER U2 ON U2.ID = m.PARENT_UID
+                WHERE
+                    U.USER_NAME = :USER_NAME 
+                    
+                UNION ALL
+                
+                SELECT
+                    t1.USER_ID,
+                    U.USER_NAME,
+                    t1.PARENT_UID,
+                    U2.USER_NAME AS PARENT_NAME,
+                    t2.node_level + 1 -- 结点层级
+                    
+                FROM
+                    AR_USER_RELATION_NEW t1
+                    JOIN t_rec t2 ON t2.PARENT_UID = t1.USER_ID
+                    LEFT JOIN AR_USER U ON U.ID = t1.USER_ID
+                    LEFT JOIN AR_USER U2 ON U2.ID = t1.PARENT_UID
+                ) 
+            SELECT
+                * 
+            FROM
+                t_rec
+SQL;
+        // 查询推荐人的所有上级
+        $relationNodeUp = \Yii::$app->db->createCommand($sqlUp)
+            ->bindValue(':USER_NAME' , $recommenderName)
+            ->queryAll();
+
+        $relationNodeUp = array_column($relationNodeUp, 'USER_NAME');
+        unset($relationNodeUp[$recommenderName]);
+
+        if (in_array($recommenderActualName, $relationNodeUp)) {
             return static::notice([
                 'REAL_NAME' => $recommenderActual['REAL_NAME'],
                 'userId' => $recommenderActual['ID'],
             ]);
         }
 
-
         return static::notice(Yii::t('ctx', 'fillSponsorUpline'), 400);
     }