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


Posted in PHP onNovember 14, 2015

本文实例讲述了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 相关文章推荐
php5.2.0内存管理改进
Jan 22 PHP
php join函数应用
May 04 PHP
PHP 第二节 数据类型之字符串类型
Apr 28 PHP
php图片加水印原理(超简单的实例代码)
Jan 18 PHP
改写ThinkPHP的U方法使其路由下分页正常
Jul 02 PHP
CodeIgniter实现更改view文件夹路径的方法
Jul 04 PHP
php使用NumberFormatter格式化货币的方法
Mar 21 PHP
php输出全球各个时区列表的方法
Mar 31 PHP
php与python实现的线程池多线程爬虫功能示例
Oct 12 PHP
PHP实现会员账号单唯一登录的方法分析
Mar 07 PHP
ThinkPHP5.0框架结合Swoole开发实现WebSocket在线聊天案例详解
Apr 02 PHP
关于Laravel-admin的基础用法总结和自定义model详解
Oct 08 PHP
PHP使用Pthread实现的多线程操作实例
Nov 14 #PHP
开启PHP Static 关键字之旅模式
Nov 13 #PHP
php正则表达式学习笔记
Nov 13 #PHP
php邮箱地址正则表达式验证
Nov 13 #PHP
合格的PHP程序员必备技能
Nov 13 #PHP
PHP基于yii框架实现生成ICO图标
Nov 13 #PHP
php中session定期自动清理的方法
Nov 12 #PHP
You might like
测试您的 PHP 水平的题目
2007/05/30 PHP
discuz论坛 用户登录 后台程序代码
2008/11/27 PHP
ThinkPHP写第一个模块应用
2012/02/20 PHP
php判断变量类型常用方法
2012/04/24 PHP
php随机显示指定文件夹下图片的方法
2015/07/13 PHP
php使用QueryList轻松采集js动态渲染页面方法
2018/09/11 PHP
php面试实现反射注入的详细方法
2019/09/30 PHP
Javascript 入门基础学习
2010/03/10 Javascript
IE6不能修改NAME问题的解决方法
2010/09/03 Javascript
js获取数组的最后一个元素
2015/04/14 Javascript
js时间戳转为日期格式的方法
2015/12/28 Javascript
jquery及js实现动态加载js文件的方法
2016/01/21 Javascript
Vue.js实现简单ToDoList 前期准备(一)
2016/12/01 Javascript
jQuery设置和获取select、checkbox、radio的选中值方法
2017/01/01 Javascript
vue项目中定义全局变量、函数的几种方法
2019/11/08 Javascript
vue 使用lodash实现对象数组深拷贝操作
2020/09/10 Javascript
Nuxt的动态路由和参数校验操作
2020/11/09 Javascript
详解如何在vue+element-ui的项目中封装dialog组件
2020/12/11 Vue.js
[02:41]辉夜杯现场一家三口 “我爸玩风行 我玩血魔”
2015/12/27 DOTA
[00:59]DOTA2背景故事第二期之四大基本法则
2020/07/07 DOTA
python提示No module named images的解决方法
2014/09/29 Python
实践Python的爬虫框架Scrapy来抓取豆瓣电影TOP250
2016/01/20 Python
在Python的一段程序中如何使用多次事件循环详解
2017/09/07 Python
Python3爬虫学习之将爬取的信息保存到本地的方法详解
2018/12/12 Python
Python解压 rar、zip、tar文件的方法
2019/11/19 Python
python实现图片,视频人脸识别(dlib版)
2020/11/18 Python
使用CSS禁止textarea调整大小功能的方法
2015/03/13 HTML / CSS
美国女孩洋娃娃店:American Girl
2017/10/24 全球购物
电子商务专业个人的自我评价分享
2013/10/29 职场文书
建筑学推荐信
2013/11/03 职场文书
我的未来不是梦演讲稿
2014/09/02 职场文书
常住证明范本
2015/06/23 职场文书
国家助学金受助感言
2015/08/01 职场文书
网络安全倡议书(3篇)
2019/09/18 职场文书
Golang 空map和未初始化map的注意事项说明
2021/04/29 Golang
深入理解redis中multi与pipeline
2021/06/02 Redis