本文实例讲述了php实现的递归提成方案。分享给大家供大家参考,具体如下:
最近CRM项目中用到了递归提成的方案,分析如下:
SQL语句如下:
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 ; } |
希望本文所述对大家PHP程序设计有所帮助。