团队差级奖励

2022-05-20 13:59:34 阅读:1 编辑
<?php
/**
 * 共享毛巾机
 * date:2022-05-20 10:58:00
 */

namespace App\Lib;

class CommissionSharetowel extends CommissionBase
{

    public function __construct($config, $relationship, $user_list)
    {
        parent::__construct($config, $relationship, $user_list);
        $type_cn_list = [
            "direct" => "直推奖",
            "no_direct" => "间推奖",
            "team" => "团队奖",
            "team_v1" => "团队平一级奖",
            "team_v2" => "团队平二级奖",
        ];
        $this->type_cn_list = $type_cn_list;
    }

    private function getRadio($level, $type)
    {

        $val = $this->config["level"][$level - 1]["team"][$type];
        return $val;
    }

    private function findFirstTeam($team_min_level){
        $user_count = count($this->relationship);
        for ($i = 0; $i < $user_count; ++$i) {
            if($this->relationship[$i] >=$team_min_level){
                return $i;
            }
        }
        return $i;
    }
    private function calcCustomTeamCommission(){
        /**
         * 1.更高级的要减掉低级的团队team的比例
         * 2.一直找平级与更高级
         * 3.平一级,平二级按按团队奖的奖励来计算
         * 4.平一级,平二级的奖励 = 团队奖励 * 平级比例
         */
        $min_team_level = 2; //团队最小的等级
        $current_level = 0;
        $max_range_level = $current_level;
        $user_count = count($this->relationship);
        $same_level_count = 0;
        $prev_ratio = 0;
        $first_team_index = $this->findFirstTeam($min_team_level);
        $parent_commission = 0;
        for ($i = $first_team_index; $i < $user_count; ++$i) {
            $parent_level = $this->relationship[$i];
            if ($parent_level > $current_level) {
                $same_level_count = 0;
                $commission = 0;
                if ($max_range_level == 0) {
                    if ($parent_level > $current_level) {
                        $commission =  round(($this->getRadio($parent_level, "team") - $prev_ratio ) * $this->config["money"] /100,2);
                        $max_range_level = $parent_level;
                    }
                } else {
                    if ($parent_level > $max_range_level) {
                        $commission = round(($this->getRadio($parent_level, "team") - $prev_ratio ) * $this->config["money"] /100,2);
                        $max_range_level = $parent_level;
                    }
                }
                if ($commission > 0) {
                    $this->addMoney($i, "team", $commission);
                }
                $prev_ratio = $this->getRadio($parent_level, "team");
                $current_level = $parent_level;
                $parent_commission = $commission;
            } else if ($parent_level == $current_level) {
                $same_level_count =  $same_level_count +1;
                //\Log::info("same_level_count:{$same_level_count}");
                if ($parent_level >= 0) {

                    $commission = 0;
                    if($same_level_count == 1){
                        $commission = round($this->getRadio($parent_level, "team_v1") * $parent_commission  / 100,2);
                    }else if($same_level_count == 2){
                        //\Log::info("same_level_count:{$same_level_count}");
                        $commission = round($this->getRadio($parent_level, "team_v2") * $parent_commission  / 100,2);
                    }
                    if ($commission >= 0) {
                        $this->addMoney($i, "team_v1", $commission);
                    }
                }
                $current_level = $parent_level;

            }
        }
    }
    protected function calcCommission()
    {
        //计算直推
        $money = $this->getDirectCommission(0);
        if($money > 0){
            $this->addMoney(0,"direct",$money);
        }
        //计算间推
        if(count($this->relationship) >= 2){
            $money = $this->getNoDirectCommission(1);
            if($money > 0){
                $this->addMoney(1,"no_direct",$money);
            }
        }

        //计算团队奖
        $this->calcCustomTeamCommission();
    }
}