123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141 |
- <?php
- namespace addons\shopro\service\commission;
- use app\admin\model\shopro\commission\Level as LevelModel;
- use app\admin\model\shopro\commission\CommissionGoods as CommissionGoodsModel;
- /**
- * 分销商品
- */
- class Goods
- {
- public $commissionGoods; // 分销商品
- protected $commissionConfig = NULL; // 独立分销设置 默认无
- protected $commissionRules; // 分销规则
- protected $skuPriceId; // 商品规格ID
- /**
- * 获取商品实时分佣规则
- *
- * @param int $goods 商品
- * @param int $skuId 商品规格ID
- */
- public function __construct($goods, $skuPriceId = 0)
- {
- $commissionRules = CommissionGoodsModel::GOODS_COMMISSION_STATUS_OFF;
- if(is_numeric($goods)) {
- $this->commissionGoods = CommissionGoodsModel::where(['goods_id' => $goods, 'status' => CommissionGoodsModel::GOODS_COMMISSION_STATUS_ON])->find();
- }else {
- $this->commissionGoods = $goods;
- }
- $this->skuPriceId = $skuPriceId;
- if ($this->commissionGoods) {
- $commission_config = $this->commissionGoods->commission_config;
- if ($commission_config['status']) {
- $this->commissionConfig = $commission_config;
- }
- switch ($this->commissionGoods->self_rules) {
- // 默认分销规则
- case CommissionGoodsModel::GOODS_COMMISSION_RULES_DEFAULT:
- $commissionRules = $this->getDefaultCommissionRules();
- break;
- // 独立分销规则
- case CommissionGoodsModel::GOODS_COMMISSION_RULES_SELF:
- $commissionRules = $this->getSelfCommissionRules();
- break;
- // 批量分销规则
- case CommissionGoodsModel::GOODS_COMMISSION_RULES_BATCH:
- $commissionRules = $this->getBatchCommissionRules();
- break;
- }
- }
- $this->commissionRules = $commissionRules;
- }
- public function getCommissionConfig()
- {
- return $this->commissionConfig;
- }
- public function getCommissionRules()
- {
- return $this->commissionRules;
- }
- /**
- * 获取对应分销商等级、对应层级的商品佣金规则
- *
- * @param int $agentLevel 分销商等级(不是id)
- * @param int $commissionLevel 分销商层级(默认一级)
- */
- public function getCommissionLevelRule($agentLevel, $commissionLevel = 1)
- {
- if (isset($this->commissionRules[$agentLevel]) && isset($this->commissionRules[$agentLevel][$commissionLevel])) {
- $commissionRule = $this->commissionRules[$agentLevel][$commissionLevel];
- return $commissionRule;
- }
- return false;
- }
- /**
- * 计算对应规则分销佣金
- *
- * @param int $commissionRule 分销规则
- * @param int $amount 结算价格
- * @param int $goodsNum 购买数量
- */
- public function caculateGoodsCommission($commissionRule, $amount, $goodsNum = 1)
- {
- $commission = 0;
- if (!empty($commissionRule['rate']) && $commissionRule['rate'] > 0) {
- $commission = round($amount * $commissionRule['rate'] * 0.01, 2);
- }
- if (!empty($commissionRule['money']) && $commissionRule['money'] > 0) {
- $commission = $commissionRule['money'] * $goodsNum;
- }
- return number_format($commission, 2, '.', '');
- }
- // 获取分销商等级默认规则
- private function getDefaultCommissionRules()
- {
- $agentLevelRules = LevelModel::order('level asc')->column('commission_rules', 'level');
- $commissionRules = [];
- foreach ($agentLevelRules as $agentLevel => $rule) {
- $rule = json_decode($rule, true);
- foreach ($rule as $commission_level => $percent) {
- $commission_level = explode('_', $commission_level);
- $level = intval($commission_level[1]);
- $commissionRules[$agentLevel][$level] = ['rate' => $percent];
- }
- }
- return $commissionRules;
- }
- // 获取分销商品独立分佣规则
- private function getSelfCommissionRules()
- {
- $commissionRules = [];
- if (isset($this->commissionGoods->commission_rules[$this->skuPriceId])) {
- $commissionRules = $this->commissionGoods->commission_rules[$this->skuPriceId];
- }
- return $commissionRules;
- }
- // 获取商品批量分佣规则
- private function getBatchCommissionRules()
- {
- return $this->commissionGoods->commission_rules;
- }
- }
|