From 32b536caa833c1861c6f273d78d7202206445b74 Mon Sep 17 00:00:00 2001
From: liyong <18434998025@163.com>
Date: 星期五, 23 一月 2026 15:22:01 +0800
Subject: [PATCH] feat(stock): 库存导入接口开发
---
src/main/java/com/ruoyi/stock/service/StockInventoryService.java | 2
src/main/java/com/ruoyi/stock/execl/StockInventoryExportData.java | 19 +++++++++
src/main/resources/mapper/sales/SalesLedgerProductMapper.xml | 17 +++++++-
src/main/java/com/ruoyi/sales/pojo/SalesLedgerProduct.java | 3 +
src/main/java/com/ruoyi/sales/controller/SalesLedgerProductController.java | 14 ++++---
src/main/java/com/ruoyi/sales/mapper/SalesLedgerProductMapper.java | 2 +
src/main/java/com/ruoyi/stock/controller/StockInventoryController.java | 18 ++++++++
src/main/java/com/ruoyi/stock/service/impl/StockInventoryServiceImpl.java | 31 +++++++++++----
8 files changed, 88 insertions(+), 18 deletions(-)
diff --git a/src/main/java/com/ruoyi/sales/controller/SalesLedgerProductController.java b/src/main/java/com/ruoyi/sales/controller/SalesLedgerProductController.java
index 79e6cb5..8632313 100644
--- a/src/main/java/com/ruoyi/sales/controller/SalesLedgerProductController.java
+++ b/src/main/java/com/ruoyi/sales/controller/SalesLedgerProductController.java
@@ -86,14 +86,16 @@
// procurementDto.setSalesLedgerProductId(item.getId());
// procurementDto.setProductCategory(item.getProductCategory());
// IPage<ProcurementPageDtoCopy> result = procurementRecordService.listPageCopyByProduction(new Page<>(1,-1), procurementDto);
- BigDecimal stockQuantity = stockUtils.getStockQuantity(item.getProductModelId()).get("stockQuantity");
- if(stockQuantity != null) {
+// BigDecimal stockQuantity = stockUtils.getStockQuantity(item.getProductModelId()).get("stockQuantity");
+
// ProcurementPageDtoCopy procurementDtoCopy = result.getRecords().get(0);
- if (item.getQuantity().compareTo(stockQuantity) <= 0 && item.getApproveStatus() == 0) {
- item.setApproveStatus(1);
- salesLedgerProductService.addOrUpdateSalesLedgerProduct(item);
+ if (item.getApproveStatus() != 2) {
+ if (item.getHasSufficientStock() == 0) {
+ item.setApproveStatus(0);
+ }else {
+ item.setApproveStatus(1);
+ }
}
- }
});
return AjaxResult.success(list);
}
diff --git a/src/main/java/com/ruoyi/sales/mapper/SalesLedgerProductMapper.java b/src/main/java/com/ruoyi/sales/mapper/SalesLedgerProductMapper.java
index 514f6cd..9db21f5 100644
--- a/src/main/java/com/ruoyi/sales/mapper/SalesLedgerProductMapper.java
+++ b/src/main/java/com/ruoyi/sales/mapper/SalesLedgerProductMapper.java
@@ -20,6 +20,8 @@
* @date 2025-05-08
*/
public interface SalesLedgerProductMapper extends MyBaseMapper<SalesLedgerProduct> {
+ List<SalesLedgerProduct> selectProduct() ;
+
List<SalesLedgerProduct> selectSalesLedgerProductList(@Param("salesLedgerProduct") SalesLedgerProduct salesLedgerProduct);
SalesLedgerProduct selectSalesLedgerProductByMainId(@Param("productMainId") Long productMainId);
diff --git a/src/main/java/com/ruoyi/sales/pojo/SalesLedgerProduct.java b/src/main/java/com/ruoyi/sales/pojo/SalesLedgerProduct.java
index 742529c..3deefb0 100644
--- a/src/main/java/com/ruoyi/sales/pojo/SalesLedgerProduct.java
+++ b/src/main/java/com/ruoyi/sales/pojo/SalesLedgerProduct.java
@@ -224,4 +224,7 @@
@ApiModelProperty(value = "鏄惁璐ㄦ")
private Boolean isChecked;
+
+ @TableField(exist = false)
+ private Integer hasSufficientStock;
}
diff --git a/src/main/java/com/ruoyi/stock/controller/StockInventoryController.java b/src/main/java/com/ruoyi/stock/controller/StockInventoryController.java
index 445ac81..8d5db33 100644
--- a/src/main/java/com/ruoyi/stock/controller/StockInventoryController.java
+++ b/src/main/java/com/ruoyi/stock/controller/StockInventoryController.java
@@ -3,14 +3,23 @@
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.common.enums.StockQualifiedRecordTypeEnum;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.compensationperformance.pojo.CompensationPerformance;
+import com.ruoyi.framework.aspectj.lang.annotation.Log;
+import com.ruoyi.framework.aspectj.lang.enums.BusinessType;
import com.ruoyi.framework.web.domain.R;
import com.ruoyi.stock.dto.StockInventoryDto;
+import com.ruoyi.stock.execl.StockInventoryExportData;
import com.ruoyi.stock.service.StockInventoryService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.ArrayList;
+import java.util.List;
/**
* <p>
@@ -56,7 +65,14 @@
@GetMapping("importStockInventory")
@ApiOperation("瀵煎叆搴撳瓨")
public R importStockInventory(MultipartFile file) {
- return R.ok(stockInventoryService.importStockInventory(file));
+ return stockInventoryService.importStockInventory(file);
+ }
+ @Log(title = "涓嬭浇搴撳瓨瀵煎叆妯℃澘", businessType = BusinessType.EXPORT)
+ @PostMapping("/exportStockInventory")
+ public void exportStockInventory(HttpServletResponse response) {
+ List<StockInventoryExportData> list = new ArrayList<>();
+ ExcelUtil<StockInventoryExportData> util = new ExcelUtil<>(StockInventoryExportData.class);
+ util.exportExcel(response, list, "涓嬭浇钖祫绠$悊鍒楄〃妯℃澘");
}
}
diff --git a/src/main/java/com/ruoyi/stock/execl/StockInventoryExportData.java b/src/main/java/com/ruoyi/stock/execl/StockInventoryExportData.java
index c917d30..8937fbb 100644
--- a/src/main/java/com/ruoyi/stock/execl/StockInventoryExportData.java
+++ b/src/main/java/com/ruoyi/stock/execl/StockInventoryExportData.java
@@ -1,5 +1,24 @@
package com.ruoyi.stock.execl;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.ruoyi.framework.aspectj.lang.annotation.Excel;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
public class StockInventoryExportData {
+ @Excel(name = "浜у搧鍚嶇О")
+ private String model;
+
+ @Excel(name = "瑙勬牸")
+ private String productName;
+
+ @Excel(name = "搴撳瓨鏁伴噺")
+ private BigDecimal qualitity;
+
+ @Excel(name = "澶囨敞")
+ private String remark;
+
}
diff --git a/src/main/java/com/ruoyi/stock/service/StockInventoryService.java b/src/main/java/com/ruoyi/stock/service/StockInventoryService.java
index 0dc849c..41a2f7f 100644
--- a/src/main/java/com/ruoyi/stock/service/StockInventoryService.java
+++ b/src/main/java/com/ruoyi/stock/service/StockInventoryService.java
@@ -24,5 +24,5 @@
Boolean subtractStockInventory(StockInventoryDto stockInventoryDto);
- Boolean importStockInventory(MultipartFile file);
+ R importStockInventory(MultipartFile file);
}
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 d30e7bc..3beaf09 100644
--- a/src/main/java/com/ruoyi/stock/service/impl/StockInventoryServiceImpl.java
+++ b/src/main/java/com/ruoyi/stock/service/impl/StockInventoryServiceImpl.java
@@ -6,9 +6,13 @@
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.basic.excel.SupplierManageExcelDto;
import com.ruoyi.basic.pojo.SupplierManage;
+import com.ruoyi.common.enums.StockQualifiedRecordTypeEnum;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.framework.web.domain.R;
+import com.ruoyi.procurementrecord.utils.StockUtils;
+import com.ruoyi.sales.mapper.SalesLedgerProductMapper;
+import com.ruoyi.sales.pojo.SalesLedgerProduct;
import com.ruoyi.stock.dto.StockInRecordDto;
import com.ruoyi.stock.dto.StockInventoryDto;
import com.ruoyi.stock.dto.StockOutRecordDto;
@@ -30,6 +34,8 @@
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;
+import java.util.Set;
+import java.util.stream.Collectors;
/**
* <p>
@@ -46,7 +52,8 @@
private StockInventoryMapper stockInventoryMapper;
private StockInRecordService stockInRecordService;
private StockOutRecordService stockOutRecordService;
-
+ private SalesLedgerProductMapper salesLedgerProductMapper;
+ private StockUtils stockUtils;
@Override
public IPage<StockInventoryDto> pagestockInventory(Page page, StockInventoryDto stockInventoryDto) {
return stockInventoryMapper.pagestockInventory(page, stockInventoryDto);
@@ -102,20 +109,28 @@
}
@Override
- public Boolean importStockInventory(MultipartFile file) {
+ public R importStockInventory(MultipartFile file) {
try {
+ final StringBuffer[] errorMsg = {new StringBuffer()};
+ //鏌ヨ鎵�鏈夌殑浜у搧
+ List<SalesLedgerProduct> salesLedgerProducts =salesLedgerProductMapper.selectProduct();
+
ExcelUtil<StockInventoryExportData> util = new ExcelUtil<StockInventoryExportData>(StockInventoryExportData.class);
List<StockInventoryExportData> list = util.importExcel(file.getInputStream());
- ArrayList<StockInventory> stockInventories = new ArrayList<>();
list.stream().forEach(dto -> {
- // TODO: 2026/1/21 娣诲姞鍏ュ簱璁板綍
+ salesLedgerProducts.stream().forEach(item->{
+ if (item.getProductCategory().equals(dto.getProductName())&&item.getSpecificationModel().equals(dto.getModel())) {
+ //鏇存柊搴撳瓨
+ stockUtils.addStock(item.getId(),dto.getQualitity(), StockQualifiedRecordTypeEnum.CUSTOMIZATION_STOCK_IN.getCode(),0L);
+ }else {
+ errorMsg[0] = errorMsg[0].append("浜у搧鍚嶇О锛�"+dto.getProductName()+"瑙勬牸锛�"+dto.getModel()+"涓嶅瓨鍦�").append("\n");
+ }
+ });
});
-
- this.saveOrUpdateBatch(stockInventories);
- return true;
+ return R.ok(errorMsg[0]);
}catch (Exception e){
e.printStackTrace();
}
- return false;
+ return R.fail();
}
}
diff --git a/src/main/resources/mapper/sales/SalesLedgerProductMapper.xml b/src/main/resources/mapper/sales/SalesLedgerProductMapper.xml
index 67c56c7..f74c3fa 100644
--- a/src/main/resources/mapper/sales/SalesLedgerProductMapper.xml
+++ b/src/main/resources/mapper/sales/SalesLedgerProductMapper.xml
@@ -8,10 +8,15 @@
SELECT
T1.*,
t3.shipping_car_number,
- t3.shipping_date
+ t3.shipping_date,
+ CASE
+ WHEN t2.qualitity > T1.quantity THEN 1
+ ELSE 0
+ END as has_sufficient_stock
FROM
sales_ledger_product T1
- left join shipping_info t3 on T1.id = t3.sales_ledger_product_id
+ LEFT JOIN stock_inventory t2 ON T1.product_model_id = t2.product_model_id
+ LEFT JOIN shipping_info t3 ON T1.id = t3.sales_ledger_product_id
<where>
1=1
<if test="salesLedgerProduct.salesLedgerId != null and salesLedgerProduct.salesLedgerId != '' ">
@@ -147,4 +152,12 @@
WHERE sl.id = #{salesLedegerId}) A
group by a.model, a.product_name, a.unit
</select>
+ <select id="selectProduct" resultType="com.ruoyi.sales.pojo.SalesLedgerProduct">
+ select
+ p.product_name as product_category,
+ pm.model as specification_model,
+ pm.id
+ from product_model pm
+ left join product p on pm.product_id = p.id
+ </select>
</mapper>
\ No newline at end of file
--
Gitblit v1.9.3