From f15898662dab58530ca77189d62395d8bb68a4e2 Mon Sep 17 00:00:00 2001 From: Fai Luk Date: Sun, 22 Mar 2026 02:37:55 +0800 Subject: [PATCH] fixing the error that if item deleted --- .../fpsms/modules/master/service/ItemsService.kt | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/ffii/fpsms/modules/master/service/ItemsService.kt b/src/main/java/com/ffii/fpsms/modules/master/service/ItemsService.kt index f59903e..ef6ca46 100644 --- a/src/main/java/com/ffii/fpsms/modules/master/service/ItemsService.kt +++ b/src/main/java/com/ffii/fpsms/modules/master/service/ItemsService.kt @@ -450,10 +450,20 @@ open class ItemsService( val avg = row["avgUp"] as? BigDecimal ?: return@mapNotNull null id to avg.toPlainString() }.toMap() + // Use JDBC UPDATE instead of load+save: avoids ObjectOptimisticLockingFailureException when the same + // Items row was already updated earlier in this transaction (e.g. M18 PO sync) or concurrently. idList.forEach { itemId -> - val item = itemsRepository.findById(itemId).orElse(null) ?: return@forEach - item.averageUnitPrice = avgByItem[itemId] - itemsRepository.saveAndFlush(item) + val avg = avgByItem[itemId] + jdbcDao.executeUpdate( + """ + UPDATE items + SET AverageUnitPrice = :avg, + modified = NOW(), + version = version + 1 + WHERE id = :id AND deleted = 0 + """.trimIndent(), + mapOf("avg" to avg, "id" to itemId), + ) } }