diff --git a/src/main/java/com/eactive/eai/rms/onl/apim/approval/app/PortalAppApprovalListener.java b/src/main/java/com/eactive/eai/rms/onl/apim/approval/app/PortalAppApprovalListener.java index 7c95b34..edc5f2d 100644 --- a/src/main/java/com/eactive/eai/rms/onl/apim/approval/app/PortalAppApprovalListener.java +++ b/src/main/java/com/eactive/eai/rms/onl/apim/approval/app/PortalAppApprovalListener.java @@ -110,11 +110,13 @@ public class PortalAppApprovalListener implements ApprovalListener { return; } MessageRecipient recipient = new MessageRecipient(); + recipient.setUsername(requester.getUserName()); recipient.setPhone(requester.getMobileNumber()); recipient.setUserId(requester.getEmailAddr()); Map params = new HashMap<>(); - params.put("apiKey", appRequest.getClientName()); - messageSendService.sendMessage(MessageCode.APP_REGISTER_APPROVED, recipient, params); + // DB 템플릿 APP_APPROVE SMS 변수(%APP_NAME%)에 매핑 + params.put("APP_NAME", appRequest.getClientName()); + messageSendService.sendMessage(MessageCode.APP_APPROVE, recipient, params); } private void syncTargetServer(AppRequestType action, CredentialUI credentialUI) throws ApprovalDeployException { @@ -225,5 +227,36 @@ public class PortalAppApprovalListener implements ApprovalListener { @Transactional public void rollback(Approval approval) { logger.info("Approval {} rollback", approval.getId()); + + // 앱 사용 거절 통지 + Optional optRequest = appRequestRepository.findAppRequestByApproval(approval); + if (!optRequest.isPresent()) { + return; + } + AppRequest appRequest = optRequest.get(); + com.eactive.apim.portal.portaluser.entity.PortalUser requester = approval.getRequester(); + if (requester == null) { + logger.warn("앱 거절 통지 생략 - 요청자 정보 없음. appRequestId: {}", appRequest.getId()); + return; + } + MessageRecipient recipient = new MessageRecipient(); + recipient.setUsername(requester.getUserName()); + recipient.setPhone(requester.getMobileNumber()); + recipient.setUserId(requester.getEmailAddr()); + Map params = new HashMap<>(); + // DB 템플릿 APP_REJECTED SMS 변수(%APP_NAME%, %REASON%)에 매핑 + params.put("APP_NAME", appRequest.getClientName()); + params.put("REASON", extractRejectReason(approval)); + messageSendService.sendMessage(MessageCode.APP_REJECTED, recipient, params); + } + + private String extractRejectReason(Approval approval) { + if (approval.getApprovers() == null) { + return ""; + } + return approval.getApprovers().stream() + .map(com.eactive.apim.portal.approval.entity.Approver::getApprovalMessage) + .filter(m -> m != null && !m.isEmpty()) + .findFirst().orElse(""); } } diff --git a/src/main/java/com/eactive/eai/rms/onl/apim/approval/user/PortalUserApprovalListener.java b/src/main/java/com/eactive/eai/rms/onl/apim/approval/user/PortalUserApprovalListener.java index 59cd753..b0b238f 100644 --- a/src/main/java/com/eactive/eai/rms/onl/apim/approval/user/PortalUserApprovalListener.java +++ b/src/main/java/com/eactive/eai/rms/onl/apim/approval/user/PortalUserApprovalListener.java @@ -94,10 +94,15 @@ public class PortalUserApprovalListener implements ApprovalListener { private void sendApprovalResult(PortalUser portalUser) { MessageRecipient recipient = new MessageRecipient(); + recipient.setUsername(portalUser.getUserName()); recipient.setPhone(portalUser.getMobileNumber()); recipient.setUserId(portalUser.getEmailAddr()); Map params = new HashMap<>(); -// messageSendService.sendMessage(MessageCode.USER_REGISTRATION_APPROVED, recipient, params); + // DB 템플릿 MANAGER_WITH_ORG_REGISTER_APPROVED SMS 변수(%ORG_NAME%)에 매핑 + PortalOrg org = portalUser.getPortalOrg(); + if (org != null) { + params.put("ORG_NAME", org.getOrgName()); + } messageSendService.sendMessage(MessageCode.MANAGER_WITH_ORG_REGISTER_APPROVED, recipient, params); } @@ -155,6 +160,13 @@ public class PortalUserApprovalListener implements ApprovalListener { PortalUser portalUser = portalUserService.findByUserId(userId); PortalOrg portalOrg = portalUser.getPortalOrg(); + // 거절 통지에 필요한 정보를 반려 처리(정보 마스킹) 이전에 캡처 + String noticeName = portalUser.getUserName(); + String noticePhone = portalUser.getMobileNumber(); + String noticeEmail = portalUser.getEmailAddr(); + String noticeOrgName = portalOrg != null ? portalOrg.getOrgName() : null; + String rejectReason = extractRejectReason(approval); + // 개인→법인 전환 요청 반려: approvalStatus가 PENDING이면 전환 신청이었으므로 개인 사용자로 복원 if (PortalUserEnums.ApprovalStatus.PENDING.equals(portalUser.getApprovalStatus())) { logger.info("Approval {} is a personal-to-corporate conversion rejection. Reverting user {} to personal user.", approval.getId(), userId); @@ -199,5 +211,28 @@ public class PortalUserApprovalListener implements ApprovalListener { portalOrgService.save(portalOrg); } + + // 법인관리자/법인 등록 거절 통지 (정보 마스킹 이전 캡처값 사용) + MessageRecipient recipient = new MessageRecipient(); + recipient.setUsername(noticeName); + recipient.setPhone(noticePhone); + recipient.setUserId(noticeEmail); + Map params = new HashMap<>(); + // DB 템플릿 MANAGER_WITH_ORG_REGISTER_REJECTED SMS 변수(%ORG_NAME%, %REASON%)에 매핑 + if (noticeOrgName != null) { + params.put("ORG_NAME", noticeOrgName); + } + params.put("REASON", rejectReason); + messageSendService.sendMessage(MessageCode.MANAGER_WITH_ORG_REGISTER_REJECTED, recipient, params); + } + + private String extractRejectReason(Approval approval) { + if (approval.getApprovers() == null) { + return ""; + } + return approval.getApprovers().stream() + .map(com.eactive.apim.portal.approval.entity.Approver::getApprovalMessage) + .filter(m -> m != null && !m.isEmpty()) + .findFirst().orElse(""); } }