Appearance
POST /dm-device/deviceIssues/importExcel
Content-Type: multipart/form-data
触发按钮:无
入参
传递对象:MultipartFile
| 字段 | 类型 | 必填 | 多选 | 校验规则 | 说明 |
|---|---|---|---|---|---|
| file | MultipartFile | 否 | 否 | - | 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 | 描述 |
|---|---|---|
| classification | ClassificationMapper.insertOrUpdateBatch | 批量新增或更新classification数据 |