From ddc95002ef4c7593a006443690d5ae6bba693227 Mon Sep 17 00:00:00 2001
From: gongchunyi <deslre0381@gmail.com>
Date: 星期日, 13 九月 2026 11:09:56 +0800
Subject: [PATCH] fix: 产品导入限制

---
 src/main/java/com/ruoyi/basic/service/impl/ProductModelServiceImpl.java |   43 +++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 41 insertions(+), 2 deletions(-)

diff --git a/src/main/java/com/ruoyi/basic/service/impl/ProductModelServiceImpl.java b/src/main/java/com/ruoyi/basic/service/impl/ProductModelServiceImpl.java
index fa75953..dd0e7ab 100644
--- a/src/main/java/com/ruoyi/basic/service/impl/ProductModelServiceImpl.java
+++ b/src/main/java/com/ruoyi/basic/service/impl/ProductModelServiceImpl.java
@@ -161,12 +161,16 @@
             Map<String, Long> nodeCache = new HashMap<>();
             for (int i = 0; i < rows.size(); i++) {
                 ProductImportRowDto row = rows.get(i);
-                int rowNum = i + 2;
+                //  娌℃湁鍚嶇О/缂栫爜/瑙勬牸鐨勮鏋勪笉鎴愪骇鍝佹暟鎹紝鎸夌┖琛岃烦杩�
+                if (hasNoProductContent(row)) {
+                    continue;
+                }
                 String parentName = trimToNull(row.getProductParentName());
                 String categoryName = trimToNull(row.getProductCategoryName());
                 String productName = trimToNull(row.getProductName());
                 if (productName == null) {
-                    throw new ServiceException("绗� " + rowNum + " 琛� [浜у搧鍚嶇О] 涓嶈兘涓虹┖");
+                    throw new ServiceException(String.format("宸ヤ綔琛ㄣ��%s銆戠 %d 琛� [浜у搧鍚嶇О] 涓嶈兘涓虹┖锛堣琛屽凡濉細%s锛�",
+                            sheetName, resolveRowNum(row, i), describeRow(row)));
                 }
 
                 String model = trimToNull(row.getModel());
@@ -291,6 +295,41 @@
         return keys;
     }
 
+    /**
+     * 瑙f瀽鏃朵細璺宠繃绌鸿
+     */
+    private static int resolveRowNum(ProductImportRowDto row, int index) {
+        return row.getExcelRowNum() != null ? row.getExcelRowNum() : index + 2;
+    }
+
+    private static boolean hasNoProductContent(ProductImportRowDto row) {
+        return trimToNull(row.getProductName()) == null
+                && trimToNull(row.getProductCode()) == null
+                && trimToNull(row.getModel()) == null;
+    }
+
+    private static String describeRow(ProductImportRowDto row) {
+        StringBuilder description = new StringBuilder();
+        appendFilledColumn(description, "浜у搧鐖剁被", row.getProductParentName());
+        appendFilledColumn(description, "浜у搧澶х被", row.getProductCategoryName());
+        appendFilledColumn(description, "浜у搧鍚嶇О", row.getProductName());
+        appendFilledColumn(description, "浜у搧缂栫爜", row.getProductCode());
+        appendFilledColumn(description, "瑙勬牸鍨嬪彿", row.getModel());
+        appendFilledColumn(description, "鍗曚綅", row.getUnit());
+        return description.length() == 0 ? "鏃�" : description.toString();
+    }
+
+    private static void appendFilledColumn(StringBuilder description, String columnName, String value) {
+        String trimmed = trimToNull(value);
+        if (trimmed == null) {
+            return;
+        }
+        if (description.length() > 0) {
+            description.append("锛�");
+        }
+        description.append(columnName).append('=').append(trimmed);
+    }
+
     private static String dedupKey(String productName, String model, String productCode) {
         String normalizedModel = trimToNull(model) == null ? "/" : model.trim();
         String normalizedCode = productCode == null ? "" : productCode.trim();

--
Gitblit v1.9.3