zoukankan      html  css  js  c++  java
  • 知识案列

    php实现的递归提成方案实例

     

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    CREATE TABLE `crm_proxy_bonux_rule` (

    `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '超过的部份提成规则ID',

    `bouns_rule_name` varchar(20) NOT NULL COMMENT '规则名称,如D套餐0-20范围',

    `rid` bigint(20) DEFAULT NULL COMMENT '为0,就是默认的全局设置',

    `start_rang` smallint(6) DEFAULT NULL COMMENT '开始范围',

     `end_rang` smallint(6) DEFAULT NULL COMMENT '结束范围',

    `bonus_rate` smallint(6) DEFAULT NULL COMMENT '提成率',

    `bonus_reward` decimal(8,2) DEFAULT NULL COMMENT '奖励现金',

    `chain_pre` int(11) DEFAULT NULL COMMENT '链表上一个值默认为0,表示根结点',

    `chain_next` int(11) DEFAULT NULL COMMENT '链表下一个值',

    `is_standard` enum('0','1') DEFAULT '0' COMMENT '是否是标准',

    PRIMARY KEY (`id`)

    ) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8;

    PHP实现代码如下:

     

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    29

    private function bouns_recursion($range,$standard,&$rule_list,$amount){

       $price = 1000;

       $max = $standard['end_rang']  ;//最大值

       $min = $standard['start_rang']  ;//最小值

       $bonus_rate = $standard['bonus_rate'];//分红率

       if($range<$min){

          return false;

       }

       $standard_amount = 0;

       $plus = 0;

       //是否是标准 第一个

       if($standard['is_standard']==1){

           $standard_amount = $price * $min * $bonus_rate / 100; //求提成 600  300

        }else{

          $plus = 1; //第二次要累加

       }

       if($range > $max){

         $number = ($max - $min) + $plus;//算出差值值 5 4-3 == 1

         $amount = ($price * $number * $bonus_rate / 100); //求提成 200

       }else{

          $number = ($range - $min ) + $plus;//算出差值值 4 1

          $amount = ($price * $number * $bonus_rate / 100); //求提成

      }

       $amount = $amount + $standard_amount;//800

       if(!empty($rule_list[$standard['chain_next']]) && $range > $max){

          return $amount += $this->bouns_recursion($range, $rule_list[$standard['chain_next']], $rule_list,$amount);

      }

      return $amount;

    }

  • 相关阅读:
    英语:漏屋-英语学习的真实方法及误区分析(转)
    TSP(旅行者问题)——动态规划详解(转)
    用二进制位表示状态,从而将状态压缩到一个整数里表示
    Android的CursorLoader用法小结
    RMQ问题ST算法 (还需要进一步完善)
    离散化
    反转(开关问题) POJ 3276
    关于序列中某个元素位置的查找
    快速幂运算
    Docker学习2-虚拟化
  • 原文地址:https://www.cnblogs.com/xa4312cs/p/6188838.html
Copyright © 2011-2022 走看看