php实现的递归提成方案实例
本文实例讲述了php实现的递归提成方案。分享给大家供大家参考,具体如下:
最近CRM项目中用到了递归提成的方案,分析如下:
SQL语句如下:
CREATETABLE`crm_proxy_bonux_rule`( `id`int(11)NOTNULLAUTO_INCREMENTCOMMENT'超过的部份提成规则ID', `bouns_rule_name`varchar(20)NOTNULLCOMMENT'规则名称,如D套餐0-20范围', `rid`bigint(20)DEFAULTNULLCOMMENT'为0,就是默认的全局设置', `start_rang`smallint(6)DEFAULTNULLCOMMENT'开始范围', `end_rang`smallint(6)DEFAULTNULLCOMMENT'结束范围', `bonus_rate`smallint(6)DEFAULTNULLCOMMENT'提成率', `bonus_reward`decimal(8,2)DEFAULTNULLCOMMENT'奖励现金', `chain_pre`int(11)DEFAULTNULLCOMMENT'链表上一个值默认为0,表示根结点', `chain_next`int(11)DEFAULTNULLCOMMENT'链表下一个值', `is_standard`enum('0','1')DEFAULT'0'COMMENT'是否是标准', PRIMARYKEY(`id`) )ENGINE=InnoDBAUTO_INCREMENT=12DEFAULTCHARSET=utf8;
PHP实现代码如下:
privatefunctionbouns_recursion($range,$standard,&$rule_list,$amount){ $price=1000; $max=$standard['end_rang'];//最大值 $min=$standard['start_rang'];//最小值 $bonus_rate=$standard['bonus_rate'];//分红率 if($range<$min){ returnfalse; } $standard_amount=0; $plus=0; //是否是标准第一个 if($standard['is_standard']==1){ $standard_amount=$price*$min*$bonus_rate/100;//求提成600300 }else{ $plus=1;//第二次要累加 } if($range>$max){ $number=($max-$min)+$plus;//算出差值值54-3==1 $amount=($price*$number*$bonus_rate/100);//求提成200 }else{ $number=($range-$min)+$plus;//算出差值值41 $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程序设计有所帮助。