// +---------------------------------------------------------------------- namespace App\Services\Common; use App\Models\ActionLogModel; use App\Models\MemberModel; use App\Services\Api\TeamService; use App\Services\BaseService; use App\Services\RedisService; use Illuminate\Support\Facades\DB; /** * 会员管理-服务类 * @author laravel开发员 * @since 2020/11/11 * Class MemberService * @package App\Services\Common */ class MemberService extends BaseService { /** * 构造函数 * @author laravel开发员 * @since 2020/11/11 * MemberService constructor. */ public function __construct() { $this->model = new MemberModel(); } /** * 获取列表 * @param $params 参数 * @param int $pageSize 分页大小:默认 15 * @return array */ public function getDataList($params, $pageSize = 10, $field=[]) { $page = request()->post('page', 1); $cacheKey = "caches:member:list_{$page}_{$pageSize}_".md5(json_encode($params)); $list = RedisService::get($cacheKey); if($list){ return [ 'pageSize'=> $pageSize, 'total'=>isset($list['total'])? $list['total'] : 0, 'list'=> isset($list['data'])? $list['data'] : [] ]; } $where = ['a.mark' => 1]; $status = isset($params['status'])? $params['status'] : 0; if($status>0){ $where['a.status'] = $status; } $list = $this->model->with(['level','parent']) ->from('member as a') ->leftJoin('member as b','b.id','a.parent_id') ->where($where) ->where(function($query) use($params){ $walletUrl = isset($params['wallet_url'])? trim($params['wallet_url']) : ''; if($walletUrl){ $query->where('a.wallet_url','like',"%{$walletUrl}%"); } $parentUrl = isset($params['parent_url'])? trim($params['parent_url']) : ''; if($parentUrl){ $query->where('b.wallet_url','like',"%{$parentUrl}%"); } $parentId = isset($params['parent_id'])? intval($params['parent_id']) : 0; if($parentId){ $query->where('a.parent_id',$parentId); } $teamId = isset($params['team_id'])? intval($params['team_id']) : 0; if($teamId){ $query->whereRaw("FIND_IN_SET({$teamId},lev_a.parent_ids)"); } }) ->where(function($query) use($params){ $account = isset($params['account'])? trim($params['account']) : ''; if($account){ $query->where('a.nickname','like',"%{$account}%")->orWhere('a.id','=', intval($account)); } }) ->select($field? $field : ['a.*','b.wallet_url as parent_url']) ->orderBy('a.create_time','desc') ->orderBy('a.id','desc') ->paginate($pageSize > 0 ? $pageSize : 9999999); $list = $list? $list->toArray() :[]; if($list){ foreach($list['data'] as &$item){ $item['create_time_text'] = $item['create_time']? datetime($item['create_time'],'Y.m.d H:i:s'):''; $item['invite_num'] = TeamService::make()->getTeamUserCountByType($item['id'], 1, 0); $item['team_num'] = TeamService::make()->getTeamUserCountByType($item['id'], 2, 0); $item['team_performance'] = TeamService::make()->getTeamPerformanceByType($item['id'], 2); $item['pledge_total'] = PledgeOrderService::make()->getTotalByUser($item['id']); $item['recharge_total'] = BalanceLogService::make()->getTotalByUser($item['id']); $item['withdraw_total'] = BalanceLogService::make()->getTotalByUser($item['id']); } RedisService::set($cacheKey, $list, rand(3,5)); } return [ 'pageSize'=> $pageSize, 'total'=>isset($list['total'])? $list['total'] : 0, 'list'=> isset($list['data'])? $list['data'] : [] ]; } /** * 添加会编辑会员 * @return array * @since 2020/11/11 * @author laravel开发员 */ public function edit() { // 请求参数 $data = request()->all(); // 头像处理 if($data['avatar']){ $avatar = trim($data['avatar']); if (strpos($avatar, "temp")) { $data['avatar'] = save_image($avatar, 'member'); } else { $data['avatar'] = str_replace(IMG_URL, "", $data['avatar']); } } if(isset($data['password']) && $data['password']){ $data['password'] = get_password(trim($data['password'])); } DB::beginTransaction(); try { // 判断团队分红比例 $result = parent::edit($data); $success = isset($result['success']) ? $result['success'] : false; if(!$success){ DB::rollBack(); return $result; } // 判断是否修改了上级 ActionLogModel::setTitle("修改会员信息"); ActionLogModel::record(); RedisService::keyDel("caches:member:list*"); DB::commit(); return $result; } catch (\Exception $exception){ return message(1003, false, ['error'=> $exception->getMessage()]); } } /** * 上级用户列表 * @return array */ public function parents() { // 获取参数 $param = request()->all(); // 用户ID $keyword = getter($param, "keyword"); $parentId = getter($param, "parent_id"); $userId = getter($param, "user_id"); $datas = $this->model->where(function($query) use($parentId){ if($parentId){ $query->where(['id'=> $parentId,'mark'=>1]); }else{ $query->where(['status'=> 1,'mark'=>1]); } }) ->where(function($query) use($userId){ if($userId){ $query->whereNotIn('id', [$userId]); $query->whereRaw("NOT FIND_IN_SET({$userId},parent_ids)"); } }) ->where(function($query) use($keyword){ if($keyword){ $query->where('nickname','like',"{$keyword}%")->orWhere('wallet_url','like',"{$keyword}%"); } }) ->select(['id','wallet_url','code','nickname','status']) ->get(); $datas = $datas? $datas->toArray() : []; if($datas){ foreach ($datas as &$item){ $labels = ['ID:'.$item['id']]; if($item['nickname']){ $labels[] = $item['nickname']; } if($item['wallet_url']){ $labels[] = format_str($item['wallet_url'], 6,6); } $item['label'] = implode(' ', $labels); } } return $datas; } /** * 用户选项 * @return array */ public function options() { // 获取参数 $param = request()->all(); // 用户ID $keyword = getter($param, "keyword"); $parentId = getter($param, "parent_id"); $userId = getter($param, "user_id"); $datas = $this->model->where(function($query) use($parentId){ if($parentId){ $query->where(['id'=> $parentId,'mark'=>1]); }else{ $query->where(['status'=> 1,'mark'=>1]); } }) ->where(function($query) use($userId){ if($userId){ $query->whereNotIn('id', [$userId]); } }) ->where(function($query) use($keyword){ if($keyword){ $query->where('nickname','like',"%{$keyword}%")->orWhere('wallet_url','like',"%{$keyword}%"); } }) ->select(['id','code','nickname','wallet_url','status']) ->get(); return $datas? $datas->toArray() : []; } /** * 批量冻结解冻 * @param $params 参数:user_id-用户ID,type-(1-冻结,2-解冻) * @return bool */ public function lock($params) { $type = isset($params['type'])? intval($params['type']) : 0; $userId = isset($params['user_id'])? intval($params['user_id']) : 0; if($userId<=0){ $this->error = 2014; return false; } $status = $type==1? 2 : 1; if(!$this->model->whereRaw("FIND_IN_SET({$userId},parent_ids)")->where(['status'=>$status==1?2:1,'mark'=>1])->update(['status'=>$status,'update_time'=>time()])){ $this->error = 1003; return false; } ActionLogModel::setTitle("批量冻结/解冻用户"); ActionLogModel::record(); $this->error = 1002; return true; } }