/**
* 导出报警
*
* @param vehicleId 车辆id
* @param alarmTypes 报警类型
* @param beginTime 开始时间
* @param endTime 结束时间
* @path /http/Bluetooth/queryAlarmReport.json
* @status done
*/
public void doExportAlarmReport(@Param("vehicleId") Long vehicleId, @Param("alarmTypes") String alarmTypes,
@Param("beginTime") String beginTime, @Param("endTime") String endTime) throws Exception {
if (StringUtils.isEmpty(alarmTypes) ||
StringUtils.isEmpty(beginTime) ||
vehicleId == null) {
logger.error("参数错误vehicleId="+vehicleId+",alarmTypes="+alarmTypes+",beginTime="+beginTime+",endTime="+endTime);
return ;
}
if (endTime == null) {
endTime = DateUtils.dateToStr(new Date());
}
final QueryAlarmReportDTO dto = new QueryAlarmReportDTO();
dto.setBeginTime(beginTime);
dto.setVehicleId(vehicleId);
dto.setAlarmTypes(alarmTypes);
dto.setEndTime(endTime);
Http.doPost("http://" + Constant.RETRENMISSION_URL + EXPORT_ALARM_REPORT, JSON.toJSONString(dto));
String urlStr = "http://" + Constant.RETRENMISSION_URL + EXPORT_ALARM_REPORT;
String fileName = "报警记录" + DateUtils.dateToStr("yyyyMMddHHmmss", new Date()) + ".xlsx";
exportExcel(urlStr, dto, fileName);
}
private void exportExcel(String urlStr, Object dto, String fileName) throws IOException {
InputStream inputStream = null;
ServletOutputStream outputStream = null;
HttpURLConnection conn = null;
String contentType = null;
try {
URL url = new URL(urlStr);
conn = (HttpURLConnection) url.openConnection();
//请求方法为POST
conn.setRequestMethod("POST");
//设置连接超时为5秒
conn.setConnectTimeout(5000);
//允许输入输出
conn.setDoInput(true);
conn.setDoOutput(true);
//不能缓存
conn.setUseCaches(false);
//至少要设置的两个请求头
//设置头部信息
conn.setRequestProperty("headerdata", "ceshiyongde");
//一定要设置 Content-Type 要不然服务端接收不到参数
conn.setRequestProperty("Content-Type", "application/Json; charset=UTF-8");
//输出流包含要发送的数据,要注意数据格式编码
OutputStream op = conn.getOutputStream();
op.write(JSON.toJSONString(dto).getBytes());
// conn.connect();
inputStream = conn.getInputStream();
outputStream = response.getOutputStream();
// 创建一个Buffer字符串
byte[] buffer = new byte[1024];
// 每次读取的字符串长度,如果为-1,代表全部读取完毕
int len = 0;
// 使用一个输入流从buffer里把数据读取出来
while ((len = inputStream.read(buffer)) != -1) {
// 用输出流往buffer里写入数据,中间参数代表从哪个位置开始读,len代表读取的长度
outputStream.write(buffer, 0, len);
}
response.setContentType("application/force-download");
response.addHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode(fileName, "UTF-8"));
} catch (Exception e) {
throw e;
} finally {
if (inputStream != null) {
inputStream.close();
}
if (outputStream != null) {
outputStream.flush();
outputStream.close();
}
if (conn != null) {
conn.disconnect();
}
}
}
使用异步导出excel
最新推荐文章于 2024-07-01 08:49:35 发布
本文详细介绍了如何通过特定的API导出车辆报警记录,包括车辆ID、报警类型、开始时间和结束时间等参数的设置,以及如何处理空值和默认值。此外,还提供了HTTP POST请求的具体实现,包括连接URL、请求头、输出流和输入流的处理,以及最终将数据导出为Excel文件的过程。
摘要由CSDN通过智能技术生成