paginate(20);
// 禁用创建按钮(如果需要)
// $grid->disableCreateButton();
// 设置表格标题
$grid->header(function () {
return view('transfer::admin.app.header');
});
});
return $grid;
}
/**
* 配置数据详情
*/
protected function detail($id): Show
{
$show = Show::make($id, new TransferApp(), function (Show $show) {
// 使用辅助类配置详情
TransferAppHelper::show($show);
// 添加自定义面板
$show->panel()
->title('划转应用详情')
->tools(function ($tools) {
// 添加测试连接按钮
$tools->append('测试连接');
});
});
return $show;
}
/**
* 配置创建和编辑表单
*/
protected function form(): Form
{
$form = Form::make(new TransferApp(), function (Form $form) {
// 使用辅助类配置表单
TransferAppHelper::form($form);
// 设置表单标题
$form->title('划转应用配置');
// 表单工具栏
$form->tools(function (Form\Tools $tools) {
// 添加测试按钮
$tools->append('测试配置');
});
});
return $form;
}
/**
* 测试应用连接
*/
public function testConnection($id)
{
try {
$app = TransferApp::findOrFail($id);
if ($app->isInternalMode()) {
return response()->json([
'status' => true,
'message' => '农场内部模式,无需测试连接'
]);
}
// 测试各个API端点
$results = [];
$urls = [
'callback' => $app->order_callback_url,
'in_info' => $app->order_in_info_url,
'out_create' => $app->order_out_create_url,
'out_info' => $app->order_out_info_url,
];
foreach ($urls as $type => $url) {
if (empty($url)) {
$results[$type] = ['status' => 'skip', 'message' => '未配置'];
continue;
}
try {
$response = Http::timeout(10)->get($url);
$results[$type] = [
'status' => $response->successful() ? 'success' : 'error',
'message' => $response->successful() ? '连接成功' : "HTTP {$response->status()}",
'response_time' => $response->transferStats->getTransferTime() ?? 0
];
} catch (\Exception $e) {
$results[$type] = [
'status' => 'error',
'message' => $e->getMessage()
];
}
}
return response()->json([
'status' => true,
'message' => '连接测试完成',
'data' => $results
]);
} catch (\Exception $e) {
return response()->json([
'status' => false,
'message' => '测试失败: ' . $e->getMessage()
]);
}
}
/**
* 切换应用状态
*/
public function toggleStatus($id)
{
try {
$app = TransferApp::findOrFail($id);
$app->is_enabled = !$app->is_enabled;
$app->save();
$status = $app->is_enabled ? '启用' : '禁用';
return response()->json([
'status' => true,
'message' => "应用已{$status}"
]);
} catch (\Exception $e) {
return response()->json([
'status' => false,
'message' => '操作失败: ' . $e->getMessage()
]);
}
}
/**
* 获取应用统计信息
*/
public function statistics($id = null)
{
try {
$query = \App\Module\Transfer\Models\TransferOrder::query();
if ($id) {
$query->where('transfer_app_id', $id);
}
$stats = [
'total_orders' => $query->count(),
'completed_orders' => (clone $query)->where('status', \App\Module\Transfer\Enums\TransferStatus::COMPLETED)->count(),
'failed_orders' => (clone $query)->where('status', \App\Module\Transfer\Enums\TransferStatus::FAILED)->count(),
'total_amount' => $query->sum('amount'),
'today_orders' => (clone $query)->whereDate('created_at', today())->count(),
'today_amount' => (clone $query)->whereDate('created_at', today())->sum('amount'),
];
$stats['success_rate'] = $stats['total_orders'] > 0
? round($stats['completed_orders'] / $stats['total_orders'] * 100, 2)
: 0;
return response()->json([
'status' => true,
'data' => $stats
]);
} catch (\Exception $e) {
return response()->json([
'status' => false,
'message' => '获取统计信息失败: ' . $e->getMessage()
]);
}
}
}