diff --git a/src/main/java/com/eactive/eai/rms/data/entity/onl/apim/messagerequest/MessageRequestService.java b/src/main/java/com/eactive/eai/rms/data/entity/onl/apim/messagerequest/MessageRequestService.java index ab73dca..f7a5d76 100644 --- a/src/main/java/com/eactive/eai/rms/data/entity/onl/apim/messagerequest/MessageRequestService.java +++ b/src/main/java/com/eactive/eai/rms/data/entity/onl/apim/messagerequest/MessageRequestService.java @@ -14,6 +14,8 @@ import org.springframework.data.domain.Sort; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.time.LocalDate; + @Service @Transactional(transactionManager = "transactionManagerForEMS") public class MessageRequestService @@ -53,6 +55,16 @@ public class MessageRequestService return repository.findAll(predicate, fixed); } + /** 특정 일자에 SMS/KAKAO 로 발송 요청된 건수 (UMS 일련번호 채번용). */ + public long countSmsKakaoRequestsOnDate(LocalDate date) { + QMessageRequest q = QMessageRequest.messageRequest; + BooleanBuilder predicate = new BooleanBuilder(); + predicate.and(q.messageType.in("SMS", "KAKAO")); + predicate.and(q.requestDate.goe(date.atStartOfDay())); + predicate.and(q.requestDate.loe(date.atTime(23, 59, 59))); + return repository.count(predicate); + } + /** PENDING 상태인 건만 FAILED 로 전환한다. */ public void updateStatusToFailedIfPending(String id) { MessageRequest entity = getById(id); 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 e21af2c..df534fa 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 @@ -8,6 +8,7 @@ import java.net.URL; import java.nio.charset.Charset; import java.security.SecureRandom; import java.text.SimpleDateFormat; +import java.time.LocalDate; import java.util.ArrayList; import java.util.Date; import java.util.List; @@ -18,8 +19,10 @@ import org.springframework.stereotype.Service; import com.eactive.apim.portal.common.util.PhoneNumberUtil; import com.eactive.apim.portal.portalproperty.service.PortalPropertyService; import com.eactive.apim.portal.template.entity.MessageRequest; +import com.eactive.eai.common.util.StringUtil; import com.eactive.eai.common.util.SystemUtil; import com.eactive.eai.rms.data.entity.man.monitoringProperty.service.MonitoringPropertyService; +import com.eactive.eai.rms.data.entity.onl.apim.messagerequest.MessageRequestService; import com.eactive.eai.rms.ext.djb.ums.vo.EmailDataVO; import com.eactive.eai.rms.ext.djb.ums.vo.SmsDataVO; import com.eactive.eai.rms.ext.djb.ums.vo.StdHeadVO; @@ -39,12 +42,15 @@ public class UmsService { private static final String SYS_DVCD = "API"; //시스템코드 private static final String BZWK_DVCD = "99"; //업무구분코드 private static final String SUB_BZWK_CD = "9019"; //세부구분코드 + private static final String TEAM_DVCD = "00"; //팀구분코드 TODO: 변경해야함 private final MonitoringPropertyService propertyService; + private final MessageRequestService messageRequestService; - public UmsService(MonitoringPropertyService propertyService) { + public UmsService(MonitoringPropertyService propertyService, MessageRequestService messageRequestService) { this.propertyService = propertyService; + this.messageRequestService = messageRequestService; } public boolean send(MessageRequest messageRequest) throws Exception { @@ -168,17 +174,16 @@ public class UmsService { // 스윙챗 알림 데이터 SwingDataVO swiDataVO = new SwingDataVO(); - swiDataVO.setNotiCode("CNO_FEP_HMP_0002"); + swiDataVO.setNotiCode("CNO_FEP_APIM_0002"); //0001:긴급, 0002:중요 swiDataVO.setNotiTitle("알림"); swiDataVO.setNotiContent(messageRequest.getMessage()); // 스윙챗 알림 데이터 List swiReDataVOList = new ArrayList(); SwingReceiverDataVO receiver = new SwingReceiverDataVO(); - receiver.setType(""); + receiver.setType("PSN"); receiver.setCompanyCode("CB"); - receiver.setCode(messageRequest.getMessengerId()); - receiver.setPrdNm(""); + receiver.setCode(messageRequest.getMessengerId()); swiReDataVOList.add(receiver); swiDataVO.setReceiverInfo(swiReDataVOList); @@ -200,22 +205,22 @@ public class UmsService { // Sms 데이터 SmsDataVO dataVO = new SmsDataVO(); dataVO.setSnd_dman_dt(jsonData[0]); - dataVO.setSnd_dman_id(""); + dataVO.setSnd_dman_id(this.getSndDmanId(messageRequest.getMessageType())); dataVO.setSnd_dvcd("EAI"); - dataVO.setMsg_titl(""); + dataVO.setMsg_titl(StringUtil.chunkString(messageRequest.getSubject(), 40, false)); // MS949 40byte 초과시 절단 dataVO.setMsg_ctnt(messageRequest.getMessage()); dataVO.setRecvr_no(PhoneNumberUtil.digitsOnly(messageRequest.getPhone())); dataVO.setSndn_no("15880079"); //발신번호 - dataVO.setSnd_empno(""); //요청자 - dataVO.setSnd_emp_dprm_cd(""); //요청부서코드 + dataVO.setSnd_empno("APIM"); //요청자 + dataVO.setSnd_emp_dprm_cd("132"); //요청부서코드 if ("SMS".equals(messageRequest.getMessageType())) { dataVO.setLtrs_snd_tycd("1"); // 1:SMS 2:LMS/MMS dataVO.setMsg_snd_tycd("0000"); // 알림톡 메세지 종류 0000:SMS, 1000:LMS, 1008:알림톡, .... } else if ("KAKAO".equals(messageRequest.getMessageType())) { dataVO.setLtrs_snd_tycd("2"); // 1:SMS 2:LMS/MMS dataVO.setMsg_snd_tycd("1008"); // 알림톡 메세지 종류 0000:SMS, 1000:LMS, 1008:알림톡, .... - dataVO.setAlmtk_snd_prfl_key(""); // 플러스친구아이디 - dataVO.setAlmtk_tmplt_cd(""); // 템플릿코드 + dataVO.setAlmtk_snd_prfl_key(propertyService.getPropertyValue("Monitoring", "djb.ums.sms.almtk_snd_prtl_key", "")); // 플러스친구아이디 + dataVO.setAlmtk_tmplt_cd(BZWK_DVCD + TEAM_DVCD + SUB_BZWK_CD + "001"); // 템플릿코드 dataVO.setAlmtk_err_ltrs_snd_yn("Y"); // 오류자문자발송여부 dataVO.setAlmtk_btn_trnm_tycd("2"); // 카카오버튼전송방식 1-format string 2-JSON 3-XML } @@ -256,8 +261,8 @@ public class UmsService { dataVO.setRecvr_nm(messageRequest.getUsername()); // 수신자명(필수) dataVO.setTmplt_mpng_info(messageRequest.getMessage()); // 탬플릿매핑정보 dataVO.setTmplt_mpng_rptt_info(""); // 탬플릿매핑반복정보 - dataVO.setSnd_empno(""); // 발신자ID(필수) - dataVO.setSnd_emp_dprm_cd(""); // 발신자부서코드(필수) + dataVO.setSnd_empno("APIM"); // 발신자ID(필수) + dataVO.setSnd_emp_dprm_cd("132"); // 발신자부서코드(필수) dataVO.setBzwk_cd(BZWK_DVCD); // 업무구분코드 dataVO.setSub_bzwk_cd(SUB_BZWK_CD); // 업무세부코드 dataVO.setSys_dvcd(SYS_DVCD); @@ -334,4 +339,24 @@ public class UmsService { } return buffer.toString(); } + + private String getSndDmanId(String messageType) { + SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); + String yyyymmdd = sdf.format(new Date()); + + String uuid = SYS_DVCD + BZWK_DVCD + SUB_BZWK_CD + yyyymmdd + "O" ; + + if ("SMS".equals(messageType)) { + uuid += "S"; + } else if ("LMS".equals(messageType)) { + uuid += "L"; + } else if ("KAKAO".equals(messageType)) { + uuid += "K"; + } + + long seq = messageRequestService.countSmsKakaoRequestsOnDate(LocalDate.now()) + 1; + uuid += String.format("%014d", seq); + + return uuid; + } }