Commit Graph

58 Commits

Author SHA1 Message Date
sky121113
275d6d1fa9 [FIX] 通用版下位機 COM port 改為與中國醫相同
General 的下位機硬體與中國醫(Cmuh)相同(晟崴為最新硬體),故 COM port
應接 ttyS1/ttyS2 而非原本的 ttyS7/ttyS6。

ComPort.getFilepath() 改為:只有晟崴(Chengwai) 用最新的 ttyS7/ttyS6,
其餘(General + Cmuh)用 ttyS1/ttyS2。晟崴/中國醫接線不變,僅 General 調整。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-10 11:58:23 +08:00
sky121113
588da4a2eb [CHORE] APK workflow 強殺防呆 + 新增 Claude Code slash command
- .agents/workflows/{compiler,release}-apk.md:Gradle Daemon 終止改防呆——
  先優雅 ./gradlew --stop,僅在仍殘留時才升級終止(先 TERM 再 KILL),
  避免無差別 pkill -9 撞鎖導致 clean 編譯隨機失敗。
- .claude/commands/{compiler,release}-apk.md:新增對應 slash command(薄包裝,
  指向 .agents/workflows 單一真相來源,處理參數注入與 Java 17 環境)。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-10 10:25:48 +08:00
sky121113
53ea3dafa9 [FEAT] 取貨碼金額歸零 + 通行碼不上報交易
- 取貨碼(FontendPickupCodeDialog):setTotalPrice(0),因屬已預付來取貨/
  付款未出貨補出貨,本機交易付款金額為 0。
- 通行碼(payment_type=5):工程師/內部硬體測試用,DispatchDialog 照常出貨
  測試硬體,但略過 MQTT 交易結案上報(避免污染銷售/營收、不扣雲端庫存;
  B670 驗證已於後台記 log)。集中於 publishFinalizeUnlessPassCode(),
  成功/失敗兩路徑共用。

三 flavor 編譯/打包通過。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-10 10:01:51 +08:00
sky121113
1720d2007e [FEAT] 取貨碼/通行碼改走 StarCloudAPI B660/B670(比照員工卡 B680)
舊的 httpAPI(memberVerification / checkAccessCode B024)改為新 StarCloudAPI:
- StarCloudAPI 新增 verifyPickupCode(B660,回 code_id+slot_no)、
  verifyPassCode(B670,回 code_id),及 PickupVerificationCallback。
- 通行碼 CheckoutAccessCodeDialog:手動+掃碼兩入口改走 verifyPassCode,
  成功設 flowType=5、保存 accessCodeId 供 MQTT finalize(payment_type=5)。
- 取貨碼 FontendPickupCodeDialog:兩入口改走 verifyPickupCode,依回傳 slot_no
  建立 BuyList、設 flowType=6、保存 accessCodeId(payment_type=6),
  進入 BuyPickupCodeDialog 確認 → DispatchDialog;文案修正為「取貨碼」。

finalize 的 code_id 取自 ReportAccessCodeStructure.accessCodeId、payment_type
取自 flowType,App 端 TransactionFinalizeBuilder 既有支援。三 flavor 編譯/打包通過。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-10 09:52:20 +08:00
sky121113
f10f6f5879 [FEAT] General 接通取貨碼入口(供實機測試)
- General SaleFlowHandler.onPickupRequested() 開啟 FontendPickupCodeDialog
  (原為空,導致取貨碼點不到)
- 前台取貨碼浮鈕改由 flavor 資源 show_pickup_code_button 控制顯示:
  General=true 顯示,main/晟崴/中國醫=false 維持原本隱藏行為

至此 General 取貨碼與通行碼皆可實機測試。三 flavor 編譯/打包通過。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-10 09:42:30 +08:00
sky121113
e8856d0a8b [FIX] 通行碼 Dialog 防呆強化(Part 2-3)
CheckoutAccessCodeDialog.changeOk()(自 Luzui 移植防呆):
- 加 3 秒防連點,避免重複送出驗證
- 輸入加 .trim() 與 isEmpty 過濾
- 修正誤植文案「統一編號長度不能少於 8 碼」→「通行碼長度不能少於 8 碼」

三 flavor 完整 APK 打包成功(General/Chengwai/Cmuh)。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-10 09:07:56 +08:00
sky121113
2315a32f56 [FEAT] General 現金強化版合併(Part 2-2)
移植 Luzui 現金 Dialog 的硬體容錯邏輯(卡鈔偵測+退鈔重試、零錢不足拒收+
退款保障、暫存區兩階段入帳、找零失敗自癒、百元鈔庫存輪詢、3分鐘閒置逾時),
上報層改接 TaiwanStar 新 MQTT(移除 B600/B650,改 DispatchDialog 統一 Finalize)。

採「獨立類別 + flavor 路由」避免 duplicate class、不污染已上線 flavor:
- 新增 src/General CashPayDialogGeneral(Luzui 強化版改名,只 General 編譯)
  + General layout override dialog_checkout_cash_pay.xml 補 buttonRetryEscrow
  - showDispatchDialog 改 MQTT 路徑、移除 callB600AndProceed/httpAPI
  - onCreate(Context) 移除 throws(對齊 TaiwanStar DialogAbstract 簽名)
- DialogAbstract.cashDialogClass() 經 SaleFlowHandler 解析各 flavor 現金 Dialog
- 三個 SaleFlowHandler 加 cashDialogClass():General→CashPayDialogGeneral、
  晟崴/中國醫→標準 CashPayDialog
- 3 個呼叫點(BuyDialog/InvoiceBarcodeDialog/InvoiceCustomerIdentifierDialog)
  case 9 改 changeDialog(cashDialogClass())

三 flavor 編譯通過、General APK 打包成功。現金硬體容錯需實機驗證(階段 7)。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-10 09:05:59 +08:00
sky121113
402490ee58 [FEAT] General 付款選單啟用 + BuyDialog NFC 顯示控制(Part 2-1)
- DevSet 初始預設值改由 res/values/devset_defaults.xml 提供,各 flavor 可覆寫;
  main 維持原值(Chengwai/Cmuh 行為不變),General override 為購物車 + 現金/
  刷卡/玉山/LINE Pay/發票全開,裝上即可用。
- BuyDialog 購物車分支:NFC 卡/儲值/手機改逐顆依 isDevNFCPay 控制顯示
  (TaiwanStar 無 layoutNfcPay 容器,修正原本指向不存在 view 而被註解的問題)。

三 flavor 編譯通過、General APK 打包成功。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-10 08:48:07 +08:00
sky121113
cfc802dbb5 [FEAT] General flavor 多品項購物車(Part 1)
移植 Luzui v2 Kotlin MVVM 購物車到 General flavor,接 TaiwanStar 既有
結帳鏈(BuyDialog → 付款 → DispatchDialog → MQTT 結案)、沿用 VMC 出貨。

- build:啟用 Kotlin/lifecycle/BaseRecyclerViewAdapterHelper(全域 classpath,
  cart .kt 僅在 src/General 編譯,不影響 Chengwai/Cmuh 行為)
- 移植至 src/General:CartViewModel/CartOperationAdapter/CartOperationResult/
  SafeCountdownUtil/UnibuyHelper/ShoppingCartFragment + layout/drawable/三語 strings
  - 移除 Luzui 的 updateLocalGoods(FLOWER/DAO)、DialogXManager、HttpAPI、格子機依賴
  - 結帳改 convertToBuyStructure() + SaleFlowHandler.onBuyRequested()
- 共用檔最小改動(對 Chengwai/Cmuh 零行為影響):
  - SlotStructure 加 cartSelectedCount
  - FontendActivity 加 openFragment()/backToVmc()、購物車浮鈕改走 onShoppingCartRequested()
  - RecyclerVmcBuyListAdpter 點商品改走 flavor hook handleProductSelected()
  - 三個 SaleFlowHandler 加 onShoppingCartRequested()/handleProductSelected()
    (General:加入購物車;Chengwai/Cmuh:維持原行為)

三 flavor 編譯通過、General APK 打包成功。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-10 08:45:11 +08:00
sky121113
5f480d6cb6 [FIX] 修正非中國醫專案的物料代碼一致性驗證邏輯並升級修補版號
1. 於 VmcSlotListActivity 限制 validateMaterialCodeConsistency 僅在中國醫 (CMUH) 專案下執行,其他專案直接跳過。
2. 調整 app/build.gradle 的修補版號 (verPatch) 變數值,由 67 遞增至 68。
2026-06-09 16:00:58 +08:00
sky121113
abe3ac14c1 Merge branch 'dev' into main for release v21.1.67 2026-06-04 16:29:04 +08:00
sky121113
0637f71e34 [FIX] 優化機台鎖定防護流程與遞增版本號
1. 遞增修補版號 verPatch 至 67 以落實機台 OTA 更新規範。
2. 於 FontendActivity 的 onCreate 流程新增機台鎖定狀態檢查,若鎖定則強制跳轉至 MaintenanceActivity 並清除 Activity 棧。
3. 修正 MqttService 的鎖定命令跳轉旗標,改用 Intent.FLAG_ACTIVITY_CLEAR_TASK 確保舊 Activity 棧被完整清理。
4. 移除 AppUtils 中未使用的 MqttManager 引用。
2026-06-04 16:07:31 +08:00
sky121113
bfc2915403 [FIX] 修復中國醫多貨道庫存分配異常與遞增發版版號
1. 修復 SaleFlowHandler.java:重構中國醫客製領藥流程中的多商品貨道分配演算法,引進動態多貨道輪替分配機制,徹底解決一筆單多商品(如 3 個同商品)時貨道重複分配為 3, 4, 4 的 Bug。
2. 更新 build.gradle:配合生產發版,將修補版號 verPatch 遞增至 66,並在背景成功編譯產出正式 Release APK (CmuhS9XYURelease)。
2026-06-02 17:49:40 +08:00
sky121113
0967f8445e Merge branch 'dev' into main for release 65 2026-06-02 16:01:05 +08:00
sky121113
a5add7d8ae RELEASE: 修正多商品取貨 UI 倒數閃跳與 3 分鐘閒置崩潰問題,發佈版本 65 2026-06-02 16:00:58 +08:00
sky121113
31a073475e [PROMOTE] 晉升開發分支 dev 至生產分支 main
包含以下主要功能與修復:
1. [FIX] 修正 OTA 連線超時與首頁執行緒併發競態導致 UI 異常問題 (808b9c4)
2. [FEAT] 優化 OTA 靜默安裝邏輯,支援降版本覆蓋安裝 (8768e95)
3. [STYLE] 優化 CMUH 專屬佈局元件比例與樣式排版 (2ea55b9)
4. [FEAT] 新增 CMUH 客製初始畫面跳轉與多處頁面重啟邏輯優化 (7b9b96c)
5. [FIX] 修正中國醫 (CMUH) 領藥異常處理與銷貨流水號關聯 (4c9fb5e)
6. [FIX] 實作半途出貨失敗的 MQTT Finalize 結案回報機制 (b2b6776)
7. [REFACTOR] 優化中國醫(Cmuh)售貨與領藥流程,並重構 API 連線模組 (71a0591)
8. [FEAT] 主控台 UI 全面翻新 (Console UI Overhaul) (984bbe7)
9. [REFACTOR] 重構銷售流程至雙維度 Flavor 架構與版本計算規範 (3409f93)
10. [FEAT] 新增遠端 MQTT 應用程式 OTA 更新功能與雙版號動態計算機制 (e15d020)
2026-06-02 10:52:50 +08:00
sky121113
808b9c40d9 [FIX] 修正 OTA 連線超時與首頁執行緒併發競態導致 UI 異常問題
1. OtaManager.java: 將下載的連線逾時從 15 秒調高至 30 秒,讀取逾時調高至 120 秒,提升 OTA 下載穩定性。
2. FontendActivity.java: 修正多執行緒更新 UI 時,共用 logs 緩衝區所引發的競態條件 (Race Condition) 導致欄位變空的問題,改採區域變數更新;並安全封裝重構 reportOnScheduler 的生命週期管理方法;調整閒置逾時為 5 分鐘。
3. build.gradle: 依據實體機台 OTA 版號自動化規範,安全遞增 verPatch 修補版號至 56。
4. compiler-apk.md: 優化編譯工作流中的後台更新說明提示欄位。
2026-06-01 17:48:32 +08:00
sky121113
8768e95178 [FEAT] 優化 OTA 靜默安裝邏輯,支援降版本覆蓋安裝
1. 於 OtaManager.java 中執行 pm install 時新增 -d 參數,允許降級 (downgrade) 安裝,以因應測試與緊急回滾情境。
2. 遞增 app/build.gradle 中的修補版號 verPatch 至 38。
2026-05-29 17:20:41 +08:00
sky121113
2ea55b9fbb [STYLE] 優化 CMUH 專屬佈局元件比例與樣式排版
1. 調整 Cmuh 專屬之 activity_fontend.xml 佈局,優化影片播放器比例與首頁容器 Constraint 限制。
2. 調整 fragment_vmc.xml 中掃描按鈕之 LinearLayout 屬性順序與排版樣式。
3. 遞增 app/build.gradle 的修補版號 verPatch 至 37 以配合發版需求。
2026-05-29 16:45:31 +08:00
sky121113
7b9b96ce66 [FEAT] 新增 CMUH 客製初始畫面跳轉與多處頁面重啟邏輯優化
1. 新增 AppEntry 工具類別,集中管理 Cmuh 專案判斷與動態初始 Activity 的獲取邏輯。
2. 於 HomeActivity 中新增 Cmuh 專案判斷,若為 CMUH 則直接導向至 FontendActivity 以跳過一般首頁。
3. 將 MainActivity、MqttService 與 FontendActivity 中的硬編碼 HomeActivity 導向重構為呼叫 AppEntry.initialActivity()。
4. 新增 Cmuh 專屬之 activity_fontend.xml 佈局檔案。
5. 遞增 app/build.gradle 中的修補版號 verPatch 至 35。
2026-05-29 15:15:24 +08:00
sky121113
f3867dcb4b [DOCS] 修正 release-apk 工作流中寫死 S12XYU 的問題
1. release-apk.md: 調整為依據專案 Flavor (Cmuh) 動態判斷硬體變體 (S9XYU) 與對應的螢幕尺寸與路徑。
2026-05-29 14:42:11 +08:00
sky121113
6d1733dfa9 [RELEASE] 升級修補版號以準備中國醫發版
1. build.gradle: verPatch 33 -> 34
2026-05-29 14:37:27 +08:00
sky121113
4c9fb5e000 [FIX] 修正中國醫 (CMUH) 領藥異常處理與銷貨流水號關聯
1. build.gradle: 升級修補版號 verPatch 31 -> 33。
2. TransactionFinalizeBuilder.java: 新增 orderNo 欄位並提供 setter。預設 orderNo 同 flowId,若呼叫 setOrderNo 則於組建 OrderPayload 時覆寫 order_no。
3. DispatchDialog.java (CMUH):
   - 中國醫 (Cmuh) 取物單 SN 序號改為覆寫 order_no,不再覆寫 flow_id、OrderId 與 ReportFlowId,避免機台底層流程因 ID 重複而拋錯。
   - 修正領藥失敗的 Memo 寫入邏輯:機台未回應重試逾時,移除 insertDrgnoToMemo()。
   - 整單出貨失敗結案時,檢查是否有任何出貨成功紀錄(新增 hasAnySuccessfulDispatch()),僅在有成功出貨時才寫入 Memo,整單未出貨時不寫入,允許使用者重新掃碼領藥。
2026-05-29 13:56:21 +08:00
sky121113
b2b6776665 [FIX] 實作半途出貨失敗的 MQTT Finalize 結案回報機制
1. 遞增 app/build.gradle 修補版本號為 1.31。
2. 於 TransactionFinalizePayload 新增 delivery_status 出貨狀態欄位(0=失敗, 1=成功, 2=部分失敗)。
3. 於 TransactionFinalizeBuilder 實作自動計算出貨狀態與建構回報的邏輯。
4. 於 DispatchDialog 實作 finalizeFailedDispatch 機制,當多筆商品出貨至半途失敗時,自動將剩餘未出貨的商品標記為失敗並上報 MQTT Finalize 結案。
2026-05-29 12:17:42 +08:00
sky121113
47acd44e61 [FIX] 整合中國醫功能優化、連續出貨修復與多國語系字串調整
1. 遞增 app/build.gradle 修補版本號為 1.30。
2. 優化 StarCloudAPI 登入追蹤日誌並調整日誌前綴。
3. 修正 DispatchDialog 出貨邏輯,移除單筆出貨防呆,恢復支援多筆連續出貨。
4. 新增與調整多國語系 strings.xml (繁中、英文、日文) 中國醫無庫存與未設定貨道的提示訊息。
2026-05-29 11:08:42 +08:00
sky121113
71a059183a [REFACTOR] 優化中國醫(Cmuh)售貨與領藥流程,重構 API 連線模組,並自動升版至 24
1. 重構 Cmuh 的 SaleFlowHandler:新增 ORDC_EMPTY、MATERIAL_NOT_FOUND、STOCK_NOT_ENOUGH 等明確領藥錯誤代碼,最佳化多貨道庫存匹配與扣減邏輯,改善掃碼按鈕的動態 UI 綁定時序。
2. 增強 Dialog UI 提示:重構 PickupErrorTipDialog 與 DispatchDialog,優化 dialog_pickup_error_tip.xml 佈局結構,確保出貨異常時能正確顯示對應的中文 Toast 與圖示。
3. 重構 HttpAPI 與網路層:重構後台 API 與 HttpConnect 的 Socket/連線異常處理,確實向 UI 回傳網路錯誤訊息(非吞例外),提升在極端網路環境下的穩定度。
4. 健全持久化與日誌模組:強化 StarCloudAPI 機台 Token 變更時的本地 SQLite 同步邏輯,提升 Logs 模組的非同步儲存與排程上傳穩定性。
5. 自動升版:配合實體機台 OTA 發版鐵律,將 app/build.gradle 中的 verPatch 變數由 23 遞增至 24。
6. 更新工作流說明:優化 .agents/workflows/compiler-apk.md 文件中的智慧尺寸判斷指令說明。
2026-05-28 17:48:03 +08:00
sky121113
46c24fcd2e [DOCS] 更新忽略設定以過濾本地測試資料庫
1. .gitignore:加入 *.db 與 mydata.db 規則,避免本機測試資料庫檔案干擾 Git 狀態追蹤。
2026-05-27 17:38:45 +08:00
sky121113
984bbe722c [FEAT] 主控台 UI 全面翻新 (Console UI Overhaul)
1. MainActivity.java:重構按鈕點擊邏輯,改用 Lambda 取代匿名 Runnable;新增 activeLoginDialog 追蹤機制,登入成功後自動關閉對話框並呼叫 updateLoginStatus();新增頂部登入/登出狀態按鈕 (btnStatusAction) 切換邏輯。
2. activity_main.xml:全面翻新 UI 佈局,導入卡片式分組選單、現代化 Header 區塊(含 Logo、版本號、機台狀態)、功能按鈕網格排版,以及底部版權列。
3. colors.xml:建立完整 Material 3 色彩系統,包含 primary/secondary/surface/background 色階,以及 success/warning/error/info 四種語意狀態色;調整 black 為深灰 (#272727)。
4. dimens.xml:新增 welcome 標題、Header Logo、選單按鈕圖示及間距等全套尺寸規格變數。
5. 新增三個 Drawable 資源:bg_button_primary.xml (主要按鈕樣式)、bg_button_outline.xml (外框按鈕樣式)、bg_input_modern.xml (現代化輸入框背景)。
6. 新增 values-sw720dp/dimens.xml:針對 720dp 以上大螢幕(10吋機台)的適配尺寸規格。
7. 新增主控台各功能示意圖資源(drawable/*.png):binding_machine、card_reader_checkout、card_reader_reboot、cargo_lane_management、product_list、reboot_app、sales_page、scanner_test、system_settings、taiwan_star_tech_logo、view_log_records、vending_machine_scenario_v1/v2。
8. app/build.gradle:verPatch 從 1 升至 6,對應本次多功能迭代開發。
9. dialog_admin_login.xml:新增獨立的管理員登入對話框佈局。
2026-05-27 17:15:07 +08:00
sky121113
3409f93f07 [REFACTOR] 重構銷售流程至雙維度 Flavor 架構、統一忙碌狀態並修正版本規範
1. 引進 SaleFlowHandler 與 SaleFlowCallback 介面,分離通用版 (General)、晟崴版 (Chengwai) 與中國醫版 (Cmuh) 的前台銷售進入點,降低 FontendActivity 耦合度。
2. 建立 src/Chengwai/、src/Cmuh/、src/General/ 目錄,將客製 dialog(如 FontendPickupCodeDialog、TakeMedicineDialog)與 layout 移入對應的專屬目錄。
3. 統一狀態檢查機制,將全專案背景排程、定時重啟與日誌備份中的舊 isShowDialog() 替換為更安全的 isMachineBusy();於 NFC 交易與鍵盤 Enter 防誤觸中特意保留原 isShowDialog() 以守護安全性防線。
4. 修正英文 values-en/strings.xml 缺漏與預設 locale 對齊的 sync_product/sync_product_warning,解決 lintVital 報告的 ExtraTranslation 錯誤,使 Release 打包 100% 成功。
5. 微調 app/build.gradle,將起點版號重置為 10_01_1,自動連動 versionCode 100101 與 versionName 10_01_1_R。
6. 修正 .agents/rules/versioning.md 規範,將 S 修正為「來源 (Source)」,將 verMajor 修正為「螢幕大小」,並補齊官方命名規範對照圖表與欄位解析。
7. 升級一鍵編譯 /compiler-apk(新增中文與英文別名智慧防呆映射)與新建發版 /release-apk 工作流。
2026-05-27 14:48:22 +08:00
sky121113
6b3e05051f [FIX] 升級補丁版號至 10.8.8 並優化 APK 自動編譯與發布腳本
1. 遞增 app/build.gradle 中的 verPatch 變數至 8(對應版本為 10_08_8_R,versionCode 為 100808),以利機台正常觸發 OTA 覆蓋安裝。
2. 重構 .agents/workflows/compiler-apk.md 腳本中的 APK 複製與命名機制,改為動態尋找並使用原始檔名,避免寫死檔名導致版本變更時失效。
3. 在編譯腳本中加入自動提取與計算版本資訊的輸出(包含 versionName 與 versionCode),方便在 StarCloud 後台登記時作為參考。
4. 更新 ADB 自動安裝路徑尋找方式,使其與動態尋找 APK 機制保持一致。
2026-05-27 10:16:56 +08:00
sky121113
e15d0209c6 [FEAT] 新增遠端 MQTT 應用程式 OTA 更新功能與雙版號動態計算機制
1. 新增 OtaManager.java:實現背景下載 APK 檔案至應用程式私有快取空間,並透過 Root 權限 (su 與 pm install -r) 進行靜默覆蓋安裝的完整邏輯。
2. 修改 MqttService.java:支援 update_app MQTT 指令,解析 payload 中的 url 參數並啟動 OtaManager 進行 OTA 更新。
3. 修改 app/build.gradle:實作雙版號動態計算機制,定義 verMajor、verMinor、verPatch,以符合實體機台的 OTA 覆蓋安裝規範。
4. 新增 .agents/rules/versioning.md:制訂專案版號與發版規範。
5. 修改 .agents/workflows/compiler-apk.md:調整編譯工作流,在編譯前自動檢查程式碼變更與遞增版號,並支援動態尋找編譯產出的最新 APK。
6. 修改 .gitignore:排除 .antigravitycli/ 工具產生的目錄。
7. 修改 .vscode/settings.json:設定自動更新 Java 的建置組態。
2026-05-22 16:04:52 +08:00
sky121113
465125f614 [FIX] 修復整點閒置重啟時觸發兩次的問題
1. 於 HomeActivity.java 中引進 SharedPreferences 持久化機制,比對當前日期與時間 Slot(如 yyyy-MM-dd HH:mm),避免同一分鐘內或 App 被 kill 掉重啟後重複觸發 RestartAPP2 背景等待執行緒。

2. 於 FontendActivity.java 中同步套用 SharedPreferences 限制邏輯,確保在首頁或購物頁面皆能共享同個重啟記錄,防止發生 90 秒後二次重啟的 Bug。
2026-05-20 14:07:50 +08:00
sky121113
ee8143032a [STYLE] 修正系統設定按鈕文字為安卓設定頁
1. 將 activity_main.xml 中的進入系統畫面按鈕(buttonOpenSystemSettings)之文字由「進入系統畫面」修改為「安卓設定頁」,以更精確描述其功能。
2026-05-20 13:44:16 +08:00
sky121113
3c1f805d97 [DOCS] 更新開發歷史紀錄
1. 補齊 2026/05/05 開發紀錄的第 3 點(登入 API 與 ApiKey 持久化機制修復)。
2. 補齊 2026/05/07 至 2026/05/20(最新合併至 main)的 Git 開發歷程。
2026-05-20 13:36:43 +08:00
sky121113
422459a0c3 [FIX] 修復閒置逾時觸發與資源釋放問題,並修正介面字串
1. 於 AppCompatActivityAbstract 覆寫 onUserInteraction(),在使用者互動時主動更新最後互動時間。
2. 於 HomeActivity.onDestroy() 增加 reportOnScheduler 的生命週期管理,於銷毀時執行 shutdown() 以防止執行緒洩漏。
3. 於 FontendActivity 的閒置逾時機制中,增加開發者/主控台模式判定,若處於該模式則重設計時器、不返回待機頁。
4. 修改 strings.xml 中的 slave_machine_software 字串,由「結構設定APP」修正為「下位機設定」。
2026-05-20 11:30:39 +08:00
sky121113
d13546b379 [FIX] 優化點選商品之出貨口狀態判斷與防重複點擊機制
1. 重構 checkSlotHaveProduct 方法以支援安全回呼與 3000ms 超時保護。
2. 修正 DevCheckSlotByVMC 串口讀取未重置 haveThings 導致的狀態殘留 Bug。
3. 加入 isCheckingSlot 點選鎖,防呆避免非同步檢查期間重複點擊商品。
4. 於異常 AlertDialog 手動與自動關閉路徑中,正確釋放點選鎖。
5. 更新中英日三語系取貨口有物文字為「取貨口有東西,請先取出」,並將 Dialog 字體放大至 24sp。
6. 將 checkSlot 的串口讀取延遲由 2000ms 降至 800ms,大幅加速點選商品的反應時間。
2026-05-19 16:35:13 +08:00
sky121113
ab8b828aa2 [FIX] 優化貨道上傳流程與隱藏出貨完成後的取貨確認按鈕
1. 於 DispatchDialog.java 中隱藏出貨流程最後的「取貨確認」按鈕,改為僅以 15 秒倒數後自動關閉對話框,防範使用者干預流程。
2. 於 VmcSlotListActivity.java 調整貨道同步邏輯,在上傳成功後自動返回前一頁。
3. 於 VmcSlotListActivity.java 實作上傳失敗時的彈出對話框,提供「重新嘗試」與「直接返回」選項,防止因返回鍵隱藏而造成介面卡死。
4. 調整 activity_vmc_slot_list.xml 佈局,隱藏「返回」按鈕,並將儲存按鈕文字調整為「上傳後台並返回」。
5. 修改 MqttManager.java,將心跳包定時器初始化延遲設定為 10 秒,避免開機初始化期間發生資源競合。
2026-05-18 13:15:30 +08:00
sky121113
d68482a005 [REFACTOR] 關閉閒置 30 分鐘主動重啟機制以維持連線穩定
1. 註解掉 FontendActivity 中的閒置 30 分鐘重啟邏輯。
2. 改為僅依賴每 4 小時一次的定時重啟,優化 MQTT 連線紀錄的穩定性並減少頻繁斷線。
2026-05-16 18:16:54 +08:00
sky121113
65dd123d0c [FEAT] 實作機器連線環境切換功能 (Demo vs 正式站)
1. 在 activity_setting.xml 新增環境切換單選鈕 (RadioGroup)。
2. 修改 SettingActivity.java 處理環境切換邏輯與 UI 初始化。
3. 修改 MachineStructure.java 新增 mqttEnv 欄位以儲存環境狀態。
4. 修改 MyApp.java 在啟動時從資料庫載入環境設定。
5. 修改 StarCloudAPI.java 使 API BASE_URL 根據環境設定動態切換。
6. 修改 MqttManager.java 使 MQTT Broker Host 根據環境設定動態切換。
7. 更新正式站 API (starcloud.taiwan-star.com.tw) 與 MQTT (emqx.taiwan-star.com.tw) 位址。
2026-05-15 12:55:15 +08:00
sky121113
43b1a8b3e3 [FEAT] 最佳化主介面佈局並實作 MQTT 優雅重啟邏輯
1. 在主介面 (activity_main.xml) 加入 ScrollView 容器,支援更多功能按鈕的滾動顯示。
2. 新增「進入系統畫面」按鈕,方便開發與偵錯。
3. 實作 MQTT 優雅斷線機制,在 App 手動或自動重啟前先行中斷 MQTT 連線,避免觸發 LWT 離線告警。
4. 修正貨道商品價格顯示邏輯,當價格為 0 時自動隱藏售價標籤。
5. 調整 VmcFragment 中的售價合法性判斷基準。
6. 更新 compiler-apk 工作流說明文件。
2026-05-14 17:42:30 +08:00
sky121113
4105d33956 [STYLE] 修正銷售平台圖片廣告下方的間距問題
1. 將 activity_fontend.xml 中的 imageAd 元件高度由 wrap_content 改為 match_parent,使其強制填滿 16:9 廣告區域,消除與下方商品列表間的間距。
2. 移除 imageAd 中無效的 app:layout_constraintDimensionRatio="16:9" 屬性。
2026-05-14 12:42:18 +08:00
sky121113
45853d0b9d [FEAT] 實作遠端更新商品指令與圖片顯示優化
1. 在 MqttService 中新增 update_products 指令處理,支援遠端觸發商品資料同步。
2. 優化 ImageGlide 邏輯,移除從網路載入圖片時的淡化濾鏡,確保圖片即時顯示原色。
3. 改進 ProductListActivity 的圖片預載機制,支援逐張商品即時刷新 UI 提升互動感。
4. 更新 .gitignore 以排除 .idea 目錄及 Agent 產生的規劃檔案。
5. 配合環境調整 Gradle 配置與 SDK 路徑。
2026-05-14 11:13:42 +08:00
sky121113
8ae4ae9c14 [FIX] 修復廣告同步導致的 Activity 銷毀崩潰與局部廣告清空失效問題
1. 修正 HomeActivity 與 FontendActivity 在廣告更新廣播回呼中因 Activity 已銷毀而觸發 Glide IllegalArgumentException 的問題。
2. 在 VideoImageMixedPlayer 中增加 Activity 生命週期安全檢查,確保不會在非法 Context 下執行 UI 操作。
3. 優化 VideoImageMixedPlayer 的清空邏輯:當特定 Flag 下無廣告可播放時,主動隱藏影片與圖片視圖並清除殘留影像。
4. 強化 stop() 方法,確保切換頁面時能完整釋放播放器資源並重設視圖狀態。
5. 增加詳細的廣告過濾與播放日誌,並支援廣告動態播放時間 (Duration) 控制。
2026-05-13 17:06:17 +08:00
sky121113
3044314856 [FIX] 修正商品圖片同步後銷售平台未更新問題及編譯穩定性改善
1. StarCloudAPI:同步商品後強制更新所有 SlotStructure 的物件參考,確保 UI 取到最新資料
2. FontendActivity:在 onResume 中清除 Glide 記憶體快取並呼叫 updateFlowerBuyList(),確保返回銷售平台時圖片即時刷新
3. ImageGlide:新增 clearProductCache() 方法,可實體刪除本地快取圖片目錄,並加入診斷用日誌
4. RecyclerVmcBuyListAdpter:優化 ViewHolder 綁定邏輯,補齊售完遮罩顯示判斷及點擊事件資料驗證
5. SettingActivity:補上遺漏的 ImageGlide import 修正編譯錯誤,並修正 RecyclerView LayoutManager 設定邏輯
6. ProductListActivity:補上遺漏 import
7. compiler-apk.md:Workflow 改為每次執行 clean build 並先終止殘留 Gradle Daemon,避免增量快取遮蔽編譯錯誤
2026-05-13 12:42:41 +08:00
sky121113
028cac10b5 [FIX] 優化出貨流程 UI 體驗與修復雙重倒數 Bug
1. 修復出貨結案時,因 VMC 重複回傳訊號導致 15 秒倒數重置的 Bug。
2. 實作 isFinalizing 狀態鎖,確保結案流程不被舊有的定時器或重複訊號干擾。
3. 優化出貨流程 UI:初始狀態顯示「準備出貨」,取代原先錯誤的提示文字。
4. 調整「取貨確認」按鈕邏輯:出貨中隱藏按鈕,僅在 15 秒取貨倒數時顯示,並支援使用者提前確認取貨。
5. 修正「員工卡」錯字並同步多語系(英、日)字串資源。
6. 在 MqttService 與 FontendActivity 實作 isMachineBusy() 檢查,防止交易過程中觸發遠端重啟。
7. 優化 VMC 偵測邏輯,加入重複訊號過濾防護。
2026-05-13 09:33:32 +08:00
sky121113
93a9ad7e2d [FIX] 優化 MQTT 遠端重啟邏輯與機台忙碌狀態判斷
1. 在 MyApp 實作 getBusyReason(),整合對話框、購物車、NFC 支付狀態,提供更精確的忙碌診斷資訊。
2. 重構 MqttService 遠端解鎖/重啟邏輯,使用新的忙碌檢查機制並記錄詳細拒絕原因。
3. 修正 HomeActivity 進入時強制清空購物車,確保逾時回首頁後機台能正確進入閒置狀態。
4. 更新 FontendActivity 重啟邏輯,改用 isMachineBusy() 提升穩定性。
5. 移除出貨對話框 (DispatchDialog) 的「異常回報」按鈕,簡化使用者介面。
6. 優化購物車 Adapter (Electric/VMC),確保遠端庫存更新時能即時同步 UI 點選狀態。
2026-05-12 16:41:52 +08:00
sky121113
ccab0905c6 [REFACTOR] 統一重啟邏輯安全防護與 MQTT 交易結案規格
1. 統一 MQTT 交易結案規格:移除 TransactionFinalizePayload 與 Builder 中的 remote_command_id 欄位,強制使用 code_id。
2. 強化定時重啟安全性:將 HomeActivity 與 FontendActivity 的重啟邏輯統一為「閒置 90 秒 + 無開啟對話框」才執行硬重啟。
3. 統一 12:00 重啟行為:將中午 12 點的軟重啟改為受保護的硬重啟,確保資源清理。
4. 加固遠端指令安全性:MqttService 收到 reboot 或 unlock 指令時,若偵測到有人操作(閒置 < 60 秒或對話框開啟)則回傳失敗 ACK,不執行重啟。
2026-05-12 14:57:26 +08:00
sky121113
98cb59c431 [FIX] 修復遠端出貨流程與 MQTT 回傳機制
1. 修復 SchedulerAbstract.java 的 shutdown() 方法在多執行緒環境下因 scheduler 被設為 null 而導致的 NullPointerException。
2. 強化 ProductDispenseManager.java 的輪詢機制,在重新輪詢的 lambda 中加入 try-catch 安全網,確保即使排程異常也能觸發 onFailure 回調發送 ACK。
3. 優化 MqttService.java 對 dispense 指令的處理,增加對成功/失敗回調的日誌記錄與 Command ACK 發送。
4. 更新 TransactionFinalizeBuilder.java 與相關 Payload 結構,確保 code_id 以字串形式正確上報,並加入 remote_command_id 欄位以利後台對帳。
5. 修正 DevXinYuanController.java 對 VMC_04_BUY_STATUS 的處理,確保不論成功或處理中狀態皆能透過 MQTT 診斷 Topic 上報。
6. 修正 DevController.java 中 getReadBuffer 邏輯,避免在重新啟動排程時出現潛在競爭。
2026-05-12 13:24:33 +08:00
sky121113
f5619e754e [FIX] 攔截硬體 Enter 鍵防止誤觸並修正遠端出貨交易紀錄
1. 在 FontendActivity 中攔截購物畫面非預期的 Enter 鍵事件,防止讀卡機誤觸員工卡對話框。
2. 關閉 VMC 與 Electric 商品列表圖片的 focusable 屬性,杜絕硬體 Enter 鍵觸發點擊事件。
3. 修正 MqttService 中的遠端出貨邏輯,改用 TransactionFinalizeBuilder 走完整交易結案流程。
4. 確保遠端出貨時正確填充 BuyList 與 ReportFlowInfoData,使後台能產生完整的訂單紀錄。
5. 在 NFC 支付對話框取消時,確保呼叫 nfcPayController.shutdown() 釋放硬體資源。
2026-05-11 18:07:12 +08:00
sky121113
e5feac1608 [FEAT] 整合 MQTT 交易結案邏輯與優化 NFC 生命週期管理
1. 在 MqttService 中實作遠端出貨指令的結案回報 (Transaction Finalize),確保庫存同步。
2. 優化 TransactionFinalizeBuilder,統一使用 FlowIdGenerator 生成 flow_id 與 order_no,確保端到端一致性。
3. 更新 TransactionFinalizePayload 結構,新增 remote_command_id 欄位以支援遠端指令追蹤。
4. 實作 NFC 讀卡生命週期 gated 機制,在 CheckoutNfcCardDialog 等對話框關閉時正確釋放硬體資源。
5. 修復 DevXinYuan 與 Rs232Dev 在異常通訊時的穩定性問題。
2026-05-11 17:16:18 +08:00