From 0848cd34692a529711450e22b22fc591e330fedb Mon Sep 17 00:00:00 2001 From: eastargh Date: Thu, 10 Sep 2026 13:19:00 +0900 Subject: [PATCH 1/4] =?UTF-8?q?UMS=20=EC=B9=B4=ED=86=A1=20=ED=85=9C?= =?UTF-8?q?=ED=94=8C=EB=A6=BF=20=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../rms/ext/djb/ums/service/UmsService.java | 30 +++++++++++-------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/src/main/java/com/eactive/eai/rms/ext/djb/ums/service/UmsService.java b/src/main/java/com/eactive/eai/rms/ext/djb/ums/service/UmsService.java index 2f3bc04..65c17ca 100644 --- a/src/main/java/com/eactive/eai/rms/ext/djb/ums/service/UmsService.java +++ b/src/main/java/com/eactive/eai/rms/ext/djb/ums/service/UmsService.java @@ -44,11 +44,9 @@ public class UmsService { private static final Gson gson = new Gson(); private static final String SYS_DVCD = "API"; //시스템코드 - private static final String BZWK_DVCD = "95"; //업무구분코드 private static final String BZWK_DCLS_DVCD = "9019"; //세부구분코드 private static final String BZWK_CD = "EBK"; //업무코드 private static final String SUB_BZWK_CD = "EBG"; //서브업무코드 - private static final String TEAM_DVCD = "99"; //팀구분코드 private final MonitoringPropertyService propertyService; @@ -235,7 +233,7 @@ public class UmsService { stdHeadVO.setChnl_tycd("EAI"); // 채널유형코드 stdHeadVO.setHmab_dvcd("1"); // 내외구분코드 1:내부 2:외부(타발) stdHeadVO.setIf_id(messageRequest.getEaiInterfaceId()); // 인터페이스ID - stdHeadVO.setTx_id(messageRequest.getServiceId()); // 거래ID + stdHeadVO.setTx_id(messageRequest.getEaiTxId()); // 거래ID if ("MESSENGER".equals(messageRequest.getMessageType()) ) { @@ -279,7 +277,7 @@ public class UmsService { // Sms 데이터 SmsDataVO dataVO = new SmsDataVO(); dataVO.setSnd_dman_dt(jsonData[0]); - dataVO.setSnd_dman_id(this.getSndDmanId(messageRequest.getMessageType())); + dataVO.setSnd_dman_id(this.getSndDmanId(messageRequest)); dataVO.setSnd_dvcd("EAI"); dataVO.setSms_msg_titl(StringUtil.chunkString(messageRequest.getSubject(), 40, false)); // MS949 40byte 초과시 절단 dataVO.setSms_msg_ctnt(messageRequest.getMessage()); @@ -289,18 +287,20 @@ public class UmsService { dataVO.setSnd_emp_dprm_cd("132"); //요청부서코드 dataVO.setLtrs_snd_tycd("2"); // 1:SMS 2:LMS/MMS dataVO.setMsg_snd_tycd("1008"); // 알림톡 메세지 종류 0000:SMS, 1000:LMS, 1008:알림톡, .... - //ADMIN으로 시작하면 제주은행 임직원, 나머지는 제주은행 고객용 + //ADMIN으로 시작하면 제주은행 내부용, 나머지는 제주은행 고객용 if (messageRequest.getMessageCode().name().startsWith("ADMIN")) { + dataVO.setSms_trnm_bzwk_dvcd("99"); //업무구분코드 + dataVO.setSms_bzwk_dcls_dvcd(BZWK_DCLS_DVCD); //업무세분코드 dataVO.setAlmtk_snd_prfl_key(propertyService.getPropertyValue("Monitoring", "djb.ums.sms.almtk_snd_prtl_key.intra", "")); // 제주은행 임직원 플러스친구아이디 } else { + dataVO.setSms_trnm_bzwk_dvcd("95"); //업무구분코드 + dataVO.setSms_bzwk_dcls_dvcd(BZWK_DCLS_DVCD); //업무세분코드 dataVO.setAlmtk_snd_prfl_key(propertyService.getPropertyValue("Monitoring", "djb.ums.sms.almtk_snd_prtl_key.public", "")); // 제주은행 플러스친구아이디 } - dataVO.setAlmtk_tmplt_cd("JJB_85959019001"); // 템플릿코드 + dataVO.setAlmtk_tmplt_cd(messageRequest.getServiceId()); // 템플릿코드 dataVO.setAlmtk_err_ltrs_snd_yn("Y"); // 오류자문자발송여부 dataVO.setAlmtk_btn_trnm_tycd("2"); // 카카오버튼전송방식 1-format string 2-JSON 3-XML - dataVO.setSms_trnm_bzwk_dvcd(BZWK_DVCD); //업무구분코드 - dataVO.setSms_bzwk_dcls_dvcd(BZWK_DCLS_DVCD); //업무세분코드 dataVO.setSms_sys_dvcd("85"); //시스템코드 dataVO.setTx_dt(jsonData[0]); //거래일자 dataVO.setTx_tktm(jsonData[1].substring(0,6)); //거래시간 @@ -325,7 +325,7 @@ public class UmsService { EmailDataVO dataVO = new EmailDataVO(); dataVO.setUms_evnt_id(propertyService.getPropertyValue("Monitoring", "djb.ums.email.ums_evnt_id", "")); // UMS이벤트ID(필수) dataVO.setSnd_dman_dt(jsonData[0]); - dataVO.setSnd_dman_id(this.getSndDmanId(messageRequest.getMessageType())); + dataVO.setSnd_dman_id(this.getSndDmanId(messageRequest)); dataVO.setDman_seqno(1); // 발송요청순번 dataVO.setEmail_titl(messageRequest.getSubject()); // 메일제목 dataVO.setCstno(propertyService.getPropertyValue("Monitoring", "djb.ums.email.cstno", "")); // 고객번호(필수) @@ -431,20 +431,24 @@ public class UmsService { return buffer.toString(); } - private String getSndDmanId(String messageType) { + private String getSndDmanId(MessageRequest messageRequest) { SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); String yyyymmdd = sdf.format(new Date()); String uuid = ""; - if ("EMAIL".equals(messageType)) { + if ("EMAIL".equals(messageRequest.getMessageType())) { uuid = SYS_DVCD + BZWK_CD + SUB_BZWK_CD + yyyymmdd + "O" + "E" ; long seq = messageRequestService.countEmailRequestsOnDate(LocalDate.now()) + 1; uuid += String.format("%013d", seq); - } else if ("SMS".equals(messageType)) { //kakao 알림톡 - uuid = SYS_DVCD + BZWK_DVCD + BZWK_DCLS_DVCD + yyyymmdd + "O" + "K"; + } else if ("SMS".equals(messageRequest.getMessageType())) { //kakao 알림톡 + if (messageRequest.getMessageCode().name().startsWith("ADMIN")) { + uuid = SYS_DVCD + "99" + BZWK_DCLS_DVCD + yyyymmdd + "O" + "K"; //내부용 + } else { + uuid = SYS_DVCD + "95" + BZWK_DCLS_DVCD + yyyymmdd + "O" + "K"; //대고객 + } long seq = messageRequestService.countSmsKakaoRequestsOnDate(LocalDate.now()) + 1; uuid += String.format("%013d", seq); From 136626e7c4f35f6f20a6b570816b9301a90a28a3 Mon Sep 17 00:00:00 2001 From: eastargh Date: Fri, 11 Sep 2026 14:03:16 +0900 Subject: [PATCH 2/4] =?UTF-8?q?=EC=82=AC=EC=9A=A9=EC=9E=90=20=EA=B6=8C?= =?UTF-8?q?=ED=95=9C=EB=B3=80=EA=B2=BD=EC=8B=9C=20=EA=B1=B0=EB=9E=98?= =?UTF-8?q?=ED=98=84=ED=99=A9-=EC=97=85=EB=AC=B4=EA=B5=AC=EB=B6=84=20?= =?UTF-8?q?=EA=B8=B0=EB=B3=B8=20=EC=84=A0=ED=83=9D=EB=90=98=EB=8F=84?= =?UTF-8?q?=EB=A1=9D=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../eai/rms/common/acl/user/BizManService.java | 15 ++++++++++++++- .../TransactionTrackingFilterService.java | 8 ++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/eactive/eai/rms/common/acl/user/BizManService.java b/src/main/java/com/eactive/eai/rms/common/acl/user/BizManService.java index 568fe44..e2ba7cc 100644 --- a/src/main/java/com/eactive/eai/rms/common/acl/user/BizManService.java +++ b/src/main/java/com/eactive/eai/rms/common/acl/user/BizManService.java @@ -22,6 +22,9 @@ import com.eactive.eai.rms.common.util.CommonConstants; import com.eactive.eai.rms.data.entity.onl.bzwkdstcd.UserBusiness; import com.eactive.eai.rms.data.entity.onl.bzwkdstcd.UserBusinessId; import com.eactive.eai.rms.data.entity.onl.bzwkdstcd.UserBusinessService; +import com.eactive.eai.rms.data.entity.onl.transaction.TransactionTrackingFilter; +import com.eactive.eai.rms.data.entity.onl.transaction.TransactionTrackingFilterId; +import com.eactive.eai.rms.data.entity.onl.transaction.TransactionTrackingFilterService; import com.eactive.eai.rms.data.entity.onl.unifbwk.UnifBwkTpService; @Service @@ -40,6 +43,9 @@ public class BizManService extends BaseService { @Autowired private UserBusinessService userBusinessService; + @Autowired + private TransactionTrackingFilterService transactionTrackingFilterService; + @Autowired private UserBizUIMapper userBizUIMapper; @@ -101,7 +107,14 @@ public class BizManService extends BaseService { }).collect(Collectors.toList()); userBusinessService.deleteOrSave(userId, userBusinesses); - + + transactionTrackingFilterService.deleteAllByUserId(userId); + List filters = userBusinesses.stream() + .map(ub -> new TransactionTrackingFilter( + new TransactionTrackingFilterId(userId, ub.getId().getEaiBzwkDstcd()))) + .collect(Collectors.toList()); + transactionTrackingFilterService.saveAll(filters); + String userBusinessServiceLists = userBusinesses.stream() .map(e -> e.getId().getEaiBzwkDstcd()) .collect(Collectors.joining(",")); diff --git a/src/main/java/com/eactive/eai/rms/data/entity/onl/transaction/TransactionTrackingFilterService.java b/src/main/java/com/eactive/eai/rms/data/entity/onl/transaction/TransactionTrackingFilterService.java index 5870c0f..f3e8b05 100644 --- a/src/main/java/com/eactive/eai/rms/data/entity/onl/transaction/TransactionTrackingFilterService.java +++ b/src/main/java/com/eactive/eai/rms/data/entity/onl/transaction/TransactionTrackingFilterService.java @@ -20,4 +20,12 @@ public class TransactionTrackingFilterService extends .fetch(); } + public void deleteAllByUserId(String userId) { + repository.deleteAll(findAllByUserId(userId)); + } + + public void saveAll(List filters) { + repository.saveAll(filters); + } + } From 52e8c3be396333cc7427bc3f4abbed63bf702322 Mon Sep 17 00:00:00 2001 From: eastargh Date: Fri, 11 Sep 2026 17:35:23 +0900 Subject: [PATCH 3/4] =?UTF-8?q?=EC=A1=B0=ED=9A=8C=EC=8B=9C=EA=B0=84=20?= =?UTF-8?q?=EC=B5=9C=EB=8C=80=2059=EB=B6=84=EC=9D=B4=20=EB=90=98=EB=8F=84?= =?UTF-8?q?=EB=A1=9D=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../onl/kjb/statistics/apiStatsHourMan.jsp | 23 +++++++++---------- .../onl/kjb/statistics/apiStatsMinuteMan.jsp | 19 +++++++-------- 2 files changed, 21 insertions(+), 21 deletions(-) diff --git a/WebContent/jsp/onl/kjb/statistics/apiStatsHourMan.jsp b/WebContent/jsp/onl/kjb/statistics/apiStatsHourMan.jsp index 2ac6916..f1f71e5 100644 --- a/WebContent/jsp/onl/kjb/statistics/apiStatsHourMan.jsp +++ b/WebContent/jsp/onl/kjb/statistics/apiStatsHourMan.jsp @@ -52,6 +52,8 @@ var url = ''; var url_view = ''; var url_minute_view = ''; + var url_left_menu = ''; + var DASHBOARD_MENU_ID = '0305001'; // apiStatsMinuteMan(대시보드) 메뉴 ID var totalDonutChart, callChart; @@ -162,23 +164,20 @@ var hour = parseInt(statTime.substring(8, 10)); var startDate = year + '-' + month + '-' + day; - var startTime = (hour < 10 ? '0' + hour : hour) + ':00'; - - // 1시간 후 계산 (23시인 경우 다음날 00시로 자동 계산) - var d = new Date(parseInt(year), parseInt(month) - 1, parseInt(day), hour, 0, 0); - d.setHours(d.getHours() + 1); - - var endDate = d.getFullYear() + '-' + - (d.getMonth() + 1 < 10 ? '0' : '') + (d.getMonth() + 1) + '-' + - (d.getDate() < 10 ? '0' : '') + d.getDate(); - var endTime = (d.getHours() < 10 ? '0' : '') + d.getHours() + ':00'; + var hourStr = (hour < 10 ? '0' + hour : hour); + var startTime = hourStr + ':00'; + // 해당 시간대 끝(정시~59분)으로 이동 (예: 10:00~10:59) + var endTime = hourStr + ':59'; var params = '?searchStartDate=' + startDate + '&searchStartTime=' + startTime - + '&searchEndDate=' + endDate + '&searchEndTime=' + endTime; - params += '&menuId='+'${param.menuId}'; + + '&searchEndDate=' + startDate + '&searchEndTime=' + endTime; + params += '&menuId='+DASHBOARD_MENU_ID; params += '&cmd='+'LIST'; params += '&serviceType='+'APIGW'; + // 왼쪽 메뉴도 대시보드(분단위 통계) 메뉴로 전환 + parent.leftFrame.location.href = url_left_menu + '?menuId=' + DASHBOARD_MENU_ID + + '&serviceType=' + sessionStorage["serviceType"]; location.href = url_minute_view + params; } diff --git a/WebContent/jsp/onl/kjb/statistics/apiStatsMinuteMan.jsp b/WebContent/jsp/onl/kjb/statistics/apiStatsMinuteMan.jsp index feae786..7f4f9f3 100644 --- a/WebContent/jsp/onl/kjb/statistics/apiStatsMinuteMan.jsp +++ b/WebContent/jsp/onl/kjb/statistics/apiStatsMinuteMan.jsp @@ -262,14 +262,14 @@ var diffMinutes = (end - start) / (1000 * 60); if (diffMinutes > 60) { - // 1시간 초과 시 시작 + 1시간으로 조정 - endDateTime = updateEndTime(new Date(start.getTime() + 60 * 60 * 1000)); + // 1시간 초과 시 시작시각 기준 1시간치(정시~59분)로 조정 + endDateTime = updateEndTime(new Date(start.getTime() + 59 * 60 * 1000)); } else { endDateTime = formatDateTime(end); } } else { - // 종료시간 미입력 시 시작 + 1시간으로 설정 - endDateTime = updateEndTime(new Date(start.getTime() + 60 * 60 * 1000)); + // 종료시간 미입력 시 시작시각 기준 1시간치(정시~59분)로 설정 + endDateTime = updateEndTime(new Date(start.getTime() + 59 * 60 * 1000)); } return { start: startDateTime, end: endDateTime }; @@ -325,8 +325,8 @@ } // 조회기간을 정시 단위 1시간 구간으로 이동 (direction: -1 이전, 1 이후) - // ex) 시작 08:35, 이전 클릭 -> 08:00~09:00, 다시 -> 07:00~08:00 - // ex) 시작 08:35, 이후 클릭 -> 09:00~10:00, 다시 -> 10:00~11:00 + // ex) 시작 08:35, 이전 클릭 -> 08:00~08:59, 다시 -> 07:00~07:59 + // ex) 시작 08:35, 이후 클릭 -> 09:00~09:59, 다시 -> 10:00~10:59 function shiftTimeRange(direction) { var startDate = $("input[name=searchStartDate]").val().replace(/-/g, ""); var startTime = $("input[name=searchStartTime]").val().replace(/:/g, ""); @@ -350,7 +350,8 @@ start.setHours(start.getHours() + 1); } - var end = new Date(start.getTime() + 60 * 60 * 1000); + // 종료시각은 같은 시간대의 59분으로 설정 (예: 10:00~10:59) + var end = new Date(start.getTime() + 59 * 60 * 1000); function pad(n) { return String(n).padStart(2, '0'); } @@ -580,9 +581,9 @@ $("input[name=searchStartDate]").datepicker(); - // 기본값 설정 (현재 시간(분) 기준 1시간 전 ~ 현재 시간(분)) + // 기본값 설정 (현재 시간(분) 기준 59분 전 ~ 현재 시간(분)) var now = new Date(); - var oneHourAgo = new Date(now.getTime() - 60 * 60 * 1000); + var oneHourAgo = new Date(now.getTime() - 59 * 60 * 1000); function formatDate(d) { return d.getFullYear() + '-' + From e4de8ebc8b900a8b532ed292df2497a30a8906dd Mon Sep 17 00:00:00 2001 From: eastargh Date: Fri, 11 Sep 2026 17:35:47 +0900 Subject: [PATCH 4/4] =?UTF-8?q?=EC=A1=B0=ED=9A=8C=EC=8B=9C=EA=B0=84=20?= =?UTF-8?q?=EC=B5=9C=EB=8C=80=2059=EB=B6=84=EC=9D=B4=20=EB=90=98=EB=8F=84?= =?UTF-8?q?=EB=A1=9D=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../entity/onl/kjb/statistics/ApiStatsMinuteService.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/eactive/eai/rms/data/entity/onl/kjb/statistics/ApiStatsMinuteService.java b/src/main/java/com/eactive/eai/rms/data/entity/onl/kjb/statistics/ApiStatsMinuteService.java index 964fef6..f920605 100644 --- a/src/main/java/com/eactive/eai/rms/data/entity/onl/kjb/statistics/ApiStatsMinuteService.java +++ b/src/main/java/com/eactive/eai/rms/data/entity/onl/kjb/statistics/ApiStatsMinuteService.java @@ -336,12 +336,12 @@ public class ApiStatsMinuteService if (StringUtils.isNotBlank(search.getSearchEndDateTime())) { endDateTime = LocalDateTime.parse(search.getSearchEndDateTime(), DATE_TIME_FORMATTER); - // 1시간(60분) 초과 시 시작시간 기준 1시간 후로 강제 설정 + // 1시간(60분) 초과 시 시작시간 기준 1시간치(정시~59분, statTime 조건이 양끝 포함이므로 -1분)로 강제 설정 if (java.time.Duration.between(startDateTime, endDateTime).toMinutes() > MAX_MINUTES) { - endDateTime = startDateTime.plusMinutes(MAX_MINUTES); + endDateTime = startDateTime.plusMinutes(MAX_MINUTES - 1); } } else { - endDateTime = startDateTime.plusMinutes(MAX_MINUTES); + endDateTime = startDateTime.plusMinutes(MAX_MINUTES - 1); } search.setParsedStartDateTime(startDateTime);