From 274a7cd9b815454063fdf584e7db9bed20889f22 Mon Sep 17 00:00:00 2001 From: limqsh <540344226@qq.com> Date: Wed, 3 Jun 2026 23:11:20 +0800 Subject: [PATCH] =?UTF-8?q?fix=20-=20=E6=97=A5=E5=BF=97=E4=B8=8A=E4=BC=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/AdminNettyController.java | 35 +++++++++++++++ .../com/sv/netty/netty/ServerHandler.java | 35 --------------- .../java/com/sv/intergration/LogService.java | 45 +++++++++++++++---- .../com/sv/intergration/MessageService.java | 24 +++------- .../main/java/com/sv/netty/ClientHandler.java | 2 +- .../java/com/sv/service/ClientService.java | 1 - .../java/com/sv/netty/config/MessageType.java | 3 +- .../com/sv/netty/config/NettyConstant.java | 1 - 8 files changed, 79 insertions(+), 67 deletions(-) diff --git a/api/src/main/java/com/sv/netty/controller/AdminNettyController.java b/api/src/main/java/com/sv/netty/controller/AdminNettyController.java index 0d17d36..ff0fde3 100644 --- a/api/src/main/java/com/sv/netty/controller/AdminNettyController.java +++ b/api/src/main/java/com/sv/netty/controller/AdminNettyController.java @@ -25,6 +25,9 @@ import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; import java.io.*; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.Map; /** * 小程序二维码进场Controller @@ -148,6 +151,38 @@ public class AdminNettyController extends BaseApiController { return ResponseDTO.ok(); } + /** + * 接收客户端上传的日志文件 + */ + @RequestMapping(value = "/api/log/receive", method = RequestMethod.POST) + public ResponseDTO receiveLog(@RequestBody Map logData) { + try { + String deviceSn = logData.get("deviceSn"); + String commLog = logData.get("commLog"); + String errorLog = logData.get("errorLog"); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + String dateStr = sdf.format(new Date()); + + if (commLog != null) { + String fileName = "/home/uploadlog/comm-" + deviceSn + "-" + dateStr + "-client.log"; + try (FileOutputStream fos = new FileOutputStream(fileName)) { + fos.write(commLog.getBytes()); + } + } + if (errorLog != null) { + String fileName = "/home/uploadlog/error-" + deviceSn + "-" + dateStr + "-client.log"; + try (FileOutputStream fos = new FileOutputStream(fileName)) { + fos.write(errorLog.getBytes()); + } + } + logger.info("log received from device: " + deviceSn); + return ResponseDTO.ok(); + } catch (Exception e) { + logger.error("receive log fail", e); + throw new ServiceException("receive log fail"); + } + } + /** * 下载线下入场凭证(二维码) * @param id diff --git a/api/src/main/java/com/sv/netty/netty/ServerHandler.java b/api/src/main/java/com/sv/netty/netty/ServerHandler.java index cc7b0d5..3facd46 100644 --- a/api/src/main/java/com/sv/netty/netty/ServerHandler.java +++ b/api/src/main/java/com/sv/netty/netty/ServerHandler.java @@ -12,11 +12,7 @@ import io.netty.handler.timeout.IdleStateEvent; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.io.FileOutputStream; import java.net.InetSocketAddress; -import java.text.SimpleDateFormat; -import java.util.Date; -import java.util.Map; import java.util.Set; /** @@ -85,9 +81,6 @@ public class ServerHandler extends SimpleChannelInboundHandler { } } break; - case LOG_DATA: - handleLogData(message); - break; default: logger.info( "default"); } @@ -147,34 +140,6 @@ public class ServerHandler extends SimpleChannelInboundHandler { } } - private void handleLogData(VenueMessage message) { - try { - String json = message.getMessage(); - Map logData = JsonUtils.decode(json, Map.class); - String deviceSn = logData.get("deviceSn"); - String commLog = logData.get("commLog"); - String errorLog = logData.get("errorLog"); - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); - String dateStr = sdf.format(new Date()); - - if (commLog != null) { - String fileName = "/home/uploadlog/comm-" + deviceSn + "-" + dateStr + "-client.log"; - try (FileOutputStream fos = new FileOutputStream(fileName)) { - fos.write(commLog.getBytes()); - } - } - if (errorLog != null) { - String fileName = "/home/uploadlog/error-" + deviceSn + "-" + dateStr + "-client.log"; - try (FileOutputStream fos = new FileOutputStream(fileName)) { - fos.write(errorLog.getBytes()); - } - } - logger.info("log data saved for device: " + deviceSn); - } catch (Exception e) { - logger.error("handle log data fail", e); - } - } - /** * IdleStateHandler 如果几秒之后没有读操作,那么就会触发这个方法 */ diff --git a/netty-client/src/main/java/com/sv/intergration/LogService.java b/netty-client/src/main/java/com/sv/intergration/LogService.java index f82a411..f27265d 100644 --- a/netty-client/src/main/java/com/sv/intergration/LogService.java +++ b/netty-client/src/main/java/com/sv/intergration/LogService.java @@ -1,10 +1,14 @@ package com.sv.intergration; import com.sv.netty.config.NettyConstant; +import com.sv.netty.utils.JsonUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.File; +import java.io.OutputStream; +import java.net.HttpURLConnection; +import java.net.URL; import java.nio.file.Files; import java.nio.file.Paths; import java.util.HashMap; @@ -14,26 +18,51 @@ public class LogService { private final Logger logger = LoggerFactory.getLogger(LogService.class); - public Map readLogContent() { - Map logContent = new HashMap<>(); + public void uploadLogViaHttp() { try { String deviceSn = System.getProperty(NettyConstant.VENUE_CLIENT_SN); - logContent.put("deviceSn", deviceSn); + Map logData = new HashMap<>(); + logData.put("deviceSn", deviceSn); File file1 = new File("/home/venue/logs/common-default.log"); File file2 = new File("/home/venue/logs/common-error.log"); if (file1.exists()) { - logContent.put("commLog", new String(Files.readAllBytes(Paths.get(file1.getPath())))); + logData.put("commLog", new String(Files.readAllBytes(Paths.get(file1.getPath())))); } if (file2.exists()) { - logContent.put("errorLog", new String(Files.readAllBytes(Paths.get(file2.getPath())))); + logData.put("errorLog", new String(Files.readAllBytes(Paths.get(file2.getPath())))); } - logger.info("read log content success"); + + if (!file1.exists() && !file2.exists()) { + logger.warn("no log files found"); + return; + } + + String json = JsonUtils.encode(logData); + URL url = new URL("https://api.hongyutiyu.top/api/log/receive"); + HttpURLConnection conn = (HttpURLConnection) url.openConnection(); + conn.setRequestMethod("POST"); + conn.setRequestProperty("Content-Type", "application/json; charset=utf-8"); + conn.setDoOutput(true); + conn.setConnectTimeout(10000); + conn.setReadTimeout(30000); + + try (OutputStream os = conn.getOutputStream()) { + os.write(json.getBytes("utf-8")); + os.flush(); + } + + int code = conn.getResponseCode(); + if (code == 200) { + logger.info("upload log success via http"); + } else { + logger.error("upload log fail, http code: " + code); + } + conn.disconnect(); } catch (Exception e) { - logger.error("read log content fail", e); + logger.error("upload log via http fail", e); } - return logContent; } } diff --git a/netty-client/src/main/java/com/sv/intergration/MessageService.java b/netty-client/src/main/java/com/sv/intergration/MessageService.java index 0899a92..107b7b4 100644 --- a/netty-client/src/main/java/com/sv/intergration/MessageService.java +++ b/netty-client/src/main/java/com/sv/intergration/MessageService.java @@ -1,16 +1,10 @@ package com.sv.intergration; import com.sv.intergration.impl.OldDoorService; -import com.sv.netty.config.MessageType; import com.sv.netty.config.VenueMessage; -import com.sv.netty.utils.EncodeMsg; -import com.sv.netty.utils.JsonUtils; -import io.netty.channel.ChannelHandlerContext; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.util.Map; - /** * 消息服务 * MessageService.java @@ -37,10 +31,9 @@ public class MessageService { /** * 解析并执行接受服务器消息 * - * @param ctx * @param message */ - public void execute(ChannelHandlerContext ctx, VenueMessage message) { + public void execute(VenueMessage message) { switch (message.getMessageType()) { case ENTER_DOOR: enterDoor(); @@ -49,23 +42,16 @@ public class MessageService { outDoor(); break; case LOG: - sendLog(ctx); + sendLog(); break; default: logger.info( "default"); } } - private void sendLog(ChannelHandlerContext ctx) { - try { - LogService logService = new LogService(); - Map logContent = logService.readLogContent(); - VenueMessage response = new VenueMessage(MessageType.LOG_DATA, JsonUtils.encode(logContent)); - ctx.channel().writeAndFlush(EncodeMsg.INSTANCE.encode(response)); - logger.info("send log data success"); - } catch (Exception e) { - logger.error("send log data fail", e); - } + private void sendLog() { + LogService logService = new LogService(); + logService.uploadLogViaHttp(); } /** diff --git a/netty-client/src/main/java/com/sv/netty/ClientHandler.java b/netty-client/src/main/java/com/sv/netty/ClientHandler.java index bb72e75..58a1411 100644 --- a/netty-client/src/main/java/com/sv/netty/ClientHandler.java +++ b/netty-client/src/main/java/com/sv/netty/ClientHandler.java @@ -58,7 +58,7 @@ public class ClientHandler extends SimpleChannelInboundHandler { logger.error("收到无法解析的消息,忽略: " + msg); return; } - MessageService.getInstance().execute(ctx, message); + MessageService.getInstance().execute(message); } catch (Exception e) { logger.error("处理服务器消息异常,不影响连接: " + msg, e); } diff --git a/netty-client/src/main/java/com/sv/service/ClientService.java b/netty-client/src/main/java/com/sv/service/ClientService.java index 693b7a9..02ad880 100644 --- a/netty-client/src/main/java/com/sv/service/ClientService.java +++ b/netty-client/src/main/java/com/sv/service/ClientService.java @@ -30,7 +30,6 @@ public class ClientService { System.setProperty(NettyConstant.VENUE_SERVER_PORT,decode.getServerPort()); System.setProperty(NettyConstant.VENUE_CLIENT_SN,decode.getClientSN()); System.setProperty(NettyConstant.VENUE_CLIENT_VID,decode.getClientVid()); - System.setProperty(NettyConstant.VENUE_CHECK_PWD,decode.getClientPwd()); } bufferedReader.close(); fileReader.close(); diff --git a/netty-model/src/main/java/com/sv/netty/config/MessageType.java b/netty-model/src/main/java/com/sv/netty/config/MessageType.java index 195eacf..0055189 100644 --- a/netty-model/src/main/java/com/sv/netty/config/MessageType.java +++ b/netty-model/src/main/java/com/sv/netty/config/MessageType.java @@ -5,8 +5,7 @@ public enum MessageType { SCAN_CODE("扫码"), ENTER_DOOR("进门"), OUT_DOOR("出门"), - LOG("日志"), - LOG_DATA("日志数据"); + LOG("日志"); private String message; MessageType(String message) { diff --git a/netty-model/src/main/java/com/sv/netty/config/NettyConstant.java b/netty-model/src/main/java/com/sv/netty/config/NettyConstant.java index 7a36631..30d9e27 100644 --- a/netty-model/src/main/java/com/sv/netty/config/NettyConstant.java +++ b/netty-model/src/main/java/com/sv/netty/config/NettyConstant.java @@ -8,7 +8,6 @@ public interface NettyConstant { String VENUE_SERVER_PORT = "VENUE_SERVER_PORT"; String VENUE_CLIENT_SN = "VENUE_CLIENT_SN"; String VENUE_CLIENT_VID = "VENUE_CLIENT_VID"; - String VENUE_CHECK_PWD = "VENUE_CHECK_PWD"; /** * session中存储终端发送的额外参数