$goodsId, 'goods_type'=>$goodsType ])->find(); if(!$detail){ //默认配置 $detail = \app\common\model\app\ConfigDefault::$goodsProp; }else{ $detail = $detail->toArray(); $detail['prop_rule'] = json_decode($detail['prop_rule'],true); } $systemConfig = \app\common\model\app\Config::getConfig('agent'); $systemConfig['levelPlan'] = \app\common\model\app\agent\Level::getLevelList(); $systemProportion = self::getSystemProportion(); $data = [ 'config'=>$systemConfig, 'goods'=>$detail, 'system'=>$systemProportion, 'merge'=>self::propMerge($systemProportion,$detail['prop_rule']) ]; return $data; } /** * 获取格式化后的商品分佣金比例 * @return void */ public static function getGoodsProp($goodsId,$goodsType){ $prop = self::getGoodsAllProp($goodsId,$goodsType); if(!isset($prop['goods']) ||$prop['goods']['status'] !=1){ return false; } switch ($prop['goods']['mode']){ case 1: $list = $prop['system']; break; case 2: $list = []; foreach ($prop['merge'] as $index => $item){ $list[$index] = $item['proportion']; } break; case 3: $list = []; foreach ($prop['merge'] as $index => $item){ $list[$index] = $item['price']; } break; } if(!$list){ return false; } $data = [ 'mode'=>$prop['goods']['mode'], 'list'=>$list ]; return $data; } /** * 获取指定用户对应的商品佣金 * @param $userId 用户ID * @param $goodsId 商品ID * @return array|false */ public static function getUserGoodsProp($userId,$goodsId,$goodsType,$price){ $levelModel = new \app\api\model\app\agent\Level(); $userLevel = $levelModel->getUserLevel($userId); if(!$userLevel){ return false; } $goodsProp = self::getGoodsProp($goodsId,$goodsType); if(!$goodsProp){ return false; } $userLevelId = isset($userLevel['id']) && !empty($userLevel['id']) ? $userLevel['id'] :'0'; //要考虑用户等级没有匹配的问题 $prop = isset($goodsProp['list'][$userLevelId]) ? $goodsProp['list'][$userLevelId] : $goodsProp['list'][0]; $data = [ 'mode'=>$goodsProp['mode'],//分佣模式 'prop'=>$prop ]; if($goodsProp['mode'] == 3){ $data['price'] = $prop; }else{ $data['price'] = self::propToPrice($goodsId,$goodsType,$prop,$price); } if(!$data['price']){ return false; } return $data; } /** * 通过比例计算商品佣金金额 * @return void */ public static function propToPrice($goodsId,$goodsType,$prop,$price=0){ if(!$price){ $goodsDetail = \app\common\model\goods\Handle::getGoodsDetail($goodsId,$goodsType); if (!$goodsDetail || $goodsDetail['status'] != 1 || $goodsDetail['pay_type'] != 'pay') { $price = 0; }else{ $price = $goodsDetail['price']; } } foreach ($prop as &$item){ $item = $item ? $item : 0; $item = number_format($price * $item / 100, 2, '.', ''); } return $prop; } /** * 获取系统的分佣比例 * @return array */ public static function getSystemProportion(){ $config = \app\common\model\app\Config::getConfig('agent'); $list = []; foreach ($config['levelPlan'] as $item){ $id = isset($item['id']) && !empty($item['id']) ? $item['id'] : '0'; $list[$id] = $item['proportion']; } return $list; } /** * 合并分销比例配置 * @param $system * @param $goods * @return void */ public static function propMerge($system,$goods){ $list = []; foreach ($system as $index => $item){ $temp = []; if(isset($goods[$index])){ $temp = $goods[$index]; }else{ $temp['proportion'] = $item; } if(!isset($temp['price'])){ //这里最好可以获取商品价格 再计算金额 $temp['price'] = [ 'customer'=>'0', 'goods'=>'0', ]; } $list[$index] = $temp; } return $list; } }