From b0d80cc56a883a6fac242623e778a3ae20c71b79 Mon Sep 17 00:00:00 2001
From: zhou zhou <3272660260@qq.com>
Date: 星期五, 19 十二月 2025 14:59:08 +0800
Subject: [PATCH] #库存预留

---
 src/main/java/com/zy/asrs/task/handler/InventoryReserveExpireHandler.java |   85 ++++++++++++++++++++++++++----------------
 1 files changed, 53 insertions(+), 32 deletions(-)

diff --git a/src/main/java/com/zy/asrs/task/handler/InventoryReserveExpireHandler.java b/src/main/java/com/zy/asrs/task/handler/InventoryReserveExpireHandler.java
index 701d3d0..6fc75c0 100644
--- a/src/main/java/com/zy/asrs/task/handler/InventoryReserveExpireHandler.java
+++ b/src/main/java/com/zy/asrs/task/handler/InventoryReserveExpireHandler.java
@@ -1,13 +1,17 @@
 package com.zy.asrs.task.handler;
 
 import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.core.common.Cools;
 import com.zy.asrs.entity.InventoryReserve;
 import com.zy.asrs.entity.InventoryReserveLog;
+import com.zy.asrs.entity.OrderPakout;
 import com.zy.asrs.service.InventoryReserveLogService;
 import com.zy.asrs.service.InventoryReserveService;
+import com.zy.asrs.service.OrderPakoutService;
 import com.zy.asrs.task.AbstractHandler;
 import com.zy.asrs.task.core.ReturnT;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -18,6 +22,9 @@
 /**
  * 棰勭暀搴撳瓨杩囨湡澶勭悊鍣�
  * 灏嗚繃鏈熺殑棰勭暀搴撳瓨杞Щ鍒版棩蹇楄〃
+ * 杞巻鍙叉潯浠讹細
+ * 1. 杩囨湡鏃堕棿涓嶄负绌轰笖宸茶繃鏈�
+ * 2. 璁㈠崟鍙蜂笉涓虹┖涓旇鍗曠姸鎬佷负浣滀笟涓�(1)鎴栧凡瀹屾垚(2)
  */
 @Slf4j
 @Service
@@ -29,55 +36,69 @@
     @Autowired
     private InventoryReserveLogService inventoryReserveLogService;
 
+    @Autowired
+    private OrderPakoutService orderPakoutService;
+
     @Transactional(rollbackFor = Exception.class)
     public ReturnT<String> start() {
-        // 鏌ヨ杩囨湡鐨勯鐣欏簱瀛橈紙杩囨湡鏃堕棿涓嶄负绌轰笖灏忎簬褰撳墠鏃堕棿锛�
         Date now = new Date();
-        List<InventoryReserve> expiredList = inventoryReserveService.selectList(
-                new EntityWrapper<InventoryReserve>()
-                        .isNotNull("expire_time")
-                        .lt("expire_time", now));
 
-        if (expiredList.isEmpty()) {
+        // 鏌ヨ鎵�鏈夐鐣欏簱瀛樿褰�
+        List<InventoryReserve> allReserves = inventoryReserveService.selectList(new EntityWrapper<>());
+
+        if (allReserves.isEmpty()) {
             return SUCCESS;
         }
 
-        log.info("鍙戠幇 {} 鏉¤繃鏈熺殑棰勭暀搴撳瓨璁板綍", expiredList.size());
-
-        for (InventoryReserve reserve : expiredList) {
+        int processedCount = 0;
+        for (InventoryReserve reserve : allReserves) {
             try {
-                // 杞Щ鍒版棩蹇楄〃
-                InventoryReserveLog logRecord = getInventoryReserveLog(reserve);
+                boolean shouldArchive = false;
+                String archiveReason = null;
 
-                inventoryReserveLogService.insert(logRecord);
+                // 鏉′欢1锛氳繃鏈熸椂闂翠笉涓虹┖涓斿凡杩囨湡
+                if (reserve.getExpireTime() != null && reserve.getExpireTime().before(now)) {
+                    shouldArchive = true;
+                    archiveReason = "宸茶繃鏈�";
+                }
 
-                // 鍒犻櫎鍘熻褰�
-                inventoryReserveService.deleteById(reserve.getId());
+                // 鏉′欢2锛氳鍗曞彿涓嶄负绌轰笖璁㈠崟鐘舵�佷负浣滀笟涓垨宸插畬鎴�
+                if (!shouldArchive && !Cools.isEmpty(reserve.getOrderNo())) {
+                    OrderPakout order = orderPakoutService.selectOne(
+                            new EntityWrapper<OrderPakout>().eq("order_no", reserve.getOrderNo()));
+                    if (null != order) {
+                        if (order.getSettle() != 1) {
+                            shouldArchive = true;
+                            archiveReason =  "璁㈠崟涓嶄负寰呭鐞嗙姸鎬�";
+                        }
+                    }
+                }
 
-                log.info("棰勭暀搴撳瓨杩囨湡澶勭悊瀹屾垚: id={}, matnr={}, batch={}",
-                        reserve.getId(), reserve.getMatnr(), reserve.getBatch());
+                if (shouldArchive) {
+                    // 杞Щ鍒版棩蹇楄〃
+                    InventoryReserveLog logRecord = new InventoryReserveLog();
+                    BeanUtils.copyProperties(reserve, logRecord);
+                    logRecord.setMemo(archiveReason);
+                    inventoryReserveLogService.insert(logRecord);
+
+                    // 鍒犻櫎鍘熻褰�
+                    inventoryReserveService.deleteById(reserve.getId());
+
+                    log.info("棰勭暀搴撳瓨杞巻鍙插畬鎴�: id={}, matnr={}, batch={}, 鍘熷洜={}",
+                            reserve.getId(), reserve.getMatnr(), reserve.getBatch(), archiveReason);
+                    processedCount++;
+                }
 
             } catch (Exception e) {
-                log.error("棰勭暀搴撳瓨杩囨湡澶勭悊澶辫触: id={}, error={}", reserve.getId(), e.getMessage());
+                log.error("棰勭暀搴撳瓨杞巻鍙插け璐�: id={}, error={}", reserve.getId(), e.getMessage());
             }
         }
 
-        return SUCCESS;
-    }
+        if (processedCount > 0) {
+            log.info("鏈鍏卞鐞� {} 鏉¢鐣欏簱瀛樿浆鍘嗗彶璁板綍", processedCount);
+        }
 
-    private static InventoryReserveLog getInventoryReserveLog(InventoryReserve reserve) {
-        InventoryReserveLog logRecord = new InventoryReserveLog();
-        logRecord.setMatnr(reserve.getMatnr());
-        logRecord.setMaktx(reserve.getMaktx());
-        logRecord.setOrderNo(reserve.getOrderNo());
-        logRecord.setBatch(reserve.getBatch());
-        logRecord.setQuantity(reserve.getQuantity());
-        logRecord.setExpireTime(reserve.getExpireTime());
-        logRecord.setDeptId(reserve.getDeptId());
-        logRecord.setCreateTime(reserve.getCreateTime());
-        logRecord.setCreateBy(reserve.getCreateBy());
-        logRecord.setUpdateTime(new Date());
-        return logRecord;
+        return SUCCESS;
     }
 
 }

--
Gitblit v1.9.1