skuPriceId = $skuPriceId; // 获取分销商品信息 if (is_numeric($goods)) { $this->commissionGoods = CommissionGoodsModel::where([ 'goods_id' => $goods, 'status' => 1 // 参与分销 ])->find(); } else { $this->commissionGoods = $goods; } if ($this->commissionGoods) { // 获取独立配置 $this->commissionConfig = $this->commissionGoods->getCommissionConfig(); // 获取佣金规则 $this->commissionRules = $this->loadCommissionRules(); } else { $this->commissionRules = false; } } /** * 加载佣金规则 * @return array|false */ private function loadCommissionRules() { if (!$this->commissionGoods) { return false; } switch ($this->commissionGoods->rule_type) { case 0: // 默认规则 return $this->getDefaultCommissionRules(); case 1: // 独立规则 return $this->commissionGoods->getCommissionRules($this->skuPriceId); case 2: // 批量规则 return $this->commissionGoods->getCommissionRules(0); default: return false; } } public function getCommissionConfig() { return $this->commissionConfig; } public function getCommissionRules() { return $this->commissionRules; } /** * 获取对应分销商等级、对应层级的商品佣金规则 * * @param int $agentLevel 分销商等级 * @param int $commissionLevel 分销层级 * @return array|false */ public function getCommissionLevelRule($agentLevel, $commissionLevel = 1) { if (empty($this->commissionRules)) { return false; } if (isset($this->commissionRules[$agentLevel][$commissionLevel])) { return $this->commissionRules[$agentLevel][$commissionLevel]; } return false; } /** * 计算分销佣金 * * @param array $commissionRule 分销规则 * @param string $amount 结算价格 * @param int $goodsNum 购买数量 * @return string */ public function caculateGoodsCommission($commissionRule, $amount, $goodsNum = 1) { if (empty($commissionRule)) { return '0.00'; } // 使用新的统一计算方法 if ($this->commissionGoods) { return $this->commissionGoods->calculateCommission($commissionRule, $amount, $goodsNum); } return '0.00'; } /** * 获取分销商等级默认规则 * @return array */ private function getDefaultCommissionRules() { $agentLevelRules = LevelModel::order('level asc')->column('commission_rules', 'level'); $commissionRules = []; foreach ($agentLevelRules as $agentLevel => $rule) { $rule = json_decode($rule, true); if (!is_array($rule)) { continue; } foreach ($rule as $commission_level => $percent) { $commission_level = explode('_', $commission_level); if (count($commission_level) >= 2) { $levelName = $commission_level[1]; // 将英文级别名映射为数字级别 $levelMap = [ 'first' => 1, // 一级 'second' => 2, // 二级 'third' => 3, // 三级 ]; $level = isset($levelMap[$levelName]) ? $levelMap[$levelName] : intval($levelName); $commissionRules[$agentLevel][$level] = [ 'type' => 'rate', 'value' => $percent, 'rate' => $percent, 'money' => '' ]; } } } return $commissionRules; } }