Ver Fonte

同步im聊天记录

zouxuan há 4 anos atrás
pai
commit
efe30d37ad

+ 114 - 67
mec-common/audit-log/src/main/java/com/yonge/log/service/impl/HistoryMessageServiceImpl.java

@@ -9,14 +9,15 @@ import com.yonge.mongodb.service.impl.BaseServiceImplWithMongo;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileReader;
+import java.io.*;
 import java.nio.ByteBuffer;
 import java.nio.channels.FileChannel;
+import java.nio.charset.StandardCharsets;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipFile;
+import java.util.zip.ZipInputStream;
 
 @Service
 public class HistoryMessageServiceImpl extends BaseServiceImplWithMongo<String, HistoryMessage> implements HistoryMessageService {
@@ -31,82 +32,128 @@ public class HistoryMessageServiceImpl extends BaseServiceImplWithMongo<String,
 
 	@Override
 	public void saveImHistoryMessage(File file) throws Exception {
-		long length = file.length();
-		if(length > 1048576){
+//		long length = file.length();
+//		if(length > 1048576){
 			doNioReadFile(file);
-		}else {
-			doBufferReadFile(file);
-		}
+//		}else {
+//			doBufferReadFile(file);
+//		}
 	}
 
-	public void doBufferReadFile(File file) throws Exception
-	{
-		BufferedReader reader = null;
+//	public static void main(String[] args) throws Exception {
+//		doNioReadFile1(new File("/Users/chenxiaoyu/Documents/77fe9ce6-7d91-4568-afe3-9e8ac351e87f.zip"));
+//	}
+
+	public void doNioReadFile(File file) {
+		ZipInputStream zin = null;
 		try {
-			reader = new BufferedReader(new FileReader(file));
-			String line = null;
-			int num = 0;
+			zin = new ZipInputStream(new FileInputStream(file), StandardCharsets.UTF_8);
+			ZipFile zf = new ZipFile(file);
+			ZipEntry ze;
+			while ((ze = zin.getNextEntry()) != null) {
 			List<HistoryMessage> historyMessages = new ArrayList<>();
-			while ((line = reader.readLine()) != null){
-				try {
-					historyMessages.add(JSONObject.parseObject(line.substring(line.indexOf("{")), HistoryMessage.class));
-					if(historyMessages.size() >= 2000){
-						historyMessageDao.batchInsert(historyMessages,HistoryMessage.class);
-						historyMessages.clear();
+				BufferedReader br = new BufferedReader(new InputStreamReader(zf.getInputStream(ze)));
+				String line;
+				while ((line = br.readLine()) != null) {
+					try {
+						historyMessages.add(JSONObject.parseObject(line.substring(line.indexOf("{")), HistoryMessage.class));
+						if(historyMessages.size() >= 2000){
+							historyMessageDao.batchInsert(historyMessages,HistoryMessage.class);
+							historyMessages.clear();
+						}
+					}catch (Exception e){
+						e.printStackTrace();
 					}
-				}catch (Exception e){
-					e.printStackTrace();
 				}
-				num++;
-			}
-			if(historyMessages.size() > 0){
-				historyMessageDao.batchInsert(historyMessages,HistoryMessage.class);
+				if(historyMessages.size() > 0){
+					historyMessageDao.batchInsert(historyMessages,HistoryMessage.class);
+				}
+				br.close();
+				break;
 			}
+		} catch (IOException e) {
+			e.printStackTrace();
 		} finally {
-			reader.close();
-		}
-	}
-
-
-	public void doNioReadFile(File file) throws Exception
-	{
-		String enterStr = "\n";
-
-		FileChannel inChannel = new FileInputStream(file).getChannel();
-		ByteBuffer buffer = ByteBuffer.allocate(1048576);
-
-		StringBuilder newlinesBui = new StringBuilder();
-		while (inChannel.read(buffer) != -1)
-		{
-			buffer.flip();
-			//数据组合.
-			String content = new String(buffer.array());
-			newlinesBui.append(content).toString();
-
-			int fromIndex = 0;
-			int endIndex = -1;
-			//循环找到 \n
-			List<HistoryMessage> historyMessages = new ArrayList<>();
-			while ((endIndex = newlinesBui.indexOf(enterStr, fromIndex)) > -1)
-			{
-				//得到一行
-				String line = newlinesBui.substring(fromIndex, endIndex);
+			if (zin != null) {
 				try {
-					historyMessages.add(JSONObject.parseObject(line.substring(line.indexOf("{")), HistoryMessage.class));
-					if(historyMessages.size() >= 2000){
-						historyMessageDao.batchInsert(historyMessages,HistoryMessage.class);
-						historyMessages.clear();
-					}
-				}catch (Exception e){
+					zin.closeEntry();
+				} catch (IOException e) {
 					e.printStackTrace();
 				}
-				fromIndex = endIndex + 1;
 			}
-			if(historyMessages.size() > 0){
-				historyMessageDao.batchInsert(historyMessages,HistoryMessage.class);
-			}
-			newlinesBui.delete(0, fromIndex);
-			buffer.clear();
 		}
 	}
+
+//	public void doBufferReadFile(File file) throws Exception
+//	{
+//		BufferedReader reader = null;
+//		try {
+//
+////			InputStreamReader isr = new InputStreamReader(new FileInputStream(file), "GBK");
+//			reader = new BufferedReader(new FileReader(file));
+//			String line = null;
+//			int num = 0;
+//			List<HistoryMessage> historyMessages = new ArrayList<>();
+//			while ((line = reader.readLine()) != null){
+//				try {
+//					historyMessages.add(JSONObject.parseObject(line.substring(line.indexOf("{")), HistoryMessage.class));
+//					if(historyMessages.size() >= 2000){
+//						historyMessageDao.batchInsert(historyMessages,HistoryMessage.class);
+//						historyMessages.clear();
+//					}
+//				}catch (Exception e){
+//					e.printStackTrace();
+//				}
+//				num++;
+//			}
+//			if(historyMessages.size() > 0){
+//				historyMessageDao.batchInsert(historyMessages,HistoryMessage.class);
+//			}
+//		} finally {
+//			reader.close();
+//		}
+//	}
+
+
+//	public static void doNioReadFile(File file) throws Exception
+//	{
+//		String enterStr = "\n";
+//
+//		FileChannel inChannel = new FileInputStream(file).getChannel();
+//		ByteBuffer buffer = ByteBuffer.allocate(1048576);
+//
+//		StringBuilder newlinesBui = new StringBuilder();
+//		while (inChannel.read(buffer) != -1)
+//		{
+//			buffer.flip();
+//			//数据组合.
+//			String content = new String(buffer.array());
+//			newlinesBui.append(content).toString();
+//
+//			int fromIndex = 0;
+//			int endIndex = -1;
+//			//循环找到 \n
+//			List<HistoryMessage> historyMessages = new ArrayList<>();
+//			while ((endIndex = newlinesBui.indexOf(enterStr, fromIndex)) > -1)
+//			{
+//				//得到一行
+//				String line = newlinesBui.substring(fromIndex, endIndex);
+//				try {
+//					historyMessages.add(JSONObject.parseObject(line.substring(line.indexOf("{")), HistoryMessage.class));
+//					if(historyMessages.size() >= 2000){
+////						historyMessageDao.batchInsert(historyMessages,HistoryMessage.class);
+//						historyMessages.clear();
+//					}
+//				}catch (Exception e){
+//					e.printStackTrace();
+//				}
+//				fromIndex = endIndex + 1;
+//			}
+//			if(historyMessages.size() > 0){
+////				historyMessageDao.batchInsert(historyMessages,HistoryMessage.class);
+//			}
+//			newlinesBui.delete(0, fromIndex);
+//			buffer.clear();
+//		}
+//	}
 }

+ 1 - 1
mec-web/src/main/java/com/ym/mec/web/controller/TaskController.java

@@ -140,7 +140,7 @@ public class TaskController extends BaseController {
 			URL url1 = new URL(url);
 			FileUtils.copyURLToFile(url1,file);
 			UploadReturnBean uploadReturnBean = uploadFileService.uploadImHistoryMsgFile(file);
-			historyMessageService.saveImHistoryMessage(file);
+			historyMessageService.saveImHistoryMessage(new File(file.getAbsolutePath()));
 		}
 	}