From 4402a6e3befe0c33e8f3b58641984fce3fdb0bbc Mon Sep 17 00:00:00 2001
From: liyong <18434998025@163.com>
Date: 星期六, 09 五月 2026 18:04:52 +0800
Subject: [PATCH] feat(stock): 添加库存盘点功能并优化出入库记录
---
src/main/java/com/ruoyi/stock/pojo/StockInventory.java | 2
src/main/java/com/ruoyi/stock/service/StockInventoryService.java | 9
src/main/java/com/ruoyi/stock/service/impl/StockInventoryCheckItemServiceImpl.java | 20
src/main/java/com/ruoyi/stock/controller/StockInventoryCheckPlanController.java | 72 +++
src/main/java/com/ruoyi/stock/service/impl/StockInventoryCheckMainServiceImpl.java | 62 ++
src/main/java/com/ruoyi/procurementrecord/utils/StockUtils.java | 10
src/main/java/com/ruoyi/stock/service/StockInRecordService.java | 2
src/main/java/com/ruoyi/stock/service/impl/StockInRecordServiceImpl.java | 5
src/main/java/com/ruoyi/stock/mapper/StockInventoryCheckProductMapper.java | 18
src/main/java/com/ruoyi/stock/controller/StockInventoryCheckItemController.java | 18
src/main/resources/mapper/basic/ProductModelMapper.xml | 13
src/main/resources/mapper/stock/StockInventoryCheckMainMapper.xml | 28 +
src/main/java/com/ruoyi/stock/controller/StockInventoryCheckProductController.java | 18
src/main/java/com/ruoyi/stock/service/StockInventoryCheckProductService.java | 16
src/main/java/com/ruoyi/stock/service/StockInventoryCheckItemService.java | 16
src/main/java/com/ruoyi/common/enums/StockOutQualifiedRecordTypeEnum.java | 3
src/main/java/com/ruoyi/stock/service/impl/StockInventoryCheckProductServiceImpl.java | 20
src/main/java/com/ruoyi/stock/service/impl/StockInventoryServiceImpl.java | 26
src/main/java/com/ruoyi/common/enums/StockInQualifiedRecordTypeEnum.java | 4
src/main/java/com/ruoyi/stock/service/StockInventoryCheckPlanService.java | 36 +
src/main/java/com/ruoyi/stock/dto/StockInventoryDto.java | 1
src/main/java/com/ruoyi/stock/controller/StockInventoryCheckMainController.java | 47 ++
src/main/java/com/ruoyi/stock/dto/StockInventoryCheckMainDto.java | 11
src/main/java/com/ruoyi/basic/mapper/ProductModelMapper.java | 3
src/main/java/com/ruoyi/stock/pojo/StockInventoryCheckPlan.java | 115 +++++
src/main/resources/mapper/stock/StockInventoryMapper.xml | 29 +
src/main/java/com/ruoyi/stock/pojo/StockInventoryCheckItem.java | 124 +++++
src/main/java/com/ruoyi/stock/service/impl/StockOutRecordServiceImpl.java | 11
src/main/java/com/ruoyi/stock/pojo/StockInventoryCheckProduct.java | 70 +++
src/main/java/com/ruoyi/stock/mapper/StockInventoryCheckPlanMapper.java | 23 +
src/main/resources/mapper/stock/StockInventoryCheckProductMapper.xml | 15
src/main/java/com/ruoyi/stock/controller/StockInventoryController.java | 7
src/main/java/com/ruoyi/stock/mapper/StockInventoryCheckItemMapper.java | 18
src/main/java/com/ruoyi/stock/pojo/StockInventoryCheckMain.java | 129 +++++
src/main/resources/mapper/stock/StockInventoryCheckItemMapper.xml | 26 +
src/main/resources/mapper/stock/StockInventoryCheckPlanMapper.xml | 32 +
src/main/java/com/ruoyi/stock/service/StockOutRecordService.java | 2
src/main/java/com/ruoyi/stock/dto/StockInventoryCheckPlanDto.java | 21
src/main/java/com/ruoyi/stock/dto/StockInventoryCheckItemDto.java | 9
src/main/java/com/ruoyi/stock/mapper/StockInventoryMapper.java | 4
src/main/java/com/ruoyi/stock/service/impl/StockInventoryCheckPlanServiceImpl.java | 235 ++++++++++
src/main/java/com/ruoyi/stock/service/StockInventoryCheckMainService.java | 26 +
src/main/java/com/ruoyi/stock/mapper/StockInventoryCheckMainMapper.java | 18
43 files changed, 1,350 insertions(+), 24 deletions(-)
diff --git a/src/main/java/com/ruoyi/basic/mapper/ProductModelMapper.java b/src/main/java/com/ruoyi/basic/mapper/ProductModelMapper.java
index 36876d0..69d5576 100644
--- a/src/main/java/com/ruoyi/basic/mapper/ProductModelMapper.java
+++ b/src/main/java/com/ruoyi/basic/mapper/ProductModelMapper.java
@@ -3,6 +3,7 @@
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.basic.dto.ProductModelDto;
import com.ruoyi.basic.pojo.ProductModel;
import com.ruoyi.basic.vo.ProductModelVo;
import com.ruoyi.procurementrecord.dto.ProcurementPageDto;
@@ -27,4 +28,6 @@
ProductModel selectLatestRecord();
List<Map<String, Object>> getProductAndModelList();
+
+ List<ProductModelDto> selectModelByIds( @Param("list") List<Long> productIdList);
}
diff --git a/src/main/java/com/ruoyi/common/enums/StockInQualifiedRecordTypeEnum.java b/src/main/java/com/ruoyi/common/enums/StockInQualifiedRecordTypeEnum.java
index 01c4d7e..1858dff 100644
--- a/src/main/java/com/ruoyi/common/enums/StockInQualifiedRecordTypeEnum.java
+++ b/src/main/java/com/ruoyi/common/enums/StockInQualifiedRecordTypeEnum.java
@@ -25,7 +25,9 @@
RETURN_UNSTOCK_IN("15", "閿�鍞��璐�-涓嶅悎鏍煎叆搴�"),
PICK_RETURN_IN("20", "棰嗘枡閫�鏂�-鍚堟牸鍏ュ簱"),
PURCHASE_RETURN_STOCK_OUT("21", "閲囪喘閫�璐�"),
- FEED_RETURN_IN("22", "鐢熶骇閫�鏂�-鍚堟牸鍏ュ簱");
+ FEED_RETURN_IN("22", "鐢熶骇閫�鏂�-鍚堟牸鍏ュ簱"),
+ INVENTORY_CHECK_STOCK_IN("23", "鐩樼偣-鍏ュ簱"),
+ INVENTORY_CHECK_STOCK_OUT("24", "鐩樼偣-鍑哄簱");
diff --git a/src/main/java/com/ruoyi/common/enums/StockOutQualifiedRecordTypeEnum.java b/src/main/java/com/ruoyi/common/enums/StockOutQualifiedRecordTypeEnum.java
index 4fe1f6e..7641b03 100644
--- a/src/main/java/com/ruoyi/common/enums/StockOutQualifiedRecordTypeEnum.java
+++ b/src/main/java/com/ruoyi/common/enums/StockOutQualifiedRecordTypeEnum.java
@@ -11,7 +11,8 @@
PURCHASE_RETURN_STOCK_OUT("9", "閲囪喘閫�璐�"),
SALE_SHIP_STOCK_OUT("13", "閿�鍞�-鍙戣揣鍑哄簱"),
PICK_STOCK_OUT("14", "鐢熶骇棰嗘枡鍑哄簱"),
- FEED_STOCK_OUT("15", "鐢熶骇琛ユ枡鍑哄簱");
+ FEED_STOCK_OUT("15", "鐢熶骇琛ユ枡鍑哄簱"),
+ INVENTORY_CHECK_STOCK_OUT("24", "鐩樼偣-鍑哄簱");
private final String code;
private final String value;
diff --git a/src/main/java/com/ruoyi/procurementrecord/utils/StockUtils.java b/src/main/java/com/ruoyi/procurementrecord/utils/StockUtils.java
index 5356500..5ae608e 100644
--- a/src/main/java/com/ruoyi/procurementrecord/utils/StockUtils.java
+++ b/src/main/java/com/ruoyi/procurementrecord/utils/StockUtils.java
@@ -4,7 +4,9 @@
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.ruoyi.procurementrecord.mapper.ProcurementRecordMapper;
import com.ruoyi.procurementrecord.mapper.ProcurementRecordOutMapper;
+import com.ruoyi.stock.dto.StockInRecordDto;
import com.ruoyi.stock.dto.StockInventoryDto;
+import com.ruoyi.stock.dto.StockOutRecordDto;
import com.ruoyi.stock.dto.StockUninventoryDto;
import com.ruoyi.stock.mapper.StockInventoryMapper;
import com.ruoyi.stock.pojo.StockInRecord;
@@ -87,14 +89,14 @@
* @param recordType
* @param recordId
*/
- public void addStockWithBatchNo(Long productModelId, BigDecimal quantity, String recordType, Long recordId, String batchNo) {
+ public StockInRecordDto addStockWithBatchNo(Long productModelId, BigDecimal quantity, String recordType, Long recordId, String batchNo) {
StockInventoryDto stockInventoryDto = new StockInventoryDto();
stockInventoryDto.setRecordId(recordId);
stockInventoryDto.setRecordType(String.valueOf(recordType));
stockInventoryDto.setQualitity(quantity);
stockInventoryDto.setProductModelId(productModelId);
stockInventoryDto.setBatchNo(batchNo);
- stockInventoryService.addStockInRecordOnly(stockInventoryDto);
+ return stockInventoryService.addStockInRecordOnly(stockInventoryDto);
}
/**
@@ -114,14 +116,14 @@
stockInventoryService.subtractStockInventory(stockInventoryDto);
}
- public void substractStock(Long productModelId, BigDecimal quantity, String recordType, Long recordId, String batchNo) {
+ public StockOutRecordDto substractStock(Long productModelId, BigDecimal quantity, String recordType, Long recordId, String batchNo) {
StockInventoryDto stockInventoryDto = new StockInventoryDto();
stockInventoryDto.setRecordId(recordId);
stockInventoryDto.setRecordType(String.valueOf(recordType));
stockInventoryDto.setQualitity(quantity);
stockInventoryDto.setProductModelId(productModelId);
stockInventoryDto.setBatchNo(batchNo);
- stockInventoryService.subtractStockInventory(stockInventoryDto);
+ return stockInventoryService.subtractStockInventory(stockInventoryDto);
}
//涓嶅悎鏍煎簱瀛樺垹闄�
diff --git a/src/main/java/com/ruoyi/stock/controller/StockInventoryCheckItemController.java b/src/main/java/com/ruoyi/stock/controller/StockInventoryCheckItemController.java
new file mode 100644
index 0000000..827c036
--- /dev/null
+++ b/src/main/java/com/ruoyi/stock/controller/StockInventoryCheckItemController.java
@@ -0,0 +1,18 @@
+package com.ruoyi.stock.controller;
+
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ * 搴撳瓨鐩樼偣瀛愯〃 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-05-09 09:57:44
+ */
+@RestController
+@RequestMapping("/stockInventoryCheckItem")
+public class StockInventoryCheckItemController {
+
+}
diff --git a/src/main/java/com/ruoyi/stock/controller/StockInventoryCheckMainController.java b/src/main/java/com/ruoyi/stock/controller/StockInventoryCheckMainController.java
new file mode 100644
index 0000000..c7ef8be
--- /dev/null
+++ b/src/main/java/com/ruoyi/stock/controller/StockInventoryCheckMainController.java
@@ -0,0 +1,47 @@
+package com.ruoyi.stock.controller;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.framework.web.domain.R;
+import com.ruoyi.stock.dto.StockInventoryCheckMainDto;
+import com.ruoyi.stock.service.StockInventoryCheckMainService;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import lombok.AllArgsConstructor;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ * 搴撳瓨鐩樼偣涓昏〃 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-05-09 09:57:53
+ */
+@RestController
+@RequestMapping("/stockInventoryCheckMain")
+@AllArgsConstructor
+@Tag(name = "搴撳瓨鐩樼偣涓昏〃")
+public class StockInventoryCheckMainController {
+
+ private final StockInventoryCheckMainService stockInventoryCheckMainService;
+
+ @GetMapping("/listPage")
+ @Operation(summary = "鍒嗛〉鏌ヨ搴撳瓨鐩樼偣涓昏〃")
+ public R listPage(Page page, StockInventoryCheckMainDto stockInventoryCheckMainDto) {
+ return R.ok(stockInventoryCheckMainService.listPage(page, stockInventoryCheckMainDto));
+ }
+
+ @GetMapping("/add")
+ @Operation(summary = "娣诲姞搴撳瓨鐩樼偣涓昏〃")
+ public R add(StockInventoryCheckMainDto stockInventoryCheckMainDto) {
+ return R.ok(stockInventoryCheckMainService.add(stockInventoryCheckMainDto));
+ }
+ @GetMapping("/edit")
+ @Operation(summary = "淇敼搴撳瓨鐩樼偣涓昏〃")
+ public R edit(StockInventoryCheckMainDto stockInventoryCheckMainDto) {
+ return stockInventoryCheckMainService.updateStockInventoryCheckMainDtoById(stockInventoryCheckMainDto);
+ }
+
+}
diff --git a/src/main/java/com/ruoyi/stock/controller/StockInventoryCheckPlanController.java b/src/main/java/com/ruoyi/stock/controller/StockInventoryCheckPlanController.java
new file mode 100644
index 0000000..bcae246
--- /dev/null
+++ b/src/main/java/com/ruoyi/stock/controller/StockInventoryCheckPlanController.java
@@ -0,0 +1,72 @@
+package com.ruoyi.stock.controller;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.framework.web.domain.R;
+import com.ruoyi.stock.dto.StockInventoryCheckPlanDto;
+import com.ruoyi.stock.service.StockInventoryCheckPlanService;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import lombok.AllArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 鐩樼偣璁″垝琛� 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-05-09 10:00:43
+ */
+@RestController
+@RequestMapping("/stockInventoryCheckPlan")
+@AllArgsConstructor
+@Tag(name = "鐩樼偣璁″垝琛�")
+public class StockInventoryCheckPlanController {
+
+ private final StockInventoryCheckPlanService stockInventoryCheckPlanService;
+
+
+ @GetMapping("/listPage")
+ @Operation(summary = "鍒嗛〉鏌ヨ鐩樼偣璁″垝琛�")
+ public R listPage(Page page, StockInventoryCheckPlanDto stockInventoryCheckPlanDto) {
+ return R.ok(stockInventoryCheckPlanService.listPage(page, stockInventoryCheckPlanDto));
+ }
+
+ @PostMapping("/add")
+ @Operation(summary = "娣诲姞鐩樼偣璁″垝琛�")
+ public R add(@RequestBody StockInventoryCheckPlanDto stockInventoryCheckPlanDto) {
+ return stockInventoryCheckPlanService.add(stockInventoryCheckPlanDto );
+ }
+
+ @PutMapping("/update")
+ @Operation(summary = "淇敼鐩樼偣璁″垝琛�")
+ public R edit(@RequestBody StockInventoryCheckPlanDto stockInventoryCheckPlanDto) {
+ return stockInventoryCheckPlanService.edit(stockInventoryCheckPlanDto );
+ }
+
+ @DeleteMapping("/delete")
+ @Operation(summary = "鍒犻櫎鐩樼偣璁″垝琛�")
+ public R delete(@RequestBody List<Long> ids) {
+ return stockInventoryCheckPlanService.delete(ids );
+ }
+
+ @Operation(summary = "寮�濮嬬洏鐐�")
+ @PostMapping("/start/{id}")
+ public R start(@PathVariable Long id) {
+ return stockInventoryCheckPlanService.start(id);
+ }
+
+ @Operation(summary = "鐩樼偣璁″垝璇︽儏")
+ @GetMapping("/detail/{id}")
+ public R detail(@PathVariable Long id) {
+ return R.ok(stockInventoryCheckPlanService.detail(id));
+ }
+
+ @Operation(summary = "缁撴潫鐩樼偣")
+ @PostMapping("/end")
+ public R end(@RequestBody StockInventoryCheckPlanDto stockInventoryCheckPlanDto) {
+ return stockInventoryCheckPlanService.end(stockInventoryCheckPlanDto);
+ }
+}
diff --git a/src/main/java/com/ruoyi/stock/controller/StockInventoryCheckProductController.java b/src/main/java/com/ruoyi/stock/controller/StockInventoryCheckProductController.java
new file mode 100644
index 0000000..785ff38
--- /dev/null
+++ b/src/main/java/com/ruoyi/stock/controller/StockInventoryCheckProductController.java
@@ -0,0 +1,18 @@
+package com.ruoyi.stock.controller;
+
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ * 搴撳瓨鐩樼偣鍟嗗搧琛� 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-05-09 02:04:26
+ */
+@RestController
+@RequestMapping("/stockInventoryCheckProduct")
+public class StockInventoryCheckProductController {
+
+}
diff --git a/src/main/java/com/ruoyi/stock/controller/StockInventoryController.java b/src/main/java/com/ruoyi/stock/controller/StockInventoryController.java
index 44fe885..31b8d8d 100644
--- a/src/main/java/com/ruoyi/stock/controller/StockInventoryController.java
+++ b/src/main/java/com/ruoyi/stock/controller/StockInventoryController.java
@@ -44,6 +44,13 @@
return R.ok(stockInventoryDtoIPage);
}
+ @GetMapping("/pagestockInventoryNoQua")
+ @Operation(summary = "鍒嗛〉鏌ヨ搴撳瓨浜у搧锛屼笉瑕佹暟閲�")
+ public R pagestockInventoryNoQua(Page page, StockInventoryDto stockInventoryDto) {
+ IPage<StockInventoryDto> stockInventoryDtoIPage = stockInventoryService.pagestockInventoryNoQua(page, stockInventoryDto);
+ return R.ok(stockInventoryDtoIPage);
+ }
+
@GetMapping("/pageListCombinedStockInventory")
@Operation(summary = "鍒嗛〉鏌ヨ鑱斿悎搴撳瓨鍒楄〃")
public R pageListCombinedStockInventory(Page page, StockInventoryDto stockInventoryDto) {
diff --git a/src/main/java/com/ruoyi/stock/dto/StockInventoryCheckItemDto.java b/src/main/java/com/ruoyi/stock/dto/StockInventoryCheckItemDto.java
new file mode 100644
index 0000000..f6ecba1
--- /dev/null
+++ b/src/main/java/com/ruoyi/stock/dto/StockInventoryCheckItemDto.java
@@ -0,0 +1,9 @@
+package com.ruoyi.stock.dto;
+
+
+import com.ruoyi.stock.pojo.StockInventoryCheckItem;
+import lombok.Data;
+
+@Data
+public class StockInventoryCheckItemDto extends StockInventoryCheckItem {
+}
diff --git a/src/main/java/com/ruoyi/stock/dto/StockInventoryCheckMainDto.java b/src/main/java/com/ruoyi/stock/dto/StockInventoryCheckMainDto.java
new file mode 100644
index 0000000..1f7fcef
--- /dev/null
+++ b/src/main/java/com/ruoyi/stock/dto/StockInventoryCheckMainDto.java
@@ -0,0 +1,11 @@
+package com.ruoyi.stock.dto;
+
+import com.ruoyi.stock.pojo.StockInventoryCheckMain;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class StockInventoryCheckMainDto extends StockInventoryCheckMain {
+ private List<StockInventoryCheckItemDto> stockInventoryCheckItemDtos;
+}
diff --git a/src/main/java/com/ruoyi/stock/dto/StockInventoryCheckPlanDto.java b/src/main/java/com/ruoyi/stock/dto/StockInventoryCheckPlanDto.java
new file mode 100644
index 0000000..bc80324
--- /dev/null
+++ b/src/main/java/com/ruoyi/stock/dto/StockInventoryCheckPlanDto.java
@@ -0,0 +1,21 @@
+package com.ruoyi.stock.dto;
+
+import com.ruoyi.stock.pojo.StockInventoryCheckItem;
+import com.ruoyi.stock.pojo.StockInventoryCheckPlan;
+import com.ruoyi.stock.pojo.StockInventoryCheckProduct;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class StockInventoryCheckPlanDto extends StockInventoryCheckPlan {
+ private List<Long> productIdList;
+
+ private String createBy;
+
+ private String startTime;
+ private String endTime;
+
+ private List<StockInventoryCheckProduct> items;
+ private List<StockInventoryCheckItem> checkItems;
+}
diff --git a/src/main/java/com/ruoyi/stock/dto/StockInventoryDto.java b/src/main/java/com/ruoyi/stock/dto/StockInventoryDto.java
index 2be6512..967a6c1 100644
--- a/src/main/java/com/ruoyi/stock/dto/StockInventoryDto.java
+++ b/src/main/java/com/ruoyi/stock/dto/StockInventoryDto.java
@@ -15,6 +15,7 @@
private String productName;
private String model;
private String unit;
+ private String specificationModel;
//鍏ュ簱绫诲瀷
diff --git a/src/main/java/com/ruoyi/stock/mapper/StockInventoryCheckItemMapper.java b/src/main/java/com/ruoyi/stock/mapper/StockInventoryCheckItemMapper.java
new file mode 100644
index 0000000..9cef281
--- /dev/null
+++ b/src/main/java/com/ruoyi/stock/mapper/StockInventoryCheckItemMapper.java
@@ -0,0 +1,18 @@
+package com.ruoyi.stock.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.stock.pojo.StockInventoryCheckItem;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ * 搴撳瓨鐩樼偣瀛愯〃 Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-05-09 09:57:44
+ */
+@Mapper
+public interface StockInventoryCheckItemMapper extends BaseMapper<StockInventoryCheckItem> {
+
+}
diff --git a/src/main/java/com/ruoyi/stock/mapper/StockInventoryCheckMainMapper.java b/src/main/java/com/ruoyi/stock/mapper/StockInventoryCheckMainMapper.java
new file mode 100644
index 0000000..0cb18b8
--- /dev/null
+++ b/src/main/java/com/ruoyi/stock/mapper/StockInventoryCheckMainMapper.java
@@ -0,0 +1,18 @@
+package com.ruoyi.stock.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.stock.pojo.StockInventoryCheckMain;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ * 搴撳瓨鐩樼偣涓昏〃 Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-05-09 09:57:53
+ */
+@Mapper
+public interface StockInventoryCheckMainMapper extends BaseMapper<StockInventoryCheckMain> {
+
+}
diff --git a/src/main/java/com/ruoyi/stock/mapper/StockInventoryCheckPlanMapper.java b/src/main/java/com/ruoyi/stock/mapper/StockInventoryCheckPlanMapper.java
new file mode 100644
index 0000000..628afbe
--- /dev/null
+++ b/src/main/java/com/ruoyi/stock/mapper/StockInventoryCheckPlanMapper.java
@@ -0,0 +1,23 @@
+package com.ruoyi.stock.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.stock.dto.StockInventoryCheckPlanDto;
+import com.ruoyi.stock.pojo.StockInventoryCheckPlan;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * <p>
+ * 鐩樼偣璁″垝琛� Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-05-09 10:00:43
+ */
+@Mapper
+public interface StockInventoryCheckPlanMapper extends BaseMapper<StockInventoryCheckPlan> {
+
+ IPage<StockInventoryCheckPlanDto> listPage(Page page,@Param("ew") StockInventoryCheckPlanDto stockInventoryCheckPlanDto);
+}
diff --git a/src/main/java/com/ruoyi/stock/mapper/StockInventoryCheckProductMapper.java b/src/main/java/com/ruoyi/stock/mapper/StockInventoryCheckProductMapper.java
new file mode 100644
index 0000000..d6cd7ed
--- /dev/null
+++ b/src/main/java/com/ruoyi/stock/mapper/StockInventoryCheckProductMapper.java
@@ -0,0 +1,18 @@
+package com.ruoyi.stock.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.stock.pojo.StockInventoryCheckProduct;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ * 搴撳瓨鐩樼偣鍟嗗搧琛� Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-05-09 02:04:26
+ */
+@Mapper
+public interface StockInventoryCheckProductMapper extends BaseMapper<StockInventoryCheckProduct> {
+
+}
diff --git a/src/main/java/com/ruoyi/stock/mapper/StockInventoryMapper.java b/src/main/java/com/ruoyi/stock/mapper/StockInventoryMapper.java
index a31cf5b..c5827e2 100644
--- a/src/main/java/com/ruoyi/stock/mapper/StockInventoryMapper.java
+++ b/src/main/java/com/ruoyi/stock/mapper/StockInventoryMapper.java
@@ -56,4 +56,8 @@
List<StockInventory> listSelectableBatchNoByProductModelIds(@Param("productModelIds") List<Long> productModelIds);
List<StockInventory> getByModelId(@Param("productModelId") Long productModelId);
+
+ List<StockInventoryDto> selectStockInvenrory(Long productModelId);
+
+ IPage<StockInventoryDto> pagestockInventoryNoQua(Page page, @Param("ew") StockInventoryDto stockInventoryDto);
}
diff --git a/src/main/java/com/ruoyi/stock/pojo/StockInventory.java b/src/main/java/com/ruoyi/stock/pojo/StockInventory.java
index 5652ec7..320cffc 100644
--- a/src/main/java/com/ruoyi/stock/pojo/StockInventory.java
+++ b/src/main/java/com/ruoyi/stock/pojo/StockInventory.java
@@ -72,4 +72,6 @@
@TableField(fill = FieldFill.INSERT)
private Long deptId;
+ @Schema(description = "鏄惁閿佸畾")
+ private Boolean locked;
}
diff --git a/src/main/java/com/ruoyi/stock/pojo/StockInventoryCheckItem.java b/src/main/java/com/ruoyi/stock/pojo/StockInventoryCheckItem.java
new file mode 100644
index 0000000..9a40335
--- /dev/null
+++ b/src/main/java/com/ruoyi/stock/pojo/StockInventoryCheckItem.java
@@ -0,0 +1,124 @@
+package com.ruoyi.stock.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.annotations.ApiModel;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 搴撳瓨鐩樼偣瀛愯〃
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-05-09 09:57:44
+ */
+@Getter
+@Setter
+@ToString
+@TableName("stock_inventory_check_item")
+@ApiModel(value = "StockInventoryCheckItem瀵硅薄", description = "搴撳瓨鐩樼偣瀛愯〃")
+public class StockInventoryCheckItem implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 涓婚敭ID
+ */
+ @Schema(description ="涓婚敭ID")
+ @TableId(value = "id", type = IdType.AUTO)
+ private Long id;
+
+ /**
+ * 涓昏〃ID
+ */
+ @Schema(description ="涓昏〃ID")
+ private Long mainId;
+
+ /**
+ * 鍟嗗搧ID
+ */
+ @Schema(description ="鍟嗗搧ID")
+ private Long productModelId;
+
+ /**
+ * 鍟嗗搧缂栫爜
+ */
+ @Schema(description ="鍟嗗搧缂栫爜")
+ private String productCode;
+
+ /**
+ * 鍟嗗搧鍚嶇О
+ */
+ @Schema(description ="鍟嗗搧鍚嶇О")
+ private String productName;
+
+ /**
+ * 瑙勬牸鍨嬪彿
+ */
+ @Schema(description ="瑙勬牸鍨嬪彿")
+ private String model;
+
+ /**
+ * 鍗曚綅
+ */
+ @Schema(description ="鍗曚綅")
+ private String unit;
+
+ /**
+ * 鎵瑰彿
+ */
+ @Schema(description ="鎵瑰彿")
+ private String batchNo;
+
+ /**
+ * 绯荤粺搴撳瓨鏁伴噺
+ */
+ @Schema(description ="绯荤粺搴撳瓨鏁伴噺")
+ private BigDecimal systemQuantity;
+
+ /**
+ * 瀹為檯鐩樼偣鏁伴噺
+ */
+ @Schema(description ="瀹為檯鐩樼偣鏁伴噺")
+ private BigDecimal actualQuantity;
+
+ /**
+ * 宸紓鏁伴噺锛堝疄闄�-绯荤粺锛�
+ */
+ @Schema(description ="宸紓鏁伴噺锛堝疄闄�-绯荤粺锛�")
+ private BigDecimal differenceQuantity;
+
+
+
+
+
+ /**
+ * 澶囨敞
+ */
+ @Schema(description ="澶囨敞")
+ private String remark;
+
+ /**
+ * 鍒涘缓鏃堕棿
+ */
+ @Schema(description ="鍒涘缓鏃堕棿")
+ @TableField(fill = FieldFill.INSERT)
+ private LocalDateTime createTime;
+
+ /**
+ * 鏇存柊鏃堕棿
+ */
+ @Schema(description ="鏇存柊鏃堕棿")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private LocalDateTime updateTime;
+
+
+ private Long deptId;
+}
diff --git a/src/main/java/com/ruoyi/stock/pojo/StockInventoryCheckMain.java b/src/main/java/com/ruoyi/stock/pojo/StockInventoryCheckMain.java
new file mode 100644
index 0000000..9924327
--- /dev/null
+++ b/src/main/java/com/ruoyi/stock/pojo/StockInventoryCheckMain.java
@@ -0,0 +1,129 @@
+package com.ruoyi.stock.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.annotations.ApiModel;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 搴撳瓨鐩樼偣涓昏〃
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-05-09 09:57:53
+ */
+@Getter
+@Setter
+@ToString
+@TableName("stock_inventory_check_main")
+@ApiModel(value = "StockInventoryCheckMain瀵硅薄", description = "搴撳瓨鐩樼偣涓昏〃")
+public class StockInventoryCheckMain implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 涓婚敭ID
+ */
+ @Schema(description ="涓婚敭ID")
+ @TableId(value = "id", type = IdType.AUTO)
+ private Long id;
+
+ /**
+ * 鐩樼偣鍗曞彿
+ */
+ @Schema(description ="鐩樼偣鍗曞彿")
+ private String checkNo;
+
+ /**
+ * 鐩樼偣绫诲瀷锛�1-瀹氭湡鐩樼偣锛�2-涓存椂鐩樼偣锛�3-鎶芥牱鐩樼偣
+ */
+ @Schema(description ="鐩樼偣绫诲瀷锛�1-瀹氭湡鐩樼偣锛�2-涓存椂鐩樼偣锛�3-鎶芥牱鐩樼偣")
+ private String checkType;
+
+ /**
+ * 鐩樼偣鎬绘暟閲�
+ */
+ @Schema(description ="鐩樼偣鎬绘暟閲�")
+ private BigDecimal totalQuantity;
+
+ /**
+ * 鏉ユ簮绫诲瀷锛�1-璁″垝鐢熸垚锛�2-鎵嬪姩鍒涘缓
+ */
+ @Schema(description ="鏉ユ簮绫诲瀷锛�1-璁″垝鐢熸垚锛�2-鎵嬪姩鍒涘缓")
+ private String sourceType;
+
+ /**
+ * 鏉ユ簮ID锛堝叧鑱旂洏鐐硅鍒扞D锛�
+ */
+ @Schema(description ="鏉ユ簮ID锛堝叧鑱旂洏鐐硅鍒扞D锛�")
+ private Long sourceId;
+
+ /**
+ * 鐘舵�侊細0-寰呯洏鐐癸紝1-鐩樼偣涓紝2-宸插畬鎴愶紝3-宸插鏍革紝4-宸插彇娑�
+ */
+ @Schema(description ="鐘舵�侊細0-寰呯洏鐐癸紝1-鐩樼偣涓紝2-宸插畬鎴愶紝3-宸插鏍革紝4-宸插彇娑�")
+ private Integer status;
+
+ /**
+ * 鐩樼偣鏃ユ湡
+ */
+ @Schema(description ="鐩樼偣鏃ユ湡")
+ private LocalDate checkDate;
+
+ /**
+ * 璐熻矗浜篒D
+ */
+ @Schema(description ="璐熻矗浜篒D")
+ private Long responsiblePersonId;
+
+ /**
+ * 璐熻矗浜哄鍚�
+ */
+ @Schema(description ="璐熻矗浜哄鍚�")
+ private String responsiblePersonName;
+
+ /**
+ * 澶囨敞
+ */
+ @Schema(description ="澶囨敞")
+ private String remark;
+
+ /**
+ * 鍒涘缓鏃堕棿
+ */
+ @Schema(description ="鍒涘缓鏃堕棿")
+ @TableField(fill = FieldFill.INSERT)
+ private LocalDateTime createTime;
+
+ /**
+ * 鍒涘缓浜�
+ */
+ @Schema(description ="鍒涘缓浜�")
+ @TableField(fill = FieldFill.INSERT)
+ private Long createUser;
+
+ /**
+ * 鏇存柊鏃堕棿
+ */
+ @Schema(description ="鏇存柊鏃堕棿")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private LocalDateTime updateTime;
+
+ /**
+ * 鏇存柊浜�
+ */
+ @Schema(description ="鏇存柊浜�")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private Long updateUser;
+
+
+ private Long deptId;
+}
diff --git a/src/main/java/com/ruoyi/stock/pojo/StockInventoryCheckPlan.java b/src/main/java/com/ruoyi/stock/pojo/StockInventoryCheckPlan.java
new file mode 100644
index 0000000..19033c5
--- /dev/null
+++ b/src/main/java/com/ruoyi/stock/pojo/StockInventoryCheckPlan.java
@@ -0,0 +1,115 @@
+package com.ruoyi.stock.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 鐩樼偣璁″垝琛�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-05-09 10:00:43
+ */
+@Getter
+@Setter
+@ToString
+@TableName("stock_inventory_check_plan")
+@ApiModel(value = "StockInventoryCheckPlan瀵硅薄", description = "鐩樼偣璁″垝琛�")
+public class StockInventoryCheckPlan implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 涓婚敭ID
+ */
+ @Schema(description = "涓婚敭ID")
+ @TableId(value = "id", type = IdType.AUTO)
+ private Long id;
+
+ /**
+ * 璁″垝缂栧彿
+ */
+ @Schema(description = "璁″垝缂栧彿")
+ private String planNo;
+
+
+ /**
+ * 璐熻矗浜篒D
+ */
+ @Schema(description = "鐩樼偣浜篿d")
+ private Long checkerId;
+
+ /**
+ * 璐熻矗浜哄鍚�
+ */
+ @Schema(description = "鐩樼偣浜哄悕瀛�")
+ private String checkerName;
+
+ /**
+ * 璁″垝鏃ユ湡
+ */
+ @Schema(description = "璁″垝鏃ユ湡")
+ @DateTimeFormat(pattern = "yyyy-MM-dd")
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ private LocalDate planDate;
+
+
+ /**
+ * 鐘舵�侊細0-寰呮墽琛岋紝1-鎵ц涓紝2-宸插畬鎴愶紝3-宸插彇娑�
+ */
+ @Schema(description = "鐘舵�侊細0-寰呮墽琛岋紝1-鎵ц涓紝2-宸插畬鎴愶紝3-宸插彇娑�")
+ private Integer status;
+
+ /**
+ * 鍒涘缓鏃堕棿
+ */
+ @Schema(description = "鍒涘缓鏃堕棿")
+ @TableField(fill = FieldFill.INSERT)
+ private LocalDate createTime;
+
+ /**
+ * 鍒涘缓浜�
+ */
+ @Schema(description = "鍒涘缓浜�")
+ @TableField(fill = FieldFill.INSERT)
+ private Long createUser;
+
+ /**
+ * 鏇存柊鏃堕棿
+ */
+ @Schema(description = "鏇存柊鏃堕棿")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private LocalDateTime updateTime;
+
+ /**
+ * 鏇存柊浜�
+ */
+ @Schema(description = "鏇存柊浜�")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private Long updateUser;
+
+ /**
+ * 澶囨敞
+ */
+ @Schema(description = "澶囨敞")
+ private String remark;
+
+ /**
+ * 鍒犻櫎鏍囧織锛�0浠h〃瀛樺湪 1浠h〃鍒犻櫎锛�
+ */
+ @Schema(description = "鍒犻櫎鏍囧織锛�0浠h〃瀛樺湪 1浠h〃鍒犻櫎锛�")
+ private String delFlag;
+
+ private Long deptId;
+}
diff --git a/src/main/java/com/ruoyi/stock/pojo/StockInventoryCheckProduct.java b/src/main/java/com/ruoyi/stock/pojo/StockInventoryCheckProduct.java
new file mode 100644
index 0000000..d2edacd
--- /dev/null
+++ b/src/main/java/com/ruoyi/stock/pojo/StockInventoryCheckProduct.java
@@ -0,0 +1,70 @@
+package com.ruoyi.stock.pojo;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+/**
+ * <p>
+ * 搴撳瓨鐩樼偣鍟嗗搧琛�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-05-09 02:04:26
+ */
+@Getter
+@Setter
+@ToString
+@TableName("stock_inventory_check_product")
+@ApiModel(value = "StockInventoryCheckProduct瀵硅薄", description = "搴撳瓨鐩樼偣鍟嗗搧琛�")
+public class StockInventoryCheckProduct implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 涓婚敭ID
+ */
+ @ApiModelProperty("涓婚敭ID")
+ @TableId(value = "id", type = IdType.AUTO)
+ private Long id;
+
+
+ private Long inventoryCheckPlanId;
+ /**
+ * 鍟嗗搧ID
+ */
+ @ApiModelProperty("鍟嗗搧ID")
+ private Long productModelId;
+
+ /**
+ * 鍟嗗搧鍚嶇О
+ */
+ @ApiModelProperty("鍟嗗搧鍚嶇О")
+ private String productName;
+
+ /**
+ * 瑙勬牸鍨嬪彿
+ */
+ @ApiModelProperty("瑙勬牸鍨嬪彿")
+ private String model;
+
+ /**
+ * 鍗曚綅
+ */
+ @ApiModelProperty("鍗曚綅")
+ private String unit;
+
+ /**
+ * 绯荤粺搴撳瓨鏁伴噺
+ */
+ @ApiModelProperty("绯荤粺搴撳瓨鏁伴噺")
+ private BigDecimal systemQuantity;
+}
diff --git a/src/main/java/com/ruoyi/stock/service/StockInRecordService.java b/src/main/java/com/ruoyi/stock/service/StockInRecordService.java
index 249f261..c558393 100644
--- a/src/main/java/com/ruoyi/stock/service/StockInRecordService.java
+++ b/src/main/java/com/ruoyi/stock/service/StockInRecordService.java
@@ -12,7 +12,7 @@
public interface StockInRecordService extends IService<StockInRecord> {
IPage<StockInRecordDto> listPage(Page page, StockInRecordDto stockInRecordDto);
- int add(StockInRecordDto stockInRecordDto);
+ Long add(StockInRecordDto stockInRecordDto);
int update(Long id, StockInRecordDto stockInRecordDto);
diff --git a/src/main/java/com/ruoyi/stock/service/StockInventoryCheckItemService.java b/src/main/java/com/ruoyi/stock/service/StockInventoryCheckItemService.java
new file mode 100644
index 0000000..93e9ef1
--- /dev/null
+++ b/src/main/java/com/ruoyi/stock/service/StockInventoryCheckItemService.java
@@ -0,0 +1,16 @@
+package com.ruoyi.stock.service;
+
+import com.ruoyi.stock.pojo.StockInventoryCheckItem;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * 搴撳瓨鐩樼偣瀛愯〃 鏈嶅姟绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-05-09 09:57:44
+ */
+public interface StockInventoryCheckItemService extends IService<StockInventoryCheckItem> {
+
+}
diff --git a/src/main/java/com/ruoyi/stock/service/StockInventoryCheckMainService.java b/src/main/java/com/ruoyi/stock/service/StockInventoryCheckMainService.java
new file mode 100644
index 0000000..9cbb42f
--- /dev/null
+++ b/src/main/java/com/ruoyi/stock/service/StockInventoryCheckMainService.java
@@ -0,0 +1,26 @@
+package com.ruoyi.stock.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.framework.web.domain.R;
+import com.ruoyi.stock.dto.StockInventoryCheckMainDto;
+import com.ruoyi.stock.pojo.StockInventoryCheckMain;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * 搴撳瓨鐩樼偣涓昏〃 鏈嶅姟绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-05-09 09:57:53
+ */
+public interface StockInventoryCheckMainService extends IService<StockInventoryCheckMain> {
+
+ IPage<StockInventoryCheckMainDto> listPage(Page page, StockInventoryCheckMainDto stockInventoryCheckMainDto);
+
+ Boolean add(StockInventoryCheckMainDto stockInventoryCheckMainDto);
+
+ R updateStockInventoryCheckMainDtoById(StockInventoryCheckMainDto stockInventoryCheckMainDto);
+
+}
diff --git a/src/main/java/com/ruoyi/stock/service/StockInventoryCheckPlanService.java b/src/main/java/com/ruoyi/stock/service/StockInventoryCheckPlanService.java
new file mode 100644
index 0000000..48482d3
--- /dev/null
+++ b/src/main/java/com/ruoyi/stock/service/StockInventoryCheckPlanService.java
@@ -0,0 +1,36 @@
+package com.ruoyi.stock.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.framework.web.domain.R;
+import com.ruoyi.stock.dto.StockInventoryCheckPlanDto;
+import com.ruoyi.stock.pojo.StockInventoryCheckPlan;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 鐩樼偣璁″垝琛� 鏈嶅姟绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-05-09 10:00:43
+ */
+public interface StockInventoryCheckPlanService extends IService<StockInventoryCheckPlan> {
+
+ R add(StockInventoryCheckPlanDto stockInventoryCheckPlanDto);
+
+ R edit(StockInventoryCheckPlanDto stockInventoryCheckPlanDto);
+
+ R delete(List<Long> ids);
+
+ IPage<StockInventoryCheckPlanDto> listPage(Page page, StockInventoryCheckPlanDto stockInventoryCheckPlanDto);
+
+ R start(Long id);
+
+ R end(StockInventoryCheckPlanDto stockInventoryCheckPlanDto);
+
+ StockInventoryCheckPlanDto detail(Long id);
+}
+
diff --git a/src/main/java/com/ruoyi/stock/service/StockInventoryCheckProductService.java b/src/main/java/com/ruoyi/stock/service/StockInventoryCheckProductService.java
new file mode 100644
index 0000000..75f93a8
--- /dev/null
+++ b/src/main/java/com/ruoyi/stock/service/StockInventoryCheckProductService.java
@@ -0,0 +1,16 @@
+package com.ruoyi.stock.service;
+
+import com.ruoyi.stock.pojo.StockInventoryCheckProduct;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * 搴撳瓨鐩樼偣鍟嗗搧琛� 鏈嶅姟绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-05-09 02:04:26
+ */
+public interface StockInventoryCheckProductService extends IService<StockInventoryCheckProduct> {
+
+}
diff --git a/src/main/java/com/ruoyi/stock/service/StockInventoryService.java b/src/main/java/com/ruoyi/stock/service/StockInventoryService.java
index d47cc4b..cb81339 100644
--- a/src/main/java/com/ruoyi/stock/service/StockInventoryService.java
+++ b/src/main/java/com/ruoyi/stock/service/StockInventoryService.java
@@ -6,6 +6,7 @@
import com.ruoyi.framework.web.domain.R;
import com.ruoyi.stock.dto.StockInRecordDto;
import com.ruoyi.stock.dto.StockInventoryDto;
+import com.ruoyi.stock.dto.StockOutRecordDto;
import com.ruoyi.stock.pojo.StockInventory;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.web.multipart.MultipartFile;
@@ -28,9 +29,9 @@
Boolean addstockInventory(StockInventoryDto stockInventoryDto);
- Boolean subtractStockInventory(StockInventoryDto stockInventoryDto);
+ StockOutRecordDto subtractStockInventory(StockInventoryDto stockInventoryDto);
- Boolean addStockInRecordOnly(StockInventoryDto stockInventoryDto);
+ StockInRecordDto addStockInRecordOnly(StockInventoryDto stockInventoryDto);
Boolean addStockOutRecordOnly(StockInventoryDto stockInventoryDto);
@@ -47,4 +48,8 @@
Boolean thawStock(StockInventoryDto stockInventoryDto);
List<StockInventory> getByModelId(Long modelId);
+
+ List<StockInventoryDto> selectStockInvenrory(Long productModelId);
+
+ IPage<StockInventoryDto> pagestockInventoryNoQua(Page page, StockInventoryDto stockInventoryDto);
}
diff --git a/src/main/java/com/ruoyi/stock/service/StockOutRecordService.java b/src/main/java/com/ruoyi/stock/service/StockOutRecordService.java
index bbad1f6..324ffff 100644
--- a/src/main/java/com/ruoyi/stock/service/StockOutRecordService.java
+++ b/src/main/java/com/ruoyi/stock/service/StockOutRecordService.java
@@ -20,7 +20,7 @@
public interface StockOutRecordService extends IService<StockOutRecord> {
IPage<StockOutRecordDto> listPage(Page page, StockOutRecordDto stockOutRecordDto);
- int add(StockOutRecordDto stockOutRecordDto);
+ Long add(StockOutRecordDto stockOutRecordDto);
int update(Long id, StockOutRecordDto stockOutRecordDto);
diff --git a/src/main/java/com/ruoyi/stock/service/impl/StockInRecordServiceImpl.java b/src/main/java/com/ruoyi/stock/service/impl/StockInRecordServiceImpl.java
index f84a9d8..c00681c 100644
--- a/src/main/java/com/ruoyi/stock/service/impl/StockInRecordServiceImpl.java
+++ b/src/main/java/com/ruoyi/stock/service/impl/StockInRecordServiceImpl.java
@@ -48,12 +48,13 @@
// 鏂板鍏ュ簱
@Override
@Transactional(rollbackFor = Exception.class)
- public int add(StockInRecordDto stockInRecordDto) {
+ public Long add(StockInRecordDto stockInRecordDto) {
String no = OrderUtils.countTodayByCreateTime(stockInRecordMapper, "RK","inbound_batches");
stockInRecordDto.setInboundBatches(no);
StockInRecord stockInRecord = new StockInRecord();
BeanUtils.copyProperties(stockInRecordDto, stockInRecord);
- return stockInRecordMapper.insert(stockInRecord);
+ stockInRecordMapper.insert(stockInRecord);
+ return stockInRecord.getId();
}
@Override
diff --git a/src/main/java/com/ruoyi/stock/service/impl/StockInventoryCheckItemServiceImpl.java b/src/main/java/com/ruoyi/stock/service/impl/StockInventoryCheckItemServiceImpl.java
new file mode 100644
index 0000000..885f555
--- /dev/null
+++ b/src/main/java/com/ruoyi/stock/service/impl/StockInventoryCheckItemServiceImpl.java
@@ -0,0 +1,20 @@
+package com.ruoyi.stock.service.impl;
+
+import com.ruoyi.stock.pojo.StockInventoryCheckItem;
+import com.ruoyi.stock.mapper.StockInventoryCheckItemMapper;
+import com.ruoyi.stock.service.StockInventoryCheckItemService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 搴撳瓨鐩樼偣瀛愯〃 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-05-09 09:57:44
+ */
+@Service
+public class StockInventoryCheckItemServiceImpl extends ServiceImpl<StockInventoryCheckItemMapper, StockInventoryCheckItem> implements StockInventoryCheckItemService {
+
+}
diff --git a/src/main/java/com/ruoyi/stock/service/impl/StockInventoryCheckMainServiceImpl.java b/src/main/java/com/ruoyi/stock/service/impl/StockInventoryCheckMainServiceImpl.java
new file mode 100644
index 0000000..a1da1aa
--- /dev/null
+++ b/src/main/java/com/ruoyi/stock/service/impl/StockInventoryCheckMainServiceImpl.java
@@ -0,0 +1,62 @@
+package com.ruoyi.stock.service.impl;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.common.utils.OrderUtils;
+import com.ruoyi.common.utils.bean.BeanUtils;
+import com.ruoyi.framework.web.domain.R;
+import com.ruoyi.stock.dto.StockInventoryCheckItemDto;
+import com.ruoyi.stock.dto.StockInventoryCheckMainDto;
+import com.ruoyi.stock.mapper.StockInventoryCheckItemMapper;
+import com.ruoyi.stock.mapper.StockInventoryCheckMainMapper;
+import com.ruoyi.stock.pojo.StockInventoryCheckItem;
+import com.ruoyi.stock.pojo.StockInventoryCheckMain;
+import com.ruoyi.stock.service.StockInventoryCheckMainService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+
+/**
+ * <p>
+ * 搴撳瓨鐩樼偣涓昏〃 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-05-09 09:57:53
+ */
+@Service
+@RequiredArgsConstructor
+public class StockInventoryCheckMainServiceImpl extends ServiceImpl<StockInventoryCheckMainMapper, StockInventoryCheckMain> implements StockInventoryCheckMainService {
+
+ private final StockInventoryCheckItemMapper stockInventoryCheckItemMapper;
+ private final StockInventoryCheckMainMapper stockInventoryCheckMainMapper;
+
+ @Override
+ public IPage<StockInventoryCheckMainDto> listPage(Page page, StockInventoryCheckMainDto stockInventoryCheckMainDto) {
+ return null;
+ }
+
+ @Override
+ public Boolean add(StockInventoryCheckMainDto stockInventoryCheckMainDto) {
+ String checkNo = OrderUtils.countTodayByCreateTime(stockInventoryCheckMainMapper, "PD", "check_no");
+ stockInventoryCheckMainDto.setCheckNo(checkNo);
+ this.save(stockInventoryCheckMainDto);
+ ArrayList<StockInventoryCheckItem> stockInventoryCheckItems = new ArrayList<>();
+ for (StockInventoryCheckItemDto itemDto : stockInventoryCheckMainDto.getStockInventoryCheckItemDtos()) {
+ StockInventoryCheckItem stockInventoryCheckItem = new StockInventoryCheckItem();
+ BeanUtils.copyProperties(itemDto, stockInventoryCheckItem);
+ stockInventoryCheckItem.setMainId(stockInventoryCheckMainDto.getId());
+ stockInventoryCheckItems.add(stockInventoryCheckItem);
+ }
+ stockInventoryCheckItemMapper.insert(stockInventoryCheckItems);
+ return true;
+ }
+
+ @Override
+ public R updateStockInventoryCheckMainDtoById(StockInventoryCheckMainDto stockInventoryCheckMainDto) {
+
+ return null;
+ }
+}
diff --git a/src/main/java/com/ruoyi/stock/service/impl/StockInventoryCheckPlanServiceImpl.java b/src/main/java/com/ruoyi/stock/service/impl/StockInventoryCheckPlanServiceImpl.java
new file mode 100644
index 0000000..698c0a8
--- /dev/null
+++ b/src/main/java/com/ruoyi/stock/service/impl/StockInventoryCheckPlanServiceImpl.java
@@ -0,0 +1,235 @@
+package com.ruoyi.stock.service.impl;
+
+import cn.hutool.core.bean.BeanUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.common.enums.StockInQualifiedRecordTypeEnum;
+import com.ruoyi.common.utils.OrderUtils;
+import com.ruoyi.framework.web.domain.R;
+import com.ruoyi.procurementrecord.utils.StockUtils;
+import com.ruoyi.project.system.domain.SysUser;
+import com.ruoyi.project.system.mapper.SysUserMapper;
+import com.ruoyi.stock.dto.*;
+import com.ruoyi.stock.mapper.StockInventoryCheckItemMapper;
+import com.ruoyi.stock.mapper.StockInventoryCheckPlanMapper;
+import com.ruoyi.stock.mapper.StockInventoryCheckProductMapper;
+import com.ruoyi.stock.pojo.*;
+import com.ruoyi.stock.service.*;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Service;
+
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Objects;
+
+/**
+ * <p>
+ * 鐩樼偣璁″垝琛� 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-05-09 10:00:43
+ */
+@Service
+@RequiredArgsConstructor
+public class StockInventoryCheckPlanServiceImpl extends ServiceImpl<StockInventoryCheckPlanMapper, StockInventoryCheckPlan> implements StockInventoryCheckPlanService {
+
+ private final StockInventoryCheckPlanMapper stockInventoryCheckPlanMapper;
+ private final StockInventoryCheckProductMapper stockInventoryCheckProductMapper;
+ private final SysUserMapper sysUserMapper;
+ private final StockInventoryCheckMainService stockInventoryCheckMainService;
+ private final StockInventoryService stockInventoryService;
+ private final StockInventoryCheckItemMapper stockInventoryCheckItemMapper;
+ private final StockUtils stockUtils;
+ private final StockInRecordService stockInRecordService;
+ private final StockOutRecordService stockOutRecordService;
+
+ @Override
+ public IPage<StockInventoryCheckPlanDto> listPage(Page page, StockInventoryCheckPlanDto stockInventoryCheckPlanDto) {
+ IPage<StockInventoryCheckPlanDto> stockInventoryCheckPlanDtoIPage = stockInventoryCheckPlanMapper.listPage(page, stockInventoryCheckPlanDto);
+ stockInventoryCheckPlanDtoIPage.getRecords().forEach(item -> {
+ List<StockInventoryCheckProduct> stockInventoryCheckProducts = stockInventoryCheckProductMapper.selectList(new LambdaQueryWrapper<StockInventoryCheckProduct>().eq(StockInventoryCheckProduct::getInventoryCheckPlanId, item.getId()));
+ item.setItems(stockInventoryCheckProducts);
+ });
+ return stockInventoryCheckPlanDtoIPage ;
+ }
+
+ @Override
+ public R start(Long id) {
+ StockInventoryCheckPlan stockInventoryCheckPlan = this.getById(id);
+ StockInventoryCheckPlanDto stockInventoryCheckPlanDto = new StockInventoryCheckPlanDto();
+ BeanUtil.copyProperties(stockInventoryCheckPlan, stockInventoryCheckPlanDto);
+ List<StockInventoryCheckProduct> stockInventoryCheckProducts = stockInventoryCheckProductMapper.selectList(new LambdaQueryWrapper<StockInventoryCheckProduct>().eq(StockInventoryCheckProduct::getInventoryCheckPlanId, id));
+ stockInventoryCheckPlanDto.setItems(stockInventoryCheckProducts);
+ BigDecimal totalQuantity = stockInventoryCheckPlanDto.getItems().stream()
+ .peek(item -> {
+ item.setInventoryCheckPlanId(stockInventoryCheckPlanDto.getId());
+ List<StockInventory> list = stockInventoryService.list(new LambdaQueryWrapper<StockInventory>().eq(StockInventory::getProductModelId, item.getProductModelId()));
+ BigDecimal systemQty = list.stream()
+ .map(StockInventory::getQualitity)
+ .filter(Objects::nonNull)
+ .reduce(BigDecimal.ZERO, BigDecimal::add);
+ item.setSystemQuantity(systemQty);
+ })
+ .map(StockInventoryCheckProduct::getSystemQuantity)
+ .filter(Objects::nonNull)
+ .reduce(BigDecimal.ZERO, BigDecimal::add);
+ //鏂板搴撳瓨鐩樼偣
+ ArrayList<StockInventoryCheckItemDto> stockInventoryCheckItemDtos = new ArrayList<>();
+ StockInventoryCheckMainDto stockInventoryCheckMainDto = new StockInventoryCheckMainDto();
+ stockInventoryCheckMainDto.setCheckType("1");
+ stockInventoryCheckMainDto.setTotalQuantity(totalQuantity);
+ stockInventoryCheckMainDto.setSourceType("1");
+ stockInventoryCheckMainDto.setSourceId(stockInventoryCheckPlanDto.getId());
+ stockInventoryCheckMainDto.setStatus(0);
+ stockInventoryCheckPlanDto.getItems().forEach(item -> {
+ List<StockInventoryDto> list = stockInventoryService.selectStockInvenrory(item.getProductModelId());
+ //閿佸畾搴撳瓨
+ list.forEach(inventory -> {
+ inventory.setLocked(true);
+ stockInventoryService.updateById(inventory);
+ });
+ for (StockInventoryDto stockInventory : list) {
+ StockInventoryCheckItemDto stockInventoryCheckItemDto = new StockInventoryCheckItemDto();
+ stockInventoryCheckItemDto.setProductModelId(stockInventory.getProductModelId());
+ stockInventoryCheckItemDto.setBatchNo(stockInventory.getBatchNo());
+ stockInventoryCheckItemDto.setSystemQuantity(stockInventory.getQualitity());
+ stockInventoryCheckItemDto.setModel(stockInventory.getModel());
+ stockInventoryCheckItemDto.setUnit(stockInventory.getUnit());
+ stockInventoryCheckItemDto.setProductName(stockInventory.getProductName());
+ stockInventoryCheckItemDtos.add(stockInventoryCheckItemDto);
+ }
+ });
+ stockInventoryCheckMainDto.setStockInventoryCheckItemDtos(stockInventoryCheckItemDtos);
+ stockInventoryCheckMainService.add(stockInventoryCheckMainDto);
+ stockInventoryCheckPlan.setStatus(1);
+ this.updateById(stockInventoryCheckPlan);
+ return R.ok();
+ }
+
+ @Override
+ public R end(StockInventoryCheckPlanDto stockInventoryCheckPlanDto) {
+ StockInventoryCheckPlan plan = this.getById(stockInventoryCheckPlanDto.getId());
+ if (plan == null) {
+ return R.fail("鐩樼偣鍗曚笉瀛樺湪");
+ }
+ for (StockInventoryCheckItem item : stockInventoryCheckPlanDto.getCheckItems()) {
+ if (item.getDifferenceQuantity() == null || item.getDifferenceQuantity().compareTo(BigDecimal.ZERO) == 0) {
+ continue;
+ }
+ StockInventoryDto stockInventoryDto = new StockInventoryDto();
+ stockInventoryDto.setProductModelId(item.getProductModelId());
+ stockInventoryDto.setBatchNo(item.getBatchNo());
+ stockInventoryDto.setQualitity(item.getDifferenceQuantity());
+ stockInventoryDto.setRecordId(stockInventoryCheckPlanDto.getId());
+
+ if (item.getDifferenceQuantity().compareTo(BigDecimal.ZERO) > 0) {
+ stockInventoryDto.setRecordType(StockInQualifiedRecordTypeEnum.INVENTORY_CHECK_STOCK_OUT.getCode());
+ StockInRecordDto stockInRecordDto = stockUtils.addStockWithBatchNo(stockInventoryDto.getProductModelId(), stockInventoryDto.getQualitity(), stockInventoryDto.getRecordType(), stockInventoryDto.getRecordId(), stockInventoryDto.getBatchNo());
+ //鐩存帴瀹℃牳閫氳繃
+ stockInRecordService.batchApprove(Collections.singletonList(stockInRecordDto.getId()), 1);
+ }else {
+ stockInventoryDto.setRecordType(StockInQualifiedRecordTypeEnum.INVENTORY_CHECK_STOCK_IN.getCode());
+ StockOutRecordDto stockOutRecordDto = stockUtils.substractStock(stockInventoryDto.getProductModelId(), stockInventoryDto.getQualitity(), stockInventoryDto.getRecordType(), stockInventoryDto.getRecordId(), stockInventoryDto.getBatchNo());
+ //鐩存帴瀹℃牳閫氳繃
+ stockOutRecordService.batchApprove(Collections.singletonList(stockOutRecordDto.getId()), 1);
+
+ }
+ }
+ stockInventoryCheckItemMapper.updateById(stockInventoryCheckPlanDto.getCheckItems());
+ plan.setStatus(2);
+ this.updateById(plan);
+ return R.ok("鐩樼偣瀹屾垚锛屽簱瀛樺凡璋冩暣");
+ }
+
+ @Override
+ public StockInventoryCheckPlanDto detail(Long id) {
+ StockInventoryCheckPlan byId = this.getById(id);
+ if (byId == null) {
+ return null;
+ }
+ StockInventoryCheckPlanDto stockInventoryCheckPlanDto = new StockInventoryCheckPlanDto();
+ BeanUtil.copyProperties(byId, stockInventoryCheckPlanDto);
+
+ List<StockInventoryCheckProduct> items = stockInventoryCheckProductMapper.selectList(
+ new LambdaQueryWrapper<StockInventoryCheckProduct>()
+ .eq(StockInventoryCheckProduct::getInventoryCheckPlanId, id));
+ stockInventoryCheckPlanDto.setItems(items);
+
+ StockInventoryCheckMain checkMain = stockInventoryCheckMainService.getOne(
+ new LambdaQueryWrapper<StockInventoryCheckMain>()
+ .eq(StockInventoryCheckMain::getSourceId, id));
+
+ if (checkMain != null) {
+ List<StockInventoryCheckItem> checkItems = stockInventoryCheckItemMapper.selectList(
+ new LambdaQueryWrapper<StockInventoryCheckItem>()
+ .eq(StockInventoryCheckItem::getMainId, checkMain.getId()));
+ stockInventoryCheckPlanDto.setCheckItems(checkItems);
+ }
+
+ return stockInventoryCheckPlanDto;
+ }
+
+ @Override
+ public R add(StockInventoryCheckPlanDto stockInventoryCheckPlanDto) {
+ SysUser sysUser = sysUserMapper.selectUserById(stockInventoryCheckPlanDto.getCheckerId());
+ stockInventoryCheckPlanDto.setCheckerName(sysUser.getNickName());
+ //鐢熸垚鐩樼偣璁″垝缂栧彿
+ if (ObjectUtils.isEmpty(stockInventoryCheckPlanDto.getPlanNo())) {
+ stockInventoryCheckPlanDto.setPlanNo(OrderUtils.countTodayByCreateTime(
+ stockInventoryCheckPlanMapper, "PD", "plan_no"));
+ }
+ //鏂板璁″垝
+ this.save(stockInventoryCheckPlanDto);
+ //璁剧疆鐩樼偣鍟嗗搧鍏宠仈ID骞舵煡璇㈢郴缁熷簱瀛�
+ stockInventoryCheckPlanDto.getItems().forEach(item -> {
+ item.setInventoryCheckPlanId(stockInventoryCheckPlanDto.getId());
+ List<StockInventory> list = stockInventoryService.list(new LambdaQueryWrapper<StockInventory>().eq(StockInventory::getProductModelId, item.getProductModelId()));
+ BigDecimal systemQty = list.stream()
+ .map(StockInventory::getQualitity)
+ .filter(Objects::nonNull)
+ .reduce(BigDecimal.ZERO, BigDecimal::add);
+ item.setSystemQuantity(systemQty);
+ });
+ //鏂板鐩樼偣鍟嗗搧
+ stockInventoryCheckProductMapper.insert(stockInventoryCheckPlanDto.getItems());
+ return R.ok();
+ }
+
+ @Override
+ public R edit(StockInventoryCheckPlanDto stockInventoryCheckPlanDto) {
+ SysUser sysUser = sysUserMapper.selectUserById(stockInventoryCheckPlanDto.getCheckerId());
+ stockInventoryCheckPlanDto.setCheckerName(sysUser.getNickName());
+ //璧嬪��
+ //璁剧疆鐩樼偣鍟嗗搧鍏宠仈ID骞舵煡璇㈢郴缁熷簱瀛�
+ stockInventoryCheckPlanDto.getItems().forEach(item -> {
+ item.setInventoryCheckPlanId(stockInventoryCheckPlanDto.getId());
+ List<StockInventory> list = stockInventoryService.list(new LambdaQueryWrapper<StockInventory>().eq(StockInventory::getProductModelId, item.getProductModelId()));
+ BigDecimal systemQty = list.stream()
+ .map(StockInventory::getQualitity)
+ .filter(Objects::nonNull)
+ .reduce(BigDecimal.ZERO, BigDecimal::add);
+ item.setSystemQuantity(systemQty);
+ });
+ //鏇存柊鎴栨柊澧�
+ stockInventoryCheckProductMapper.insertOrUpdate(stockInventoryCheckPlanDto.getItems());
+ return R.ok(this.updateById(stockInventoryCheckPlanDto));
+ }
+
+ @Override
+ public R delete(List<Long> ids) {
+ List<StockInventoryCheckPlan> list = this.list(new LambdaQueryWrapper<StockInventoryCheckPlan>().in(StockInventoryCheckPlan::getId, ids));
+ boolean hasNonZeroStatus = list.stream().anyMatch(plan -> plan.getStatus() != null && plan.getStatus() != 0);
+ if (hasNonZeroStatus) {
+ return R.fail("瀛樺湪宸叉墽琛屾垨鑰呮鍦ㄦ墽琛岀殑鐩樼偣璁″垝锛屼笉鍏佽鍒犻櫎");
+ }
+ return R.ok(this.removeByIds(ids));
+ }
+
+
+}
diff --git a/src/main/java/com/ruoyi/stock/service/impl/StockInventoryCheckProductServiceImpl.java b/src/main/java/com/ruoyi/stock/service/impl/StockInventoryCheckProductServiceImpl.java
new file mode 100644
index 0000000..88964a3
--- /dev/null
+++ b/src/main/java/com/ruoyi/stock/service/impl/StockInventoryCheckProductServiceImpl.java
@@ -0,0 +1,20 @@
+package com.ruoyi.stock.service.impl;
+
+import com.ruoyi.stock.pojo.StockInventoryCheckProduct;
+import com.ruoyi.stock.mapper.StockInventoryCheckProductMapper;
+import com.ruoyi.stock.service.StockInventoryCheckProductService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 搴撳瓨鐩樼偣鍟嗗搧琛� 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-05-09 02:04:26
+ */
+@Service
+public class StockInventoryCheckProductServiceImpl extends ServiceImpl<StockInventoryCheckProductMapper, StockInventoryCheckProduct> implements StockInventoryCheckProductService {
+
+}
diff --git a/src/main/java/com/ruoyi/stock/service/impl/StockInventoryServiceImpl.java b/src/main/java/com/ruoyi/stock/service/impl/StockInventoryServiceImpl.java
index d712518..316029b 100644
--- a/src/main/java/com/ruoyi/stock/service/impl/StockInventoryServiceImpl.java
+++ b/src/main/java/com/ruoyi/stock/service/impl/StockInventoryServiceImpl.java
@@ -115,7 +115,7 @@
//鍑哄簱璋冪敤
@Override
@Transactional(rollbackFor = Exception.class)
- public Boolean subtractStockInventory(StockInventoryDto stockInventoryDto) {
+ public StockOutRecordDto subtractStockInventory(StockInventoryDto stockInventoryDto) {
LambdaQueryWrapper<StockInventory> eq = new QueryWrapper<StockInventory>().lambda()
.eq(StockInventory::getProductModelId, stockInventoryDto.getProductModelId());
if (StringUtils.isEmpty(stockInventoryDto.getBatchNo())) {
@@ -130,9 +130,11 @@
stockOutRecordDto.setRecordType(stockInventoryDto.getRecordType());
stockOutRecordDto.setStockOutNum(stockInventoryDto.getQualitity());
stockOutRecordDto.setBatchNo(stockInventoryDto.getBatchNo());
+ stockOutRecordDto.setApprovalStatus(0);
stockOutRecordDto.setProductModelId(stockInventoryDto.getProductModelId());
stockOutRecordDto.setType("0");
- stockOutRecordService.add(stockOutRecordDto);
+ Long id = stockOutRecordService.add(stockOutRecordDto);
+ stockInventoryDto.setId(id);
StockInventory oldStockInventory = stockInventoryMapper.selectOne(eq);
@@ -148,12 +150,12 @@
}
stockInventoryMapper.updateSubtractStockInventory(stockInventoryDto);
- return true;
+ return stockOutRecordDto;
}
@Override
@Transactional(rollbackFor = Exception.class)
- public Boolean addStockInRecordOnly(StockInventoryDto stockInventoryDto) {
+ public StockInRecordDto addStockInRecordOnly(StockInventoryDto stockInventoryDto) {
String batchNo = StringUtils.trim(stockInventoryDto.getBatchNo());
if (StringUtils.isEmpty(batchNo)) {
batchNo = generateAutoBatchNo(stockInventoryDto.getProductModelId());
@@ -165,11 +167,13 @@
stockInRecordDto.setRecordType(stockInventoryDto.getRecordType());
stockInRecordDto.setStockInNum(stockInventoryDto.getQualitity());
stockInRecordDto.setBatchNo(batchNo);
+ stockInRecordDto.setApprovalStatus(0);
stockInRecordDto.setProductModelId(stockInventoryDto.getProductModelId());
stockInRecordDto.setType("0");
stockInRecordDto.setRemark(stockInventoryDto.getRemark());
- stockInRecordService.add(stockInRecordDto);
- return true;
+ Long add = stockInRecordService.add(stockInRecordDto);
+ stockInRecordDto.setId( add);
+ return stockInRecordDto;
}
//瑙勫垯鐢熸垚锛�20260424-浜у搧缂栧彿-001
@@ -434,4 +438,14 @@
public List<StockInventory> getByModelId(Long modelId) {
return stockInventoryMapper.getByModelId(modelId);
}
+
+ @Override
+ public List<StockInventoryDto> selectStockInvenrory(Long productModelId) {
+ return stockInventoryMapper.selectStockInvenrory(productModelId);
+ }
+
+ @Override
+ public IPage<StockInventoryDto> pagestockInventoryNoQua(Page page, StockInventoryDto stockInventoryDto) {
+ return stockInventoryMapper.pagestockInventoryNoQua(page, stockInventoryDto);
+ }
}
diff --git a/src/main/java/com/ruoyi/stock/service/impl/StockOutRecordServiceImpl.java b/src/main/java/com/ruoyi/stock/service/impl/StockOutRecordServiceImpl.java
index cead7fc..268a081 100644
--- a/src/main/java/com/ruoyi/stock/service/impl/StockOutRecordServiceImpl.java
+++ b/src/main/java/com/ruoyi/stock/service/impl/StockOutRecordServiceImpl.java
@@ -5,8 +5,8 @@
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.common.enums.ReviewStatusEnum;
-import com.ruoyi.common.enums.StockOutQualifiedRecordTypeEnum;
import com.ruoyi.common.enums.StockInUnQualifiedRecordTypeEnum;
+import com.ruoyi.common.enums.StockOutQualifiedRecordTypeEnum;
import com.ruoyi.common.exception.base.BaseException;
import com.ruoyi.common.utils.EnumUtil;
import com.ruoyi.common.utils.OrderUtils;
@@ -25,14 +25,12 @@
import com.ruoyi.stock.pojo.StockOutRecord;
import com.ruoyi.stock.pojo.StockUninventory;
import com.ruoyi.stock.service.StockOutRecordService;
-import lombok.AllArgsConstructor;
+import jakarta.servlet.http.HttpServletResponse;
import lombok.RequiredArgsConstructor;
-import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
-import jakarta.servlet.http.HttpServletResponse;
import java.util.List;
/**
@@ -56,12 +54,13 @@
}
@Override
- public int add(StockOutRecordDto stockOutRecordDto) {
+ public Long add(StockOutRecordDto stockOutRecordDto) {
String no = OrderUtils.countTodayByCreateTime(stockOutRecordMapper, "CK","outbound_batches");
stockOutRecordDto.setOutboundBatches(no);
StockInRecord stockInRecord = new StockInRecord();
BeanUtils.copyProperties(stockOutRecordDto, stockInRecord);
- return stockOutRecordMapper.insert(stockOutRecordDto);
+ stockOutRecordMapper.insert(stockOutRecordDto);
+ return stockOutRecordDto.getId();
}
@Override
diff --git a/src/main/resources/mapper/basic/ProductModelMapper.xml b/src/main/resources/mapper/basic/ProductModelMapper.xml
index 0a540bf..bd388fb 100644
--- a/src/main/resources/mapper/basic/ProductModelMapper.xml
+++ b/src/main/resources/mapper/basic/ProductModelMapper.xml
@@ -140,5 +140,18 @@
left join product p on p.id = pm.product_id
order by p.id,pm.id desc
</select>
+ <select id="selectModelByIds" resultType="com.ruoyi.basic.dto.ProductModelDto">
+ select pm.model,p.product_name,pm.unit
+ from product_model pm
+ left join product p on pm.product_id = p.id
+ <where>
+ <if test="list != null and list.size() > 0">
+ and pm.id in
+ <foreach item="item" collection="list" separator="," open="(" close=")" index="index">
+ #{item}
+ </foreach>
+ </if>
+ </where>
+ </select>
</mapper>
diff --git a/src/main/resources/mapper/stock/StockInventoryCheckItemMapper.xml b/src/main/resources/mapper/stock/StockInventoryCheckItemMapper.xml
new file mode 100644
index 0000000..cc3888e
--- /dev/null
+++ b/src/main/resources/mapper/stock/StockInventoryCheckItemMapper.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.stock.mapper.StockInventoryCheckItemMapper">
+
+ <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+ <resultMap id="BaseResultMap" type="com.ruoyi.stock.pojo.StockInventoryCheckItem">
+ <id column="id" property="id" />
+ <result column="main_id" property="mainId" />
+ <result column="product_id" property="productId" />
+ <result column="product_code" property="productCode" />
+ <result column="product_name" property="productName" />
+ <result column="specification" property="specification" />
+ <result column="unit" property="unit" />
+ <result column="batch_no" property="batchNo" />
+ <result column="system_quantity" property="systemQuantity" />
+ <result column="actual_quantity" property="actualQuantity" />
+ <result column="difference_quantity" property="differenceQuantity" />
+ <result column="cost_price" property="costPrice" />
+ <result column="total_cost" property="totalCost" />
+ <result column="difference_amount" property="differenceAmount" />
+ <result column="remark" property="remark" />
+ <result column="create_time" property="createTime" />
+ <result column="update_time" property="updateTime" />
+ </resultMap>
+
+</mapper>
diff --git a/src/main/resources/mapper/stock/StockInventoryCheckMainMapper.xml b/src/main/resources/mapper/stock/StockInventoryCheckMainMapper.xml
new file mode 100644
index 0000000..475a189
--- /dev/null
+++ b/src/main/resources/mapper/stock/StockInventoryCheckMainMapper.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.stock.mapper.StockInventoryCheckMainMapper">
+
+ <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+ <resultMap id="BaseResultMap" type="com.ruoyi.stock.pojo.StockInventoryCheckMain">
+ <id column="id" property="id" />
+ <result column="check_no" property="checkNo" />
+ <result column="check_type" property="checkType" />
+ <result column="warehouse_id" property="warehouseId" />
+ <result column="warehouse_name" property="warehouseName" />
+ <result column="total_quantity" property="totalQuantity" />
+ <result column="total_amount" property="totalAmount" />
+ <result column="source_type" property="sourceType" />
+ <result column="source_id" property="sourceId" />
+ <result column="status" property="status" />
+ <result column="check_date" property="checkDate" />
+ <result column="responsible_person_id" property="responsiblePersonId" />
+ <result column="responsible_person_name" property="responsiblePersonName" />
+ <result column="remark" property="remark" />
+ <result column="create_time" property="createTime" />
+ <result column="create_by" property="createBy" />
+ <result column="update_time" property="updateTime" />
+ <result column="update_by" property="updateBy" />
+ <result column="del_flag" property="delFlag" />
+ </resultMap>
+
+</mapper>
diff --git a/src/main/resources/mapper/stock/StockInventoryCheckPlanMapper.xml b/src/main/resources/mapper/stock/StockInventoryCheckPlanMapper.xml
new file mode 100644
index 0000000..1e02e1e
--- /dev/null
+++ b/src/main/resources/mapper/stock/StockInventoryCheckPlanMapper.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.stock.mapper.StockInventoryCheckPlanMapper">
+
+ <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+ <resultMap id="BaseResultMap" type="com.ruoyi.stock.pojo.StockInventoryCheckPlan">
+ <id column="id" property="id" />
+ <result column="plan_no" property="planNo" />
+ <result column="status" property="status" />
+ <result column="create_time" property="createTime" />
+ <result column="update_time" property="updateTime" />
+ <result column="remark" property="remark" />
+ <result column="del_flag" property="delFlag" />
+ </resultMap>
+ <select id="listPage" resultType="com.ruoyi.stock.dto.StockInventoryCheckPlanDto">
+ select stock_inventory_check_plan.* ,sys_user.nick_name as create_by from
+ stock_inventory_check_plan
+ left join sys_user on stock_inventory_check_plan.create_user = sys_user.user_id
+ <where>
+ <if test="ew.planNo != null and ew.planNo != ''">
+ and plan_no like concat('%',#{ew.planNo},'%')
+ </if>
+ <if test="ew.status != null">
+ and status = #{ew.status}
+ </if>
+ <if test="ew.startTime != null">
+ and plan_date_start between #{ew.startTime} and #{ew.endTime}
+ </if>
+ </where>
+ </select>
+
+</mapper>
diff --git a/src/main/resources/mapper/stock/StockInventoryCheckProductMapper.xml b/src/main/resources/mapper/stock/StockInventoryCheckProductMapper.xml
new file mode 100644
index 0000000..6f228e7
--- /dev/null
+++ b/src/main/resources/mapper/stock/StockInventoryCheckProductMapper.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.stock.mapper.StockInventoryCheckProductMapper">
+
+ <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+ <resultMap id="BaseResultMap" type="com.ruoyi.stock.pojo.StockInventoryCheckProduct">
+ <id column="id" property="id" />
+ <result column="product_id" property="productId" />
+ <result column="product_name" property="productName" />
+ <result column="model" property="model" />
+ <result column="unit" property="unit" />
+ <result column="system_qty" property="systemQty" />
+ </resultMap>
+
+</mapper>
diff --git a/src/main/resources/mapper/stock/StockInventoryMapper.xml b/src/main/resources/mapper/stock/StockInventoryMapper.xml
index 60fc90e..e8473ca 100644
--- a/src/main/resources/mapper/stock/StockInventoryMapper.xml
+++ b/src/main/resources/mapper/stock/StockInventoryMapper.xml
@@ -460,5 +460,34 @@
group by stock_inventory_id) as sd on sd.stock_inventory_id = spd.id
where product_model_id = #{productModelId}
</select>
+ <select id="selectStockInvenrory" resultType="com.ruoyi.stock.dto.StockInventoryDto">
+ select spd.id, spd.batch_no,pm.model,pm.unit,p.product_name, spd.qualitity,spd.product_model_id
+ from stock_inventory spd
+ left join product_model pm on pm.id = spd.product_model_id
+ left join product p on p.id = pm.product_id
+ where product_model_id = #{productModelId}
+ </select>
+ <select id="pagestockInventoryNoQua" resultType="com.ruoyi.stock.dto.StockInventoryDto">
+ select
+ si.product_model_id,
+ pm.model ,
+ pm.unit,
+ p.product_name
+ from stock_inventory si
+ left join product_model pm on si.product_model_id = pm.id
+ left join product p on pm.product_id = p.id
+ where 1 = 1
+ <if test="ew.productName != null and ew.productName !=''">
+ and p.product_name like concat('%',#{ew.productName},'%')
+ </if>
+ <if test="ew.model != null and ew.model !=''">
+ and pm.model like concat('%',#{ew.model},'%')
+ </if>
+ group by si.product_model_id,
+ pm.model,
+ pm.unit,
+ p.product_name
+ </select>
+
</mapper>
--
Gitblit v1.9.3