Merge remote-tracking branch 'origin/master'
eapim-admin CI / build (push) Waiting to run

This commit is contained in:
Rinjae(gf63)
2026-09-11 18:38:59 +09:00
6 changed files with 63 additions and 38 deletions
@@ -52,6 +52,8 @@
var url = '<c:url value="/onl/kjb/statistics/apiStatsHourMan.json"/>'; var url = '<c:url value="/onl/kjb/statistics/apiStatsHourMan.json"/>';
var url_view = '<c:url value="/onl/kjb/statistics/apiStatsHourMan.view"/>'; var url_view = '<c:url value="/onl/kjb/statistics/apiStatsHourMan.view"/>';
var url_minute_view = '<c:url value="/onl/kjb/statistics/apiStatsMinuteMan.view"/>'; var url_minute_view = '<c:url value="/onl/kjb/statistics/apiStatsMinuteMan.view"/>';
var url_left_menu = '<c:url value="/leftMenu.do"/>';
var DASHBOARD_MENU_ID = '0305001'; // apiStatsMinuteMan(대시보드) 메뉴 ID
var totalDonutChart, callChart; var totalDonutChart, callChart;
@@ -162,23 +164,20 @@
var hour = parseInt(statTime.substring(8, 10)); var hour = parseInt(statTime.substring(8, 10));
var startDate = year + '-' + month + '-' + day; var startDate = year + '-' + month + '-' + day;
var startTime = (hour < 10 ? '0' + hour : hour) + ':00'; var hourStr = (hour < 10 ? '0' + hour : hour);
var startTime = hourStr + ':00';
// 1시간 후 계산 (23시인 경우 다음날 00시로 자동 계산) // 해당 시간대 끝(정시~59분)으로 이동 (예: 10:00~10:59)
var d = new Date(parseInt(year), parseInt(month) - 1, parseInt(day), hour, 0, 0); var endTime = hourStr + ':59';
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 params = '?searchStartDate=' + startDate + '&searchStartTime=' + startTime var params = '?searchStartDate=' + startDate + '&searchStartTime=' + startTime
+ '&searchEndDate=' + endDate + '&searchEndTime=' + endTime; + '&searchEndDate=' + startDate + '&searchEndTime=' + endTime;
params += '&menuId='+'${param.menuId}'; params += '&menuId='+DASHBOARD_MENU_ID;
params += '&cmd='+'LIST'; params += '&cmd='+'LIST';
params += '&serviceType='+'APIGW'; params += '&serviceType='+'APIGW';
// 왼쪽 메뉴도 대시보드(분단위 통계) 메뉴로 전환
parent.leftFrame.location.href = url_left_menu + '?menuId=' + DASHBOARD_MENU_ID
+ '&serviceType=' + sessionStorage["serviceType"];
location.href = url_minute_view + params; location.href = url_minute_view + params;
} }
@@ -262,14 +262,14 @@
var diffMinutes = (end - start) / (1000 * 60); var diffMinutes = (end - start) / (1000 * 60);
if (diffMinutes > 60) { if (diffMinutes > 60) {
// 1시간 초과 시 시작 + 1시간으로 조정 // 1시간 초과 시 시작시각 기준 1시간치(정시~59분)로 조정
endDateTime = updateEndTime(new Date(start.getTime() + 60 * 60 * 1000)); endDateTime = updateEndTime(new Date(start.getTime() + 59 * 60 * 1000));
} else { } else {
endDateTime = formatDateTime(end); endDateTime = formatDateTime(end);
} }
} else { } else {
// 종료시간 미입력 시 시작 + 1시간으로 설정 // 종료시간 미입력 시 시작시각 기준 1시간치(정시~59분)로 설정
endDateTime = updateEndTime(new Date(start.getTime() + 60 * 60 * 1000)); endDateTime = updateEndTime(new Date(start.getTime() + 59 * 60 * 1000));
} }
return { start: startDateTime, end: endDateTime }; return { start: startDateTime, end: endDateTime };
@@ -325,8 +325,8 @@
} }
// 조회기간을 정시 단위 1시간 구간으로 이동 (direction: -1 이전, 1 이후) // 조회기간을 정시 단위 1시간 구간으로 이동 (direction: -1 이전, 1 이후)
// ex) 시작 08:35, 이전 클릭 -> 08:00~09:00, 다시 -> 07:00~08:00 // ex) 시작 08:35, 이전 클릭 -> 08:00~08:59, 다시 -> 07:00~07:59
// ex) 시작 08:35, 이후 클릭 -> 09:00~10:00, 다시 -> 10:00~11:00 // ex) 시작 08:35, 이후 클릭 -> 09:00~09:59, 다시 -> 10:00~10:59
function shiftTimeRange(direction) { function shiftTimeRange(direction) {
var startDate = $("input[name=searchStartDate]").val().replace(/-/g, ""); var startDate = $("input[name=searchStartDate]").val().replace(/-/g, "");
var startTime = $("input[name=searchStartTime]").val().replace(/:/g, ""); var startTime = $("input[name=searchStartTime]").val().replace(/:/g, "");
@@ -350,7 +350,8 @@
start.setHours(start.getHours() + 1); 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'); } function pad(n) { return String(n).padStart(2, '0'); }
@@ -580,9 +581,9 @@
$("input[name=searchStartDate]").datepicker(); $("input[name=searchStartDate]").datepicker();
// 기본값 설정 (현재 시간(분) 기준 1시간 전 ~ 현재 시간(분)) // 기본값 설정 (현재 시간(분) 기준 59분 전 ~ 현재 시간(분))
var now = new Date(); 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) { function formatDate(d) {
return d.getFullYear() + '-' + return d.getFullYear() + '-' +
@@ -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.UserBusiness;
import com.eactive.eai.rms.data.entity.onl.bzwkdstcd.UserBusinessId; 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.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; import com.eactive.eai.rms.data.entity.onl.unifbwk.UnifBwkTpService;
@Service @Service
@@ -40,6 +43,9 @@ public class BizManService extends BaseService {
@Autowired @Autowired
private UserBusinessService userBusinessService; private UserBusinessService userBusinessService;
@Autowired
private TransactionTrackingFilterService transactionTrackingFilterService;
@Autowired @Autowired
private UserBizUIMapper userBizUIMapper; private UserBizUIMapper userBizUIMapper;
@@ -102,6 +108,13 @@ public class BizManService extends BaseService {
userBusinessService.deleteOrSave(userId, userBusinesses); userBusinessService.deleteOrSave(userId, userBusinesses);
transactionTrackingFilterService.deleteAllByUserId(userId);
List<TransactionTrackingFilter> filters = userBusinesses.stream()
.map(ub -> new TransactionTrackingFilter(
new TransactionTrackingFilterId(userId, ub.getId().getEaiBzwkDstcd())))
.collect(Collectors.toList());
transactionTrackingFilterService.saveAll(filters);
String userBusinessServiceLists = userBusinesses.stream() String userBusinessServiceLists = userBusinesses.stream()
.map(e -> e.getId().getEaiBzwkDstcd()) .map(e -> e.getId().getEaiBzwkDstcd())
.collect(Collectors.joining(",")); .collect(Collectors.joining(","));
@@ -336,12 +336,12 @@ public class ApiStatsMinuteService
if (StringUtils.isNotBlank(search.getSearchEndDateTime())) { if (StringUtils.isNotBlank(search.getSearchEndDateTime())) {
endDateTime = LocalDateTime.parse(search.getSearchEndDateTime(), DATE_TIME_FORMATTER); 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) { if (java.time.Duration.between(startDateTime, endDateTime).toMinutes() > MAX_MINUTES) {
endDateTime = startDateTime.plusMinutes(MAX_MINUTES); endDateTime = startDateTime.plusMinutes(MAX_MINUTES - 1);
} }
} else { } else {
endDateTime = startDateTime.plusMinutes(MAX_MINUTES); endDateTime = startDateTime.plusMinutes(MAX_MINUTES - 1);
} }
search.setParsedStartDateTime(startDateTime); search.setParsedStartDateTime(startDateTime);
@@ -20,4 +20,12 @@ public class TransactionTrackingFilterService extends
.fetch(); .fetch();
} }
public void deleteAllByUserId(String userId) {
repository.deleteAll(findAllByUserId(userId));
}
public void saveAll(List<TransactionTrackingFilter> filters) {
repository.saveAll(filters);
}
} }
@@ -44,11 +44,9 @@ public class UmsService {
private static final Gson gson = new Gson(); private static final Gson gson = new Gson();
private static final String SYS_DVCD = "API"; //시스템코드 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_DCLS_DVCD = "9019"; //세부구분코드
private static final String BZWK_CD = "EBK"; //업무코드 private static final String BZWK_CD = "EBK"; //업무코드
private static final String SUB_BZWK_CD = "EBG"; //서브업무코드 private static final String SUB_BZWK_CD = "EBG"; //서브업무코드
private static final String TEAM_DVCD = "99"; //팀구분코드
private final MonitoringPropertyService propertyService; private final MonitoringPropertyService propertyService;
@@ -235,7 +233,7 @@ public class UmsService {
stdHeadVO.setChnl_tycd("EAI"); // 채널유형코드 stdHeadVO.setChnl_tycd("EAI"); // 채널유형코드
stdHeadVO.setHmab_dvcd("1"); // 내외구분코드 1:내부 2:외부(타발) stdHeadVO.setHmab_dvcd("1"); // 내외구분코드 1:내부 2:외부(타발)
stdHeadVO.setIf_id(messageRequest.getEaiInterfaceId()); // 인터페이스ID stdHeadVO.setIf_id(messageRequest.getEaiInterfaceId()); // 인터페이스ID
stdHeadVO.setTx_id(messageRequest.getServiceId()); // 거래ID stdHeadVO.setTx_id(messageRequest.getEaiTxId()); // 거래ID
if ("MESSENGER".equals(messageRequest.getMessageType()) ) { if ("MESSENGER".equals(messageRequest.getMessageType()) ) {
@@ -279,7 +277,7 @@ public class UmsService {
// Sms 데이터 // Sms 데이터
SmsDataVO dataVO = new SmsDataVO(); SmsDataVO dataVO = new SmsDataVO();
dataVO.setSnd_dman_dt(jsonData[0]); 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.setSnd_dvcd("EAI");
dataVO.setSms_msg_titl(StringUtil.chunkString(messageRequest.getSubject(), 40, false)); // MS949 40byte 초과시 절단 dataVO.setSms_msg_titl(StringUtil.chunkString(messageRequest.getSubject(), 40, false)); // MS949 40byte 초과시 절단
dataVO.setSms_msg_ctnt(messageRequest.getMessage()); dataVO.setSms_msg_ctnt(messageRequest.getMessage());
@@ -289,18 +287,20 @@ public class UmsService {
dataVO.setSnd_emp_dprm_cd("132"); //요청부서코드 dataVO.setSnd_emp_dprm_cd("132"); //요청부서코드
dataVO.setLtrs_snd_tycd("2"); // 1:SMS 2:LMS/MMS dataVO.setLtrs_snd_tycd("2"); // 1:SMS 2:LMS/MMS
dataVO.setMsg_snd_tycd("1008"); // 알림톡 메세지 종류 0000:SMS, 1000:LMS, 1008:알림톡, .... dataVO.setMsg_snd_tycd("1008"); // 알림톡 메세지 종류 0000:SMS, 1000:LMS, 1008:알림톡, ....
//ADMIN으로 시작하면 제주은행 임직원, 나머지는 제주은행 고객용 //ADMIN으로 시작하면 제주은행 내부용, 나머지는 제주은행 고객용
if (messageRequest.getMessageCode().name().startsWith("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", "")); // 제주은행 임직원 플러스친구아이디 dataVO.setAlmtk_snd_prfl_key(propertyService.getPropertyValue("Monitoring", "djb.ums.sms.almtk_snd_prtl_key.intra", "")); // 제주은행 임직원 플러스친구아이디
} else { } 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_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_err_ltrs_snd_yn("Y"); // 오류자문자발송여부
dataVO.setAlmtk_btn_trnm_tycd("2"); // 카카오버튼전송방식 1-format string 2-JSON 3-XML 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.setSms_sys_dvcd("85"); //시스템코드
dataVO.setTx_dt(jsonData[0]); //거래일자 dataVO.setTx_dt(jsonData[0]); //거래일자
dataVO.setTx_tktm(jsonData[1].substring(0,6)); //거래시간 dataVO.setTx_tktm(jsonData[1].substring(0,6)); //거래시간
@@ -325,7 +325,7 @@ public class UmsService {
EmailDataVO dataVO = new EmailDataVO(); EmailDataVO dataVO = new EmailDataVO();
dataVO.setUms_evnt_id(propertyService.getPropertyValue("Monitoring", "djb.ums.email.ums_evnt_id", "")); // UMS이벤트ID(필수) dataVO.setUms_evnt_id(propertyService.getPropertyValue("Monitoring", "djb.ums.email.ums_evnt_id", "")); // UMS이벤트ID(필수)
dataVO.setSnd_dman_dt(jsonData[0]); 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.setDman_seqno(1); // 발송요청순번
dataVO.setEmail_titl(messageRequest.getSubject()); // 메일제목 dataVO.setEmail_titl(messageRequest.getSubject()); // 메일제목
dataVO.setCstno(propertyService.getPropertyValue("Monitoring", "djb.ums.email.cstno", "")); // 고객번호(필수) dataVO.setCstno(propertyService.getPropertyValue("Monitoring", "djb.ums.email.cstno", "")); // 고객번호(필수)
@@ -431,20 +431,24 @@ public class UmsService {
return buffer.toString(); return buffer.toString();
} }
private String getSndDmanId(String messageType) { private String getSndDmanId(MessageRequest messageRequest) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
String yyyymmdd = sdf.format(new Date()); String yyyymmdd = sdf.format(new Date());
String uuid = ""; String uuid = "";
if ("EMAIL".equals(messageType)) { if ("EMAIL".equals(messageRequest.getMessageType())) {
uuid = SYS_DVCD + BZWK_CD + SUB_BZWK_CD + yyyymmdd + "O" + "E" ; uuid = SYS_DVCD + BZWK_CD + SUB_BZWK_CD + yyyymmdd + "O" + "E" ;
long seq = messageRequestService.countEmailRequestsOnDate(LocalDate.now()) + 1; long seq = messageRequestService.countEmailRequestsOnDate(LocalDate.now()) + 1;
uuid += String.format("%013d", seq); uuid += String.format("%013d", seq);
} else if ("SMS".equals(messageType)) { //kakao 알림톡 } else if ("SMS".equals(messageRequest.getMessageType())) { //kakao 알림톡
uuid = SYS_DVCD + BZWK_DVCD + BZWK_DCLS_DVCD + yyyymmdd + "O" + "K"; 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; long seq = messageRequestService.countSmsKakaoRequestsOnDate(LocalDate.now()) + 1;
uuid += String.format("%013d", seq); uuid += String.format("%013d", seq);