Blogger Information
Blog 81
fans 1
comment 0
visits 124590
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
三级分销,
有什么是忘不了的的博客
Original
2000 people have browsed it

三级分销,不管是一级分销,二级分销,还是三级分销。都是根据三级分销来做的。

相关数据库:

    user(用户表): 需要添加 '冻结佣&金、可提佣&金、已提佣&金、一级会员、二级会员、三级会员' 字段

CREATE TABLE `user` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `pid` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '父ID',
  `nickname` varchar(50) NOT NULL DEFAULT '' COMMENT '昵称',
  `head` varchar(200) NOT NULL DEFAULT '' COMMENT '头像 从小程序获取',
  `mobile` varchar(11) NOT NULL DEFAULT '' COMMENT '手机号',
  `email` varchar(50) NOT NULL DEFAULT '',
  `money` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '用户金额',
  `total_amount` decimal(10,2) unsigned NOT NULL DEFAULT '0.00' COMMENT '消费累计',
  `reg_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '注册时间',
  `openid` varchar(200) NOT NULL DEFAULT '' COMMENT '微信验证后返回openid',
  `token` varchar(32) NOT NULL DEFAULT '',
  `token_time` int(10) unsigned NOT NULL DEFAULT '0',
  `money_frozen` decimal(10,2) unsigned NOT NULL DEFAULT '0.00' COMMENT '冻结佣&金',
  `money_cash` decimal(10,2) unsigned NOT NULL DEFAULT '0.00' COMMENT '可提佣&金',
  `money_cashed` decimal(10,2) unsigned NOT NULL DEFAULT '0.00' COMMENT '已提佣&金',
  `first_member` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '一级会员',
  `second_member` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '二级会员',
  `third_member` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '三级会员',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=MyISAM AUTO_INCREMENT=35 DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;

    user_relation(用户关系表):

CREATE TABLE `fox_user_relation` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `pid` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '上级用户id' ,
  `level` tinyint(1) unsigned NOT NULL DEFAULT '1' COMMENT '当前用户是上级用户的几级分销' ,
  `uid` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '用户id',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=MyISAM AUTO_INCREMENT=8 DEFAULT CHARSET=utf8 ROW_FORMAT=FIXED;

    distribute(分销订单表):

CREATE TABLE `distribute` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `order_sn` varchar(20) NOT NULL DEFAULT '' COMMENT '订单号',
  `uid` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '用户ID',
  `buyer_id` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '买家ID',
  `money` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '佣&金',
  `money_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '获佣时间',
  `state` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '佣&金状态 0未付 1已冻结 2解除冻结',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=14 DEFAULT CHARSET=latin1 ROW_FORMAT=COMPACT;

 money_apply(用户佣&金可提表):

CREATE TABLE `fox_money_apply` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `uid` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '用户ID',
  `money` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '可提金额',
  `alipay_account` varchar(50) NOT NULL DEFAULT '' COMMENT '支付宝账号',
  `alipay_name` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '支付宝姓名',
  `apply_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '申请时间',
  `state` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '审核状态 0审核中 1已打款',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=latin1 ROW_FORMAT=COMPACT;

几张表的关系

// 分销系统大体流程
// 用户下&单-未支付:后台开启分销功能,此用户有上级,分销订单表增加记录,最多三条,状态为未付
// 支付成功:后台开启分销功能,此用户有上级,改分销订单表中状态为已冻结,用户表更新冻结佣&金
// 确认收货:用户表冻结佣&金转可提佣&金和分销订单表状态改为解除冻结
// 用户提=现:增加可提表一条记录,修改用户表信息

    当用户注册时:判断用户是否是其他用户推荐注册的,如果是,在用户关系表(user_relation)中生成多则三条少则一条的用户关系数据。

获取当前用户的上级用户的一级上级和二级上级。如果存在则添加对应的数据:如用户(uid)11,

    2020-04-01_164819.png

    // 用户下&单-未支付:后台开启分销功能,此用户有上级,分销订单表(distribute)增加记录,最多三条,状态为未付

当用户11下订单后,寻找他的一级上级,二级上级,三级上级,存在则添加记录,根据不同的等级佣&金比例得到佣&金值。

2020-04-01_165222.png

// 支付成功:后台开启分销功能,此用户有上级,改分销订单表(distribute)中状态为已冻结,用户表(user)更新冻结佣&金

if($res = $this->checkDistribute($uid)){//判断后台是否开启分销并且用户是否有上级 
    Db::name('distribute')->where('order_sn', $order['order_sn'])->update(['state'=>1]);
    // 获取用户ID和对应佣&金
    $dis_data = Db::name('distribute')->where('order_sn', $order['order_sn'])->column('uid,money');
    //更新用户表冻结佣&金
    foreach ($dis_data as $key => $value) {
        Db::name('user')->where('id', $key)->setInc('money_frozen', $value);
    }
}

//确认收货:用户表冻结佣&金转可提佣&金和分销订单表状态改为解除冻结

if($res = $this->checkDistribute($uid)){//判断后台是否开启分销并且用户是否有上级
    //获取订单号
    $order_sn = Db::name('order')->where('id',$oid)->value('order_sn');
    // 更新分销订单表状态改为解除冻结
    Db::name('distribute')->where('order_sn', $order_sn)->update(['state'=>2]);
    // 获取用户ID和对应佣&金
    $dis_data = Db::name('distribute')->where('order_sn', $order_sn)->column('uid,money');
    //更新用户表冻结佣&金转可提佣&金
    foreach ($dis_data as $key => $value) {
        Db::name('user')->where('id', $key)->setDec('money_frozen', $value);
        Db::name('user')->where('id', $key)->setInc('money_cash', $value);
    }
}

//用户提:增加可提表一条记录,修改用户表信息

当用户可提时:1、先判断用户登录状态 。2、获取用户可提金额。3、获取最低可提金额。4、判断是否可体现,5、可提,用户表可提金额减少,已提金额增加。6、增加一条提记录

2020-04-01_171520.png




Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post