| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- <?php
- namespace App\Module\Mex\Validators;
- use App\Module\Mex\Models\MexOrder;
- use App\Module\Mex\Enums\OrderStatus;
- use UCore\Validator;
- use Illuminate\Support\Facades\Log;
- /**
- * 农贸市场订单存在性验证器
- *
- * 验证订单是否存在、是否属于当前用户、是否可以取消等
- */
- class MexOrderExistsValidator extends Validator
- {
- /**
- * 验证订单存在性和可操作性
- *
- * @param mixed $value 订单ID
- * @param array $data 所有数据
- * @return bool 验证是否通过
- */
- public function validate(mixed $value, array $data): bool
- {
- $orderId = (int)$value;
- $userId = $data['user_id'] ?? null;
- if (!$orderId || $orderId <= 0) {
- $this->addError('订单ID无效');
- return false;
- }
- if (!$userId || $userId <= 0) {
- $this->addError('用户ID无效');
- return false;
- }
- try {
- // 查找订单
- $order = MexOrder::where('id', $orderId)
- ->where('user_id', $userId)
- ->first();
- if (!$order) {
- $this->addError('订单不存在');
- return false;
- }
- // 验证订单状态是否可以取消
- if ($order->status !== OrderStatus::PENDING) {
- $statusText = $this->getOrderStatusText($order->status);
- $this->addError("只能取消等待中的订单,当前订单状态:{$statusText}");
- return false;
- }
- return true;
- } catch (\Exception $e) {
- Log::error('农贸市场订单存在性验证失败', [
- 'order_id' => $orderId,
- 'user_id' => $userId,
- 'error' => $e->getMessage()
- ]);
- $this->addError('订单验证时发生错误');
- return false;
- }
- }
- /**
- * 获取订单状态描述
- *
- * @param OrderStatus $status 订单状态
- * @return string
- */
- private function getOrderStatusText(OrderStatus $status): string
- {
- return match ($status) {
- OrderStatus::PENDING => '等待中',
- OrderStatus::COMPLETED => '已完成',
- OrderStatus::CANCELLED => '已取消',
- OrderStatus::FAILED => '已失败',
- default => '未知状态'
- };
- }
- }
|