From 7a215e51f9f4066f2024d8476e5b5db2c06358a1 Mon Sep 17 00:00:00 2001
From: zhou zhou <3272660260@qq.com>
Date: 星期二, 07 四月 2026 13:51:01 +0800
Subject: [PATCH] #lua锁示例

---
 rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/WmsRedisLuaService.java |   18 ++++++++++++++----
 1 files changed, 14 insertions(+), 4 deletions(-)

diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/WmsRedisLuaService.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/WmsRedisLuaService.java
index 9b01001..01fed7a 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/WmsRedisLuaService.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/WmsRedisLuaService.java
@@ -10,6 +10,7 @@
 import java.math.BigDecimal;
 import java.time.Duration;
 import java.util.Arrays;
+import java.util.List;
 
 @Slf4j
 @Service
@@ -17,16 +18,25 @@
 public class WmsRedisLuaService {
 
     private static final DefaultRedisScript<Long> LOCATION_CLAIM_SCRIPT = createScript("wms-lua/location-claim.lua");
+    private static final DefaultRedisScript<Long> STATION_CLAIM_SCRIPT = createScript("wms-lua/station-claim.lua");
     private static final DefaultRedisScript<Long> INVENTORY_RESERVE_SCRIPT = createScript("wms-lua/inventory-reserve.lua");
 
     private final StringRedisTemplate redisTemplate;
 
-    public boolean claimLocation(String occupyKey, String taskKey, String mode, String occupyValue, String taskValue, Duration ttl) {
+    public boolean claimLocation(String occupyKey, String occupyValue, Duration ttl) {
         Long result = redisTemplate.execute(
                 LOCATION_CLAIM_SCRIPT,
-                Arrays.asList(occupyKey, taskKey),
-                mode,
+                List.of(occupyKey),
                 occupyValue,
+                String.valueOf(ttl.toMillis())
+        );
+        return result != null && result > 0;
+    }
+
+    public boolean claimStation(String stationKey, String taskValue, Duration ttl) {
+        Long result = redisTemplate.execute(
+                STATION_CLAIM_SCRIPT,
+                List.of(stationKey),
                 taskValue,
                 String.valueOf(ttl.toMillis())
         );
@@ -36,7 +46,7 @@
     public boolean reserveInventory(String inventoryKey, String orderKey, BigDecimal initialAvailable, BigDecimal reserveQuantity, Duration ttl) {
         Long result = redisTemplate.execute(
                 INVENTORY_RESERVE_SCRIPT,
-                Arrays.asList(inventoryKey, orderKey),
+                List.of(inventoryKey, orderKey),
                 initialAvailable.toPlainString(),
                 reserveQuantity.toPlainString(),
                 String.valueOf(ttl.toMillis())

--
Gitblit v1.9.1