title($this->title) ->description('查看用户的农场信息汇总') ->body($this->grid()); } /** * 查看指定用户的农场信息汇总 * * @param int $userId 用户ID * @param Content $content * @return Content */ #[Get('farm-user-summary/{userId}', name: 'dcat.admin.farm-user-summary.show')] public function show($userId, Content $content) { // 查找用户 $user = User::find($userId); if (!$user) { admin_error('错误', '用户不存在'); return redirect()->route('dcat.admin.farm-user-summary'); } return $content ->title($this->title) ->description("用户 {$user->username}(ID: {$user->id})的农场信息汇总") ->body(function (Row $row) use ($user) { // 第一行:用户基本信息和房屋信息 $row->column(6, $this->userInfoCard($user)); $row->column(6, $this->houseInfoCard($user->id)); // 第二行:土地信息和作物信息 $row->column(12, $this->landInfoCard($user->id)); // 第三行:物品信息 $row->column(12, $this->itemInfoCard($user->id)); // 第四行:代币信息 $row->column(12, $this->fundInfoCard($user->id)); // 第五行:神像buff信息 $row->column(12, $this->buffInfoCard($user->id)); }); } /** * 用户基本信息卡片 * * @param User $user 用户对象 * @return Card */ protected function userInfoCard(User $user) { $userInfo = $user->info; $avatar = $userInfo ? $userInfo->avatar : ''; $nickname = $userInfo ? $userInfo->nickname : ''; $content = <<

用户ID:{$user->id}

用户名:{$user->username}

昵称:{$nickname}

注册时间:{$user->created_at}

HTML; return new Card('用户基本信息', $content); } /** * 房屋信息卡片 * * @param int $userId 用户ID * @return Card */ protected function houseInfoCard($userId) { // 获取用户的农场信息 $farmUser = FarmUser::where('user_id', $userId)->first(); if (!$farmUser) { return new Card('房屋信息', new Alert('warning', '该用户没有农场信息')); } // 获取房屋配置信息 $houseConfig = FarmHouseConfig::where('level', $farmUser->house_level)->first(); $content = <<

房屋等级:{$farmUser->house_level}

最后升级时间:{$farmUser->last_upgrade_time}

产出加成:{$houseConfig->output_bonus}

特殊土地上限:{$houseConfig->special_land_limit}

可用土地数量:{$houseConfig->available_lands}

HTML; // 如果有降级天数,显示降级信息 if ($houseConfig->downgrade_days) { $content .= "

降级天数:{$houseConfig->downgrade_days}

"; } $content .= <<
查看房屋配置
HTML; return new Card('房屋信息', $content); } /** * 土地信息卡片 * * @param int $userId 用户ID * @return Card */ protected function landInfoCard($userId) { // 获取用户的土地信息 /** * @var FarmLand $land */ $lands = FarmLand::with([ 'landType', 'crop.seed' ]) ->where('user_id', $userId) ->get(); if ($lands->isEmpty()) { return new Card('土地信息', new Alert('warning', '该用户没有土地信息')); } // 土地类型统计 $landTypeStats = $lands->groupBy('land_type')->map->count(); // 土地状态统计 $landStatusStats = $lands->groupBy('status')->map->count(); // 创建土地类型和状态的统计表格 $statsContent = '
'; // 土地类型统计 $statsContent .= '
'; $statsContent .= '
土地类型统计
'; $statsContent .= ''; $statsContent .= ''; $statsContent .= ''; $landTypeNames = [ 1 => '普通土地', 2 => '红土地', 3 => '黑土地', 4 => '金土地', 5 => '蓝土地', 6 => '紫土地', ]; foreach ($landTypeStats as $typeId => $count) { $typeName = $landTypeNames[$typeId] ?? "类型{$typeId}"; $statsContent .= ""; } $statsContent .= '
土地类型数量
{$typeName}{$count}
'; // 土地状态统计 $statsContent .= '
'; $statsContent .= '
土地状态统计
'; $statsContent .= ''; $statsContent .= ''; $statsContent .= ''; $landStatusNames = [ 0 => '空闲', 1 => '种植中', 2 => '灾害', 3 => '可收获', 4 => '枯萎', ]; foreach ($landStatusStats as $statusId => $count) { $statusName = $landStatusNames[$statusId] ?? "状态{$statusId}"; $statsContent .= ""; } $statsContent .= '
土地状态数量
{$statusName}{$count}
'; $statsContent .= '
'; // 创建土地详情表格 $headers = [ 'ID','位置', '土地类型', '状态', '种植作物', '种植时间', '生长阶段' ]; $rows = []; foreach ($lands as $land) { $landType = $land->landType ? $land->landType->name : "类型{$land->land_type}"; $status = $landStatusNames[$land->status] ?? "状态{$land->status}"; $crop = $land->crop; $cropInfo = '无'; $plantTime = ''; $growthStage = ''; if ($crop) { $seedName = $crop->seed ? $crop->seed->name : "种子{$crop->seed_id}"; $cropInfo = $seedName; $plantTime = $crop->plant_time; $growthStage = $this->getGrowthStageName($crop->growth_stage); } $rows[] = [ $land->id, $land->position, $landType, $status, $cropInfo, $plantTime, $growthStage, ]; } $table = new Table($headers, $rows); $content = $statsContent . '
' . $table->render() . '
'; $content .= <<
查看土地详情
HTML; return new Card('土地信息', $content); } /** * 获取生长阶段名称 * * @param int $stage 生长阶段值 * @return string 生长阶段名称 */ protected function getGrowthStageName(GROWTH_STAGE $stage) { $stageNames = GROWTH_STAGE::getValueDescription(); return $stageNames[$stage->valueInt()] ?? "阶段{$stage}"; } /** * 物品信息卡片 * * @param int $userId 用户ID * @return Card */ protected function itemInfoCard($userId) { // 获取用户的物品信息 $items = ItemUser::with('item') ->where('user_id', $userId) ->orderBy('quantity', 'desc') ->limit(20) ->get(); if ($items->isEmpty()) { return new Card('物品信息', new Alert('warning', '该用户没有物品信息')); } // 创建物品表格 $headers = [ '物品ID', '物品名称', '数量', '物品类型', '过期时间' ]; $rows = []; foreach ($items as $item) { $itemName = $item->item ? $item->item->name : "物品{$item->item_id}"; $itemType = $item->item ? $this->getItemTypeName($item->item->type) : ''; $rows[] = [ $item->item_id, $itemName, $item->quantity, $itemType, $item->expire_at ?: '永久', ]; } $table = new Table($headers, $rows); // 获取用户物品总数 $totalCount = ItemUser::where('user_id', $userId)->count(); $content = << 用户共有 {$totalCount} 种物品,下表显示数量最多的前20种物品 {$table->render()}
查看物品详情
HTML; return new Card('物品信息', $content); } /** * 获取物品类型名称 * * @param int $type 物品类型值 * @return string 物品类型名称 */ protected function getItemTypeName(ITEM_TYPE $type) { $typeNames = ITEM_TYPE::getValueDescription(); return $typeNames[$type->valueInt()] ?? "类型{$type}"; } /** * 代币信息卡片 * * @param int $userId 用户ID * @return Card */ protected function fundInfoCard($userId) { // 获取用户的代币信息 $funds = FundModel::where('user_id', $userId)->get(); if ($funds->isEmpty()) { return new Card('代币信息', new Alert('warning', '该用户没有代币信息')); } // 获取资金类型名称映射 $fundNames = AccountService::getFundsDesc(); // 创建代币表格 $headers = [ '账户ID', '账户名称', '余额', '更新时间' ]; $rows = []; foreach ($funds as $fund) { $fundName = $fundNames[$fund->fund_id->value()] ?? "账户{$fund->fund_id->value()}"; $balance = $fund->balance; $rows[] = [ $fund->fund_id->value(), $fundName, $balance, $fund->update_time ? date('Y-m-d H:i:s', $fund->update_time) : '', ]; } $table = new Table($headers, $rows); $content = <<render()}
查看账户详情
HTML; return new Card('代币信息', $content); } /** * 神像buff信息卡片 * * @param int $userId 用户ID * @return Card */ protected function buffInfoCard($userId) { // 获取用户的神像buff信息 $buffs = FarmGodBuff::where('user_id', $userId) ->orderBy('expire_time', 'desc') ->get(); if ($buffs->isEmpty()) { return new Card('神像加持信息', new Alert('warning', '该用户没有神像加持信息')); } // 创建buff表格 $headers = [ '加持类型', '过期时间', '状态' ]; $rows = []; $buffTypeNames = [ 1 => '丰收之神', 2 => '雨露之神', 3 => '屠草之神', 4 => '拭虫之神', ]; foreach ($buffs as $buff) { $buffType = $buffTypeNames[$buff->buff_type] ?? "类型{$buff->buff_type}"; $isActive = now()->lt($buff->expire_time); $status = $isActive ? '生效中' : '已过期'; $rows[] = [ $buffType, $buff->expire_time, $status, ]; } $table = new Table($headers, $rows); $content = $table->render(); return new Card('神像加持信息', $content); } /** * 用户列表网格 * * @return Grid */ protected function grid() { return Grid::make(User::with([ 'info', 'farmUser' ]), function (Grid $grid) { $grid->column('id', 'ID')->sortable(); // 用户基本信息 $grid->column('username', '用户名'); $grid->column('info.nickname', '昵称'); // 农场信息 $grid->column('farmUser.house_level', '房屋等级')->sortable(); // 土地统计 $grid->column('id', '土地统计')->display(function ($userId) { $lands = FarmLand::where('user_id', $userId)->get(); if ($lands->isEmpty()) { return '无土地'; } $landTypeStats = $lands->groupBy('land_type')->map->count(); $totalLands = $lands->count(); $html = "
总计: {$totalLands}块土地
"; $landTypeNames = [ 1 => '普通土地', 2 => '红土地', 3 => '黑土地', 4 => '金土地', 5 => '蓝土地', 6 => '紫土地', ]; foreach ($landTypeStats as $typeId => $count) { $typeName = $landTypeNames[$typeId] ?? "类型{$typeId}"; $html .= "
{$typeName}: {$count}块
"; } return $html; }); // 作物统计 $grid->column('id', '作物统计')->display(function ($userId) { $crops = FarmCrop::where('user_id', $userId)->count(); return $crops > 0 ? "{$crops}种作物" : '无作物'; }); // 物品统计 $grid->column('id', '物品统计')->display(function ($userId) { $itemCount = ItemUser::where('user_id', $userId)->count(); return $itemCount > 0 ? "{$itemCount}种物品" : '无物品'; }); // 代币统计 $grid->column('id', '代币统计')->display(function ($userId) { $fundCount = FundModel::where('user_id', $userId)->count(); return $fundCount > 0 ? "{$fundCount}个账户" : '无账户'; }); $grid->column('created_at', '创建时间')->sortable(); // 添加查看详情操作 $grid->actions(function (Grid\Displayers\Actions $actions) { // 禁用默认操作按钮 $actions->disableDelete(); $actions->disableEdit(); $actions->disableQuickEdit(); // 修改查看按钮,使其打开详情页 $actions->append('查看详情'); }); // 禁用创建按钮 $grid->disableCreateButton(); // 禁用批量操作 $grid->disableBatchActions(); // 添加搜索 $grid->filter(function (Grid\Filter $filter) { $filter->equal('id', '用户ID'); $filter->like('username', '用户名'); $filter->like('info.nickname', '昵称'); $filter->equal('farmUser.house_level', '房屋等级'); }); }); } }