소스 검색

feat: NC-55: 会员转账新规则.

zhangl 1 년 전
부모
커밋
1031c4bd1b
1개의 변경된 파일53개의 추가작업 그리고 7개의 파일을 삭제
  1. 53 7
      common/models/forms/TransferForm.php

+ 53 - 7
common/models/forms/TransferForm.php

@@ -257,7 +257,8 @@ SQL;
         }
 
         // 3. 如果发起人是普通会员,则只能转给自己推荐网的某个节点
-        $sqlT =<<<SQL
+        // 上级节点
+        $sqlUp =<<<SQL
             WITH recursive t_rec AS 
             (
                 SELECT
@@ -294,14 +295,59 @@ SQL;
                 t_rec
 SQL;
         // 上级
-        $relationNodeAll = \Yii::$app->db->createCommand($sqlT)
-            ->bindValue(':USER_NAME' , $this->toUserName)
+        $relationNodeUp = \Yii::$app->db->createCommand($sqlUp)
+            ->bindValue(':USER_NAME' , $fromUser['USER_NAME'])
             ->queryAll();
 
-        $relationNodeAll = array_column($relationNodeAll, 'USER_NAME');
-        if (!in_array($fromUser['USER_NAME'], $relationNodeAll)) {
-            $this->addError($attribute, '转账失败:转入会员不是您的上级');
-            return null;
+        $relationNodeUp = array_column($relationNodeUp, 'USER_NAME');
+        unset($relationNodeUp[$fromUser['USER_NAME']]);
+        if (!in_array($this->toUserName, $relationNodeUp)) {
+            // 下级节点
+            $sqlFloor =<<<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;
+            // 下级
+            $relationNodeFloor = \Yii::$app->db->createCommand($sqlFloor)
+                ->bindValue(':USER_NAME' , $this->toUserName)
+                ->queryAll();
+            $relationNodeFloor = array_column($relationNodeFloor, 'USER_NAME');
+            if (!in_array($fromUser['USER_NAME'], $relationNodeFloor)) {
+                $this->addError($attribute, '转账失败:转入会员不是您的上级');
+                return null;
+            }
         }
 
         return true;