model = new AgentModel(); } /** * 查看 */ public function index() { if (!$this->request->isAjax()) { return $this->view->fetch(); } //如果发送的来源是 Selectpage,则转发到 Selectpage if ($this->request->request('keyField')) { return $this->selectpage(); } [$where, $sort, $order, $offset, $limit] = $this->buildparams(); // 处理特殊筛选条件 $filter = $this->request->get("filter", ''); if ($filter) { $filter = json_decode($filter, true); if (isset($filter['tabActive'])) { if ($filter['tabActive'] === 'pending') { $where['status'] = 'pending'; } elseif ($filter['tabActive'] === '0') { $where['level_status'] = ['>', 0]; } } } $list = $this->model ->with(['user.parent_user', 'level_info', 'level_status_info', 'upgrade_level']) ->where($where) ->order($sort, $order) ->paginate($limit); $result = ['total' => $list->total(), 'rows' => $list->items()]; return json($result); } /** * 详情 * * @param $id */ public function detail($ids = null) { $row = $this->model->with(['user.parent_user', 'level_info', 'level_status_info', 'upgrade_level']) ->where('user_id', $ids) ->find(); if (!$row) { $this->error(__('No Results were found')); } // 如果expire_time为空,设置默认值为become_time + 1年 // if (!$row->expire_time && $row->become_time) { // $row->expire_time = strtotime('+1 year', $row->become_time); // } $this->view->assign('row', $row); return $this->view->fetch(); } /** * 团队 * * @param $id */ public function team($ids = null) { // 获取ID参数,优先使用URL中的id参数 $ids = $ids ?: $this->request->param('id'); // 将当前分销商ID传递给前端 $this->assignconfig('current_agent_id', $ids); if (!$this->request->isAjax()) { // 获取当前分销商详细信息用于模板渲染 $currentAgent = $this->model->with(['user.parent_user', 'level_info']) ->where('user_id', $ids) ->find(); if (!$currentAgent) { $this->error(__('No Results were found')); } $this->view->assign('currentAgent', $currentAgent); return $this->view->fetch(); } //如果发送的来源是 Selectpage,则转发到 Selectpage if ($this->request->request('keyField')) { return $this->selectpage(); } [$where, $sort, $order, $offset, $limit] = $this->buildparams(); // 以分销商表为主表查询团队成员 // 安全的排序字段处理 // $allowedSorts = ['user_id', 'status', 'level', 'total_income', 'pending_reward', 'become_time']; // $safeSort = in_array($sort, $allowedSorts) ? $sort : 'user_id'; // 以用户表为主表,LEFT JOIN 分销商表,这样普通用户也能查到 $list = \app\common\model\User::where('parent_user_id', $ids) ->with(['agent', 'agent.level_info']) ->paginate($limit); $result = array("total" => $list->total(), "rows" => $list->items()); return json($result); } // 选择分销商 public function select() { if (!$this->request->isAjax()) { return $this->view->fetch(); } [$where, $sort, $order, $offset, $limit] = $this->buildparams(); $data = $this->model ->with(['user', 'level_info', 'level_status_info', 'upgrade_level']) ->where($where) ->order($sort, $order) ->paginate($limit); $result = ['total' => $data->total(), 'rows' => $data->items()]; return json($result); } /** * 编辑 * * @param $id */ public function edit($ids = null) { $params = $this->request->only(['status', 'upgrade_lock', 'level_status', 'level']); $row = $this->model->with(['user', 'level_info', 'level_status_info', 'upgrade_level'])->where('user_id', $ids)->find(); if (!$row) { $this->error('未找到该分销商'); } $result = false; foreach ($params as $field => $value) { switch ($field) { case 'status': // 修改状态 $result = $this->changeStatus($row, $value); break; case 'level_status': // 审核等级 $result = $this->changeLevelStatus($row, $value); break; case 'level': // 修改等级 $result = $this->changeLevel($row, $value); break; default: $result = $row->save([$field => $value]); } } if ($result) { $this->success('更新成功'); } else { $this->error('更新失败'); } } // 修改状态 private function changeStatus($row, $value) { $result = $row->save(['status' => $value]); if ($result) { LogModel::add($row->user_id, 'agent', ['type' => 'status', 'value' => $value]); (new AgentService($row->user_id))->createAsyncAgentUpgrade(); } return $result; } // 审核等级 private function changeLevelStatus($row, $value) { if ($row->level_status == 0 && $value > 0) { $this->error('非法操作'); } if ($value == 0) { // 拒绝操作 return $row->save(['level_status' => 0]); } else { // 同意操作 if ($row->upgrade_level) { $result = $row->save(['level_status' => 0, 'level' => $row->upgrade_level->level]); if ($result) { LogModel::add($row->user_id, 'agent', ['type' => 'level', 'level' => $row->upgrade_level]); (new AgentService($row->user_id))->createAsyncAgentUpgrade(); } return $result; } } return false; } // 修改等级 private function changeLevel($row, $value) { $level = LevelModel::find($value); if ($level) { $result = $row->save(['level' => $level->level]); if ($result) { LogModel::add($row->user_id, 'agent', ['type' => 'level', 'level' => $level]); (new AgentService($row->user_id))->createAsyncAgentUpgrade(); } return $result; } else { $this->error('未找到该等级'); } } // 更换推荐人 public function changeParentUser($id) { $userAgent = new AgentService($id); if (!$userAgent->user) { $this->error('未找到该用户'); } $parentUserId = $this->request->param('parent_user_id', 0); // 更换推荐人检查 if ($parentUserId != 0) { $parentAgent = new AgentService($parentUserId); if (!$parentAgent->isAgentAvaliable()) { $this->error('选中用户暂未成为分销商,不能成为推荐人'); } if (!$this->checkChangeParentAgent($id, $parentUserId)) { $this->error('不能绑定该上级'); } LogModel::add($parentUserId, 'share', ['user' => $userAgent->user]); if ($userAgent->isAgentAvaliable()) { LogModel::add($id, 'bind', ['user' => $parentAgent->user ?? NULL]); } } $lastParentUserId = $userAgent->user->parent_user_id; $userAgent->user->parent_user_id = $parentUserId; $userAgent->user->save(); if ($lastParentUserId > 0) { $userAgent->createAsyncAgentUpgrade($lastParentUserId); } if ($parentUserId > 0) { $userAgent->createAsyncAgentUpgrade($parentUserId); } $this->success('绑定成功'); } // 递归往上找推荐人,防止出现推荐循环 private function checkChangeParentAgent($userId, $parentUserId) { if ($userId == $parentUserId) { $this->error('推荐人不能是本人'); } if ($parentUserId == 0) { return true; } $parentAgent = UserModel::find($parentUserId); if ($parentAgent) { if ($parentAgent->parent_user_id == $userId) { $this->error("已选中分销商的上级团队中已存在该用户"); } if ($parentAgent->parent_user_id == 0) { return true; } else { return $this->checkChangeParentAgent($userId, $parentAgent->parent_user_id); } } return false; } /** * 更新分销商到期时间 */ public function updateExpireTime() { $userId = $this->request->param('user_id'); $expireTime = $this->request->param('expire_time'); if (!$userId) { $this->error(__('参数错误')); } // 验证分销商是否存在 $agent = AgentModel::get($userId); if (!$agent) { $this->error(__('分销商不存在')); } // 验证时间格式 if ($expireTime && !strtotime($expireTime)) { $this->error(__('时间格式不正确')); } // try { // 更新到期时间 $updateData = []; if ($expireTime) { $updateData['expire_time'] = strtotime($expireTime); } else { $updateData['expire_time'] = null; // 设置为null表示永久有效 } $result = AgentModel::where('user_id', $userId)->update($updateData); if ($result !== false) { $this->success(__('修改成功')); } else { $this->error(__('修改失败')); } // } catch (\Exception $e) { // $this->error(__('修改失败: %s', $e->getMessage())); // } } /** * 设置默认到期时间 * 在用户成为分销商时调用,设置默认到期时间为成为分销商时间+1年 */ public function setDefaultExpireTime($userId, $becomeTime = null) { if (!$becomeTime) { $becomeTime = time(); // 如果没有传入成为分销商时间,使用当前时间 } // 计算默认到期时间(1年后) $expireTime = strtotime('+1 year', $becomeTime); // 更新到期时间 AgentModel::where('user_id', $userId)->update([ 'expire_time' => $expireTime ]); return $expireTime; } }