物料导入繁体解析1

This commit is contained in:
秦鸿展
2026-05-29 10:38:42 +08:00
parent b9a9ee8108
commit fa612e9d7b
3 changed files with 66 additions and 26 deletions
@@ -13,7 +13,9 @@ import org.apache.poi.ss.usermodel.WorkbookFactory;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* 物料主数据导入:支持繁体中文表头的 Excel 解析。
@@ -23,6 +25,19 @@ public final class MaterialBaseInfoImportExcelUtil {
private MaterialBaseInfoImportExcelUtil() {
}
/** 客户模板常见表头别名 → 系统 @Excel 标准表头 */
private static final Map<String, String> HEADER_ALIASES = new HashMap<>();
static {
HEADER_ALIASES.put("条形码", "物料条形码");
HEADER_ALIASES.put("保質期(天)", "保质期 单位:天");
HEADER_ALIASES.put("保质期(天)", "保质期 单位:天");
HEADER_ALIASES.put("净重(kg)", "净重 单位:千克");
HEADER_ALIASES.put("淨重(kg)", "净重 单位:千克");
HEADER_ALIASES.put("体积(m³)", "体积 单位:立方米");
HEADER_ALIASES.put("體積(m³)", "体积 单位:立方米");
}
public static List<MaterialBaseInfoDTO> importRows(InputStream is) throws Exception {
Workbook workbook = WorkbookFactory.create(is);
try {
@@ -54,7 +69,9 @@ public final class MaterialBaseInfoImportExcelUtil {
if (StringUtils.isBlank(value)) {
continue;
}
cell.setCellValue(ZhTextNormalizeUtil.normalizeExcelHeader(value));
String normalized = ZhTextNormalizeUtil.normalizeExcelHeader(value);
String alias = HEADER_ALIASES.get(normalized);
cell.setCellValue(alias != null ? alias : normalized);
}
}
}
@@ -49,14 +49,25 @@ public final class ZhTextNormalizeUtil {
if (a == null || b == null) {
return false;
}
return toSimple(a).equals(toSimple(b));
return normalizeNameKey(a).equals(normalizeNameKey(b));
}
public static boolean textContains(String haystack, String needle) {
if (StringUtils.isBlank(haystack) || StringUtils.isBlank(needle)) {
return false;
}
return toSimple(haystack).contains(toSimple(needle));
return normalizeNameKey(haystack).contains(normalizeNameKey(needle));
}
/** 简繁体 + 全角括号等常见差异归一化,便于货主/分类名称匹配。 */
public static String normalizeNameKey(String text) {
if (StringUtils.isBlank(text)) {
return text;
}
String s = toSimple(text.trim());
s = s.replace('', '(').replace('', ')');
s = s.replace(' ', ' ');
return s;
}
/**