From ec377d3d2c54f51a795427649ae9447b57c062fd Mon Sep 17 00:00:00 2001
From: gongchunyi <deslre0381@gmail.com>
Date: 星期一, 26 一月 2026 13:44:34 +0800
Subject: [PATCH] feat: 库存管理的冻结与解冻物料批次功能

---
 src/main/java/com/ruoyi/procurementrecord/controller/ProcurementRecordController.java    |   20 ++++++++++
 src/main/java/com/ruoyi/procurementrecord/dto/ProcurementPageDtoCopy.java                |    3 +
 src/main/java/com/ruoyi/procurementrecord/service/ProcurementRecordService.java          |    4 ++
 src/main/resources/mapper/procurementrecord/ProcurementRecordMapper.xml                  |   15 +++++--
 src/main/java/com/ruoyi/procurementrecord/dto/ProcurementPageDto.java                    |    4 ++
 src/main/java/com/ruoyi/procurementrecord/service/impl/ProcurementRecordServiceImpl.java |   29 ++++++++++++++
 src/main/java/com/ruoyi/procurementrecord/pojo/ProcurementRecordStorage.java             |    5 ++
 7 files changed, 75 insertions(+), 5 deletions(-)

diff --git a/src/main/java/com/ruoyi/procurementrecord/controller/ProcurementRecordController.java b/src/main/java/com/ruoyi/procurementrecord/controller/ProcurementRecordController.java
index 879b328..8aeb44d 100644
--- a/src/main/java/com/ruoyi/procurementrecord/controller/ProcurementRecordController.java
+++ b/src/main/java/com/ruoyi/procurementrecord/controller/ProcurementRecordController.java
@@ -156,6 +156,26 @@
         return AjaxResult.success(result);
     }
 
+    @PostMapping("frozenQuality")
+    @Log(title = "閲囪喘鍏ュ簱-搴撳瓨绠$悊-鍐荤粨涓嶅悎鏍间骇鍝�", businessType = BusinessType.UPDATE)
+    public AjaxResult frozenQuality(@RequestBody List<Integer> frozenIds) {
+        boolean result = procurementRecordService.frozenQuality(frozenIds);
+        if (result) {
+            return AjaxResult.success();
+        }
+        return AjaxResult.error();
+    }
+
+    @PostMapping("thawQuality")
+    @Log(title = "閲囪喘鍏ュ簱-搴撳瓨绠$悊-瑙e喕涓嶅悎鏍间骇鍝�", businessType = BusinessType.UPDATE)
+    public AjaxResult thawQuality(@RequestBody List<Integer> thawIds) {
+        boolean result = procurementRecordService.thawQuality(thawIds);
+        if (result) {
+            return AjaxResult.success();
+        }
+        return AjaxResult.error();
+    }
+
     @GetMapping("/listPageCopyByProduction")
     @Log(title = "鐢熶骇鍏ュ簱-搴撳瓨绠$悊-鍒嗛〉鏌ヨ", businessType = BusinessType.OTHER)
     public AjaxResult listPageCopyByProduction(Page page, ProcurementPageDto procurementDto) {
diff --git a/src/main/java/com/ruoyi/procurementrecord/dto/ProcurementPageDto.java b/src/main/java/com/ruoyi/procurementrecord/dto/ProcurementPageDto.java
index 1d06eb6..d2b0ffa 100644
--- a/src/main/java/com/ruoyi/procurementrecord/dto/ProcurementPageDto.java
+++ b/src/main/java/com/ruoyi/procurementrecord/dto/ProcurementPageDto.java
@@ -194,4 +194,8 @@
 
     private Long productModelId;
 
+    @ApiModelProperty(value = "鏄惁鍐荤粨(0:鏈喕缁� 1:宸插喕缁�)")
+    @Excel(name = "鏄惁鍐荤粨")
+    private Boolean isFrozen;
+
 }
diff --git a/src/main/java/com/ruoyi/procurementrecord/dto/ProcurementPageDtoCopy.java b/src/main/java/com/ruoyi/procurementrecord/dto/ProcurementPageDtoCopy.java
index 67f9d03..9fe6634 100644
--- a/src/main/java/com/ruoyi/procurementrecord/dto/ProcurementPageDtoCopy.java
+++ b/src/main/java/com/ruoyi/procurementrecord/dto/ProcurementPageDtoCopy.java
@@ -203,4 +203,7 @@
     @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
     private LocalDate endDate;
 
+    @Excel(name = "鏄惁鍐荤粨")
+    private Boolean isFrozen;
+
 }
diff --git a/src/main/java/com/ruoyi/procurementrecord/pojo/ProcurementRecordStorage.java b/src/main/java/com/ruoyi/procurementrecord/pojo/ProcurementRecordStorage.java
index 29e77c4..8639b77 100644
--- a/src/main/java/com/ruoyi/procurementrecord/pojo/ProcurementRecordStorage.java
+++ b/src/main/java/com/ruoyi/procurementrecord/pojo/ProcurementRecordStorage.java
@@ -102,4 +102,9 @@
     private Long productModelId;
 
     private Long qualityInspectId;
+
+    /**
+     * 鏄惁鍐荤粨(0:鏈喕缁� 1:宸插喕缁�)
+     */
+    private Boolean isFrozen;
 }
diff --git a/src/main/java/com/ruoyi/procurementrecord/service/ProcurementRecordService.java b/src/main/java/com/ruoyi/procurementrecord/service/ProcurementRecordService.java
index 6bd187c..1ad48d6 100644
--- a/src/main/java/com/ruoyi/procurementrecord/service/ProcurementRecordService.java
+++ b/src/main/java/com/ruoyi/procurementrecord/service/ProcurementRecordService.java
@@ -63,4 +63,8 @@
     IPage<ProductModel> listPageProductionStock(Page page, ProcurementPageDto procurementDto);
 
     IPage<ProcurementPageDto> listPageByProductProduction(Page page, ProcurementPageDto procurementDto);
+
+    boolean frozenQuality(List<Integer> frozenIds);
+
+    boolean thawQuality(List<Integer> thawIds);
 }
diff --git a/src/main/java/com/ruoyi/procurementrecord/service/impl/ProcurementRecordServiceImpl.java b/src/main/java/com/ruoyi/procurementrecord/service/impl/ProcurementRecordServiceImpl.java
index 19509a3..b66253f 100644
--- a/src/main/java/com/ruoyi/procurementrecord/service/impl/ProcurementRecordServiceImpl.java
+++ b/src/main/java/com/ruoyi/procurementrecord/service/impl/ProcurementRecordServiceImpl.java
@@ -1,6 +1,7 @@
 package com.ruoyi.procurementrecord.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -930,4 +931,32 @@
         return procurementPageDtoIPage;
     }
 
+    @Override
+    public boolean frozenQuality(List<Integer> frozenIds) {
+        if (frozenIds == null || frozenIds.isEmpty()) {
+            return true;
+        }
+
+        LambdaUpdateWrapper<ProcurementRecordStorage> storageLambdaUpdateWrapper = new LambdaUpdateWrapper<ProcurementRecordStorage>()
+                .set(ProcurementRecordStorage::getIsFrozen, true)
+                .in(ProcurementRecordStorage::getId, frozenIds)
+                .eq(ProcurementRecordStorage::getIsFrozen, false);
+
+        return update(storageLambdaUpdateWrapper);
+    }
+
+    @Override
+    public boolean thawQuality(List<Integer> thawIds) {
+        if (thawIds == null || thawIds.isEmpty()) {
+            return true;
+        }
+
+        LambdaUpdateWrapper<ProcurementRecordStorage> storageLambdaUpdateWrapper = new LambdaUpdateWrapper<ProcurementRecordStorage>()
+                .set(ProcurementRecordStorage::getIsFrozen, false)
+                .in(ProcurementRecordStorage::getId, thawIds)
+                .eq(ProcurementRecordStorage::getIsFrozen, true);
+
+        return update(storageLambdaUpdateWrapper);
+    }
+
 }
diff --git a/src/main/resources/mapper/procurementrecord/ProcurementRecordMapper.xml b/src/main/resources/mapper/procurementrecord/ProcurementRecordMapper.xml
index e1d9381..d01b62a 100644
--- a/src/main/resources/mapper/procurementrecord/ProcurementRecordMapper.xml
+++ b/src/main/resources/mapper/procurementrecord/ProcurementRecordMapper.xml
@@ -50,7 +50,8 @@
         t1.create_time,
         t1.update_time,
         t1.create_by,
-        t2.warn_num
+        t2.warn_num,
+        t1.is_frozen
         from  procurement_record_storage t1
                   left join sales_ledger_product t2 on t2.id = t1.sales_ledger_product_id and t2.type = 2
                   left join purchase_ledger t3 on t3.id = t2.sales_ledger_id
@@ -141,7 +142,8 @@
         t1.create_time,
         t1.update_time,
         t1.create_by,
-        t2.warn_num
+        t2.warn_num,
+        t1.is_frozen
         from  procurement_record_storage t1
         left join sales_ledger_product t2 on t2.id = t1.sales_ledger_product_id and t2.type = 2
         left join purchase_ledger t3 on t3.id = t2.sales_ledger_id
@@ -256,7 +258,8 @@
         t1.update_time,
         t1.create_by,
         t2.warn_num,
-        t2.product_id
+        t2.product_id,
+        t1.is_frozen
         from  procurement_record_storage t1
         left join sales_ledger_product t2 on t2.id = t1.sales_ledger_product_id and t2.type = 1
         left join sales_ledger t3 on t3.id = t2.sales_ledger_id
@@ -353,11 +356,13 @@
               </if>
           </where>
     </select>
-    <select id="getSumQuantity" resultType="BigDecimal">
+
+    <select id="getSumQuantity" resultType="java.math.BigDecimal">
         select COALESCE(sum(inbound_num), 0)
         from procurement_record_storage
-        where product_model_id = #{productModelId}
+        where product_model_id = #{productModelId} and is_frozen = false
     </select>
+
     <select id="listPageByProductProduction" resultType="com.ruoyi.procurementrecord.dto.ProcurementPageDto">
         select
         t1.*,

--
Gitblit v1.9.3