项目场景:
`
使用 另一种 方式 导出数据列表
问题描述
使用 post 方式 导出数据列表`
例如:数据传输过程中数据不时出现丢失的情况,偶尔会丢失一部分数据
APP 中接收数据代码:
<el-button
ref="btnStatusDown1"
type="success"
size="mini"
icon="el-icon-download"
@click="exportList"
>导出</el-button>
解决方案:
提示:这里填写该问题的具体解决方案:
//导出
exportList () {
var url = "/inspect/order/export";
this.$axios({
url: url,
method:'get',
responseType:'blob',
params: this.dataForm
}).then(response=>{
// console.log(response)
this.download(response);
}).catch(error=>{
console.log(error);
})
},
download (data) {
if (!data) {
return
}
var blob = new Blob([data], {
type: 'application/vnd.ms-excel;charset=utf-8'
})
var url = window.URL.createObjectURL(blob)
var aLink = document.createElement('a')
aLink.style.display = 'none'
aLink.download = '信息表.xls'
aLink.href = url
document.body.appendChild(aLink)
aLink.click()
},
//按照条件导出
@GetMapping("/export")
public void exportList(@RequestParam Map<String, Object> params, HttpServletResponse response){
SysUserEntity user = getUser();
ExcelWriter writer = ExcelUtil.getWriter();
if(!sysDeptService.handleListParams1(user, params)){
// return R.error("没有权限!");
}
QueryWrapper queryWrapper = new QueryWrapper();
if(params.get("num") != null && !StrUtil.isEmpty(params.get("name").toString())){
queryWrapper.like("name", params.get("name"));
}
if(params.get("num") != null && !StrUtil.isEmpty(params.get("num").toString())){
queryWrapper.eq("num", params.get("num"));
}
if(params.get("status") != null && !StrUtil.isEmpty(params.get("status").toString()) && Integer.parseInt(params.get("status").toString()) >= 0){
queryWrapper.eq("status", params.get("status"));
}
if(params.get("companyId") != null && !StrUtil.isEmpty(params.get("companyId").toString()) && Integer.parseInt(params.get("companyId").toString()) >= 0){
queryWrapper.eq("company_id", params.get("companyId"));
}
if(params.get("companyIds") != null && params.get("companyIds") != ""){
queryWrapper.eq("company_id", params.get("companyIds"));
}
if(params.get("deptId") != null && !StrUtil.isEmpty(params.get("deptId").toString()) && Integer.parseInt(params.get("deptId").toString()) >= 0){
queryWrapper.eq("dept_id", params.get("deptId"));
}
queryWrapper.eq("deleted_flag", "N");
ArrayList<Map<String, Object>> rows = CollUtil.newArrayList();
List<InspectOrderEntity> list = inspectService.list(queryWrapper);
Integer i = 1;
for(InspectOrderEntity entity:list){
Map<String, Object> row = new LinkedHashMap<>();
row.put("ID", entity.getId());
row.put("类型", "--");
if(entity.getType() == 1){
row.put("类型", "按a");
}else if(entity.getType() == 2){
row.put("类型", "按b");
}
row.put("jh", "--");
// 获取名称
if(entity.getPlanId() != null && entity.getPlanId() > 0){
InspectPlanEntity inspectPlanEntity = inspectPlanService.getById(entity.getPlanId());
if(inspectPlanEntity != null ){
row.put("计划", inspectPlanEntity.getName());
}
}
row.put("名称", entity.getName());
row.put("编号", entity.getNum());
row.put("开始时间", entity.getStartDate());
row.put("结束时间", entity.getEndDate());
.........................
if(entity.getDeviceType() != null && entity.getDeviceType() > 0){
InspectTypeEntity inspectTypeEntity = inspectTypeService.getById(entity.getDeviceType());
if(inspectTypeEntity != null ){
row.put("类型", inspectTypeEntity.getName());
}
}
row.put("人yuan", "--");
// 获取名称
if(entity.getHandleId() != null && entity.getHandleId() > 0){
user = sysUserService.getById(entity.getHandleId());
if(user != null ){
row.put("人yuan", user.getName());
}
}
row.put("时jain1", entity.getWorkTime());
row.put("时间2", entity.getRoadTime());
row.put("状态", "--");
if(entity.getStatus().intValue() == 0){
row.put("状态", "未完成");
}else if((entity.getStatus().intValue() == 1)){
row.put("状态", "完成");
}
row.put("名称", entity.getReportName());
..................
//获取数据
QueryWrapper itemQueryWrapper = new QueryWrapper();
itemQueryWrapper.eq("order_id", entity.getId());
itemQueryWrapper.eq("deleted_flag", "N");
List<InspectOrderItemEntity> itemList = inspectOrderItemService.list(itemQueryWrapper);
// this.mergeRule(writer,1,2);
if(itemList != null){
int num = itemList.size();//3 2
if(num > 1){
for(int j = 0;j< row.size();j++){
writer.merge(i,i + num -1,j,j,null, true);
}
}
i = i + num;
for(InspectOrderItemEntity itemEntity:itemList){
Map<String, Object> ItemRow = new LinkedHashMap<>();
ItemRow.putAll(row);
ItemRow.put("a", itemEntity.getDeviceName());
ItemRow.put("b", itemEntity.getDeviceNum());
ItemRow.put("e", "--");
// 获取名称
if(itemEntity.getHandleId() != null && itemEntity.getHandleId() > 0){
user = sysUserService.getById(itemEntity.getHandleId());
if(user != null ){
row.put("人员", user.getName());
}
}
ItemRow.put("状态", "--");
if(itemEntity.getStatus().intValue() == 0){
ItemRow.put("状态", "未完成");
}else if((itemEntity.getStatus().intValue() == 1)){
ItemRow.put("状态", "完成");
}
ItemRow.put("时间", itemEntity.getCreateDate());
ItemRow.put("时间1", itemEntity.getUpdateDate());
rows.add(ItemRow);
}
}else{
i = i + 1;
rows.add(row);
}
}
ServletOutputStream out = null;
try {
//写入数据
writer.write(rows, 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);
}
}
##疑问:
使用 post 方式是否可以实现功能相同的数据导出呢?