Browse Source

增加报警下载

menglu 3 years ago
parent
commit
ad575e8c99

+ 8 - 3
ibms-data-sdk/pom.xml

@@ -149,14 +149,19 @@
 		</dependency>
 
 		<dependency>
+			<groupId>cn.hutool</groupId>
+			<artifactId>hutool-all</artifactId>
+			<version>5.5.4</version>
+		</dependency>
+		<dependency>
 			<groupId>org.apache.poi</groupId>
 			<artifactId>poi</artifactId>
-			<version>3.9</version>
+			<version>4.1.2</version>
 		</dependency>
 		<dependency>
 			<groupId>org.apache.poi</groupId>
 			<artifactId>poi-ooxml</artifactId>
-			<version>3.9</version>
+			<version>4.1.2</version>
 		</dependency>
 
 		<dependency>
@@ -211,7 +216,7 @@
 		<dependency>
 			<groupId>com.persagy</groupId>
 			<artifactId>sailfish</artifactId>
-			<version>0.0.15</version>
+			<version>0.0.16</version>
 		</dependency>
 	</dependencies>
 

+ 12 - 22
ibms-data-sdk/src/main/java/com/persagy/ibms/data/sdk/service/rest/RestApi.java

@@ -4,6 +4,7 @@ import java.util.Date;
 import java.util.concurrent.ConcurrentHashMap;
 
 import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
 
 import org.springframework.core.io.FileSystemResource;
 import org.springframework.http.ResponseEntity;
@@ -19,9 +20,7 @@ import org.springframework.web.bind.annotation.RestController;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.alibaba.fastjson.serializer.SerializerFeature;
-import com.persagy.ibms.core.util.FilterUtil;
 import com.persagy.ibms.data.sdk.util.ExportUtil;
-import com.persagy.ibms.data.sdk.util.RWDAlarmUtil;
 import com.persagy.ibms.data.sdk.util.RepositoryContainer;
 import com.persagy.ibms.data.sdk.util.ToolUtil;
 import com.persagy.ibms.data.sdk.websocket.AlarmWebSocketClient;
@@ -150,32 +149,23 @@ public class RestApi {
 
 	@PostMapping(path = { "/post_filter_and_page", "/zkt-sdk/post_filter_and_page" }, produces = "application/json;charset=UTF-8")
 	public String post_filter_and_page(@RequestBody String param, HttpServletRequest request) {
-		String result = FilterUtil.post_filter_and_page(RepositoryContainer.instance, param);
-		return result;
-	}
-
-	@PostMapping(path = { "/history_alarm", "/zkt-sdk/history_alarm" }, produces = "application/json;charset=UTF-8")
-	public String history_alarm(@RequestBody String param, HttpServletRequest request) {
 		JSONObject paramObject = JSON.parseObject(param);
-		JSONObject result = RWDAlarmUtil.post_filter_and_page(paramObject);
+		JSONObject result = RestUtil.post_filter_and_page(paramObject);
 		return result.toJSONString();
 	}
 
-	@GetMapping(path = "/history_alarm_export_get/{param}")
-	public ResponseEntity<FileSystemResource> history_alarm_export_get(@PathVariable("param") String param) {
-		JSONObject params = JSON.parseObject(param);
-		JSONObject paramObject = new JSONObject();
-		paramObject.put("params", params);
-		ResponseEntity<FileSystemResource> fsr = ExportUtil.history_alarm_export(paramObject);
-		return fsr;
+	@PostMapping(path = { "/alarm_export_post", "/zkt-sdk/alarm_export_post" }, produces = "application/json;charset=UTF-8")
+	public void alarm_export_post(@RequestBody String param, HttpServletResponse response) throws Exception {
+		JSONObject paramObject = JSON.parseObject(param);
+		JSONObject result = RestUtil.post_filter_and_page(paramObject);
+		ExportUtil.alarm_export(result, response);
 	}
 
-	@RequestMapping(path = "/history_alarm_export_post", method = { RequestMethod.POST })
-	public ResponseEntity<FileSystemResource> history_alarm_export_post(@RequestParam(required = false) String param) {
-		JSONObject params = JSON.parseObject(param);
-		JSONObject paramObject = new JSONObject();
-		paramObject.put("params", params);
-		ResponseEntity<FileSystemResource> fsr = ExportUtil.history_alarm_export(paramObject);
+	@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 {
+		JSONObject paramObject = JSON.parseObject(param);
+		JSONObject result = RestUtil.post_filter_and_page(paramObject);
+		ResponseEntity<FileSystemResource> fsr = ExportUtil.alarm_export(result);
 		return fsr;
 	}
 

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

@@ -21,6 +21,7 @@ import com.persagy.ibms.core.data.SceneDataSet;
 import com.persagy.ibms.core.data.SceneDataValue;
 import com.persagy.ibms.core.data.SceneProperty;
 import com.persagy.ibms.core.util.ComputeUtil;
+import com.persagy.ibms.core.util.FastJsonCompareUtil;
 import com.persagy.ibms.core.util.FastJsonReaderUtil;
 import com.persagy.ibms.core.util.FilterUtil;
 import com.persagy.ibms.core.util.IntWrapper;
@@ -28,18 +29,30 @@ import com.persagy.ibms.core.util.LogUtil;
 import com.persagy.ibms.core.util.QueryAssist;
 import com.persagy.ibms.core.util.QueryUtil;
 import com.persagy.ibms.core.util.RecursiveUtil;
-import com.persagy.ibms.data.sdk.util.RepositoryContainer;
 import com.persagy.ibms.data.sdk.util.Constant;
 import com.persagy.ibms.data.sdk.util.ControlUtil;
 import com.persagy.ibms.data.sdk.util.DrawUtil;
 import com.persagy.ibms.data.sdk.util.ExeclReadEquipStaticInfoUtil;
 import com.persagy.ibms.data.sdk.util.HttpClientUtil;
+import com.persagy.ibms.data.sdk.util.RWDAlarmUtil;
+import com.persagy.ibms.data.sdk.util.RepositoryContainer;
 import com.persagy.ibms.data.sdk.util.RepositoryImpl;
 
 import lombok.extern.slf4j.Slf4j;
 
 @Slf4j
 public class RestUtil {
+	public static JSONObject post_filter_and_page(JSONObject paramObject) {
+		JSONArray path = (JSONArray) paramObject.get("path");
+		if (FastJsonCompareUtil.Instance().Compare(path, RWDAlarmUtil.history_alarm_path)) {
+			JSONObject result = RWDAlarmUtil.post_filter_and_page(paramObject);
+			return result;
+		} else {
+			JSONObject result = FilterUtil.post_filter_and_page(RepositoryContainer.instance, paramObject);
+			return result;
+		}
+	}
+
 	public static String query(String param) {
 		RepositoryImpl Repository = RepositoryContainer.instance;
 		JSONObject result = new JSONObject();

+ 19 - 8
ibms-data-sdk/src/main/java/com/persagy/ibms/data/sdk/util/ExcelUtil.java

@@ -18,7 +18,7 @@ import org.apache.poi.ss.usermodel.Workbook;
 import org.apache.poi.ss.usermodel.WorkbookFactory;
 import org.apache.poi.xssf.usermodel.XSSFWorkbook;
 
-public class ExcelUtil {
+public class ExcelCommonUtil {
 
 	public static String getContentInner(ExcelSheet sheetContent, int col, int row) {
 		String result = null;
@@ -105,12 +105,24 @@ public class ExcelUtil {
 					Cell cell = row.createCell(index_col_start + index_col);
 					cell.setCellValue(content);
 				}
+			} 
+			//锁定第一行,自动列宽
+			if (sheet.titleColList != null && sheet.titleColList.size() > 0) {
+				st.createFreezePane(0, 1, 0, 1);
+				for (int i = 0; i < sheet.titleColList.size(); i++) {
+					st.autoSizeColumn((short) 0);
+				}
+			}
+			//锁定第一列
+			if (sheet.titleRowList != null && sheet.titleRowList.size() > 0) {
+				st.createFreezePane( 1, 0, 1, 0 );
 			}
 		}
 
 		FileOutputStream os = new FileOutputStream(filepath);
 		wb.write(os);
 		os.close();
+		wb.close();
 	}
 
 	public static Map<String, ExcelSheet> Read(String filepath, boolean titleCol) throws Exception {
@@ -261,7 +273,7 @@ public class ExcelUtil {
 
 		try {
 			switch (cell.getCellType()) {
-			case Cell.CELL_TYPE_NUMERIC:
+			case NUMERIC:
 				short format = cell.getCellStyle().getDataFormat();
 				if (format == 14 || format == 22 || format == 31 || format == 57 || format == 58 || format == 176 || format == 177 || format == 178) {
 					Date date = cell.getDateCellValue();
@@ -278,18 +290,17 @@ public class ExcelUtil {
 					cellText = "" + cell.getNumericCellValue();
 				}
 				break;
-			case Cell.CELL_TYPE_STRING:
+			case STRING:
 				cellText = cell.getStringCellValue();
 				break;
-			case Cell.CELL_TYPE_FORMULA:
-				cell.setCellType(Cell.CELL_TYPE_NUMERIC);
+			case FORMULA:
 				cellText = "" + cell.getNumericCellValue();
 				break;
-			case Cell.CELL_TYPE_BLANK:
+			case BLANK:
 				break;
-			case Cell.CELL_TYPE_BOOLEAN:
+			case BOOLEAN:
 				break;
-			case Cell.CELL_TYPE_ERROR:
+			case ERROR:
 				break;
 			default:
 			}

+ 7 - 6
ibms-data-sdk/src/main/java/com/persagy/ibms/data/sdk/util/ExcelRelationUtil.java

@@ -29,8 +29,8 @@ public class ExcelRelationUtil {
 		for (Iterator<Cell> iterator = TitleRow.cellIterator(); iterator.hasNext();) {
 			Cell cell = iterator.next();
 			int index = cell.getColumnIndex();
-			if (!titleDic.containsKey(ExcelUtil.GetCellValue(cell))) {
-				titleDic.put(ExcelUtil.GetCellValue(cell), index);
+			if (!titleDic.containsKey(ExcelCommonUtil.GetCellValue(cell))) {
+				titleDic.put(ExcelCommonUtil.GetCellValue(cell), index);
 			}
 		}
 		Map<Integer, Integer> row2count = new HashMap<Integer, Integer>();
@@ -40,7 +40,7 @@ public class ExcelRelationUtil {
 				continue;
 			}
 			Cell cell = row.getCell(titleDic.get("图类型编码"));
-			if (ExcelUtil.GetCellValue(cell) == null || ExcelUtil.GetCellValue(cell).length() == 0) {
+			if (ExcelCommonUtil.GetCellValue(cell) == null || ExcelCommonUtil.GetCellValue(cell).length() == 0) {
 				continue;
 			}
 			boolean valid = true;
@@ -68,13 +68,14 @@ public class ExcelRelationUtil {
 				Row rowInner = wSheet1.getRow(i + ii);
 				Cell edgeCode = rowInner.getCell(titleDic.get("边类型编码"));
 				Cell orient = rowInner.getCell(titleDic.get("边方向性"));
-				if (ExcelUtil.GetCellValue(edgeCode) != null && ExcelUtil.GetCellValue(edgeCode).length() > 0) {
-					dic.put(ExcelUtil.GetCellValue(edgeCode), (int) Double.parseDouble(ExcelUtil.GetCellValue(orient)));
+				if (ExcelCommonUtil.GetCellValue(edgeCode) != null && ExcelCommonUtil.GetCellValue(edgeCode).length() > 0) {
+					dic.put(ExcelCommonUtil.GetCellValue(edgeCode), (int) Double.parseDouble(ExcelCommonUtil.GetCellValue(orient)));
 				}
 			}
 			if (dic.size() > 0) {
-				relDic.put(ExcelUtil.GetCellValue(graphCode), dic);
+				relDic.put(ExcelCommonUtil.GetCellValue(graphCode), dic);
 			}
 		}
+		workbook.close();
 	}
 }

+ 76 - 11
ibms-data-sdk/src/main/java/com/persagy/ibms/data/sdk/util/ExportUtil.java

@@ -1,12 +1,19 @@
 package com.persagy.ibms.data.sdk.util;
 
 import java.io.File;
+import java.net.URLEncoder;
+import java.text.SimpleDateFormat;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.UUID;
 
+import javax.servlet.ServletOutputStream;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.poi.xssf.streaming.SXSSFSheet;
 import org.springframework.core.io.FileSystemResource;
 import org.springframework.http.HttpHeaders;
 import org.springframework.http.MediaType;
@@ -14,15 +21,21 @@ import org.springframework.http.ResponseEntity;
 
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
+import com.persagy.ibms.core.util.FastJsonReaderUtil;
+
+import cn.hutool.core.io.IoUtil;
+import cn.hutool.poi.excel.ExcelUtil;
+import cn.hutool.poi.excel.ExcelWriter;
 
 public class ExportUtil {
-	public static ResponseEntity<FileSystemResource> export(File file) {
+	private static ResponseEntity<FileSystemResource> export(File file) {
 		if (file == null) {
 			return null;
 		}
+		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd_HH_mm_ss.SSS");
 		HttpHeaders headers = new HttpHeaders();
 		headers.add("Cache-Control", "no-cache, no-store, must-revalidate");
-		headers.add("Content-Disposition", "attachment; filename=" + System.currentTimeMillis() + ".xlsx");
+		headers.add("Content-Disposition", "attachment; filename=" + sdf.format(new Date()) + ".xlsx");
 		headers.add("Pragma", "no-cache");
 		headers.add("Expires", "0");
 		headers.add("Last-Modified", new Date().toString());
@@ -32,31 +45,83 @@ public class ExportUtil {
 				.body(new FileSystemResource(file));
 	}
 
-	public static ResponseEntity<FileSystemResource> history_alarm_export(JSONObject paramObject){
-		JSONObject result = RWDAlarmUtil.post_filter_and_page(paramObject);
+	public static ResponseEntity<FileSystemResource> alarm_export(JSONObject result) throws Exception {
+		JSONArray alarm_export_title = FastJsonReaderUtil.Instance()
+				.ReadJSONArray(new File(Constant.GetPath() + Constant.getSeperator() + "alarm_export_title.json"));
+		List<String> codeList = new ArrayList<String>();
+		List<String> titleList = new ArrayList<String>();
+		Map<String, String> titleMap = new HashMap<String, 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");
+			codeList.add(jsonKey);
+			titleList.add(headerName);
+			titleMap.put(jsonKey, headerName);
+		}
 		JSONArray content = result.getJSONArray("content");
-		List<String> title = new ArrayList<String>();
-		title.add("itemName");
-		title.add("treatState");
 		ExcelSheet sheet = new ExcelSheet();
-		sheet.titleColList = title;
+		sheet.titleColList = titleList;
 		for (int i = 0; i < content.size(); i++) {
 			JSONObject contentItem = content.getJSONObject(i);
 			List<String> contentList = new ArrayList<String>();
-			for (String titleItem : title) {
+			for (String titleItem : codeList) {
 				contentList.add(contentItem.getString(titleItem));
 			}
 			sheet.contentListList.add(contentList);
 		}
 		Map<String, ExcelSheet> sheetMap = new HashMap<String, ExcelSheet>();
 		sheetMap.put("Sheet1", sheet);
-		String filepath = "abc.xlsx";
+		String filepath = UUID.randomUUID().toString() + ".xlsx";
 		try {
-			ExcelUtil.Write(filepath, sheetMap);
+			ExcelCommonUtil.Write(filepath, sheetMap);
 		} catch (Exception e) {
 			e.printStackTrace();
 		}
 		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(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);
+		}
+		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);
+	}
+
 }

+ 15 - 3
ibms-data-sdk/src/main/java/com/persagy/ibms/data/sdk/util/RWDAlarmUtil.java

@@ -22,13 +22,15 @@ import lombok.extern.slf4j.Slf4j;
 
 @Slf4j
 public class RWDAlarmUtil {
-
+	public static JSONArray history_alarm_path = new JSONArray();
 	static Map<Integer, String> statusMap = new HashMap<Integer, String>();
 	static Map<Integer, String> treatStateMap = new HashMap<Integer, String>();
 	static Map<String, String> levelMap = new HashMap<String, String>();
 	static Map<String, String> categoryMap = new HashMap<String, String>();
 
 	static {
+		history_alarm_path.add("基础对象");
+		history_alarm_path.add("历史报警");
 		statusMap.put(1, "未恢复");
 		statusMap.put(2, "已恢复");
 		statusMap.put(3, "已过期");
@@ -49,7 +51,7 @@ public class RWDAlarmUtil {
 			JSONObject params = (JSONObject) paramObject.get("params");
 			JSONArray Content;
 			if (Constant.alarm_rest_get) {
-				String get_url = Constant.alarm_rest + "/alarm-config/page?projectId=" + RepositoryContainer.RepositoryBase.projectId + "&groupCode="
+				String get_url = Constant.alarm_rest + "/alarm-record/page?projectId=" + RepositoryContainer.RepositoryBase.projectId + "&groupCode="
 						+ RepositoryContainer.RepositoryBase.groupCode;
 				StringBuffer sb = new StringBuffer();
 				sb.append("&userId=" + "systemId");
@@ -71,6 +73,10 @@ public class RWDAlarmUtil {
 				if (params.containsKey("搜索关键字")) {
 					sb.append("&keyWord=" + params.get("搜索关键字"));
 				}
+				if (params.containsKey("startTime") && params.containsKey("endTime")) {
+					sb.append("&startTime=" + params.get("startTime"));
+					sb.append("&endTime=" + params.get("endTime"));
+				}
 				if (params.containsKey("page")) {
 					boolean page = params.getBoolean("page");
 					if (page) {
@@ -109,6 +115,12 @@ public class RWDAlarmUtil {
 				if (params.containsKey("搜索关键字")) {
 					postParam.put("keyWord", params.get("搜索关键字"));
 				}
+				if (params.containsKey("startTime") && params.containsKey("endTime")) {
+					JSONObject triggerTime = new JSONObject();
+					triggerTime.put("$gte", params.get("startTime"));
+					triggerTime.put("$lte", params.get("endTime"));
+					postParam.put("triggerTime", triggerTime);
+				}
 				if (params.containsKey("page")) {
 					boolean page = params.getBoolean("page");
 					if (page) {
@@ -343,7 +355,7 @@ public class RWDAlarmUtil {
 
 		JSONArray Content;
 		if (Constant.alarm_rest_get) {
-			String get_url = Constant.alarm_rest + "/alarm-config/list?projectId=" + RepositoryContainer.RepositoryBase.projectId + "&groupCode="
+			String get_url = Constant.alarm_rest + "/alarm-record/list?projectId=" + RepositoryContainer.RepositoryBase.projectId + "&groupCode="
 					+ RepositoryContainer.RepositoryBase.groupCode;
 			String getResultString = HttpClientUtil.get(get_url, null);
 			JSONObject getResult = JSON.parseObject(getResultString);

+ 14 - 0
ibms-data-sdk/src/main/resources/alarm_export_title.json

@@ -0,0 +1,14 @@
+[
+	{
+		"jsonKey": "itemName",
+		"headerName": "条目"
+	},
+	{
+		"jsonKey": "itemCode",
+		"headerName": "编码"
+	},
+	{
+		"jsonKey": "remark",
+		"headerName": "备注"
+	}
+]