Browse Source

订单10日收益

lizhen_gitee 1 year ago
parent
commit
52bde944ba

+ 0 - 85
application/api/controller/Demo.php

@@ -70,92 +70,7 @@ class Demo extends Api
         $this->success('返回成功', ['action' => 'test3']);
     }
 
-    //订单算奖金。计划任务的逻辑
-    public function test4(){
-        $order_id = 488359520289034240;
 
-        $product_list = Db::name('unishop_order_product')->where('order_id',$order_id)->select();//已支付
-        foreach($product_list as $key => $product){
-            //收益
-            $shouyi = bcmul($product['number'],$product['pifa_shouyi'],0);
 
-        }
-
-
-        $user_id = 1;
-        //我的下级数量
-        Db::name('user')->where('intro_uid',$user_id)->count();
-
-        //我的上级id
-        $my_intro_uid = Db::name('user')->where('id',$user_id)->value('intro_uid');
-
-        //我的上上级id
-        $two_intro_uid =Db::name('user')->where('id',$my_intro_uid)->value('intro_uid') ?: 0;
-
-
-    }
-
-    public function auto_order(){
-        $nowtime = time();
-        $toweek  = date('w',$nowtime);
-        if($toweek == 0){
-            //周日不结算(自动到下周一结算)
-            exit;
-        }
-
-        $tendays_ago = $this->jiesuan_tendays_ago();
-        //
-        Db::startTrans();
-        $order_map = [
-            'status' => 1,
-            'have_paid' => ['lt',$tendays_ago],
-            'jiesuantime' => 0,
-        ];
-        $order_list = Db::name('unishop_order')->where($order_map)->where('have_paid','gt',0)->limit(10)->select();
-        foreach($order_list as $key => $order){
-
-            //获取直推人数
-            //获取业绩
-            //确定代理商等级,拿对应比例
-            //给直推
-            //给间推
-
-            //标记为结算
-            $jiesuan = Db::name('unishop_order')->where('id',$order['id'])->update(['jiesuantime'=>$nowtime]);
-            //批发的都卖出
-            $pifa = Db::name('unishop_order_product')->where('order_id',$order['id'])->update(['pifa_status'=>1]);
-        }
-        Db::rollback();
-    }
-
-    //结算要按10天算
-    public function jiesuan_tendays_ago(){
-
-        $nowtime = time();
-
-        /*if(input('date','')){
-            $nowtime = strtotime(input('date',''));
-        }*/
-
-        $today   = strtotime(date('Y-m-d',$nowtime));
-
-        $toweek  = date('w',$nowtime);
-
-
-        $enum = [
-            1 => 11,
-            2 => 11,
-            3 => 11,
-            4 => 10,
-            5 => 10,
-            6 => 10,
-            0 => 10, //这一天没人结算
-        ];
-
-        $rs = $today - ($enum[$toweek] * 86400);
-//        dump(date('Y-m-d',$rs));
-
-        return $rs;
-    }
 
 }

+ 3 - 1
application/extra/wallet.php

@@ -7,8 +7,10 @@ return [
         1  => '邀请奖励',
         2  => '积分兑换',
         3  => '直推代理奖励', //支付后立刻获得
-        4  => '推代理奖励', //支付后立刻获得
+        4  => '推代理奖励', //支付后立刻获得
         5  => '下单收益',    //支付后立刻获得
+        6  => '总代奖励',
+        7  => '总代奖励(间推)',
     ],
     'moneyname' => [
         'money'    => '佣金',

+ 180 - 2
application/index/controller/Plantask.php

@@ -106,7 +106,7 @@ class Plantask extends Controller
             $intro_uid = Db::name('user')->where('id',$order['user_id'])->value('intro_uid');
             if($intro_uid){
                 $bili = config('site.orderpaid_zhitui_bili') ?: 5;
-                $score = bcdiv(bcmul($order['total_price'],$bili,2),100,2);
+                $score = bcdiv(bcmul($order['order_price'],$bili,2),100,2);
                 if($score > 0){
                     $rs_wallet = $walletmodel->lockChangeAccountRemain($intro_uid,'score',$score,3,'直推代理奖励','unishop_order',$order['id']);
                     if($rs_wallet['status'] === false){
@@ -121,7 +121,7 @@ class Plantask extends Controller
             $top_uid = Db::name('user')->where('id',$intro_uid)->value('intro_uid');
             if($top_uid){
                 $bili = config('site.orderpaid_jiantui_bili') ?: 1;
-                $score = bcdiv(bcmul($order['total_price'],$bili,2),100,2);
+                $score = bcdiv(bcmul($order['order_price'],$bili,2),100,2);
                 if($score > 0){
                     $rs_wallet = $walletmodel->lockChangeAccountRemain($top_uid,'score',$score,4,'间推代理奖励','unishop_order',$order['id']);
                     if($rs_wallet['status'] === false){
@@ -147,4 +147,182 @@ class Plantask extends Controller
         echo '成功';
     }
 
+    //自动结算10日前订单
+    public function auto_jiesuan_order(){
+        $nowtime = time();
+        $toweek  = date('w',$nowtime);
+        if($toweek == 0){
+            //周日不结算(自动到下周一结算)
+            echo '周日不结算';
+            exit;
+        }
+
+        $tendays_ago = $this->jiesuan_tendays_ago();
+        //
+        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();
+
+        //为上级做贡献,找到上级
+        $intro_uid = Db::name('user')->where('id',$order['user_id'])->value('intro_uid');
+        if(empty($intro_uid)){
+            //没有上级,结束
+            Db::name('unishop_order')->where('id',$order['id'])->update(['jiesuantime'=>time()]);
+            Db::commit();
+            exit;
+        }
+
+        //获取直推人数
+        $intro_number = Db::name('user')->where('intro_uid',$intro_uid)->count();
+
+        //获取业绩
+        $yeji = $this->jiesuan_yeji($intro_uid);
+
+        //确定代理商等级,拿对应比例
+        $rule = $this->jiesuan_daili_level($intro_number,$yeji);
+        if($rule['bili'] == 0){
+            //达不到第一级
+            Db::name('unishop_order')->where('id',$order['id'])->update(['jiesuantime'=>time()]);
+            Db::commit();
+            exit;
+        }
+
+        //给直推
+        $score = bcdiv(bcmul($order['order_shouyi'],$rule['bili'],2),100,2);
+        if($score > 0){
+            $rs_wallet = model('wallet')->lockChangeAccountRemain($intro_uid,'score',$score,6,$rule['level'].'级代理','unishop_order',$order['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();//上上级的直推
+                if($two_intro_count >= $rule['intronum']){
+                    $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']);
+                        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();
+    }
+    //获取业绩
+    private function jiesuan_yeji($user_id){
+        return 150000;
+    }
+
+    //确认代理等级及规则
+    private function jiesuan_daili_level($intronum,$yeji){
+        $data = [
+            [
+                'intronum' => 0,
+                'yeji'     => 0,
+                'bili'     => 0,
+                'level'    => 0,
+            ],
+            [
+                'intronum' => 5,
+                'yeji'     => 150000,
+                'bili'     => 1,
+                'level'    => 1,
+            ],
+            [
+                'intronum' => 10,
+                'yeji'     => 500000,
+                'bili'     => 2,
+                'level'    => 2,
+            ],
+            [
+                'intronum' => 15,
+                'yeji'     => 1000000,
+                'bili'     => 3,
+                'level'    => 3,
+            ],
+            [
+                'intronum' => 20,
+                'yeji'     => 3000000,
+                'bili'     => 4,
+                'level'    => 4,
+            ],
+            [
+                'intronum' => 25,
+                'yeji'     => 6000000,
+                'bili'     => 5,
+                'level'    => 5,
+            ],
+        ];
+
+        $return = $data[0]; //默认第0个
+        foreach($data as $key => $rule){
+            if($intronum >= $rule['intronum'] && $yeji >= $rule['bili']){
+                $return = $rule;
+            }
+        }
+
+        return $return;
+    }
+
+    //结算要按10天算
+    private function jiesuan_tendays_ago(){
+
+        $nowtime = time();
+
+        /*if(input('date','')){
+            $nowtime = strtotime(input('date',''));
+        }*/
+
+        $today   = strtotime(date('Y-m-d',$nowtime));
+
+        $toweek  = date('w',$nowtime);
+
+
+        $enum = [
+            1 => 11,
+            2 => 11,
+            3 => 11,
+            4 => 10,
+            5 => 10,
+            6 => 10,
+            0 => 10, //这一天没人结算
+        ];
+
+        $rs = $today - ($enum[$toweek] * 86400);
+//        dump(date('Y-m-d',$rs));
+
+        return $rs;
+    }
+
 }