当前位置: 首页 > article >正文

若依excel工具类导出excel模板数据带下拉映射

导出模板代码,原理是combo属性 传递一个数组 里面是label下拉数组。

    @Override
    public void downloadTemplate(HttpServletResponse response) {
        ExcelUtil<ThMachineryManageExcel> util = new ExcelUtil<>(ThMachineryManageExcel.class);
        List<SysDistrictExcel> districtExcelCache = DistrictUtils.getDistrictExcelCache();
        String[] array = districtExcelCache.stream()
                .map(SysDistrictExcel::getName)
                .toArray(String[]::new);
        util.combo("districtCode", array);
        util.importTemplateExcel(response, "数据模板");
    }

导入代码映射逻辑 util.readConverterExp 映射数据,数据结构是String类型多个逗号隔开:label=value

  @Override
    public R<?> importData(MultipartFile file) throws IOException {
        ExcelUtil<ThMachineryManageExcel> util = new ExcelUtil<>(ThMachineryManageExcel.class);
        List<SysDistrictExcel> districtExcelCache = DistrictUtils.getDistrictExcelCache();
        Map<String, SysDistrictExcel> districtMap = districtExcelCache.stream()
                .collect(Collectors.toMap(SysDistrictExcel::getCode, district -> district));
        String readConverterExp = districtExcelCache.stream()
                .map(district -> district.getCode() + "=" + district.getName())
                .collect(Collectors.joining(","));
        // 映射数据label和value        
        util.readConverterExp("districtCode", readConverterExp);
        List<ThMachineryManageExcel> excelList = util.importExcel(file.getInputStream());
        if (ObjectUtil.isEmpty(excelList)){
            throw new ServiceException("导入数据不能为空!");
        }
        List<ThMachineryManage> saveOrUpdateList = new ArrayList<>();

        int successNum = 0;
        int updateNum = 0;
        int errorNum = 0;
        StringBuilder successMsg = new StringBuilder();
        for (ThMachineryManageExcel data : excelList){
            try {
                ThMachineryManage topic = BeanUtil.copyProperties(data, ThMachineryManage.class);
                //校验基本数据
                BeanValidators.validateWithException(validator,topic);
                ThMachineryManage oneData = getOne(new LambdaQueryWrapper<ThMachineryManage>().eq(ThMachineryManage::getBrand, data.getBrand()));
                //校验通过 开始检测数据是否重复
                if (ObjectUtil.isNotNull(oneData)){
                    //说明是更新数据
                    topic.setId(oneData.getId());
                    updateNum++;
                }else {
                    successNum++;
                }
                SysDistrictExcel sysDistrictExcel = districtMap.get(data.getDistrictCode());
                //业务逻辑  存储行政区更多的数据
                topic.setCountyCode(sysDistrictExcel.getCountyCode());
                topic.setTownCode(sysDistrictExcel.getTownCode());
                topic.setVillageCode(sysDistrictExcel.getVillageCode());
                topic.setDistrictLevel("2");
                topic.setDistrictName(sysDistrictExcel.getName());
                saveOrUpdateList.add(topic);
            }catch (Exception e){
                errorNum++;
                int count = excelList.indexOf(data);
                String message = e.getMessage();
                successMsg.append("第").append(count+1).append("条数据导入失败,原因:").append(message).append(";");
                break;
            }
        }
        // 数据全部正确时 进行批量插入/更新
        if (!saveOrUpdateList.isEmpty()&&errorNum==0){
            super.saveOrUpdateBatch(saveOrUpdateList);
            if (successNum>0){
                successMsg.append("成功导入").append(successNum).append("条数据");
            }
            if (updateNum>0){
                successMsg.append("成功更新").append(updateNum).append("条数据");
            }
            return R.ok(successMsg.toString());
        }else {
            return R.fail(successMsg.toString());
        }
    }
原文地址:https://blog.csdn.net/zangqi123/article/details/146333631
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.kler.cn/a/592959.html

相关文章:

  • 数字化工厂智能制造精益化管理智能工厂数据分析大数据解决方案精品PPT格式
  • 使用 `better-sqlite3` 与 `Express.js` 的最佳实践:是否需要关闭数据库连接?
  • Android手机中各类安全相关知识总结
  • 如何在WordPress中添加下载链接?
  • 【从零开始学习计算机科学】设计模式(二)工厂模式、抽象工厂模式、单例模式、建造者模型、原型模式
  • 基于ssm学科竞赛小程序的设计及实现(源码+lw+部署文档+讲解),源码可白嫖!
  • 数据结构:二叉树(一)·(重点)
  • dockercompose如何重启单个服务和所有服务
  • 【平台优化】大数据集群一个客户端参数引起的任务性能差的问题
  • 【RabbitMQ】RabbitMQ如何保证消息不丢失?
  • 分布式唯一ID生成算法——MongoDB ObjectId 算法
  • 企业微信群聊机器人开发
  • PyQt6加载视频方法示例
  • 单片机学完开发板,如何继续提升自己的技能?
  • 如何在项目中有效管理设计模式的复杂性
  • 【漫话机器学习系列】149.ROC 曲线(Receiver Operating Characteristic Curve)
  • HarmonyOS Next中的弹出框使用
  • DockerTLS加密/不加密传输
  • 科技快讯 | AI助手也“摆烂”;国内独有“玻璃光盘”技术发布;“全国消协智慧315平台”正式上线
  • Leetcode-100 回溯法-全排列