user
This commit is contained in:
parent
23599a7786
commit
9fa390cd92
@ -39,7 +39,8 @@ class MakeFriendsController extends Controller
|
|||||||
$merchant_user = MerchantUsers::where('id', $merchant_user_id)->first();
|
$merchant_user = MerchantUsers::where('id', $merchant_user_id)->first();
|
||||||
if ($merchant_user) {
|
if ($merchant_user) {
|
||||||
$exist = IdentityAuthorization::where('m_user_id', $merchant_user->id)->where('m_id', $merchant_id)->exists();
|
$exist = IdentityAuthorization::where('m_user_id', $merchant_user->id)->where('m_id', $merchant_id)->exists();
|
||||||
if ($exist) return $this->failure('该用户已添加');
|
if ($exist)
|
||||||
|
return $this->failure('该用户已添加');
|
||||||
}
|
}
|
||||||
$nickname = $request->nickname;
|
$nickname = $request->nickname;
|
||||||
$pic = $request->pic;
|
$pic = $request->pic;
|
||||||
@ -167,7 +168,8 @@ class MakeFriendsController extends Controller
|
|||||||
try {
|
try {
|
||||||
$id = $request->merchant_user_id;
|
$id = $request->merchant_user_id;
|
||||||
$merchant_user = MerchantUsers::where('id', $id)->first();
|
$merchant_user = MerchantUsers::where('id', $id)->first();
|
||||||
if (!$merchant_user) return $this->failure('该用户不存在');
|
if (!$merchant_user)
|
||||||
|
return $this->failure('该用户不存在');
|
||||||
|
|
||||||
$nickname = $request->nickname;
|
$nickname = $request->nickname;
|
||||||
$pic = $request->pic;
|
$pic = $request->pic;
|
||||||
@ -345,7 +347,8 @@ class MakeFriendsController extends Controller
|
|||||||
$user = User::select('id', 'photo as pic', 'nickname', 'industry_sub', 'industry', 'hidden_profile', 'created_at')
|
$user = User::select('id', 'photo as pic', 'nickname', 'industry_sub', 'industry', 'hidden_profile', 'created_at')
|
||||||
->where('mobile', $mobile)
|
->where('mobile', $mobile)
|
||||||
->first();
|
->first();
|
||||||
if (!$user) return $this->resp('fail', ['status' => 1]);
|
if (!$user)
|
||||||
|
return $this->resp('fail', ['status' => 1]);
|
||||||
$merchant_user_mobile = MerchantUser::where('mobile', $mobile)
|
$merchant_user_mobile = MerchantUser::where('mobile', $mobile)
|
||||||
->first();
|
->first();
|
||||||
if ($merchant_user_mobile) {
|
if ($merchant_user_mobile) {
|
||||||
@ -374,7 +377,7 @@ class MakeFriendsController extends Controller
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 用户列表
|
* 用户列表
|
||||||
* @param Request $Request
|
* @param Request $request
|
||||||
* @return JsonResponse|string
|
* @return JsonResponse|string
|
||||||
*/
|
*/
|
||||||
public function userList(Request $request)
|
public function userList(Request $request)
|
||||||
@ -407,20 +410,153 @@ class MakeFriendsController extends Controller
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public function userListV2(Request $request)
|
||||||
|
{
|
||||||
|
try {
|
||||||
|
$m_id = $request->merchant_id;
|
||||||
|
|
||||||
|
// 1. 获取所有关联的商户用户 ID(仍需要一次查询)
|
||||||
|
$ids = IdentityAuthorization::where('m_id', $m_id)
|
||||||
|
->orderBy('id', 'desc')
|
||||||
|
->pluck('m_user_id');
|
||||||
|
|
||||||
|
if ($ids->isEmpty()) {
|
||||||
|
return $this->success('ok', []);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 2. 批量加载用户、profile 和 photos(仅一次查询,附带 m_id 条件)
|
||||||
|
$usersWithData = MerchantUsers::whereIn('id', $ids)
|
||||||
|
->with([
|
||||||
|
'profile' => function ($q) use ($m_id) {
|
||||||
|
$q->where('m_id', $m_id);
|
||||||
|
},
|
||||||
|
'photos' => function ($q) use ($m_id) {
|
||||||
|
$q->where('m_id', $m_id)->select('photo');
|
||||||
|
}
|
||||||
|
])
|
||||||
|
->get();
|
||||||
|
|
||||||
|
// 3. 在内存中计算分数,收集符合条件(分数 ≥ 60)的 ID
|
||||||
|
$fixIds = [];
|
||||||
|
foreach ($usersWithData as $user) {
|
||||||
|
$score = $this->calculateScoreFromModel($user); // 使用已加载的数据,不再查询
|
||||||
|
if ($score >= 60) {
|
||||||
|
$fixIds[] = $user->id;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 4. 用符合条件的分页查询(再次预加载,避免 N+1)
|
||||||
|
$users = MerchantUsers::whereIn('id', $fixIds)
|
||||||
|
->with([
|
||||||
|
'profile' => function ($q) use ($m_id) {
|
||||||
|
$q->where('m_id', $m_id);
|
||||||
|
},
|
||||||
|
'photos' => function ($q) use ($m_id) {
|
||||||
|
$q->where('m_id', $m_id)->select('photo');
|
||||||
|
}
|
||||||
|
])
|
||||||
|
->paginate();
|
||||||
|
|
||||||
|
// 5. 组装输出数据
|
||||||
|
foreach ($users as $user) {
|
||||||
|
$profile = $user->profile;
|
||||||
|
if ($profile) {
|
||||||
|
// 手机号脱敏(注意:mobile 在 MerchantUsers 表中)
|
||||||
|
$profile->mobile = substr_replace($user->mobile, '****', 3, 4);
|
||||||
|
$profile->age = $this->getAge($profile->birthday);
|
||||||
|
$profile->mate_conditon = json_decode($profile->mate_conditon);
|
||||||
|
}
|
||||||
|
// 照片列表
|
||||||
|
$user->photos = $user->photos->pluck('photo');
|
||||||
|
// 将 profile 挂载到 info 字段(保持原结构)
|
||||||
|
$user->info = $profile;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->success('ok', $users);
|
||||||
|
} catch (\Exception $e) {
|
||||||
|
$this->getError($e);
|
||||||
|
return $this->failure('服务器休息中,请稍后再试');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据已加载的模型计算资料完整分(不再查询数据库)
|
||||||
|
*/
|
||||||
|
private function calculateScoreFromModel($user)
|
||||||
|
{
|
||||||
|
$total_score = 0;
|
||||||
|
$profile = $user->profile;
|
||||||
|
|
||||||
|
if (!$user || !$profile) {
|
||||||
|
return $total_score;
|
||||||
|
}
|
||||||
|
|
||||||
|
$keys = [
|
||||||
|
'belief',
|
||||||
|
'birthday',
|
||||||
|
'degree',
|
||||||
|
'ideal_mate',
|
||||||
|
'income',
|
||||||
|
'industry',
|
||||||
|
'industry_sub',
|
||||||
|
'interest_hobby',
|
||||||
|
'introduction',
|
||||||
|
'province',
|
||||||
|
'city',
|
||||||
|
'mate_conditon',
|
||||||
|
'state',
|
||||||
|
'stature',
|
||||||
|
'weight',
|
||||||
|
'sex'
|
||||||
|
];
|
||||||
|
|
||||||
|
foreach ($keys as $key) {
|
||||||
|
if (!empty($profile->$key)) {
|
||||||
|
$total_score += 5;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 生活照额外加分
|
||||||
|
if ($user->photos && $user->photos->isNotEmpty()) {
|
||||||
|
$total_score += 5;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $total_score;
|
||||||
|
}
|
||||||
public function completeInfoScoreV2($user_id, $m_id)
|
public function completeInfoScoreV2($user_id, $m_id)
|
||||||
{
|
{
|
||||||
try {
|
try {
|
||||||
$total_score = 0;
|
$total_score = 0;
|
||||||
$user = MerchantUsers::find($user_id);
|
$user = MerchantUsers::find($user_id);
|
||||||
$profile = MerchantUserProfile::where(['m_id' => $m_id, 'user_id' => $user_id])->first();
|
$profile = MerchantUserProfile::where(['m_id' => $m_id, 'user_id' => $user_id])->first();
|
||||||
if (!$user || !$profile) return $total_score;
|
if (!$user || !$profile)
|
||||||
$keys = ['belief', 'birthday', 'degree', 'ideal_mate', 'income', 'industry', 'industry_sub', 'interest_hobby', 'introduction', 'province', 'city', 'mate_conditon',
|
return $total_score;
|
||||||
'state', 'stature', 'weight', 'sex'];
|
$keys = [
|
||||||
|
'belief',
|
||||||
|
'birthday',
|
||||||
|
'degree',
|
||||||
|
'ideal_mate',
|
||||||
|
'income',
|
||||||
|
'industry',
|
||||||
|
'industry_sub',
|
||||||
|
'interest_hobby',
|
||||||
|
'introduction',
|
||||||
|
'province',
|
||||||
|
'city',
|
||||||
|
'mate_conditon',
|
||||||
|
'state',
|
||||||
|
'stature',
|
||||||
|
'weight',
|
||||||
|
'sex'
|
||||||
|
];
|
||||||
foreach ($keys as $key) {
|
foreach ($keys as $key) {
|
||||||
if ($profile->$key) $total_score += 5;
|
if ($profile->$key)
|
||||||
|
$total_score += 5;
|
||||||
}
|
}
|
||||||
$photos = MerchantUserPhoto::where(['m_id' => $m_id, 'user_id' => $user_id])->first();
|
$photos = MerchantUserPhoto::where(['m_id' => $m_id, 'user_id' => $user_id])->first();
|
||||||
if ($photos) $total_score += 5;//生活照
|
if ($photos)
|
||||||
|
$total_score += 5;//生活照
|
||||||
return $total_score;
|
return $total_score;
|
||||||
} catch (\Exception $e) {
|
} catch (\Exception $e) {
|
||||||
$this->getError($e);
|
$this->getError($e);
|
||||||
@ -440,25 +576,42 @@ class MakeFriendsController extends Controller
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
$total_score = 0;
|
$total_score = 0;
|
||||||
if (!$user || !$user->user || !$user->user->sass_profileCourtship) return $total_score;
|
if (!$user || !$user->user || !$user->user->sass_profileCourtship)
|
||||||
|
return $total_score;
|
||||||
$photos = ProfilePhoto::where('user_id', $user->user_id)->first();
|
$photos = ProfilePhoto::where('user_id', $user->user_id)->first();
|
||||||
if ($user->user->sass_profileCourtship->belief) $total_score += 5;
|
if ($user->user->sass_profileCourtship->belief)
|
||||||
if ($user->user->sass_profileCourtship->birthday) $total_score += 5;
|
$total_score += 5;
|
||||||
|
if ($user->user->sass_profileCourtship->birthday)
|
||||||
|
$total_score += 5;
|
||||||
// if($user->user->sass_profileCourtship->city) $totle_score += 5;
|
// if($user->user->sass_profileCourtship->city) $totle_score += 5;
|
||||||
if ($user->user->sass_profileCourtship->degree) $total_score += 5;
|
if ($user->user->sass_profileCourtship->degree)
|
||||||
if ($user->user->sass_profileCourtship->ideal_mate) $total_score += 5;
|
$total_score += 5;
|
||||||
if ($user->user->sass_profileCourtship->income) $total_score += 5;
|
if ($user->user->sass_profileCourtship->ideal_mate)
|
||||||
if ($user->user->industry) $total_score += 5;
|
$total_score += 5;
|
||||||
if ($user->user->industry_sub) $total_score += 5;
|
if ($user->user->sass_profileCourtship->income)
|
||||||
if ($user->user->sass_profileCourtship->interest_hobby) $total_score += 5;
|
$total_score += 5;
|
||||||
if ($user->user->sass_profileCourtship->introduction) $total_score += 5;
|
if ($user->user->industry)
|
||||||
if ($photos) $total_score += 5;//生活照
|
$total_score += 5;
|
||||||
if ($user->user->sass_profileCourtship->province) $total_score += 5;
|
if ($user->user->industry_sub)
|
||||||
if ($user->user->sass_profileCourtship->mate_conditon) $total_score += 25;
|
$total_score += 5;
|
||||||
if ($user->user->sass_profileCourtship->state) $total_score += 5;
|
if ($user->user->sass_profileCourtship->interest_hobby)
|
||||||
if ($user->user->sass_profileCourtship->stature) $total_score += 5;
|
$total_score += 5;
|
||||||
if ($user->user->sass_profileCourtship->weight) $total_score += 5;
|
if ($user->user->sass_profileCourtship->introduction)
|
||||||
if ($user->user->sass_profileCourtship->sex) $total_score += 5;
|
$total_score += 5;
|
||||||
|
if ($photos)
|
||||||
|
$total_score += 5;//生活照
|
||||||
|
if ($user->user->sass_profileCourtship->province)
|
||||||
|
$total_score += 5;
|
||||||
|
if ($user->user->sass_profileCourtship->mate_conditon)
|
||||||
|
$total_score += 25;
|
||||||
|
if ($user->user->sass_profileCourtship->state)
|
||||||
|
$total_score += 5;
|
||||||
|
if ($user->user->sass_profileCourtship->stature)
|
||||||
|
$total_score += 5;
|
||||||
|
if ($user->user->sass_profileCourtship->weight)
|
||||||
|
$total_score += 5;
|
||||||
|
if ($user->user->sass_profileCourtship->sex)
|
||||||
|
$total_score += 5;
|
||||||
return $total_score;
|
return $total_score;
|
||||||
} catch (\Exception $e) {
|
} catch (\Exception $e) {
|
||||||
$this->getError($e);
|
$this->getError($e);
|
||||||
|
|||||||
@ -2,6 +2,8 @@
|
|||||||
|
|
||||||
namespace App\Models;
|
namespace App\Models;
|
||||||
|
|
||||||
|
use App\Models\Server\MerchantUserPhoto;
|
||||||
|
use App\Models\Server\MerchantUserProfile;
|
||||||
use Illuminate\Database\Eloquent\Model;
|
use Illuminate\Database\Eloquent\Model;
|
||||||
use Actuallymab\LaravelComment\CanComment;
|
use Actuallymab\LaravelComment\CanComment;
|
||||||
|
|
||||||
@ -14,4 +16,16 @@ class MerchantUsers extends Model
|
|||||||
{
|
{
|
||||||
return $this->belongsTo(User::class);
|
return $this->belongsTo(User::class);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function profile()
|
||||||
|
{
|
||||||
|
return $this->hasOne(MerchantUserProfile::class, "user_id", "id");
|
||||||
|
}
|
||||||
|
|
||||||
|
public function photos()
|
||||||
|
{
|
||||||
|
return $this->hasMany(MerchantUserPhoto::class, "user_id", "id");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -265,7 +265,7 @@ Route::middleware('merchant_user')->group(function () {
|
|||||||
// 用户详情
|
// 用户详情
|
||||||
Route::get('friend', 'MakeFriendsController@userInfo')->where('id', '[0-9]+');
|
Route::get('friend', 'MakeFriendsController@userInfo')->where('id', '[0-9]+');
|
||||||
// 用户列表
|
// 用户列表
|
||||||
Route::get('friend/user/list', 'MakeFriendsController@userList');
|
Route::get('friend/user/list', 'MakeFriendsController@userListV2');
|
||||||
// 授权同步数据
|
// 授权同步数据
|
||||||
Route::get('friend/synchronous/data', 'MakeFriendsController@SynchronousData');
|
Route::get('friend/synchronous/data', 'MakeFriendsController@SynchronousData');
|
||||||
// 更新用户资料
|
// 更新用户资料
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user