|
|
|
|
<?php
|
|
|
|
|
|
|
|
|
|
namespace App\Http\Controllers\Api;
|
|
|
|
|
|
|
|
|
|
use App\Http\Controllers\Controller;
|
|
|
|
|
use App\Models\WechatUser;
|
|
|
|
|
use Illuminate\Http\JsonResponse;
|
|
|
|
|
use Illuminate\Http\Request;
|
|
|
|
|
|
|
|
|
|
class WechatUserController extends Controller
|
|
|
|
|
{
|
|
|
|
|
public function index(Request $request): JsonResponse
|
|
|
|
|
{
|
|
|
|
|
$pageSize = max(1, min(100, (int) $request->input('page_size', 20)));
|
|
|
|
|
|
|
|
|
|
$query = WechatUser::query()->orderByDesc('id');
|
|
|
|
|
|
|
|
|
|
if ($request->filled('keyword')) {
|
|
|
|
|
$keyword = trim((string) $request->input('keyword'));
|
|
|
|
|
$query->where(function ($q) use ($keyword) {
|
|
|
|
|
$q->where('phone', 'like', "%{$keyword}%")
|
|
|
|
|
->orWhere('nickname', 'like', "%{$keyword}%")
|
|
|
|
|
->orWhere('real_name', 'like', "%{$keyword}%");
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$user = $request->user();
|
|
|
|
|
if (! $user->isSuperAdmin()) {
|
|
|
|
|
$venueIds = $user->venues()->pluck('venues.id')->all();
|
|
|
|
|
if (empty($venueIds)) {
|
|
|
|
|
$query->whereRaw('1 = 0');
|
|
|
|
|
} else {
|
|
|
|
|
// 活动预约可能仅填手机号、wechat_user_id 为空;通过后一条件,在「个人中心」已绑定手机号的用户仍可按手机号检索到
|
|
|
|
|
$query->where(function ($outer) use ($venueIds) {
|
|
|
|
|
$outer->whereExists(function ($sub) use ($venueIds) {
|
|
|
|
|
$sub->selectRaw('1')
|
|
|
|
|
->from('reservations')
|
|
|
|
|
->whereNull('reservations.deleted_at')
|
|
|
|
|
->whereColumn('reservations.wechat_user_id', 'wechat_users.id')
|
|
|
|
|
->whereIn('reservations.venue_id', $venueIds);
|
|
|
|
|
})->orWhereExists(function ($sub) use ($venueIds) {
|
|
|
|
|
$sub->selectRaw('1')
|
|
|
|
|
->from('reservations')
|
|
|
|
|
->whereNull('reservations.deleted_at')
|
|
|
|
|
->whereIn('reservations.venue_id', $venueIds)
|
|
|
|
|
->whereNotNull('reservations.visitor_phone')
|
|
|
|
|
->whereNotNull('wechat_users.phone')
|
|
|
|
|
->whereColumn('reservations.visitor_phone', 'wechat_users.phone');
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return response()->json($query->paginate($pageSize));
|
|
|
|
|
}
|
|
|
|
|
}
|