463 lines
11 KiB
PHP
463 lines
11 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers;
|
|
|
|
use App\Services\PrintPluginService;
|
|
use App\Services\PrintJobService;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Support\Facades\Auth;
|
|
|
|
class PrintPluginController extends Controller
|
|
{
|
|
protected PrintPluginService $pluginService;
|
|
protected PrintJobService $jobService;
|
|
|
|
public function __construct(PrintPluginService $pluginService, PrintJobService $jobService)
|
|
{
|
|
$this->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} 条记录",
|
|
]);
|
|
}
|
|
}
|