Excel实现批量更新数据

实现通过Excel批量更新数据

前端H5

<div id="batchUpdateGiftPoolWin" class="easyui-window" title="批量修改商品" style="width:350px;height:250px;display:none"
     data-options="iconCls:'icon-save',modal:true,closed:true">
    <div class="easyui-layout" data-options="fit:true" style="margin:30px 0 0 0;text-align:center;">
        <form id="batchUpdateForm" enctype="multipart/form-data" method="post">
            <div style="margin-bottom:40px">
                <input class="easyui-filebox" label="选择文件:" labelPosition="left" data-options="prompt:'请选择Excel文件'"
                       name="giftPoolImport" id="updateGiftPoolImport"
                       style="width:200px" buttonText="选择"
                       accept="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-excel">
            </div>
        </form>
        <div style="margin-top:40px;text-align:center;">
            <a href="#" class="easyui-linkbutton" style="width:80px;" onclick="submitImportUpdateGiftPool()">修改</a>
        </div>
    </div>
</div>

前端JS(部分找不到的对象可删除)

function submitImportUpdateGiftPool() {
    let updateGiftPoolImport=$("#updateGiftPoolImport").filebox('getValue');
    if(updateGiftPoolImport ==undefined || updateGiftPoolImport==''){
        $.messager.alert('温馨提示', "请上传文件");
        return ;
    }
    $.messager.progress({
        title: '请稍后',
        msg: '数据提交中...'
    });
    setTimeout(function(){
        $.messager.progress('close');
    },5000);
    $('#batchUpdateForm').form('submit', {
        url: "/mallAdm/batchUpdateGiftPool",
        type: 'POST',
        success: function (data) {
            let result = eval('(' + data + ')');  // change the JSON string to javascript object
            if (result.code === 200) {
                $('#batchUpdateForm').form('reset');
                $('#dg').datagrid('reload');
                $('#category1').combobox('reload');
                $.messager.progress("close");
                $('#batchUpdateGiftPoolWin').window('close');
                $.messager.alert('温馨提示', result.msg);
            }else {
                $('#batchUpdateForm').form('reset');
                $('#dg').datagrid('reload');
                $('#category1').combobox('reload');
                $.messager.progress("close");
                $('#batchUpdateGiftPoolWin').window('close');
                $.messager.alert('温馨提示', result.msg);
            }

        },
        error : function() {
            // $.messager.progress("close");
            $.messager.alert('提示框','系统异常,联系开发人员');
            return false;
        }
    });
}

Java代码
contorller层

@PostMapping("/batchUpdateGiftPool")
    public Result batchUpdateGiftPool(HttpServletRequest request, ImportParams params, HttpServletResponse response) throws Exception {
        List<MallGiftPoolErrorVO>  list = giftPackService.executeBatchUpdateGiftPoolImport(request, params);
        if(CollectionUtils.isEmpty(list)){
            return Result.success(SuccessEnum.GLOBAL_UPLOAD_SUCCESS);
        }
        Map<String, String> head = new LinkedHashMap<>();
        head.put("skuId","商品编号");
        head.put("msg","说明");
        ExcelUtils.export("自选礼包商品池错误信息", response, list, head);
        return Result.error(ErrorEnum.GLOBAL_UPLOAD_ERROR);
    }

service层

 @Override
    public List<MallGiftPoolErrorVO> executeBatchUpdateGiftPoolImport(HttpServletRequest request, ImportParams params) throws Exception {
        String userId = request.getSession().getAttribute(Constants.GLOBAL_USER_ID_KEY).toString();
        Map<String, String> args = Maps.newLinkedHashMap();
        args.put("skuId", "商品名称");
        args.put("costPrice", "自选成本价");

        // 解析为对应更新数据
        List<MallGiftPoolDTO> giftList = parseFile2GiftPoolList(request, args);
        if (CollectionUtils.isEmpty(giftList)) {
            throw new MallException(ErrorEnum.SETTLE_EXCEL_INFO_ERROR);
        }
        log.info("导入的自选商品池数量:{}",giftList.size());
        //校验excel数据是否正确,组装数据
        List<MallGiftPoolErrorVO> errorVOList = checkGitePool(giftList, userId);
        log.info("导入的自选商品池错误数量:{}",errorVOList.size());
        if (CollectionUtils.isEmpty(errorVOList)) {
            List<String> skuIds = giftList.stream().map(MallGiftPoolDTO::getSkuId).collect(Collectors.toList());
            List<String> skuIdDbs = mallGiftPackDao.findGiftPoolSkuIds(skuIds);
            //修改的数据
            List<MallGiftPoolDTO> editGiftPool = giftList.stream().filter(item -> skuIdDbs.contains(item.getSkuId())
            ).collect(Collectors.toList());
            if (!CollectionUtils.isEmpty(editGiftPool)) {
                batchUpdateGiftPoolList(editGiftPool);
            }
            log.info("导入的自选商品池修改数量:{}",editGiftPool.size());
        }
        return errorVOList;
    }

private List<MallGiftPoolDTO> parseFile2GiftPoolList(HttpServletRequest request, Map<String, String> args) throws Exception {
        MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
        Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();
        MultipartFile tmp = fileMap.get("giftPoolImport");

        // 转换为临时的file文件,用于解析excel
        File file = File.createTempFile(String.valueOf(LocalDateTime.now().toEpochSecond(ZoneOffset.of("+8"))),
                tmp.getOriginalFilename().substring(tmp.getOriginalFilename().lastIndexOf(".")));
        tmp.transferTo(file);

        // 将拼装好的头部信息及要返回的class信息等传入,解析出可用的excel属性
        List<MallGiftPoolDTO> list = ImportExcelUtils.inputExcel(MallGiftPoolDTO.class, file, file.getName(), args);
//        log.info("解析上传后的礼包导入数据 >> {}", JSON.toJSONString(list));

        // 删除临时文件
        FileUtils.deleteFiles(file);

        return list;
    }

ImportExcelUtils中的方法

/**
     * 导入Excel文件
     *
     * @param cls      实体类 (需要符合JavaBean的要求,并且要有set方法)
     * @param file     File文件
     * @param fileName 文件名
     * @param args     实体类字段和对应中文名的字符串
     * @return
     * @throws Exception
     * @author Jwenk
     * @Time 2017-01-11
     */
    public static <T> List<T> inputExcel(Class cls, File file, String fileName, Map<String, String> args) throws Exception {
        List<T> list = new ArrayList<>();

        //根据Class文件创建一个对象
        Workbook wb = parseExcelFile(file, fileName);

        // 获取第一个Sheet表
        Sheet sheet;
        // 获取总表数
        int sheetCount = wb.getNumberOfSheets();
        // 获取总行数
        int rowCount;

        // 遍历所有的Sheet
        for (int n = 0; n < sheetCount; n++) {
            sheet = wb.getSheetAt(n);
            rowCount = sheet.getPhysicalNumberOfRows();
            for (int i = 1; i <= rowCount - 1; i++) {
                T object = (T) cls.newInstance();
                boolean b = parseExcel(sheet.getRow(i), object, args);
                if (b){
                    list.add(object);
                }
            }
        }
        return list;
    }

结束

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值