3级分销(mysql存储过程写法)

BEGIN
 DECLARE sTemp TEXT ;
  /*父id*/
  DECLARE recomsTempChd TEXT ;
  /*子id*/
  DECLARE v_memberno INT DEFAULT 0 ;
  DECLARE v_arraymemberno INT DEFAULT 0 ;
  DECLARE v_recommemberno INT DEFAULT 0 ;
  DECLARE v_typeprice INT DEFAULT 0 ;
  DECLARE v_avg_cash INT DEFAULT 0 ;
  DECLARE v_avg_integral INT DEFAULT 0 ;
  DECLARE v_count INT DEFAULT 0 ;
  DECLARE v_count1 INT DEFAULT 0 ;
  DECLARE v_count2 INT DEFAULT 0 ;
  DECLARE v_count3 INT DEFAULT 0 ;
  DECLARE v_type INT DEFAULT 0 ;
  DECLARE v_jixiaoall DECIMAL DEFAULT 0 ;
  DECLARE v_child1000count INT DEFAULT 0 ;
  DECLARE v_node10000 TEXT DEFAULT '' ;
  DECLARE v_node10000count INT DEFAULT 0 ;
  DECLARE v_node20w TEXT DEFAULT '' ;
  DECLARE v_node100w TEXT DEFAULT '' ;
  DECLARE v_node300w TEXT DEFAULT '' ;
  DECLARE v_node900w TEXT DEFAULT '' ;
  DECLARE add20wprice DECIMAL DEFAULT 0 ;
  DECLARE add100wprice DECIMAL DEFAULT 0 ;
  DECLARE add300wprice DECIMAL DEFAULT 0 ;
  DECLARE add900wprice DECIMAL DEFAULT 0 ;
  DECLARE add20wchildcount INT DEFAULT 0 ;
  DECLARE add100wchildcount INT DEFAULT 0 ;
  DECLARE add300wchildcount INT DEFAULT 0 ;
  DECLARE add900wchildcount INT DEFAULT 0 ;
  DECLARE done INT DEFAULT - 1 ;
  DECLARE mycur CURSOR FOR 
  SELECT 
    memberno 
  FROM
    fathermembernos ;
  DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1 ;
  SET sTemp = `getfatherNode` (membernos) ;
  SET recomsTempChd = `getRcommFather` (membernos) ;
  SELECT 
    typeprice,
    recommmemberno,
    `type` INTO v_typeprice,
    v_recommemberno,
    v_type 
  FROM
    member m 
  WHERE m.memberno IN (membernos) ;
  #设置总业绩和新增业绩\会员数量
  CASE
    v_type 
    WHEN 1 
    THEN 
    UPDATE 
      member_achievement 
    SET
      allachievement = allachievement + v_typeprice,
      okachievement = okachievement + v_typeprice,
            newachievement=newachievement+v_typeprice,
      microtype = microtype + 1 
    WHERE FIND_IN_SET(memberno, sTemp) > 0 
      AND memberno != membernos ;
    WHEN 2 
    THEN 
    UPDATE 
      member_achievement 
    SET
      allachievement = allachievement + v_typeprice,
      okachievement = okachievement + v_typeprice,
            newachievement=newachievement+v_typeprice,
      quicktype = quicktype + 1 
    WHERE FIND_IN_SET(memberno, sTemp) > 0 
      AND memberno != membernos ;
    WHEN 3 
    THEN 
    UPDATE 
      member_achievement 
    SET
      allachievement = allachievement + v_typeprice,
      okachievement = okachievement + v_typeprice,
            newachievement=newachievement+v_typeprice,
      startype = startype + 1 
    WHERE FIND_IN_SET(memberno, sTemp) > 0 
      AND memberno != membernos ;
  END CASE ;
  #直接推荐奖20%
  UPDATE 
    member_achievement 
  SET
    notrecommend = notrecommend + (v_typeprice * 0.2),
    getcash = getcash + (v_typeprice * 0.2),
        newrecommend=newrecommend+(v_typeprice * 0.2)
  WHERE memberno = v_recommemberno ;
  #垂直推荐奖4%
  UPDATE 
    member_achievement 
  SET
    newverticalaward = newverticalaward + (v_typeprice * 0.04),
    getcash = getcash + (v_typeprice * 0.04),
        verticalaward=verticalaward++ (v_typeprice * 0.04)
  WHERE memberno IN 
    (SELECT 
      recommmemberno 
    FROM
      member 
    WHERE memberno = v_recommemberno) ;
  #跨区推荐奖%6
  UPDATE 
    member_achievement 
  SET
    newcrossaward = newcrossaward + (v_typeprice * 0.06),
    getcash = getcash + (v_typeprice * 0.06),
        crossaward=crossaward++ (v_typeprice * 0.06)
  WHERE memberno IN  
    (SELECT 
      recommmemberno 
    FROM
      member 
    WHERE memberno IN 
      (SELECT 
        recommmemberno 
      FROM
        member 
      WHERE memberno = v_recommemberno)) ;
  SELECT 
    COUNT(1) INTO v_count1 
  FROM
    member m,member_achievement a
  WHERE m.bonus = 0 AND m.memberno=a.memberno 
    AND m.`type` = 1  
    AND a.marketshare < 5000 
    AND m.memberno IN  
    (SELECT 
      memberno 
    FROM
      member 
    WHERE recommmemberno = membernos) ;
  SELECT 
    COUNT(1) INTO v_count2 
  FROM
    member m,member_achievement a 
  WHERE m.bonus = 0 AND m.memberno=a.memberno 
    AND m.`type` = 2 
    AND a.marketshare < 25000 ;
  SELECT 
    COUNT(1) INTO v_count3 
  FROM
    member m,member_achievement a  
  WHERE m.bonus = 0 AND m.memberno=a.memberno 
    AND m.`type` = 3 
    AND a.marketshare < 75000 ;
  SET v_count = 1*v_count1 + 4*v_count2 + 10*v_count3 ;
  IF v_count > 0 
  THEN 
  SELECT 
    ROUND(v_typeprice/(10*v_count * 2),1),
    ROUND(v_typeprice/(10*v_count * 2),1) INTO v_avg_cash,
    v_avg_integral 
  FROM
    DUAL ;
  END IF ;
  ##市场分红奖励
  UPDATE 
    member_achievement a,member m
  SET
    a.getcash = a.getcash + 
    CASE
      WHEN (v_avg_cash + a.marketshare) > 5000 
      THEN (v_avg_cash + a.marketshare) - 5000 
      ELSE v_avg_cash 
    END,
    a.integral = a.integral + 
    CASE
      WHEN (v_avg_integral + a.marketinetegral) > 5000 
      THEN (v_avg_integral + a.marketinetegral) - 5000 
      ELSE v_avg_integral 
    END,
    a.marketinetegral = 
    CASE
      WHEN (v_avg_integral + a.marketinetegral) > 5000 
      THEN 5000 
      ELSE v_avg_integral + a.marketinetegral 
    END,
    a.marketshare = 
    CASE
      WHEN (v_avg_cash + a.marketshare) > 5000 
      THEN 5000 
      ELSE v_avg_cash + a.marketshare 
    END,
    a.newmarketinetegral = 
    CASE
      WHEN (v_avg_integral + a.marketinetegral) > 5000 
      THEN 0 
      ELSE v_avg_integral + a.newmarketinetegral 
    END,
    a.newmarketshare = 
    CASE
      WHEN (v_avg_cash + a.marketshare) > 5000 
      THEN 0 
      ELSE v_avg_cash + a.newmarketshare 
    END
 
  WHERE a.memberno=m.memberno AND m.bonus = 0 
    AND m.`type` = 1 
    AND a.marketshare < 5000 
    AND EXISTS 
    (SELECT 
      1 
    FROM
      member 
    WHERE recommmemberno = a.memberno) ;
  UPDATE 
    member_achievement a,member m 
  SET
    a.getcash = a.getcash + 
    CASE
      WHEN (v_avg_cash + marketshare) > 25000 
      THEN (v_avg_cash + marketshare) - 25000 
      ELSE v_avg_cash 
    END,
    a.integral = a.integral + 
    CASE
      WHEN (v_avg_integral + a.marketinetegral) > 25000 
      THEN (v_avg_integral + a.marketinetegral) - 25000 
      ELSE v_avg_integral 
    END,
    a.marketinetegral = 
    CASE
      WHEN (v_avg_integral + a.marketinetegral) > 25000 
      THEN 25000 
      ELSE v_avg_cash + a.marketinetegral 
    END,
        a.marketshare = 
    CASE
      WHEN (v_avg_cash + a.marketshare) > 25000 
      THEN 25000 
      ELSE v_avg_cash + a.marketshare 
    END ,
    a.newmarketinetegral = 
    CASE
      WHEN (v_avg_integral + a.marketinetegral) > 25000 
      THEN 0 
      ELSE v_avg_cash + a.newmarketinetegral 
    END,
    a.newmarketshare = 
    CASE
      WHEN (v_avg_cash + a.marketshare) > 25000 
      THEN 0 
      ELSE v_avg_cash + a.newmarketshare 
    END
  WHERE a.memberno=m.memberno AND m.bonus = 0 
    AND m.`type` = 2 ;
  UPDATE 
    member_achievement a,member m 
  SET
    a.getcash = a.getcash + 
    CASE
      WHEN (v_avg_cash + a.marketshare) > 75000 
      THEN (v_avg_cash + a.marketshare) - 75000 
      ELSE v_avg_cash 
    END,
    a.integral = a.integral + 
    CASE
      WHEN (v_avg_integral + a.marketinetegral) > 75000 
      THEN (v_avg_integral + a.marketinetegral) - 75000 
      ELSE v_avg_integral 
    END,
    a.marketinetegral = 
    CASE
      WHEN (v_avg_integral + a.marketinetegral) > 75000 
      THEN 75000 
      ELSE v_avg_cash + a.marketinetegral 
    END,
    a.marketshare = 
    CASE
      WHEN (v_avg_cash + a.marketshare) > 75000 
      THEN 75000 
      ELSE v_avg_cash + a.marketshare 
    END,
    a.newmarketinetegral = 
    CASE
      WHEN (v_avg_integral + a.marketinetegral) > 75000 
      THEN 0 
      ELSE v_avg_cash + a.newmarketinetegral 
    END,
    a.newmarketshare = 
    CASE
      WHEN (v_avg_cash + a.marketshare) > 75000 
      THEN 0 
      ELSE v_avg_cash + a.newmarketshare 
    END 
  WHERE a.memberno=m.memberno AND m.bonus = 0 
    AND m.`type` = 3 ;
  ##绩效分红和董事分红处理    
  TRUNCATE TABLE `fathermembernos` ;
  INSERT INTO fathermembernos (memberno) 
  SELECT 
    a.memberno 
  FROM
    member m,
    member_achievement a 
  WHERE m.bonus = 0 
    AND m.state = 1 
    AND a.memberno = m.memberno 
    AND allachievement > 200000 
    AND FIND_IN_SET(m.memberno, sTemp) > 0 
    AND a.memberno != membernos ;
  SET v_node10000 = '$' ;
  SET v_node10000count = 0 ;
  OPEN mycur ;
  myLoop :
  LOOP
    -- 提取游标里的数据,这里只有一个,多个的话也一样;
    FETCH mycur INTO v_memberno ;
    #CALL `accountAllYeji`(v_memberno,v_typeprice);
    SELECT 
      allachievement INTO v_jixiaoall 
    FROM
      member_achievement 
    WHERE memberno = v_memberno ;
    IF v_jixiaoall > 10000000 
    THEN 
    SELECT 
      COUNT(*) INTO v_child1000count 
    FROM
      member_achievement a,
      member m 
    WHERE a.memberno = m.memberno 
      AND m.state = 1 
      AND a.memberno IN 
      (SELECT 
        memberno 
      FROM
        member 
      WHERE recommmemberno = v_memberno) 
      AND allachievement > 1000000 ;
    IF v_child1000count > 0 
    THEN SET v_node10000 = CONCAT(v_node10000, v_memberno) ;
    SET v_node10000count = v_node10000count + 1 ;
    END IF ;
    ELSE ##处理20万
    IF v_jixiaoall > 200000 
    AND v_jixiaoall <= 1000000 
    THEN 
    SELECT 
      COUNT(*) INTO add20wchildcount 
    FROM
      member_achievement a,
      member m 
    WHERE a.memberno = m.memberno 
      AND m.state = 1 
      AND a.memberno IN 
      (SELECT 
        memberno 
      FROM
        member 
      WHERE recommmemberno = v_memberno) 
      AND allachievement > 2000000 ;
    IF add20wchildcount = 0 
    THEN SET add20wprice = v_typeprice ;
    IF v_jixiaoall - 200000 < v_typeprice 
    THEN SET add20wprice = v_jixiaoall - 200000 ;
    END IF ;
    IF add20wprice > 0 
    THEN 
    UPDATE 
      member_achievement 
    SET
      integral = integral + add20wprice * 0.08 * 0.1,
      newbmoney = newbmoney + add20wprice * 0.08 * 0.9,
            bmoney = bmoney + add20wprice * 0.08 * 0.9,
      getcash = getcash + add20wprice * 0.08 * 0.9 where memberno=v_memberno ;
    END IF ;
    END IF ;
    ##处理100万
    ELSEIF v_jixiaoall > 1000000 
    AND v_jixiaoall <= 3000000 
    THEN 
    SELECT 
      COUNT(*) INTO add100wchildcount 
    FROM
      member_achievement a,
      member m 
    WHERE a.memberno = m.memberno 
      AND m.state = 1 
      AND a.memberno IN 
      (SELECT 
        memberno 
      FROM
        member 
      WHERE recommmemberno = v_memberno) 
      AND allachievement > 10000000 ;
    IF add100wchildcount = 0 
    THEN SET add100wprice = v_typeprice ;
    IF v_jixiaoall - 1000000 < v_typeprice 
    THEN SET add100wprice = v_jixiaoall - 1000000 ;
    END IF ;
    IF add100wprice > 0 
    THEN IF add20wprice > 0 
    THEN 
    UPDATE 
      member_achievement 
    SET
      integral = integral + add20wprice * 0.04 * 0.1,
      newbmoney = newbmoney + add20wprice * 0.04 * 0.9,
            bmoney = bmoney + add20wprice * 0.04 * 0.9,
      getcash = getcash + add20wprice * 0.04 * 0.9 where memberno=v_memberno ;
    ELSE 
    UPDATE 
      member_achievement 
    SET
      integral =  integral + add20wprice * 0.12 * 0.1,
      newbmoney = newbmoney + add20wprice * 0.12 * 0.9,
            bmoney = bmoney + add20wprice * 0.12 * 0.9,
      getcash = getcash + add20wprice * 0.12 * 0.9 where memberno=v_memberno ;
    END IF ;
    END IF ;
    END IF ;
    ##处理300万
    ELSEIF v_jixiaoall > 3000000 
    AND v_jixiaoall <= 9000000 
    THEN 
    SELECT 
      COUNT(*) INTO add300wchildcount 
    FROM
      member_achievement a,
      member m 
    WHERE a.memberno = m.memberno 
      AND m.state = 1 
      AND a.memberno IN 
      (SELECT 
        memberno 
      FROM
        member 
      WHERE recommmemberno = v_memberno) 
      AND allachievement > 30000000 ;
    IF add300wchildcount = 0 
    THEN SET add300wprice = v_typeprice ;
    IF v_jixiaoall - 3000000 < v_typeprice 
    THEN SET add300wprice = v_jixiaoall - 3000000 ;
    END IF ;
    IF add300wprice > 0 
    THEN IF add20wprice > 0 
    OR add100wprice > 0 
    THEN 
    UPDATE 
      member_achievement 
    SET
      integral = integral + add20wprice * 0.04 * 0.1,
      newbmoney = newbmoney + add20wprice * 0.04 * 0.9,
            bmoney = bmoney + add20wprice * 0.04 * 0.9,
      getcash = getcash + add20wprice * 0.04 * 0.9 where memberno=v_memberno ;
    ELSE 
    UPDATE 
      member_achievement 
    SET
      integral = integral + add20wprice * 0.16 * 0.1,
      newbmoney = newbmoney + add20wprice * 0.16 * 0.9,
            bmoney = bmoney + add20wprice * 0.16 * 0.9,
      getcash = getcash + add20wprice * 0.16 * 0.9  where memberno=v_memberno ;
    END IF ;
    END IF ;
    END IF ;
    ##处理900万
    ELSEIF v_jixiaoall > 9000000 
    THEN 
    SELECT 
      COUNT(*) INTO add900wchildcount 
    FROM
      member_achievement a,
      member m 
    WHERE a.memberno = m.memberno 
      AND m.state = 1 
      AND a.memberno IN 
      (SELECT 
        memberno 
      FROM
        member 
      WHERE recommmemberno = v_memberno) 
      AND allachievement > 90000000 ;
    IF add900wchildcount = 0 
    THEN SET add900wprice = v_typeprice ;
    IF v_jixiaoall - 3000000 < v_typeprice 
    THEN SET add900wprice = v_jixiaoall - 9000000 ;
    END IF ;
    IF add900wprice > 0 
    THEN IF add20wprice > 0 
    OR add100wprice > 0 
    OR add300wprice > 0 
    THEN 
    UPDATE 
      member_achievement 
    SET
      integral = integral + add20wprice * 0.04 * 0.1,
      newbmoney = newbmoney + add20wprice * 0.04 * 0.9,
            bmoney = bmoney + add20wprice * 0.04 * 0.9,
      getcash = getcash + add20wprice * 0.04 * 0.9 where memberno=v_memberno ;
    ELSE 
    UPDATE 
      member_achievement 
    SET
      integral = integral + add20wprice * 0.2 * 0.1,
      newbmoney = newbmoney + add20wprice * 0.2 * 0.9,
            bmoney = bmoney + add20wprice * 0.2 * 0.9,
      getcash = getcash + add20wprice * 0.2 * 0.9 where memberno=v_memberno ;
    END IF ;
    END IF ;
    END IF ;
    END IF ;
    END IF ;
    -- 声明结束的时候
    IF done = 1 
    THEN LEAVE myLoop ;
    END IF ;
    -- 这里做你想做的循环的事件
  END LOOP myLoop ;
  -- 关闭游标
  CLOSE mycur ;
  UPDATE 
    member_achievement 
  SET
    getcash = getcash + ROUND((v_typeprice * 0.03) / v_node10000count,1),
    newdongshimoney = newdongshimoney + ROUND((v_typeprice * 0.03) / v_node10000count,1) 
  WHERE FIND_IN_SET(memberno, v_node10000) > 0 ;
END

转载于:https://my.oschina.net/u/3051312/blog/789642

打开dns.37it.cn免费申请二域名解析方可使用 否则会出现00002993错误 用替换工具ultrareplace,文本编辑工具:Notepad++ 下面是需要替换的地方 ceshi.vvei.cn 超人脉管家 http://mp.weixin.qq.com/s?__biz=MzA4MTI1OTI1OA==&mid=212268202&idx=1&sn=581c81665c013e1ee5c01db440df2593#rd 这个到时候自己撰写一份新手指南替换 掉 http://123.com/index.php?g=Admin&m=Login&a=index 后台地址 admin admin888 微信管理>>自定义回复 修改 http://ceshi.vvei.cn/ 替换为 你的网站 1、数据库连接地址:Public\Conf\config.php 2、微信菜单修改:Public\Conf\button_config.php,然后“微信管理”-“菜单管理”-“重新生成菜单”。 另下面三行代码请修改: $link_config (还没有关注的,引导关注,点击“立即关注”进入微信文章) $config_good_pic (购买时,页面上面的产品图) $headimgurl (没有购买前的头部左上角LOGO) 3、公众号里面的支付授权目录:直接域名就可以 支付回调URL:直接域名就可以 告警通知URL:先空着 4、更“换推广二维码”图片,图片在根目录保持格式、名字不变。记得在服务器根目录/imgpublic里删除其它多余的图片,只留benbendou.jpg即可。 5、页面的CSS在这里改:Application\Tpl\App\default\Public\Static\css 6、如果头像出不来,可以把根目录的imgpublic文件夹权限设为777 7、微信支付前显示的图片: Application\Tpl\App\default\Public\Static\images\productsinfo.jpg 对应更改的文件:Application\Tpl\App\default\Index\pay.html 8、更改下单时的“备注”内容:Application\Tpl\App\default\Index\index.html 9、关于修改微信关注后回复的内容目录地址: Application\Lib\Action\Admin\WechatAction.class.php 可修改第249,263,267行,可修改中文汉字,不要修改参数代码。 =============================================================== 后台登录:http://您的域名/index.php?g=Admin 初始帐号:admin 密 码:admin888
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值