sky121113
|
e4e62de5b8
|
[FIX] 修復遠端重啟刷卡機/結帳失敗(指令名稱不符)並補刷卡機序列埠健壯性
1. 指令名稱對齊後台:MqttService 的 nfc_reset 相容 reboot_card、nfc_checkout 相容 checkout。
後台(star-cloud)按鈕送出 reboot_card / checkout,App 原本只認 nfc_reset / nfc_checkout,
導致一律落入 Unknown command → failed,此功能自串接首日(df8dae9)即從未成功;改別名後相容兩種。
2. 遠端 nfc_reset / nfc_checkout 執行前加 Busy Check:getBusyReason() 非空(現場交易中)即拒收並回報
Machine busy,避免與現場刷卡爭用 comPort2。
3. 遠端指令送完電文改用 finally 強制 comPort2.closePort(),杜絕序列埠洩漏害下一筆現場交易開不了埠。
4. Rs232Dev 的 isMockMode 由 static 改為 instance 欄位,另立 static suMissing 表「su 缺失」全域事實;
單一埠連線失敗只標記該實例,不再污染全 App 的 send 全部空轉(原 bug 須重啟才復原)。
5. verPatch 21→22(versionName 21_02_22_D / versionCode 210222;21 已 Release,避免 OTA 撞號)。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-25 09:11:55 +08:00 |
|
sky121113
|
377da0a2da
|
[FEAT] 進購物平台前強制關閉導航列 + 序號版本號字體放大加深
1. MainActivity「銷售平台」按鈕點擊改為先檢查導航列狀態:
以 isNavigationReallyHidden() 判斷,未真正關閉時跳出
showMustHideSystemBarsDialog() 提醒並擋下,符合販賣機機台不應出現系統導航列的規範。
2. 開發者後門(長按 2 秒強制進入)維持不變,刻意不受導航列檢查限制,方便手機測試。
3. 購物平台機台資訊列 textMachineInfoName(序號 + 版本號,亦為長按進主控台後門的觸發點)
字體 14sp→16sp、alpha 0.7→0.9,放大加深以提升可讀性與長按命中率。
4. verPatch 20→21(versionName 21_02_21_D / versionCode 210221)。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-24 17:14:07 +08:00 |
|
sky121113
|
a24bdfdc0e
|
[FEAT] 貨道效期+鎖定 App↔後台雙向同步(LWW)+ 現場效期輸入
1. SlotStructure 新增 lock_rev/lock_synced_rev/expiry_rev/expiry_synced_rev(per-field LWW 序號)與 getExpiryDate/setExpiryDate/getBatchNo helper;clearExpiry 明定不可遞增 rev。
2. DatabaseHelper:slot 表新增 4 個 rev 欄位;onUpgrade 由「DROP 全表重建」改為「ALTER ADD COLUMN」增量升級保留既有資料;並把現場已鎖貨道 lock_rev 設 1 以遷移上雲。
3. SlotsDao:新增單行 updateSlot 與單一交易 replaceAll;insert/read 帶 4 個 rev,取代 deleteAll+insertAll 全表重寫避免 race。
4. StarCloudAPI B009:每筆 data[] 加 is_locked/lock_rev/expiry_date/batch_no/expiry_rev;被鎖空貨道(有 lock/rev>0)也上報;上報成功以快照 rev 回填 synced_rev。
5. MqttService update_inventory 下行:解析 is_locked/lock_rev/expiry_rev,依 synced_rev 拒絕覆蓋未上報的現場編輯,只動「下行確實帶的鍵」,改用單行 updateSlot 寫入。
6. VmcSlotListActivity:進頁拍 lock/效期 baseline,存檔時實際變更才遞增對應 rev;saveData 改用 replaceAll 交易。
7. RecyclerVmcSlotListAdpter:效期欄位改為永遠可點,開 DatePicker 供補貨員現場輸入效期(含「清除效期」)。
8. build.gradle:verPatch 19→20。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-24 14:58:10 +08:00 |
|
|
|
78f497d3f8
|
[MERGE] feat/general-cart-and-payment:整合領藥單功能與遠端鎖貨道/效期/交易上報更新
|
2026-06-24 11:29:06 +08:00 |
|
|
|
efd6d62449
|
[FEAT] 領藥單(雲端建單)模式與相關修正
- PharmacyPickupSaleFlow:雲端領藥單銷售流程(B660 驗證→組購物車→出貨)
- SaleFlowHandler 依 shopping_mode + FunctionSet.PharmacyPickup 分流
- 系統設定頁顯示領藥單功能狀態;DevSet 解析 PharmacyPickup
- 領藥明細/出貨畫面商品圖片改以 product_id 從本地商品清單補回
- 商品列表下載商品圖片時保留返回/下載按鈕並停用、進度遮罩不再蓋住按鈕
- 確認領藥畫面備註欄顯示批價單號(pricing_slip_no)
- 一併提交其餘待提交變更(OTA/付款/通訊等既有調整)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-24 11:24:09 +08:00 |
|
sky121113
|
90f86cf3c9
|
[FIX] 鎖貨道/效期只鎖該貨道不再鎖整商品,同商品多貨道改逐道出貨
1. VmcFragment.updateFlowerBuyList():銷售卡合併同商品多貨道改為「任一可賣貨道(count>0且未鎖未過期)即可售」,庫存只計可賣貨道加總;全部不可賣才依 鎖定>過期>售完 顯示對應遮罩。修正鎖一個貨道或單一貨道過期就把整個商品擋掉的問題。
2. MyApp 新增 allocateBuyStructures():把購買數量依可賣貨道 greedy 拆成多筆 count=1 的 BuyStructure,規避 VMC 出貨狀態機不支援單筆 quantity>1(出完第一個會卡 40 秒看門狗);庫存不足才溢位回代表道,交既有「出貨失敗→後台依 dispense 退款」保護網。
3. CartViewModel.convertToBuyStructure():多品項購物車改用 allocateBuyStructures 拆道,避免同商品買多個時重複出同一貨道而卡頓/出貨失敗。
4. DialogProductDetail 直購:改走 allocateBuyStructures 拆道。
5. PickupSheetSaleFlow:中國醫領藥 buildMaterialSlotMap 與 isAvailableCmuhStock 排除鎖定/過期藥道,避免藥單驗證通過卻在出貨時失敗。
6. build.gradle:verPatch 18→19(versionName 依硬體規格產生)。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-24 10:22:03 +08:00 |
|
sky121113
|
8db3fab1c0
|
[FEAT] 效期過期商品自動下架(暫不販售)+ 訊號權限 root 自授權規格
1. SlotStructure 新增 isExpired()/getExpiryDate()/clearExpiry():以 ISO 日期字串字典序比對效期(避開時區/解析誤差),當天可賣、隔天起才鎖;解析失敗 fail-open 不擋售,避免時鐘或資料異常誤鎖全機。
2. VMC 銷售清單與貨道清單:過期商品顯示「暫不販售」遮罩並禁止加入購物車/購買(recycler_vmc_slot_list.xml + RecyclerVmcBuyListAdpter/RecyclerVmcSlotListAdpter)。
3. 出貨前即時效期複查:DialogProductDetail/DispatchDialog/MemberCardPickupDialog/CartViewModel 於出貨當下再驗一次,過期則取消出貨並返回銷售平台。
4. 貨道庫存歸 0(賣完)時自動清除效期與批號,避免舊批效期殘留導致補新貨被誤鎖。
5. 新增多語系字串 product_expired「暫不販售」(11 語系)。
6. docs:network-signal-reporting-spec 補上「機台 rooted → App 啟動時以 su 自我授權 ACCESS_FINE_LOCATION」的定案做法(失敗靜默、不影響其他功能)。
7. 版號遞增 verPatch 17→18(versionName 21_02_18_D / versionCode 210218)供 OTA 辨識。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
2026-06-23 17:08:29 +08:00 |
|
sky121113
|
ed9b05636c
|
[FIX] 修復掃碼槍HID幽靈輸入卡死商品視窗、遠端重啟被誤判忙碌拒絕與執行緒洩漏卡頓
現場 M000008 經 log 確認三症狀同一根因:掃碼槍(HID鍵盤)按鍵穿透 FLAG_NOT_FOCUSABLE
對話框打進 FontendActivity,觸發 onUserInteraction 不斷把閒置時間歸零,導致待機看門狗
與重啟條件永遠達不到,且 [Dialog Open] 讓遠端 reboot 被當忙碌拒絕(指令484實證)。
1. FontendActivity.onUserInteraction 不再更新閒置時間/不呼叫 super,改在
dispatchTouchEvent 更新;閒置一律以「實體觸控」為準,HID 按鍵不再算互動。
2. DialogAbstract 新增 isBusyDialog/isInputNeededDialog 分類、hasBusyDialogShowing/
hasInputNeededDialogShowing 查詢、dismissAll 統一關窗,並加 dispatchTouchEvent
讓對話框上的真人觸控也算互動(避免操作中被誤關)。
3. DialogProductDetail 標記 isBusyDialog=false:商品詳情不再卡成 [Dialog Open] 忙碌,
閒置可自動返回首頁、亦不再擋掉遠端重啟。
4. FontendPickupCodeDialog / MemberCardPickupDialog 標記 isInputNeededDialog=true,
保留取貨碼/會員卡的掃碼槍/讀卡機輸入。
5. MyApp.getBusyReason 改用 hasBusyDialogShowing(),只計入付款/出貨等真正忙碌對話框。
6. FontendActivity.dispatchKeyEvent 同時攔截 ENTER 與 NUMPAD_ENTER,僅放行正在顯示
需要 HID 輸入的對話框,阻止幽靈輸入反覆開關商品視窗。
7. FontendActivity.idleRunnable 返回首頁前呼叫 dismissAll 清除殘窗。
8. FontendActivity.onDestroy 各釋放步驟全包 try-catch 並把 super.onDestroy 移到最後,
確保 stopHeaderReportScheduler 一定執行,修正 ClockTickScheduler 執行緒洩漏卡頓。
9. MqttService 遠端 reboot 新增 force(command:"reboot_force" 或 payload {"force":true}),
現場卡死時可無視忙碌強制重啟,作為最後逃生口。
10. 升版號 verPatch 至 16(正式版 21_02_16_R / versionCode 210216)以觸發 OTA。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
2026-06-23 13:20:25 +08:00 |
|
sky121113
|
ebfa25da72
|
[FEAT] 強化交易上報正確性:手機支付路由鍵全程一致 + 結案發件箱防漏送
1. 手機支付 flowType 自按鈕起即為 10(原 4):BuyDialog 手機感應鈕、BuyDialog/
BuyPickupCodeDialog/InvoiceBarcodeDialog/InvoiceCustomerIdentifierDialog/
InvoiceDonationDialog 的支付路由 case 4→10,realPayment 判斷一併更新;
DevSetStructure.canMobilePay 與 TransactionFinalizePayload 註解同步標為 10。
2. CheckoutNfcPhoneDialog 成功時不再覆寫 flowType(原 4→10),改為成功/失敗/取消
各出口全程一致上報 10,修正失敗手機感應誤標後台 4(紙鈔機/Bill Acceptor)的問題。
3. 新增 TransactionOutbox:結案 payload 先持久化(SharedPreferences per-key)再送出,
broker PUBACK 才移除;連線恢復與心跳每 60s 自動補送,解決斷線/斷電/App 被殺時 finalize 漏送。
4. MqttManager.publishTransactionFinalize 改走 Outbox,斷線不再直接丟棄;新增
rawPublishTransaction(成功/失敗雙回呼)供 Outbox 實際送出。
5. Outbox 全程單一背景執行緒處理不卡 UI;in-flight 標記避免同筆重複送;連續失敗達
上限移入死信(保留資料、出聲告警);addConnectedListener 連線恢復清 in-flight 並補送。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
2026-06-23 09:09:10 +08:00 |
|
sky121113
|
8d764ba388
|
[FIX] 修復遠端 OTA 更新失敗並依環境區分 APK 版本後綴
1. 新增 DOWNLOAD_WITHOUT_NOTIFICATION 權限:OtaManager 改用 DownloadManager 後以 VISIBILITY_HIDDEN 靜默下載,缺此權限會在 enqueue 時丟出「Invalid value for visibility: 2」導致每次遠端更新一啟動就失敗。
2. versionName 後綴依 build type 動態切換:release → _R(正式)、debug → _D(測試),現場可一眼辨識 APK 來源;versionCode 不含後綴、兩者相同不影響 OTA 比版。
3. compiler-apk workflow 的後台 keyin 列印由寫死 _R 改為 _D,與實際 debug 檔名一致。
4. verPatch 升至 13。
5. 新增 docs/network-signal-reporting-spec.md 網路訊號上報規格文件。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-18 16:16:47 +08:00 |
|
sky121113
|
c7da4d1a12
|
[FEAT] 刷卡逾時/使用者終止改判未完成,不再誤報付款失敗
1. TransactionFinalizeBuilder.publishFailed:刷卡機回應碼 0003(交易逾時)/ 0006(使用者終止)改以 status=abandoned 上報且不帶 code,後台立即將該筆 pending 轉為「未完成 abandoned」,列表不再顯示為付款失敗,也不產生刷卡機硬體警告噪音。
2. 空電文與真實拒絕碼(0001/0002、0005 通訊失敗、0015/0016 餘額不足、1001~1003 等,卡片已讀到或可能已扣款)維持上報 failed(帶 code),保留對帳軌跡。
3. 邏輯集中於 publishFailed 一處,三個 NFC 結帳 Dialog(信用卡/電子票證/手機支付)與後台皆不需變更。
4. 升版號 verPatch 10→11(S9XYU:versionName 21_02_11_R、versionCode 210211)以利 OTA 更新。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-18 15:01:28 +08:00 |
|
sky121113
|
6dfadbe246
|
[FEAT] 重構 OTA 升級管理器以改用 DownloadManager 支援背景續傳與進度回報
1. 升級 `app/build.gradle` 頂部修補版號為 10 (verPatch = 10)。
2. 重構 `OtaManager.java`:
- 捨棄舊版自架 Thread 下載,改用系統 `DownloadManager` 進行背景下載,防止 App 重啟被殺中斷。
- 下載期間定期透過 MQTT 發送進度 ACK (`result="progress"`)。
- 語意修正:不再一開始就回報 `success`,僅在終態回報成敗。因靜默安裝成功會重啟 App,故於新版啟動後透過 `resumeIfPending` 比對預期版本並回報 `success`。
- 新增閒置安裝機制,若機台忙碌中則持續等待並定期重試。
- 提供無 `DownloadManager` 時的舊版直連下載退回方案。
3. 修改 `MqttManager.java`:在 MQTT 連線就緒後呼叫 `OtaManager.resumeIfPending` 接手未完成的 OTA 任務,避免狀態遺失。
4. 修改 `MqttService.java`:解析 MQTT `update_app` 指令 payload 中的 `version` 欄位並帶入 `OtaManager` 進行版本確認。
|
2026-06-18 09:10:21 +08:00 |
|
sky121113
|
272164e0ed
|
[STYLE] 品牌更名為 Star Cloud、修正圖片快取並升版號至 _9
1. 品牌字串統一更名為「Star Cloud」:首頁歡迎標題(登入前/後)由「AAT」改為「Star Cloud」、標題副字串「智能販賣機系統」精簡為「智能系統」(MainActivity、activity_main.xml);刷卡收據抬頭「AAT」改為「Star Cloud」(dialog_credit_card_receipt.xml)。
2. 首頁主視覺由 vending_machine_scenario_v1 改用 starcloud_logo_circle,並新增 starcloudlogo.png 素材。
3. 修正 ImageGlide 圖片快取鍵:本機檔案以 lastModified() 為簽章(檔案未變則命中快取、避免滑動每格重抓;圖片更新時自動失效重載),URL 載入與例外路徑移除 currentTimeMillis() 簽章,修掉永遠顯示 loading 的問題。
4. build.gradle 版號 verPatch 由 6 升至 9(對應 21_02_9_R)。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-17 19:36:27 +08:00 |
|
sky121113
|
16420ae5a3
|
[FEAT] 一鍵補貨依貨道型式分流履帶/彈簧補貨上限
1. StarCloudAPI.saveProducts() 解析 B012 新欄位 spring_limit,設入 ProductStructure 並另存持久化 blob(履帶上限沿用 t060v11=track_limit,不動 products 表 schema 避免升 DB 版本洗掉貨道綁定)。
2. MyApp 新增 productSpringLimitBlob 之 get/set/saveProductSpringLimit 與離線重啟載入,供從 DB 重載商品(springLimit=-1)時 fallback。
3. ProductStructure 新增 springLimit 欄位與 getTrackLimit()/getSpringLimit();springLimit 缺時向 MyApp blob 取,再缺則退回履帶上限,維持舊行為不會把數量補成 0。
4. HardwareSetStructure 新增 isSpringSlot(slotNo),依 10 槽分組對齊後台 SPRING_SLOT_FLAGS,超出 1–60 視為履帶。
5. VmcSlotListActivity 一鍵補貨改依貨道型式取上限:彈簧用 getSpringLimit()、履帶用 getTrackLimit(),並於 log 標註(彈簧)/(履帶)。
6. build.gradle verPatch 5→6。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
2026-06-17 13:22:27 +08:00 |
|
sky121113
|
258aa2f87b
|
[FIX] 修復返回首頁時廣告播放器 NPE 導致廣告消失
1. HomeActivity.startOnSwitchFragment() 的 500ms 延遲重播工作,於執行時補上 videoEoxPlayer == null 判斷。
2. 修正閒置 5 分鐘自動返回首頁時,stopOnSwitchFragment() 在延遲內先清空 static 播放器,使延遲工作呼叫 playMediaByFlag 踩到 null 而拋出 NPE、廣告區從此空白不再恢復的競態問題。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
2026-06-17 13:22:11 +08:00 |
|
sky121113
|
84c7ac8933
|
[REFACTOR] 取貨口閘門由進場改為付款前檢查,並修正發版腳本與語系下發
1. 取貨口閘門時機調整(basic 模式):移除「進入銷售頁」的總閘門,改在「準備付款時」於 BuyDialog 檢查。
- VmcFragment:移除 maybeRunPickupPortEntryGate 與 entryGateChecked,startOnSwitchFragment 還原為僅更新清單。
- RecyclerVmcBuyListAdpter:移除 checkPickupPortOnEntry 與 DevEntryGateByVMC 整段(進場閘門)。
- BuyDialog:新增 checkPickupPortBeforePay 與 DevCheckPickupByVMC,取貨口有東西(0x05)或門沒關(0x06/0x09)時提示,
使用者確認後以 Option.FORCE_CLOSE 關閉付款頁回銷售頁;機器無回應(3000ms 超時)視為正常放行。
2. StarCloudAPI 語系下發改為後台優先:每次下發機台預設語系即立即套用,覆蓋使用者先前手動選擇
(設定下發頻率低且皆在無人時段,不會打斷操作)。
3. dialog_buy.xml:選擇支付方式頁的 Line Pay 按鈕文字由「掃碼支付」改為「Line Pay 支付」。
4. app/build.gradle:verPatch 4 → 5(S9XYU 正式發版,versionCode 210205 / versionName 21_02_5_R)。
5. release-apk workflow:修正終止 Gradle Daemon 段落的腳本自殺 bug,比對字串改為拆字串拼接並以 grep -vx "$$"
排除自身 PID,避免背景任務中 pgrep -f 命中腳本本身導致 exit 144。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-17 08:43:09 +08:00 |
|
sky121113
|
f905380597
|
[FEAT] 取貨口入口閘門放寬至整個 basic 模式並調整對話框文字
1. VmcFragment 取貨口「進銷售頁總閘門」條件由 (isBasic && cartOn) 放寬為僅判斷 isBasic:basic 模式不論購物車開關,進銷售頁都先檢查取貨口,避免「購物車關閉」時點商品完全無上游取貨口檢查。
2. 員工卡(employee_card)流程仍於點擊時自檢、pickup_sheet 維持不檢查,皆不重複;同步更新方法註解。
3. dialog_buy.xml 對話框文字「贈品兌換」改為「來店禮」。
4. app/build.gradle verPatch 升至 3(versionName 21_02_3_R / versionCode 210203)。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-16 18:15:59 +08:00 |
|
sky121113
|
42184c7077
|
[FEAT] 購物車模式進入銷售頁時新增取貨口總閘門
1. RecyclerVmcBuyListAdpter 新增獨立的 checkPickupPortOnEntry() 與 DevEntryGateByVMC 讀取器,於進入銷售頁時檢查取貨口狀態(0x05 有東西 / 0x06、0x09 門未關),不影響員工卡點擊用的 checkSlotHaveProduct,維持線上 main 流程逐字等價。
2. 取貨口異常時跳提示(放大字級),使用者確認或 10 秒後自動執行 onBlocked 回待機;機器無回應 3000ms 超時則放行購物(fail-open,與既有行為一致)。
3. VmcFragment.startOnSwitchFragment 觸發 maybeRunPickupPortEntryGate,僅在 shopping_mode==basic 且購物車開啟時啟用,員工卡流程不重複檢查。
4. 以 entryGateChecked 旗標確保每輪購物只檢查一次(切購物車頁再切回不重跳);延遲 2500ms 送出等下位機連線就緒;被擋下時呼叫 FontendActivity.ReSetAPP() 回待機,使三個加購入口(加入購物車/直接購買/快速加購)在源頭一併被擋。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-16 17:31:22 +08:00 |
|
TaiwanStar Developer
|
4afc3a59d4
|
refactor(ui): 優化支付選項對話框之版面配置與應付金額顯示樣式
|
2026-06-16 17:25:12 +08:00 |
|
sky121113
|
309518f3ca
|
[FEAT] 選擇支付方式頁顯示件數與應付金額,並防止來店禮重複掃描
1. dialog_buy.xml:將原本隱藏的金額列改為可見,新增「共 X 件」件數顯示與「應付金額」標題,金額靠右呈現。
2. BuyDialog.java:新增 refreshAmountBar() 統一刷新件數與應付金額,onCreate 與 SET_PRICE 事件皆改走此方法。
3. BuyDialog.java:抽出 getOriginalPrice()(未折扣原價)與 getTotalCount()(總件數,排除免費商品),getTotalPrice() 改用 getOriginalPrice() 並沿用折抵後至少 1 元保護。
4. BuyDialog.java:來店禮折抵改以「實際省下的金額」顯示(NT$XXX (已折抵 NT$YY)),取代原本 mode 2 顯示折扣乘數 0.8 的難懂呈現。
5. BuyDialog.java:防呆——本筆已套用來店禮(freeGiftId 非空)即隱藏來店禮入口按鈕,禁止重複掃描覆蓋/疊加折扣。
6. strings.xml:新增 pay_item_count、pay_payable_amount、pay_discounted_format 字串。
7. app/build.gradle:verPatch 1 → 2。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-16 17:01:45 +08:00 |
|
sky121113
|
c986b69e16
|
[FIX] 修復出貨中途加購倒數疊畫面、結案欄位被洗成 0、對話框誤判待機,並修打包腳本自殺
1. 結案上報穩定化:TransactionFinalizeBuilder 新增 captureOrderInfo() 快照(flowType/總金額/找零/點數),DispatchDialog 進入出貨時(isCmuh→42 覆寫後)擷取;build() 與「通行碼(5)不上報」判斷改用快照(effectiveXxx/getOrderFlowType),避免出貨中途全域 flowInfo 被洗回 0 導致 payment_type/total 落地成 0「未知」或通行碼被誤報。
2. 加購倒數疊畫面:DispatchDialog.onCreate 與 CheckoutAccessCodeDialog.changeDispatch 進入出貨前統一補送 STOP_COUNTDOWN,關閉 FontendActivity 的 40 秒加購倒數,避免出貨/取貨倒數中途到期觸發 BUY_DIALOG_OPEN、支付畫面疊在出貨畫面上跳出(通行碼、TapPay 等成功路徑原本未送)。
3. 移除加購功能殘留:BuyDialog 刪除 buttonAddProduct 監聽與 gotoAddProduct(),dialog_buy.xml 移除加購按鈕。
4. 待機誤判修復:FontendActivity.onUserInteraction 一併 resetIdleTimer(對話框觸控不會觸發 dispatchTouchEvent),idleRunnable 以全域最後互動時間二次確認,剩餘時間不足才真正踢回待機,避免操作付款/詳情等對話框時被誤判閒置。
5. 打包腳本修復:compiler-apk.md 的 daemon-kill 段把 pgrep/pkill 比對字串拆開拼接並排除自身 PID,修正背景任務情境下腳本命令列含完整 GradleDaemon class 字串導致 pgrep 比對到自己、pkill 自殺、編譯 exit 144 未啟動的問題。
6. 升版號:build.gradle verMinor=2、verPatch=1(S9XYU=21_02_1_R/210201)。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-16 16:32:13 +08:00 |
|
sky121113
|
9a4f68455d
|
[FIX] 修復發票統編「下一步」失效與待機死結,並調整銷售平台資訊欄
1. 修復發票統編對話框「下一步」按鈕未綁定點擊事件,導致統編→電話兩步驟流程卡死、統編永遠送不到後台;新增 changeNextStep() 驗證統編長度並切換至電話輸入步驟。
2. 修復購物車殘留造成「永遠忙碌→永不待機→永不清車」死結:忙碌判定移除「購物車非空」條件,進行中狀態改由對話框開啟(isShowDialog)與感應支付(isNfcPaymentActive)涵蓋。
3. 銷售平台移除上、下方灰色資訊欄(linearLayout5、bottom_bar),改於 applySaleOverlayVisibility 一律隱藏。
4. 機台資訊列新增時間顯示(置於網路前),並以獨立的 ClockTickScheduler 每秒刷新,與 10 秒上報重活迴圈分離,避免將上報/重啟判斷拉到每秒。
5. 版號遞增 verPatch 97→98。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-16 15:26:07 +08:00 |
|
TaiwanStar Developer
|
dd87f1ca6e
|
Merge remote-tracking branch 'origin/feat/general-cart-and-payment' into ui-design
|
2026-06-16 13:52:36 +08:00 |
|
TaiwanStar Developer
|
eae0342ab8
|
refactor(ui): 優化商品詳情對話框與列表樣式,並抽離共用文字尺寸配置
|
2026-06-16 13:51:57 +08:00 |
|
sky121113
|
c7bc554eca
|
[FIX] 修復掃碼支付(玉山)結案前購物車被清空導致「無商品紀錄」
1. 根因:order.items 在結案 build() 當下才即時讀 live buyList,掃碼支付(玉山)流程較慢(掃碼+玉山API約20s),結案前 buyList 會被取消/倒數路徑清空,造成 order.items 變空陣列(無商品紀錄),但出貨其實成功(dispense 有商品)。
2. TransactionFinalizeBuilder 新增 itemsSnapshot 商品明細快照欄位與 captureItems() 方法;buyList 為空時不覆寫既有快照。
3. 抽出共用 buildItemRecords() helper,captureItems() 與 build() fallback 共用。
4. build()/buildOrderPayload() 改為優先採用快照,無快照時才 fallback 讀 live buyList。
5. DispatchDialog onCreate 建立 finalizeBuilder 後立即 captureItems(),此時 buyList 必完整。
6. 升版 verPatch 95 → 96 (S9XYU versionName 21_01_96_R / versionCode 210196)。
正常情況快照==live,逐字等價;僅在 buyList 被清空的 bug 情境修正。純 App 端,不影響後台與線上 main。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-16 13:13:46 +08:00 |
|
TaiwanStar Developer
|
647e72aa9b
|
refactor(ui): 優化支付選項對話框樣式與倒數計時文字
|
2026-06-16 11:30:51 +08:00 |
|
sky121113
|
89c7d04f7a
|
[FIX] 修復遠端更新設定誤刪廣告,並完善機台資訊列顯示
1. [FIX] persistCurrentSettings() 原以 deleteAll() 清空整張 SettingsDao,
連坐刪除廣告(VideoEoxPlayer)等持久資料;改為僅 deleteWhere 逐筆刪除
接下來要重寫的 4 個設定 key(Machine/Esunpay/GreenInvoice/Greenpaysetting)。
修正「遠端更新設定→重啟 App 後廣告消失,須再更新廣告才出現」問題。
2. [FEAT] 機台資訊列左側改顯示「序號 + 版本號(Ver versionName)」。
3. [FEAT] 機台資訊列網路訊號改為動態:依 WiFi RSSI / 行動網路 dBm 切換訊號格數
icon 與文字(無網路/WiFi/行動/有線),並於 SET_NETWORK 與輪詢時即時更新。
4. [REFACTOR] 進站後門觸控由舊 textNetwork 遷移至機台資訊列的「序號+版本號」元素
(舊系統列已隱藏不再接收觸控)。
5. [STYLE] activity_fontend 機台資訊名稱樣式調整(灰色/14sp/透明度 0.7)。
6. 版號 verPatch 93 → 94。
|
2026-06-16 11:09:45 +08:00 |
|
TaiwanStar Developer
|
f700881788
|
Merge remote-tracking branch 'origin/feat/general-cart-and-payment' into ui-design
|
2026-06-16 09:53:26 +08:00 |
|
TaiwanStar Developer
|
7ec2d3916a
|
feat(ui): 實作首頁機台資訊列,包含網路、溫度及多國語言切換功能
|
2026-06-16 09:51:47 +08:00 |
|
sky121113
|
6caaf0890e
|
[FEAT] 交易生命週期上報(pending/failed)與發布 v93
1. app/build.gradle:verPatch 91 → 93(高於機台已 OTA 的 v92,確保修正上得了機台)。
2. structure/ReportFlowInfoStructure.java:新增 mqttFlowId 欄位,作為一次交易的 MQTT 流水號,pending → completed/failed 全程共用,與取貨碼/通行碼用的 reportFlowId 分離。
3. structure/mqtt/TransactionFinalizePayload.java:OrderPayload 新增 status 欄位(pending/completed/failed/abandoned),未帶時後台預設 completed,確保線上 main 機台行為不變。
4. tools/TransactionFinalizeBuilder.java:改用 mqttFlowId(無則生成並回存)、新增可變 status/payment_status 與失敗代碼;新增 publishPending()/publishFailed() 靜態上報;以 shopping_mode == "basic" 判斷是否上報(晟崴 employee_card/中國醫 pickup_sheet 無實際付款不送);pending/failed 不開立發票。
5. ui/dialog/BuyDialog.java:changeCheckout 進入付款時為實際付款方式(1/2/3/4/9/30/70)生成新 mqttFlowId 並上報 pending(進付款一律留底),先清除上一筆避免 flow_id 撞單。
6. ui/dialog/CheckoutNfcCardDialog、CheckoutNfcRechargeDialog、CheckoutNfcPhoneDialog:刷卡機回非 0000 或空電文的失敗分支補上 publishFailed(代碼),救回原本默默消失的失敗單。
7. ui/dialog/CheckoutEsunPayDialog、CheckoutTapPayDialog、CheckoutLinePayDialog:掃碼/官方支付 TRANSACTION_FAILED 分支補上 publishFailed。
過渡期保護:晟崴/中國醫 跑 main 分支、無實際付款,且後台四鐵律(無 status 預設 completed、終態冪等、pending 才轉移、abandoned 只掃 pending)保證其後台資料逐字不變。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
2026-06-16 08:54:42 +08:00 |
|
sky121113
|
9bfb429392
|
[FIX] 修復刷卡機交易成功卻不繼續出貨流程
1. 修正 DevNFCPayController.execute():刷卡機(NFC/悠遊卡/手機/信用卡)回傳的 404 byte 電文本身已含 responseCode(成功為 0000),直接以 devNFCPay.read() 解析該段並送出 RESPONSE。
2. 移除先前誤加的「再以 readListen 等待第二段電文」邏輯:刷卡機僅送一段,等不到第二段導致倒數逾時、RESPONSE 從未送達對話框、changeDispatch() 無法觸發,造成「刷卡機顯示成功卻不出貨」。
3. 保留 isShowDialog / isShuttingDown 生命週期防護;此 controller 為所有感應付款共用,一次修復全部感應類付款。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
2026-06-16 08:54:19 +08:00 |
|
TaiwanStar Developer
|
317dec1084
|
feat(ui): 優化取貨碼相關對話框與列表之 UI 排版
|
2026-06-15 16:43:58 +08:00 |
|
TaiwanStar Developer
|
be3c25bbf5
|
Merge remote-tracking branch 'origin/feat/general-cart-and-payment' into ui-design
|
2026-06-15 16:24:58 +08:00 |
|
sky121113
|
ff65559b4c
|
[FEAT] 電子發票改由後台開立:機台只隨 finalize 上報發票輸入
1. TransactionFinalizePayload 新增 InvoicePayload 物件(status/amount/carrier_id/business_tax_id/love_code 等),讓 finalize 一併帶上發票開立輸入。
2. TransactionFinalizeBuilder:有發票需求(invoiceInfo 非空)時,從 InvoiceData 組發票輸入並固定 status=pending 帶進 finalize;機台不再判定開立結果。
3. DispatchDialog:移除機台直連綠界開票,改為進出貨流程僅上報;發票由後台收到 finalize 後建 pending 並去綠界開立(避免機台網路不確定性與等待)。
4. ReportInvoiceInfoStructure:保留 relateNumber 欄位(冪等鍵相關)。
5. 開票邏輯不放在即將淘汰的 HttpAPI(先前暫放 StarCloudAPI 的機台開票方法亦已移除)。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-15 16:18:11 +08:00 |
|
TaiwanStar Developer
|
092c0e9a16
|
feat(ui): 調整系統設定頁面排版與玉山支付模組設定
- 將「購物方式」資訊移至 Header 區域並移除身份說明文字
- 將機台貨道顯示方式改為 TableLayout 並設為唯讀狀態,隱藏儲存按鈕
- 為大卡片容器增加 app:cardUseCompatPadding=true 並取消父層剪裁,修復卡片陰影遭裁切問題
- 修改玉山支付模組,將台灣Pay子標籤改為「玉山支付模組」,並徹底移除街口支付、LinePay、全支付、PiPay 等子項目及其連動邏輯
- 統一設定項目文字顏色,並新增相關支付圖示資源
|
2026-06-15 16:07:05 +08:00 |
|
sky121113
|
7875db4c7d
|
[FIX] 升版 v91(OTA 版號遞增,內容同 v90 支付 MQTT finalize 修正)
1. build.gradle verPatch 90 → 91,供實體機台 OTA 升級。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-15 14:03:17 +08:00 |
|
TaiwanStar Developer
|
b32f76c753
|
style: 調整結帳對話框交易金額冒號與按鈕顏色
- 將Line Pay、NFC卡片、NFC手機、NFC加值對話框中的交易金額冒號改為全形
- 調整NFC卡片對話框取消按鈕文字色為onWarning,修改支付方式背景色為gray
|
2026-06-15 13:57:41 +08:00 |
|
sky121113
|
3fd34becb6
|
[FIX] 支付成功改走 MQTT finalize、修正卡在倒數不出貨;升版 v90
真因:各支付 Dialog 成功後呼叫已停用的 B600(reportFlowInfo),再靠 B600 的 HTTP 回應回呼 REPORT_FLOW 才進 DispatchDialog;B600 已失敗 → 永遠不出貨,卡到倒數 COUNTDOWN_CANCEL(症狀:刷卡機顯示成功但流程不繼續)。
1. CheckoutNfcCardDialog / CheckoutNfcRechargeDialog:支付成功(0000)不再呼叫 B600,直接 changeDispatch() 進 DispatchDialog,由 MQTT publishTransactionFinalize 統一上報(payload 已含 invoice_info,B600/B650 皆不需要)。
2. CheckoutNfcPhoneDialog:同上,且進 dispatch 前覆寫 payment_type=10(手機支付);刷卡機 NCCC 電文無法區分手機錢包/實體卡,依使用者所選按鈕分類。
3. CheckoutEsunPayDialog / CheckoutLinePayDialog / CheckoutTapPayDialog:交易成功直接 changeDispatch;交易失敗改為提示「交易失敗」並返回購買頁(changeBuy),不再卡住或誤出貨。
4. LinePay 維持 payment_type=70(官方直連),後台另補定義;TapPay 子項 30~34 沿用。
5. 舊 CheckoutCashDialog/CashPayDialog 為 legacy,basic shopping_mode 不使用(現金走 CashPayDialogGeneral),本次未動。
6. build.gradle 版號 verPatch 89 → 90。
注意:後台 star-cloud 需同步新增 payment_type 10(手機支付)/70(LINE Pay 官方) 與翻譯(另一 repo,另行提交)。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-15 13:56:56 +08:00 |
|
sky121113
|
a99f7b0572
|
[FEAT] 雲端日誌分級(LogLevel)與除錯雜訊清理
1. MyApp 新增 logLevel 欄位(預設 INFO),由雲端 B014 LogLevel 下發並回送,現場除錯硬體可設 DEBUG。
2. Logs.debug()/ignore() 改為僅在 LogLevel=DEBUG 時寫入 debug.txt;logcat 一律照印不受影響。
3. Logs 新增單行寫檔上限 MAX_LINE(1000),超長 JSON/payload dump 截斷並保留原始長度,避免淹沒 debug.txt。
4. 將 HttpAPI/HttpTapPay/DevXinYuan/DevXinYuanController/DevNFCPayController/BuyDialog/DispatchDialog 大量 "AAAA…/bbbb…" 開發雜訊 logs.info 改為 logs.debug 並補上具體訊息。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-15 13:56:32 +08:00 |
|
sky121113
|
7cb9039a50
|
[FEAT] 商品詳情頁接 B012 t060v03_i18n 規格多語(純文字含換行原樣呈現)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
2026-06-15 11:50:00 +08:00 |
|
sky121113
|
d7bef7b827
|
[FIX] 修正直接購買(購物車版)未跳購物車品項頁的真因;升版 v89
1. 真因:DialogProductDetail 取 SaleFlowHandler 時用 onCreate 的 getContext(),那是 AlertDialog 包裝過的 ContextThemeWrapper,instanceof FontendActivity 為 false,導致 openCartList 靜默 return(一般版因 requestBuy 有 new BuyDialog 後路才照常開支付頁,故僅購物車版受影響)。
2. 修法:建構子保存原始傳入的 Context(真正的 FontendActivity)為 hostContext,openCartList/requestBuy 改用 hostContext 做 instanceof 與取 SaleFlowHandler。
3. 升版號 verPatch 88 → 89。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-15 11:24:28 +08:00 |
|
sky121113
|
1c9022cc5e
|
[FIX] 修正商品格線右緣觸控失效與直接購買未跳購物車頁;升版 v88
1. 修正 fragment_vmc.xml 商品格線 recyclerBuy 在 ConstraintLayout 缺水平約束(原 match_parent 僅綁上下)導致右側佈局/觸控異常:改為 0dp + start/end 綁 parent 確保全寬與右緣可點。
2. RecyclerVmcBuyListAdpter 讓整張商品卡片皆可點開詳情頁(原僅圖片可點),避免點到名稱/價格區無反應。
3. 商品詳情頁「直接購買」(購物車版)改為先切換至購物車品項頁、再關閉詳情頁,避免關閉對話框與 fragment 切換時序互相干擾導致未跳頁。
4. 升版號 verPatch 87 → 88。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-15 11:13:36 +08:00 |
|
sky121113
|
df96f33d5f
|
[FEAT] 商品詳情頁直接購買分流與數量帶入;升版 v87
1. 詳情頁「直接購買」依購物車開關分流:購物車開啟時以詳情頁選定數量加入購物車後前往購物車列表頁(不直接結帳);購物車關閉(一般版)維持單品直購彈 BuyDialog 選付款。
2. 修正數量未帶入問題:加入購物車與直接購買統一走 addSelectedQuantityToCart(),依詳情頁數量逐件加入,點 N 件購物車即為 N 件。
3. 升版號 verPatch 86 → 87。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-15 10:44:19 +08:00 |
|
sky121113
|
bd23c31ba1
|
[FEAT] 商品詳情頁接線:點商品開詳情、依購物車開關呈現按鈕
1. 新增 DialogProductDetail:把原本只有佈局的商品詳情頁接活,顯示商品圖、多語名稱、貨道、庫存、數量與金額小計。
2. 依雲端 DevSet.ShoppingCar 呈現按鈕:購物車開啟顯示「數量調整+加入購物車+直接購買」;購物車關閉(一般版)隱藏「數量調整+加入購物車」,只留「直接購買」且數量固定 1。
3. 加入購物車以選定數量逐件加入(沿用 CartViewModel 庫存/8 件上限防呆);直接購買清空 buyList 放入本商品後走既有 BuyDialog 選付款。
4. BasicSaleFlow.handleProductSelected 改為點商品一律先彈出詳情頁。
5. RecyclerVmcBuyListAdpter 商品卡右下角「+」(buttonQuickAdd) 接線:僅購物車開啟時顯示並快速加購一件,關閉時隱藏。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-15 10:16:29 +08:00 |
|
sky121113
|
0900dc20f9
|
Merge branch 'feat/general-cart-and-payment' into ui-design
|
2026-06-15 09:47:41 +08:00 |
|
sky121113
|
35af9fec8f
|
[FEAT] 升版 v85 並打包 S9XYU(多語系 11 語+後台 API 對接+ui-design 合併)
1. verPatch 84 → 85,對應自 v84 以來累積的多語系擴充(法德西)、後台 B014 LangSet/B012 i18n 對接、ui-design UI 改版合併與 10 語系字串對齊等變更,供 OTA 版號對齊。
2. 產出 S9XYU Debug APK:versionName 21_01_85_R、versionCode 210185。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-15 09:36:57 +08:00 |
|
TaiwanStar Developer
|
eb0b9c8271
|
feat(ui): 遷移商品詳情對話框佈局並修復編譯資源錯誤
- 加入 dialog_product_detail.xml
- 移除本專案未支援的 RoundLinearLayout 與 RoundTextView 等自訂元件與屬性
- 替換缺漏的圖示、文字與顏色資源以維持正常編譯
|
2026-06-15 09:35:53 +08:00 |
|
sky121113
|
8e02e7adeb
|
[FEAT] 補齊 10 語系合併後缺漏字串,全語系對齊主檔
1. ui-design 合併後主檔 values/strings.xml 新增的 15 個顧客可見字串(員工卡支付、下載/上傳同步狀態、購物車數量上限、商品出貨成功、櫃門取貨、確認取貨倒數、機器巡檢等),補譯進全部語系。
2. 英/簡中/韓/越/泰/印尼/法/德/西 各補 15 條;日文補 12 條(原已有 back/syncing/sync_completed)。
3. 補齊後 10 個語系皆與主檔 0 缺漏,XML 全部 well-formed,這批新 UI 字串不再 fallback 中文。
註:機器翻譯品質,customer-facing 重點詞(員工卡、載具/統編等)建議母語者校對。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-15 09:30:48 +08:00 |
|
sky121113
|
a80bb4dd85
|
Merge remote-tracking branch 'origin/ui-design' into feat/general-cart-and-payment
# Conflicts:
# app/src/main/java/com/unibuy/v2/adapter/CartOperationAdapter.kt
|
2026-06-15 09:21:49 +08:00 |
|
sky121113
|
92553d96d2
|
[FEAT] 多語系擴充法德西並對接後台 B014/B012 多語 API
1. 新增法文(values-fr)、德文(values-de)、西班牙文(values-es)三語系資源,各 286 條以 en 為範本,App 支援語系達 11 種;LanguageHelper 的 SUPPORTED_LANGUAGES、getDisplayName、canonicalize 一併補上 fr/de/es。
2. 語言選單改由後台決定:StarCloudAPI.saveSettings 解析 B014 新增的 LangSet(Languages 清單 + Default),FontendActivity 選單改讀 LanguageHelper.getMachineLanguages(),只顯示該機台後台啟用的語系;未取得 B014 時退回全部支援語系。首次(使用者未手動選過)自動套用後台預設語系。
3. 商品名稱改讀 B012 新增的 t060v01_i18n 多語 map:StarCloudAPI.saveProducts 解析並帶入每個商品;ProductStructure.getLocalizedName fallback 鏈改為 i18n map 對應語系 → map 的 zh_TW → 舊 _en/_jp → 中文主值,韓/泰/越等語商品名可正確顯示。
4. 語系代碼雙向轉換:後台底線格式 zh_TW 與 App 標準 zh-TW 互轉(LanguageHelper.toBackendLocale 與 canonicalize)。
5. 零 DB 風險持久化:機台語系(machineLanguages/defaultLanguage)與商品多語 blob 均存於既有 MemoDao(比照 shopping_mode),不動 products 表 schema、不升 DB 版本,避免破壞性 onUpgrade 清除現場機台綁定資料。
註:商品規格 spec 後台已送 t060v03_i18n 但 App 尚無顯示 UI 故未接;舊 HttpAPI 解析路徑未加 i18n,會 graceful fallback 至 _en/_jp。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-15 09:15:53 +08:00 |
|