美文网首页程序员
史上最简单的多级分销机制后台和API设计

史上最简单的多级分销机制后台和API设计

作者: 一梦付浮生 | 来源:发表于2018-11-19 11:52 被阅读340次
在后台APP接口开发中可能经常性的会遇到多级分销机制,邀请的下线消费返佣,于是我左百度右百度,也没有找到一套比较合适的方案,然后只能动动聪明的大脑想想了,于是乎,我脑子里突然划过了一种方案,在邀请码上做手脚。

我们来看看三级的例子:

AAAAA    AAAAA-BBBBB     AAAAA-BBBBB-CCCCC

在C邀请了D的情况下自动将A直接切断了:

BBBBB-CCCCC-DDDDD

大兄弟们,有没有看出什么名堂来我们是不是可以直接找出我们的上线来了,这样又有人要说了要是有10级这样岂不是邀请码特别长别人填怎么办法?字符串压缩了解下。

AAA-BBB-CCC-DDD-EEE-FFF-GGG-HHH-III-JJJ-KKK

下面我们进入正题

1.查询我的所有下线信息

//TODO这行SQL是查询我的所有下线信息 
SELECT  * FROM  APP_USER_INFO WHERE
invite_code LIKE 'XXXXXX%' AND invite_code != 'XXXXXX'

2.邀请码生成工具类

public class InviteCode {

    /**
     * 生成数字加字母N位随机数
     * @param n 长度
     * @return
     */
    private static String getItemID( int n )
    {
        String val = "";
        Random random = new Random();
        for ( int i = 0; i < n; i++ )
        {
            String str = random.nextInt( 2 ) % 2 == 0 ? "num" : "char";
            if ( "char".equalsIgnoreCase( str ) )
            { // 产生字母
                int nextInt = random.nextInt( 2 ) % 2 == 0 ? 65 : 97;
                // System.out.println(nextInt + "!!!!"); 1,0,1,1,1,0,0
                val += (char) ( nextInt + random.nextInt( 26 ) );
            }
            else if ( "num".equalsIgnoreCase( str ) )
            { // 产生数字
                val += String.valueOf( random.nextInt( 10 ) );
            }
        }
        return val;
    }

    /**
     * 生成邀请码
     * @param lengths 邀请码长度
     * @param inviteCode 上线邀请码
     * @param level 分销等级
     * @return
     */
    public static String getInviteCodeLevel(int lengths,String inviteCode,Integer level){
        String[] s = inviteCode.split("-");
        if (s.length == level){
            s = ArrayUtils.remove(s,0);
            return StringUtils.join(s,"-") +"-"+ getItemID(lengths).toUpperCase();
        }else{
            return inviteCode + "-" + getItemID(lengths).toUpperCase();
        }
    }

    /**
     * 无上线生成邀请码
     * @param lengths 邀请码长度
     * @return
     */
    public static String getInviteCode(int lengths){
        return getItemID(lengths).toUpperCase();
    }
}

3.注册方法类

/**
     * 注册
     * @param phone 手机号
     * @param password 密码
     * @param vcode 验证码
     * @param jgId 极光推送ID
     * @param inviteCode 邀请码
     * @return
     * @throws UnsupportedEncodingException
     * @throws NoSuchAlgorithmException
     */
    @PostMapping("/register")
    @ResponseBody
    @LoginRequired
    public Response Register(String phone,String password,String vcode,String jgId,String inviteCode) throws UnsupportedEncodingException, NoSuchAlgorithmException {
        if (StringUtils.isBlank(phone) || StringUtils.isBlank(password) || StringUtils.isBlank(vcode) || StringUtils.isBlank(jgId)){
            return Response.custom().failure("缺少必要参数!");
        }
        UserInfo info = findByUser("phone",phone);
        if (info != null){
            return Response.custom().failure("账户已存在!");
        }
        String code = redisTemplate.opsForValue().get("1"+phone);
        if (vcode == null){
            return Response.custom().failure("验证码已失效!");
        }
        if (!vcode.equals(code)){
            return Response.custom().failure("验证码错误!");
        }

        //添加个人信息
        info = new UserInfo();
        //生成邀请码 同理邀请码的取出可以看下生成邀请码方法,字符串使用了固定格式的有规律哦!
        info.setInviteCode(StringUtils.isNotBlank(inviteCode)?InviteCode.getInviteCodeLevel(getMarginInfo().getInviteCodeLength(),inviteCode
                ,getMarginInfo().getLevel()):InviteCode.getInviteCode(getMarginInfo().getInviteCodeLength()));
        info.setJgId(jgId);
        info.setPhone(phone);
        info.setPassword(MD5Util.EncoderByMd5(password));
        infoService.addUser(info);
        info = null;
        info = findByUser("phone",phone);
        if (info == null){
            return Response.custom().failure("注册失败!");
        }
        //生成Token并返回
        String token = authenticationService.getToken(info);
        return Response.custom().ok().addParams(token);
    }

相关文章

  • 史上最简单的多级分销机制后台和API设计

    在后台APP接口开发中可能经常性的会遇到多级分销机制,邀请的下线消费返佣,于是我左百度右百度,也没有找到一套比较合...

  • 史上最简单的tableview多级菜单

    在我们的日常开发工作中,UITableview用的频率是很高的,主要用来进行数据展示,以及其他的必要时候的使用。 ...

  • 店长宝微信小程序后台功能简介(十四)——分销管理

    继续为大家介绍店长宝微信小程序的后台功能,今天介绍后台中大家最关注的分销管理功能。 分销管理功能:分销设置、分销商...

  • 2019-01-10

    传销:多级分销体系、产品劣质、高入门费。

  • 初识iOS事情处理机制

    参考:史上最详细的iOS之事件的传递和响应机制-原理篇iOS触摸事件全家桶史上最详细的iOS之事件的传递和响应机制...

  • 一个高效率的多级分销系统后端设计

    后台开发过程中经常遇到多级分销的问题,要求邀请的下线消费进行返佣,本文介绍一下我用nosql实现的方案,欢迎大家提...

  • 19.1.10课

    传销的三个特点多级分销、产品劣质、高入门费。

  • MaxMall微信分销系统

    前言 MaxMall电商分销系统致力于打造一套适合微信分销的电商平台,该系统模拟三级分销系统,采用三级分销多级分润...

  • API设计

    API设计 Google API 设计思想 1、设计 API设计原则简单可用一致 HTTP 常用方法get 获...

  • 响应者链

    史上最详细的iOS之事件的传递和响应机制Event Delivery: The Responder Chain

网友评论

    本文标题:史上最简单的多级分销机制后台和API设计

    本文链接:https://www.haomeiwen.com/subject/tipofqtx.html