validate($request, [ 'email' => 'required|email', 'username' => 'required', 'password' => 'required', 'repassword' => 'required|same:password', 'status' => 'required', 'remark' => 'string|max:140', 'miniProgramIds' => 'required|array|min:1', 'miniProgramIds.*' => 'required|integer' ]); $this->user->emailUnique($request->input('email')); // todo : 这里需要修改成投手角色的id $request['roles'] = [3]; $this->user->storeBy($request->all()); $this->user->pid = $this->getLoginUserId(); $this->user->save(); $insertData = []; $now = date('Y-m-d H:i:s'); foreach ($request->input('miniProgramIds') as $miniProgramId) { $insertData[] = [ 'uid' => $this->user->id, 'miniprogram_id' => $miniProgramId, 'created_at' => $now, 'updated_at' => $now, ]; } DB::table('user_has_miniprograms') ->insert($insertData); return 1; } /** * 投手账号列表 * @param Request $request * @return \Illuminate\Contracts\Pagination\LengthAwarePaginator * @throws \Illuminate\Validation\ValidationException */ public function listAdvertiser(Request $request) { $this->validate($request, [ 'email' => 'string|email', 'username' => 'string', 'miniProgramId' => 'integer', ]); $miniProgramId = $request->input('miniProgramId'); $email = $request->input('email'); $username = $request->input('username'); return DB::table('users') ->join('user_has_miniprograms', 'users.id', 'user_has_miniprograms.uid') ->where([ 'user_has_miniprograms.is_enabled' => 1, 'users.deleted_at' => 0, 'users.pid' => $this->getLoginUserId() ])->when($email, function ($query, $email) { return $query->where('users.email', $email); })->when($miniProgramId, function ($query, $miniProgramId){ return $query->where('user_has_miniprograms.miniprogram_id', $miniProgramId); })->when($username, function ($query, $username){ return $query->where('users.username', 'like', '%'.$username.'%'); }) ->select( 'users.id', 'users.username', 'users.email', 'users.status', DB::raw("from_unixtime(users.created_at) as created_at"), DB::raw("group_concat(distinct user_has_miniprograms.miniprogram_id separator ',') as miniProgramIds") )->groupBy('users.id') ->orderBy('users.id','desc') ->paginate($request->input('per_page', 15)); } /** * 更新账号 * @param Request $request * @return int * @throws \Illuminate\Validation\ValidationException */ public function updateAdvertiser(Request $request) { $this->validate($request, [ 'id' => 'required', 'username' => 'required', 'miniProgramIds' => 'required|array|min:1', 'miniProgramIds.*' => 'required|integer', 'status' => 'required', 'remark' => 'string|max:140', ]); $uid = $request->input('id'); $user = DB::table('users') ->where([ 'deleted_at' => 0, 'id' => $uid ])->select('id','email', 'username', 'status', 'remark') ->first(); if(!$user) { ChannelBusinessException::throwError(Errors::USER_NOT_FOUND); } $this->user->updateBy($uid, $request->only(['remark', 'status', 'username'])); $now = date('Y-m-d H:i:s'); DB::table('user_has_miniprograms') ->where([ 'uid' => $uid, 'is_enabled' => 1 ])->update([ 'is_enabled' => 0, 'updated_at' => $now, ]); $insertData = []; foreach ($request->input('miniProgramIds') as $miniProgramId) { $insertData[] = [ 'uid' => $uid, 'miniprogram_id' => $miniProgramId, 'created_at' => $now, 'updated_at' => $now, ]; } DB::table('user_has_miniprograms') ->insert($insertData); return 1; } /** * 获取投手信息 * @param Request $request * @return \Illuminate\Database\Eloquent\Model|\Illuminate\Database\Query\Builder|object|null * @throws \Illuminate\Validation\ValidationException */ public function getAdvertiser(Request $request) { $this->validate($request, [ 'id' => 'required' ]); $user = DB::table('users') ->where([ 'deleted_at' => 0, 'id' => $request->input('id') ])->select('id','email', 'username', 'status', 'remark') ->first(); if(!$user) { ChannelBusinessException::throwError(Errors::USER_NOT_FOUND); } $miniProgramIds = DB::table('user_has_miniprograms') ->where([ 'is_enabled' => 1, 'uid' => $user->id, ])->select('miniprogram_id') ->get()->pluck('miniprogram_id')->toArray(); $user->miniProgramIds = $miniProgramIds; return $user; } }