Skip to content

POST /dm-store/manufacturer/importExcel

Content-Type: multipart/form-data

触发按钮:无

入参

传递对象:MultipartFile

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

出参

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

前端校验规则

前端校验
├── 权限校验
│   └── 导入按钮权限
│       └── v-auth: 'information:manufacturer:import:popup'
├── 文件上传校验
│   └── file
│       ├── accept: .xlsx,.xls
│       ├── 文件格式限制:仅允许 .xlsx、.xls
│       ├── 文件大小限制:小于 5MB
│       └── 上传数量限制:仅保留最后一次选择的 1 个文件
└── 提交拦截校验
    └── importFile
        ├── 未选择文件时拦截提交
        ├── 文件后缀非 .xlsx/.xls 时拦截提交
        └── 文件大小≥5MB 时拦截提交

后端逻辑

业务流程:校验导入数据 -> 校验制造商唯一性 -> 识别新增或更新记录 -> 生成制造商编号 -> 批量保存制造商
├── 解析Excel导入数据
│   └── ExcelImportHandler.execute :339-340
├── 校验并归集有效数据
│   ├── 查询未删除制造商
│   │   └── ManufacturerServiceImpl.list :368
│   ├── 校验必填项、联系方式格式与唯一性:handleImportData :370-435
│   └── 存在错误数据则返回失败明细:handleImportData :437-444
├── 识别新增或更新记录
│   └── 按制造商编码/名称匹配现有记录:handleImportData :447-460
├── 生成制造商编号
│   ├── 新增记录生成编号:handleImportData :464-466
│   └── RedisService.getCommonSeqNo :465
└── 批量保存制造商
    └── ManufacturerServiceImpl.saveOrUpdateBatch :472

后端校验规则

后端校验
├── 业务约束校验
│   └── 校验导入数据量上限不能超过10000条:handleImportData :355-357
│       └── ExceptionCode.Ex600148
├── 条件业务约束
│   └── 生效条件: 当前行联系方式非空且系统存在制造商数据;条件表达式: CollectionUtils.isNotEmpty(doList) && StringUtils.isNotBlank(t.getPhone())
│       └── 校验联系方式是否已存在:handleImportData :377-393
│           └── StoreExceptionCode.EX201055
└── 业务唯一性校验
    ├── 校验导入文件内制造商名称是否重复:handleImportData :407-409
    │   └── StoreExceptionCode.EX201034
    ├── 校验导入文件内制造商编码是否重复:handleImportData :411-413
    │   └── StoreExceptionCode.EX201035
    └── 生效条件: 当前行与已收集成功行的联系方式均非空;条件表达式: StringUtils.isNotBlank(t.getPhone()) && StringUtils.isNotBlank(c.getPhone())
        └── 校验导入文件内联系方式是否重复:handleImportData :415-418
            └── StoreExceptionCode.EX201057

涉及数据库表

库名.表名mapper.statement描述
store.manufacturerManufacturerMapper.insertOrUpdateBatch批量新增或更新manufacturer数据