alias($alias); $alias .= '.'; } // 筛选条件:显示状态(1=显示)、未删除(0=正常) return $model->where("{$alias}is_show", 1)->where("{$alias}is_del", 0); } /** * 获取指定代理等级的进货折扣 * @param int $id 代理等级ID(0则取最低等级折扣) * @return int 折扣值(百分比) */ public static function getAgentDiscount($id = 0) { $query = self::setWhere(); $id ? $query->where('id', $id) : $query->order('grade', 'asc'); return $query->value('discount') ?: 0; } /** * 获取指定代理等级的返利比例(按类型区分) * @param int $id 代理等级ID * @param string $type 返利类型(direct=直推、indirect=间接、umbrella=伞下) * @return float 返利比例(百分比) */ public static function getAgentRebates($id = 0, $type = 'direct') { if (!$id) return 0.00; // PHP7.3 用 switch 替代 match 表达式,实现类型→字段的映射 switch ($type) { case 'indirect': $field = 'indirect_rebates'; break; case 'umbrella': $field = 'umbrella_rebates'; break; default: // 默认返回直推返利(对应原 match 的 default 分支) $field = 'direct_rebates'; break; } // 查询并返回对应返利比例 return self::setWhere()->where('id', $id)->value($field) ?: 0.00; } /** * 获取用户当前代理等级信息(含等级配置+任务) * @param int $uid 用户ID * @param bool $isArray 是否返回[等级列表, 任务列表] * @return array|bool|array|null 等级信息 * @throws DataNotFoundException|ModelNotFoundException|DbException */ public static function getAgentLevelInfo($uid, $isArray = false) { $level = ['id' => 0, 'name' => '普通用户', 'grade' => 0]; // 默认无等级 $task = []; // 获取用户当前有效代理等级记录 $agentLevelId = UserAgentLevel::getUserAgentLevel($uid); if ($agentLevelId !== false) { $level = UserAgentLevel::getUserAgentLevelInfo($agentLevelId) ?: $level; } // 获取代理等级列表(含升级标记) $levelList = self::getAgentLevelListAndGrade($level['id'], $isArray); // 关联当前等级任务(若需要) // if ($isArray && isset($levelList[0])) { // $task = SystemAgentTask::getTaskList($levelList[0]['id'], $uid, $level); // } return $isArray ? [$levelList, $task] : ($level['id'] ? $level : false); } /** * 获取代理等级的排序值(grade) * @param int $id 代理等级ID * @return int 排序值(数值越大等级越高) */ public static function getAgentLevelGrade($id) { return self::setWhere()->where('id', $id)->value('grade') ?: 0; } /** * 获取代理等级列表(含当前等级标记、可升级状态) * @param int $currentLevelId 当前等级ID * @param bool $isArray 是否需要任务列表字段 * @param string $order 排序方式 * @return array 等级列表 * @throws DataNotFoundException|ModelNotFoundException|DbException */ public static function getAgentLevelListAndGrade($currentLevelId, $isArray, $order = 'grade asc') { // 查询所有有效代理等级 $list = self::setWhere() ->field('id, name, direct_rebates, indirect_rebates, umbrella_rebates, discount, icon, image, explain, grade, is_forever, valid_days') ->order($order) ->select() ->toArray() ?: []; $currentGrade = $currentLevelId ? self::getAgentLevelGrade($currentLevelId) : 0; // 处理列表字段:标记当前等级、可升级状态、格式化有效期 foreach ($list as &$item) { $item['is_current'] = ($item['id'] == $currentLevelId); $item['is_clear'] = ($currentGrade < $item['grade']); // 是否可升级 $item['valid_text'] = $item['is_forever'] ? '永久有效' : "{$item['valid_days']}天"; // if ($isArray) $item['task_list'] = []; // 预留任务列表字段 } // 若无当前等级,默认选中最低等级 if (!$currentLevelId && $list) $list[0]['is_current'] = true; return $list; } /** * 判断目标等级是否可升级(基于当前等级) * @param int $targetLevelId 目标等级ID * @param int $currentLevelId 当前等级ID * @param array|null $levelList 已查询的等级列表(可选) * @return bool 是否可升级 * @throws DataNotFoundException|ModelNotFoundException|DbException */ public static function getAgentClear($targetLevelId, $currentLevelId, $levelList = null) { $levelList = $levelList ?? self::getAgentLevelListAndGrade($currentLevelId, false); foreach ($levelList as $item) { if ($item['id'] == $targetLevelId) return $item['is_clear']; } return false; } /** * 获取当前等级的下一个可升级等级ID * @param int $currentLevelId 当前等级ID * @param int $maxGrade 最高等级排序限制 * @return int 下一级等级ID(0=无) * @throws DataNotFoundException|ModelNotFoundException|DbException */ public static function getNextAgentLevelId($currentLevelId, $maxGrade) { $levelList = self::getAgentLevelListAndGrade($currentLevelId, false, 'grade desc'); $currentGrade = self::getAgentLevelGrade($currentLevelId); $higherLevels = []; // 筛选:等级高于当前且不超过最高限制 foreach ($levelList as $item) { if ($item['grade'] > $currentGrade && $item['grade'] <= $maxGrade) { $higherLevels[] = $item['id']; } } return $higherLevels ? end($higherLevels) : 0; } // /** // * 获取用户代理等级列表+任务列表(前端展示用) // * @param int $uid 用户ID // * @return array 格式:['list' => 等级列表, 'task' => 当前任务] // * @throws DataNotFoundException|ModelNotFoundException|DbException // */ // public static function getAgentLevelList($uid) // { // list($levelList, $task) = self::getAgentLevelInfo($uid, true); // return compact('levelList', 'task'); // } }