[PROMOTE] 晉升 demo 變更至 main 生產環境

1. [FIX] 補全下位機 Command(0x02) 狀態代碼與對齊三語系資源檔。
2. [FEAT] 新增溫控感測器離散事件接收處理機制與文件同步。
3. [FIX] 修正商品管理分頁排序不唯一導致的重複商品問題。
This commit is contained in:
sky121113 2026-06-02 16:41:56 +08:00
commit de8477bc7e
8 changed files with 194 additions and 14 deletions

View File

@ -9,6 +9,7 @@ use App\Jobs\Machine\ProcessHeartbeat;
use App\Jobs\Machine\ProcessMachineError; use App\Jobs\Machine\ProcessMachineError;
use App\Jobs\Machine\ProcessTransaction; use App\Jobs\Machine\ProcessTransaction;
use App\Jobs\Machine\ProcessStatus; use App\Jobs\Machine\ProcessStatus;
use App\Jobs\Machine\ProcessMachineEvent;
use App\Jobs\Transaction\ProcessInvoice; use App\Jobs\Transaction\ProcessInvoice;
use App\Jobs\Transaction\ProcessDispenseRecord; use App\Jobs\Transaction\ProcessDispenseRecord;
use App\Jobs\Machine\ProcessCommandAck; use App\Jobs\Machine\ProcessCommandAck;
@ -97,6 +98,9 @@ class ListenMqttQueue extends Command
case 'status': case 'status':
ProcessStatus::dispatch($serialNo, $payload); ProcessStatus::dispatch($serialNo, $payload);
break; break;
case 'event':
ProcessMachineEvent::dispatch($serialNo, $payload);
break;
case 'error': case 'error':
ProcessMachineError::dispatch($serialNo, $payload); ProcessMachineError::dispatch($serialNo, $payload);
break; break;

View File

@ -54,7 +54,7 @@ class ProductController extends Controller
} }
} }
$products = $productQuery->latest()->paginate($per_page, ['*'], 'product_page')->withQueryString(); $products = $productQuery->orderBy('created_at', 'desc')->orderBy('id', 'desc')->paginate($per_page, ['*'], 'product_page')->withQueryString();
// Categories Query // Categories Query
$categoryQuery = ProductCategory::with(['translations', 'company']); $categoryQuery = ProductCategory::with(['translations', 'company']);
@ -70,7 +70,7 @@ class ProductController extends Controller
}); });
} }
$categories = $categoryQuery->latest()->paginate($per_page, ['*'], 'category_page')->withQueryString(); $categories = $categoryQuery->orderBy('created_at', 'desc')->orderBy('id', 'desc')->paginate($per_page, ['*'], 'category_page')->withQueryString();
$companies = $user->isSystemAdmin() ? Company::all() : collect(); $companies = $user->isSystemAdmin() ? Company::all() : collect();
// Settings for Modal (use current user company or fallback) // Settings for Modal (use current user company or fallback)
@ -140,7 +140,7 @@ class ProductController extends Controller
]); ]);
} }
$logs = $logQuery->latest()->paginate($per_page, ['*'], 'log_page')->withQueryString(); $logs = $logQuery->orderBy('created_at', 'desc')->orderBy('id', 'desc')->paginate($per_page, ['*'], 'log_page')->withQueryString();
return response()->json([ return response()->json([
'success' => true, 'success' => true,

View File

@ -0,0 +1,59 @@
<?php
namespace App\Jobs\Machine;
use App\Models\Machine\Machine;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Illuminate\Support\Facades\Log;
class ProcessMachineEvent implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
protected $serialNo;
protected $payload;
/**
* Create a new job instance.
*/
public function __construct($serialNo, $payload)
{
$this->serialNo = $serialNo;
$this->payload = $payload;
}
/**
* Execute the job.
*/
public function handle(): void
{
$machine = Machine::withoutGlobalScopes()->where('serial_no', $this->serialNo)->first();
if (!$machine) {
Log::warning("ProcessMachineEvent: Machine not found [{$this->serialNo}]");
return;
}
$event = $this->payload['event'] ?? null;
if (!$event) {
Log::warning("ProcessMachineEvent: Missing event in payload", ['payload' => $this->payload]);
return;
}
// 寫入機台狀態日誌type 為 'status' 以便正確歸類顯示於「機台狀態」日誌中
$machine->logs()->create([
'company_id' => $machine->company_id,
'type' => 'status', // 忠實呈現於機台狀態中
'level' => 'info',
'message' => $event, // 例如 "fanon" 或 "fanoff"
'context' => $this->payload,
]);
Log::info("ProcessMachineEvent: Machine [{$machine->serial_no}] recorded event [{$event}] to status logs");
}
}

View File

@ -92,15 +92,34 @@ class MachineService
// ═══════════════════════════════════════════════════════════════ // ═══════════════════════════════════════════════════════════════
// 貨道與馬達狀態類 (Prefix: 02 - SLOT_STATUS) // 貨道與馬達狀態類 (Prefix: 02 - SLOT_STATUS)
// ═══════════════════════════════════════════════════════════════ // ═══════════════════════════════════════════════════════════════
'0201' => ['label' => 'Slot normal', 'level' => 'info'], '0201' => ['label' => 'Slot normal', 'level' => 'info'], // 貨道正常
'0202' => ['label' => 'Product empty', 'level' => 'warning'], '0202' => ['label' => 'Slot out of stock', 'level' => 'warning'], // 貨道缺貨
'0203' => ['label' => 'Slot empty', 'level' => 'warning'], '0203' => ['label' => 'Slot does not exist', 'level' => 'warning'], // 貨道不存在
'0205' => ['label' => 'Slot sensor blocked', 'level' => 'warning'], '0204' => ['label' => 'Slot suspended', 'level' => 'warning'], // 貨道暫停使用
'0206' => ['label' => 'Slot not closed', 'level' => 'warning'], '0205' => ['label' => 'Elevator contains items', 'level' => 'warning'], // 升降台裡面有物品
'0207' => ['label' => 'Slot motor error (0207)', 'level' => 'error'], '0206' => ['label' => 'Pickup door not closed', 'level' => 'warning'], // 取貨口門沒關上
'0208' => ['label' => 'Slot motor error (0208)', 'level' => 'error'], '0207' => ['label' => 'Elevator failure (0207)', 'level' => 'error'], // 升降機故障
'0209' => ['label' => 'Slot motor error (0209)', 'level' => 'error'], '0208' => ['label' => 'Elevator self-check error', 'level' => 'error'], // 升降機自檢錯誤
'0212' => ['label' => 'Hopper empty (0212)', 'level' => 'warning'], '0209' => ['label' => 'Microwave pickup door close error (0209)', 'level' => 'error'], // 微波爐取貨口門關閉錯誤
'020B' => ['label' => 'Machine temperature exceeds limit', 'level' => 'warning'], // 機器超過設定溫度,暫停購買
'020C' => ['label' => 'Bento machine cooling water tank empty', 'level' => 'error'], // 盒飯機冷卻水箱缺水
'020D' => ['label' => 'Age verification required', 'level' => 'warning'], // 貨道需要年齡驗證
'020E' => ['label' => 'Water level too low', 'level' => 'warning'], // 水量過低
'020F' => ['label' => 'Weight sensor communication error', 'level' => 'error'], // 重量傳感器通訊錯誤
'0210' => ['label' => 'Microwave delivery door open error (0210)', 'level' => 'error'],// 微波爐進貨口門打開錯誤
'0211' => ['label' => 'Microwave delivery door close error (0211)', 'level' => 'error'],// 微波爐進貨口門關閉錯誤
'0212' => ['label' => 'Bento not detected', 'level' => 'warning'], // 沒檢測到盒飯
'0213' => ['label' => 'Bento heating', 'level' => 'info'], // 盒飯正在加熱
'0214' => ['label' => 'Microwave pickup door open error (0214)', 'level' => 'error'], // 微波爐取貨口門打開錯誤
'0215' => ['label' => 'Please remove bento from microwave', 'level' => 'warning'], // 請取出微波爐內盒飯
'0216' => ['label' => 'Support rod return error', 'level' => 'error'], // 撐桿回位錯誤
'0217' => ['label' => 'Main motor failure', 'level' => 'error'], // 主電機故障
'0218' => ['label' => 'Translation motor failure', 'level' => 'error'], // 平移電機故障
'0219' => ['label' => 'Support rod push error', 'level' => 'error'], // 撐桿推出錯誤
'0220' => ['label' => 'Elevator enter microwave error (0220)', 'level' => 'error'], // 升降台進去微波爐錯誤
'0221' => ['label' => 'Elevator exit microwave error (0221)', 'level' => 'error'], // 升降台出去微波爐錯誤
'0222' => ['label' => 'Microwave push rod push error (0222)', 'level' => 'error'], // 微波爐內推桿推出錯誤
'0223' => ['label' => 'Microwave push rod retract error (0223)', 'level' => 'error'], // 微波爐內推桿收回錯誤
// ═══════════════════════════════════════════════════════════════ // ═══════════════════════════════════════════════════════════════
// 機台整體狀態類 (Prefix: 54 - MACHINE_STATUS) // 機台整體狀態類 (Prefix: 54 - MACHINE_STATUS)

View File

@ -534,12 +534,26 @@ return [
'qos' => 0, 'qos' => 0,
'description' => '用於機台連線與斷線的即時狀態同步。通常用於 MQTT 的遺囑訊息 (LWT) 設定,或由 Broker 連線事件觸發。', 'description' => '用於機台連線與斷線的即時狀態同步。通常用於 MQTT 的遺囑訊息 (LWT) 設定,或由 Broker 連線事件觸發。',
'payload_parameters' => [ 'payload_parameters' => [
'status' => ['type' => 'string', 'description' => '連線狀態。接受值online, offline'], 'status' => ['type' => 'string', 'description' => '連線狀態。接受值online, offline, restarting'],
], ],
'payload_example' => [ 'payload_example' => [
'status' => 'online' 'status' => 'online'
], ],
], ],
[
'name' => '機台硬體事件上報 (Event)',
'slug' => 'mqtt-event',
'action' => 'PUB',
'topic' => 'machine/{serial_no}/event',
'qos' => 1,
'description' => '用於機台上報各種獨立的硬體運行與物理事件。後台收到後會直接寫入機台狀態日誌中並進行多語系翻譯。',
'payload_parameters' => [
'event' => ['type' => 'string', 'description' => '事件識別碼。例如fanon (風扇開), fanoff (風扇關) 等。'],
],
'payload_example' => [
'event' => 'fanon'
],
],
[ [
'name' => '機台異常上報 (Error)', 'name' => '機台異常上報 (Error)',
'slug' => 'mqtt-error', 'slug' => 'mqtt-error',

View File

@ -91,6 +91,7 @@
"Affiliated Unit": "Affiliated Unit", "Affiliated Unit": "Affiliated Unit",
"Affiliation": "Affiliation", "Affiliation": "Affiliation",
"After Qty": "After Qty", "After Qty": "After Qty",
"Age verification required": "Age verification required",
"Alert Severity Levels": "Alert Severity Levels", "Alert Severity Levels": "Alert Severity Levels",
"Alert Summary": "Alert Summary", "Alert Summary": "Alert Summary",
"Alert Switch": "Alert Switch", "Alert Switch": "Alert Switch",
@ -220,6 +221,9 @@
"Before Qty": "Before Qty", "Before Qty": "Before Qty",
"Belongs To": "Belongs To", "Belongs To": "Belongs To",
"Belongs To Company": "Belongs To Company", "Belongs To Company": "Belongs To Company",
"Bento heating": "Bento heating",
"Bento machine cooling water tank empty": "Bento machine cooling water tank low water",
"Bento not detected": "Bento not detected",
"Bill Acceptor": "Bill Acceptor", "Bill Acceptor": "Bill Acceptor",
"Bracelet drop not detected": "Bracelet drop not detected", "Bracelet drop not detected": "Bracelet drop not detected",
"Bracelet scan failed": "Bracelet scan failed", "Bracelet scan failed": "Bracelet scan failed",
@ -590,13 +594,18 @@
"Electronic Invoice": "Electronic Invoice", "Electronic Invoice": "Electronic Invoice",
"Electronic Invoices": "Electronic Invoices", "Electronic Invoices": "Electronic Invoices",
"Elevator belt self-check error": "Elevator belt self-check error", "Elevator belt self-check error": "Elevator belt self-check error",
"Elevator contains items": "Elevator contains items",
"Elevator descending": "Elevator descending", "Elevator descending": "Elevator descending",
"Elevator descent error": "Elevator descent error", "Elevator descent error": "Elevator descent error",
"Elevator enter microwave error": "Elevator enter microwave error", "Elevator enter microwave error": "Elevator enter microwave error",
"Elevator enter microwave error (0220)": "Elevator enter microwave error (0220)",
"Elevator exit microwave error": "Elevator exit microwave error", "Elevator exit microwave error": "Elevator exit microwave error",
"Elevator exit microwave error (0221)": "Elevator exit microwave error (0221)",
"Elevator failure": "Elevator failure", "Elevator failure": "Elevator failure",
"Elevator failure (0207)": "Elevator failure (0207)",
"Elevator rise error": "Elevator rise error", "Elevator rise error": "Elevator rise error",
"Elevator rising": "Elevator rising", "Elevator rising": "Elevator rising",
"Elevator self-check error": "Elevator self-check error",
"Elevator sensor error": "Elevator sensor error", "Elevator sensor error": "Elevator sensor error",
"Elevator support rod push error": "Elevator support rod push error", "Elevator support rod push error": "Elevator support rod push error",
"Elevator support rod return error": "Elevator support rod return error", "Elevator support rod return error": "Elevator support rod return error",
@ -1014,6 +1023,7 @@
"Machine not found": "Machine not found", "Machine not found": "Machine not found",
"Machine permissions updated successfully.": "Machine permissions updated successfully.", "Machine permissions updated successfully.": "Machine permissions updated successfully.",
"Machine settings updated successfully.": "Machine settings updated successfully.", "Machine settings updated successfully.": "Machine settings updated successfully.",
"Machine temperature exceeds limit": "Machine temperature exceeds limit, purchase suspended",
"Machine to Warehouse": "Machine to Warehouse", "Machine to Warehouse": "Machine to Warehouse",
"Machine to Warehouse Return": "Machine to Warehouse Return", "Machine to Warehouse Return": "Machine to Warehouse Return",
"Machine to warehouse returns": "Machine to warehouse returns", "Machine to warehouse returns": "Machine to warehouse returns",
@ -1023,6 +1033,7 @@
"Machines Online": "Machines Online", "Machines Online": "Machines Online",
"Main": "Main", "Main": "Main",
"Main Warehouses": "Main Warehouses", "Main Warehouses": "Main Warehouses",
"Main motor failure": "Main motor failure",
"Maintenance": "Maintenance", "Maintenance": "Maintenance",
"Maintenance Content": "Maintenance Content", "Maintenance Content": "Maintenance Content",
"Maintenance Date": "Maintenance Date", "Maintenance Date": "Maintenance Date",
@ -1102,17 +1113,23 @@
"Message Content": "Message Content", "Message Content": "Message Content",
"Message Display": "Message Display", "Message Display": "Message Display",
"Microwave delivery door close error": "Microwave delivery door close error", "Microwave delivery door close error": "Microwave delivery door close error",
"Microwave delivery door close error (0211)": "Microwave delivery door close error (0211)",
"Microwave delivery door closing": "Microwave delivery door closing", "Microwave delivery door closing": "Microwave delivery door closing",
"Microwave delivery door open error": "Microwave delivery door open error", "Microwave delivery door open error": "Microwave delivery door open error",
"Microwave delivery door open error (0210)": "Microwave delivery door open error (0210)",
"Microwave delivery door opening": "Microwave delivery door opening", "Microwave delivery door opening": "Microwave delivery door opening",
"Microwave door error": "Microwave door error", "Microwave door error": "Microwave door error",
"Microwave door opened": "Microwave door opened", "Microwave door opened": "Microwave door opened",
"Microwave pickup door close error": "Microwave pickup door close error", "Microwave pickup door close error": "Microwave pickup door close error",
"Microwave pickup door close error (0209)": "Microwave pickup door close error (0209)",
"Microwave pickup door closing": "Microwave pickup door closing", "Microwave pickup door closing": "Microwave pickup door closing",
"Microwave pickup door open error": "Microwave pickup door open error", "Microwave pickup door open error": "Microwave pickup door open error",
"Microwave pickup door open error (0214)": "Microwave pickup door open error (0214)",
"Microwave pickup door opening": "Microwave pickup door opening", "Microwave pickup door opening": "Microwave pickup door opening",
"Microwave push rod push error": "Microwave push rod push error", "Microwave push rod push error": "Microwave push rod push error",
"Microwave push rod push error (0222)": "Microwave push rod push error (0222)",
"Microwave push rod retract error": "Microwave push rod retract error", "Microwave push rod retract error": "Microwave push rod retract error",
"Microwave push rod retract error (0223)": "Microwave push rod retract error (0223)",
"Milk dispense timeout": "Milk dispense timeout", "Milk dispense timeout": "Milk dispense timeout",
"Min 8 characters": "Min 8 characters", "Min 8 characters": "Min 8 characters",
"Model": "Model", "Model": "Model",
@ -1427,6 +1444,7 @@
"Please enter version name": "Please enter version name", "Please enter version name": "Please enter version name",
"Please make sure to enable \"Background graphics\" in your browser print settings to print product images and styled components correctly.": "Please make sure to enable \"Background graphics\" in your browser print settings to print product images and styled components correctly.", "Please make sure to enable \"Background graphics\" in your browser print settings to print product images and styled components correctly.": "Please make sure to enable \"Background graphics\" in your browser print settings to print product images and styled components correctly.",
"Please provide a download URL": "Please provide a download URL", "Please provide a download URL": "Please provide a download URL",
"Please remove bento from microwave": "Please remove bento from microwave",
"Please select a company": "Please select a company", "Please select a company": "Please select a company",
"Please select a company.": "Please select a company.", "Please select a company.": "Please select a company.",
"Please select a machine": "Please select a machine", "Please select a machine": "Please select a machine",
@ -1773,6 +1791,7 @@
"Slot No": "Slot No", "Slot No": "Slot No",
"Slot Status": "Slot Status", "Slot Status": "Slot Status",
"Slot Test": "Slot Test", "Slot Test": "Slot Test",
"Slot does not exist": "Slot does not exist",
"Slot empty": "Slot empty", "Slot empty": "Slot empty",
"Slot jammed": "Slot jammed", "Slot jammed": "Slot jammed",
"Slot motor error (0207)": "Slot motor error (0207)", "Slot motor error (0207)": "Slot motor error (0207)",
@ -1781,8 +1800,10 @@
"Slot normal": "Slot normal", "Slot normal": "Slot normal",
"Slot not closed": "Slot not closed", "Slot not closed": "Slot not closed",
"Slot not found": "Slot not found", "Slot not found": "Slot not found",
"Slot out of stock": "Slot out of stock",
"Slot report synchronized success": "Slot report synchronized success", "Slot report synchronized success": "Slot report synchronized success",
"Slot sensor blocked": "Slot sensor blocked", "Slot sensor blocked": "Slot sensor blocked",
"Slot suspended": "Slot suspended",
"Slot updated successfully.": "Slot updated successfully.", "Slot updated successfully.": "Slot updated successfully.",
"Slots": "Slots", "Slots": "Slots",
"Slots need replenishment": "Slots need replenishment", "Slots need replenishment": "Slots need replenishment",
@ -1881,6 +1902,8 @@
"Superseded by new adjustment": "Superseded by new adjustment", "Superseded by new adjustment": "Superseded by new adjustment",
"Superseded by new command": "Superseded by new command", "Superseded by new command": "Superseded by new command",
"Superseded by new command (Timeout)": "Superseded by new command (Timeout)", "Superseded by new command (Timeout)": "Superseded by new command (Timeout)",
"Support rod push error": "Support rod push error",
"Support rod return error": "Support rod return error",
"Supports JPEG, PNG, SVG (Max 2MB). Ideal proportion: Horizontal or Square.": "Supports JPEG, PNG, SVG (Max 2MB). Ideal proportion: Horizontal or Square.", "Supports JPEG, PNG, SVG (Max 2MB). Ideal proportion: Horizontal or Square.": "Supports JPEG, PNG, SVG (Max 2MB). Ideal proportion: Horizontal or Square.",
"Survey Analysis": "Survey Analysis", "Survey Analysis": "Survey Analysis",
"Sync Ads": "Sync Ads", "Sync Ads": "Sync Ads",
@ -2020,6 +2043,7 @@
"Transfer order status tracking": "Transfer order status tracking", "Transfer order status tracking": "Transfer order status tracking",
"Transfer out": "Transfer out", "Transfer out": "Transfer out",
"Transfers": "Transfers", "Transfers": "Transfers",
"Translation motor failure": "Translation motor failure",
"Trigger": "Trigger", "Trigger": "Trigger",
"Trigger Dispense": "Trigger Dispense", "Trigger Dispense": "Trigger Dispense",
"Trigger Remote Dispense": "Trigger Remote Dispense", "Trigger Remote Dispense": "Trigger Remote Dispense",
@ -2161,8 +2185,10 @@
"Warranty End": "Warranty End", "Warranty End": "Warranty End",
"Warranty Service": "Warranty Service", "Warranty Service": "Warranty Service",
"Warranty Start": "Warranty Start", "Warranty Start": "Warranty Start",
"Water level too low": "Water level too low",
"Webhook Status": "Webhook Status", "Webhook Status": "Webhook Status",
"Webhook URL": "Webhook URL", "Webhook URL": "Webhook URL",
"Weight sensor communication error": "Weight sensor communication error",
"Welcome Gift": "Welcome Gift", "Welcome Gift": "Welcome Gift",
"Welcome Gift Code": "Welcome Gift Code", "Welcome Gift Code": "Welcome Gift Code",
"Welcome Gift Code (8 Digits)": "Welcome Gift Code (8 Digits)", "Welcome Gift Code (8 Digits)": "Welcome Gift Code (8 Digits)",
@ -2250,6 +2276,8 @@
"enabled": "enabled", "enabled": "enabled",
"error": "error", "error": "error",
"failed": "failed", "failed": "failed",
"fanoff": "Fan turned off",
"fanon": "Fan turned on",
"files selected": "files selected", "files selected": "files selected",
"hours ago": "hours ago", "hours ago": "hours ago",
"image": "image", "image": "image",

View File

@ -91,6 +91,7 @@
"Affiliated Unit": "所属ユニット", "Affiliated Unit": "所属ユニット",
"Affiliation": "所属", "Affiliation": "所属",
"After Qty": "変動後数量", "After Qty": "変動後数量",
"Age verification required": "年齢認証が必要です",
"Alert Severity Levels": "アラート深刻度", "Alert Severity Levels": "アラート深刻度",
"Alert Summary": "アラート概要", "Alert Summary": "アラート概要",
"Alert Switch": "アラートスイッチ", "Alert Switch": "アラートスイッチ",
@ -220,6 +221,9 @@
"Before Qty": "変動前数量", "Before Qty": "変動前数量",
"Belongs To": "会社名", "Belongs To": "会社名",
"Belongs To Company": "所属会社", "Belongs To Company": "所属会社",
"Bento heating": "弁当加熱中",
"Bento machine cooling water tank empty": "弁当機冷却水タンク空",
"Bento not detected": "弁当が検出されません",
"Bill Acceptor": "紙幣識別機", "Bill Acceptor": "紙幣識別機",
"Bracelet drop not detected": "ブレスレット落下未検出", "Bracelet drop not detected": "ブレスレット落下未検出",
"Bracelet scan failed": "ブレスレットスキャン失敗", "Bracelet scan failed": "ブレスレットスキャン失敗",
@ -590,13 +594,18 @@
"Electronic Invoice": "電子領収書", "Electronic Invoice": "電子領収書",
"Electronic Invoices": "電子領収書", "Electronic Invoices": "電子領収書",
"Elevator belt self-check error": "エレベーターベルト自己診断エラー", "Elevator belt self-check error": "エレベーターベルト自己診断エラー",
"Elevator contains items": "リフト内に商品あり",
"Elevator descending": "エレベーター下降中", "Elevator descending": "エレベーター下降中",
"Elevator descent error": "エレベーター下降エラー", "Elevator descent error": "エレベーター下降エラー",
"Elevator enter microwave error": "エレベーター電子レンジ進入エラー", "Elevator enter microwave error": "エレベーター電子レンジ進入エラー",
"Elevator enter microwave error (0220)": "リフト電子レンジ進入エラー (0220)",
"Elevator exit microwave error": "エレベーター電子レンジ退出エラー", "Elevator exit microwave error": "エレベーター電子レンジ退出エラー",
"Elevator exit microwave error (0221)": "リフト電子レンジ退出エラー (0221)",
"Elevator failure": "エレベーター故障", "Elevator failure": "エレベーター故障",
"Elevator failure (0207)": "リフト故障 (0207)",
"Elevator rise error": "エレベーター上昇エラー", "Elevator rise error": "エレベーター上昇エラー",
"Elevator rising": "エレベーター上昇中", "Elevator rising": "エレベーター上昇中",
"Elevator self-check error": "リフト自己診断エラー",
"Elevator sensor error": "エレベーターセンサーエラー", "Elevator sensor error": "エレベーターセンサーエラー",
"Elevator support rod push error": "エレベーター支柱押し出しエラー", "Elevator support rod push error": "エレベーター支柱押し出しエラー",
"Elevator support rod return error": "エレベーター支柱復帰エラー", "Elevator support rod return error": "エレベーター支柱復帰エラー",
@ -1014,6 +1023,7 @@
"Machine not found": "機器が見つかりません", "Machine not found": "機器が見つかりません",
"Machine permissions updated successfully.": "機器権限が正常に更新されました。", "Machine permissions updated successfully.": "機器権限が正常に更新されました。",
"Machine settings updated successfully.": "機器設定が正常に更新されました。", "Machine settings updated successfully.": "機器設定が正常に更新されました。",
"Machine temperature exceeds limit": "設定温度超過のため購入一時停止",
"Machine to Warehouse": "機器から倉庫", "Machine to Warehouse": "機器から倉庫",
"Machine to Warehouse Return": "自販機から倉庫への返品", "Machine to Warehouse Return": "自販機から倉庫への返品",
"Machine to warehouse returns": "機器から倉庫への返却", "Machine to warehouse returns": "機器から倉庫への返却",
@ -1023,6 +1033,7 @@
"Machines Online": "オンライン機器", "Machines Online": "オンライン機器",
"Main": "本庫", "Main": "本庫",
"Main Warehouses": "本庫数", "Main Warehouses": "本庫数",
"Main motor failure": "メインモーター故障",
"Maintenance": "メンテナンス", "Maintenance": "メンテナンス",
"Maintenance Content": "メンテナンス内容", "Maintenance Content": "メンテナンス内容",
"Maintenance Date": "メンテナンス日", "Maintenance Date": "メンテナンス日",
@ -1102,17 +1113,23 @@
"Message Content": "メッセージ内容", "Message Content": "メッセージ内容",
"Message Display": "メッセージ表示", "Message Display": "メッセージ表示",
"Microwave delivery door close error": "電子レンジ搬入口扉閉鎖エラー", "Microwave delivery door close error": "電子レンジ搬入口扉閉鎖エラー",
"Microwave delivery door close error (0211)": "電子レンジ搬入口扉閉エラー (0211)",
"Microwave delivery door closing": "電子レンジ搬入口扉閉鎖中", "Microwave delivery door closing": "電子レンジ搬入口扉閉鎖中",
"Microwave delivery door open error": "電子レンジ搬入口扉開放エラー", "Microwave delivery door open error": "電子レンジ搬入口扉開放エラー",
"Microwave delivery door open error (0210)": "電子レンジ搬入口扉開エラー (0210)",
"Microwave delivery door opening": "電子レンジ搬入口扉開放中", "Microwave delivery door opening": "電子レンジ搬入口扉開放中",
"Microwave door error": "電子レンジ扉エラー", "Microwave door error": "電子レンジ扉エラー",
"Microwave door opened": "電子レンジ扉開放", "Microwave door opened": "電子レンジ扉開放",
"Microwave pickup door close error": "電子レンジ取り出し口扉閉鎖エラー", "Microwave pickup door close error": "電子レンジ取り出し口扉閉鎖エラー",
"Microwave pickup door close error (0209)": "電子レンジ取出扉閉エラー (0209)",
"Microwave pickup door closing": "電子レンジ取り出し口扉閉鎖中", "Microwave pickup door closing": "電子レンジ取り出し口扉閉鎖中",
"Microwave pickup door open error": "電子レンジ取り出し口扉開放エラー", "Microwave pickup door open error": "電子レンジ取り出し口扉開放エラー",
"Microwave pickup door open error (0214)": "電子レンジ取出扉開エラー (0214)",
"Microwave pickup door opening": "電子レンジ取り出し口扉開放中", "Microwave pickup door opening": "電子レンジ取り出し口扉開放中",
"Microwave push rod push error": "電子レンジ内プッシャー押し出しエラー", "Microwave push rod push error": "電子レンジ内プッシャー押し出しエラー",
"Microwave push rod push error (0222)": "電子レンジプッシュロッド押し出しエラー (0222)",
"Microwave push rod retract error": "電子レンジ内プッシャー回収エラー", "Microwave push rod retract error": "電子レンジ内プッシャー回収エラー",
"Microwave push rod retract error (0223)": "電子レンジプッシュロッド引き込みエラー (0223)",
"Milk dispense timeout": "牛乳抽出タイムアウト", "Milk dispense timeout": "牛乳抽出タイムアウト",
"Min 8 characters": "最低 8文字", "Min 8 characters": "最低 8文字",
"Model": "機器モデル", "Model": "機器モデル",
@ -1412,7 +1429,7 @@
"Pickup door closed": "受取扉が閉まりました", "Pickup door closed": "受取扉が閉まりました",
"Pickup door closed (cart mode)": "取り出し口扉閉鎖成功", "Pickup door closed (cart mode)": "取り出し口扉閉鎖成功",
"Pickup door error": "受取扉エラー", "Pickup door error": "受取扉エラー",
"Pickup door not closed": "取り出し口扉未閉鎖", "Pickup door not closed": "取出扉が閉まっていません",
"Pickup door opened (cart mode)": "取り出し口扉開放成功", "Pickup door opened (cart mode)": "取り出し口扉開放成功",
"Pickup door unlocked": "取り出し口扉開錠", "Pickup door unlocked": "取り出し口扉開錠",
"Platform Operator": "プラットフォーム事業者", "Platform Operator": "プラットフォーム事業者",
@ -1427,6 +1444,7 @@
"Please enter version name": "Please enter version name", "Please enter version name": "Please enter version name",
"Please make sure to enable \"Background graphics\" in your browser print settings to print product images and styled components correctly.": "商品の画像やスタイル付きコンポーネントを正しく印刷するために、ブラウザの印刷設定で『背景のグラフィック』を有効にしてください。", "Please make sure to enable \"Background graphics\" in your browser print settings to print product images and styled components correctly.": "商品の画像やスタイル付きコンポーネントを正しく印刷するために、ブラウザの印刷設定で『背景のグラフィック』を有効にしてください。",
"Please provide a download URL": "Please provide a download URL", "Please provide a download URL": "Please provide a download URL",
"Please remove bento from microwave": "電子レンジ内の弁当を取り出してください",
"Please select a company": "会社を選択してください", "Please select a company": "会社を選択してください",
"Please select a company.": "会社を選択してください。", "Please select a company.": "会社を選択してください。",
"Please select a machine": "機器を選択してください", "Please select a machine": "機器を選択してください",
@ -1773,6 +1791,7 @@
"Slot No": "スロット番号", "Slot No": "スロット番号",
"Slot Status": "スロット期限ステータス", "Slot Status": "スロット期限ステータス",
"Slot Test": "スロットテスト", "Slot Test": "スロットテスト",
"Slot does not exist": "チャンネルが存在しません",
"Slot empty": "チャンネル在庫切れ", "Slot empty": "チャンネル在庫切れ",
"Slot jammed": "商品詰まり", "Slot jammed": "商品詰まり",
"Slot motor error (0207)": "チャンネルモーターエラー (0207)", "Slot motor error (0207)": "チャンネルモーターエラー (0207)",
@ -1781,8 +1800,10 @@
"Slot normal": "チャンネル正常", "Slot normal": "チャンネル正常",
"Slot not closed": "チャンネル未閉鎖", "Slot not closed": "チャンネル未閉鎖",
"Slot not found": "指定されたスロットが見つかりません", "Slot not found": "指定されたスロットが見つかりません",
"Slot out of stock": "チャンネル在庫切れ",
"Slot report synchronized success": "スロットレポートの同期に成功しました", "Slot report synchronized success": "スロットレポートの同期に成功しました",
"Slot sensor blocked": "チャンネルセンサー遮蔽", "Slot sensor blocked": "チャンネルセンサー遮蔽",
"Slot suspended": "チャンネル一時停止",
"Slot updated successfully.": "スロットが正常に更新されました。", "Slot updated successfully.": "スロットが正常に更新されました。",
"Slots": "スロット数", "Slots": "スロット数",
"Slots need replenishment": "補充が必要なスロット", "Slots need replenishment": "補充が必要なスロット",
@ -1881,6 +1902,8 @@
"Superseded by new adjustment": "新しい調整により上書きされました", "Superseded by new adjustment": "新しい調整により上書きされました",
"Superseded by new command": "新しいコマンドにより上書きされました", "Superseded by new command": "新しいコマンドにより上書きされました",
"Superseded by new command (Timeout)": "新しいコマンドにより上書きされました (タイムアウト)", "Superseded by new command (Timeout)": "新しいコマンドにより上書きされました (タイムアウト)",
"Support rod push error": "サポートロッド押し出しエラー",
"Support rod return error": "サポートロッド復帰エラー",
"Supports JPEG, PNG, SVG (Max 2MB). Ideal proportion: Horizontal or Square.": "JPEG、PNG、SVGをサポート最大2MB。推奨比率横長または正方形。", "Supports JPEG, PNG, SVG (Max 2MB). Ideal proportion: Horizontal or Square.": "JPEG、PNG、SVGをサポート最大2MB。推奨比率横長または正方形。",
"Survey Analysis": "アンケート分析", "Survey Analysis": "アンケート分析",
"Sync Ads": "広告を同期", "Sync Ads": "広告を同期",
@ -2020,6 +2043,7 @@
"Transfer order status tracking": "移動伝票ステータス追跡", "Transfer order status tracking": "移動伝票ステータス追跡",
"Transfer out": "移動(出)", "Transfer out": "移動(出)",
"Transfers": "移動伝票", "Transfers": "移動伝票",
"Translation motor failure": "平行移動モーター故障",
"Trigger": "実行", "Trigger": "実行",
"Trigger Dispense": "出庫トリガー", "Trigger Dispense": "出庫トリガー",
"Trigger Remote Dispense": "遠隔出庫をトリガー", "Trigger Remote Dispense": "遠隔出庫をトリガー",
@ -2161,8 +2185,10 @@
"Warranty End": "保証終了", "Warranty End": "保証終了",
"Warranty Service": "保証サービス", "Warranty Service": "保証サービス",
"Warranty Start": "保証開始", "Warranty Start": "保証開始",
"Water level too low": "水量低下",
"Webhook Status": "Webhook ステータス", "Webhook Status": "Webhook ステータス",
"Webhook URL": "Webhook URL", "Webhook URL": "Webhook URL",
"Weight sensor communication error": "重量センサー通信エラー",
"Welcome Gift": "来店プレゼント", "Welcome Gift": "来店プレゼント",
"Welcome Gift Code": "来店プレゼントコード", "Welcome Gift Code": "来店プレゼントコード",
"Welcome Gift Code (8 Digits)": "ウェルカムギフトコード (8桁)", "Welcome Gift Code (8 Digits)": "ウェルカムギフトコード (8桁)",
@ -2250,6 +2276,8 @@
"enabled": "有効", "enabled": "有効",
"error": "異常", "error": "異常",
"failed": "失敗", "failed": "失敗",
"fanoff": "ファン停止",
"fanon": "ファン起動",
"files selected": "個のファイルを選択しました", "files selected": "個のファイルを選択しました",
"hours ago": "時間前", "hours ago": "時間前",
"image": "画像", "image": "画像",

View File

@ -91,6 +91,7 @@
"Affiliated Unit": "公司名稱", "Affiliated Unit": "公司名稱",
"Affiliation": "所屬單位", "Affiliation": "所屬單位",
"After Qty": "異動後數量", "After Qty": "異動後數量",
"Age verification required": "貨道需要年齡驗證",
"Alert Severity Levels": "告警重要級別", "Alert Severity Levels": "告警重要級別",
"Alert Summary": "告警摘要", "Alert Summary": "告警摘要",
"Alert Switch": "告警開關", "Alert Switch": "告警開關",
@ -220,6 +221,9 @@
"Before Qty": "異動前數量", "Before Qty": "異動前數量",
"Belongs To": "公司名稱", "Belongs To": "公司名稱",
"Belongs To Company": "公司名稱", "Belongs To Company": "公司名稱",
"Bento heating": "盒飯正在加熱",
"Bento machine cooling water tank empty": "盒飯機冷卻水箱缺水",
"Bento not detected": "沒檢測到盒飯",
"Bill Acceptor": "紙鈔機", "Bill Acceptor": "紙鈔機",
"Bracelet drop not detected": "沒檢測到手環掉入取貨斗", "Bracelet drop not detected": "沒檢測到手環掉入取貨斗",
"Bracelet scan failed": "沒掃碼到手環", "Bracelet scan failed": "沒掃碼到手環",
@ -590,13 +594,18 @@
"Electronic Invoice": "電子發票", "Electronic Invoice": "電子發票",
"Electronic Invoices": "電子發票", "Electronic Invoices": "電子發票",
"Elevator belt self-check error": "昇降機皮帶自檢錯誤", "Elevator belt self-check error": "昇降機皮帶自檢錯誤",
"Elevator contains items": "升降台裡面有物品",
"Elevator descending": "昇降機正在下降", "Elevator descending": "昇降機正在下降",
"Elevator descent error": "昇降機下降錯誤", "Elevator descent error": "昇降機下降錯誤",
"Elevator enter microwave error": "昇降台進微波爐錯誤", "Elevator enter microwave error": "昇降台進微波爐錯誤",
"Elevator enter microwave error (0220)": "升降台進去微波爐錯誤",
"Elevator exit microwave error": "昇降台出微波爐錯誤", "Elevator exit microwave error": "昇降台出微波爐錯誤",
"Elevator exit microwave error (0221)": "升降台出去微波爐錯誤",
"Elevator failure": "昇降機故障", "Elevator failure": "昇降機故障",
"Elevator failure (0207)": "升降機故障",
"Elevator rise error": "昇降機上升錯誤", "Elevator rise error": "昇降機上升錯誤",
"Elevator rising": "昇降機正在上升", "Elevator rising": "昇降機正在上升",
"Elevator self-check error": "升降機自檢錯誤",
"Elevator sensor error": "昇降機感測器錯誤", "Elevator sensor error": "昇降機感測器錯誤",
"Elevator support rod push error": "昇降台撐桿推出錯誤", "Elevator support rod push error": "昇降台撐桿推出錯誤",
"Elevator support rod return error": "昇降台撐桿回位錯誤", "Elevator support rod return error": "昇降台撐桿回位錯誤",
@ -1014,6 +1023,7 @@
"Machine not found": "找不到機台", "Machine not found": "找不到機台",
"Machine permissions updated successfully.": "機台權限已成功更新。", "Machine permissions updated successfully.": "機台權限已成功更新。",
"Machine settings updated successfully.": "機台設定已成功更新。", "Machine settings updated successfully.": "機台設定已成功更新。",
"Machine temperature exceeds limit": "機器超過設定溫度,暫停購買",
"Machine to Warehouse": "機台對倉庫", "Machine to Warehouse": "機台對倉庫",
"Machine to Warehouse Return": "機台退庫至倉庫", "Machine to Warehouse Return": "機台退庫至倉庫",
"Machine to warehouse returns": "機台退回倉庫", "Machine to warehouse returns": "機台退回倉庫",
@ -1023,6 +1033,7 @@
"Machines Online": "在線機台數", "Machines Online": "在線機台數",
"Main": "總倉", "Main": "總倉",
"Main Warehouses": "總倉數量", "Main Warehouses": "總倉數量",
"Main motor failure": "主電機故障",
"Maintenance": "保養", "Maintenance": "保養",
"Maintenance Content": "維修內容", "Maintenance Content": "維修內容",
"Maintenance Date": "維修日期", "Maintenance Date": "維修日期",
@ -1102,17 +1113,23 @@
"Message Content": "日誌內容", "Message Content": "日誌內容",
"Message Display": "訊息顯示", "Message Display": "訊息顯示",
"Microwave delivery door close error": "微波爐進貨口門關閉錯誤", "Microwave delivery door close error": "微波爐進貨口門關閉錯誤",
"Microwave delivery door close error (0211)": "微波爐進貨口門關閉錯誤",
"Microwave delivery door closing": "正在關閉微波爐進貨口門", "Microwave delivery door closing": "正在關閉微波爐進貨口門",
"Microwave delivery door open error": "微波爐進貨口門打開錯誤", "Microwave delivery door open error": "微波爐進貨口門打開錯誤",
"Microwave delivery door open error (0210)": "微波爐進貨口門打開錯誤",
"Microwave delivery door opening": "正在打開微波爐進貨口門", "Microwave delivery door opening": "正在打開微波爐進貨口門",
"Microwave door error": "微波爐門異常", "Microwave door error": "微波爐門異常",
"Microwave door opened": "微波爐門開啟", "Microwave door opened": "微波爐門開啟",
"Microwave pickup door close error": "微波爐取貨口門關閉錯誤", "Microwave pickup door close error": "微波爐取貨口門關閉錯誤",
"Microwave pickup door close error (0209)": "微波爐取貨口門關閉錯誤",
"Microwave pickup door closing": "正在關閉微波爐取貨口門", "Microwave pickup door closing": "正在關閉微波爐取貨口門",
"Microwave pickup door open error": "微波爐取貨口門打開錯誤", "Microwave pickup door open error": "微波爐取貨口門打開錯誤",
"Microwave pickup door open error (0214)": "微波爐取貨口門打開錯誤",
"Microwave pickup door opening": "正在打開微波爐取貨口門", "Microwave pickup door opening": "正在打開微波爐取貨口門",
"Microwave push rod push error": "微波爐內推桿推出錯誤", "Microwave push rod push error": "微波爐內推桿推出錯誤",
"Microwave push rod push error (0222)": "微波爐內推桿推出錯誤",
"Microwave push rod retract error": "微波爐內推桿收回錯誤", "Microwave push rod retract error": "微波爐內推桿收回錯誤",
"Microwave push rod retract error (0223)": "微波爐內推桿收回錯誤",
"Milk dispense timeout": "按鍵出奶超時", "Milk dispense timeout": "按鍵出奶超時",
"Min 8 characters": "至少 8 個字元", "Min 8 characters": "至少 8 個字元",
"Model": "機台型號", "Model": "機台型號",
@ -1427,6 +1444,7 @@
"Please enter version name": "請輸入版本名稱", "Please enter version name": "請輸入版本名稱",
"Please make sure to enable \"Background graphics\" in your browser print settings to print product images and styled components correctly.": "請確保在瀏覽器列印設定中啟用「背景圖形」,以便正確列印商品圖片和樣式元件。", "Please make sure to enable \"Background graphics\" in your browser print settings to print product images and styled components correctly.": "請確保在瀏覽器列印設定中啟用「背景圖形」,以便正確列印商品圖片和樣式元件。",
"Please provide a download URL": "請提供下載連結", "Please provide a download URL": "請提供下載連結",
"Please remove bento from microwave": "請取出微波爐內盒飯",
"Please select a company": "請選擇公司", "Please select a company": "請選擇公司",
"Please select a company.": "請選擇公司", "Please select a company.": "請選擇公司",
"Please select a machine": "請選擇機台", "Please select a machine": "請選擇機台",
@ -1773,6 +1791,7 @@
"Slot No": "貨道編號", "Slot No": "貨道編號",
"Slot Status": "貨道效期", "Slot Status": "貨道效期",
"Slot Test": "貨道測試", "Slot Test": "貨道測試",
"Slot does not exist": "貨道不存在",
"Slot empty": "貨道缺貨", "Slot empty": "貨道缺貨",
"Slot jammed": "貨道卡貨", "Slot jammed": "貨道卡貨",
"Slot motor error (0207)": "貨道馬達錯誤 (0207)", "Slot motor error (0207)": "貨道馬達錯誤 (0207)",
@ -1781,8 +1800,10 @@
"Slot normal": "貨道正常", "Slot normal": "貨道正常",
"Slot not closed": "貨道未關閉", "Slot not closed": "貨道未關閉",
"Slot not found": "找不到指定貨道", "Slot not found": "找不到指定貨道",
"Slot out of stock": "貨道缺貨",
"Slot report synchronized success": "貨道狀態同步成功", "Slot report synchronized success": "貨道狀態同步成功",
"Slot sensor blocked": "貨道感測器受阻", "Slot sensor blocked": "貨道感測器受阻",
"Slot suspended": "貨道暫停使用",
"Slot updated successfully.": "貨道更新成功。", "Slot updated successfully.": "貨道更新成功。",
"Slots": "貨道數", "Slots": "貨道數",
"Slots need replenishment": "需要補貨的貨道", "Slots need replenishment": "需要補貨的貨道",
@ -1881,6 +1902,8 @@
"Superseded by new adjustment": "此指令已由後面最新的調整所取代", "Superseded by new adjustment": "此指令已由後面最新的調整所取代",
"Superseded by new command": "此指令已由後面最新的指令所取代", "Superseded by new command": "此指令已由後面最新的指令所取代",
"Superseded by new command (Timeout)": "指令逾時 (1 分鐘未回報),已被新指令覆蓋。", "Superseded by new command (Timeout)": "指令逾時 (1 分鐘未回報),已被新指令覆蓋。",
"Support rod push error": "撐桿推出錯誤",
"Support rod return error": "撐桿回位錯誤",
"Supports JPEG, PNG, SVG (Max 2MB). Ideal proportion: Horizontal or Square.": "支援 JPEG, PNG, SVG (最大 2MB)。建議比例:橫式或正方形。", "Supports JPEG, PNG, SVG (Max 2MB). Ideal proportion: Horizontal or Square.": "支援 JPEG, PNG, SVG (最大 2MB)。建議比例:橫式或正方形。",
"Survey Analysis": "問卷分析", "Survey Analysis": "問卷分析",
"Sync Ads": "同步廣告", "Sync Ads": "同步廣告",
@ -2020,6 +2043,7 @@
"Transfer order status tracking": "調撥單狀態追蹤", "Transfer order status tracking": "調撥單狀態追蹤",
"Transfer out": "調撥調出", "Transfer out": "調撥調出",
"Transfers": "調撥單", "Transfers": "調撥單",
"Translation motor failure": "平移電機故障",
"Trigger": "執行", "Trigger": "執行",
"Trigger Dispense": "觸發出貨", "Trigger Dispense": "觸發出貨",
"Trigger Remote Dispense": "觸發遠端出貨", "Trigger Remote Dispense": "觸發遠端出貨",
@ -2161,8 +2185,10 @@
"Warranty End": "保固結束", "Warranty End": "保固結束",
"Warranty Service": "保固服務", "Warranty Service": "保固服務",
"Warranty Start": "保固起始", "Warranty Start": "保固起始",
"Water level too low": "水量過低",
"Webhook Status": "Webhook 狀態", "Webhook Status": "Webhook 狀態",
"Webhook URL": "Webhook 網址", "Webhook URL": "Webhook 網址",
"Weight sensor communication error": "重量傳感器通訊錯誤",
"Welcome Gift": "來店禮", "Welcome Gift": "來店禮",
"Welcome Gift Code": "來店禮代碼", "Welcome Gift Code": "來店禮代碼",
"Welcome Gift Code (8 Digits)": "來店禮代碼 (8位數)", "Welcome Gift Code (8 Digits)": "來店禮代碼 (8位數)",
@ -2250,6 +2276,8 @@
"enabled": "啟用", "enabled": "啟用",
"error": "異常", "error": "異常",
"failed": "失敗", "failed": "失敗",
"fanoff": "風扇關",
"fanon": "風扇開",
"files selected": "個檔案已選擇", "files selected": "個檔案已選擇",
"hours ago": "小時前", "hours ago": "小時前",
"image": "圖片", "image": "圖片",