Browse Source

hutool搞通

menglu 3 years ago
parent
commit
d917f63068

+ 11 - 6
ibms-data-sdk/src/main/java/com/persagy/ibms/data/sdk/service/rest/RestApi.java

@@ -161,8 +161,8 @@ public class RestApi {
 		ExportUtil.alarm_export(result, response);
 	}
 
-	@PostMapping(path = { "/alarm_export_post_bak", "/zkt-sdk/alarm_export_post_bak" }, produces = "application/json;charset=UTF-8")
-	public ResponseEntity<FileSystemResource> alarm_export_post_bak(@RequestBody String param) throws Exception {
+	@PostMapping(path = { "/alarm_export_post_poi", "/zkt-sdk/alarm_export_post_poi" }, produces = "application/json;charset=UTF-8")
+	public ResponseEntity<FileSystemResource> alarm_export_post_poi(@RequestBody String param) throws Exception {
 		JSONObject paramObject = JSON.parseObject(param);
 		JSONObject result = RestUtil.post_filter_and_page(paramObject);
 		ResponseEntity<FileSystemResource> fsr = ExportUtil.alarm_export(result);
@@ -199,13 +199,18 @@ public class RestApi {
 		return result;
 	}
 
-	@PostMapping(path = { "/fjd_query_history_batch_export", "/zkt-sdk/fjd_query_history_batch_export" }, produces = "application/json;charset=UTF-8")
-	public ResponseEntity<FileSystemResource> fjd_query_history_batch_export(@RequestBody String param, HttpServletResponse response)
-			throws Exception {
-		ResponseEntity<FileSystemResource> fsr = RestUtil.fjd_query_history_batch_export(param, response);
+	@PostMapping(path = { "/fjd_query_history_batch_export_poi",
+			"/zkt-sdk/fjd_query_history_batch_export_poi" }, produces = "application/json;charset=UTF-8")
+	public ResponseEntity<FileSystemResource> fjd_query_history_batch_export_poi(@RequestBody String param) throws Exception {
+		ResponseEntity<FileSystemResource> fsr = RestUtil.fjd_query_history_batch_export(param);
 		return fsr;
 	}
 
+	@PostMapping(path = { "/fjd_query_history_batch_export", "/zkt-sdk/fjd_query_history_batch_export" }, produces = "application/json;charset=UTF-8")
+	public void fjd_query_history_batch_export(@RequestBody String param, HttpServletResponse response) throws Exception {
+		RestUtil.fjd_query_history_batch_export_hutool(param, response);
+	}
+
 	@PostMapping(path = { "/path_array_history_fjd_query", "/zkt-sdk/path_array_history_fjd_query" }, produces = "application/json;charset=UTF-8")
 	public String path_array_history_fjd_query(@RequestBody String param, HttpServletRequest request) {
 		String result = RestUtil.path_array_history_fjd_query(param);

+ 7 - 1
ibms-data-sdk/src/main/java/com/persagy/ibms/data/sdk/service/rest/RestUtil.java

@@ -527,13 +527,19 @@ public class RestUtil {
 		return result.toJSONString();
 	}
 
-	public static ResponseEntity<FileSystemResource> fjd_query_history_batch_export(String param, HttpServletResponse response) throws Exception {
+	public static ResponseEntity<FileSystemResource> fjd_query_history_batch_export(String param) throws Exception {
 		JSONArray parseArray = JSON.parseArray(param);
 		fjd_query_history_batch_fill(parseArray);
 		ResponseEntity<FileSystemResource> fsr = ExportUtil.fjd_export(parseArray);
 		return fsr;
 	}
 
+	public static void fjd_query_history_batch_export_hutool(String param, HttpServletResponse response) throws Exception {
+		JSONArray parseArray = JSON.parseArray(param);
+		fjd_query_history_batch_fill(parseArray);
+		ExportUtil.fjd_export(parseArray, response);
+	}
+
 	public static void fjd_query_history_batch_fill(JSONArray parseArray) throws Exception {
 		RepositoryImpl Repository = RepositoryContainer.instance;
 		for (int i = 0; i < parseArray.size(); i++) {

+ 94 - 31
ibms-data-sdk/src/main/java/com/persagy/ibms/data/sdk/util/ExportUtil.java

@@ -81,6 +81,49 @@ public class ExportUtil {
 		return ExportUtil.export(new File(filepath));
 	}
 
+	public static void alarm_export(JSONObject result, HttpServletResponse response) throws Exception {
+		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd_HH_mm_ss.SSS");
+		JSONArray alarm_export_title = FastJsonReaderUtil.Instance()
+				.ReadJSONArray(new File(Constant.GetPath() + Constant.getSeperator() + "alarm_export_title.json"));
+		JSONArray content = result.getJSONArray("content");
+		String xlsFileName = sdf.format(new Date()) + ".xlsx";
+		ExcelWriter writer = ExcelUtil.getBigWriter();
+		// 设置所有列为自动宽度,不考虑合并单元格
+		SXSSFSheet sheet = (SXSSFSheet) writer.getSheet();
+		sheet.trackAllColumnsForAutoSizing();
+		List<String> rowHead = new ArrayList<String>();
+		for (int i = 0; i < alarm_export_title.size(); i++) {
+			JSONObject title = alarm_export_title.getJSONObject(i);
+			String jsonKey = title.getString("jsonKey");
+			String headerName = title.getString("headerName");
+			rowHead.add(headerName);
+			writer.addHeaderAlias(jsonKey, headerName);
+		}
+		// isWriteKeyAsHead为true的时候自动添加表头,与writeHeadRow不能同时存在,否则为双表头
+		writer.writeHeadRow(rowHead);
+		// 表头冻结
+		writer.setFreezePane(1);
+		writer.setOnlyAlias(true);
+		// setOnlyAlias必须在Write之前添加,否则总会在第一列多产生一个表头,也就是是说事后诸葛亮是不生效的
+		writer.write(content, false);
+		// 此方法必须在指定列数据完全写出后调用才有效
+		// writer.autoSizeColumnAll(); write方法中列数量变成了-1,导致autoSizeColumnAll不生效
+		for (int i = 0; i < rowHead.size(); i++) {
+			// 调整每一列宽度
+			sheet.autoSizeColumn((short) i);
+			// 解决自动设置列宽中文失效的问题
+			int columnWidth = (sheet.getColumnWidth(i) * 16 / 10) > 25000 ? 25000 : (sheet.getColumnWidth(i) * 16 / 10);
+			sheet.setColumnWidth(i, columnWidth);
+		}
+		xlsFileName = URLEncoder.encode(xlsFileName, "UTF-8");
+		response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8");
+		response.setHeader("Content-Disposition", "attachment;filename=" + xlsFileName);
+		ServletOutputStream out = response.getOutputStream();
+		writer.flush(out, true);
+		writer.close();
+		IoUtil.close(out);
+	}
+
 	public static ResponseEntity<FileSystemResource> fjd_export(JSONArray parseArray) throws Exception {
 		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
 		SimpleDateFormat sdf_ = new SimpleDateFormat("yyyyMMddHHmmss");
@@ -112,39 +155,59 @@ public class ExportUtil {
 		return ExportUtil.export(new File(filepath));
 	}
 
-	public static void alarm_export(JSONObject result, HttpServletResponse response) throws Exception {
-		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd_HH_mm_ss.SSS");
-		JSONArray alarm_export_title = FastJsonReaderUtil.Instance()
-				.ReadJSONArray(new File(Constant.GetPath() + Constant.getSeperator() + "alarm_export_title.json"));
-		JSONArray content = result.getJSONArray("content");
+	public static void fjd_export(JSONArray parseArray, HttpServletResponse response) throws Exception {
+		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+		SimpleDateFormat sdf_ = new SimpleDateFormat("yyyyMMddHHmmss");
 		String xlsFileName = sdf.format(new Date()) + ".xlsx";
 		ExcelWriter writer = ExcelUtil.getBigWriter();
-		// 设置所有列为自动宽度,不考虑合并单元格
-		SXSSFSheet sheet = (SXSSFSheet) writer.getSheet();
-		sheet.trackAllColumnsForAutoSizing();
-		List<String> rowHead = new ArrayList<String>();
-		for (int i = 0; i < alarm_export_title.size(); i++) {
-			JSONObject title = alarm_export_title.getJSONObject(i);
-			String jsonKey = title.getString("jsonKey");
-			String headerName = title.getString("headerName");
-			rowHead.add(jsonKey);
-			writer.addHeaderAlias(jsonKey, headerName);
-		}
-		// isWriteKeyAsHead为true的时候自动添加表头,与writeHeadRow不能同时存在,否则为双表头
-		writer.writeHeadRow(rowHead);
-		// 表头冻结
-		writer.setFreezePane(1);
-		writer.setOnlyAlias(true);
-		// setOnlyAlias必须在Write之前添加,否则总会在第一列多产生一个表头,也就是是说事后诸葛亮是不生效的
-		writer.write(content, false);
-		// 此方法必须在指定列数据完全写出后调用才有效
-		// writer.autoSizeColumnAll(); write方法中列数量变成了-1,导致autoSizeColumnAll不生效
-		for (int i = 0; i < rowHead.size(); i++) {
-			// 调整每一列宽度
-			sheet.autoSizeColumn((short) i);
-			// 解决自动设置列宽中文失效的问题
-			int columnWidth = (sheet.getColumnWidth(i) * 16 / 10) > 25000 ? 25000 : (sheet.getColumnWidth(i) * 16 / 10);
-			sheet.setColumnWidth(i, columnWidth);
+		boolean firstSheet = true;
+		for (int i = 0; i < parseArray.size(); i++) {
+			JSONObject parseObject = parseArray.getJSONObject(i);
+			String code = parseObject.getString("code");
+			String data_type = parseObject.getString("data_type");
+			JSONArray datas = parseObject.getJSONArray("datas");
+			for (int ii = 0; ii < datas.size(); ii++) {
+				JSONObject data = datas.getJSONObject(ii);
+				data.put("data_time", sdf.format(sdf_.parse(data.getString("data_time"))));
+			}
+			if (firstSheet) {
+				writer.renameSheet(code + "-" + data_type);
+				firstSheet = false;
+			} else {
+				writer.setSheet(code + "-" + data_type);
+			}
+
+			SXSSFSheet sheet = (SXSSFSheet) writer.getSheet();
+			sheet.trackAllColumnsForAutoSizing();
+			List<String> rowHead = new ArrayList<String>();
+			{
+				String jsonKey = "data_time";
+				String headerName = "data_time";
+				rowHead.add(headerName);
+				writer.addHeaderAlias(jsonKey, headerName);
+			}
+			{
+				String jsonKey = "data_value";
+				String headerName = "data_value";
+				rowHead.add(headerName);
+				writer.addHeaderAlias(jsonKey, headerName);
+			}
+			// isWriteKeyAsHead为true的时候自动添加表头,与writeHeadRow不能同时存在,否则为双表头
+			writer.writeHeadRow(rowHead);
+			// 表头冻结
+			writer.setFreezePane(1);
+			writer.setOnlyAlias(true);
+			// setOnlyAlias必须在Write之前添加,否则总会在第一列多产生一个表头,也就是是说事后诸葛亮是不生效的
+			writer.write(datas, false);
+			// 此方法必须在指定列数据完全写出后调用才有效
+			// writer.autoSizeColumnAll(); write方法中列数量变成了-1,导致autoSizeColumnAll不生效
+			for (int ii = 0; ii < rowHead.size(); ii++) {
+				// 调整每一列宽度
+				sheet.autoSizeColumn((short) ii);
+				// 解决自动设置列宽中文失效的问题
+				int columnWidth = (sheet.getColumnWidth(ii) * 16 / 10) > 25000 ? 25000 : (sheet.getColumnWidth(ii) * 16 / 10);
+				sheet.setColumnWidth(ii, columnWidth);
+			}
 		}
 		xlsFileName = URLEncoder.encode(xlsFileName, "UTF-8");
 		response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8");