Skip to content

POST /dm-store/line/importExcel

Content-Type: multipart/form-data

触发按钮:无

入参

传递对象:MultipartFile

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

出参

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

前端校验规则

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

后端逻辑

业务流程:校验制程与产品线关联 -> 校验线体数据并识别已有记录 -> 绑定关联业务标识 -> 生成线体编号 -> 批量保存线体
├── 解析Excel导入数据
│   └── ExcelImportHandler.execute :346-347
├── 加载关联基础数据
│   ├── 查询可用制程
│   │   ├── ProcessService.findAllProcess :372
│   │   └── ProcessServiceImpl.list :326
│   ├── 查询未删除线体
│   │   └── LineServiceImpl.list :375
│   └── 查询可用产品线
│       ├── ProductLineService.findProductLineList :376
│       └── ProductLineServiceImpl.list :324
├── 校验并归集有效数据
│   ├── 校验制程存在:handleImportData :379-393
│   ├── 校验产品线存在并绑定产品线编号:handleImportData :395-403
│   ├── 校验线体必填项与导入内重复:handleImportData :406-446
│   └── 存在错误数据则返回失败明细:handleImportData :448-455
├── 识别新增或更新记录
│   └── 按线体编码/名称匹配现有记录:handleImportData :458-470
├── 绑定关联业务标识
│   └── 绑定制程编号:handleImportData :471-481
├── 生成线体编号
│   ├── 新增记录生成编号:handleImportData :487-489
│   └── RedisService.getCommonSeqNo :488
└── 批量保存线体
    └── LineServiceImpl.saveOrUpdateBatch :495

后端校验规则

后端校验
├── 业务约束校验
│   └── 校验导入数据量上限不能超过10000条:handleImportData :362-364
│       └── ExceptionCode.Ex600148
├── 数据存在性校验
│   ├── 生效条件: 存在有效制程集合且当前行填写了制程名称;条件表达式: CollectionUtils.isNotEmpty(allProcess) && StringUtils.isNotBlank(t.getProcessName())
│   │   └── 校验制程名称是否存在:handleImportData :379-385
│   │       └── ExceptionCode.EX90019
│   ├── 生效条件: 存在有效制程集合且当前行填写了制程编码;条件表达式: CollectionUtils.isNotEmpty(allProcess) && StringUtils.isNotBlank(t.getProcessCode())
│   │   └── 校验制程编码是否存在:handleImportData :387-392
│   │       └── ExceptionCode.EX90019
│   └── 生效条件: 当前行产品线名称非空;条件表达式: StringUtils.isNotBlank(t.getProductLineName())
│       └── 校验产品线名称是否存在:handleImportData :397-400
│           └── ExceptionCode.EX90022
└── 业务唯一性校验
    ├── 校验导入文件内线体名称是否重复:handleImportData :424-426
    │   └── StoreExceptionCode.EX201032
    └── 校验导入文件内线体编码是否重复:handleImportData :428-430
        └── StoreExceptionCode.EX201033

涉及数据库表

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