商城分销简单思路

三级分销执行分销规则往往都是用户确认收货时候,所以分销的方法最好也是在确认收货的方法里面。

代码如下:

//这个方法需要传递一个变量(订单号),作用在下面代码体现
function fenxiao($orderid){
        //因为是三级分销,所以有三个等级比例,同理,如果两级分销就会有两个。
        //查询数据库设置的比例
        $fenxiao = db('sys_fenxiao_bili')->where('id=1')->find();
        $bili[1] =  $fenxiao['level_1'];
        $bili[2] =  $fenxiao['level_2'];
        $bili[3] =  $fenxiao['level_3'];

        //通过订单号,获得购买者的ID(buyer_id)
        $order = $this->getDetail($orderid);
         //$pid 就是购买者ID
        $pid = $order['buyer_id'];、

        //实例化会员的流水账户,因为要写log日志。
        $member = new MemberAccount();

        //这里是循环遍历
        foreach ($bili as $k=>$v){
             //重点!!!
            //数据库里面有用户ID(uid)和用户的上级ID(pid)
            //db('sys_user')->where('uid='.$pid)->value('pid');  这句话就是查询他的上级pid,然后赋值为PID  
            //接着foreach循环查uid等于查出来的pid的值,以此类推。
           $pid = db('sys_user')->where('uid='.$pid)->value('pid');

           if($pid){
               if($order['fenxiao_money']>0){
                  //计算分销佣金
                   $money = $order['fenxiao_money']*$v/100;
                   //写入日志
                   $member->addMemberAccountData(0, 2, $pid, '1', $money, 8, $orderid, $k.'代返利');
               }
           }
        }
    }

上面的代码没有考虑返利时候会员级别有高有低的情况,并且不能一直追查上线,下面是修改的

   /*
     * 分销方法
     * zheng
     * */
    public function fenxiao($orderid)
    {

        //订单号查order_id
        // $orderid = db('ns_order')->where('order_no',$order_no)->value('order_id');
        //每个商品的级别价格
        $gid = db('ns_order_goods')->where('order_id',$orderid)->select();

        /**************************************************员工价格*/
        $staff = 0;
        foreach($gid as $k => $gg){

            //获得订单里面商品的ID   $gg['goods_id'];
            //获取数量
            $num = $gg['num'];
            //1,查员工价格
            $jgs = db('ns_goods_sku')->where('goods_id',json_decode($gg['goods_id']))->value('price_staff');
            $jg = $jgs * $num;
            $cc = $jg + $staff;
            $staff = $cc;
        }
//        echo $staff;
        /**************************************************代理价格*/
        $agent = 0;
        foreach($gid as $ag){
            //数量
            $num = $ag['num'];
            //查代理的价格
            $dl = db('ns_goods_sku')->where('goods_id',json_decode($ag['goods_id']))->value('price_agent');
            $dls = $dl * $num;
            $cc = $dls + $agent;
            $agent = $cc;
//            $agent += db('ns_goods_sku')->where('goods_id',json_decode($ag['goods_id']))->value('price_agent');
        }
//        dump($agent);
//        echo $agent;

        /*********************************************会员价格*/
        $vp = 0;
        foreach($gid as $vip)
        {
            //数量
            $num = $vip['num'];
            //查会员的价格
            $hy = db('ns_goods_sku')->where('goods_id',json_decode($vip['goods_id']))->value('price_vip');
            $hys = $hy * $num;
            $cc = $hys + $vp;
            $vp = $cc;
//            $vp += db('ns_goods_sku')->where('goods_id',json_decode($vip['goods_id']))->value('price_vip');
        }

        /*************************************************游客价格*/
        $p = 0;
        foreach($gid as $pr)
        {
            //数量
            $num = $pr['num'];
            //查游客的价格
            $yk = db('ns_goods_sku')->where('goods_id',json_decode($pr['goods_id']))->value('price');
            $yks = $yk * $num;
            $cc = $yks + $p;
            $p = $cc;
//            $p += db('ns_goods_sku')->where('goods_id',json_decode($pr['goods_id']))->value('price');
        }
//        echo $p;

        //通过orderid查用户ID
        $uid = db('ns_order')->where('order_id',$orderid)->value('buyer_id');

        //获取购买者level
        $u_level = db('ns_member')->where('uid',$uid)->value('member_level');    //
        $maxlevel = 0;      //初始最大级别
        for($i = 0; $i<100; $i++)
        {
            file_put_contents('./logs/'.$maxlevel,'1.txt'.PHP_EOL,FILE_APPEND);
            //查看等级 47游客  50会员  51代理  52员工
            $level = db('ns_member')->where('uid',$uid)->value('member_level');   //购买者等级  47   51
            if($level > $maxlevel){
                $maxlevel = $level;                                                 //maxlevel
            }
            //查购买用户的上级
            $pid = db('sys_user')->where('uid',$uid)->value('top');              //购买者上级ID
            //上级的级别
            $le = db('ns_member')->where('uid',$pid)->value('member_level');  //购买者上级等级   51    50


            if ($pid==0 || $pid == ''){
                break;
            }else{
                $uid = $pid;
            }
            //记录上级的最大值
//            $maxlevel = max($level,$le);

            if($le > $maxlevel)
            {
                $maxlevel = $le;                                                     //maxlevel

                $money =  $this->suan($level,$le,$staff,$agent,$vp,$p);
                if($money == 0)
                {

                    continue;

                }
                if($money == 100)
                {
                    break;
                }
                //执行返金币操作
                //判断用户余额
                $balance = db('ns_member_account')->where('uid',$pid)->value('balance');
                if(empty($balance)){
                    // $money=-$money;
                    $datas = [
                        'uid' => $pid,
                        'shop_id' => '0',
                        'point' => '0',
                        'balance' => $money,
                        'coin' => 0,
                        'member_cunsum' => '0',
                        'member_sum_point' => '0',
                        'dx_point' => '0'
                    ];
                    db('ns_member_account')->insert($datas);
                    //写入ns_member_account_records(会员流水账)记录表
                    $data = [
                        'uid' => $pid,
                        'shop_id' => '0',
                        'account_type' => '2',
                        'sign' => '1',
                        'number' => $money,
                        'from_type' => '11',  //在数据库添加上
                        'data_id' => $orderid,
                        'text' => '下级购买商品获得奖励',
                        'create_time' => date("Y-m-d H:i:s", time())

                    ];
                    db('ns_member_account_records')->insert($data);


                }else{
                    //更改用户余额
                    db('ns_member_account')->where('uid',$pid)->setInc('balance', $money);
                    //写入ns_member_account_records(会员流水账)记录表
                    $data = [
                        'uid' => $pid,
                        'shop_id' => '0',
                        'account_type' => '2',
                        'sign' => '1',
                        'number' => $money,
                        'from_type' => '11',  //在数据库添加上
                        'data_id' => $orderid,
                        'text' => '下级购买商品获得奖励',
                        'create_time' => date("Y-m-d H:i:s", time())

                    ];
                    db('ns_member_account_records')->insert($data);


                }
            }
        }

    }

    public function suan($a,$b,$staff,$agent,$vp,$p)
    {
        //$staff;//员工    $agent;代理  $vp;会员   $p;   youke

        if($a == 47 ){
            if($b == 47){
                return 0;
            }
            if($b == 50){
                return $p - $vp;
            }
            if($b == 51){
                return  $p - $agent ;
            }
            if($b == 52){
                return $p - $staff;
            }
        }
        if($a == 50){
            if($b == 47){
                return 0;
            }
            if($b == 50){
                return 0;
            }
            if($b == 51){
                return   $vp - $agent;
            }
            if($b == 52){
                return $vp - $staff;
            }
        }
        if($a == 51){
            if($b == 47){
                return 0;
            }
            if($b == 50){
                return 0;
            }
            if($b == 51){
                return 0;
            }
            if($b == 52){
                return $agent - $staff;
            }
        }
        if($a == 52){
            return 100;
        }

    }

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 201,924评论 5 474
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,781评论 2 378
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 148,813评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,264评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,273评论 5 363
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,383评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,800评论 3 393
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,482评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,673评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,497评论 2 318
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,545评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,240评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,802评论 3 304
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,866评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,101评论 1 258
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,673评论 2 348
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,245评论 2 341

推荐阅读更多精彩内容