tuqin
4 天以前 10158625f1096c54664a5f87b3f32d33794e4eee
fix(mdm): 物料导入“状态”列兼容中文,读表异常改为友好提示

- 新增 StatusTextConverter:状态列支持 数字/启用停用/开启关闭/是否
- 修复客户表“状态=启用”导致 NumberFormatException 而提示“系统异常”
- 导入读表异常统一转为友好提示,避免 500
已添加1个文件
已修改2个文件
73 ■■■■■ 文件已修改
yudao-module-mdm/src/main/java/cn/iocoder/yudao/module/mdm/controller/admin/item/MdmItemController.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yudao-module-mdm/src/main/java/cn/iocoder/yudao/module/mdm/controller/admin/item/vo/MdmItemImportExcelVO.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
yudao-module-mdm/src/main/java/cn/iocoder/yudao/module/mdm/controller/admin/item/vo/StatusTextConverter.java 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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 + "』格式不正确,请检查该列内容(例如“状态”请填 0/1 æˆ– å¯ç”¨/停用)");
        } catch (Exception e) {
            throw new cn.iocoder.yudao.framework.common.exception.ServiceException(400,
                    "Excel è§£æžå¤±è´¥ï¼š" + e.getMessage() + ",请使用系统“下载导入模板”并按模板填写。");
        }
        return success(itemService.importItemList(list, updateSupport));
    }
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("是否同步到MES")
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、enable/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;
        }
    }
}