// +---------------------------------------------------------------------- namespace App\Services\Common; use App\Models\ActionLogModel; use App\Models\MemberModel; use App\Services\BaseService; use App\Services\RedisService; /** * 会员管理-服务类 * @author laravel开发员 * @since 2020/11/11 * Class MemberService * @package App\Services\Common */ class MemberService extends BaseService { public static $instance = null; /** * 构造函数 * @author laravel开发员 * @since 2020/11/11 * MemberService constructor. */ public function __construct() { $this->model = new MemberModel(); } /** * 静态入口 */ public static function make() { if (!self::$instance) { self::$instance = new static(); } return self::$instance; } /** * 列表 * @param $params * @param int $pageSize * @return array */ public function getDataList($params, $pageSize = 15) { $where = ['a.mark' => 1]; $status = isset($params['status'])? $params['status'] : 0; $idcardCheck = isset($params['idcard_check'])? $params['idcard_check'] : 0; $parentId = isset($params['parent_id'])? $params['parent_id'] : 0; if($parentId>0){ $where['a.parent_id'] = $parentId; } if($status>0){ $where['a.status'] = $status; } if($idcardCheck>0){ $where['a.idcard_check'] = $idcardCheck; } $list = $this->model->with(['agent','driver'])->from('member as a') ->leftJoin('member as c', 'c.id', '=', 'a.parent_id') ->where($where) ->where(function ($query) use($params){ $keyword = isset($params['keyword'])? $params['keyword'] : ''; if($keyword){ $query->where('a.nickname','like',"%{$keyword}%")->orWhere('a.mobile','like',"%{$keyword}%")->orWhere('a.username','like',"%{$keyword}%"); } }) ->where(function ($query) use($params){ $mobile = isset($params['mobile'])? trim($params['mobile']) : ''; if($mobile){ $query->where('a.mobile','like',"%{$mobile}%"); } }) ->select(['a.*','c.code as parent_code','c.nickname as parent_name','c.mobile as parent_mobile']) ->orderBy('a.create_time','desc') ->paginate($pageSize > 0 ? $pageSize : 9999999); $list = $list? $list->toArray() :[]; if($list){ foreach($list['data'] as &$item){ $item['selected'] = false; $item['nickname'] = trim($item['nickname']); $item['name_first'] = mb_substr($item['nickname'],2,2,'utf-8'); $item['create_time'] = $item['create_time']? datetime($item['create_time'],'Y-m-d H.i.s') : ''; $item['login_time'] = $item['login_time']? datetime($item['login_time'],'Y-m-d H.i.s') : ''; $item['avatar'] = isset($item['avatar']) && $item['avatar']? get_image_url($item['avatar']) : ''; $item['idcard_back_img'] = isset($item['idcard_back_img']) && $item['idcard_back_img']? get_image_url($item['idcard_back_img']) : ''; $item['idcard_front_img'] = isset($item['idcard_front_img']) && $item['idcard_front_img']? get_image_url($item['idcard_front_img']) : ''; $item['idcard_hand_img'] = isset($item['idcard_hand_img']) && $item['idcard_hand_img']? get_image_url($item['idcard_hand_img']) : ''; $item['parent_code'] = isset($item['parent_code']) && $item['parent_code']? $item['parent_code'] : '无'; if($item['status']==1){ $item['invite_num'] = MemberService::make()->getInviteNums($item['id']); } $item['is_agent'] = 2; if(isset($item['agent']) && $item['agent']){ $item['is_agent'] = 1; } $item['is_driver'] = 2; if(isset($item['driver']) && $item['driver'] && $item['driver']['status'] == 2){ $item['is_driver'] = 1; } } } return [ 'pageSize'=> $pageSize, 'total'=>isset($list['total'])? $list['total'] : 0, 'list'=> isset($list['data'])? $list['data'] : [] ]; } /** * 直推用户数 * @param $userId * @return array|mixed */ public function getInviteNums($userId) { $cacheKey = "caches:member:inviteNums_{$userId}"; $data = RedisService::get($cacheKey); if($data){ return $data; } $data = $this->model->where(['parent_id'=> $userId, 'mark'=> 1,'status'=>1])->count('id'); if($data){ RedisService::set($cacheKey, $data, rand(3, 5)); } return $data; } /** * 按日期统计注册用户数 * @param $beginAt * @param $endAt * @param int $status * @return mixed */ public function getRegisterCount($beginAt='', $endAt='', $status=1) { $where = ['mark' => 1,'status'=>$status]; return $this->model->where($where)->where(function($query) use($beginAt,$endAt){ if($beginAt && $endAt){ $query->whereBetween('create_time', [strtotime($beginAt), strtotime($endAt)]); }else if($beginAt){ $query->where('create_time','>=', strtotime($beginAt)); } })->count('id'); } /** * 上级用户列表 * @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]); } }) ->where(function($query) use($keyword){ if($keyword){ $query->where('username','like',"{$keyword}%")->orWhere('mobile','like',"{$keyword}%"); } }) ->select(['id','username','mobile','code','nickname','status']) ->get(); return $datas? $datas->toArray() : []; } /** * 用户选项 * @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('mobile','like',"%{$keyword}%"); } }) ->select(['id','username','mobile','code','nickname','status']) ->get(); return $datas? $datas->toArray() : []; } /** * 添加会编辑会员 * @return array * @since 2020/11/11 * @author laravel开发员 */ public function edit() { // 请求参数 $data = request()->all(); // 头像处理 $avatar = trim($data['avatar']); if ($avatar) { $data['avatar'] = get_image_path($avatar); } if(isset($data['idcard_front_img'])){ $data['idcard_front_img'] = get_image_path($data['idcard_front_img']); } if(isset($data['idcard_back_img'])){ $data['idcard_back_img'] = get_image_path($data['idcard_back_img']); } if(isset($data['idcard_hand_img'])){ $data['idcard_hand_img'] = get_image_path($data['idcard_hand_img']); } if(isset($data['wxpay_qrcode'])){ $data['wxpay_qrcode'] = get_image_path($data['wxpay_qrcode']); } if(isset($data['alipay_qrcode'])){ $data['alipay_qrcode'] = get_image_path($data['alipay_qrcode']); } // 出生日期 if ($data['birthday']) { $data['birthday'] = strtotime($data['birthday']); } // 设置日志标题 ActionLogModel::setTitle("修改会员信息"); ActionLogModel::record(); unset($data['agent']); unset($data['driver']); return parent::edit($data); // TODO: Change the autogenerated stub } /** * 删除 * @return array */ public function delete() { // 设置日志标题 ActionLogModel::setTitle("删除会员信息"); ActionLogModel::record(); $this->model->where('mark',0)->where('update_time','<=', time() - 15*86400)->delete(); return parent::delete(); // TODO: Change the autogenerated stub } }