| 
					
				 | 
			
			
				@@ -0,0 +1,112 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+package com.yonge.log.service.impl; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.alibaba.fastjson.JSONObject; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.yonge.log.dal.dao.HistoryMessageDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.yonge.log.dal.model.HistoryMessage; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.yonge.log.service.HistoryMessageService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.yonge.mongodb.dao.BaseDaoWithMongo; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+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.nio.ByteBuffer; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import java.nio.channels.FileChannel; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import java.util.ArrayList; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import java.util.List; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+@Service 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+public class HistoryMessageServiceImpl extends BaseServiceImplWithMongo<String, HistoryMessage> implements HistoryMessageService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	@Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	private HistoryMessageDao historyMessageDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	@Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	public BaseDaoWithMongo<String, HistoryMessage> getDAO() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		return historyMessageDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	@Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	public void saveImHistoryMessage(File file) throws Exception { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		long length = file.length(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		if(length > 1048576){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			doNioReadFile(file); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		}else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			doBufferReadFile(file); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	public void doBufferReadFile(File file) throws Exception 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		BufferedReader reader = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			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 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(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 |