[FIX] DispatchDialog 關閉未結案補送 MQTT Finalize,修正多品項部分出貨不上報
1. 問題:出貨流程若走 dialogCancel() 收場(倒數結束 / dispatchIndex 越界 / 中途中止),整筆交易完全不上報。批次 MQTT Finalize 僅在「成功完成」與 「ERROR_PROCESS_GOODS 失敗」兩條路送出,dialogCancel 這條共通關閉路徑漏掉。 此缺口於 main 既存,因通用版原無多品項出貨、Cmuh 失敗都走 ERROR_PROCESS_GOODS 而未被觸發;多品項 basic 出貨為首次暴露。 2. 修正:在 dialogCancel() 開頭、buyList.clear() 之前加安全網—— 若出貨已開始(dispatchList 非空)且尚未結案(!isFinalizing), 補呼叫既有 finalizeFailedDispatch() 送出一筆含全部明細的部分/未完成結案。 3. 守門:以 isFinalizing 擋住正常成功(:946)/錯誤(:1062)路徑,零重複上報; 通行碼 flowType=5 仍由 publishFinalizeUnlessPassCode 自動略過, 對晟崴/中國醫現行行為零影響。 雙硬體編譯綠。實機驗證待硬體(多品項第2件失敗→後台收到一筆部分出貨)。 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
parent
1d4c4ab071
commit
42947dce0c
@ -443,6 +443,15 @@ public class DispatchDialog extends DialogAbstract {
|
||||
}
|
||||
|
||||
public void dialogCancel() {
|
||||
// 安全網:出貨流程已開始(dispatchList 非空)但尚未結案(既非成功 finalize、也非錯誤 finalize)時,
|
||||
// 在關閉前補送一次 MQTT Finalize(部分出貨/未完成),避免走「倒數結束 / dispatchIndex 越界 / 中止」
|
||||
// 等非錯誤關閉路徑時整筆交易完全不上報。isFinalizing 擋住正常成功/錯誤路徑,不會重複上報。
|
||||
// 注意:須在下方 buyList.clear() 之前執行,因 finalizeBuilder.build() 會讀 buyList 組出商品明細。
|
||||
if (!isFinalizing && finalizeBuilder != null && dispatchList != null && !dispatchList.isEmpty()) {
|
||||
getLogs().info("dialogCancel:偵測到尚未結案的出貨流程,補送 MQTT Finalize(部分/未完成)");
|
||||
finalizeFailedDispatch("出貨流程關閉前補送結案");
|
||||
}
|
||||
|
||||
closeDialogCountdown.shutdown();
|
||||
int buyListSize = MyApp.getInstance().getBuyList().size();
|
||||
MyApp.getInstance().getBuyList().clear();
|
||||
|
||||
Loading…
Reference in New Issue
Block a user