From 04c4a9bdc5c4bccd05fb0092bdb4552af2d09bb1 Mon Sep 17 00:00:00 2001
From: vincentlu <t1341870251@gmail.com>
Date: 星期一, 29 十二月 2025 08:36:51 +0800
Subject: [PATCH] #

---
 zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/StaReserveServiceImpl.java |   53 +++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 53 insertions(+), 0 deletions(-)

diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/StaReserveServiceImpl.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/StaReserveServiceImpl.java
index b30427c..a00deae 100644
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/StaReserveServiceImpl.java
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/StaReserveServiceImpl.java
@@ -98,6 +98,59 @@
         return reserve;
     }
 
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void confirmStaReserve(Sta sta, Task task, Integer qty, StaReserveType type) {
+        qty = Optional.ofNullable(qty).orElse(1);
+
+        // update reserve state to be confirmed
+        if (0 == this.baseMapper.updateState(task.getId(), sta.getId(), type.toString(), StaReserveStateType.CONFIRMED.toString())) {
+            log.error("failed to confirm sta reserve");
+            return;
+        }
+
+        int cntOfDealWithReserve = 0;
+        switch (type) {
+            case IN:
+                cntOfDealWithReserve = staMapper.confirmReserveIn(sta.getId(), qty);
+                break;
+            case OUT:
+                cntOfDealWithReserve = staMapper.confirmReserveOut(sta.getId(), qty);
+                break;
+            default:
+                break;
+        }
+        if (cntOfDealWithReserve == 0) {
+            throw new BusinessException("Sta[" + sta.getStaNo() + "] confirm failed, type=" + type.toString());
+        }
+    }
+
+    @Override
+    public void cancelStaReserve(Sta sta, Task task, Integer qty, StaReserveType type) {
+        qty = Optional.ofNullable(qty).orElse(1);
+
+        // update reserve state to be canceled
+        if (0 == this.baseMapper.updateState(task.getId(), sta.getId(), type.toString(), StaReserveStateType.CANCELLED.toString())) {
+            log.error("failed to cancel sta reserve");
+            return;
+        }
+
+        int cntOfDealWithReserve = 0;
+        switch (type) {
+            case IN:
+                cntOfDealWithReserve = staMapper.releaseReserveIn(sta.getId(), qty);
+                break;
+            case OUT:
+                cntOfDealWithReserve = staMapper.releaseReserveOut(sta.getId(), qty);
+                break;
+            default:
+                break;
+        }
+        if (cntOfDealWithReserve == 0) {
+            throw new BusinessException("Sta[" + sta.getStaNo() + "] cancel failed, type=" + type.toString());
+        }
+    }
+
 
     private String generateReserveUniqKey(Long staId, Long taskId, StaReserveType type) {
         return "STA:" + staId + "-TASK:" + taskId + "-T:" + type.toString();

--
Gitblit v1.9.1