Files
lotteryLaravel/app/Http/Controllers/Api/V1/Admin/Wallet/TransferOrderReconcileController.php
kang d877b5e37a feat: 新增玩家管理与转账对账相关功能
1.  新增完整的后台玩家管理CRUD接口,包括列表、创建、详情、更新、删除
2.  新增转账订单冲正和人工处理功能,支持待对账订单状态变更
3.  扩展钱包流水和转账订单的状态支持,新增reversed、manually_processed等状态
4.  新增玩家API数据统一输出类,标准化玩家信息返回格式
2026-05-14 10:43:33 +08:00

75 lines
2.5 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?php
namespace App\Http\Controllers\Api\V1\Admin\Wallet;
use App\Models\TransferOrder;
use App\Support\ApiResponse;
use App\Support\LotteryMessage;
use App\Exceptions\WalletOperationException;
use App\Services\Wallet\LotteryTransferService;
use App\Http\Controllers\Controller;
use App\Http\Requests\Admin\Wallet\TransferOrderReverseRequest;
use App\Http\Requests\Admin\Wallet\TransferOrderManuallyProcessRequest;
use Illuminate\Http\JsonResponse;
/**
* 后台:转账订单对账操作(冲正 / 人工处理)。
* PRD §12待对账 -> 已冲正 / 已人工处理。
*/
final class TransferOrderReconcileController extends Controller
{
public function __construct(
private readonly LotteryTransferService $transferService,
) {}
public function reverse(TransferOrderReverseRequest $request, string $transferNo): JsonResponse
{
$order = TransferOrder::query()->where('transfer_no', $transferNo)->first();
if ($order === null) {
return ApiResponse::error(__('wallet.order_not_found'), 404);
}
try {
$this->transferService->reconcileTransferOrder(
$order,
'reverse',
(string) $request->validated('remark', ''),
);
} catch (WalletOperationException $e) {
return ApiResponse::error(
LotteryMessage::wallet($request, $e->lotteryCode),
$e->lotteryCode,
null,
$e->httpStatus,
);
}
return ApiResponse::success(['transfer_no' => $transferNo, 'status' => 'reversed']);
}
public function manuallyProcess(TransferOrderManuallyProcessRequest $request, string $transferNo): JsonResponse
{
$order = TransferOrder::query()->where('transfer_no', $transferNo)->first();
if ($order === null) {
return ApiResponse::error(__('wallet.order_not_found'), 404);
}
try {
$this->transferService->reconcileTransferOrder(
$order,
'manually_process',
(string) $request->validated('remark', ''),
);
} catch (WalletOperationException $e) {
return ApiResponse::error(
LotteryMessage::wallet($request, $e->lotteryCode),
$e->lotteryCode,
null,
$e->httpStatus,
);
}
return ApiResponse::success(['transfer_no' => $transferNo, 'status' => 'manually_processed']);
}
}