bztang-admin/plugins/team-dividend/src/api/TeamController.php

195 lines
6.6 KiB
PHP

<?php
/**
* Author:
* Date: 2018/11/9
* Time: 9:49 AM
*/
namespace Yunshop\TeamDividend\Api;
use app\common\components\ApiController;
use app\common\models\Order;
use Illuminate\Support\Facades\DB;
use Yunshop\TeamDividend\models\MemberChild;
use Yunshop\TeamDividend\models\TeamDividendAgencyModel;
use Yunshop\TeamDividend\models\TeamDividendLevelModel;
use Yunshop\TeamDividend\services\SettingService;
class TeamController extends ApiController
{
/**
* @name 获取栏目
* @return \Illuminate\Http\JsonResponse
* @author
*/
public function getColumns()
{
$set_lang = \setting::get('shop.lang');
$level_name = $set_lang['zh_cn']['team_dividend']['client'];
$child_uids = DB::table('yz_member_children')
->join('yz_team_dividend_agency', 'yz_member_children.child_id', 'yz_team_dividend_agency.uid')
->where(['yz_member_children.member_id' => \YunShop::app()->getMemberId(), 'yz_member_children.uniacid' => \YunShop::app()->uniacid])
->whereNull('yz_team_dividend_agency.deleted_at')
->pluck('child_id');
$child_all = MemberChild::uniacid()
->where('member_id', \YunShop::app()->getMemberId())
->count();
$customer_count = $child_all - $child_uids->count();
$columns[] = [
'id' => '0',
'level_name' => $level_name ?: '顾客',
'count' => $customer_count
];
$levels = TeamDividendLevelModel::select(['id', 'level_name'])
->uniacid()
->orderBy('level_weight', 'desc')
->get();
if (!$levels->isEmpty()) {
foreach ($levels as $level) {
$level->count = TeamDividendAgencyModel::select(['id', 'level'])
->whereIn('uid', $child_uids->toArray())
->where('level', $level->id)
->uniacid()
->count();
$columns[] = $level->toArray();
}
}
return $this->successJson('成功', [
'columns' => $columns
]);
}
/**
* @name 获取下级总人数
* @return \Illuminate\Http\JsonResponse
* @author
*/
public function getTeamChildCount()
{
// plugin.team-dividend.api.team.getTeamChildCount
// $child_count = MemberChild::select(['child_id', 'member_id'])
// ->whereHas('hasOneTeam')
// ->where('member_id', \YunShop::app()->getMemberId())
// ->uniacid()
// ->count();
$child_count = DB::table('yz_member_children')
->join('yz_team_dividend_agency', 'yz_member_children.child_id', 'yz_team_dividend_agency.uid')
->where(['yz_member_children.member_id' => \YunShop::app()->getMemberId(), 'yz_member_children.uniacid' => \YunShop::app()->uniacid])
->count('yz_member_children.child_id');
return $this->successJson('成功', [
'child_count' => $child_count
]);
}
/**
* @name 获取下线列表通过level_id
* @return \Illuminate\Http\JsonResponse
* @author
*/
public function getList()
{
$page_size = 20;
$level_id = intval(request()->id);
$member_info = request()->member_info;
if ($level_id == 0) {
$child_uids = DB::table('yz_member_children')
->join('yz_team_dividend_agency', 'yz_member_children.child_id', 'yz_team_dividend_agency.uid')
->where(['yz_member_children.member_id' => \YunShop::app()->getMemberId(), 'yz_member_children.uniacid' => \YunShop::app()->uniacid])
->whereNull('yz_team_dividend_agency.deleted_at')
->pluck('child_id');
$list = MemberChild::whereNotIn('child_id', $child_uids->toArray());
} else {
$child_uids_level = DB::table('yz_member_children')
->join('yz_team_dividend_agency', function ($q) use ($level_id) {
$q->on('yz_member_children.child_id', 'yz_team_dividend_agency.uid')
->where('yz_team_dividend_agency.level', $level_id)
->where('yz_team_dividend_agency.deleted_at', null);
})
->where(['yz_member_children.member_id' => \YunShop::app()->getMemberId(), 'yz_member_children.uniacid' => \YunShop::app()->uniacid])
->whereNull('yz_team_dividend_agency.deleted_at')
->pluck('child_id');
$list = MemberChild::whereIn('child_id', $child_uids_level->toArray());
}
if (!empty($member_info)) {
$list = $list->whereHas('hasOneMember', function ($query) use ($member_info) {
$query->where('nickname', 'like', "%{$member_info}%")
->orWhere('mobile','like',"%{$member_info}%");
});
}
$list = $list->with([
'hasOneMember' => function ($q) {
$q->select(['uid', 'avatar', 'nickname']);
}
])
->where('member_id', \YunShop::app()->getMemberId())
->uniacid()
->orderBy('child_id', 'desc')
->paginate($page_size);
return $this->successJson('成功', [
'list' => $list
]);
}
/**
* @name 获取下线信息
* @return \Illuminate\Http\JsonResponse
* @author
*/
public function getInfo()
{
$uid = intval(request()->uid);
if (!$uid) {
return $this->errorJson('UID参数错误');
}
// 粉丝数量
$child_count = MemberChild::select(['child_id', 'member_id'])
->whereHas('hasOneTeam')
->where('member_id', $uid)
->uniacid()
->count();
// 自购订单金额
$self_buy_price = Order::select(['uid', 'status', 'price'])
->where('uid', $uid)
->where('status','>=',SettingService::getIncludingOrderStatus())
->uniacid()
->sum('price');
// 推广角色
$role = '普通会员';
$team_agent = TeamDividendAgencyModel::select(['uid', 'level'])
->with([
'hasOneLevel' => function ($level) {
$level->select(['id', 'level_name'])->uniacid();
}
])
->where('uid', $uid)
->uniacid()
->first();
if ($team_agent && $team_agent->hasOneLevel) {
$role = $team_agent->hasOneLevel->level_name;
}
return $this->successJson('成功', [
'child_count' => $child_count,
'self_buy_price' => $self_buy_price,
'role' => $role
]);
}
}