admin/app/frontend/modules/member/controllers/MemberLevelController.php

217 lines
7.7 KiB
PHP

<?php
/**
* Author:
* Date: 2017/12/8
* Time: 上午11:54
*/
namespace app\frontend\modules\member\controllers;
use app\common\components\ApiController;
use app\common\facades\Setting;
use app\frontend\modules\member\models\MemberLevel;
use app\common\services\goods\LeaseToyGoods;
use Yunshop\LeaseToy\models\LevelRightsModel;
use app\frontend\modules\member\models\MemberModel;
class MemberLevelController extends ApiController
{
protected $settingLevel;
public function preAction()
{
parent::preAction();
/**
* 会员等级的升级的规则
*/
$this->settingLevel = Setting::get('shop.member');
}
/**
* 等级信息
*/
public function index()
{
if (!$this->settingLevel) return $this->errorJson('未进行等级设置');
//升级条件判断
if ($this->settingLevel['level_type'] == 2) {
$data = MemberLevel::getLevelGoods();
$bool = LeaseToyGoods::whetherEnabled();
//商品图片处理
foreach ($data as &$value) {
$value['rent_free'] = null;
$value['deposit_free'] = null;
if ($bool) {
$levelRights = LevelRightsModel::getRights($value['id']);
if ($levelRights) {
$value['rent_free'] = $levelRights->rent_free ? $levelRights->rent_free : 0;
$value['deposit_free'] = $levelRights->deposit_free ? $levelRights->deposit_free : 0;
}
}
}
} else {
$data = MemberLevel::getLevelData($this->settingLevel['level_type']);
}
//会员信息
$uid = \Yunshop::app()->getMemberId();
$member_info = $this->getUserInfo($uid);
if (!empty($member_info)) {
$member_info = $member_info->toArray();
if (!empty($member_info['yz_member']['level'])) {
$memberData['level_id'] = $member_info['yz_member']['level']['id'];
$memberData['level_name'] = $member_info['yz_member']['level']['level_name'];
$memberData['rights'] = [
'discount' => $member_info['yz_member']['level']['discount'] ? $member_info['yz_member']['level']['discount'] : 0,
'freight_reduction' => $member_info['yz_member']['level']['freight_reduction'] ? $member_info['yz_member']['level']['freight_reduction'] : 0,
'rent_free' => null,
'deposit_free' => null,
];
if ($bool) {
$levelRights = LevelRightsModel::getRights($member_info['yz_member']['level']['id']);
$memberData['rights']['rent_free'] = $levelRights->rent_free ? $levelRights->rent_free : 0;
$memberData['rights']['deposit_free'] = $levelRights->deposit_free ? $levelRights->deposit_free : 0;
}
} else {
$memberData['level_id'] = 0;
$memberData['level_name'] = $this->settingLevel['level_name'] ? $this->settingLevel['level_name'] : '普通会员';
}
$memberData['nickname'] = $member_info['nickname'];
if (!empty($member_info['avatar']) && strexists($member_info['avatar'], 'http://')) {
$memberData['avatar'] = 'https:' . substr($member_info['avatar'], strpos($member_info['avatar'], '//'));
}
$memberData['avatar'] = $member_info['avatar'];
$memberData['validity'] = $member_info['yz_member']['validity'] && ($this->settingLevel['term']) ? $member_info['yz_member']['validity'] : 0;
}
$shopSet = \Setting::get('shop.shop');
foreach ((new ServiceController())->index() as $k => $v) {
$shopSet[$k] = $v;
}
foreach ($data as $k => $v) {
$data[$k]['validity'] = $v['validity'] && ($this->settingLevel['term'] || $this->settingLevel['level_type'] != 2) ? $v['validity'] : 0;
}
$shopContact = \Setting::get('shop.contact');
$levelData = [
'member_data' => $memberData,
'level_type' => $this->settingLevel['level_type'],
'data' => $data,
'shop_set' => $shopSet,
'balance_recharge' => Setting::get('finance.balance.recharge'),
'shop_description' => html_entity_decode(nl2br($shopContact['description'])),
];
return $this->successJson('ok', $levelData);
}
/**
* 会员升级详情 //等待修改
* @return [json] [detail]
*/
public function upgradeDetail()
{
$id = intval(\YunShop::request()->id);
if (!$id) {
return $this->errorJson('参数无效');
}
if ($this->settingLevel['level_type'] != 2) {
return $this->errorJson('暂不支持该升级条件...');
}
$detail = MemberLevel::uniacid()
->with(['goods' => function ($query) {
return $query->select('id', 'title', 'thumb', 'price');
}])->find($id);
//是否开启租赁
$bool = LeaseToyGoods::whetherEnabled();
$detail->rent_free = null;
$detail->deposit_free = null;
if ($bool) {
$levelRights = LevelRightsModel::getRights($id);
if ($levelRights) {
$detail->rent_free = $levelRights->rent_free ? $levelRights->rent_free : 0;
$detail->deposit_free = $levelRights->deposit_free ? $levelRights->deposit_free : 0;
}
}
$detail->goods->thumb = replace_yunshop(yz_tomedia($detail->goods->thumb));
// $detail->interests_rules = html_entity_decode($detail->interests_rules);
//升级条件不为 2
// $detail = MemberLevel::uniacid()->find($id);
// $detail->interests_rules = html_entity_decode($detail->interests_rules);
$detail->level_type = $this->settingLevel['level_type'];
return $this->successJson('leveldetail', $detail);
}
//获取用户数据
public function getUserInfo($member_id)
{
return MemberModel::select(['*'])
->uniacid()
->where('uid', $member_id)
->whereHas('yzMember', function ($query) use ($member_id) {
$query->where('member_id', $member_id)->whereNull('deleted_at');
})
->with(['yzMember' => function ($query) {
return $query->select(['*'])->where('is_black', 0)
->with(['level' => function ($query2) {
return $query2->select(['id', 'level_name', 'discount', 'freight_reduction']);
}]);
}])->first();
}
public function isOpen()
{
$info['is_open'] = 0;
//判断是否显示等级页
if ($this->settingLevel['display_page']) {
$info['is_open'] = 1;
}
$info['level_type'] = $this->settingLevel['level_type'] ?: '0';
return $this->successJson('是否开启', $info);
}
public function getLevelsGoods()
{
$id = intval(\YunShop::request()->id);
$data = MemberLevel::uniacid()->where('id', $id)->select('goods_id')->first();
if (!$data) {
return $this->errorJson('暂无商品数据');
}
$goods_ids = explode(',', $data->goods_id);
$goods = \app\common\models\Goods::select(['id', 'title', 'thumb', 'price', 'status'])->whereIn('id', $goods_ids)->get();
if (!$goods->isEmpty()) {
$goods->map(function ($item) {
$item->thumb = yz_tomedia($item['thumb']);
});
}
return $this->successJson('ok', $goods);
}
}