From c7cf13da4cd96a76771475b8e4c364dfddebf712 Mon Sep 17 00:00:00 2001
From: liyong <18434998025@163.com>
Date: 星期五, 23 一月 2026 11:09:33 +0800
Subject: [PATCH] feat(sales): 库存
---
src/main/java/com/ruoyi/stock/service/impl/StockUninventoryServiceImpl.java | 2
src/main/java/com/ruoyi/common/utils/EnumUtil.java | 107 +++++++++++++++++
src/main/java/com/ruoyi/stock/service/impl/StockOutRecordServiceImpl.java | 5
src/main/java/com/ruoyi/common/enums/StockRecordTypeEnum.java | 30 +++++
src/main/java/com/ruoyi/basic/controller/EnumController.java | 29 ++++
src/main/java/com/ruoyi/common/enums/BaseEnum.java | 58 +++++++++
src/main/java/com/ruoyi/procurementrecord/utils/StockUtils.java | 71 +++++++++++
src/main/java/com/ruoyi/stock/service/impl/StockInRecordServiceImpl.java | 6
src/main/java/com/ruoyi/stock/service/impl/StockInventoryServiceImpl.java | 6
9 files changed, 304 insertions(+), 10 deletions(-)
diff --git a/src/main/java/com/ruoyi/basic/controller/EnumController.java b/src/main/java/com/ruoyi/basic/controller/EnumController.java
new file mode 100644
index 0000000..8091ac9
--- /dev/null
+++ b/src/main/java/com/ruoyi/basic/controller/EnumController.java
@@ -0,0 +1,29 @@
+package com.ruoyi.basic.controller;
+
+import com.ruoyi.common.enums.StockRecordTypeEnum;
+import com.ruoyi.common.utils.EnumUtil;
+import com.ruoyi.framework.aspectj.lang.annotation.Anonymous;
+import com.ruoyi.framework.web.domain.R;
+import io.swagger.annotations.Api;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+@RestController
+@Api(tags = "鏋氫妇鎺ュ彛")
+@RequestMapping("/basic/enum")
+public class EnumController {
+
+
+ //鑾峰彇搴撳瓨鏋氫妇
+ @GetMapping("/stockRecordType")
+ @Anonymous
+ public R getStockRecordTypeEnum(){
+ List<Map<String, Object>> list = EnumUtil.toList(StockRecordTypeEnum.class);
+ return R.ok(list);
+ }
+}
diff --git a/src/main/java/com/ruoyi/common/enums/BaseEnum.java b/src/main/java/com/ruoyi/common/enums/BaseEnum.java
new file mode 100644
index 0000000..cb6311c
--- /dev/null
+++ b/src/main/java/com/ruoyi/common/enums/BaseEnum.java
@@ -0,0 +1,58 @@
+package com.ruoyi.common.enums;
+
+
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonValue;
+
+public interface BaseEnum {
+ @JsonValue
+ Integer getCode();
+
+ String getValue();
+
+ /**
+ * 閫氱敤闈欐�佸伐鍏锋柟娉曪紙鍙鎵�鏈夋灇涓捐皟鐢級
+ */
+ /**
+ * 閫氱敤闈欐�佸伐鍏锋柟娉曪細鏀寔浠� Integer 鎴� String 绫诲瀷鐨� Code 杩涜鍙嶅簭鍒楀寲
+ */
+ @JsonCreator(mode = JsonCreator.Mode.DELEGATING)
+ static <E extends Enum<E> & BaseEnum> E fromCode(Class<E> enumClass, Object code) {
+ if (code == null) {
+ return null;
+ }
+
+ // 鐩爣 Code 鐨勬暣鏁板��
+ Integer targetCode = null;
+
+ if (code instanceof Integer) {
+ // 1. 濡傛灉浼犲叆鐨勬槸鏁板瓧 (Integer)
+ targetCode = (Integer) code;
+ } else if (code instanceof String) {
+ // 2. 濡傛灉浼犲叆鐨勬槸瀛楃涓� ("1")
+ try {
+ // 灏濊瘯灏嗗瓧绗︿覆杞崲涓烘暣鏁�
+ targetCode = Integer.valueOf((String) code);
+ } catch (NumberFormatException e) {
+ // 濡傛灉瀛楃涓蹭笉鏄湁鏁堢殑鏁板瓧锛堜緥濡� "Unknown"锛夛紝鍒� targetCode 淇濇寔涓� null
+ // 鎮ㄤ篃鍙互鍦ㄨ繖閲岃褰曟棩蹇楁垨鎵ц鍏朵粬閿欒澶勭悊
+ // System.err.println("鏃犳硶灏嗗瓧绗︿覆 Code 杞崲涓烘暟瀛�: " + code);
+ return null; // 鎴栬�呭湪鎵句笉鍒板尮閰嶇殑鎯呭喌涓嬭繑鍥� null
+ }
+ }
+ // else if (code instanceof Long) { ... 鎮ㄤ篃鍙互娣诲姞瀵� Long 绫诲瀷鐨勬敮鎸� }
+
+ if (targetCode == null) {
+ return null;
+ }
+
+ // 浣跨敤鑾峰彇鍒扮殑鏁存暟鍊艰繘琛屾煡鎵�
+ for (E e : enumClass.getEnumConstants()) {
+ if (e.getCode().equals(targetCode)) {
+ return e;
+ }
+ }
+ return null;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/ruoyi/common/enums/StockRecordTypeEnum.java b/src/main/java/com/ruoyi/common/enums/StockRecordTypeEnum.java
new file mode 100644
index 0000000..bae2856
--- /dev/null
+++ b/src/main/java/com/ruoyi/common/enums/StockRecordTypeEnum.java
@@ -0,0 +1,30 @@
+package com.ruoyi.common.enums;
+
+import lombok.Getter;
+
+/**
+ * @author buhuazhen
+ * @date 2025/11/3
+ * @email 3038525872@qq.com
+ */
+@Getter
+public enum StockRecordTypeEnum implements BaseEnum {
+ CUSTOMIZATION_STOCK_IN(0, "鑷畾涔夊叆搴�"),
+ CUSTOMIZATION_STOCK_OUT(1, "鑷畾涔夊嚭搴�"),
+ PRODUCTION_REPORT_STOCK_IN(2, "鐢熶骇鎶ュ伐-鍏ュ簱"),
+ PRODUCTION_REPORT_STOCK_OUT(3, "鐢熶骇鎶ュ伐-鍑哄簱"),
+ PRODUCTION_SCRAP(4, "鐢熶骇鎶ュ伐-鎶ュ簾"),
+ DEFECTIVE_SCRAP(5, "涓嶅悎鏍煎鐞�-鎶ュ簾"),
+ DEFECTIVE_PASS(6, "涓嶅悎鏍煎鐞�-璁╂鏀捐"),
+ PURCHASE_STOCK_IN(7, "閲囪喘-鍏ュ簱"),
+ SALE_STOCK_OUT(8, "閿�鍞�-鍑哄簱");
+
+ private final Integer code;
+ private final String value;
+
+ StockRecordTypeEnum(Integer code, String value) {
+ this.code = code;
+ this.value = value;
+ }
+
+}
diff --git a/src/main/java/com/ruoyi/common/utils/EnumUtil.java b/src/main/java/com/ruoyi/common/utils/EnumUtil.java
new file mode 100644
index 0000000..75be83a
--- /dev/null
+++ b/src/main/java/com/ruoyi/common/utils/EnumUtil.java
@@ -0,0 +1,107 @@
+package com.ruoyi.common.utils;
+
+
+import com.ruoyi.common.enums.BaseEnum;
+import com.ruoyi.common.enums.StockRecordTypeEnum;
+
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * 閫氱敤鏋氫妇宸ュ叿绫�
+ * 閫傜敤浜庢墍鏈夊疄鐜� BaseEnum 鎺ュ彛鐨勬灇涓�
+ *
+ * @author Bu
+ */
+public class EnumUtil {
+
+ /**
+ * 鏍规嵁 code 鑾峰彇鏋氫妇瀹炰緥
+ */
+ public static <E extends Enum<E> & BaseEnum> E fromCode(Class<E> enumClass, int code) {
+ for (E e : enumClass.getEnumConstants()) {
+ if (e.getCode() == code) {
+ return e;
+ }
+ }
+ throw new IllegalArgumentException("鏈煡鐨� code: " + code + " 瀵逛簬鏋氫妇 " + enumClass.getSimpleName());
+ }
+
+ public static <E extends Enum<E> & BaseEnum> E fromCodeHasNull(Class<E> enumClass, int code) {
+ for (E e : enumClass.getEnumConstants()) {
+ if (e.getCode() == code) {
+ return e;
+ }
+ }
+ return null;
+ }
+
+ public static <E extends Enum<E> & BaseEnum> E fromCodeHasDefault(Class<E> enumClass, int code,E defaultE) {
+ for (E e : enumClass.getEnumConstants()) {
+ if (e.getCode() == code) {
+ return e;
+ }
+ }
+ return defaultE;
+ }
+
+
+
+ /**
+ * 鏍规嵁 value 鑾峰彇鏋氫妇瀹炰緥
+ */
+ public static <E extends Enum<E> & BaseEnum> E fromValue(Class<E> enumClass, String value) {
+ for (E e : enumClass.getEnumConstants()) {
+ if (Objects.equals(e.getValue(), value)) {
+ return e;
+ }
+ }
+ throw new IllegalArgumentException("鏈煡鐨� value: " + value + " 瀵逛簬鏋氫妇 " + enumClass.getSimpleName());
+ }
+
+ /**
+ * 鑾峰彇鎵�鏈夋灇涓鹃」鍒楄〃
+ */
+ public static <E extends Enum<E> & BaseEnum> List<E> listAll(Class<E> enumClass) {
+ return Arrays.asList(enumClass.getEnumConstants());
+ }
+
+ /**
+ * 杞负 List<Map>锛堥�傚悎杩斿洖缁欏墠绔級
+ * 鏍煎紡: [{ "code": 1, "value": "缁炵嚎" }, ...]
+ */
+ public static <E extends Enum<E> & BaseEnum> List<Map<String, Object>> toList(Class<E> enumClass) {
+ return Arrays.stream(enumClass.getEnumConstants())
+ .map(e -> {
+ Map<String, Object> map = new HashMap<>();
+ map.put("key", e.getCode());
+ map.put("value", e.getValue());
+ return map;
+ })
+ .collect(Collectors.toList());
+ }
+
+ /**
+ * 杞负 Map<Integer, String>
+ * 鏍煎紡: { 1: "缁炵嚎", 0: "鎷変笣" }
+ */
+ public static <E extends Enum<E> & BaseEnum> Map<Integer, String> toMap(Class<E> enumClass) {
+ return Arrays.stream(enumClass.getEnumConstants())
+ .collect(Collectors.toMap(BaseEnum::getCode, BaseEnum::getValue));
+ }
+
+
+ public static void main(String[] args) {
+ // 鉁� 1. 鏍规嵁 code 鑾峰彇鏋氫妇
+ StockRecordTypeEnum status = EnumUtil.fromCode(StockRecordTypeEnum.class, 1);
+ System.out.println(status.getValue()); // 缁炵嚎
+
+ // 鉁� 2. 杞垚 list (閫傚悎鍓嶇)
+ System.out.println(EnumUtil.toList(StockRecordTypeEnum.class));
+ // 杈撳嚭: [{code=1, value=缁炵嚎}, {code=0, value=鎷変笣}]
+
+ // 鉁� 3. 杞垚 map
+ System.out.println(EnumUtil.toMap(StockRecordTypeEnum.class));
+ // 杈撳嚭: {1=缁炵嚎, 0=鎷変笣}
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/ruoyi/procurementrecord/utils/StockUtils.java b/src/main/java/com/ruoyi/procurementrecord/utils/StockUtils.java
index 0d61f87..6d7f6a0 100644
--- a/src/main/java/com/ruoyi/procurementrecord/utils/StockUtils.java
+++ b/src/main/java/com/ruoyi/procurementrecord/utils/StockUtils.java
@@ -2,6 +2,11 @@
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.StockUninventoryDto;
+import com.ruoyi.stock.service.StockInventoryService;
+import com.ruoyi.stock.service.StockUninventoryService;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Component;
@@ -14,6 +19,8 @@
public class StockUtils {
private final ProcurementRecordOutMapper procurementRecordOutMapper;
private final ProcurementRecordMapper procurementRecordMapper;
+ private final StockUninventoryService stockUninventoryService;
+ private final StockInventoryService stockInventoryService;
// 鑾峰彇鍟嗗搧鍏ュ簱鏁伴噺,鍑哄簱鏁伴噺,鍓╀綑搴撳瓨
public Map<String, BigDecimal> getStockQuantity(Long productModelId) {
@@ -29,4 +36,68 @@
stockMap.put("stockQuantity", stockQuantity);
return stockMap;
}
+
+ /**
+ * 涓嶅悎鏍煎叆搴�
+ * @param productModelId
+ * @param quantity
+ * @param recordType
+ * @param recordId
+ */
+ public void addUnStock(Long productModelId, BigDecimal quantity, String recordType,Long recordId) {
+ StockUninventoryDto stockUninventoryDto = new StockUninventoryDto();
+ stockUninventoryDto.setRecordId(recordId);
+ stockUninventoryDto.setRecordType(recordType);
+ stockUninventoryDto.setQualitity(quantity);
+ stockUninventoryDto.setProductModelId(productModelId);
+ stockUninventoryService.addStockUninventory(stockUninventoryDto);
+ }
+
+ /**
+ * 涓嶅悎鏍煎嚭搴�
+ * @param productModelId
+ * @param quantity
+ * @param recordType
+ * @param recordId
+ */
+ public void subtractUnStock(Long productModelId, BigDecimal quantity, String recordType,Long recordId) {
+ StockUninventoryDto stockUninventoryDto = new StockUninventoryDto();
+ stockUninventoryDto.setRecordId(recordId);
+ stockUninventoryDto.setRecordType(recordType);
+ stockUninventoryDto.setQualitity(quantity);
+ stockUninventoryDto.setProductModelId(productModelId);
+ stockUninventoryService.subtractStockUninventory(stockUninventoryDto);
+ }
+
+ /**
+ * 鍚堟牸鍏ュ簱
+ * @param productModelId
+ * @param quantity
+ * @param recordType
+ * @param recordId
+ */
+ public void addStock(Long productModelId, BigDecimal quantity, String recordType,Long recordId) {
+ StockInventoryDto stockInventoryDto = new StockInventoryDto();
+ stockInventoryDto.setRecordId(recordId);
+ stockInventoryDto.setRecordType(recordType);
+ stockInventoryDto.setQualitity(quantity);
+ stockInventoryDto.setProductModelId(productModelId);
+ stockInventoryService.addstockInventory(stockInventoryDto);
+ }
+
+ /**
+ * 鍚堟牸鍑哄簱
+ * @param productModelId
+ * @param quantity
+ * @param recordType
+ * @param recordId
+ */
+ public void substractStock(Long productModelId, BigDecimal quantity, String recordType,Long recordId) {
+ StockInventoryDto stockInventoryDto = new StockInventoryDto();
+ stockInventoryDto.setRecordId(recordId);
+ stockInventoryDto.setRecordType(recordType);
+ stockInventoryDto.setQualitity(quantity);
+ stockInventoryDto.setProductModelId(productModelId);
+ stockInventoryService.subtractStockInventory(stockInventoryDto);
+ }
}
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 ad80bd5..4cef388 100644
--- a/src/main/java/com/ruoyi/stock/service/impl/StockInRecordServiceImpl.java
+++ b/src/main/java/com/ruoyi/stock/service/impl/StockInRecordServiceImpl.java
@@ -18,6 +18,7 @@
import com.ruoyi.stock.pojo.StockInventory;
import com.ruoyi.stock.pojo.StockUninventory;
import com.ruoyi.stock.service.StockInRecordService;
+import lombok.AllArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -25,12 +26,11 @@
import java.util.List;
@Service
+@AllArgsConstructor
public class StockInRecordServiceImpl extends ServiceImpl<StockInRecordMapper, StockInRecord> implements StockInRecordService {
- @Autowired
+
private StockInRecordMapper stockInRecordMapper;
- @Autowired
private StockInventoryMapper stockInventoryMapper;
- @Autowired
private StockUninventoryMapper stockUninventoryMapper;
@Override
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 98a5769..2c29759 100644
--- a/src/main/java/com/ruoyi/stock/service/impl/StockInventoryServiceImpl.java
+++ b/src/main/java/com/ruoyi/stock/service/impl/StockInventoryServiceImpl.java
@@ -15,6 +15,7 @@
import com.ruoyi.stock.service.StockInventoryService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.stock.service.StockOutRecordService;
+import lombok.AllArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -28,14 +29,11 @@
* @since 2026-01-21 04:16:36
*/
@Service
+@AllArgsConstructor
public class StockInventoryServiceImpl extends ServiceImpl<StockInventoryMapper, StockInventory> implements StockInventoryService {
- @Autowired
private StockInventoryMapper stockInventoryMapper;
-
- @Autowired
private StockInRecordService stockInRecordService;
- @Autowired
private StockOutRecordService stockOutRecordService;
@Override
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 420e6e2..a9c48ed 100644
--- a/src/main/java/com/ruoyi/stock/service/impl/StockOutRecordServiceImpl.java
+++ b/src/main/java/com/ruoyi/stock/service/impl/StockOutRecordServiceImpl.java
@@ -18,6 +18,7 @@
import com.ruoyi.stock.pojo.StockOutRecord;
import com.ruoyi.stock.pojo.StockUninventory;
import com.ruoyi.stock.service.StockOutRecordService;
+import lombok.AllArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -32,12 +33,10 @@
* @since 2026-01-21 05:27:04
*/
@Service
+@AllArgsConstructor
public class StockOutRecordServiceImpl extends ServiceImpl<StockOutRecordMapper, StockOutRecord> implements StockOutRecordService {
- @Autowired
private StockOutRecordMapper stockOutRecordMapper;
- @Autowired
private StockInventoryMapper stockInventoryMapper;
- @Autowired
private StockUninventoryMapper stockUninventoryMapper;
@Override
diff --git a/src/main/java/com/ruoyi/stock/service/impl/StockUninventoryServiceImpl.java b/src/main/java/com/ruoyi/stock/service/impl/StockUninventoryServiceImpl.java
index 06096c5..f0755f0 100644
--- a/src/main/java/com/ruoyi/stock/service/impl/StockUninventoryServiceImpl.java
+++ b/src/main/java/com/ruoyi/stock/service/impl/StockUninventoryServiceImpl.java
@@ -14,6 +14,7 @@
import com.ruoyi.stock.service.StockOutRecordService;
import com.ruoyi.stock.service.StockUninventoryService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import lombok.AllArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -26,6 +27,7 @@
* @since 2026-01-22 10:17:45
*/
@Service
+@AllArgsConstructor
public class StockUninventoryServiceImpl extends ServiceImpl<StockUninventoryMapper, StockUninventory> implements StockUninventoryService {
private StockUninventoryMapper stockUninventoryMapper;
--
Gitblit v1.9.3