input('enabled_only', 0) === 1; return api_success([ 'list' => $this->service()->list($enabledOnly), 'default_company' => $this->service()->defaultName(), ]); } public function catalog(Request $request) { $keyword = trim((string)$request->input('keyword', '')); $limit = max(1, min(100, (int)$request->input('limit', 30))); return api_success([ 'list' => $this->service()->catalogList($keyword, $limit), 'total' => $this->service()->catalogTotal(), 'synced_at' => $this->service()->catalogSyncedAt(), ]); } public function syncCatalog(Request $request) { try { $result = $this->service()->syncCatalog(); } catch (\RuntimeException $e) { return api_error($e->getMessage(), 422); } catch (\Throwable $e) { return api_error('快递100公司码表同步失败', 500, [ 'detail' => $e->getMessage(), ]); } return api_success($result, '快递100公司码表已同步'); } public function recognize(Request $request) { $trackingNo = trim((string)$request->input('tracking_no', '')); $companyName = trim((string)$request->input('company_name', $request->input('company_code', ''))); if ($trackingNo === '') { return api_error('运单号不能为空', 422); } try { $result = $this->service()->recognizeCompany($companyName, $trackingNo); } catch (\RuntimeException $e) { return api_error($e->getMessage(), 422); } catch (\Throwable $e) { return api_error('快递公司识别失败', 500, [ 'detail' => $e->getMessage(), ]); } return api_success($result); } public function save(Request $request) { $id = (int)$request->input('id', 0); try { $companyId = $this->service()->save([ 'company_name' => $request->input('company_name', ''), 'company_code' => $request->input('company_code', ''), 'status' => $request->input('status', 'enabled'), 'is_default' => $request->input('is_default', false), 'sort_order' => $request->input('sort_order', 0), 'remark' => $request->input('remark', ''), ], $id); } catch (\RuntimeException $e) { return api_error($e->getMessage(), 422); } catch (\Throwable $e) { return api_error('快递公司保存失败', 500, [ 'detail' => $e->getMessage(), ]); } return api_success([ 'id' => $companyId, ], $id > 0 ? '快递公司已更新' : '快递公司已创建'); } private function service(): ExpressCompanyService { return new ExpressCompanyService(); } }