@ApiOperation("订单导出")
@GetMapping("/download")
public R download(@CurrentUser PaperUser sysUser,
@RequestParam(required = false) String keywordName,
@RequestParam(required = false) String keyword,
@RequestParam(required = false) String businessType,
@RequestParam(required = false) String startTime,
@RequestParam(required = false) String endTime,
@RequestParam(required = false) String customerCode,
@RequestParam(required = false) Integer status,
HttpServletResponse response){
if(sysUser == null){
return R.error("请登录").setCode(401);
}
String roleType = RoleUtils.getRoleCustomerCode(sysUser);
if(!StringUtil.isEmpty(roleType)){
customerCode = roleType;
}
String column = "";
if(!StringUtil.isEmpty(keywordName) && !StringUtil.isEmpty(keyword)){
switch (keywordName){
case "订单号":
column = "order_no";
break;
case "客户单号":
column = "cus_order_no";
break;
case "客户位置名称":
column = "cus_location";
break;
default:
break;
}
}
QueryWrapper queryWrapper = new QueryWrapper();
queryWrapper.like(!StringUtil.isEmpty(column),column,keyword)
.eq(!StringUtil.isEmpty(customerCode),"customer_code",customerCode)
.eq(!StringUtil.isEmpty(businessType),"business_type", businessType)
.eq(status != null && status > -1 && status < 2,"del",status)
.le(!StringUtil.isEmpty(endTime),"create_time",endTime + "23:59:59")
.ge(!StringUtil.isEmpty(startTime),"create_time",startTime + "00:00:00");
List<OrderInfo> orderInfoList = orderInfoService.list(queryWrapper);
// 导出订单数据量过10000 时提示缩小选择范围
if(orderInfoList.size() > 10000){
return R.error("订单所导出数量超过10000条,请缩小选择范围").setSuccess(false);
}
List<OrderReportDto> data = new ArrayList<>();
for(OrderInfo orderInfo:orderInfoList){
OrderReportDto orderReportDto = new OrderReportDto();
BeanUtil.copyProperties(orderInfo,orderReportDto);
orderReportDto.setCreateTime(orderInfo.getCreateTime().replace(".0",""));
orderReportDto.setStartTime(orderInfo.getStartDate());
orderReportDto.setEndTime(orderInfo.getEndDate());
orderReportDto.setBusinessTypeName(Customer.BusinessType.valueOf(orderInfo.getBusinessType()).getDesc());
orderReportDto.setStatusMsg(orderInfo.getDel()==0?"失效":"有效");
data.add(orderReportDto);
}
List<OrderReportDto> rows = CollUtil.newArrayList(data);
ExcelWriter writer = ExcelUtil.getWriter();
writer.addHeaderAlias("orderNo","订单号");
writer.addHeaderAlias("cusOrderNo","客户订单号");
writer.addHeaderAlias("cusLocation","客户位置");
writer.addHeaderAlias("businessTypeName","业务类型");
writer.addHeaderAlias("startTime","任务开始时间");
writer.addHeaderAlias("endTime","任务结束时间");
writer.addHeaderAlias("customerName","来源客户");
writer.addHeaderAlias("createTime","创建时间");
writer.addHeaderAlias("statusMsg","订单状态");
writer.write(rows);
//设置宽度
for (int i = 0; i < rows.size(); i++) {
writer.setColumnWidth(i, 35);
}
R r = null;
try {
response.setContentType("application/vnd.ms-excel;charset=utf-8");
response.setHeader("Content-Disposition",
"attachment;filename=" + URLEncoder.encode("订单导出", "utf-8") + ".xlsx");
ServletOutputStream out = response.getOutputStream();
writer.flush(out);
r = R.ok();
} catch (Exception e) {
e.printStackTrace();
r = R.error("下载失败");
}finally {
writer.close();
}
return r;
}