博客列表 >三级分销,

三级分销,

有什么是忘不了的的博客
有什么是忘不了的的博客原创
2020年04月01日 17:35:102001浏览

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

相关数据库:

    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




声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议