IT维修记录表导入接口的设计与实现思路

1. 引言

在上篇文章中,我们详细讨论了IT设备信息表的导入接口设计思路。这篇文章趁热打铁,继续探讨IT维修记录表的导入接口设计思路。

2. 理解IT维修记录表的数据来源

首先,我们需要明确IT维修记录表的数据来源。每一行数据代表一个设备的维修记录,而一个设备可以有多次维修记录。因此,IT维修记录表存储的是所有设备的维修记录,每个设备可以在表中有多行数据。

3. 导入接口的实现思路

理解了数据来源后,我们的任务就变得简单了。与IT设备信息表的导入接口不同,我们不需要做大量的重复性判断,只需将Excel中的数据直接导入到IT维修记录表中即可。代码如下。

@SneakyThrows
    @ApiOperation(value = "导入维修记录")
    @PostMapping("/uploadDevice")
    public Result uploadDevice(@RequestParam("file") MultipartFile file, @RequestParam("extraCheck") boolean extraCheck) {
        //必要校验
        final StringBuffer sb = new StringBuffer();
        //额外校验的校验结果
        final StringBuffer extra = new StringBuffer();

        final List<ItMaintenanceRecordsData> cacheDataList = new ArrayList<>(8);
        EasyExcel.read(file.getInputStream(), ItMaintenanceRecordsData.class, new ReadListener<ItMaintenanceRecordsData>() {
            int index = 1;
            private Map<String, Integer> map = new HashMap<>(8);

            @Override
            public void invoke(ItMaintenanceRecordsData data, AnalysisContext analysisContext) {
                try {
                    index++;
                    // 校验参数是否合法
                    ValidateUtil.validate(data);
                        map.put(data.getDeviceCode(), index);
                        cacheDataList.add(data);
                } catch (ValidationException e) {
                    sb.append("第").append(index).append("行参数有误:").append(e.getMessage()).append(System.getProperty("line.separator"));
                } catch (Exception e) {
                    log.error("数据导入异常", e);
                    sb.append("第").append(index).append("行参数有误:").append("数据异常").append(System.getProperty("line.separator"));
                }
            }

            @Override
            public void doAfterAllAnalysed(AnalysisContext analysisContext) {
            }

        }).sheet().doRead();

        if (sb.length() > 0) {
            cacheDataList.clear();
            //停止导入
            return Result.fail(sb.toString());
        }

        if (extraCheck && extra.length() > 0) {
            cacheDataList.clear();
            return Result.success(extra.toString());
        }

        //数据导入
        for (ItMaintenanceRecordsData data : cacheDataList) {
            itMaintenanceRecordsService.importItMaintenanceRecords(data);
        }

        return Result.success(sb.toString());
    }
4. 数据转换与特殊处理

在导入数据时,我们需要将Excel中的数据转换为实体对象,并进行必要的参数转换。例如,Excel中的数据可能是“在保”,而数据库中存储的值是“0”。此外,Excel中的字段可能不全,需要我们手动赋值。例如,IT维修记录表中的it_device_id字段需要通过设备编码找到对应的设备ID,并进行赋值。

importItMaintenanceRecords方法的实现如下。

5. 深度思考

其实纵观整个思路,你会发现Excel中的数据和最终存储在数据库中的数据差别其实很大。比如说,Excel中的数据是“在保”,而数据库中是用“0”来存储的;再比如说,Excel中可能有3个字段,而数据库中有5个字段,那么剩下的两个字段就需要我们手动赋值。这是导入接口最难的一点,只要把这一点处理到位,基本上导入接口就完成了95%。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值