authenticate($request); } catch (\Throwable $e) { return api_error($e->getMessage(), 401); } $payload = json_decode($request->rawBody(), true); if (!is_array($payload)) { return api_error('请求体必须是合法 JSON 对象', 422); } try { $result = (new EnterpriseOrderService())->createOrder($auth['customer'], $payload, $request); } catch (\InvalidArgumentException $e) { return api_error($e->getMessage(), 422); } catch (\RuntimeException $e) { return api_error($e->getMessage(), 409); } catch (\Throwable $e) { return api_error('订单创建失败', 500, [ 'detail' => $e->getMessage(), ]); } return api_success($result, !empty($result['idempotent']) ? '订单已存在' : '订单已创建'); } public function shipping(Request $request) { try { $auth = (new EnterpriseOpenApiAuthService())->authenticate($request); } catch (\Throwable $e) { return api_error($e->getMessage(), 401); } $payload = json_decode($request->rawBody(), true); if (!is_array($payload)) { return api_error('请求体必须是合法 JSON 对象', 422); } try { $result = (new EnterpriseOrderService())->submitShipping($auth['customer'], $payload); } catch (\InvalidArgumentException $e) { return api_error($e->getMessage(), 422); } catch (\RuntimeException $e) { return api_error($e->getMessage(), 404); } catch (\Throwable $e) { return api_error('运单提交失败', 500, [ 'detail' => $e->getMessage(), ]); } return api_success($result, '运单已提交'); } public function cancel(Request $request) { try { $auth = (new EnterpriseOpenApiAuthService())->authenticate($request); } catch (\Throwable $e) { return api_error($e->getMessage(), 401); } $payload = json_decode($request->rawBody(), true); if (!is_array($payload)) { return api_error('请求体必须是合法 JSON 对象', 422); } try { $result = (new EnterpriseOrderService())->cancelOrder($auth['customer'], $payload); } catch (\InvalidArgumentException $e) { return api_error($e->getMessage(), 422); } catch (\RuntimeException $e) { return api_error($e->getMessage(), 404); } catch (\Throwable $e) { return api_error('订单取消失败', 500, [ 'detail' => $e->getMessage(), ]); } return api_success($result, '订单已取消'); } public function saveReturnAddress(Request $request) { try { $auth = (new EnterpriseOpenApiAuthService())->authenticate($request); } catch (\Throwable $e) { return api_error($e->getMessage(), 401); } $payload = json_decode($request->rawBody(), true); if (!is_array($payload)) { return api_error('请求体必须是合法 JSON 对象', 422); } try { $result = (new EnterpriseOrderService())->saveReturnAddress($auth['customer'], $payload); } catch (\InvalidArgumentException $e) { return api_error($e->getMessage(), 422); } catch (\RuntimeException $e) { return api_error($e->getMessage(), 404); } catch (\Throwable $e) { return api_error('寄回地址保存失败', 500, [ 'detail' => $e->getMessage(), ]); } return api_success($result, '寄回地址已保存'); } public function servicePricePackages(Request $request) { try { (new EnterpriseOpenApiAuthService())->authenticate($request); } catch (\Throwable $e) { return api_error($e->getMessage(), 401); } try { $service = new AppraisalServicePricePackageService(); $serviceProvider = trim((string)$request->input('service_provider', '')); $allowedProviders = array_column($service->providerOptions(), 'service_provider'); if ($serviceProvider !== '' && !in_array($serviceProvider, $allowedProviders, true)) { return api_error('service_provider 无效', 422); } $providers = array_values(array_filter( $service->serviceOptions(), fn (array $item) => $serviceProvider === '' || (string)$item['service_provider'] === $serviceProvider )); return api_success([ 'service_providers' => array_map(fn (array $item) => $this->formatOpenServiceProvider($item), $providers), ]); } catch (\Throwable $e) { return api_error('套餐获取失败', 500, [ 'detail' => $e->getMessage(), ]); } } public function detail(Request $request) { try { $auth = (new EnterpriseOpenApiAuthService())->authenticate($request); } catch (\Throwable $e) { return api_error($e->getMessage(), 401); } $externalOrderNo = trim((string)($request->route?->param('external_order_no', '') ?? '')); if ($externalOrderNo === '') { $externalOrderNo = trim((string)$request->input('external_order_no', '')); } $orderNo = trim((string)$request->input('order_no', '')); try { $order = (new EnterpriseOrderService())->findOrder($auth['customer'], $externalOrderNo, $orderNo); } catch (\InvalidArgumentException $e) { return api_error($e->getMessage(), 422); } catch (\RuntimeException $e) { return api_error($e->getMessage(), 404); } catch (\Throwable $e) { return api_error('订单查询失败', 500, [ 'detail' => $e->getMessage(), ]); } return api_success([ 'order' => $order, ]); } private function formatOpenServiceProvider(array $item): array { $packages = array_map(fn (array $package) => $this->formatOpenPricePackage($package), (array)($item['packages'] ?? [])); $defaultPackageCode = ''; foreach ($packages as $package) { if (!empty($package['is_default'])) { $defaultPackageCode = (string)$package['price_package_code']; break; } } if ($defaultPackageCode === '' && isset($packages[0])) { $defaultPackageCode = (string)$packages[0]['price_package_code']; } return [ 'service_provider' => (string)$item['service_provider'], 'service_provider_text' => (string)$item['service_provider_text'], 'sla_hours' => (int)$item['sla_hours'], 'default_price_package_code' => $defaultPackageCode, 'packages' => $packages, ]; } private function formatOpenPricePackage(array $package): array { return [ 'service_provider' => (string)$package['service_provider'], 'service_provider_text' => (string)$package['service_provider_text'], 'price_package_name' => (string)$package['package_name'], 'price_package_code' => (string)$package['package_code'], 'price_package_price' => (float)$package['price'], 'description' => (string)$package['description'], 'is_default' => (bool)$package['is_default'], 'sla_hours' => (int)$package['sla_hours'], ]; } }