paginate(50);
// 禁用创建和编辑按钮
$grid->disableCreateButton();
$grid->disableEditButton();
// 设置表格标题
// $grid->header(function () {
// return view('transfer::admin.order.header', [
// 'todayStats' => TransferOrderHelper::getTodayStats(),
// 'statusStats' => TransferOrderHelper::getStatusStats(),
// 'typeStats' => TransferOrderHelper::getTypeStats(),
// ]);
// });
});
return $grid;
}
/**
* 配置数据详情
*/
protected function detail($id): Show
{
$show = Show::make($id, new TransferOrder(), function (Show $show) use ($id) {
// 使用辅助类配置详情
TransferOrderHelper::show($show);
// 添加自定义面板
$show->panel()
->title('划转订单详情')
->tools(function ($tools) use ($id) {
$order = TransferOrder::find($id);
if ($order && $order->canRetry()) {
$tools->append('重试订单');
}
if ($order && $order->isTransferOut() && !$order->isFinalStatus()) {
$tools->append('手动完成');
}
});
});
return $show;
}
/**
* 重试订单
*/
#[Post('transfer/orders/{id}/retry', name: 'admin.transfer.orders.retry')]
public function retry($id)
{
try {
$order = TransferOrder::findOrFail($id);
if (!$order->canRetry()) {
return response()->json([
'status' => false,
'message' => '订单状态不允许重试'
]);
}
$result = TransferLogic::retryOrder($id);
if ($result) {
return response()->json([
'status' => true,
'message' => '订单重试成功'
]);
} else {
return response()->json([
'status' => false,
'message' => '订单重试失败'
]);
}
} catch (\Exception $e) {
return response()->json([
'status' => false,
'message' => '重试失败: ' . $e->getMessage()
]);
}
}
/**
* 手动完成订单
*/
#[Post('transfer/orders/{id}/manual-complete', name: 'admin.transfer.orders.manual-complete')]
public function manualComplete($id)
{
try {
$remark = request('remark', '管理员手动完成');
$order = TransferOrder::findOrFail($id);
if ($order->isFinalStatus()) {
return response()->json([
'status' => false,
'message' => '订单已处于最终状态'
]);
}
if (!$order->isTransferOut()) {
return response()->json([
'status' => false,
'message' => '只有转出订单支持手动完成'
]);
}
$result = TransferLogic::manualComplete($id, $remark);
if ($result) {
return response()->json([
'status' => true,
'message' => '订单手动完成成功'
]);
} else {
return response()->json([
'status' => false,
'message' => '订单手动完成失败'
]);
}
} catch (\Exception $e) {
return response()->json([
'status' => false,
'message' => '手动完成失败: ' . $e->getMessage()
]);
}
}
/**
* 获取订单统计信息
*/
#[Get('transfer/orders/statistics', name: 'admin.transfer.orders.statistics')]
public function statistics()
{
try {
$stats = [
'today' => TransferOrderHelper::getTodayStats(),
'status' => TransferOrderHelper::getStatusStats(),
'type' => TransferOrderHelper::getTypeStats(),
];
return response()->json([
'status' => true,
'data' => $stats
]);
} catch (\Exception $e) {
return response()->json([
'status' => false,
'message' => '获取统计信息失败: ' . $e->getMessage()
]);
}
}
/**
* 导出订单数据
*/
#[Get('transfer/orders/export', name: 'admin.transfer.orders.export')]
public function export()
{
try {
$filters = request()->all();
// 构建查询
$query = TransferOrder::with('transferApp');
// 应用筛选条件
if (isset($filters['transfer_app_id'])) {
$query->where('transfer_app_id', $filters['transfer_app_id']);
}
if (isset($filters['type'])) {
$query->where('type', $filters['type']);
}
if (isset($filters['status'])) {
$query->where('status', $filters['status']);
}
if (isset($filters['start_date'])) {
$query->where('created_at', '>=', $filters['start_date']);
}
if (isset($filters['end_date'])) {
$query->where('created_at', '<=', $filters['end_date']);
}
$orders = $query->orderBy('created_at', 'desc')->limit(10000)->get();
// 生成CSV数据
$csvData = [];
$csvData[] = [
'ID', '应用名称', '外部订单ID', '用户ID', '外部用户ID',
'类型', '状态', '外部金额', '内部金额', '汇率',
'创建时间', '完成时间', '备注'
];
foreach ($orders as $order) {
$csvData[] = [
$order->id,
$order->transferApp->title,
$order->out_order_id,
$order->user_id,
$order->out_user_id,
$order->type->getDescription(),
$order->status->getDescription(),
$order->out_amount,
$order->amount,
$order->exchange_rate,
$order->created_at->format('Y-m-d H:i:s'),
$order->completed_at?->format('Y-m-d H:i:s'),
$order->remark,
];
}
// 生成CSV文件
$filename = 'transfer_orders_' . date('Y-m-d_H-i-s') . '.csv';
$handle = fopen('php://output', 'w');
header('Content-Type: text/csv');
header('Content-Disposition: attachment; filename="' . $filename . '"');
// 添加BOM以支持中文
fwrite($handle, "\xEF\xBB\xBF");
foreach ($csvData as $row) {
fputcsv($handle, $row);
}
fclose($handle);
exit;
} catch (\Exception $e) {
return response()->json([
'status' => false,
'message' => '导出失败: ' . $e->getMessage()
]);
}
}
}