diff --git a/.agents/skills/mqtt-communication-specs/SKILL.md b/.agents/skills/mqtt-communication-specs/SKILL.md index e060842..0b50835 100644 --- a/.agents/skills/mqtt-communication-specs/SKILL.md +++ b/.agents/skills/mqtt-communication-specs/SKILL.md @@ -129,17 +129,90 @@ Mqtt3Client client = MqttClient.builder() ``` #### B013 硬體代碼對照表 (由 MachineService 自動翻譯) +> [!IMPORTANT] +> **出貨結果判定**:僅 `0402` (出貨成功) 與 `0424` (購買成功) 視為成功,其餘出貨結果碼均應觸發退款。 +> 完整代碼定義於 `MachineService::ERROR_CODE_MAP`。 + +**基本出貨流程:** + | 代碼 | 英文 Key (i18n) | 級別 | 範例繁中翻譯 | | :--- | :--- | :--- | :--- | -| **0402** | Dispense successful | info | 出貨成功 | +| **0401** | Dispensing in progress | info | 正在出貨 | +| **0402** | Dispense successful | info | ✅ 出貨成功 | | **0403** | Slot jammed | error | **貨道卡貨** (重大異常) | -| **0202** | Product empty | warning | 貨道缺貨 | -| **0412** | Elevator rise error | error | 昇降機上升異常 | -| **0415** | Pickup door error | error | 取貨門異常 | -| **5402** | Pickup door not closed | warning | **取貨門未關** (警告) | -| **5403** | Elevator failure | error | 昇降系統故障 | +| **0404** | Motor not stopped | warning | 電機未正常停止 | +| **0405** | Motor not found | error | 電機不存在 | +| **0406** | Motor not found (0406) | error | 電機不存在 (同 0405) | +| **0407** | Elevator failure | error | 昇降機故障 | -*(註:`error_code` 應遵循此表定義,雲端將根據 `i18n` 自動轉換。`tid` 為貨道或任務 ID。)* +**昇降機系統:** + +| 代碼 | 英文 Key (i18n) | 級別 | 範例繁中翻譯 | +| :--- | :--- | :--- | :--- | +| **040A** | Elevator belt self-check error | error | 昇降機皮帶自檢錯誤 | +| **0410** | Elevator rising | info | 昇降機正在上升 | +| **0411** | Elevator descending | info | 昇降機正在下降 | +| **0412** | Elevator rise error | error | 昇降機上升錯誤 | +| **0413** | Elevator descent error | error | 昇降機下降錯誤 | +| **0425** | Elevator support rod return error | error | 昇降台撐桿回位錯誤 | +| **0428** | Elevator support rod push error | error | 昇降台撐桿推出錯誤 | +| **0429** | Elevator enter microwave error | error | 昇降台進微波爐錯誤 | +| **0430** | Elevator exit microwave error | error | 昇降台出微波爐錯誤 | + +**微波爐取貨口門:** + +| 代碼 | 英文 Key (i18n) | 級別 | 範例繁中翻譯 | +| :--- | :--- | :--- | :--- | +| **0414** | Microwave pickup door closing | info | 正在關閉微波爐取貨口門 | +| **0415** | Microwave pickup door close error | error | 微波爐取貨口門關閉錯誤 | +| **0426** | Microwave pickup door opening | info | 正在打開微波爐取貨口門 | +| **0427** | Microwave pickup door open error | error | 微波爐取貨口門打開錯誤 | + +**微波爐進貨口門:** + +| 代碼 | 英文 Key (i18n) | 級別 | 範例繁中翻譯 | +| :--- | :--- | :--- | :--- | +| **0416** | Microwave delivery door opening | info | 正在打開微波爐進貨口門 | +| **0417** | Microwave delivery door open error | error | 微波爐進貨口門打開錯誤 | +| **0418** | Pushing bento into microwave | info | 正在將便當推入微波爐 | +| **0419** | Microwave delivery door closing | info | 正在關閉微波爐進貨口門 | +| **0420** | Microwave delivery door close error | error | 微波爐進貨口門關閉錯誤 | + +**微波爐內部:** + +| 代碼 | 英文 Key (i18n) | 級別 | 範例繁中翻譯 | +| :--- | :--- | :--- | :--- | +| **0421** | Bento not detected in microwave | error | 微波爐內沒檢測到便當 | +| **0422** | Bento heating | info | 便當正在加熱 | +| **0423** | Bento heating remaining time | info | 便當加熱剩餘時間秒 | +| **0424** | Purchase successful | info | ✅ 購買成功 | +| **0431** | Microwave push rod push error | error | 微波爐內推桿推出錯誤 | +| **0432** | Microwave push rod retract error | error | 微波爐內推桿收回錯誤 | + +**鮮奶機專用:** + +| 代碼 | 英文 Key (i18n) | 級別 | 範例繁中翻譯 | +| :--- | :--- | :--- | :--- | +| **040B** | Milk dispense timeout | error | 按鍵出奶超時 | +| **040C** | Cup dropper failure | error | 漏杯器漏杯失敗 | +| **040D** | Cup drop not detected | error | 未檢測到杯子掉落 | + +**手環機專用:** + +| 代碼 | 英文 Key (i18n) | 級別 | 範例繁中翻譯 | +| :--- | :--- | :--- | :--- | +| **040E** | Bracelet scan failed | error | 沒掃碼到手環 | +| **040F** | Bracelet drop not detected | error | 沒檢測到手環掉入取貨斗 | + +**取貨口門 / 購物車模式 / 液體機:** + +| 代碼 | 英文 Key (i18n) | 級別 | 範例繁中翻譯 | +| :--- | :--- | :--- | :--- | +| **0433** | Pickup door opened (cart mode) | info | 取貨口門打開成功 (購物車) | +| **0434** | Pickup door closed (cart mode) | info | 取貨口門關閉成功 (購物車) | +| **0435** | Liquid dispense paused | warning | 暫停出液 (液體機) | +| **0441** | Pickup door unlocked | info | 取貨口門開鎖上報 | +| **04FF** | Bento purchase terminated | error | 便當購買終止 | ### 3.3 交易生命週期上報 (Transaction) - `machine/{serial_no}/transaction` diff --git a/app/Services/Machine/MachineService.php b/app/Services/Machine/MachineService.php index 7c74693..a2efa8e 100644 --- a/app/Services/Machine/MachineService.php +++ b/app/Services/Machine/MachineService.php @@ -16,38 +16,82 @@ class MachineService { /** * B013: 硬體狀態代碼對照表 (Hardware Status Code Mapping) + * + * 代碼格式:Command 0x04 + Status Byte,例如 0x04+0x03 = '0403' + * 出貨結果判定:僅 0402 (出貨成功) 與 0424 (便當取出成功) 視為成功, + * 其餘出貨結果碼均應觸發退款。 + * + * 參考文件:廠商硬體通訊協議 Command(0x04) 狀態定義 */ public const ERROR_CODE_MAP = [ - // 出貨狀態類 (Prefix: 04 - BUY_STATUS) - '0401' => ['label' => 'Dispensing in progress', 'level' => 'info'], - '0402' => ['label' => 'Dispense successful', 'level' => 'info'], - '0403' => ['label' => 'Slot jammed', 'level' => 'error'], - '0404' => ['label' => 'Motor not stopped', 'level' => 'warning'], - '0406' => ['label' => 'Slot not found', 'level' => 'error'], - '0407' => ['label' => 'Dispense error (0407)', 'level' => 'error'], - '0408' => ['label' => 'Dispense error (0408)', 'level' => 'error'], - '0409' => ['label' => 'Dispense error (0409)', 'level' => 'error'], - '040A' => ['label' => 'Dispense error (040A)', 'level' => 'error'], - '0410' => ['label' => 'Elevator rising', 'level' => 'info'], - '0411' => ['label' => 'Elevator descending', 'level' => 'info'], - '0412' => ['label' => 'Elevator rise error', 'level' => 'error'], - '0413' => ['label' => 'Elevator descent error', 'level' => 'error'], - '0414' => ['label' => 'Pickup door closed', 'level' => 'info'], - '0415' => ['label' => 'Pickup door error', 'level' => 'error'], - '0416' => ['label' => 'Delivery door opened', 'level' => 'info'], - '0417' => ['label' => 'Delivery door open error', 'level' => 'error'], - '0418' => ['label' => 'Delivering product', 'level' => 'info'], - '0419' => ['label' => 'Delivery door closed', 'level' => 'info'], - '0420' => ['label' => 'Delivery door close error', 'level' => 'error'], - '0421' => ['label' => 'Hopper empty', 'level' => 'warning'], - '0422' => ['label' => 'Hopper overheated', 'level' => 'warning'], - '0423' => ['label' => 'Hopper heating timeout', 'level' => 'error'], - '0424' => ['label' => 'Hopper error (0424)', 'level' => 'error'], - '0426' => ['label' => 'Microwave door opened', 'level' => 'info'], - '0427' => ['label' => 'Microwave door error', 'level' => 'error'], - '04FF' => ['label' => 'Dispense stopped', 'level' => 'info'], + // ═══════════════════════════════════════════════════════════════ + // 出貨與物理動作類 (Command 0x04 - BUY_STATUS) + // ═══════════════════════════════════════════════════════════════ - // 貨道狀態類 (Prefix: 02 - SLOT_STATUS) + // --- 基本出貨流程 --- + '0401' => ['label' => 'Dispensing in progress', 'level' => 'info'], // 正在出貨 + '0402' => ['label' => 'Dispense successful', 'level' => 'info'], // ✅ 出貨成功 + '0403' => ['label' => 'Slot jammed', 'level' => 'error'], // 貨道卡貨 (重大異常) + '0404' => ['label' => 'Motor not stopped', 'level' => 'warning'], // 電機未正常停止 + '0405' => ['label' => 'Motor not found', 'level' => 'error'], // 電機不存在 + '0406' => ['label' => 'Motor not found (0406)', 'level' => 'error'], // 電機不存在 (同 0405) + '0407' => ['label' => 'Elevator failure', 'level' => 'error'], // 昇降機故障 + + // --- 昇降機系統 --- + '040A' => ['label' => 'Elevator belt self-check error', 'level' => 'error'], // 昇降機皮帶自檢錯誤 + '0410' => ['label' => 'Elevator rising', 'level' => 'info'], // 昇降機正在上升 + '0411' => ['label' => 'Elevator descending', 'level' => 'info'], // 昇降機正在下降 + '0412' => ['label' => 'Elevator rise error', 'level' => 'error'], // 昇降機上升錯誤 + '0413' => ['label' => 'Elevator descent error', 'level' => 'error'], // 昇降機下降錯誤 + '0425' => ['label' => 'Elevator support rod return error', 'level' => 'error'], // 昇降台撐桿回位錯誤 + '0428' => ['label' => 'Elevator support rod push error', 'level' => 'error'], // 昇降台撐桿推出錯誤 + '0429' => ['label' => 'Elevator enter microwave error', 'level' => 'error'], // 昇降台進微波爐錯誤 + '0430' => ['label' => 'Elevator exit microwave error', 'level' => 'error'], // 昇降台出微波爐錯誤 + + // --- 微波爐取貨口門 --- + '0414' => ['label' => 'Microwave pickup door closing', 'level' => 'info'], // 正在關閉微波爐取貨口門 + '0415' => ['label' => 'Microwave pickup door close error', 'level' => 'error'], // 微波爐取貨口門關閉錯誤 + '0426' => ['label' => 'Microwave pickup door opening', 'level' => 'info'], // 正在打開微波爐取貨口門 + '0427' => ['label' => 'Microwave pickup door open error', 'level' => 'error'], // 微波爐取貨口門打開錯誤 + + // --- 微波爐進貨口門 --- + '0416' => ['label' => 'Microwave delivery door opening', 'level' => 'info'], // 正在打開微波爐進貨口門 + '0417' => ['label' => 'Microwave delivery door open error', 'level' => 'error'], // 微波爐進貨口門打開錯誤 + '0418' => ['label' => 'Pushing bento into microwave', 'level' => 'info'], // 正在將便當推入微波爐 + '0419' => ['label' => 'Microwave delivery door closing', 'level' => 'info'], // 正在關閉微波爐進貨口門 + '0420' => ['label' => 'Microwave delivery door close error', 'level' => 'error'], // 微波爐進貨口門關閉錯誤 + + // --- 微波爐內部 --- + '0421' => ['label' => 'Bento not detected in microwave', 'level' => 'error'], // 微波爐內沒檢測到便當 + '0422' => ['label' => 'Bento heating', 'level' => 'info'], // 便當正在加熱 + '0423' => ['label' => 'Bento heating remaining time', 'level' => 'info'], // 便當加熱剩餘時間 (貨道號=秒數) + '0424' => ['label' => 'Purchase successful', 'level' => 'info'], // ✅ 購買成功 (原 Bento ready for pickup) + '0431' => ['label' => 'Microwave push rod push error', 'level' => 'error'], // 微波爐內推桿推出錯誤 + '0432' => ['label' => 'Microwave push rod retract error', 'level' => 'error'], // 微波爐內推桿收回錯誤 + + // --- 鮮奶機專用 --- + '040B' => ['label' => 'Milk dispense timeout', 'level' => 'error'], // 按鍵出奶超時 (鮮奶機) + '040C' => ['label' => 'Cup dropper failure', 'level' => 'error'], // 漏杯器漏杯失敗 (鮮奶機) + '040D' => ['label' => 'Cup drop not detected', 'level' => 'error'], // 未檢測到杯子掉落 (鮮奶機) + + // --- 手環機專用 --- + '040E' => ['label' => 'Bracelet scan failed', 'level' => 'error'], // 沒掃碼到手環 + '040F' => ['label' => 'Bracelet drop not detected', 'level' => 'error'], // 沒檢測到手環掉入取貨斗 + + // --- 取貨口門 (購物車模式) --- + '0433' => ['label' => 'Pickup door opened (cart mode)', 'level' => 'info'], // 取貨口門打開成功 (購物車購買) + '0434' => ['label' => 'Pickup door closed (cart mode)', 'level' => 'info'], // 取貨口門關閉成功 (購物車購買) + '0441' => ['label' => 'Pickup door unlocked', 'level' => 'info'], // 取貨口門開鎖上報 + + // --- 液體機專用 --- + '0435' => ['label' => 'Liquid dispense paused', 'level' => 'warning'], // 暫停出液 + + // --- 終止 --- + '04FF' => ['label' => 'Bento purchase terminated', 'level' => 'error'], // 便當購買終止 + + // ═══════════════════════════════════════════════════════════════ + // 貨道與馬達狀態類 (Prefix: 02 - SLOT_STATUS) + // ═══════════════════════════════════════════════════════════════ '0201' => ['label' => 'Slot normal', 'level' => 'info'], '0202' => ['label' => 'Product empty', 'level' => 'warning'], '0203' => ['label' => 'Slot empty', 'level' => 'warning'], @@ -58,13 +102,24 @@ class MachineService '0209' => ['label' => 'Slot motor error (0209)', 'level' => 'error'], '0212' => ['label' => 'Hopper empty (0212)', 'level' => 'warning'], + // ═══════════════════════════════════════════════════════════════ // 機台整體狀態類 (Prefix: 54 - MACHINE_STATUS) + // ═══════════════════════════════════════════════════════════════ '5400' => ['label' => 'Machine normal', 'level' => 'info'], '5401' => ['label' => 'Elevator sensor error', 'level' => 'error'], '5402' => ['label' => 'Pickup door not closed', 'level' => 'warning'], '5403' => ['label' => 'Elevator failure', 'level' => 'error'], ]; + /** + * 出貨成功結果碼 (Dispense Success Codes) + * + * 僅以下代碼視為出貨成功,其餘出貨結果碼均應觸發退款。 + * - 0402: 一般出貨成功 + * - 0424: 便當取出成功 (微波爐機型) + */ + public const DISPENSE_SUCCESS_CODES = ['0402', '0424']; + /** * Update machine heartbeat and status. * diff --git a/app/Services/Notification/DiscordWebhookService.php b/app/Services/Notification/DiscordWebhookService.php index 611f1f0..c6c0c57 100644 --- a/app/Services/Notification/DiscordWebhookService.php +++ b/app/Services/Notification/DiscordWebhookService.php @@ -8,16 +8,7 @@ use Illuminate\Support\Facades\Log; class DiscordWebhookService { - // B013 硬體代碼中文翻譯對照 - protected array $errorCodes = [ - '0402' => '出貨成功', - '0403' => '貨道卡貨 (重大異常)', - '0202' => '貨道缺貨', - '0412' => '昇降機上升異常', - '0415' => '取貨門異常', - '5402' => '取貨門未關 (警告)', - '5403' => '昇降系統故障', - ]; + // B013 硬體代碼翻譯統一由 MachineService::ERROR_CODE_MAP 管理 (Single Source of Truth) /** * 發送測試通知 diff --git a/lang/en.json b/lang/en.json index 316503d..ff8b5d9 100644 --- a/lang/en.json +++ b/lang/en.json @@ -5,8 +5,8 @@ "30s": "30s", "60 Seconds": "60 Seconds", "60s": "60s", - ":count staff cards imported successfully": ":count staff cards imported successfully", ":count products imported successfully": ":count products imported successfully", + ":count staff cards imported successfully": ":count staff cards imported successfully", "A new verification link has been sent to your email address.": "A new verification link has been sent to your email address.", "A sync command was recently sent. Please wait 1 minute.": "A sync command was recently sent. Please wait 1 minute.", "AI Prediction": "AI Prediction", @@ -219,7 +219,13 @@ "Before Qty": "Before Qty", "Belongs To": "Belongs To", "Belongs To Company": "Belongs To Company", + "Bento heating": "Bento heating", + "Bento heating remaining time": "Bento heating remaining time", + "Bento not detected in microwave": "Bento not detected in microwave", + "Bento purchase terminated": "Bento purchase terminated", "Bill Acceptor": "Bill Acceptor", + "Bracelet drop not detected": "Bracelet drop not detected", + "Bracelet scan failed": "Bracelet scan failed", "Branch": "Branch", "Branch Warehouses": "Branch Warehouses", "Business Type": "Business Type", @@ -257,11 +263,11 @@ "Cash Module Function": "Cash Module Function", "Category": "Category", "Category Management": "Category Management", - "Category not found: :category": "Category not found: :category", "Category Name": "Category Name", "Category Name (en)": "Category Name (en)", "Category Name (ja)": "Category Name (ja)", "Category Name (zh_TW)": "Category Name (zh_TW)", + "Category not found: :category": "Category not found: :category", "Change": "Change", "Change Note": "Change Note", "Change Stock": "Change Stock", @@ -394,6 +400,8 @@ "Critical": "Critical", "Critical failures requiring immediate hands-on attention.": "Critical failures requiring immediate hands-on attention.", "Cross-Company / Headquarter Global Stats": "Cross-Company / Headquarter Global Stats", + "Cup drop not detected": "Cup drop not detected", + "Cup dropper failure": "Cup dropper failure", "Current": "Current", "Current Password": "Current Password", "Current Status": "Current Status", @@ -569,12 +577,17 @@ "Effective Alert Types": "Effective Alert Types", "Electronic Invoice": "Electronic Invoice", "Electronic Invoices": "Electronic Invoices", + "Elevator belt self-check error": "Elevator belt self-check error", "Elevator descending": "Elevator descending", "Elevator descent error": "Elevator descent error", + "Elevator enter microwave error": "Elevator enter microwave error", + "Elevator exit microwave error": "Elevator exit microwave error", "Elevator failure": "Elevator failure", "Elevator rise error": "Elevator rise error", "Elevator rising": "Elevator rising", "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", "Email": "Email", "Emblem / Label": "Emblem / Label", "Employee": "Employee", @@ -814,8 +827,8 @@ "Import Products": "Import Products", "Import Staff Cards": "Import Staff Cards", "Import failed": "Import failed", - "Imported with errors. Please check the console.": "Imported with errors. Please check the console.", "Important Notice": "Important Notice", + "Imported with errors. Please check the console.": "Imported with errors. Please check the console.", "In Stock": "In Stock", "Inactive": "Inactive", "Includes Credit Card/Mobile Pay": "Includes Credit Card/Mobile Pay", @@ -890,6 +903,7 @@ "LinePay Payment": "LinePay Payment", "Link": "Link", "Link Copied": "Link Copied", + "Liquid dispense paused": "Liquid dispense paused", "Live Fleet Updates": "Live Fleet Updates", "Loading Cabinet...": "Loading Cabinet...", "Loading Data": "Loading Data", @@ -1070,8 +1084,19 @@ "Message": "Message", "Message Content": "Message Content", "Message Display": "Message Display", + "Microwave delivery door close error": "Microwave delivery door close error", + "Microwave delivery door closing": "Microwave delivery door closing", + "Microwave delivery door open error": "Microwave delivery door open error", + "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 closing": "Microwave pickup door closing", + "Microwave pickup door open error": "Microwave pickup door open error", + "Microwave pickup door opening": "Microwave pickup door opening", + "Microwave push rod push error": "Microwave push rod push error", + "Microwave push rod retract error": "Microwave push rod retract error", + "Milk dispense timeout": "Milk dispense timeout", "Min 8 characters": "Min 8 characters", "Model": "Model", "Model Default": "Model Default", @@ -1087,6 +1112,8 @@ "Monthly Cumulative Revenue": "Monthly Cumulative Revenue", "Monthly Transactions": "Monthly Transactions", "Monthly cumulative revenue overview": "Monthly cumulative revenue overview", + "Motor not found": "Motor not found", + "Motor not found (0406)": "Motor not found (0406)", "Motor not stopped": "Motor not stopped", "Movement History": "Movement History", "Movement Logs": "Movement Logs", @@ -1351,18 +1378,21 @@ "Picked up": "Picked up", "Picked up Time": "Picked up Time", "Pickup Code": "Pickup Code", - "Pickup Recipient Info": "Pickup Recipient Info", - "Pickup Recipient (Prescription Slip)": "Pickup Recipient (Prescription Slip)", "Pickup Code (8 Digits)": "Pickup Code (8 Digits)", "Pickup Codes": "Pickup Codes", + "Pickup Recipient (Prescription Slip)": "Pickup Recipient (Prescription Slip)", + "Pickup Recipient Info": "Pickup Recipient Info", "Pickup Ticket": "Pickup Ticket", "Pickup Voucher": "Pickup Voucher", "Pickup code cancelled.": "Pickup code cancelled.", "Pickup code generated: :code": "Pickup code generated: :code", "Pickup code updated.": "Pickup code updated.", "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", "Playback Order": "Playback Order", "Please Select Slot first": "Please Select Slot first", @@ -1408,6 +1438,7 @@ "Print Notice": "Print Notice", "Print Order": "Print Order", "Print Time": "Print Time", + "Processing...": "Processing...", "Product": "Product", "Product / Slot": "Product / Slot", "Product / Stock": "Product / Stock", @@ -1447,10 +1478,12 @@ "Publish Time": "Publish Time", "Purchase Audit": "Purchase Audit", "Purchase Finished": "Purchase Finished", + "Purchase successful": "Purchase successful", "Purchases": "Purchases", "Purchasing": "Purchasing", "Purpose": "Purpose", "Push Status": "Push Status", + "Pushing bento into microwave": "Pushing bento into microwave", "QR": "QR", "QR CODE": "QR CODE", "QR Code": "QR Code", @@ -1753,7 +1786,6 @@ "Standby Ad": "Standby Ad", "Start Date": "Start Date", "Start Delivery": "Start Delivery", - "Processing...": "Processing...", "Start Import": "Start Import", "Start Time": "Start Time", "Statistics": "Statistics", diff --git a/lang/ja.json b/lang/ja.json index 9b2d7d4..55d4652 100644 --- a/lang/ja.json +++ b/lang/ja.json @@ -5,6 +5,7 @@ "30s": "30秒", "60 Seconds": "60秒", "60s": "60秒", + ":count products imported successfully": ":count products imported successfully", ":count staff cards imported successfully": ":count 枚のスタッフカードが正常にインポートされました", "A new verification link has been sent to your email address.": "新しい確認リンクがメールアドレスに送信されました。", "A sync command was recently sent. Please wait 1 minute.": "先ほど同期コマンドが送信されました。1分間お待ちください。", @@ -218,7 +219,13 @@ "Before Qty": "変動前数量", "Belongs To": "会社名", "Belongs To Company": "所属会社", + "Bento heating": "お弁当加熱中", + "Bento heating remaining time": "お弁当加熱残り時間", + "Bento not detected in microwave": "電子レンジ内お弁当未検出", + "Bento purchase terminated": "お弁当購入中止", "Bill Acceptor": "紙幣識別機", + "Bracelet drop not detected": "ブレスレット落下未検出", + "Bracelet scan failed": "ブレスレットスキャン失敗", "Branch": "分庫", "Branch Warehouses": "分庫数", "Business Type": "業務タイプ", @@ -260,6 +267,7 @@ "Category Name (en)": "カテゴリ名 (英語)", "Category Name (ja)": "カテゴリ名 (日本語)", "Category Name (zh_TW)": "カテゴリ名 (繁体字中国語)", + "Category not found: :category": "Category not found: :category", "Change": "変更", "Change Note": "変動備考", "Change Stock": "お釣り在庫", @@ -392,6 +400,8 @@ "Critical": "深刻", "Critical failures requiring immediate hands-on attention.": "即座に対処が必要な重大な障害。", "Cross-Company / Headquarter Global Stats": "複数会社間 / 本部グローバル統計", + "Cup drop not detected": "カップ落下未検出", + "Cup dropper failure": "カップディスペンサー落下エラー", "Current": "現在", "Current Password": "現在のパスワード", "Current Status": "現在のステータス", @@ -512,9 +522,9 @@ "Dispense error (0409)": "出庫プロセス異常 (0409)", "Dispense error (040A)": "出庫プロセス異常 (040A)", "Dispense stopped": "出庫停止", - "Dispense successful": "出庫成功", + "Dispense successful": "搬送成功", "Dispensing": "出庫", - "Dispensing in progress": "出庫作業中", + "Dispensing in progress": "搬送中", "Display Material Code": "資材コードを表示", "Displaying": "表示中", "Door Closed": "扉が閉まりました", @@ -567,12 +577,17 @@ "Effective Alert Types": "有効なアラート種別", "Electronic Invoice": "電子領収書", "Electronic Invoices": "電子領収書", - "Elevator descending": "昇降プラットフォーム下降中", - "Elevator descent error": "昇降プラットフォーム下降異常", - "Elevator failure": "昇降システム故障", - "Elevator rise error": "昇降プラットフォーム上昇異常", - "Elevator rising": "昇降プラットフォーム上昇中", - "Elevator sensor error": "昇降箱センサー異常", + "Elevator belt self-check error": "エレベーターベルト自己診断エラー", + "Elevator descending": "エレベーター下降中", + "Elevator descent error": "エレベーター下降エラー", + "Elevator enter microwave error": "エレベーター電子レンジ進入エラー", + "Elevator exit microwave error": "エレベーター電子レンジ退出エラー", + "Elevator failure": "エレベーター故障", + "Elevator rise error": "エレベーター上昇エラー", + "Elevator rising": "エレベーター上昇中", + "Elevator sensor error": "エレベーターセンサーエラー", + "Elevator support rod push error": "エレベーター支柱押し出しエラー", + "Elevator support rod return error": "エレベーター支柱復帰エラー", "Email": "メールアドレス", "Emblem / Label": "エンブレム / ラベル", "Employee": "従業員", @@ -809,9 +824,11 @@ "Image Downloaded": "画像をダウンロードしました", "Immediate": "即時", "Import Excel": "Excel インポート", + "Import Products": "Import Products", "Import Staff Cards": "スタッフカードのインポート", "Import failed": "インポート失敗", "Important Notice": "Important Notice", + "Imported with errors. Please check the console.": "Imported with errors. Please check the console.", "In Stock": "現在庫", "Inactive": "停止中", "Includes Credit Card/Mobile Pay": "クレジット/QR決済を含む", @@ -886,6 +903,7 @@ "LinePay Payment": "LinePay決済", "Link": "リンク", "Link Copied": "リンクをコピーしました", + "Liquid dispense paused": "液体抽出一時停止", "Live Fleet Updates": "リアルタイム更新", "Loading Cabinet...": "機器キャビネットを読み込み中...", "Loading Data": "データを読み込み中", @@ -975,7 +993,7 @@ "Machine model deleted successfully.": "機器モデルが正常に削除されました。", "Machine model saved successfully.": "機器モデルが正常に追加されました。", "Machine model updated successfully.": "機器モデルが正常に更新されました。", - "Machine normal": "機器システム正常", + "Machine normal": "デバイス正常", "Machine not found": "機器が見つかりません", "Machine permissions updated successfully.": "機器権限が正常に更新されました。", "Machine settings updated successfully.": "機器設定が正常に更新されました。", @@ -1066,8 +1084,19 @@ "Message": "メッセージ", "Message Content": "メッセージ内容", "Message Display": "メッセージ表示", + "Microwave delivery door close error": "電子レンジ搬入口扉閉鎖エラー", + "Microwave delivery door closing": "電子レンジ搬入口扉閉鎖中", + "Microwave delivery door open error": "電子レンジ搬入口扉開放エラー", + "Microwave delivery door opening": "電子レンジ搬入口扉開放中", "Microwave door error": "電子レンジ扉エラー", "Microwave door opened": "電子レンジ扉開放", + "Microwave pickup door close error": "電子レンジ取り出し口扉閉鎖エラー", + "Microwave pickup door closing": "電子レンジ取り出し口扉閉鎖中", + "Microwave pickup door open error": "電子レンジ取り出し口扉開放エラー", + "Microwave pickup door opening": "電子レンジ取り出し口扉開放中", + "Microwave push rod push error": "電子レンジ内プッシャー押し出しエラー", + "Microwave push rod retract error": "電子レンジ内プッシャー回収エラー", + "Milk dispense timeout": "牛乳抽出タイムアウト", "Min 8 characters": "最低 8文字", "Model": "機器モデル", "Model Default": "モデルデフォルト", @@ -1083,7 +1112,9 @@ "Monthly Cumulative Revenue": "今月の累計収益", "Monthly Transactions": "今月の取引額", "Monthly cumulative revenue overview": "今月の累計収益の概要", - "Motor not stopped": "モーターが停止していません", + "Motor not found": "モーター未検出", + "Motor not found (0406)": "モーター未検出 (0406)", + "Motor not stopped": "モーター異常停止", "Movement History": "変動履歴", "Movement Logs": "変動ログ", "Multilingual Names": "多言語名", @@ -1225,6 +1256,7 @@ "Online Machines": "オンライン機器", "Online Only": "Online Only", "Online Status": "オンラインステータス", + "Only .xlsx files are supported (Max 5MB)": "Only .xlsx files are supported (Max 5MB)", "Only .xlsx, .xls, .csv files are supported (Max 5MB)": ".xlsx, .xls, .csv ファイルのみサポートされています (最大 5MB)", "Only machines under the same company can be cloned for security.": "セキュリティのため、同じ会社の機器設定のみコピーできます。", "Only system roles can be assigned to platform administrative accounts.": "プラットフォーム管理アカウントにはシステムロールのみを割り当てることができます。", @@ -1346,18 +1378,21 @@ "Picked up": "受取済み", "Picked up Time": "受取時間", "Pickup Code": "受取コード", - "Pickup Recipient Info": "受取者情報", - "Pickup Recipient (Prescription Slip)": "受取者(処方箋)", "Pickup Code (8 Digits)": "受取コード (8桁)", "Pickup Codes": "受取コード", + "Pickup Recipient (Prescription Slip)": "受取者(処方箋)", + "Pickup Recipient Info": "受取者情報", "Pickup Ticket": "商品受取チケット", "Pickup Voucher": "受取票", "Pickup code cancelled.": "受取コードがキャンセルされました。", "Pickup code generated: :code": "受取コードが生成されました: :code", "Pickup code updated.": "受取コードが更新されました。", "Pickup door closed": "受取扉が閉まりました", + "Pickup door closed (cart mode)": "取り出し口扉閉鎖成功", "Pickup door error": "受取扉エラー", - "Pickup door not closed": "受取扉が閉まっていません", + "Pickup door not closed": "取り出し口扉未閉鎖", + "Pickup door opened (cart mode)": "取り出し口扉開放成功", + "Pickup door unlocked": "取り出し口扉開錠", "Platform Operator": "プラットフォーム事業者", "Playback Order": "再生順序", "Please Select Slot first": "先にスロットを選択してください", @@ -1403,6 +1438,7 @@ "Print Notice": "印刷時の注意", "Print Order": "伝票印刷", "Print Time": "印刷日時", + "Processing...": "Processing...", "Product": "商品", "Product / Slot": "商品 / スロット", "Product / Stock": "商品 / 在庫", @@ -1424,7 +1460,7 @@ "Product Status": "商品ステータス", "Product created successfully": "商品が正常に作成されました", "Product deleted successfully": "商品が正常に削除されました", - "Product empty": "スロットが空です (PDT_EMPTY)", + "Product empty": "商品売り切れ", "Product physical shipment count": "商品の実出荷数", "Product status updated to :status": "商品のステータスが :status に更新されました", "Product updated successfully": "商品が正常に更新されました", @@ -1442,10 +1478,12 @@ "Publish Time": "公開時間", "Purchase Audit": "購入監査", "Purchase Finished": "購入終了", + "Purchase successful": "購入成功", "Purchases": "購入伝票", "Purchasing": "購入中", "Purpose": "用途", "Push Status": "アラート状態", + "Pushing bento into microwave": "お弁当を電子レンジに投入中", "QR": "QR", "QR CODE": "QRコード", "QR Code": "QRコード", @@ -1702,16 +1740,16 @@ "Slot No": "スロット番号", "Slot Status": "スロット期限ステータス", "Slot Test": "スロットテスト", - "Slot empty": "スロットが空です (SLOT_EMPTY)", - "Slot jammed": "スロット詰まり (K-PDT)", - "Slot motor error (0207)": "スロットモーター異常 (0207)", - "Slot motor error (0208)": "スロットモーター異常 (0208)", - "Slot motor error (0209)": "スロットモーター異常 (0209)", - "Slot normal": "スロット正常", - "Slot not closed": "スロットが閉まっていません", + "Slot empty": "チャンネル在庫切れ", + "Slot jammed": "商品詰まり", + "Slot motor error (0207)": "チャンネルモーターエラー (0207)", + "Slot motor error (0208)": "チャンネルモーターエラー (0208)", + "Slot motor error (0209)": "チャンネルモーターエラー (0209)", + "Slot normal": "チャンネル正常", + "Slot not closed": "チャンネル未閉鎖", "Slot not found": "指定されたスロットが見つかりません", "Slot report synchronized success": "スロットレポートの同期に成功しました", - "Slot sensor blocked": "スロットセンサーが塞がれています", + "Slot sensor blocked": "チャンネルセンサー遮蔽", "Slot updated successfully.": "スロットが正常に更新されました。", "Slots": "スロット数", "Slots need replenishment": "補充が必要なスロット", diff --git a/lang/zh_TW.json b/lang/zh_TW.json index 8fe8896..b889d74 100644 --- a/lang/zh_TW.json +++ b/lang/zh_TW.json @@ -5,8 +5,8 @@ "30s": "30秒", "60 Seconds": "60 秒", "60s": "60秒", - ":count staff cards imported successfully": "成功匯入 :count 張員工識別卡", ":count products imported successfully": "成功匯入 :count 筆商品", + ":count staff cards imported successfully": "成功匯入 :count 張員工識別卡", "A new verification link has been sent to your email address.": "已將新的驗證連結發送至您的電子郵件地址。", "A sync command was recently sent. Please wait 1 minute.": "近期已發送過同步指令,請等待 1 分鐘後再試", "AI Prediction": "AI智能預測", @@ -219,7 +219,13 @@ "Before Qty": "異動前數量", "Belongs To": "公司名稱", "Belongs To Company": "公司名稱", + "Bento heating": "便當正在加熱", + "Bento heating remaining time": "便當加熱剩餘時間", + "Bento not detected in microwave": "微波爐內沒檢測到便當", + "Bento purchase terminated": "便當購買終止", "Bill Acceptor": "紙鈔機", + "Bracelet drop not detected": "沒檢測到手環掉入取貨斗", + "Bracelet scan failed": "沒掃碼到手環", "Branch": "分倉", "Branch Warehouses": "分倉數量", "Business Type": "業務類型", @@ -257,11 +263,11 @@ "Cash Module Function": "現金模組功能", "Category": "類別", "Category Management": "分類管理", - "Category not found: :category": "找不到商品分類::category", "Category Name": "分類名稱", "Category Name (en)": "分類名稱 (英文)", "Category Name (ja)": "分類名稱 (日文)", "Category Name (zh_TW)": "分類名稱 (繁體中文)", + "Category not found: :category": "找不到商品分類::category", "Change": "更換", "Change Note": "異動備註", "Change Stock": "零錢庫存", @@ -394,6 +400,8 @@ "Critical": "嚴重", "Critical failures requiring immediate hands-on attention.": "需要立即處理的關鍵故障。", "Cross-Company / Headquarter Global Stats": "跨公司 / 總部全域統計", + "Cup drop not detected": "未檢測到杯子掉落", + "Cup dropper failure": "漏杯器漏杯失敗", "Current": "當前", "Current Password": "當前密碼", "Current Status": "當前狀態", @@ -569,12 +577,17 @@ "Effective Alert Types": "目前生效的告警類型", "Electronic Invoice": "電子發票", "Electronic Invoices": "電子發票", - "Elevator descending": "升降平台下降中", - "Elevator descent error": "升降平台下降異常", - "Elevator failure": "升降系統故障", - "Elevator rise error": "升降平台上升異常", - "Elevator rising": "升降平台上升中", - "Elevator sensor error": "升降箱感測異常", + "Elevator belt self-check error": "昇降機皮帶自檢錯誤", + "Elevator descending": "昇降機正在下降", + "Elevator descent error": "昇降機下降錯誤", + "Elevator enter microwave error": "昇降台進微波爐錯誤", + "Elevator exit microwave error": "昇降台出微波爐錯誤", + "Elevator failure": "昇降機故障", + "Elevator rise error": "昇降機上升錯誤", + "Elevator rising": "昇降機正在上升", + "Elevator sensor error": "昇降機感測器錯誤", + "Elevator support rod push error": "昇降台撐桿推出錯誤", + "Elevator support rod return error": "昇降台撐桿回位錯誤", "Email": "電子郵件", "Emblem / Label": "標章 / 標籤", "Employee": "員工", @@ -794,7 +807,7 @@ "Helper": "小幫手", "Home Page": "主頁面", "Hopper empty": "料斗箱空", - "Hopper empty (0212)": "料斗空 (0212)", + "Hopper empty (0212)": "漏斗缺料 (0212)", "Hopper error (0424)": "料斗箱異常 (0424)", "Hopper heating timeout": "料斗箱加熱逾時", "Hopper overheated": "料斗箱過熱", @@ -814,8 +827,8 @@ "Import Products": "匯入商品", "Import Staff Cards": "匯入員工識別卡", "Import failed": "匯入失敗", - "Imported with errors. Please check the console.": "部分資料匯入失敗,請查看瀏覽器主控台。", "Important Notice": "重要通知", + "Imported with errors. Please check the console.": "部分資料匯入失敗,請查看瀏覽器主控台。", "In Stock": "當前庫存", "Inactive": "已停用", "Includes Credit Card/Mobile Pay": "含信用卡/行動支付", @@ -890,6 +903,7 @@ "LinePay Payment": "LinePay 支付", "Link": "連結", "Link Copied": "連結已複製", + "Liquid dispense paused": "暫停出液", "Live Fleet Updates": "即時數據更新", "Loading Cabinet...": "正在載入機台貨盤...", "Loading Data": "載入資料中", @@ -979,7 +993,7 @@ "Machine model deleted successfully.": "機台型號已成功刪除。", "Machine model saved successfully.": "機台型號已成功新增。", "Machine model updated successfully.": "機台型號已成功更新。", - "Machine normal": "機台系統正常", + "Machine normal": "機台正常", "Machine not found": "找不到機台", "Machine permissions updated successfully.": "機台權限已成功更新。", "Machine settings updated successfully.": "機台設定已成功更新。", @@ -1070,8 +1084,19 @@ "Message": "訊息", "Message Content": "日誌內容", "Message Display": "訊息顯示", + "Microwave delivery door close error": "微波爐進貨口門關閉錯誤", + "Microwave delivery door closing": "正在關閉微波爐進貨口門", + "Microwave delivery door open error": "微波爐進貨口門打開錯誤", + "Microwave delivery door opening": "正在打開微波爐進貨口門", "Microwave door error": "微波爐門異常", "Microwave door opened": "微波爐門開啟", + "Microwave pickup door close error": "微波爐取貨口門關閉錯誤", + "Microwave pickup door closing": "正在關閉微波爐取貨口門", + "Microwave pickup door open error": "微波爐取貨口門打開錯誤", + "Microwave pickup door opening": "正在打開微波爐取貨口門", + "Microwave push rod push error": "微波爐內推桿推出錯誤", + "Microwave push rod retract error": "微波爐內推桿收回錯誤", + "Milk dispense timeout": "按鍵出奶超時", "Min 8 characters": "至少 8 個字元", "Model": "機台型號", "Model Default": "型號預設", @@ -1087,7 +1112,9 @@ "Monthly Cumulative Revenue": "本月累計營收", "Monthly Transactions": "本月交易統計", "Monthly cumulative revenue overview": "本月累計營收概況", - "Motor not stopped": "電機未停止", + "Motor not found": "電機不存在", + "Motor not found (0406)": "電機不存在 (0406)", + "Motor not stopped": "電機未正常停止", "Movement History": "異動紀錄", "Movement Logs": "異動紀錄", "Multilingual Names": "多語系名稱", @@ -1351,18 +1378,21 @@ "Picked up": "領取", "Picked up Time": "領取時間", "Pickup Code": "取貨碼", - "Pickup Recipient Info": "取物人資訊", - "Pickup Recipient (Prescription Slip)": "取物人(領藥單)", "Pickup Code (8 Digits)": "取貨碼 (8 位數)", "Pickup Codes": "取貨碼", + "Pickup Recipient (Prescription Slip)": "取物人(領藥單)", + "Pickup Recipient Info": "取物人資訊", "Pickup Ticket": "商品領取券", "Pickup Voucher": "取物單", "Pickup code cancelled.": "取貨碼已取消", "Pickup code generated: :code": "已生成取貨碼::code", "Pickup code updated.": "取貨碼已更新", "Pickup door closed": "取貨門已關閉", + "Pickup door closed (cart mode)": "取貨口門關閉成功", "Pickup door error": "取貨門運作異常", "Pickup door not closed": "取貨門未關閉", + "Pickup door opened (cart mode)": "取貨口門打開成功", + "Pickup door unlocked": "取貨口門開鎖", "Platform Operator": "平台營運商", "Playback Order": "播放順序", "Please Select Slot first": "請先選擇貨道", @@ -1408,6 +1438,7 @@ "Print Notice": "列印提示", "Print Order": "列印單據", "Print Time": "列印時間", + "Processing...": "處理中...", "Product": "商品", "Product / Slot": "商品 / 貨道", "Product / Stock": "商品 / 庫存", @@ -1429,7 +1460,7 @@ "Product Status": "商品狀態", "Product created successfully": "商品已成功建立", "Product deleted successfully": "商品已成功刪除", - "Product empty": "貨道缺貨 (PDT_EMPTY)", + "Product empty": "商品售罄", "Product physical shipment count": "商品實體出貨件數", "Product status updated to :status": "商品狀態已更新為 :status", "Product updated successfully": "商品已成功更新", @@ -1447,10 +1478,12 @@ "Publish Time": "發布時間", "Purchase Audit": "採購單", "Purchase Finished": "購買結束", + "Purchase successful": "購買成功", "Purchases": "採購單", "Purchasing": "購買中", "Purpose": "用途", "Push Status": "告警狀態", + "Pushing bento into microwave": "正在將便當推入微波爐", "QR": "二維碼", "QR CODE": "二維碼", "QR Code": "QR Code", @@ -1707,16 +1740,16 @@ "Slot No": "貨道編號", "Slot Status": "貨道效期", "Slot Test": "貨道測試", - "Slot empty": "貨道空 (SLOT_EMPTY)", - "Slot jammed": "貨道卡貨 (K-PDT)", - "Slot motor error (0207)": "貨道電機故障 (0207)", - "Slot motor error (0208)": "貨道電機故障 (0208)", - "Slot motor error (0209)": "貨道電機故障 (0209)", + "Slot empty": "貨道缺貨", + "Slot jammed": "貨道卡貨", + "Slot motor error (0207)": "貨道馬達錯誤 (0207)", + "Slot motor error (0208)": "貨道馬達錯誤 (0208)", + "Slot motor error (0209)": "貨道馬達錯誤 (0209)", "Slot normal": "貨道正常", "Slot not closed": "貨道未關閉", "Slot not found": "找不到指定貨道", "Slot report synchronized success": "貨道狀態同步成功", - "Slot sensor blocked": "貨道口有物", + "Slot sensor blocked": "貨道感測器受阻", "Slot updated successfully.": "貨道更新成功。", "Slots": "貨道數", "Slots need replenishment": "需要補貨的貨道", @@ -1753,7 +1786,6 @@ "Standby Ad": "待機廣告", "Start Date": "起始日", "Start Delivery": "開始配送", - "Processing...": "處理中...", "Start Import": "開始匯入", "Start Time": "開始時間", "Statistics": "數據統計",