From 73848d14caa4241447a9f3f215a0fa97df242ee6 Mon Sep 17 00:00:00 2001 From: daekuk Date: Tue, 10 Feb 2026 10:41:01 +0900 Subject: [PATCH] =?UTF-8?q?-=20=EC=97=85=EB=AC=B4=20=EB=8D=B0=EC=9D=B4?= =?UTF-8?q?=ED=84=B0=20XML=20Pretty=20Print=20=EA=B8=B0=EB=8A=A5=20?= =?UTF-8?q?=ED=98=B8=EC=B6=9C=20-=20=EC=97=85=EB=AC=B4=20=EB=8D=B0?= =?UTF-8?q?=EC=9D=B4=ED=84=B0=20=EB=B3=B4=EC=97=AC=EC=A4=84=20=EB=95=8C=20?= =?UTF-8?q?trim=20=ED=95=98=EC=A7=80=EC=95=8A=EB=8F=84=EB=A1=9D=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tracking/DbTrackingController.java | 111 +++++++++++++++++- .../tracking/DbTrackingService.java | 2 +- 2 files changed, 110 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/eactive/eai/rms/onl/transaction/tracking/DbTrackingController.java b/src/main/java/com/eactive/eai/rms/onl/transaction/tracking/DbTrackingController.java index 7cb03c2..feb724c 100644 --- a/src/main/java/com/eactive/eai/rms/onl/transaction/tracking/DbTrackingController.java +++ b/src/main/java/com/eactive/eai/rms/onl/transaction/tracking/DbTrackingController.java @@ -4,6 +4,7 @@ import com.eactive.eai.common.EAITable; import com.eactive.eai.common.logger.HttpAdapterExtraLogVo; import com.eactive.eai.common.util.MessageUtil; import com.eactive.eai.data.entity.onl.adapter.AdapterGroup; +import com.eactive.eai.data.entity.onl.server.EAIServer; import com.eactive.eai.rms.common.combo.ComboVo; import com.eactive.eai.rms.common.context.MonitoringContext; import com.eactive.eai.rms.common.logging.UserAccessLogger; @@ -12,10 +13,12 @@ import com.eactive.eai.rms.common.vo.GridResponse; import com.eactive.eai.rms.data.entity.onl.adapter.AdapterGroupService; import com.eactive.eai.rms.data.entity.onl.logger.EAILogDetailSearch; import com.eactive.eai.rms.data.entity.onl.logger.EAILogSearch; +import com.eactive.eai.rms.data.entity.onl.server.EAIServerService; import com.eactive.eai.transformer.message.ISO8583MessageFactory; import com.eactive.eai.transformer.util.CommonLib; import com.eactive.eai.transformer.util.IConv; import com.eactive.eai.transformer.util.ISO8583DumpUtil; +import com.fasterxml.jackson.databind.ObjectMapper; import com.google.gson.Gson; import com.solab.iso8583.IsoMessage; import org.apache.commons.io.HexDump; @@ -24,11 +27,20 @@ import org.apache.log4j.Logger; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; +import org.springframework.http.HttpEntity; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpMethod; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; +import org.springframework.http.client.SimpleClientHttpRequestFactory; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.client.HttpStatusCodeException; +import org.springframework.web.client.ResourceAccessException; +import org.springframework.web.client.RestTemplate; import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpServletRequest; @@ -44,15 +56,20 @@ public class DbTrackingController { private final DbTrackingService service; private final MonitoringContext monitoringContext; private final AdapterGroupService adapterGroupService; - + private final EAIServerService eaiServerService; + + private RestTemplate restTemplate = new RestTemplate(); + private final ObjectMapper objectMapper = new ObjectMapper(); @Autowired public DbTrackingController(DbTrackingService service, MonitoringContext monitoringContext, - AdapterGroupService adapterGroupService) { + AdapterGroupService adapterGroupService, + EAIServerService eaiServerService) { this.service = service; this.monitoringContext = monitoringContext; this.adapterGroupService = adapterGroupService; + this.eaiServerService = eaiServerService; } @GetMapping(value = "/onl/transaction/tracking/trackingMan.view") @@ -538,5 +555,95 @@ public class DbTrackingController { return new String(byteArrayOutputStream.toByteArray()); } + + @RequestMapping(value = "/onl/transaction/tracking/trackingMan.json", params = "cmd=DETAIL_PRETTY_VIEW") + public ResponseEntity selectList(@RequestParam Map paramMap) { + + List serverList = eaiServerService.selectEaiServerIpList(); + + if (serverList == null || serverList.isEmpty()) { + return ResponseEntity.status(HttpStatus.SERVICE_UNAVAILABLE) + .body(Collections.singletonMap("error", "접속 가능한 서버 목록이 없습니다.")); + } + + SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory(); + factory.setConnectTimeout(2000); + factory.setReadTimeout(5000); + RestTemplate restTemplate = new RestTemplate(factory); + + Map requestBody = new HashMap<>(); + requestBody.put("intrefaceId", paramMap.get("intrefaceId")); + requestBody.put("logProcessNo", paramMap.get("logProcessNo")); + requestBody.put("bizData", paramMap.get("bizData")); + + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(MediaType.APPLICATION_JSON); + HttpEntity> entity = new HttpEntity<>(requestBody, headers); + + Map resultResponse = null; + boolean isSuccess = false; + String lastErrorMsg = ""; + + for(EAIServer server : serverList) { + + String ip = server.getEaisevrip(); + String port = server.getSevrlsnportname(); + + if(ip == null || port == null) continue; + + String targetUrl = "http://" + ip + ":" + port + "/PrettyPrint"; + + try { + + ResponseEntity response = restTemplate.exchange( + targetUrl, + HttpMethod.POST, + entity, + Map.class + ); + + if(response.getStatusCode() == HttpStatus.OK && response.getBody() != null) { + resultResponse = response.getBody(); + isSuccess = true; + break; + } + + + } catch (ResourceAccessException e) { + lastErrorMsg = "Network Error: " + e.getMessage(); + logger.debug("서버 접속 실패 : " + lastErrorMsg); + continue; + } catch (HttpStatusCodeException e) { + String errorBodyString = e.getResponseBodyAsString(); + logger.debug("서버 내부 에러 [" + targetUrl + "] : " + errorBodyString); + + try { + // 에러 문자열을 Map(JSON 객체)으로 변환 시도 + Map errorMap = objectMapper.readValue(errorBodyString, Map.class); + return ResponseEntity.status(e.getStatusCode()).body(errorMap); + } catch (Exception parseError) { + // 일반 텍스트를 보냈다면 수동으로 Map 생성 + Map manualErrorMap = new HashMap<>(); + manualErrorMap.put("error", true); + manualErrorMap.put("result", errorBodyString); + return ResponseEntity.status(e.getStatusCode()).body(manualErrorMap); + } + } + + } + + if (isSuccess && resultResponse != null) { + + return ResponseEntity.ok(resultResponse); + } else { + // 모든 서버 실패 + Map errorMap = new HashMap<>(); + errorMap.put("error", true); + errorMap.put("result", "서버 연결 실패"); +// errorMap.put("result", "서버 연결 실패 (Last Error: " + lastErrorMsg + ")"); + logger.debug("서버 POST 요청 에러 : " + lastErrorMsg); + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(errorMap); + } + } } diff --git a/src/main/java/com/eactive/eai/rms/onl/transaction/tracking/DbTrackingService.java b/src/main/java/com/eactive/eai/rms/onl/transaction/tracking/DbTrackingService.java index b960565..3432d99 100644 --- a/src/main/java/com/eactive/eai/rms/onl/transaction/tracking/DbTrackingService.java +++ b/src/main/java/com/eactive/eai/rms/onl/transaction/tracking/DbTrackingService.java @@ -308,7 +308,7 @@ public class DbTrackingService extends BaseService { Matcher matcher = pattern.matcher(input); if (matcher.find()) { - return matcher.group(1).trim(); + return matcher.group(1); } return null;