Files
amb_wechatapp/application/common/model/app/vip/CardPrivilege.php
T

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;
}
}