[REFACTOR] 優化 B009 庫存同步比對邏輯

1. 優化 MachineService@syncSlots,加入庫存與商品 ID 的實質變動檢查。
2. 解決在庫存與商品皆無變動時,仍會執行資料庫更新並產生冗餘流水帳的問題。
3. 強化商品變更判斷,確保更換商品時能正確記錄流水帳與對應備註。
This commit is contained in:
sky121113 2026-05-07 14:12:42 +08:00
parent 9c6f5923f3
commit e735e5a8c5

View File

@ -226,20 +226,27 @@ class MachineService
];
if ($existingSlot) {
// B009 回報:若數值有變化,記錄 adjustment
$oldStock = (int) $existingSlot->stock;
$existingSlot->update($updateData);
$oldProductId = $existingSlot->product_id;
// 檢查是否有實質變動 (Check for actual changes)
$isStockChanged = ($oldStock !== $newStock);
$isProductChanged = ($oldProductId != $actualProductId); // 這裡用鬆散比對以處理 null/0 的情況
if ($oldStock !== $newStock) {
$delta = $newStock - $oldStock;
if ($isStockChanged || $isProductChanged) {
$existingSlot->update($updateData);
$existingSlot->refresh();
$delta = $newStock - $oldStock;
$note = $isProductChanged ? "movement.note.product_changed_and_adjusted" : "movement.note.replenishment_correction";
$this->recordStockMovement(
$existingSlot,
$delta,
MachineStockMovement::TYPE_ADJUSTMENT,
null,
"movement.note.replenishment_correction",
['old' => $oldStock, 'new' => $newStock]
$note,
['old' => $oldStock, 'new' => $newStock, 'old_product_id' => $oldProductId, 'new_product_id' => $actualProductId]
);
}
} else {