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

本文实例讲述了php实现的递归提成方案。分享给大家供大家参考,具体如下:

最近CRM项目中用到了递归提成的方案,分析如下:

SQL语句如下:

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实现代码如下:

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

本页内容版权归属为原作者,如有侵犯您的权益,请通知我们删除。
本文实例讲述了PHP使用Pthread实现的多线程操作。分享给大家供大家参考,具体如下: ?php class vote extends Thread { public $res = ''; public $url = array(); public $name = ''; public $runing = false; public $lc = false; public function __construct($name) { $this-res = '暂无,第一次运行.'; $this-param

PHP常用的小程序代码段 - 2015-11-15 17:11:42

本文实例讲述了PHP常用的小程序代码段。分享给大家供大家参考,具体如下: 1.计算两个时间的相差几天 $startdate=strtotime("2009-12-09");$enddate=strtotime("2009-12-05"); 上面的php时间日期函数strtotime已经把字符串日期变成了时间戳,这样只要让两数值相减,然后把秒变成天就可以了,比较的简单,如下: $days=round(($enddate-$startdate)/3600/24) ;echo $days; //days为得到的

php表单提交实例讲解 - 2015-11-15 17:11:04

本文为大家分享了一个特别简单的php表单提交实例,具体的实现步骤如下: 实例代码如下: form action="someform.php" method="post" table width="541" border="0" tr td width="26%"姓名:/td td width="74%"input type="text" name="username" value="raymond" id="username"//td /tr tr td密码:/td tdinput type="passw
1,phpthumb_ico 是生成ICO图标的类,源码如下 class phpthumb_ico { function phpthumb_ico() { return true; } function GD2ICOstring($gd_image_array) { foreach ($gd_image_array as $key = $gd_image) { $ImageWidths[$key] = ImageSX($gd_image); $ImageHeights[$key] = ImageSY($g
本文实例讲述了PHP实现操作redis的封装类。分享给大家供大家参考,具体如下: ?php/** * Redis 操作,支持 Master/Slave 的负载集群 * * @author jackluo */class RedisCluster{ // 是否使用 M/S 的读写集群方案 private $_isUseCluster = false; // Slave 句柄标记 private $_sn = 0; // 服务器连接句柄 private $_linkHandle = array( 'maste
下文来为各位介绍PHP设置session定期自动清理的例子了,因为session默认是15分钟自动把变量给清除内存了,但有一些时间并不生效了,下面我们就来看看。 配置完成php后默认php会将session生成到/tmp目录下,导致/tmp目录文件很多,因此需要对session进行定期的清理。 修改php.ini: [root@hz scripts]# grep "session.save_path = " /usr/local/php/lib/php.ini ; session.save_path =

合格的PHP程序员必备技能 - 2015-11-15 14:11:01

作为PHP的爱好者,如果你想加入PHP程序的世界,一定要做好充分的准备。 如果想进入大的企业进行底层开发的话必须对互联网各方面的技术原理了解的很清楚,例如apache实现原理。语言方面既然是php开发自然对 c/c++要求比较高。往往需要自己写php扩展。使用mysql自然想很多常见的,性能瓶颈要能有很好的解决方案。mysql 插件编写,apache模块编写。联系起来结合点还是要会c。 倘若是做中间层和前端工作则要求对css,javascript要求比较高。当然对web的一系列实现原理也是要非常熟悉的。

php经典算法集锦 - 2015-11-15 14:11:48

本文实例讲述了php几个经典算法。分享给大家供大家参考,具体如下: 有5个人偷了一堆苹果,准备在第二天分赃。晚上,有一人遛出来,把所有菜果分成5份,但是多了一个,顺手把这个扔给树上的猴了,自己先拿1/5藏了。没想到其他四人也都是这么想的,都如第一个人一样分成5份把多的那一个扔给了猴,偷走了1/5。第二天,大家分赃,也是分成5份多一个扔给猴了。最后一人分了一份。问:共有多少苹果? for ($i = 1; ; $i++){ if ($i%5 == 1) { //第一个人取五分之一,还剩$t $t = $i
本文实例讲述了PHP+redis实现添加处理投票的方法。分享给大家供大家参考,具体如下: ?php header("Content-Type:text/html;charset=utf-8"); include 'lib/mysql.class.php'; $mysql_obj = mysql::getConn(); if(class_exists('Redis')){ //redis $redis = new Redis(); $redis-pconnect('127.0.0.1', 6379); if

php邮箱地址正则表达式验证 - 2015-11-15 14:11:17

我们最经常遇到的验证,就是电子邮件地址验证。网站上常见。各种网页脚本也都常用“正则表达式”(regular expression)对我们输入的电子邮件地址进行验证,判断是否合法。有的还能分解出用户名和域名。现在用PHP语言实现一下电子邮件地址验证程序,用的是PHP正则表达式库。 源代码如下: ?php header ( "Content-Type: text/html; charset=UTF-8" ); $reply = ""; if ( isset($_POST["email_address"]) )