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程序设计有所帮助。