From 633c0c67dfee381365d522d22e0f1399c4aea2be Mon Sep 17 00:00:00 2001 From: 1 <1@qq> Date: Fri, 5 Apr 2019 09:28:31 +0800 Subject: [PATCH] =?UTF-8?q?=E6=95=B0=E6=8D=AE=E8=BF=9E=E6=8E=A5=E5=9F=8B?= =?UTF-8?q?=E7=82=B9=E5=8F=8A=E5=9B=9E=E4=BC=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mainframe/InformationCollector.java | 262 +----------------- .../SendDataToCloudProvider.java | 30 ++ .../impl/AbstractSendDataToCloud.java | 247 +++++++++++++++++ .../impl/FocusPointMessageUploader.java | 86 ++++++ .../utils/MessageCollectUtils.java | 69 +++++ 5 files changed, 439 insertions(+), 255 deletions(-) create mode 100644 designer-realize/src/main/java/com/fr/design/mainframe/messagecollect/SendDataToCloudProvider.java create mode 100644 designer-realize/src/main/java/com/fr/design/mainframe/messagecollect/impl/AbstractSendDataToCloud.java create mode 100644 designer-realize/src/main/java/com/fr/design/mainframe/messagecollect/impl/FocusPointMessageUploader.java create mode 100644 designer-realize/src/main/java/com/fr/design/mainframe/messagecollect/utils/MessageCollectUtils.java diff --git a/designer-realize/src/main/java/com/fr/design/mainframe/InformationCollector.java b/designer-realize/src/main/java/com/fr/design/mainframe/InformationCollector.java index df9b1b556..9d04cc185 100644 --- a/designer-realize/src/main/java/com/fr/design/mainframe/InformationCollector.java +++ b/designer-realize/src/main/java/com/fr/design/mainframe/InformationCollector.java @@ -7,6 +7,7 @@ import com.fr.base.FRContext; import com.fr.config.MarketConfig; import com.fr.design.DesignerEnvManager; import com.fr.design.mainframe.errorinfo.ErrorInfoUploader; +import com.fr.design.mainframe.messagecollect.impl.FocusPointMessageUploader; import com.fr.design.mainframe.templateinfo.TemplateInfoCollector; import com.fr.general.CloudCenter; import com.fr.general.ComparatorUtils; @@ -15,20 +16,13 @@ import com.fr.general.DesUtils; import com.fr.general.GeneralUtils; import com.fr.general.IOUtils; import com.fr.general.http.HttpToolbox; -import com.fr.intelli.record.FocusPoint; -import com.fr.intelli.record.MetricRegistry; import com.fr.json.JSONArray; -import com.fr.json.JSONException; import com.fr.json.JSONObject; import com.fr.log.FineLoggerFactory; import com.fr.stable.EncodeConstants; import com.fr.stable.ProductConstants; import com.fr.stable.StableUtils; import com.fr.stable.StringUtils; -import com.fr.stable.query.QueryFactory; -import com.fr.stable.query.condition.QueryCondition; -import com.fr.stable.query.data.DataList; -import com.fr.stable.query.restriction.RestrictionFactory; import com.fr.stable.xml.XMLPrintWriter; import com.fr.stable.xml.XMLReadable; import com.fr.stable.xml.XMLTools; @@ -53,8 +47,6 @@ import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.List; -import java.util.Map; - /** * @author neil * @@ -64,7 +56,7 @@ public class InformationCollector implements XMLReadable, XMLWriter { // 24小时上传一次 private static final long DELTA = 24 * 3600 * 1000L; - private static final long SEND_DELAY = 300 * 1000L; + private static final long SEND_DELAY = 30 * 1000L; private static final String FILE_NAME = "fr.info"; private static final String XML_START_STOP_LIST = "StartStopList"; private static final String XML_START_STOP = "StartStop"; @@ -78,24 +70,6 @@ public class InformationCollector implements XMLReadable, XMLWriter { private static final String XML_KEY = "ActiveKey"; private static final String XML_OS = "OS"; - public static final String TABLE_NAME = "fr_functionrecord"; - public static final String FUNC_COLUMNNAME = "func"; - public static final String COLUMN_TIME = "time"; - public static final String TABLE_FUNCTION_RECORD = "function.record"; - private static final String ATTR_ID = "id"; - private static final String ATTR_TEXT = "text"; - private static final String ATTR_SOURCE = "source"; - private static final String ATTR_TIME = "time"; - private static final String ATTR_TIMES = "times"; - private static final String ATTR_TITLE = "title"; - private static final String ATTR_USER_NAME = "username"; - private static final String ATTR_UUID = "uuid"; - private static final String ATTR_ITEMS = "items"; - private static final String ATTR_FUNCTION_ARRAY = "functionArray"; - private static final int MAX_EACH_REQUEST_RECORD_COUNT = 200; - private static final int PAGE_SIZE = 200; - private long totalCount = -1; - private static InformationCollector collector; //启动时间与关闭时间列表 @@ -204,141 +178,9 @@ public class InformationCollector implements XMLReadable, XMLWriter { } } - private void sendFunctionsInfo(){ - Date current = new Date(); - long lastTime = getLastTimeMillis(); - long currentTime = current.getTime(); - if (currentTime - lastTime <= DELTA) { - return; - } - FineLoggerFactory.getLogger().info("Start sent function records to the cloud center..."); - queryAndSendOnePageFunctionContent(currentTime, lastTime, 0); - long page = (totalCount/PAGE_SIZE) + 1; - for(int i=1; i focusPoints = MetricRegistry.getMetric().find(FocusPoint.class,condition); - //第一次查询获取总记录数 - if(page == 0){ - totalCount = focusPoints.getTotalCount(); - } - sendThisPageFunctionContent(focusPoints); - } catch (Exception e) { - FineLoggerFactory.getLogger().error(e.getMessage(), e); - } - } - - private void sendThisPageFunctionContent(DataList focusPoints) { - String url = CloudCenter.getInstance().acquireUrlByKind(TABLE_FUNCTION_RECORD); - try { - JSONObject jsonObject = dealWithSendFunctionContent(focusPoints); - sendFunctionRecord(url, jsonObject); - } catch (JSONException e) { - FineLoggerFactory.getLogger().error(e.getMessage(), e); - } - } - - private JSONObject dealWithSendFunctionContent(DataList focusPoints) throws JSONException { - JSONObject jsonObject = new JSONObject(); - Map map = new HashMap<>(); - if(!focusPoints.isEmpty()){ - DesignerEnvManager envManager = DesignerEnvManager.getEnvManager(); - String bbsUserName = MarketConfig.getInstance().getBbsUsername(); - String uuid = envManager.getUUID(); - jsonObject.put(ATTR_UUID, uuid); - jsonObject.put(ATTR_USER_NAME, bbsUserName); - for(FocusPoint focusPoint : focusPoints.getList()) { - FunctionRecord functionRecord = getOneRecord(focusPoint); - if (map.containsKey(focusPoint.getId())) { - int times = ((FunctionRecord)map.get(focusPoint.getId())).getTimes() + 1; - functionRecord.setTimes(times); - map.put(focusPoint.getId(), functionRecord); - } else { - map.put(focusPoint.getId(), functionRecord); - } - } - jsonObject.put(ATTR_ITEMS, mapToJSONArray(map)); - } - return jsonObject; - } - - private JSONArray mapToJSONArray(Map map) throws JSONException { - JSONArray jsonArray = new JSONArray(); - for(String keys : map.keySet()){ - FunctionRecord functionRecord = (FunctionRecord)map.get(keys); - JSONObject jo = new JSONObject(); - jo.put(ATTR_ID, functionRecord.getId()); - jo.put(ATTR_TEXT, functionRecord.getText()); - jo.put(ATTR_SOURCE, functionRecord.getSource()); - jo.put(ATTR_TIME, functionRecord.getTime()); - jo.put(ATTR_TITLE, functionRecord.getTitle()); - jo.put(ATTR_TIMES, functionRecord.getTimes()); - jsonArray.put(jo); - } - return jsonArray; - } - - private void sendFunctionRecord(String url, JSONObject record) { - boolean success = false; - try { - HashMap para = new HashMap<>(); - para.put("token", SiteCenterToken.generateToken()); - para.put("content", record); - String res = HttpToolbox.post(url, para); - success = ComparatorUtils.equals(new JSONObject(res).get("status"), "success"); - if (success) { - this.lastTime = dateToString(); - } else { - FineLoggerFactory.getLogger().error("Error occured when sent function records to the cloud center."); - } - } catch (Exception e) { - FineLoggerFactory.getLogger().error(e.getMessage(), e); - } - } - - private FunctionRecord getOneRecord(FocusPoint focusPoint) { - FunctionRecord functionRecord = new FunctionRecord(); - functionRecord.setId(focusPoint.getId() == null?StringUtils.EMPTY : focusPoint.getId()); - functionRecord.setText(focusPoint.getText() == null?StringUtils.EMPTY : focusPoint.getText()); - functionRecord.setSource(focusPoint.getSource()); - functionRecord.setTime(focusPoint.getTime().getTime()); - functionRecord.setTitle(focusPoint.getTitle() == null?StringUtils.EMPTY : focusPoint.getTitle()); - functionRecord.setUsername(MarketConfig.getInstance().getBbsUsername() == null?StringUtils.EMPTY : MarketConfig.getInstance().getBbsUsername()); - functionRecord.setUuid(DesignerEnvManager.getEnvManager().getUUID() == null?StringUtils.EMPTY : DesignerEnvManager.getEnvManager().getUUID()); - return functionRecord; - } - - /** - * 收集开始使用时间,发送信息 - */ + /** + * 收集开始使用时间,发送信息 + */ public void collectStartTime(){ this.current.setStartDate(dateToString()); @@ -360,8 +202,8 @@ public class InformationCollector implements XMLReadable, XMLWriter { } catch (InterruptedException e) { FineLoggerFactory.getLogger().error(e.getMessage(), e); } - sendUserInfo(); - sendFunctionsInfo(); + sendUserInfo(); + FocusPointMessageUploader.getInstance().sendToCloudCenter(); TemplateInfoCollector.getInstance().sendTemplateInfo(); ErrorInfoUploader.getInstance().sendErrorInfo(); } @@ -534,94 +376,4 @@ public class InformationCollector implements XMLReadable, XMLWriter { } } - - private class FunctionRecord implements Comparable{ - private String id; - private String text; - private int source; - private long time; - private int times = 1; - private String title; - private String username; - private String uuid; - - public FunctionRecord(){ - - } - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public int getTimes() { - return times; - } - - public void setTimes(int times) { - this.times = times; - } - - public String getText() { - return text; - } - - public void setText(String text) { - this.text = text; - } - - public int getSource() { - return source; - } - - public void setSource(int source) { - this.source = source; - } - - public long getTime() { - return time; - } - - public void setTime(long time) { - this.time = time; - } - - public String getTitle() { - return title; - } - - public void setTitle(String title) { - this.title = title; - } - - public String getUsername() { - return username; - } - - public void setUsername(String username) { - this.username = username; - } - - public String getUuid() { - return uuid; - } - - public void setUuid(String uuid) { - this.uuid = uuid; - } - - @Override - public int compareTo(Object o) { - FunctionRecord functionRecord = (FunctionRecord) o; - if(this.getId().equals((functionRecord.getId())) && this.getText().equals(functionRecord.getText()) - && this.getSource() == functionRecord.getSource() && this.getTime() == functionRecord.getTime() - && this.getTitle().equals(functionRecord.getTitle()) && this.getUsername().equals(functionRecord.getUsername()) - && this.getUuid().equals(functionRecord.getUuid())){ - return 0; - } - return 1; - } - } } \ No newline at end of file diff --git a/designer-realize/src/main/java/com/fr/design/mainframe/messagecollect/SendDataToCloudProvider.java b/designer-realize/src/main/java/com/fr/design/mainframe/messagecollect/SendDataToCloudProvider.java new file mode 100644 index 000000000..187b72f92 --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/mainframe/messagecollect/SendDataToCloudProvider.java @@ -0,0 +1,30 @@ +package com.fr.design.mainframe.messagecollect; + +import com.fr.stable.query.data.DataList; + +/** + * @author alex sung + * @date 2019/3/22 + */ +public interface SendDataToCloudProvider { + + /** + * 获取要回传的数据 + * @param currentTime 当前时间 + * @param lastTime 上次回传时间 + * @param tClass 埋点对象类型 + * @throws Exception 取数过程中可能的异常 + */ + void getData(long currentTime, long lastTime, Class tClass) throws Exception; + + /** + * @param points 从swift获取的埋点数据 + * @throws Exception 解析或存储临时文件时可能的异常 + */ + void dealWithData(DataList points) throws Exception; + + /** + * 回传Zip到云中心 + */ + void sendToCloudCenter(); +} diff --git a/designer-realize/src/main/java/com/fr/design/mainframe/messagecollect/impl/AbstractSendDataToCloud.java b/designer-realize/src/main/java/com/fr/design/mainframe/messagecollect/impl/AbstractSendDataToCloud.java new file mode 100644 index 000000000..c611fc060 --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/mainframe/messagecollect/impl/AbstractSendDataToCloud.java @@ -0,0 +1,247 @@ +package com.fr.design.mainframe.messagecollect.impl; + +import com.fr.design.mainframe.messagecollect.SendDataToCloudProvider; +import com.fr.general.CloudCenter; +import com.fr.general.IOUtils; +import com.fr.general.http.HttpRequestType; +import com.fr.general.http.HttpToolbox; +import com.fr.intelli.record.MetricRegistry; +import com.fr.json.JSONException; +import com.fr.json.JSONObject; +import com.fr.log.FineLoggerFactory; +import com.fr.stable.CommonUtils; +import com.fr.stable.EncodeConstants; +import com.fr.stable.ProductConstants; +import com.fr.stable.StableUtils; +import com.fr.stable.query.QueryFactory; +import com.fr.stable.query.condition.QueryCondition; +import com.fr.stable.query.data.DataList; +import com.fr.stable.query.restriction.RestrictionFactory; +import com.fr.stable.xml.XMLTools; +import com.fr.stable.xml.XMLable; +import com.fr.third.org.apache.http.entity.mime.MultipartEntityBuilder; +import com.fr.third.org.apache.http.entity.mime.content.FileBody; + +import java.io.ByteArrayInputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.nio.charset.Charset; +import java.util.HashMap; +import java.util.Map; +import java.util.zip.ZipEntry; + +/** + * @author alex sung + * @date 2019/3/22 + */ +public abstract class AbstractSendDataToCloud implements SendDataToCloudProvider, XMLable { + + private static final String INTELLI_OPERATION_URL = "intelli.operation.url"; + private static final String OPERATION_URL = "https://cloud.fanruan.com/config/protect/operation"; + private static final String ATTR_SIGNATURE = "signature"; + private static final String ATTR_KEY = "key"; + private static final String FILE_NAME = "messagecollect.info"; + private static final String COLUMN_TIME = "time"; + + protected String lastTime; + private static final int PAGE_SIZE = 200; + private long totalCount = -1; + protected String fileName; + protected String pathName; + protected String folderName; + + public String getFolderName() { + return folderName; + } + + public void setFolderName(String folderName) { + this.folderName = folderName; + } + + public String getFileName() { + return fileName; + } + + public void setFileName(String fileName) { + this.fileName = fileName; + } + + public String getPathName() { + return pathName; + } + + public void setPathName(String pathName) { + this.pathName = pathName; + } + + public String getLastTime() { + return lastTime; + } + + public void setLastTime(String lastTime) { + this.lastTime = lastTime; + } + + public void saveLastTime() { + try { + FileOutputStream out = new FileOutputStream(getLastTimeFile()); + XMLTools.writeOutputStreamXML(this, out); + } catch (Exception ex) { + FineLoggerFactory.getLogger().error(ex.getMessage()); + } + } + + public static File getLastTimeFile() { + return new File(StableUtils.pathJoin(ProductConstants.getEnvHome(), FILE_NAME)); + } + + @Override + public void getData(long currentTime, long lastTime, Class tClass) { + queryAndSendOnePageFunctionContent(currentTime, lastTime, 0, tClass); + long page = (totalCount / PAGE_SIZE) + 1; + for (int i = 1; i < page; i++) { + queryAndSendOnePageFunctionContent(currentTime, lastTime, i, tClass); + } + } + + @Override + public Object clone() throws CloneNotSupportedException { + return super.clone(); + } + + private void queryAndSendOnePageFunctionContent(long current, long last, int page, Class tClass) { + QueryCondition condition = QueryFactory.create() + .skip(page * PAGE_SIZE) + .count(PAGE_SIZE) + .addSort(COLUMN_TIME, true) + .addRestriction(RestrictionFactory.lte(COLUMN_TIME, current)) + .addRestriction(RestrictionFactory.gte(COLUMN_TIME, last)); + try { + DataList points = MetricRegistry.getMetric().find(tClass, condition); + //第一次查询获取总记录数 + if (page == 0) { + totalCount = points.getTotalCount(); + } + dealWithData(points); + + } catch (Exception e) { + FineLoggerFactory.getLogger().error(e.getMessage(), e); + } + } + + @Override + public void dealWithData(DataList tDataList) throws Exception { + generateThisPageFile(tDataList); + } + + private void generateThisPageFile(DataList points) { + File file = null; + try { + JSONObject jsonObject = dealWithSendFunctionContent(points); + //生成json文件 + generateFile(jsonObject); + } catch (Exception e) { + FineLoggerFactory.getLogger().error(e.getMessage(), e); + } + } + + public abstract JSONObject dealWithSendFunctionContent(DataList focusPoints); + + /** + * 生成zip并发送zip文件 + * @param pathName zip文件路径 + */ + protected void sendZipFile(String pathName) { + + File file = null; + try { + file = generateZipFile(pathName); + if (file != null) { + uploadFile(file, file.getName()); + } + } catch (Exception e) { + FineLoggerFactory.getLogger().error(e.getMessage(), e); + return; + } + deleteFileAndZipFile(file, pathName); + } + + private File generateZipFile(String pathName) { + File zipFile = null; + try { + File file = new File(pathName); + zipFile = new File(pathName + ".zip"); + InputStream input = null; + java.util.zip.ZipOutputStream zipOut = null; + zipOut = new java.util.zip.ZipOutputStream(new FileOutputStream(zipFile)); + int temp = 0; + if (file.isDirectory()) { + File lists[] = file.listFiles(); + for (int i = 0; i < lists.length; i++) { + input = new FileInputStream(lists[i]); + zipOut.putNextEntry(new ZipEntry(file.getName() + + File.separator + lists[i].getName())); + while ((temp = input.read()) != -1) { + zipOut.write(temp); + } + input.close(); + } + } + zipOut.close(); + } catch (Exception e) { + FineLoggerFactory.getLogger().error(e.getMessage(), e); + } + return zipFile; + } + + private void generateFile(JSONObject jsonObject) { + try { + String content = jsonObject.toString(); + File file = new File(pathName + ".json"); + StableUtils.makesureFileExist(file); + FileOutputStream out = new FileOutputStream(file); + InputStream in = new ByteArrayInputStream(content.getBytes(EncodeConstants.ENCODING_UTF_8)); + IOUtils.copyBinaryTo(in, out); + out.close(); + } catch (Exception e) { + FineLoggerFactory.getLogger().error(e.getMessage(), e); + } + } + + private static void uploadFile(File file, String keyFileName) throws IOException { + String url = generateSignedUploadUrl(keyFileName); + MultipartEntityBuilder builder = MultipartEntityBuilder.create() + .addPart("file", new FileBody(file)); + Map headers = new HashMap(); + headers.put("Content-Type", "application/zip"); + HttpToolbox.upload(url, builder, Charset.forName("utf-8"), headers, HttpRequestType.PUT); + } + + + + private void deleteFileAndZipFile(File zipFile, String pathName) { + File file = new File(StableUtils.pathJoin(ProductConstants.getEnvHome(), pathName)); + CommonUtils.deleteFile(file); + CommonUtils.deleteFile(zipFile); + } + + private static String generateSignedUploadUrl(String fileKeyName) throws IOException { + String url = CloudCenter.getInstance().acquireUrlByKind(INTELLI_OPERATION_URL, OPERATION_URL); + Map parameters = new HashMap(); + parameters.put(ATTR_KEY, fileKeyName); + parameters.put(ATTR_SIGNATURE, String.valueOf(CommonUtils.signature())); + String responseText = HttpToolbox.get(url, parameters); + try { + JSONObject data = new JSONObject(responseText); + if ("success".equals(data.optString("status"))) { + return data.optString("url"); + } + } catch (JSONException e) { + FineLoggerFactory.getLogger().error("Illegal response text."); + } + return null; + } +} diff --git a/designer-realize/src/main/java/com/fr/design/mainframe/messagecollect/impl/FocusPointMessageUploader.java b/designer-realize/src/main/java/com/fr/design/mainframe/messagecollect/impl/FocusPointMessageUploader.java new file mode 100644 index 000000000..15dc8f971 --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/mainframe/messagecollect/impl/FocusPointMessageUploader.java @@ -0,0 +1,86 @@ +package com.fr.design.mainframe.messagecollect.impl; + +import com.fr.config.MarketConfig; +import com.fr.design.DesignerEnvManager; +import com.fr.design.mainframe.messagecollect.utils.MessageCollectUtils; +import com.fr.intelli.record.FocusPoint; +import com.fr.json.JSONObject; +import com.fr.log.FineLoggerFactory; +import com.fr.stable.ProductConstants; +import com.fr.stable.StableUtils; +import com.fr.stable.query.data.DataList; +import com.fr.stable.xml.XMLPrintWriter; +import com.fr.stable.xml.XMLableReader; + +import java.util.Date; +import java.util.UUID; + +/** + * @author alex sung + * @date 2019/3/22 + */ +public class FocusPointMessageUploader extends AbstractSendDataToCloud { + + private static final String TAG = "FocusPointMessageTag"; + private static final String SEPARATOR = "_"; + private static final String FOCUS_POINT_VERSION = "FocusPoint1003_"; + private static volatile FocusPointMessageUploader instance; + + public static FocusPointMessageUploader getInstance() { + if (instance == null) { + synchronized (FocusPointMessageUploader.class) { + if (instance == null) { + instance = new FocusPointMessageUploader(); + } + } + } + return instance; + } + + @Override + public JSONObject dealWithSendFunctionContent(DataList focusPoints) { + return new JSONObject(); + } + + @Override + public void sendToCloudCenter() { + MessageCollectUtils.readXMLFile(instance, getLastTimeFile()); + long currentTime = new Date().getTime(); + long lastTIme = MessageCollectUtils.getLastTimeMillis(lastTime); + try { + generatePath(); + getData(currentTime, lastTIme, FocusPoint.class); + } catch (Exception e) { + FineLoggerFactory.getLogger().error(e.getMessage()); + } + sendZipFile(getFolderName()); + saveLastTime(); + } + + @Override + public void readXML(XMLableReader reader) { + if (reader.isAttr()) { + this.setLastTime(reader.getAttrAsString("focusPointLastTime", null)); + } + } + + @Override + public void writeXML(XMLPrintWriter writer) { + writer.startTAG(TAG); + writer.attr("focusPointLastTime", lastTime); + writer.end(); + } + + private void generatePath(){ + DesignerEnvManager envManager = DesignerEnvManager.getEnvManager(); + String bbsUserName = MarketConfig.getInstance().getBbsUsername(); + String uuid = envManager.getUUID(); + //文件夹名称的格式是: "FocusPoint1003_" + uuid_bbsUserName_randomUuid,均以下划线分隔 + StringBuilder sb = new StringBuilder(); + sb.append(FOCUS_POINT_VERSION).append(uuid).append(SEPARATOR).append(bbsUserName).append(SEPARATOR).append(UUID.randomUUID()); + + setFileName(String.valueOf(UUID.randomUUID())); + setPathName(StableUtils.pathJoin(ProductConstants.getEnvHome(), sb.toString(), getFileName())); + setFolderName(StableUtils.pathJoin(ProductConstants.getEnvHome(), sb.toString())); + } +} diff --git a/designer-realize/src/main/java/com/fr/design/mainframe/messagecollect/utils/MessageCollectUtils.java b/designer-realize/src/main/java/com/fr/design/mainframe/messagecollect/utils/MessageCollectUtils.java new file mode 100644 index 000000000..721e42741 --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/mainframe/messagecollect/utils/MessageCollectUtils.java @@ -0,0 +1,69 @@ +package com.fr.design.mainframe.messagecollect.utils; + +import com.fr.base.FRContext; +import com.fr.general.DateUtils; +import com.fr.general.IOUtils; +import com.fr.log.FineLoggerFactory; +import com.fr.stable.EncodeConstants; +import com.fr.stable.StringUtils; +import com.fr.stable.xml.XMLReadable; +import com.fr.stable.xml.XMLableReader; +import com.fr.third.javax.xml.stream.XMLStreamException; + +import java.io.ByteArrayInputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.UnsupportedEncodingException; +import java.text.DateFormat; +import java.util.Date; + +/** + * @author alex sung + * @date 2019/3/26 + */ +public class MessageCollectUtils { + + public static String getFileContent(File xmlFile) throws FileNotFoundException, UnsupportedEncodingException { + InputStream is = new FileInputStream(xmlFile); + return IOUtils.inputStream2String(is); + } + + public static void readXMLFile(XMLReadable xmlReadable, File xmlFile) { + if (xmlFile == null || !xmlFile.exists()) { + return; + } + String charset = EncodeConstants.ENCODING_UTF_8; + try { + String fileContent = MessageCollectUtils.getFileContent(xmlFile); + InputStream xmlInputStream = new ByteArrayInputStream(fileContent.getBytes(charset)); + InputStreamReader inputStreamReader = new InputStreamReader(xmlInputStream, charset); + XMLableReader xmlReader = XMLableReader.createXMLableReader(inputStreamReader); + if (xmlReader != null) { + xmlReader.readXMLObject(xmlReadable); + } + xmlInputStream.close(); + } catch (IOException | XMLStreamException e) { + FineLoggerFactory.getLogger().error(e.getMessage(), e); + } + } + + public static String newDateToString() { + DateFormat df = FRContext.getDefaultValues().getDateTimeFormat(); + return df.format(new Date()); + } + + public static long getLastTimeMillis(String lastTime) { + if (StringUtils.isEmpty(lastTime)) { + return 0; + } + try { + return DateUtils.string2Date(lastTime, true).getTime(); + } catch (Exception e) { + return -1; + } + } +}