动态导出数据列表。导出数据形式为 excel 文件形式

项目场景:

动态导出数据列表。导出数据形式为 excel 文件形式。


问题描述

提示:这里描述项目中遇到的问题:

根据筛选条件动态导出数据列表。导出数据形式为 excel 文件形式
使用 this.$axios.get(url, { responseType: “blob” })

get请求方式。

 <el-button ref="btnStatusDown" type="success" size="mini" icon="el-icon-download" @click="exportAllList">导出</el-button>
  //导出
     @GetMapping("/all/export")
    public void exportAllList(@RequestParam Map<String, Object> param, HttpServletResponse response){
        SysUserEntity user = getUser();
        
        if(user.getUserId() != Constant.SUPER_ADMIN){
            if(user.getSuperUser()!=1){
                param.put("createBy",user.getUserId());
            }else{
                param.put("companyId",user.getCompanyId());
            }
        }
        if(!(param.get("repairDate").equals("undefined") || param.get("repairDate").equals("null"))) {
            String[] repairDate = param.get("repairDate").toString().split(",");
            param.put("repairDate",repairDate);
        }else{
            String[] repairDate = null;
            param.put("repairDate",repairDate);
        }
         if(!(param.get("createDate").equals("undefined") || param.get("createDate").equals("null"))) {
             String[] createDate = param.get("createDate").toString().split(",");
             param.put("createDate",createDate);
         }else{
             String[] createDate = null;
             param.put("createDate",createDate);
         }
        List<RepairEntity> list= new ArrayList<>();
        list= repairService.queryList(param);


        RepairExportEntity[] listEntity = new RepairExportEntity [list.size()];
        int i=0;
        for(RepairEntity entity:list){
            listEntity[i] = new RepairExportEntity();

            listEntity[i].setNum(entity.getNum());
            listEntity[i].setDeviceSn(entity.getDeviceSn());
            listEntity[i].setDeviceName(entity.getDeviceName());
            listEntity[i].setCompanyName(entity.getCompanyName());
            listEntity[i].setDeviceStatus(DeviceConstant.STATUS.get(entity.getStatus()));
            //类型1
     //       listEntity[i].setServiceTypeName(RepairConstant.SERVICE_TYPE.get(entity.getServiceType()));
            //类型2
            listEntity[i].setFaultTypeName(RepairConstant.FAULT_TYPE.get(entity.getFaultType()));
            //等级1
            listEntity[i].setFaultRankName(RepairConstant.FAULT_RANK.get(entity.getFaultRank()));
            listEntity[i].setStatusName(RepairConstant.STATUS.get(entity.getStatus()));
            listEntity[i].setTypeName(RepairConstant.REPAIR_TYPE.get(entity.getType()));
            listEntity[i].setRepairDate(entity.getRepairDate());
            listEntity[i].setRepairAmount(entity.getRepairAmount());
        
        .......
        
            if(entity.getUserId() != null && entity.getUserId() > 0){
                user = sysUserService.getById(entity.getUserId());
                if(user != null ){
                    listEntity[i].setUserName(user.getName());
                }
            }
            if(entity.getCreateBy() != null && entity.getCreateBy() > 0){
                user = sysUserService.getById(entity.getCreateBy());
                if(user != null ){
                    listEntity[i].setCreateByName(user.getName());
                }
            }
          
        

            Long repair_id = Long.valueOf(entity.getId());
            List<RepairSparePartEntity> list1 = repairSparePartService.list(new QueryWrapper<RepairSparePartEntity>().eq("repair_id", repair_id).orderByDesc("id"));
            if (list1.size() > 0) {
                List<String> name=new ArrayList();
                List<String> unit=new ArrayList();
                List<String> count=new ArrayList();
                List<String> price=new ArrayList();
                List<String> cost=new ArrayList();
                List<String> amount=new ArrayList();

            for(RepairSparePartEntity sparePart:list1){

                name.add(sparePart.getName());
                String name1 = StringUtils.join(name,",");

                unit.add(sparePart.getUnit());
                String unit1 = StringUtils.join(unit,",");

                count.add(sparePart.getCount().toString());
                String count1 = StringUtils.join(count,",");

                DecimalFormat df=new DecimalFormat("0.00");     //设置格式 保留小数点后两位
                String str=df.format(sparePart.getPrice());
                price.add(str);
                String price1 = StringUtils.join(price,",");

                cost.add(sparePart.getCount().toString());
                String cost1 = StringUtils.join(cost,",");

                DecimalFormat df1=new DecimalFormat("0.00");    //设置格式 保留小数点后两位
                String str1=df1.format(sparePart.getAmount());
                amount.add(str1);
                String amount1 = StringUtils.join(amount,",");

                listEntity[i].setName(name1);            // 名称
                listEntity[i].setUnit(unit1);           // 单位
                listEntity[i].setCount(count1);        // 数量
                listEntity[i].setPrice(price1);       // 单价
                listEntity[i].setCost(cost1);        // 费用
                listEntity[i].setAmount(amount1);   // 总价格

              }
            }

            i++;

        }

        List list1 = Arrays.asList(listEntity);
        ExcelWriter writer = ExcelUtil.getBigWriter();
        //4.写入标题        表头设置  自定义标题名称
        writer.addHeaderAlias("num", "单号");
        writer.addHeaderAlias("deviceSn", "编号");
        writer.addHeaderAlias("deviceName", "名称");
        writer.addHeaderAlias("companyName", "名称1");
        writer.addHeaderAlias("deptName", "名称2");
        writer.addHeaderAlias("deviceStatus", "状态");
        writer.addHeaderAlias("typeName", "类型");
        writer.addHeaderAlias("userName", "名称");
        writer.addHeaderAlias("repairDate", "日期");
        writer.addHeaderAlias("managerName", "名称");
        writer.addHeaderAlias("handleName", "aa");
        writer.addHeaderAlias("serviceTypeName", "类型");
        writer.addHeaderAlias("faultTypeName", "类型");
 ............
        ServletOutputStream out = null;

        try {
            //写入数据
            //    writer.write(list.subList(0,list.size()), true);
            writer.write(list1.subList(0,list1.size()), true);
            response.setHeader("Content-type","application/octet-stream");  //将文件设置为流的形式进行传递,返回的是二进制形式
            response.setCharacterEncoding("UTF-8");
            response.setHeader("Content-Disposition","attachment;filename="+new String("维修工单信息表".getBytes("UTF-8"),"ISO-8859-1")+".xls");

            out = response.getOutputStream();
            writer.flush(out, true);

        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            // 关闭writer,释放内存
            writer.close();
            //此处记得关闭输出Servlet流
            IoUtil.close(out);
        }
    }

    exportAllList() {
            var url = "/repair/all/export?";
            if (this.dataForm) {
                url +=
                    "companyId=" +
                    this.dataForm.companyId +
            
           
                    "&createDate=" +
                    this.dataForm.createDate +
                    "&serviceType=" +
                    this.dataForm.serviceType;
            }
            this.$axios
                .get(url, { responseType: "blob" })
                .then((response) => {
                    this.download(response);
                })
                .catch((error) => {
                    console.log(error);
                });
        },
xml查询:

 <select id="queryList" resultType="..........">
        SELECT * FROM ...............

        <if test="num!=null and num!='' ">
            and sc.num like '%${num}%'
        </if>
        <if test="deviceName!=null and deviceName!='' ">
            and sc.device_name like '%${deviceName}%'
        </if>
 </select>
注意,查询语句中   变量前面没有  p.    哦, 在此加上会出现错误。

##总结:
此种方法感觉代码量有点冗杂,寻找其它简洁的方法实现此功能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值