Skip to content

POST /dm-device/device/main/import

Content-Type: multipart/form-data

触发按钮:无

入参

传递对象:MultipartFile

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

出参

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

前端校验规则

文件上传校验
└── file
    ├── accept:.xlsx,.xls
    ├── 文件格式限制:file.name 需以 .xlsx 或 .xls 结尾,否则直接拦截
    ├── 文件大小限制:file.size / 1024 / 1024 < 5
    └── 上传数量限制:仅保留最后一次选择的 1 个文件
提交拦截校验
└── import
    └── fileList 为空时直接拦截提交

后端逻辑

业务流程:解析设备导入数据 -> 校验并映射设备主数据 -> 区分新增与更新台账 -> 批量落库并补记履历/计量台账

├── 解析设备导入数据
│   ├── Excel导入回调:ExcelImportHandler.execute :720-721
│   └── 返回导入失败明细:handleImportData :737-747
├── 校验并映射设备主数据
│   ├── 加载线体映射:LineClient.getAllToMap :781
│   │   └── 查询可用线体:LineServiceImpl.getLineMap :279-297
│   ├── 加载机型映射:ProductModelClient.getModalToMap :782
│   │   └── 查询有效机型:ProductModelServiceImpl.getModalToMap :117-130
│   ├── 加载产品线映射:ProductLineClient.queryList :709
│   │   └── 查询有效产品线:ProductLineServiceImpl.findProductLineList :320-328
│   ├── 查询有效设备类型:DeviceTypeService.list :796
│   ├── 匹配设备类型并补齐规格:handleImportData :814-825
│   ├── 按设备编号识别既有台账:DeviceMainService.list :830-831
│   ├── 绑定产品线:handleImportData :846-854
│   ├── 绑定管理部门:DeptClient.queryByDeptName :860
│   │   └── 查询未删除部门:DepartmentController.queryByDeptName :123-127
│   ├── 绑定负责人:UserClient.queryUserByName :872
│   │   └── 查询用户:UserServiceImpl.queryUserByName :331-339
│   ├── 绑定线体:handleImportData :881-891
│   ├── 绑定机型:handleImportData :894-902
│   ├── 生成变更对比键:handleImportData :904-906
│   └── 存在无效数据则终止导入:handleImportData :944-950
├── 新建设备台账
│   ├── 生成设备编号与序列号:DeviceMainServiceImpl.getDeviceCodeAndNum :1467-1475
│   │   ├── RedisService.getDeviceCodeSeqNo :1472
│   │   ├── RedisKey: DEVICE_MAIN_CODE_XL + deviceSpecification :193-196
│   │   └── 编号规则
│   │       └── deviceCode = deviceSpecification + 4位序列号
│   ├── 生成设备台账号:RedisService.getCommonSeqNo :967
│   │   ├── RedisKey: COMMON_SEQ_PREFIX + DEVICE_CODE + ":" + TABLE_DEVICE_MAIN :169-172
│   │   └── 编号规则
│   │       └── 6位流水号
│   ├── 新增设备履历:DeviceRecordService.creatRecord :974
│   │   └── 保存履历:DeviceRecordService.save :113
│   ├── 按计量标记补建计量台账:DeviceMainServiceImpl.addMeasureMain :1349-1358
│   │   ├── 查询计量台账:DeviceMeasureService.getOne :1350-1351
│   │   └── 保存计量台账:DeviceMeasureService.save :1358
│   └── 批量新增设备:DeviceMainService.saveBatch :981
└── 更新既有设备台账
    ├── 关键信息变更时补记改造履历
    │   └── 记录改造履历:DeviceRecordService.updateCreatRecord :995
    │       └── 保存履历:DeviceRecordService.save :127
    ├── 按计量标记补建计量台账:DeviceMainServiceImpl.addMeasureMain :1349-1358
    │   ├── 查询计量台账:DeviceMeasureService.getOne :1350-1351
    │   └── 保存计量台账:DeviceMeasureService.save :1358
    └── 批量更新设备:DeviceMainService.updateBatchById :1007

后端校验规则

业务约束校验
└── 校验导入数据不能为空且导入条数不得超过10000条:handleImportData :749-755
    ├── ExceptionCode.EX100008
    └── ExceptionCode.Ex600148
业务唯一性校验
└── 生效条件: 导入行填写设备编号;条件表达式: 同一导入批次内 deviceCode 不可重复:handleImportData :770-775
    └── ExceptionCode.EX1000013
数据存在性校验
├── 生效条件: 设备分类、设备类型、设备型号已提供;条件表达式: 设备分类+设备类型必须存在,设备分类+设备类型+设备型号必须存在,且匹配设备类型必须已配置设备规格:handleImportData :814-822
│   ├── ExceptionCode.EX1000005
│   ├── ExceptionCode.EX1000141
│   └── ExceptionCode.EX10000107
├── 生效条件: 导入行填写设备编号;条件表达式: 设备编号必须在台账中存在:handleImportData :829-833
│   └── ExceptionCode.EX1000006
├── 校验产品线名称必须提供且能匹配产品线档案:handleImportData :846-854
│   ├── ExceptionCode.EX90021
│   └── ExceptionCode.EX90022
├── 校验部门名称必须提供且能匹配部门档案:handleImportData :857-866
│   ├── ExceptionCode.EX1000020
│   └── ExceptionCode.EX300028
├── 生效条件: 导入行填写负责人;条件表达式: 负责人必须存在:handleImportData :870-878
│   └── ExceptionCode.EX1000022
├── 生效条件: 导入行填写线体;条件表达式: 线体必须存在,且线体所属产品线必须等于导入解析出的产品线:handleImportData :881-887
│   └── ExceptionCode.EX1000016
└── 生效条件: 导入行填写机型;条件表达式: 机型必须存在:handleImportData :894-898
    └── ExceptionCode.EX1000017
条件业务约束
└── 生效条件: 导入行填写设备编号;条件表达式: 已存在设备的 deviceTypeNo 必须等于导入解析出的 deviceTypeNo:handleImportData :840-842
    └── ExceptionCode.EX1000140

涉及数据库表

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