From 7706e5b97ebbdd767a237d5a79d18da6e1269a1d Mon Sep 17 00:00:00 2001
From: liyong <18434998025@163.com>
Date: 星期五, 23 一月 2026 16:13:31 +0800
Subject: [PATCH] feat(stock): 添加库存出入库记录导出功能
---
src/main/resources/mapper/stock/StockOutRecordMapper.xml | 27 ++++++
src/main/java/com/ruoyi/stock/mapper/StockOutRecordMapper.java | 5 +
src/main/java/com/ruoyi/stock/execl/StockInRecordExportData.java | 32 ++++++++
src/main/resources/mapper/stock/StockInventoryMapper.xml | 4
src/main/java/com/ruoyi/stock/service/impl/StockOutRecordServiceImpl.java | 21 +++++
src/main/resources/mapper/stock/StockInRecordMapper.xml | 29 +++++++
src/main/java/com/ruoyi/stock/service/StockInRecordService.java | 2
src/main/java/com/ruoyi/stock/service/impl/StockInRecordServiceImpl.java | 21 +++++
src/main/java/com/ruoyi/stock/execl/StockOutRecordExportData.java | 31 +++++++
src/main/java/com/ruoyi/stock/controller/StockInRecordController.java | 8 ++
src/main/java/com/ruoyi/stock/service/StockOutRecordService.java | 3
src/main/java/com/ruoyi/stock/controller/StockOutRecordController.java | 10 ++
src/main/java/com/ruoyi/stock/mapper/StockInRecordMapper.java | 5 +
src/main/java/com/ruoyi/stock/service/impl/StockInventoryServiceImpl.java | 24 ++++++
14 files changed, 220 insertions(+), 2 deletions(-)
diff --git a/src/main/java/com/ruoyi/stock/controller/StockInRecordController.java b/src/main/java/com/ruoyi/stock/controller/StockInRecordController.java
index c56c923..94e4669 100644
--- a/src/main/java/com/ruoyi/stock/controller/StockInRecordController.java
+++ b/src/main/java/com/ruoyi/stock/controller/StockInRecordController.java
@@ -6,6 +6,7 @@
import com.ruoyi.framework.aspectj.lang.enums.BusinessType;
import com.ruoyi.framework.web.domain.AjaxResult;
import com.ruoyi.stock.dto.StockInRecordDto;
+import com.ruoyi.stock.dto.StockInventoryDto;
import com.ruoyi.stock.service.StockInRecordService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
@@ -13,6 +14,7 @@
import org.springframework.util.CollectionUtils;
import org.springframework.web.bind.annotation.*;
+import javax.servlet.http.HttpServletResponse;
import java.util.List;
@RestController
@@ -41,4 +43,10 @@
return AjaxResult.success(stockInRecordService.batchDelete(ids));
}
+ @PostMapping("/exportStockInRecord")
+ @ApiOperation("瀵煎嚭鍏ュ簱璁板綍")
+ public void exportStockInRecord(HttpServletResponse response, StockInRecordDto stockInRecordDto) {
+ stockInRecordService.exportStockInRecord(response,stockInRecordDto);
+ }
+
}
diff --git a/src/main/java/com/ruoyi/stock/controller/StockOutRecordController.java b/src/main/java/com/ruoyi/stock/controller/StockOutRecordController.java
index df82379..755084c 100644
--- a/src/main/java/com/ruoyi/stock/controller/StockOutRecordController.java
+++ b/src/main/java/com/ruoyi/stock/controller/StockOutRecordController.java
@@ -5,7 +5,9 @@
import com.ruoyi.framework.aspectj.lang.annotation.Log;
import com.ruoyi.framework.aspectj.lang.enums.BusinessType;
import com.ruoyi.framework.web.domain.AjaxResult;
+import com.ruoyi.stock.dto.StockInRecordDto;
import com.ruoyi.stock.dto.StockOutRecordDto;
+import com.ruoyi.stock.pojo.StockOutRecord;
import com.ruoyi.stock.service.StockOutRecordService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
@@ -13,6 +15,7 @@
import org.springframework.util.CollectionUtils;
import org.springframework.web.bind.annotation.*;
+import javax.servlet.http.HttpServletResponse;
import java.util.List;
/**
@@ -58,4 +61,11 @@
}
return AjaxResult.success(stockOutRecordService.batchDelete(ids));
}
+
+ @PostMapping("/exportStockOutRecord")
+ @ApiOperation("瀵煎嚭鍑哄簱璁板綍")
+ public void exportStockOutRecord(HttpServletResponse response, StockOutRecordDto stockOutRecordDto) {
+ stockOutRecordService.exportStockOutRecord(response,stockOutRecordDto);
+ }
+
}
diff --git a/src/main/java/com/ruoyi/stock/execl/StockInRecordExportData.java b/src/main/java/com/ruoyi/stock/execl/StockInRecordExportData.java
new file mode 100644
index 0000000..d705110
--- /dev/null
+++ b/src/main/java/com/ruoyi/stock/execl/StockInRecordExportData.java
@@ -0,0 +1,32 @@
+package com.ruoyi.stock.execl;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ruoyi.framework.aspectj.lang.annotation.Excel;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.time.LocalDateTime;
+
+@Data
+public class StockInRecordExportData {
+
+ @Excel(name = "鍏ュ簱鎵规")
+ private String inboundBatches;
+ @Excel(name = "浜у搧鍚嶇О")
+ private String productName;
+ @Excel(name = "瑙勬牸鍨嬪彿")
+ private String model;
+ @Excel(name = "鍗曚綅")
+ private String unit;
+ @Excel(name = "鍏ュ簱鏉ユ簮")
+ private String recordType;
+ @Excel(name = "鍏ュ簱鏁伴噺")
+ private String stockInNum;
+ @Excel(name = "鍏ュ簱鏃堕棿")
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private LocalDateTime createTime;
+
+ @Excel(isExport = false)
+ private String type;
+}
diff --git a/src/main/java/com/ruoyi/stock/execl/StockOutRecordExportData.java b/src/main/java/com/ruoyi/stock/execl/StockOutRecordExportData.java
new file mode 100644
index 0000000..f120817
--- /dev/null
+++ b/src/main/java/com/ruoyi/stock/execl/StockOutRecordExportData.java
@@ -0,0 +1,31 @@
+package com.ruoyi.stock.execl;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ruoyi.framework.aspectj.lang.annotation.Excel;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.time.LocalDateTime;
+
+@Data
+public class StockOutRecordExportData {
+ @Excel(name = "鍑哄簱鎵规")
+ private String outboundBatches;
+ @Excel(name = "浜у搧鍚嶇О")
+ private String productName;
+ @Excel(name = "瑙勬牸鍨嬪彿")
+ private String model;
+ @Excel(name = "鍗曚綅")
+ private String unit;
+ @Excel(name = "鍑哄簱鏉ユ簮")
+ private String recordType;
+ @Excel(name = "鍑哄簱鏁伴噺")
+ private String stockInNum;
+ @Excel(name = "鍑哄簱鏃堕棿")
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private LocalDateTime createTime;
+
+ @Excel(isExport = false)
+ private String type;
+}
diff --git a/src/main/java/com/ruoyi/stock/mapper/StockInRecordMapper.java b/src/main/java/com/ruoyi/stock/mapper/StockInRecordMapper.java
index 8b7b543..afc30ae 100644
--- a/src/main/java/com/ruoyi/stock/mapper/StockInRecordMapper.java
+++ b/src/main/java/com/ruoyi/stock/mapper/StockInRecordMapper.java
@@ -4,9 +4,14 @@
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.stock.dto.StockInRecordDto;
+import com.ruoyi.stock.execl.StockInRecordExportData;
import com.ruoyi.stock.pojo.StockInRecord;
import org.apache.ibatis.annotations.Param;
+import java.util.List;
+
public interface StockInRecordMapper extends BaseMapper<StockInRecord> {
IPage<StockInRecordDto> listPage(Page page, @Param("params") StockInRecordDto stockInRecordDto);
+
+ List<StockInRecordExportData> listStockInRecordExportData(@Param("params") StockInRecordDto stockInRecordDto);
}
diff --git a/src/main/java/com/ruoyi/stock/mapper/StockOutRecordMapper.java b/src/main/java/com/ruoyi/stock/mapper/StockOutRecordMapper.java
index 04aeb71..d180ef9 100644
--- a/src/main/java/com/ruoyi/stock/mapper/StockOutRecordMapper.java
+++ b/src/main/java/com/ruoyi/stock/mapper/StockOutRecordMapper.java
@@ -4,9 +4,12 @@
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.stock.dto.StockOutRecordDto;
+import com.ruoyi.stock.execl.StockOutRecordExportData;
import com.ruoyi.stock.pojo.StockOutRecord;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
/**
* <p>
@@ -20,4 +23,6 @@
public interface StockOutRecordMapper extends BaseMapper<StockOutRecord> {
IPage<StockOutRecordDto> listPage(Page page, @Param("params") StockOutRecordDto stockOutRecordDto);
+ List<StockOutRecordExportData> listStockOutRecordExportData(@Param("params") StockOutRecordDto stockOutRecordDto);
+
}
diff --git a/src/main/java/com/ruoyi/stock/service/StockInRecordService.java b/src/main/java/com/ruoyi/stock/service/StockInRecordService.java
index affb300..29ba7e5 100644
--- a/src/main/java/com/ruoyi/stock/service/StockInRecordService.java
+++ b/src/main/java/com/ruoyi/stock/service/StockInRecordService.java
@@ -6,6 +6,7 @@
import com.ruoyi.stock.dto.StockInRecordDto;
import com.ruoyi.stock.pojo.StockInRecord;
+import javax.servlet.http.HttpServletResponse;
import java.util.List;
public interface StockInRecordService extends IService<StockInRecord> {
@@ -17,4 +18,5 @@
int batchDelete(List<Long> ids);
+ void exportStockInRecord(HttpServletResponse response, StockInRecordDto stockInRecordDto);
}
diff --git a/src/main/java/com/ruoyi/stock/service/StockOutRecordService.java b/src/main/java/com/ruoyi/stock/service/StockOutRecordService.java
index 6317e3a..f18d50c 100644
--- a/src/main/java/com/ruoyi/stock/service/StockOutRecordService.java
+++ b/src/main/java/com/ruoyi/stock/service/StockOutRecordService.java
@@ -6,6 +6,7 @@
import com.ruoyi.stock.dto.StockOutRecordDto;
import com.ruoyi.stock.pojo.StockOutRecord;
+import javax.servlet.http.HttpServletResponse;
import java.util.List;
/**
@@ -24,4 +25,6 @@
int update(Long id, StockOutRecordDto stockOutRecordDto);
int batchDelete(List<Long> ids);
+
+ void exportStockOutRecord(HttpServletResponse response, 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 4cef388..66fd187 100644
--- a/src/main/java/com/ruoyi/stock/service/impl/StockInRecordServiceImpl.java
+++ b/src/main/java/com/ruoyi/stock/service/impl/StockInRecordServiceImpl.java
@@ -4,13 +4,19 @@
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.enums.StockQualifiedRecordTypeEnum;
+import com.ruoyi.common.enums.StockUnQualifiedRecordTypeEnum;
import com.ruoyi.common.exception.base.BaseException;
+import com.ruoyi.common.utils.EnumUtil;
import com.ruoyi.common.utils.OrderUtils;
import com.ruoyi.common.utils.bean.BeanUtils;
+import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.staff.pojo.StaffOnJob;
import com.ruoyi.stock.dto.StockInRecordDto;
import com.ruoyi.stock.dto.StockInventoryDto;
import com.ruoyi.stock.dto.StockUninventoryDto;
+import com.ruoyi.stock.execl.StockInRecordExportData;
+import com.ruoyi.stock.execl.StockInventoryExportData;
import com.ruoyi.stock.mapper.StockInRecordMapper;
import com.ruoyi.stock.mapper.StockInventoryMapper;
import com.ruoyi.stock.mapper.StockUninventoryMapper;
@@ -23,6 +29,7 @@
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
+import javax.servlet.http.HttpServletResponse;
import java.util.List;
@Service
@@ -92,4 +99,18 @@
}
return stockInRecordMapper.deleteBatchIds(ids);
}
+
+ @Override
+ public void exportStockInRecord(HttpServletResponse response, StockInRecordDto stockInRecordDto) {
+ List<StockInRecordExportData> list = stockInRecordMapper.listStockInRecordExportData(stockInRecordDto);
+ for (StockInRecordExportData stockInRecordExportData : list) {
+ if (stockInRecordExportData.getType().equals("0")) {
+ stockInRecordExportData.setRecordType(EnumUtil.fromCode(StockQualifiedRecordTypeEnum.class, Integer.valueOf(stockInRecordExportData.getRecordType())).getValue());
+ }else {
+ stockInRecordExportData.setRecordType(EnumUtil.fromCode(StockUnQualifiedRecordTypeEnum.class, Integer.valueOf(stockInRecordExportData.getRecordType())).getValue());
+ }
+ }
+ ExcelUtil<StockInRecordExportData> util = new ExcelUtil<>(StockInRecordExportData.class);
+ util.exportExcel(response,list, "鍏ュ簱璁板綍淇℃伅");
+ }
}
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 e206d8a..35e2f13 100644
--- a/src/main/java/com/ruoyi/stock/service/impl/StockInventoryServiceImpl.java
+++ b/src/main/java/com/ruoyi/stock/service/impl/StockInventoryServiceImpl.java
@@ -100,7 +100,31 @@
@Override
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());
+ list.stream().forEach(dto -> {
+ salesLedgerProducts.stream().forEach(item->{
+ if (item.getProductCategory().equals(dto.getProductName())&&item.getSpecificationModel().equals(dto.getModel())) {
+ //鏇存柊搴撳瓨
+ StockInventoryDto stockInventoryDto = new StockInventoryDto();
+ stockInventoryDto.setRecordId(0L);
+ stockInventoryDto.setRecordType(StockQualifiedRecordTypeEnum.CUSTOMIZATION_STOCK_IN.getCode());
+ stockInventoryDto.setQualitity(dto.getQualitity());
+ stockInventoryDto.setProductModelId(item.getProductModelId());
+ this.addstockInventory(stockInventoryDto); }else {
+ errorMsg[0] = errorMsg[0].append("浜у搧鍚嶇О锛�"+dto.getProductName()+"瑙勬牸锛�"+dto.getModel()+"涓嶅瓨鍦�").append("\n");
+ }
+ });
+ });
+ return R.ok(errorMsg[0]);
+ }catch (Exception e){
+ e.printStackTrace();
+ }
return R.fail();
}
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 a9c48ed..f6d433a 100644
--- a/src/main/java/com/ruoyi/stock/service/impl/StockOutRecordServiceImpl.java
+++ b/src/main/java/com/ruoyi/stock/service/impl/StockOutRecordServiceImpl.java
@@ -4,12 +4,18 @@
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.enums.StockQualifiedRecordTypeEnum;
+import com.ruoyi.common.enums.StockUnQualifiedRecordTypeEnum;
import com.ruoyi.common.exception.base.BaseException;
+import com.ruoyi.common.utils.EnumUtil;
import com.ruoyi.common.utils.OrderUtils;
import com.ruoyi.common.utils.bean.BeanUtils;
+import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.stock.dto.StockInventoryDto;
import com.ruoyi.stock.dto.StockOutRecordDto;
import com.ruoyi.stock.dto.StockUninventoryDto;
+import com.ruoyi.stock.execl.StockInRecordExportData;
+import com.ruoyi.stock.execl.StockOutRecordExportData;
import com.ruoyi.stock.mapper.StockInventoryMapper;
import com.ruoyi.stock.mapper.StockOutRecordMapper;
import com.ruoyi.stock.mapper.StockUninventoryMapper;
@@ -22,6 +28,7 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
+import javax.servlet.http.HttpServletResponse;
import java.util.List;
/**
@@ -94,4 +101,18 @@
}
return stockOutRecordMapper.deleteBatchIds(ids);
}
+
+ @Override
+ public void exportStockOutRecord(HttpServletResponse response, StockOutRecordDto stockOutRecordDto) {
+ List<StockOutRecordExportData> list = stockOutRecordMapper.listStockOutRecordExportData(stockOutRecordDto);
+ for (StockOutRecordExportData stockInRecordExportData : list) {
+ if (stockInRecordExportData.getType().equals("0")) {
+ stockInRecordExportData.setRecordType(EnumUtil.fromCode(StockQualifiedRecordTypeEnum.class, Integer.valueOf(stockInRecordExportData.getRecordType())).getValue());
+ }else {
+ stockInRecordExportData.setRecordType(EnumUtil.fromCode(StockUnQualifiedRecordTypeEnum.class, Integer.valueOf(stockInRecordExportData.getRecordType())).getValue());
+ }
+ }
+ ExcelUtil<StockOutRecordExportData> util = new ExcelUtil<>(StockOutRecordExportData.class);
+ util.exportExcel(response,list, "鍑哄簱璁板綍淇℃伅");
+ }
}
diff --git a/src/main/resources/mapper/stock/StockInRecordMapper.xml b/src/main/resources/mapper/stock/StockInRecordMapper.xml
index 0eee4f3..d5c3f38 100644
--- a/src/main/resources/mapper/stock/StockInRecordMapper.xml
+++ b/src/main/resources/mapper/stock/StockInRecordMapper.xml
@@ -5,7 +5,34 @@
<select id="listPage" resultType="com.ruoyi.stock.dto.StockInRecordDto">
SELECT
sir.*,
- p.product_name as productName,
+ p.product_name as product_name,
+ pm.model,
+ pm.unit,
+ u.nick_name as createBy
+ FROM stock_in_record as sir
+ LEFT JOIN product_model as pm on sir.product_model_id = pm.id
+ LEFT JOIN product as p on pm.product_id = p.id
+ LEFT JOIN sys_user as u on sir.create_user = u.user_id
+ <where>
+ <if test="params.timeStr != null and params.timeStr != ''">
+ and sir.create_time like concat('%',#{params.timeStr},'%')
+ </if>
+ <if test="params.productName != null and params.productName != ''">
+ and p.product_name like concat('%',#{params.productName},'%')
+ </if>
+ <if test="params.type != null and params.type != ''">
+ and sir.type = #{params.type}
+ </if>
+ <if test="params.recordType != null and params.recordType != ''">
+ and sir.record_type = #{params.recordType}
+ </if>
+ </where>
+ order by sir.id desc
+ </select>
+ <select id="listStockInRecordExportData" resultType="com.ruoyi.stock.execl.StockInRecordExportData">
+ SELECT
+ sir.*,
+ p.product_name as product_name,
pm.model,
pm.unit,
u.nick_name as createBy
diff --git a/src/main/resources/mapper/stock/StockInventoryMapper.xml b/src/main/resources/mapper/stock/StockInventoryMapper.xml
index 0eaf12b..1f729f2 100644
--- a/src/main/resources/mapper/stock/StockInventoryMapper.xml
+++ b/src/main/resources/mapper/stock/StockInventoryMapper.xml
@@ -62,7 +62,9 @@
select si.qualitity,
pm.model,
pm.unit,
- p.product_name
+ p.product_name,
+ si.remark,
+ si.update_time
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
diff --git a/src/main/resources/mapper/stock/StockOutRecordMapper.xml b/src/main/resources/mapper/stock/StockOutRecordMapper.xml
index b021e71..a441de9 100644
--- a/src/main/resources/mapper/stock/StockOutRecordMapper.xml
+++ b/src/main/resources/mapper/stock/StockOutRecordMapper.xml
@@ -44,5 +44,32 @@
</where>
order by sor.id desc
</select>
+ <select id="listStockOutRecordExportData" resultType="com.ruoyi.stock.execl.StockOutRecordExportData">
+ SELECT
+ sor.*,
+ p.product_name as productName,
+ pm.model,
+ pm.unit,
+ u.nick_name as createBy
+ FROM stock_out_record as sor
+ LEFT JOIN product_model as pm on sor.product_model_id = pm.id
+ LEFT JOIN product as p on pm.product_id = p.id
+ LEFT JOIN sys_user as u on sor.create_user = u.user_id
+ <where>
+ <if test="params.timeStr != null and params.timeStr != ''">
+ and sor.create_time like concat('%',#{params.timeStr},'%')
+ </if>
+ <if test="params.productName != null and params.productName != ''">
+ and p.product_name like concat('%',#{params.productName},'%')
+ </if>
+ <if test="params.type != null and params.type != ''">
+ and sor.type = #{params.type}
+ </if>
+ <if test="params.recordType != null and params.recordType != ''">
+ and sor.record_type = #{params.recordType}
+ </if>
+ </where>
+ order by sor.id desc
+ </select>
</mapper>
--
Gitblit v1.9.3