[REFACTOR] 優化 B009 庫存同步比對邏輯
1. 優化 MachineService@syncSlots,加入庫存與商品 ID 的實質變動檢查。 2. 解決在庫存與商品皆無變動時,仍會執行資料庫更新並產生冗餘流水帳的問題。 3. 強化商品變更判斷,確保更換商品時能正確記錄流水帳與對應備註。
This commit is contained in:
parent
9c6f5923f3
commit
e735e5a8c5
@ -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 {
|
||||
|
||||
Loading…
Reference in New Issue
Block a user