From 0891b6708cc09c2672a19661a8555aae0e742df1 Mon Sep 17 00:00:00 2001
From: tuqin <tuqin@tuqin.cn>
Date: 星期四, 24 九月 2026 16:54:27 +0800
Subject: [PATCH] feat: 新增多模块导入导出功能
---
src/main/java/com/ruoyi/aftersalesservice/service/impl/AfterSalesNearExpiryServiceImpl.java | 80 ++++++++++++++++++++++++++++++++++++++++
1 files changed, 80 insertions(+), 0 deletions(-)
diff --git a/src/main/java/com/ruoyi/aftersalesservice/service/impl/AfterSalesNearExpiryServiceImpl.java b/src/main/java/com/ruoyi/aftersalesservice/service/impl/AfterSalesNearExpiryServiceImpl.java
index d8fc90d..3ac7d34 100644
--- a/src/main/java/com/ruoyi/aftersalesservice/service/impl/AfterSalesNearExpiryServiceImpl.java
+++ b/src/main/java/com/ruoyi/aftersalesservice/service/impl/AfterSalesNearExpiryServiceImpl.java
@@ -3,15 +3,24 @@
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.aftersalesservice.dto.AfterSalesNearExpiryImportDto;
import com.ruoyi.aftersalesservice.mapper.AfterSalesNearExpiryMapper;
import com.ruoyi.aftersalesservice.pojo.AfterSalesNearExpiry;
import com.ruoyi.aftersalesservice.service.AfterSalesNearExpiryService;
import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.framework.web.domain.AjaxResult;
+import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+import org.springframework.web.multipart.MultipartFile;
import java.time.LocalDateTime;
+import java.util.ArrayList;
import java.util.Arrays;
+import java.util.List;
/**
* <br>
@@ -22,6 +31,7 @@
* @version 1.0
* @since 2026/03/02 14:46
*/
+@Slf4j
@Service
public class AfterSalesNearExpiryServiceImpl extends ServiceImpl<AfterSalesNearExpiryMapper, AfterSalesNearExpiry> implements AfterSalesNearExpiryService {
@@ -86,4 +96,74 @@
public IPage<AfterSalesNearExpiry> listPage(Page<AfterSalesNearExpiry> page, AfterSalesNearExpiry entity) {
return baseMapper.listPage(page, entity);
}
+
+ @Override
+ public AjaxResult importData(MultipartFile file) {
+ List<AfterSalesNearExpiryImportDto> rows;
+ try {
+ ExcelUtil<AfterSalesNearExpiryImportDto> util = new ExcelUtil<>(AfterSalesNearExpiryImportDto.class);
+ rows = util.importExcel(file.getInputStream());
+ } catch (Exception e) {
+ log.error("涓存湡鍞悗绠$悊瀵煎叆-瑙f瀽excel澶辫触", e);
+ return AjaxResult.error("瑙f瀽Excel澶辫触锛�" + e.getMessage());
+ }
+ if (CollectionUtils.isEmpty(rows)) {
+ return AjaxResult.error("瀵煎叆鏂囦欢鏃犳暟鎹�");
+ }
+ int success = 0;
+ List<String> errors = new ArrayList<>();
+ for (int i = 0; i < rows.size(); i++) {
+ AfterSalesNearExpiryImportDto row = rows.get(i);
+ int rowNo = i + 2; // 棣栬涓鸿〃澶�
+ try {
+ if (StringUtils.isEmpty(trim(row.getProductName()))) {
+ errors.add("绗�" + rowNo + "琛岋細涓存湡浜у搧鍚嶇О涓虹┖");
+ continue;
+ }
+ if (StringUtils.isEmpty(trim(row.getBatchNumber()))) {
+ errors.add("绗�" + rowNo + "琛岋細浜у搧鎵瑰彿涓虹┖");
+ continue;
+ }
+ if (row.getExpireDate() == null) {
+ errors.add("绗�" + rowNo + "琛岋細涓存湡鏃ユ湡涓虹┖");
+ continue;
+ }
+ if (row.getStockQuantity() == null) {
+ errors.add("绗�" + rowNo + "琛岋細搴撳瓨鏁伴噺涓虹┖");
+ continue;
+ }
+ if (StringUtils.isEmpty(trim(row.getCustomerName()))) {
+ errors.add("绗�" + rowNo + "琛岋細瀹㈡埛鍚嶇О涓虹┖");
+ continue;
+ }
+
+ AfterSalesNearExpiry entity = new AfterSalesNearExpiry();
+ entity.setProductName(trim(row.getProductName()));
+ entity.setBatchNumber(trim(row.getBatchNumber()));
+ entity.setExpireDate(row.getExpireDate());
+ entity.setStockQuantity(row.getStockQuantity());
+ entity.setCustomerName(trim(row.getCustomerName()));
+ entity.setContactPhone(trim(row.getContactPhone()));
+ entity.setDisRes(row.getDisRes());
+
+ add(entity);
+ success++;
+ } catch (Exception e) {
+ log.error("涓存湡鍞悗绠$悊瀵煎叆绗瑊}琛屽け璐�", rowNo, e);
+ errors.add("绗�" + rowNo + "琛岋細" + e.getMessage());
+ }
+ }
+
+ AjaxResult result = AjaxResult.success();
+ result.put("totalCount", rows.size());
+ result.put("successCount", success);
+ result.put("failCount", rows.size() - success);
+ result.put("errors", errors);
+ result.put("msg", "瀵煎叆瀹屾垚锛氭垚鍔� " + success + " 鏉★紝澶辫触 " + (rows.size() - success) + " 鏉�");
+ return result;
+ }
+
+ private String trim(String value) {
+ return value == null ? null : value.trim();
+ }
}
--
Gitblit v1.9.3