<?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();
}
}