easyexcel填充数据和feign远程调用下载文件

数据填充

easyexcel官方文档: https://www.yuque.com/easyexcel/doc/easyexcel
填充的模板模板下载地址:https://download.csdn.net/download/qq_44732146/20926682
在这里插入图片描述
在这里插入图片描述
{}里面的名称要和Map里面的键名对上

下载好之后放在resources目录下
在这里插入图片描述

返回对象Result

/**
 * @author zhubayi
 *  结果封装对象
 */
public class Result implements Serializable {
    private Integer code=200;
    private boolean flag;//执行结果,true为执行成功 false为执行失败
    private String message;//返回提示信息,主要用于页面提示信息
    private Object data;//返回数据
    public Result(boolean flag, String message) {
        super();
        this.flag = flag;
        this.message = message;
    }
    public Result(boolean flag, String message, Object data) {
        this.flag = flag;
        this.message = message;
        this.data = data;
    }
    public Result(){}

    public Integer getCode() {
        return code;
    }

    public void setCode(Integer code) {
        this.code = code;
    }

    public boolean isFlag() {
        return flag;
    }
    public void setFlag(boolean flag) {
        this.flag = flag;
    }
    public String getMessage() {
        return message;
    }
    public void setMessage(String message) {
        this.message = message;
    }
    public Object getData() {
        return data;
    }
    public void setData(Object data) {
        this.data = data;
    }
}

实体类HotSetmeal

@Data
@AllArgsConstructor
@NoArgsConstructor
public class HotSetmeal{
    private String setmealName;
    private Long setmealCount;
    private BigDecimal proportion;
    private String remark;
}

controller

@RestController
@RequestMapping("/report")
public class ReportController {
 /**
     * 导出Excel报表
     * @return
     */
    @GetMapping("/exportBusinessReport")
    public Result exportBusinessReport(HttpServletResponse response){
        try {
            HashMap<String, Object> testMap = new HashMap<>();
            testMap.put("reportDate","2021-08-09");
            testMap.put("todayNewMember",10);
            testMap.put("totalMember",15);
            testMap.put("thisWeekNewMember",17);
            testMap.put("thisMonthNewMember",20);
            testMap.put("todayOrderNumber",14);
            testMap.put("thisWeekOrderNumber",18);
            testMap.put("thisMonthOrderNumber",30);
            testMap.put("todayVisitsNumber",20);
            testMap.put("thisWeekVisitsNumber",22);
            testMap.put("thisMonthVisitsNumber",33);
            ArrayList<HotSetmeal> hotSetmeals = new ArrayList<>();
            hotSetmeals.add(new HotSetmeal("入职无忧体检套餐(男女通用)",4L,new BigDecimal(0.5),"入职体检套餐"));
            hotSetmeals.add(new HotSetmeal("测试",4L,new BigDecimal(0.5),"测试套餐"));

            //开始写
            //EasyExcel.write("test.xlsx").withTemplate("report_template.xlsx").sheet().doFill(businessReport);
            //通过输出流进行文件下载
            ServletOutputStream out = response.getOutputStream();
            //设置文件类型
            response.setContentType("application/vnd.ms-excel");
            //设置编码格式
            response.setCharacterEncoding("utf-8");
            // https://www.jb51.net/article/30565.htm Content-Disposition 使用说明
            response.setHeader("Content-disposition", "attachment;filename=" + "report" + ".xlsx");
            // ResourceUtils.getFile("classpath:report_template.xlsx") 获取resources目录下的文件
            ExcelWriter excelWriter = EasyExcel.write(out).withTemplate( ResourceUtils.getFile("classpath:report_template.xlsx")).build();
            WriteSheet writeSheet = EasyExcel.writerSheet().build();
            //把数据填充进去
            excelWriter.fill(testMap, writeSheet);
            //填充集合
            excelWriter.fill(hotSetmeals,writeSheet);
            // 千万别忘记关闭流
            excelWriter.finish();
            out.flush();
            out.close();

            return new Result(true, MessageConstant.GET_BUSINESS_REPORT_FAIL,response);
        } catch (Exception e) {
            e.printStackTrace();
            return new Result(false, MessageConstant.GET_BUSINESS_REPORT_FAIL,null);
        }

    }
}

测试:http://127.0.0.1:你的端口/report/exportBusinessReport
在这里插入图片描述
打开它
在这里插入图片描述
可以看到数据都填充了进去。

feign远程调用下载文件

远程调用接口ReportFeignService

package com.zhubayi.mobile.feign;

import com.zhubayi.common.entity.Result;
import feign.Response;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;


/**
 * @author zhubayi
 * 统计报表
 */
@FeignClient(name = "health-provider")
public interface ReportFeignService {
    //导出数据
    @GetMapping("/report/exportBusinessReport")
    Response exportBusinessReport();
}

远程调用的controller类

package com.zhubayi.mobile.controller;

import com.zhubayi.common.entity.Result;
import com.zhubayi.mobile.feign.ReportFeignService;
import feign.Response;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStream;
@RestController
@RequestMapping("/api/report")
public class ReportController {
	@Autowired
    private ReportFeignService reportFeignService;
    @GetMapping("/exportBusinessReport")
     public void exportBusinessReport(HttpServletResponse  response) throws IOException {
        Response downResponse = reportFeignService.exportBusinessReport();
        ServletOutputStream outputStream = response.getOutputStream();
        //设置文件类型
        response.setContentType("application/vnd.ms-excel");
        //设置编码格式
        response.setCharacterEncoding("utf-8");
        // https://www.jb51.net/article/30565.htm Content-Disposition 使用说明
        response.setHeader("Content-disposition", "attachment;filename=" + "report" + ".xlsx");
        InputStream inputStream =null;
        try {
            Response.Body body = downResponse.body();
            inputStream = body.asInputStream();
            byte[] bytes = new byte[1024];
            int len = 0;
            while ((len = inputStream.read(bytes)) != -1) {
                outputStream.write(bytes, 0, len);
            }
        }catch (Throwable e){
            e.printStackTrace();
        }finally {
            inputStream.close();
            outputStream.flush();
            outputStream.close();
        }
    }
}

调用这个接口即可进行下载。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值