130 lines
3.4 KiB
PHP
130 lines
3.4 KiB
PHP
<?php
|
|
|
|
namespace app\common\model\app\vip;
|
|
|
|
use think\Model;
|
|
|
|
/**
|
|
* 付费会员卡绑定会员
|
|
*/
|
|
class CardPrivilege extends Model
|
|
{
|
|
|
|
// 表名,不含前缀
|
|
protected $name = 'app_vip_card_privilege';
|
|
// 自动写入时间戳字段
|
|
protected $autoWriteTimestamp = false;
|
|
// 定义时间戳字段名
|
|
protected $createTime = false;
|
|
protected $updateTime = false;
|
|
// 追加属性
|
|
protected $append = [
|
|
];
|
|
|
|
/**
|
|
* 折扣权益的作用范围:all=全部课程 specify=指定课程
|
|
*/
|
|
const DISCOUNT_SCOPE_ALL = 'all';
|
|
const DISCOUNT_SCOPE_SPECIFY = 'specify';
|
|
|
|
/**
|
|
* 全部课程作用域下,仅以下课程类型享受会员卡权益
|
|
*/
|
|
const SCOPE_ALL_ALLOW_TYPES = ['article','video','audio','live','column'];
|
|
|
|
/**
|
|
* 判断商品是否在「全部课程」作用域内
|
|
* 仅 tuzhi_course 表中 article/video/audio/live/column 类型的课程视为受作用
|
|
* @param $goodsId
|
|
* @return bool
|
|
*/
|
|
public static function isCourseInScopeAll($goodsId)
|
|
{
|
|
$course = \app\common\model\course\Course::where([
|
|
'id' => $goodsId,
|
|
'uniacid' => UNIACID
|
|
])->find();
|
|
|
|
if (!$course) {
|
|
return false;
|
|
}
|
|
|
|
return in_array($course['type'], self::SCOPE_ALL_ALLOW_TYPES);
|
|
}
|
|
|
|
|
|
/**
|
|
* 获取用户对应的优惠商品折扣
|
|
* @param $userId 用户
|
|
* @param $goodsId 商品ID
|
|
* @return void
|
|
*/
|
|
public static function getPrivilegeGoodsDiscount($userId,$goodsId){
|
|
|
|
//判断会员卡状态
|
|
|
|
$vipConfig = \app\common\model\app\Config::getConfig('vip');
|
|
|
|
if($vipConfig['status'] != 1){
|
|
return false;
|
|
}
|
|
|
|
$userVipInfo = \app\common\model\app\vip\CardUser::getUserVipInfo($userId);
|
|
|
|
if(!$userVipInfo){
|
|
return false;
|
|
}
|
|
|
|
//当前会员卡是否开启了折扣权益
|
|
if (empty($userVipInfo['card']) || $userVipInfo['card']['privilege_discount'] != 1) {
|
|
return false;
|
|
}
|
|
|
|
$discountScope = isset($userVipInfo['card']['privilege_discount_scope'])
|
|
? $userVipInfo['card']['privilege_discount_scope']
|
|
: self::DISCOUNT_SCOPE_SPECIFY;
|
|
|
|
if ($discountScope == self::DISCOUNT_SCOPE_ALL) {
|
|
//全部课程作用域:仅作用于 article/video/audio/live/column 类型的课程
|
|
if (!self::isCourseInScopeAll($goodsId)) {
|
|
return false;
|
|
}
|
|
return $userVipInfo['card']['privilege_discount_val'];
|
|
}
|
|
|
|
//指定课程作用域:保持原有逻辑,需匹配权益商品 IDS
|
|
$privilegeGoodsIds = self::getPrivilegeGoodsIds($userVipInfo['card_id'],'discount');
|
|
|
|
if(!in_array($goodsId,$privilegeGoodsIds)){
|
|
return false;
|
|
}
|
|
|
|
//返回折扣
|
|
return $userVipInfo['card']['privilege_discount_val'];
|
|
}
|
|
|
|
|
|
/**
|
|
* 获取会员卡包函的权益商品IDS集合
|
|
* @param $cardId
|
|
* @param $type
|
|
* @return array
|
|
*/
|
|
public static function getPrivilegeGoodsIds($cardId,$type){
|
|
$list = self::where([
|
|
'card_id'=>$cardId,
|
|
'type'=>$type
|
|
])->field('goods_id')->select();
|
|
|
|
$ids = [];
|
|
if($list){
|
|
foreach ($list as $item){
|
|
$ids[] = $item['goods_id'];
|
|
}
|
|
}
|
|
|
|
return $ids;
|
|
}
|
|
|
|
|
|
} |