Browse Source

没有间推了,代理改名了,代理不需要直推数量了

lizhen_gitee 1 year ago
parent
commit
c05facb041
2 changed files with 346 additions and 125 deletions
  1. 5 125
      application/index/controller/Plantask.php
  2. 341 0
      application/index/controller/Plantaskold.php

+ 5 - 125
application/index/controller/Plantask.php

@@ -12,60 +12,7 @@ class Plantask extends Controller
         exit;
         exit;
     }
     }
 
 
-    //确定用不到了
-    //10天不买的用户,第10天结算完,第11天自动滑落,上下级自动衔接
-    //该用户的所有下级,的推荐人,改成此人的上级。
-    public function auto_hualuo(){
-        $nowtime = time();
-        $toweek  = date('w',$nowtime);
-        if($toweek == 1){
-            //周日不结算(自动到下周一),所以,周一不滑落
-            echo '周一不滑落';
-            exit;
-        }
 
 
-        //最后买东西是11天前了,intro_num在这里使用,减少查到的数据量
-        $tendays_ago = hualuo_tendays_ago();
-//        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();
-//        dump($my_down);
-        if(!empty($my_down)){
-            $new_intro_uid = $user['intro_uid'] ?: 0;
-            $rs_down = Db::name('user')->where('intro_uid',$user['id'])->update(['intro_uid'=>$new_intro_uid]);
-            if($rs_down === false){
-                Db::rollback();
-                $this->error('操作失败');
-            }
-        }
-
-
-        //记录个日志
-        $log = [
-            'info' => '用户['.$user['id'].']滑落,其名下直推有['.implode(',',array_column($my_down,'id')).'],都改到其上级['.$user['intro_uid'].']名下',
-            'createtime' => $nowtime,
-        ];
-        $log_id = Db::name('intro_log')->insertGetId($log);
-        if(!$log_id){
-            Db::rollback();
-            $this->error('操作失败');
-        }
-
-
-        //提交
-        Db::commit();
-        echo '完成更新'.$user['id'];
-    }
 
 
 
 
     //推荐奖励
     //推荐奖励
@@ -89,18 +36,6 @@ class Plantask extends Controller
 
 
         foreach($order_list as $key => $order){
         foreach($order_list as $key => $order){
 
 
-            //买家立刻得到积分
-            /*if($order['order_shouyi'] > 0){
-                $rs_wallet = $walletmodel->lockChangeAccountRemain($order['user_id'],'score',$order['order_shouyi'],5,'下单收益','unishop_order',$order['id'],$order['user_id']);
-                if($rs_wallet['status'] === false){
-                    echo $rs_wallet['msg'];
-                    Db::rollback();
-                    exit;
-                }
-            }*/
-
-
-
             //直推代理商获益
             //直推代理商获益
             $intro_uid = Db::name('user')->where('id',$order['user_id'])->value('intro_uid');
             $intro_uid = Db::name('user')->where('id',$order['user_id'])->value('intro_uid');
             if($intro_uid){
             if($intro_uid){
@@ -133,39 +68,6 @@ class Plantask extends Controller
                     }
                     }
                 }
                 }
             }
             }
-            $score = 0;
-            //上上级
-            $top_uid = Db::name('user')->where('id',$intro_uid)->value('intro_uid');
-            if($top_uid){
-
-                //直推的第一单金额,烧伤
-                $map = [
-                    'status' => 1,
-                    'have_paid' => ['gt',0],
-                    'user_id' => $top_uid,
-                ];
-                $first_order = Db::name('unishop_order')->where($map)->order('have_paid asc')->value('order_price');
-                $first_order = $first_order ?: 0;
-
-                $jishu = $order['order_price'];
-                $remark_shaoshang = '';
-                if($first_order < $order['order_price']){
-                    $jishu = $first_order;
-                    $remark_shaoshang = '(烧伤)';
-                }
-
-                //奖励
-                $bili = config('site.orderpaid_jiantui_bili') ?: 1;
-                $score = bcdiv(bcmul($jishu,$bili,2),100,2);
-                if($score > 0){
-                    $rs_wallet = $walletmodel->lockChangeAccountRemain($top_uid,'score',$score,4,'间推代理奖励'.$remark_shaoshang,'unishop_order',$order['id'],$order['user_id']);
-                    if($rs_wallet['status'] === false){
-                        echo $rs_wallet['msg'];
-                        Db::rollback();
-                        exit;
-                    }
-                }
-            }
 
 
             //订单完成
             //订单完成
             $rs_order = Db::name('unishop_order')->where('id',$order['id'])->update(['paidtasktime'=>time()]);
             $rs_order = Db::name('unishop_order')->where('id',$order['id'])->update(['paidtasktime'=>time()]);
@@ -230,15 +132,13 @@ class Plantask extends Controller
             exit;
             exit;
         }
         }
 
 
-        //获取直推人数
-        $intro_count = Db::name('user')->where('intro_uid',$intro_uid)->count();
-//        dump($intro_count);
+
         //获取业绩
         //获取业绩
         $yeji = $this->jiesuan_yeji($intro_uid);
         $yeji = $this->jiesuan_yeji($intro_uid);
 //        dump($yeji);
 //        dump($yeji);
 
 
         //确定代理商等级,拿对应比例
         //确定代理商等级,拿对应比例
-        $rule = $this->jiesuan_daili_level($intro_count,$yeji);
+        $rule = $this->jiesuan_daili_level($yeji);
         if($rule['bili'] == 0){
         if($rule['bili'] == 0){
             echo '达不到第一级,结束';
             echo '达不到第一级,结束';
             Db::name('unishop_order')->where('id',$order['id'])->update(['jiesuantime'=>time()]);
             Db::name('unishop_order')->where('id',$order['id'])->update(['jiesuantime'=>time()]);
@@ -251,34 +151,14 @@ class Plantask extends Controller
         $score = bcdiv(bcmul($order['order_shouyi'],$rule['bili'],2),100,2);
         $score = bcdiv(bcmul($order['order_shouyi'],$rule['bili'],2),100,2);
 //        dump($score);
 //        dump($score);
         if($score > 0){
         if($score > 0){
-            $rs_wallet = model('wallet')->lockChangeAccountRemain($intro_uid,'score',$score,6,$rule['level'].'级代理','unishop_order',$order['id'],$order['user_id']);
+            $rs_wallet = model('wallet')->lockChangeAccountRemain($intro_uid,'score',$score,6,$rule['name'].'代理','unishop_order',$order['id'],$order['user_id']);
             if($rs_wallet['status'] === false){
             if($rs_wallet['status'] === false){
                 echo $rs_wallet['msg'];
                 echo $rs_wallet['msg'];
                 Db::rollback();
                 Db::rollback();
                 exit;
                 exit;
             }
             }
         }
         }
-        //给间推
-        if($rule['level'] == 1){  //一级代理要有间推
-
-            $two_intro_uid   = Db::name('user')->where('id',$intro_uid)->value('intro_uid');//上上级id
-            if($two_intro_uid > 0){
-                $two_intro_count = Db::name('user')->where('intro_uid',$two_intro_uid)->count();//上上级的直推
-//                $two_yeji = $this->jiesuan_yeji($two_intro_uid);//上上级的业绩
-                if($two_intro_count >= $rule['intronum']){//>=5个才能拿。上上级的业绩肯定比上级高,如果大于等于五个,就同级了,因为极差,反而拿不到,这里很矛盾。除非重新计算上上级的等级
-                    $score_2 = $score;//目前是一样的,不再次计算了
-                    if($score_2 > 0){
-                        $rs_wallet = model('wallet')->lockChangeAccountRemain($two_intro_uid,'score',$score_2,7,$rule['level'].'级代理(间推)','unishop_order',$order['id'],$order['user_id']);
-                        if($rs_wallet['status'] === false){
-                            echo $rs_wallet['msg'];
-                            Db::rollback();
-                            exit;
-                        }
-                    }
-                }
-            }
 
 
-        }
 
 
         //标记为结算
         //标记为结算
         $jiesuan = Db::name('unishop_order')->where('id',$order['id'])->update(['jiesuantime'=>$nowtime]);
         $jiesuan = Db::name('unishop_order')->where('id',$order['id'])->update(['jiesuantime'=>$nowtime]);
@@ -322,14 +202,14 @@ class Plantask extends Controller
 
 
 
 
     //确认代理等级及规则
     //确认代理等级及规则
-    private function jiesuan_daili_level($intronum,$yeji){
+    private function jiesuan_daili_level($yeji){
 
 
         $data = Db::name('zongdai')->order('id asc')->select();
         $data = Db::name('zongdai')->order('id asc')->select();
 //        dump($data);
 //        dump($data);
 
 
         $return = $data[0]; //默认第0个
         $return = $data[0]; //默认第0个
         foreach($data as $key => $rule){
         foreach($data as $key => $rule){
-            if($intronum >= $rule['intronum'] && $yeji >= $rule['yeji']){
+            if($yeji >= $rule['yeji']){
                 $return = $rule;
                 $return = $rule;
             }
             }
         }
         }

+ 341 - 0
application/index/controller/Plantaskold.php

@@ -0,0 +1,341 @@
+<?php
+
+namespace app\index\controller;
+use think\Controller;
+use think\Db;
+use app\common\model\Wallet;
+
+class Plantask extends Controller
+{
+    public function index()
+    {
+        exit;
+    }
+
+    //确定用不到了
+    //10天不买的用户,第10天结算完,第11天自动滑落,上下级自动衔接
+    //该用户的所有下级,的推荐人,改成此人的上级。
+    public function auto_hualuo(){
+        $nowtime = time();
+        $toweek  = date('w',$nowtime);
+        if($toweek == 1){
+            //周日不结算(自动到下周一),所以,周一不滑落
+            echo '周一不滑落';
+            exit;
+        }
+
+        //最后买东西是11天前了,intro_num在这里使用,减少查到的数据量
+        $tendays_ago = hualuo_tendays_ago();
+//        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();
+//        dump($my_down);
+        if(!empty($my_down)){
+            $new_intro_uid = $user['intro_uid'] ?: 0;
+            $rs_down = Db::name('user')->where('intro_uid',$user['id'])->update(['intro_uid'=>$new_intro_uid]);
+            if($rs_down === false){
+                Db::rollback();
+                $this->error('操作失败');
+            }
+        }
+
+
+        //记录个日志
+        $log = [
+            'info' => '用户['.$user['id'].']滑落,其名下直推有['.implode(',',array_column($my_down,'id')).'],都改到其上级['.$user['intro_uid'].']名下',
+            'createtime' => $nowtime,
+        ];
+        $log_id = Db::name('intro_log')->insertGetId($log);
+        if(!$log_id){
+            Db::rollback();
+            $this->error('操作失败');
+        }
+
+
+        //提交
+        Db::commit();
+        echo '完成更新'.$user['id'];
+    }
+
+
+    //推荐奖励
+    //订单支付回调之后的任务,每分钟运行
+    //烧伤
+    public function auto_order_paid(){
+
+        $map = [
+            'status' => 1,
+            'have_paid' => ['gt',0],
+            'paidtasktime' => 0,
+        ];
+        $order_list = Db::name('unishop_order')->where($map)->order('id asc')->limit(10)->select();
+        if(empty($order_list)){
+            echo '没有数据';
+            exit;
+        }
+
+        Db::startTrans();
+        $walletmodel = new Wallet();
+
+        foreach($order_list as $key => $order){
+
+            //买家立刻得到积分
+            /*if($order['order_shouyi'] > 0){
+                $rs_wallet = $walletmodel->lockChangeAccountRemain($order['user_id'],'score',$order['order_shouyi'],5,'下单收益','unishop_order',$order['id'],$order['user_id']);
+                if($rs_wallet['status'] === false){
+                    echo $rs_wallet['msg'];
+                    Db::rollback();
+                    exit;
+                }
+            }*/
+
+
+
+            //直推代理商获益
+            $intro_uid = Db::name('user')->where('id',$order['user_id'])->value('intro_uid');
+            if($intro_uid){
+
+                //直推的第一单金额,烧伤
+                $map = [
+                    'status' => 1,
+                    'have_paid' => ['gt',0],
+                    'user_id' => $intro_uid,
+                ];
+                $first_order = Db::name('unishop_order')->where($map)->order('have_paid asc')->value('order_price');
+                $first_order = $first_order ?: 0;
+
+                $jishu = $order['order_price'];
+                $remark_shaoshang = '';
+                if($first_order < $order['order_price']){
+                    $jishu = $first_order;
+                    $remark_shaoshang = '(烧伤)';
+                }
+
+                //奖励
+                $bili = config('site.orderpaid_zhitui_bili') ?: 5;
+                $score = bcdiv(bcmul($jishu,$bili,2),100,2);
+                if($score > 0){
+                    $rs_wallet = $walletmodel->lockChangeAccountRemain($intro_uid,'score',$score,3,'直推代理奖励'.$remark_shaoshang,'unishop_order',$order['id'],$order['user_id']);
+                    if($rs_wallet['status'] === false){
+                        echo $rs_wallet['msg'];
+                        Db::rollback();
+                        exit;
+                    }
+                }
+            }
+            $score = 0;
+            //上上级
+            $top_uid = Db::name('user')->where('id',$intro_uid)->value('intro_uid');
+            if($top_uid){
+
+                //直推的第一单金额,烧伤
+                $map = [
+                    'status' => 1,
+                    'have_paid' => ['gt',0],
+                    'user_id' => $top_uid,
+                ];
+                $first_order = Db::name('unishop_order')->where($map)->order('have_paid asc')->value('order_price');
+                $first_order = $first_order ?: 0;
+
+                $jishu = $order['order_price'];
+                $remark_shaoshang = '';
+                if($first_order < $order['order_price']){
+                    $jishu = $first_order;
+                    $remark_shaoshang = '(烧伤)';
+                }
+
+                //奖励
+                $bili = config('site.orderpaid_jiantui_bili') ?: 1;
+                $score = bcdiv(bcmul($jishu,$bili,2),100,2);
+                if($score > 0){
+                    $rs_wallet = $walletmodel->lockChangeAccountRemain($top_uid,'score',$score,4,'间推代理奖励'.$remark_shaoshang,'unishop_order',$order['id'],$order['user_id']);
+                    if($rs_wallet['status'] === false){
+                        echo $rs_wallet['msg'];
+                        Db::rollback();
+                        exit;
+                    }
+                }
+            }
+
+            //订单完成
+            $rs_order = Db::name('unishop_order')->where('id',$order['id'])->update(['paidtasktime'=>time()]);
+            if($rs_order === false){
+                echo '更新失败';
+                Db::rollback();
+                exit;
+            }
+
+            //循环结束
+        }
+
+        Db::commit();
+        echo '成功'.count($order_list);
+    }
+
+    //总代奖励
+    //自动结算10日前订单,每分钟运行
+    public function auto_jiesuan_order(){
+        $nowtime = time();
+        $toweek  = date('w',$nowtime);
+        if($toweek == 0){
+            //周日不结算(自动到下周一结算)
+            echo '周日不结算';
+            exit;
+        }
+
+        $tendays_ago = jiesuan_tendays_ago();
+//        echo $tendays_ago;exit;
+        //
+        Db::startTrans();
+        $order_map = [
+            'status'      => 1,
+            'have_paid'   => ['lt',$tendays_ago],
+            'jiesuantime' => 0,
+        ];
+        $order = Db::name('unishop_order')->where($order_map)->where('have_paid','gt',0)->order('id asc')->lock(true)->find();
+        if(empty($order)){
+            echo '没有数据';
+            Db::rollback();
+            exit;
+        }
+//        dump($order);
+
+        //买家得到收益
+        if($order['order_shouyi'] > 0){
+            $rs_wallet = model('wallet')->lockChangeAccountRemain($order['user_id'],'score',$order['order_shouyi'],5,'下单收益','unishop_order',$order['id'],$order['user_id']);
+            if($rs_wallet['status'] === false){
+                echo $rs_wallet['msg'];
+                Db::rollback();
+                exit;
+            }
+        }
+
+
+        //为上级做贡献,找到上级
+        $intro_uid = Db::name('user')->where('id',$order['user_id'])->value('intro_uid');
+        if(empty($intro_uid)){
+            echo '没有上级,结束';
+            Db::name('unishop_order')->where('id',$order['id'])->update(['jiesuantime'=>time()]);
+            Db::commit();
+            exit;
+        }
+
+        //获取直推人数
+        $intro_count = Db::name('user')->where('intro_uid',$intro_uid)->count();
+//        dump($intro_count);
+        //获取业绩
+        $yeji = $this->jiesuan_yeji($intro_uid);
+//        dump($yeji);
+
+        //确定代理商等级,拿对应比例
+        $rule = $this->jiesuan_daili_level($intro_count,$yeji);
+        if($rule['bili'] == 0){
+            echo '达不到第一级,结束';
+            Db::name('unishop_order')->where('id',$order['id'])->update(['jiesuantime'=>time()]);
+            Db::commit();
+            exit;
+        }
+//        dump($rule);
+
+        //给直推
+        $score = bcdiv(bcmul($order['order_shouyi'],$rule['bili'],2),100,2);
+//        dump($score);
+        if($score > 0){
+            $rs_wallet = model('wallet')->lockChangeAccountRemain($intro_uid,'score',$score,6,$rule['level'].'级代理','unishop_order',$order['id'],$order['user_id']);
+            if($rs_wallet['status'] === false){
+                echo $rs_wallet['msg'];
+                Db::rollback();
+                exit;
+            }
+        }
+        //给间推
+        if($rule['level'] == 1){  //一级代理要有间推
+
+            $two_intro_uid   = Db::name('user')->where('id',$intro_uid)->value('intro_uid');//上上级id
+            if($two_intro_uid > 0){
+                $two_intro_count = Db::name('user')->where('intro_uid',$two_intro_uid)->count();//上上级的直推
+//                $two_yeji = $this->jiesuan_yeji($two_intro_uid);//上上级的业绩
+                if($two_intro_count >= $rule['intronum']){//>=5个才能拿。上上级的业绩肯定比上级高,如果大于等于五个,就同级了,因为极差,反而拿不到,这里很矛盾。除非重新计算上上级的等级
+                    $score_2 = $score;//目前是一样的,不再次计算了
+                    if($score_2 > 0){
+                        $rs_wallet = model('wallet')->lockChangeAccountRemain($two_intro_uid,'score',$score_2,7,$rule['level'].'级代理(间推)','unishop_order',$order['id'],$order['user_id']);
+                        if($rs_wallet['status'] === false){
+                            echo $rs_wallet['msg'];
+                            Db::rollback();
+                            exit;
+                        }
+                    }
+                }
+            }
+
+        }
+
+        //标记为结算
+        $jiesuan = Db::name('unishop_order')->where('id',$order['id'])->update(['jiesuantime'=>$nowtime]);
+        if($jiesuan === false){
+            echo '修改状态失败';
+            Db::rollback();
+            exit;
+        }
+        //批发的都卖出
+        $pifa = Db::name('unishop_order_product')->where('order_id',$order['id'])->update(['pifa_status'=>1]);
+        if($pifa === false){
+            echo '修改状态失败2';
+            Db::rollback();
+            exit;
+        }
+
+        Db::commit();
+        echo '完成'.$order['id'];
+    }
+    //获取业绩
+    private function jiesuan_yeji($user_id){
+        //找到所有下级
+        //$user_ids = Db::name('user')->where('find_in_set(:intro_ids,intro_ids)', ['intro_ids' => $user_id])->column('id');
+        $commonuser = new \app\common\model\User();
+        $user_ids = $commonuser->my_down_all($user_id,[$user_id]);
+//        dump($user_ids);
+
+        if(empty($user_ids)){
+            return 0;
+        }
+
+        $map = [
+            'status' => 1,
+            'have_paid' => ['gt',0],
+            'user_id' => ['IN',$user_ids],
+        ];
+        $yeji = Db::name('unishop_order')->where($map)->sum('order_price');
+        return $yeji;
+    }
+
+
+
+    //确认代理等级及规则
+    private function jiesuan_daili_level($intronum,$yeji){
+
+        $data = Db::name('zongdai')->order('id asc')->select();
+//        dump($data);
+
+        $return = $data[0]; //默认第0个
+        foreach($data as $key => $rule){
+            if($intronum >= $rule['intronum'] && $yeji >= $rule['yeji']){
+                $return = $rule;
+            }
+        }
+
+        return $return;
+    }
+
+
+}