Skip to content

POST /dm-device/deviceIssues/importExcel

Content-Type: multipart/form-data

触发按钮:无

入参

传递对象:MultipartFile

字段类型必填多选校验规则说明
fileMultipartFile-Excel 文件

出参

传递对象:ResultData<ImportResultInfo><导入结果对象>

前端校验规则

前端校验
├── 权限校验
│   └── 导入按钮权限
│       └── v-auth: 'information:classification:import:popup'
├── 文件上传校验
│   └── file
│       ├── accept: .xlsx,.xls
│       ├── 文件扩展名仅允许 .xlsx/.xls
│       ├── 文件大小限制:小于 5MB
│       └── 仅保留最后一次选择的 1 个文件
└── 提交拦截校验
    └── importExcel
        └── 未选择文件时提示错误并拦截提交

后端逻辑

业务流程:解析导入数据 -> 校验并去重问题归类 -> 生成问题编码 -> 批量保存问题归类
├── 解析导入文件
│   └── DeviceIssuesClassificationService.importExcel :118
├── 执行Excel导入
│   └── ExcelImportHandler.execute :440-441
├── 校验并去重导入数据
│   ├── 按问题分类和故障现象去重:handleImportData :494-497
│   └── 校验库内是否已存在相同问题归类
│       └── DeviceIssuesClassificationServiceImpl.list :499-502
├── 存在错误数据时终止入库:importExcel :509-512,523-525
└── 生成问题编码并批量入库
    ├── redisService.getCommonAutoincrementNo :516
    └── DeviceIssuesClassificationServiceImpl.saveBatch :521

后端校验规则

后端校验
├── 业务约束校验
│   ├── 校验导入数量上限不能超过10000条:handleImportData :454-457
│   │   └── ExceptionCode.Ex600148
│   ├── 校验导入数据不能为空:handleImportData :458-462
│   │   └── ExceptionCode.EX600097
│   ├── 生效条件: 导入行问题分类为空;条件表达式: t.getIssueClassify() == null
│   │   └── 校验问题分类不能为空:handleImportData :467-469
│   │       └── ExceptionCode.EX1000111
│   ├── 生效条件: 导入行问题分类为0;条件表达式: t.getIssueClassify() == 0
│   │   └── 校验问题分类取值有效:handleImportData :470-472
│   │       └── ExceptionCode.EX1000113
│   └── 生效条件: 导入行故障现象为空;条件表达式: StringUtils.isBlank(t.getDescription())
│       └── 校验故障现象不能为空:handleImportData :474-476
│           └── ExceptionCode.EX1000112
└── 业务唯一性校验
    └── 生效条件: 同问题分类+故障现象已存在;条件表达式: eq(issueClassify, description, isDelete=0) 命中
        └── 校验问题归类是否重复:handleImportData :499-505
            └── ExceptionCode.EX1000110

涉及数据库表

库名.表名mapper.statement描述
classificationClassificationMapper.insertOrUpdateBatch批量新增或更新classification数据