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;

    }

  • 相关阅读:
    用JavaScript往DIV动态添加内容
    【转】javascript入门系列演示·三种弹出对话框的用法实例
    ASP.Net:Table类的使用
    vs2010设置 "行号显示"
    HTML相对路径 当前目录、上级目录、根目录、下级目录表示法
    【转】算法基础(二):栈的应用 --- 迷宫解题
    【转】CSS中怎么让DIV居中
    【转】如何让DIV水平和垂直居中
    SQL : 在SQL Server 2008(Or Express)中如何Open并编辑数据表【转】
    SQL2005中设置自动编号字段【转】
  • 原文地址:https://www.cnblogs.com/xa4312cs/p/6188838.html
Copyright © 2011-2022 走看看