|
|
@@ -2,12 +2,14 @@
|
|
|
|
|
|
namespace App\Module\Game\AdminControllers;
|
|
|
|
|
|
+use App\Module\Farm\Enums\DISASTER_TYPE;
|
|
|
use App\Module\Farm\Enums\GROWTH_STAGE;
|
|
|
use App\Module\Farm\Models\FarmCrop;
|
|
|
use App\Module\Farm\Models\FarmGodBuff;
|
|
|
use App\Module\Farm\Models\FarmHouseConfig;
|
|
|
use App\Module\Farm\Models\FarmLand;
|
|
|
use App\Module\Farm\Models\FarmUser;
|
|
|
+use App\Module\Farm\Services\DisasterService;
|
|
|
use App\Module\Fund\Models\FundModel;
|
|
|
use App\Module\Fund\Services\AccountService;
|
|
|
use App\Module\GameItems\Enums\ITEM_TYPE;
|
|
|
@@ -65,18 +67,18 @@ class FarmUserSummaryController extends AdminController
|
|
|
{
|
|
|
// 记录请求信息
|
|
|
\Illuminate\Support\Facades\Log::info('访问农场用户信息汇总', [
|
|
|
- 'user_id' => $userId,
|
|
|
- 'referer' => request()->header('referer'),
|
|
|
+ 'user_id' => $userId,
|
|
|
+ 'referer' => request()->header('referer'),
|
|
|
'user_agent' => request()->header('user-agent'),
|
|
|
- 'ip' => request()->ip(),
|
|
|
- 'url' => request()->fullUrl(),
|
|
|
+ 'ip' => request()->ip(),
|
|
|
+ 'url' => request()->fullUrl(),
|
|
|
]);
|
|
|
|
|
|
// 查找用户
|
|
|
$user = User::find($userId);
|
|
|
if (!$user) {
|
|
|
admin_error('错误', "用户 {$userId} 不存在");
|
|
|
- \Illuminate\Support\Facades\Log::warning('访问不存在的用户', ['user_id' => $userId]);
|
|
|
+ \Illuminate\Support\Facades\Log::warning('访问不存在的用户', [ 'user_id' => $userId ]);
|
|
|
|
|
|
return redirect()->route('dcat.admin.farm-user-summary');
|
|
|
}
|
|
|
@@ -85,7 +87,7 @@ class FarmUserSummaryController extends AdminController
|
|
|
$farmUser = FarmUser::where('user_id', $userId)->first();
|
|
|
if (!$farmUser) {
|
|
|
admin_warning('提示', "用户 {$userId} 没有农场信息");
|
|
|
- \Illuminate\Support\Facades\Log::info('用户没有农场信息', ['user_id' => $userId]);
|
|
|
+ \Illuminate\Support\Facades\Log::info('用户没有农场信息', [ 'user_id' => $userId ]);
|
|
|
// 不重定向,继续显示用户信息,只是提示没有农场信息
|
|
|
}
|
|
|
|
|
|
@@ -216,11 +218,32 @@ class FarmUserSummaryController extends AdminController
|
|
|
// 土地状态统计
|
|
|
$landStatusStats = $lands->groupBy('status')->map->count();
|
|
|
|
|
|
- // 创建土地类型和状态的统计表格
|
|
|
+ // 灾害统计
|
|
|
+ $disasterStats = [
|
|
|
+ 1 => 0, // 干旱
|
|
|
+ 2 => 0, // 虫害
|
|
|
+ 3 => 0, // 杂草
|
|
|
+ ];
|
|
|
+
|
|
|
+ // 统计活跃的灾害
|
|
|
+ foreach ($lands as $land) {
|
|
|
+ if ($land->crop && !empty($land->crop->disasters)) {
|
|
|
+ foreach ($land->crop->disasters as $disaster) {
|
|
|
+ if (($disaster['status'] ?? '') === 'active') {
|
|
|
+ $type = $disaster['type'] ?? 0;
|
|
|
+ if (isset($disasterStats[$type])) {
|
|
|
+ $disasterStats[$type]++;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 创建土地类型、状态和灾害的统计表格
|
|
|
$statsContent = '<div class="row">';
|
|
|
|
|
|
// 土地类型统计
|
|
|
- $statsContent .= '<div class="col-md-6">';
|
|
|
+ $statsContent .= '<div class="col-md-4">';
|
|
|
$statsContent .= '<h5>土地类型统计</h5>';
|
|
|
$statsContent .= '<table class="table table-sm table-bordered">';
|
|
|
$statsContent .= '<thead><tr><th>土地类型</th><th>数量</th></tr></thead>';
|
|
|
@@ -243,7 +266,7 @@ class FarmUserSummaryController extends AdminController
|
|
|
$statsContent .= '</tbody></table></div>';
|
|
|
|
|
|
// 土地状态统计
|
|
|
- $statsContent .= '<div class="col-md-6">';
|
|
|
+ $statsContent .= '<div class="col-md-4">';
|
|
|
$statsContent .= '<h5>土地状态统计</h5>';
|
|
|
$statsContent .= '<table class="table table-sm table-bordered">';
|
|
|
$statsContent .= '<thead><tr><th>土地状态</th><th>数量</th></tr></thead>';
|
|
|
@@ -262,31 +285,64 @@ class FarmUserSummaryController extends AdminController
|
|
|
$statsContent .= "<tr><td>{$statusName}</td><td>{$count}</td></tr>";
|
|
|
}
|
|
|
|
|
|
+ $statsContent .= '</tbody></table></div>';
|
|
|
+
|
|
|
+ // 灾害统计
|
|
|
+ $statsContent .= '<div class="col-md-4">';
|
|
|
+ $statsContent .= '<h5>灾害统计</h5>';
|
|
|
+ $statsContent .= '<table class="table table-sm table-bordered">';
|
|
|
+ $statsContent .= '<thead><tr><th>灾害类型</th><th>数量</th><th>减产比例</th></tr></thead>';
|
|
|
+ $statsContent .= '<tbody>';
|
|
|
+
|
|
|
+ $disasterNames = DISASTER_TYPE::getAll();
|
|
|
+ $totalDisasters = 0;
|
|
|
+ $d = DisasterService::getAllDisasters();
|
|
|
+ foreach ($disasterStats as $typeId => $count) {
|
|
|
+ $typeName = $disasterNames[$typeId] ?? "未知灾害{$typeId}";
|
|
|
+ $penalty = $d[$typeId];
|
|
|
+ $totalDisasters += $count;
|
|
|
+
|
|
|
+ $statsContent .= "<tr><td>{$typeName}</td><td>{$count}</td><td>{$penalty}</td></tr>";
|
|
|
+ }
|
|
|
+
|
|
|
+ // 添加总计行
|
|
|
+ $totalPenalty = $totalDisasters > 0 ? ($totalDisasters * 5) . '%' : '0%';
|
|
|
+ $statsContent .= "<tr class='table-info'><td><strong>总计</strong></td><td>{$totalDisasters}</td><td>{$totalPenalty}</td></tr>";
|
|
|
+
|
|
|
$statsContent .= '</tbody></table></div>';
|
|
|
$statsContent .= '</div>';
|
|
|
|
|
|
// 创建土地详情表格
|
|
|
- $headers = [ 'ID','位置', '土地类型', '状态', '种植作物', '种植时间', '生长阶段', '本阶段开始时间', '本阶段结束时间' ];
|
|
|
+ $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 = '';
|
|
|
+ $crop = $land->crop;
|
|
|
+ $cropInfo = '无';
|
|
|
+ $plantTime = '';
|
|
|
+ $growthStage = '';
|
|
|
$stageStartTime = '';
|
|
|
- $stageEndTime = '';
|
|
|
+ $stageEndTime = '';
|
|
|
+ $disasterInfo = '无';
|
|
|
|
|
|
if ($crop) {
|
|
|
- $seedName = $crop->seed ? $crop->seed->name : "种子{$crop->seed_id}";
|
|
|
- $cropInfo = $seedName;
|
|
|
- $plantTime = $crop->plant_time;
|
|
|
- $growthStage = $this->getGrowthStageName($crop->growth_stage);
|
|
|
+ $seedName = $crop->seed ? $crop->seed->name : "种子{$crop->seed_id}";
|
|
|
+ $cropInfo = $seedName;
|
|
|
+ $plantTime = $crop->plant_time;
|
|
|
+ $growthStage = $this->getGrowthStageName($crop->growth_stage);
|
|
|
$stageStartTime = $crop->stage_start_time;
|
|
|
- $stageEndTime = $crop->stage_end_time;
|
|
|
+ $stageEndTime = $crop->stage_end_time;
|
|
|
+
|
|
|
+ // 处理灾害信息
|
|
|
+ if (!empty($crop->disasters)) {
|
|
|
+ $disasterInfo = $this->formatDisasterInfo($crop->disasters);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
$rows[] = [
|
|
|
@@ -299,6 +355,7 @@ class FarmUserSummaryController extends AdminController
|
|
|
$growthStage,
|
|
|
$stageStartTime,
|
|
|
$stageEndTime,
|
|
|
+ $disasterInfo,
|
|
|
];
|
|
|
}
|
|
|
|
|
|
@@ -347,6 +404,7 @@ class FarmUserSummaryController extends AdminController
|
|
|
try {
|
|
|
$stageNames = GROWTH_STAGE::getAll();
|
|
|
$stageValue = $stage->value;
|
|
|
+
|
|
|
return $stageNames[$stageValue] ?? "阶段{$stageValue}";
|
|
|
} catch (\Throwable) {
|
|
|
return "错误阶段";
|
|
|
@@ -435,12 +493,65 @@ class FarmUserSummaryController extends AdminController
|
|
|
try {
|
|
|
$typeNames = ITEM_TYPE::getValueDescription();
|
|
|
$typeValue = $type->value;
|
|
|
+
|
|
|
return $typeNames[$typeValue] ?? "类型{$typeValue}";
|
|
|
} catch (\Throwable) {
|
|
|
return "错误类型";
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 格式化灾害信息
|
|
|
+ *
|
|
|
+ * @param array $disasters 灾害数组
|
|
|
+ * @return string 格式化后的灾害信息
|
|
|
+ */
|
|
|
+ protected function formatDisasterInfo(array $disasters): string
|
|
|
+ {
|
|
|
+ if (empty($disasters)) {
|
|
|
+ return '无';
|
|
|
+ }
|
|
|
+
|
|
|
+ $result = [];
|
|
|
+
|
|
|
+ foreach ($disasters as $disaster) {
|
|
|
+ $type = $disaster['type'] ?? 0;
|
|
|
+ $status = $disaster['status'] ?? 'inactive';
|
|
|
+
|
|
|
+ // 获取灾害类型名称
|
|
|
+ $typeName = DISASTER_TYPE::getName($type);
|
|
|
+
|
|
|
+ // 灾害状态
|
|
|
+ $statusText = $status === 'active' ? '<span class="badge badge-danger">活跃</span>' : '<span class="badge badge-secondary">已处理</span>';
|
|
|
+
|
|
|
+ // 灾害开始时间
|
|
|
+ $startTime = isset($disaster['start_time']) ? date('Y-m-d H:i:s', $disaster['start_time']) : '未知';
|
|
|
+
|
|
|
+ // 灾害结束时间(如果有)
|
|
|
+ $endTime = '';
|
|
|
+ if (isset($disaster['end_time']) && $disaster['end_time'] > 0) {
|
|
|
+ $endTime = date('Y-m-d H:i:s', $disaster['end_time']);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 减产比例
|
|
|
+ $penalty = isset($disaster['penalty']) ? ($disaster['penalty'] * 100) . '%' : '5%';
|
|
|
+
|
|
|
+ // 组合灾害信息
|
|
|
+ $disasterInfo = "<div><strong>{$typeName}</strong>: {$statusText}</div>";
|
|
|
+ $disasterInfo .= "<div>开始: {$startTime}</div>";
|
|
|
+
|
|
|
+ if ($endTime) {
|
|
|
+ $disasterInfo .= "<div>结束: {$endTime}</div>";
|
|
|
+ }
|
|
|
+
|
|
|
+ $disasterInfo .= "<div>减产: {$penalty}</div>";
|
|
|
+
|
|
|
+ $result[] = $disasterInfo;
|
|
|
+ }
|
|
|
+
|
|
|
+ return implode('<hr style="margin: 5px 0;">', $result);
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 代币信息卡片
|
|
|
*
|
|
|
@@ -466,8 +577,8 @@ class FarmUserSummaryController extends AdminController
|
|
|
foreach ($funds as $fund) {
|
|
|
try {
|
|
|
$fundIdValue = $fund->fund_id->value();
|
|
|
- $fundName = $fundNames[$fundIdValue] ?? "账户{$fundIdValue}";
|
|
|
- $balance = $fund->balance;
|
|
|
+ $fundName = $fundNames[$fundIdValue] ?? "账户{$fundIdValue}";
|
|
|
+ $balance = $fund->balance;
|
|
|
|
|
|
$rows[] = [
|
|
|
$fundIdValue,
|