218 lines
5.6 KiB
PHP
218 lines
5.6 KiB
PHP
<?php
|
|
|
|
namespace app\common\model\app\agent;
|
|
use think\Model;
|
|
|
|
/**
|
|
* 分销商品
|
|
*/
|
|
class Goods extends Model
|
|
{
|
|
// 表名,不含前缀
|
|
protected $name = 'app_agent_goods';
|
|
// 自动写入时间戳字段
|
|
protected $autoWriteTimestamp = false;
|
|
// 定义时间戳字段名
|
|
protected $createTime = false;
|
|
protected $updateTime = false;
|
|
// 追加属性
|
|
protected $append = [
|
|
];
|
|
|
|
|
|
/**
|
|
* 获取商品分佣比例
|
|
* @param $goodsId
|
|
* @return array
|
|
*/
|
|
public static function getGoodsAllProp($goodsId,$goodsType)
|
|
{
|
|
|
|
if($goodsType == 'vipcard'){
|
|
$cardInfo = explode("_",$goodsId);
|
|
$goodsId = $cardInfo[0];
|
|
}
|
|
|
|
$detail = self::where([
|
|
'goods_id'=>$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;
|
|
}
|
|
} |