From 25a8e13752d9bdb8882fbe3992b01b24b0ebe100 Mon Sep 17 00:00:00 2001 From: Rinjae Date: Wed, 24 Jun 2026 19:43:30 +0900 Subject: [PATCH] =?UTF-8?q?=EC=95=B1/=EC=82=AC=EC=9A=A9=EC=9E=90=20?= =?UTF-8?q?=EC=8A=B9=EC=9D=B8=20=EB=B0=8F=20=EA=B1=B0=EC=A0=88=20=EC=8B=9C?= =?UTF-8?q?=20SMS=20=ED=86=B5=EC=A7=80=20=EB=A1=9C=EC=A7=81=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80=20-=20=EC=8A=B9=EC=9D=B8/=EA=B1=B0=EC=A0=88=20?= =?UTF-8?q?=ED=85=9C=ED=94=8C=EB=A6=BF=20=EB=B3=80=EC=88=98=20=EB=A7=A4?= =?UTF-8?q?=ED=95=91=20(APP=5FNAME,=20REASON=20=EB=93=B1)=20-=20=EB=B2=95?= =?UTF-8?q?=EC=9D=B8=20=EA=B4=80=EB=A6=AC=EC=9E=90=20=EC=8A=B9=EC=9D=B8/?= =?UTF-8?q?=EA=B1=B0=EC=A0=88=20=ED=86=B5=EC=A7=80=20=EB=A1=9C=EC=A7=81=20?= =?UTF-8?q?=EA=B0=9C=EC=84=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/PortalAppApprovalListener.java | 37 ++++++++++++++++++- .../user/PortalUserApprovalListener.java | 37 ++++++++++++++++++- 2 files changed, 71 insertions(+), 3 deletions(-) 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(""); } }