123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 |
- <?php
- namespace App\Services\Client;
- use App\Models\MarketDistTeam;
- use App\Models\MemberUser;
- use Illuminate\Support\Facades\DB;
- use Illuminate\Support\Facades\Log;
- class MarketDistTeamService
- {
- /**
- * 角色与模型的映射关系
- */
- protected $roleModelMap = [
- 'user' => MemberUser::class,
- // 可以添加其他角色映射
- // 'agent' => Agent::class,
- // 'coach' => Coach::class,
- ];
- /**
- * 创建邀请关系
- *
- * @param MemberUser $user 被邀请用户
- * @param string|null $invite_code 邀请码
- * @param int|null $invite_id 邀请人ID
- * @param string|null $invite_role 邀请人角色
- */
- public function createInviteRelation(MemberUser $user, ?string $invite_code = null, ?int $invite_id = null, ?string $invite_role = null): bool
- {
- try {
- DB::beginTransaction();
- // 检查用户是否已有邀请关系
- $existingTeam = $user->inviter;
- if (! $existingTeam) {
- // 获取对应的模型类
- $inviterModelClass = $this->roleModelMap[$invite_role] ?? null;
- if ($inviterModelClass) {
- $inviter = $inviterModelClass::find($invite_id);
- if ($inviter && $invite_code === strtoupper(substr(md5($inviter->id), 0, 6))) {
- // 记录邀请关系到Team表
- MarketDistTeam::create([
- 'object_id' => $inviter->id,
- 'object_type' => get_class($inviter),
- 'user_id' => $user->id,
- 'level' => 1,
- 'state' => 1,
- ]);
- DB::commit();
- return true;
- }
- }
- }
- DB::commit();
- return false;
- } catch (\Exception $e) {
- DB::rollBack();
- Log::error('创建邀请关系失败: '.$e->getMessage());
- throw $e;
- }
- }
- /**
- * 获取团队列表
- */
- public function getTeamList($userId, $perPage = 15)
- {
- try {
- // 获取当前用户
- $user = MemberUser::findOrFail($userId);
- // 检查用户状态
- abort_if($user->state !== 'enable', 403, '用户状态异常');
- // 获取下级用户列表
- $teamList = $user->teams()->where('state', 1)
- ->with(['user']) // 关联用户
- ->orderBy('created_at', 'desc')
- ->paginate($perPage);
- return response()->json([
- 'code' => 200,
- 'message' => '获取成功',
- 'data' => $teamList,
- ]);
- } catch (\Exception $e) {
- Log::error('获取团队列表失败: '.$e->getMessage());
- throw $e;
- }
- }
- }
|