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