From 10158625f1096c54664a5f87b3f32d33794e4eee Mon Sep 17 00:00:00 2001
From: tuqin <tuqin@tuqin.cn>
Date: 星期五, 11 九月 2026 12:13:59 +0800
Subject: [PATCH] fix(mdm): 物料导入“状态”列兼容中文,读表异常改为友好提示

---
 yudao-module-mdm/src/main/java/cn/iocoder/yudao/module/mdm/controller/admin/item/vo/StatusTextConverter.java  |   57 ++++++++++++++++++++++++++++
 yudao-module-mdm/src/main/java/cn/iocoder/yudao/module/mdm/controller/admin/item/vo/MdmItemImportExcelVO.java |    2 
 yudao-module-mdm/src/main/java/cn/iocoder/yudao/module/mdm/controller/admin/item/MdmItemController.java       |   14 ++++++
 3 files changed, 71 insertions(+), 2 deletions(-)

diff --git a/yudao-module-mdm/src/main/java/cn/iocoder/yudao/module/mdm/controller/admin/item/MdmItemController.java b/yudao-module-mdm/src/main/java/cn/iocoder/yudao/module/mdm/controller/admin/item/MdmItemController.java
index 4495e23..b570ded 100644
--- a/yudao-module-mdm/src/main/java/cn/iocoder/yudao/module/mdm/controller/admin/item/MdmItemController.java
+++ b/yudao-module-mdm/src/main/java/cn/iocoder/yudao/module/mdm/controller/admin/item/MdmItemController.java
@@ -333,7 +333,19 @@
     @PreAuthorize("@ss.hasPermission('mdm:item:import')")
     public CommonResult<MdmItemImportRespVO> importExcel(@RequestParam("file") MultipartFile file,
                                                          @RequestParam(value = "updateSupport", required = false, defaultValue = "false") Boolean updateSupport) throws Exception {
-        List<MdmItemImportExcelVO> list = ExcelUtils.read(file, MdmItemImportExcelVO.class);
+        List<MdmItemImportExcelVO> list;
+        try {
+            list = ExcelUtils.read(file, MdmItemImportExcelVO.class);
+        } catch (cn.idev.excel.exception.ExcelDataConvertException e) {
+            int row = e.getRowIndex() == null ? 0 : e.getRowIndex() + 1;
+            int col = e.getColumnIndex() == null ? 0 : e.getColumnIndex() + 1;
+            String cellVal = e.getCellData() == null ? "" : String.valueOf(e.getCellData().getStringValue());
+            throw new cn.iocoder.yudao.framework.common.exception.ServiceException(400,
+                    "Excel 绗� " + row + " 琛岀 " + col + " 鍒楁暟鎹��" + cellVal + "銆忔牸寮忎笉姝g‘锛岃妫�鏌ヨ鍒楀唴瀹癸紙渚嬪鈥滅姸鎬佲�濊濉� 0/1 鎴� 鍚敤/鍋滅敤锛�");
+        } catch (Exception e) {
+            throw new cn.iocoder.yudao.framework.common.exception.ServiceException(400,
+                    "Excel 瑙f瀽澶辫触锛�" + e.getMessage() + "锛岃浣跨敤绯荤粺鈥滀笅杞藉鍏ユā鏉库�濆苟鎸夋ā鏉垮~鍐欍��");
+        }
         return success(itemService.importItemList(list, updateSupport));
     }
 
diff --git a/yudao-module-mdm/src/main/java/cn/iocoder/yudao/module/mdm/controller/admin/item/vo/MdmItemImportExcelVO.java b/yudao-module-mdm/src/main/java/cn/iocoder/yudao/module/mdm/controller/admin/item/vo/MdmItemImportExcelVO.java
index 9fa5c81..a490136 100644
--- a/yudao-module-mdm/src/main/java/cn/iocoder/yudao/module/mdm/controller/admin/item/vo/MdmItemImportExcelVO.java
+++ b/yudao-module-mdm/src/main/java/cn/iocoder/yudao/module/mdm/controller/admin/item/vo/MdmItemImportExcelVO.java
@@ -74,7 +74,7 @@
     @ExcelProperty("淇濊川鏈�(澶�)")
     private Integer expiryDay;
 
-    @ExcelProperty("鐘舵��")
+    @ExcelProperty(value = "鐘舵��", converter = StatusTextConverter.class)
     private Integer status;
 
     @ExcelProperty("鏄惁鍚屾鍒癕ES")
diff --git a/yudao-module-mdm/src/main/java/cn/iocoder/yudao/module/mdm/controller/admin/item/vo/StatusTextConverter.java b/yudao-module-mdm/src/main/java/cn/iocoder/yudao/module/mdm/controller/admin/item/vo/StatusTextConverter.java
new file mode 100644
index 0000000..d01affa
--- /dev/null
+++ b/yudao-module-mdm/src/main/java/cn/iocoder/yudao/module/mdm/controller/admin/item/vo/StatusTextConverter.java
@@ -0,0 +1,57 @@
+package cn.iocoder.yudao.module.mdm.controller.admin.item.vo;
+
+import cn.idev.excel.converters.Converter;
+import cn.idev.excel.enums.CellDataTypeEnum;
+import cn.idev.excel.metadata.GlobalConfiguration;
+import cn.idev.excel.metadata.data.ReadCellData;
+import cn.idev.excel.metadata.property.ExcelContentProperty;
+
+/**
+ * 鐗╂枡瀵煎叆鈥滅姸鎬佲�濆垪杞崲鍣細
+ * 鍏煎 鏁板瓧(0/1)銆佷腑鏂囷紙鍚敤/鍋滅敤銆佸紑鍚�/鍏抽棴銆佹槸/鍚︼級銆佽嫳鏂囷紙true/false銆乪nable/disable锛夈��
+ * 鏃犳硶璇嗗埆鏃惰繑鍥� null锛堢敱涓氬姟灞傛寜榛樿鈥滃惎鐢ㄢ�濆鐞嗭級锛岄伩鍏嶇洿鎺ユ姏鍑衡�滅郴缁熷紓甯糕�濄��
+ */
+public class StatusTextConverter implements Converter<Integer> {
+
+    @Override
+    public Class<Integer> supportJavaTypeKey() {
+        return Integer.class;
+    }
+
+    @Override
+    public CellDataTypeEnum supportExcelTypeKey() {
+        return CellDataTypeEnum.STRING;
+    }
+
+    @Override
+    public Integer convertToJavaData(ReadCellData<?> cellData, ExcelContentProperty contentProperty,
+                                     GlobalConfiguration globalConfiguration) {
+        if (cellData == null) {
+            return null;
+        }
+        if (cellData.getType() == CellDataTypeEnum.NUMBER && cellData.getNumberValue() != null) {
+            return cellData.getNumberValue().intValue() >= 1 ? 1 : 0;
+        }
+        String s = cellData.getStringValue();
+        if (s == null) {
+            return null;
+        }
+        s = s.trim();
+        if (s.isEmpty()) {
+            return null;
+        }
+        if ("0".equals(s) || s.contains("鍚敤") || s.contains("寮�鍚�") || "鏄�".equals(s)
+                || "true".equalsIgnoreCase(s) || "enable".equalsIgnoreCase(s)) {
+            return 0;
+        }
+        if ("1".equals(s) || s.contains("鍋滅敤") || s.contains("鍏抽棴") || "鍚�".equals(s)
+                || "false".equalsIgnoreCase(s) || "disable".equalsIgnoreCase(s)) {
+            return 1;
+        }
+        try {
+            return Integer.parseInt(s);
+        } catch (NumberFormatException e) {
+            return null;
+        }
+    }
+}

--
Gitblit v1.9.3