| 2 天以前 | gongchunyi | ![]() |
| 2 天以前 | gongchunyi | ![]() |
| src/main/java/com/ruoyi/basic/dto/ProductImportRowDto.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/ruoyi/basic/service/impl/ProductModelServiceImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/ruoyi/common/utils/poi/ExcelRowAware.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/ruoyi/common/utils/poi/ExcelUtil.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
src/main/java/com/ruoyi/basic/dto/ProductImportRowDto.java
@@ -1,5 +1,6 @@ package com.ruoyi.basic.dto; import com.ruoyi.common.utils.poi.ExcelRowAware; import com.ruoyi.framework.aspectj.lang.annotation.Excel; import lombok.Data; @@ -7,7 +8,7 @@ * äº§åæ¹éå¯¼å ¥è¡ï¼ä¸ä¸ªsheetï¼åæ/åæå/æåï¼ */ @Data public class ProductImportRowDto { public class ProductImportRowDto implements ExcelRowAware { @Excel(name = "产åç¶ç±»") private String productParentName; @@ -26,4 +27,6 @@ @Excel(name = "åä½") private String unit; private Integer excelRowNum; } 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; } /** * è§£ææ¶ä¼è·³è¿ç©ºè¡ */ 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(); src/main/java/com/ruoyi/common/utils/poi/ExcelRowAware.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,12 @@ package com.ruoyi.common.utils.poi; /** * å¯¼å ¥å®ä½å¯å®ç°æ¤æ¥å£ï¼è§£ææ¶ç± {@link ExcelUtil} åå¡«æå¨ Excel ççå®è¡å·ï¼1 èµ·ç®ï¼ä¸ Excel 左侧è¡å·ä¸è´ï¼ã * ExcelUtil ä¼è·³è¿è¡¨å¤´ä¸ç©ºè¡ï¼å®ä½å¨å表ä¸ç䏿 å¹¶ä¸çäºçå®è¡å·ï¼æ¥éæç¤ºéè¦çå®è¡å·å®ä½é®é¢ã * * @author ruoyi */ public interface ExcelRowAware { void setExcelRowNum(Integer excelRowNum); } src/main/java/com/ruoyi/common/utils/poi/ExcelUtil.java
@@ -465,37 +465,37 @@ { val = Convert.toBigDecimal(val); } else if (Date.class == fieldType) { if (val instanceof String) { val = DateUtils.parseDate(val); else if (Date.class == fieldType) { if (val instanceof String) { val = DateUtils.parseDate(val); } else if (val instanceof Double) { val = DateUtil.getJavaDate((Double) val); } } else if (LocalDate.class == fieldType) { if (val instanceof String) { Date date = DateUtils.parseDate(val); val = StringUtils.isNull(date) ? null : DateUtils.toLocalDate(date); } else if (val instanceof Date) { val = DateUtils.toLocalDate((Date) val); } else if (val instanceof Double) { val = DateUtils.toLocalDate(DateUtil.getJavaDate((Double) val)); } } else if (Boolean.TYPE == fieldType || Boolean.class == fieldType) { val = Convert.toBool(val, false); } { val = DateUtil.getJavaDate((Double) val); } } else if (LocalDate.class == fieldType) { if (val instanceof String) { Date date = DateUtils.parseDate(val); val = StringUtils.isNull(date) ? null : DateUtils.toLocalDate(date); } else if (val instanceof Date) { val = DateUtils.toLocalDate((Date) val); } else if (val instanceof Double) { val = DateUtils.toLocalDate(DateUtil.getJavaDate((Double) val)); } } else if (Boolean.TYPE == fieldType || Boolean.class == fieldType) { val = Convert.toBool(val, false); } if (StringUtils.isNotNull(fieldType)) { String propertyName = field.getName(); @@ -534,6 +534,9 @@ } ReflectUtils.invokeSetter(entity, propertyName, val); } } if (entity instanceof ExcelRowAware) { ((ExcelRowAware) entity).setExcelRowNum(i + 1); } list.add(entity); } @@ -667,24 +670,24 @@ val = Convert.toFloat(val); } else if (BigDecimal.class == fieldType) { val = Convert.toBigDecimal(val); } else if (Date.class == fieldType) { if (val instanceof String) { val = DateUtils.parseDate(val); } else if (val instanceof Double) { val = DateUtil.getJavaDate((Double) val); } } else if (LocalDate.class == fieldType) { if (val instanceof String) { Date date = DateUtils.parseDate(val); val = StringUtils.isNull(date) ? null : DateUtils.toLocalDate(date); } else if (val instanceof Date) { val = DateUtils.toLocalDate((Date) val); } else if (val instanceof Double) { val = DateUtils.toLocalDate(DateUtil.getJavaDate((Double) val)); } } else if (Boolean.TYPE == fieldType || Boolean.class == fieldType) { val = Convert.toBool(val, false); } } else if (Date.class == fieldType) { if (val instanceof String) { val = DateUtils.parseDate(val); } else if (val instanceof Double) { val = DateUtil.getJavaDate((Double) val); } } else if (LocalDate.class == fieldType) { if (val instanceof String) { Date date = DateUtils.parseDate(val); val = StringUtils.isNull(date) ? null : DateUtils.toLocalDate(date); } else if (val instanceof Date) { val = DateUtils.toLocalDate((Date) val); } else if (val instanceof Double) { val = DateUtils.toLocalDate(DateUtil.getJavaDate((Double) val)); } } else if (Boolean.TYPE == fieldType || Boolean.class == fieldType) { val = Convert.toBool(val, false); } if (StringUtils.isNotNull(fieldType)) { String propertyName = field.getName(); @@ -714,6 +717,9 @@ ReflectUtils.invokeSetter(entity, propertyName, val); } } if (entity instanceof ExcelRowAware) { ((ExcelRowAware) entity).setExcelRowNum(i + 1); } list.add(entity); } }