Przeglądaj źródła

自动滑落,修改网体

lizhen_gitee 1 rok temu
rodzic
commit
86ec607b40

+ 5 - 3
application/common/library/Auth.php

@@ -176,6 +176,8 @@ class Auth
             'nickname'  => $this->get_rand_nick_name(),
             'avatar'   => config('default_avatar'),
             'introcode' => $this->getUinqueNo(8, $introcode),
+
+            'last_paytime' => $time,
         ];
         $params = array_merge($data, [
 //            'salt'      => Random::alnum(),
@@ -194,9 +196,9 @@ class Auth
             $intro = Db::name('user')->where(['id' => $extend['intro_uid']])->field('id,intro_level,intro_uid,intro_ids')->find();
 
             $params['intro_ids'] = $intro['intro_ids'] ? ($intro['intro_ids'].','.$intro['id']) : $intro['id']; //所有上级
-            if(!empty($params['intro_ids'])) {
+            /*if(!empty($params['intro_ids'])) {
                 $params['intro_ids_new'] = ','.$params['intro_ids'].','; //便于查询所有下级
-            }
+            }*/
             $params['intro_level'] = $intro['intro_level'] + 1; //推荐网层数
 
         }
@@ -247,7 +249,7 @@ class Auth
      * @param integer $num 直推增减人数
      * @param integer $team 团队增减人数
      */
-    public function addIntroNum($tjrname, $num, $team)
+    private function addIntroNum($tjrname, $num, $team)
     {
         //更新直推人数
         if($num < 0) {

+ 127 - 14
application/index/controller/Plantask.php

@@ -19,29 +19,142 @@ class Plantask extends Controller
         $toweek  = date('w',$nowtime);
         if($toweek == 1){
             //周日不结算(自动到下周一),所以,周一不滑落
+            echo '周一不滑落';
             exit;
         }
 
         //最后买东西是11天前了,intro_num在这里使用,减少查到的数据量
         $tendays_ago = $this->hualuo_tendays_ago();
-        $list = Db::name('user')->where('last_paytime','lt',$tendays_ago)->where('intro_num','gt',0)->select();
-
-        if(!empty($list)){
-            Db::startTrans();
-            foreach($list as $key => $user){
-                //我的下级,的推荐人,改成我的上级。也就是跳过了我
-                $rs = Db::name('user')->where('intro_uid',$user['id'])->update(['intro_uid',$user['intro_uid']]);
-                if($rs === false){
-                    Db::rollback();
-                }
-                //我的推荐人数变0
-                $rs2 = Db::name('user')->where('id',$user['id'])->update(['intro_num',0]);
-                if($rs2 === false){
+//        echo $tendays_ago;
+        Db::startTrans();
+        $user = Db::name('user')->where('last_paytime','lt',$tendays_ago)->where('intro_num','gt',0)->lock(true)->find();
+
+        if(empty($user)){
+            echo '没有数据';
+            Db::rollback();
+            exit;
+        }
+        dump($user);
+
+        //我的多个下级,的推荐人,改成我的上级。也就是跳过了我
+        $my_down = Db::name('user')->where('intro_uid',$user['id'])->select();
+        if(!empty($my_down)){
+            foreach($my_down as $key => $down_user){
+                $rs_down = $this->updateIntro($down_user['id'],$user['intro_uid']);
+                if($rs_down !== true){
+                    echo $rs_down;
                     Db::rollback();
+                    exit;
                 }
             }
-            Db::commit();
         }
+
+
+        //用不到了
+        //我滑落了,我的上级保持不变,下级都没了
+        /*$my_update = [
+            'intro_num' => 0,
+            'intro_num_all' => 0,
+        ];
+        $rs2 = Db::name('user')->where('id',$user['id'])->update($my_update);
+        if($rs2 === false){
+            Db::rollback();
+        }*/
+
+
+        //提交
+        Db::rollback();
+    }
+
+    private function updateIntro($uid,$intro_uid){
+
+        $db = Db::name("user");
+        //验证
+        if($uid == $intro_uid) $this->error("新邀请人不能是自己!");
+
+        $rs_user = $db->where(array('id' => $uid))->find();
+        if(!$rs_user) $this->error("会员 ".$uid.' 不存在! ');
+
+        $rs_intro = $db->where(array('id' => $intro_uid))->find();
+        if(!$rs_intro) $this->error("新邀请人 ".$intro_uid.' 不存在! ');
+
+        if($rs_user['intro_uid'] == $intro_uid) $this->error("新邀请人不能是原来的邀请人!");
+
+        //新推荐人不能是自己下级
+        if($rs_intro['intro_ids']) {
+            $ary = explode(',', $rs_intro['intro_ids']);
+            if(in_array($rs_user['id'], $ary)) {
+                $this->error("新邀请人不能是自己网体下级会员!");
+            }
+        }
+
+        //更新此会员的上级
+        $data = array();
+        $data['intro_ids']   = $rs_intro['intro_ids'] ?  $rs_intro['intro_ids'].','.$rs_intro['id'] : $rs_intro['id']; //新推荐人id序列
+        $data['intro_level'] = $rs_intro['intro_level'] + 1; //新层数
+        $data['intro_uid']   = $rs_intro['id']; //新推荐人id
+        $db->where(['id' => $uid])->update($data);
+
+        //更新此会员的下级会员
+        $num_c = $rs_intro['intro_level'] - $rs_user['intro_level'] + 1;//变化的层数差
+        $user_sub = $db->where("find_in_set('".$rs_user['id']."',intro_ids) > 0")->order("intro_level asc")->select(); //所有下级
+        foreach($user_sub as   $users) { //每个下级(因为是升序查询,所以每个的上级一定先更新完毕)
+            $data_sub = array();
+            $rs_tjr = $db->where(array('id' => $users['intro_uid']))->field('id,intro_ids')->find();
+            $data_sub['intro_level'] = $users['intro_level'] + $num_c; //新层数
+            $data_sub['intro_ids'] = $rs_tjr['intro_ids'].','.$rs_tjr['id']; //新推荐人id序列
+            $db->where(array('id' => $users['id']))->update($data_sub);//更新移动网体的会员
+        }
+
+        //更新直推、团队数
+        $team = count($user_sub) + 1;
+        if($rs_user['intro_uid']) {
+            $this->addIntroNum($rs_user['intro_uid'], -1, -$team); //有则 更新原上级
+        }
+        $this->addIntroNum($intro_uid, 1, $team); //更新新上级
+
+
+        $db->commit();
+        $this->success("更新成功");
+    }
+
+    /**
+     * 更新邀请码数和推荐团队人数
+     * @param string $tjrname 用户id
+     * @param integer $num 直推增减人数
+     * @param integer $team 团队增减人数
+     */
+    private function addIntroNum($tjrname, $num, $team)
+    {
+        //更新直推人数
+        if($num < 0) {
+            $rs1 = Db::name('user')->where(['id' => $tjrname])->setDec('intro_num', abs($num));
+        } else {
+            $rs1 = Db::name('user')->where(['id' => $tjrname])->setInc('intro_num', $num);
+        }
+        if($rs1 === false){
+            return false;
+        }
+        //更新团队
+        $rstjr = Db::name('user')->where(['id' => $tjrname])->field('id,intro_ids')->find();
+        if($rstjr) {
+            $tjstr = $rstjr['intro_ids'] ? ($rstjr['intro_ids'] . ',' . $rstjr['id']) : $rstjr['id'];
+            $tjstr = trim($tjstr, ',');
+            $arr_intro = explode(',', $tjstr);
+
+            if($team < 0) {
+                $rs2 = Db::name('user')->where(['id' => ['in', $arr_intro]])->setDec('intro_num_all', abs($team));
+            } else {
+                $rs2 = Db::name('user')->where(['id' => ['in', $arr_intro]])->setInc('intro_num_all', $team);
+            }
+
+            if($rs2 === false){
+                return false;
+            }
+
+        }
+
+        return true;
     }
 
     //滑落要按11天算