pluginService = $pluginService; $this->jobService = $jobService; } /** * 获取插件列表 */ public function index(Request $request) { $platform = $request->get('platform'); $plugins = $this->pluginService->getPlugins($platform); return response()->json([ 'code' => 200, 'data' => $plugins, ]); } /** * 获取插件详情 */ public function show(string $code) { $plugin = $this->pluginService->getPlugin($code); if (!$plugin) { return response()->json([ 'code' => 404, 'message' => '插件不存在', ], 404); } return response()->json([ 'code' => 200, 'data' => $plugin, ]); } /** * 获取插件最新版本 */ public function version(string $code) { $version = $this->pluginService->getLatestVersion($code); if (!$version) { return response()->json([ 'code' => 404, 'message' => '插件不存在', ], 404); } return response()->json([ 'code' => 200, 'data' => $version, ]); } /** * 下载插件 */ public function download(string $code) { $path = $this->pluginService->downloadPlugin($code); if (!$path) { return response()->json([ 'code' => 500, 'message' => '下载失败', ], 500); } return response()->download($path); } /** * 获取用户已安装插件 */ public function installations() { $user = Auth::user(); $installations = $this->pluginService->getUserInstallations($user->id); return response()->json([ 'code' => 200, 'data' => $installations, ]); } /** * 检查插件版本(前端轮询) */ public function checkVersion(Request $request) { $user = Auth::user(); $pluginCode = $request->get('plugin_code'); $deviceId = $request->get('device_id'); $result = $this->pluginService->checkUserPluginVersion($user->id, $pluginCode, $deviceId); return response()->json([ 'code' => 200, 'data' => $result, ]); } /** * 注册插件安装 */ public function register(Request $request) { $user = Auth::user(); $validated = $request->validate([ 'plugin_code' => 'required|string', 'version' => 'required|string', 'device_id' => 'required|string', 'device_name' => 'nullable|string', 'os_version' => 'nullable|string', ]); $result = $this->pluginService->registerInstallation( $user->id, $validated['plugin_code'], $validated['version'], $validated['device_id'], $validated['device_name'] ?? null, $validated['os_version'] ?? null ); return response()->json([ 'code' => $result['success'] ? 200 : 400, 'data' => $result, ]); } /** * 记录心跳 */ public function heartbeat(Request $request) { $user = Auth::user(); $deviceId = $request->get('device_id'); if (!$deviceId) { return response()->json([ 'code' => 400, 'message' => '缺少device_id', ], 400); } $success = $this->pluginService->recordHeartbeat($user->id, $deviceId); return response()->json([ 'code' => $success ? 200 : 400, 'message' => $success ? '心跳成功' : '设备未注册', ]); } /** * 卸载插件 */ public function uninstall(Request $request) { $user = Auth::user(); $validated = $request->validate([ 'plugin_code' => 'required|string', 'device_id' => 'required|string', ]); $success = $this->pluginService->uninstall( $user->id, $validated['plugin_code'], $validated['device_id'] ); return response()->json([ 'code' => $success ? 200 : 404, 'message' => $success ? '卸载成功' : '安装记录不存在', ]); } /** * 获取设备状态 */ public function deviceStatus(string $deviceId) { $user = Auth::user(); $status = $this->pluginService->getDeviceStatus($user->id, $deviceId); return response()->json([ 'code' => 200, 'data' => $status, ]); } /** * 打印任务相关 */ public function createJob(Request $request) { $user = Auth::user(); $validated = $request->validate([ 'platform' => 'required|string', 'plugin_code' => 'required|string', 'order_id' => 'nullable|integer', 'template_id' => 'nullable|integer', 'print_data' => 'required|array', 'priority' => 'nullable|integer', ]); $result = $this->jobService->createJob( $user->id, $validated['platform'], $validated['plugin_code'], $validated['print_data'], $validated['order_id'] ?? null, $validated['template_id'] ?? null, $validated['priority'] ?? 0 ); return response()->json([ 'code' => 200, 'data' => $result, ]); } /** * 批量创建打印任务 */ public function createBatchJobs(Request $request) { $user = Auth::user(); $validated = $request->validate([ 'platform' => 'required|string', 'plugin_code' => 'required|string', 'template_id' => 'nullable|integer', 'orders' => 'required|array', ]); $result = $this->jobService->createBatchJobs( $user->id, $validated['platform'], $validated['plugin_code'], $validated['orders'], $validated['template_id'] ?? null ); return response()->json([ 'code' => 200, 'data' => $result, ]); } /** * 获取打印队列 */ public function queue(Request $request) { $user = Auth::user(); $status = $request->get('status'); $queue = $this->jobService->getQueue($user->id, $status); return response()->json([ 'code' => 200, 'data' => $queue, ]); } /** * 设备获取下一个任务 */ public function getNextJob(Request $request) { $user = Auth::user(); $deviceId = $request->get('device_id'); if (!$deviceId) { return response()->json(['code' => 400, 'message' => '缺少device_id'], 400); } $job = $this->jobService->getNextJob($user->id, $deviceId); return response()->json([ 'code' => 200, 'data' => $job?->toArray() ?? null, ]); } /** * 设备认领任务 */ public function claimJob(Request $request) { $user = Auth::user(); $validated = $request->validate([ 'job_id' => 'required|integer', 'device_id' => 'required|string', ]); $success = $this->jobService->claimJob($user->id, $validated['device_id'], $validated['job_id']); return response()->json([ 'code' => $success ? 200 : 400, 'message' => $success ? '任务已认领' : '认领失败', ]); } /** * 标记打印完成 */ public function completeJob(Request $request) { $user = Auth::user(); $validated = $request->validate([ 'job_id' => 'required|integer', 'device_id' => 'nullable|string', ]); $success = $this->jobService->completeJob($user->id, $validated['job_id'], $validated['device_id'] ?? null); return response()->json([ 'code' => $success ? 200 : 400, 'message' => $success ? '打印完成' : '操作失败', ]); } /** * 标记打印失败 */ public function failJob(Request $request) { $user = Auth::user(); $validated = $request->validate([ 'job_id' => 'required|integer', 'error' => 'required|string', 'device_id' => 'nullable|string', ]); $success = $this->jobService->failJob($user->id, $validated['job_id'], $validated['error'], $validated['device_id'] ?? null); return response()->json([ 'code' => $success ? 200 : 400, 'message' => $success ? '已记录' : '操作失败', ]); } /** * 重试任务 */ public function retryJob(int $jobId) { $user = Auth::user(); $result = $this->jobService->retryJob($user->id, $jobId); return response()->json([ 'code' => $result['success'] ? 200 : 400, 'data' => $result, ]); } /** * 取消任务 */ public function cancelJob(int $jobId) { $user = Auth::user(); $success = $this->jobService->cancelJob($user->id, $jobId); return response()->json([ 'code' => $success ? 200 : 400, 'message' => $success ? '已取消' : '操作失败', ]); } /** * 获取打印历史 */ public function history(Request $request) { $user = Auth::user(); $page = (int) $request->get('page', 1); $perPage = (int) $request->get('per_page', 20); $history = $this->jobService->getHistory($user->id, $page, $perPage); return response()->json([ 'code' => 200, 'data' => $history, ]); } /** * 获取打印统计 */ public function stats() { $user = Auth::user(); $stats = $this->jobService->getStats($user->id); return response()->json([ 'code' => 200, 'data' => $stats, ]); } /** * 批量加入队列 */ public function batchQueue(Request $request) { $user = Auth::user(); $validated = $request->validate([ 'job_ids' => 'required|array', ]); $result = $this->jobService->batchQueue($user->id, $validated['job_ids']); return response()->json([ 'code' => 200, 'data' => $result, ]); } /** * 清空已完成任务 */ public function clearCompleted() { $user = Auth::user(); $count = $this->jobService->clearCompleted($user->id); return response()->json([ 'code' => 200, 'message' => "已清空 {$count} 条记录", ]); } }