diff --git a/src/main/java/kr/co/uplus/ez/api/custMgt/CustMgtMapper.java b/src/main/java/kr/co/uplus/ez/api/custMgt/CustMgtMapper.java index bf40998..3b71d1f 100644 --- a/src/main/java/kr/co/uplus/ez/api/custMgt/CustMgtMapper.java +++ b/src/main/java/kr/co/uplus/ez/api/custMgt/CustMgtMapper.java @@ -4,6 +4,7 @@ import kr.co.uplus.ez.api.custMgt.dto.*; import kr.co.uplus.ez.common.data.ImUser; import org.apache.ibatis.annotations.Mapper; +import java.math.BigDecimal; import java.util.List; import java.util.Map; @@ -133,6 +134,10 @@ public interface CustMgtMapper { /**충전관리 삭제 */ void deleteChrg(DeleteChrgReqDto deleteChrgReqDto); int updateChrgAmt(ChrgAmtDto chrgAmtDto); + BigDecimal selectChargeAmt(@Valid TargetSubsInfoDto targetUserLimit); + void insertWebMsgCli(WebMsgCliDto ezMsgDto); + String selectNotiSeq(); + void insertNotiHst(NotiHistDto notihist); diff --git a/src/main/java/kr/co/uplus/ez/api/custMgt/CustMgtService.java b/src/main/java/kr/co/uplus/ez/api/custMgt/CustMgtService.java index 60a6f23..448313a 100644 --- a/src/main/java/kr/co/uplus/ez/api/custMgt/CustMgtService.java +++ b/src/main/java/kr/co/uplus/ez/api/custMgt/CustMgtService.java @@ -21,7 +21,10 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.math.BigDecimal; +import java.text.DateFormat; +import java.text.SimpleDateFormat; import java.util.ArrayList; +import java.util.Calendar; import java.util.Date; import java.util.HashMap; import java.util.List; @@ -118,6 +121,21 @@ public class CustMgtService { @Value("${mail.templeteCode:E0005}") private String templeteCode; + /* 테이블명 */ + public static class TableName { + public static final String EZ_MSG_NORMAL = "EZ_MSG_NORMAL"; //일반 + public static final String EZ_MSG_REAL = "EZ_MSG_REAL"; //실시간보장 + public static final String EZ_MSG_BATCH = "EZ_MSG_BATCH"; //예약 + } + + /* 라인유형 */ + public static class LineTpCd { + public static final String LINE_TP_NORMAL = "normal"; //일반 + public static final String LINE_TP_REAL = "real"; //실시간보장 + public static final String LINE_TP_BATCH = "batch"; //예약 + } + + public static final String SND_CH_LMS = "LMS"; /** * date : 2022. 4. 25. auth : ckr desc : 청약 고객 정보 목록 조회 @@ -1094,14 +1112,6 @@ public class CustMgtService { if (getUserIdCount < 1) { return new InsertChrgResDto(ApiResponseCode.CM_NOT_FOUND); } - - // 1. 사용자 유무 확인 -// SvcUserInfo svcUserInfo = custMgtMapper.selectSvcUserInfo(insertChrgReqDto.getUserId()); -// -// if (svcUserInfo == null) { -// return new InsertChrgResDto(ApiResponseCode.CM_NOT_FOUND); -// } -// // // 2. 관리자 ID 존재 여부 체크. // SvcUserInfo svcUserInfo = custMgtMapper.selectSvcUserInfo(insertChrgReqDto.getUserId()); // @@ -1118,9 +1128,6 @@ public class CustMgtService { UserDetails userDetails = (UserDetails) principal; String regId = userDetails.getUsername(); -// logger.debug("insertChrgReqDto= {}", insertChrgReqDto); - - ChrgInfo chrgInfo = new ChrgInfo(); chrgInfo.setChrgSeq(chrgSeq); chrgInfo.setUserSeq(userSeq); @@ -1139,10 +1146,10 @@ public class CustMgtService { String presentYm = DateUtils.dateToStr(now, "yyyyMM"); ChrgAmtDto chrgAmtDto = new ChrgAmtDto(); + if (presentYm.equals(StrYm)) { int resultcnt = 0; -// logger.debug("presentYm= {}", presentYm); - + //1. user_lmt 등록 if ("E".equals(insertChrgReqDto.getChrgDiv())) { //소멸 충전금 업데이트 chrgAmtDto.setUserSeq(userSeq); @@ -1159,26 +1166,96 @@ public class CustMgtService { resultcnt = custMgtMapper.updateChrgAmt(chrgAmtDto); } + //2. 문자발송 //insert 및 update 성공시 resultCnt 0이상의 정수값이 return됨 //update성공시 + BigDecimal chargeAmt= BigDecimal.ZERO; + String webReqId = ""; + TargetSubsInfoDto targetUserLimit = new TargetSubsInfoDto(); + chargeAmt = custMgtMapper.selectChargeAmt(targetUserLimit); + if (resultcnt>0) { -// String clientKey = DateUtils.date2strYMDHMS() + "AD" + RandomStringUtils.randomAlphanumeric(8); -// SendMsgDto sendMsgDto = new SendMsgDto(); -// sendMsgDto.setClientKey(clientKey); -// sendMsgDto.setMsg("[LG U+ 메시지허브이지]\n" -// + " " + insertChrgReqDto.getChrgAmt() + " 입니다."); + WebMsgCliDto ezMsgDto = new WebMsgCliDto(); + ezMsgDto.setTableName(TableName.EZ_MSG_REAL); + ezMsgDto.setTrafficType(LineTpCd.LINE_TP_REAL); + String clientKey = generateClientKey("R", 10); + ezMsgDto.setClientKey(clientKey); + ezMsgDto.setReqProduct(SND_CH_LMS); + ezMsgDto.setMsgStatus("ready"); + ezMsgDto.setCallbackNumber("15445992"); + ezMsgDto.setPhone(targetUserLimit.getHpNo()); //관리자 hp번호 + ezMsgDto.setWebReqId(webReqId); + ezMsgDto.setOrderId("2"); + + String msg = "[LG U+메시지허브이지]\n 충전금액 "+chargeAmt+"원이 충전되셨습니다."; + ezMsgDto.setMsg(msg); + + custMgtMapper.insertWebMsgCli(ezMsgDto); + logger.info("충전 알림 등록 : [{}]", ezMsgDto.toString()); + + //알림 이력 insert + NotiHistDto notihist = new NotiHistDto(); + String notiSeq = custMgtMapper.selectNotiSeq(); + notihist.setUserSeq(targetUserLimit.getUserSeq()); + notihist.setNotiSeq(notiSeq); + notihist.setNotiMsg(msg); + notihist.setWebReqId(webReqId); + + custMgtMapper.insertNotiHst(notihist); } } - - -// EXTC_CHRG_AMT 소멸 충전금 -// CFWD_CHRG_AMT 이월 충전금 - - - return new InsertChrgResDto(ApiResponseCode.SUCCESS); } + /** + * clientKey 생성 + * + * @param rsvtType + * @return + */ + public String generateClientKey(String lineTpCdKey, int length) { + String prefix = getCurrentDate("yyyyMMddHHmmss") + lineTpCdKey; + String clientKey = ""; + + clientKey = getCommonId(prefix, length); + + return clientKey; + } + /** + * 날짜 형식을 받아서 오늘 날짜를 해당 형식으로 반환 + * + * @param format + * @return + */ + public static String getCurrentDate(String format) { + Date date = Calendar.getInstance().getTime(); + DateFormat dateFormat = new SimpleDateFormat(format); + return dateFormat.format(date); + } + /** + * 공통ID 생성(템플릿ID, 프로젝트ID, 사용자ID 등등) + * + * @return + */ + public static String getCommonId(String prefix, int len) { + // 공통 ID 접미사 + String suffix = randomGeneration(len); + + // 공통 ID + String commonId = prefix + suffix; + + return commonId; + } + /** + * 난수 생성(매개변수로 난수길이 세팅) + * + * @param len + * @return + */ + public static String randomGeneration(int len) { + String randomStr = RandomStringUtils.randomAlphanumeric(len); + return randomStr; + } /** * date : 2023. 3. 15. @@ -1187,6 +1264,7 @@ public class CustMgtService { * @param paramMap * @return */ + public UpdateChrgResDto UpdateChrg(@Valid UpdateChrgReqDto updateChrgReqDto) { CustMgtMapper custMgtMapper = sqlSessionMaster.getMapper(CustMgtMapper.class); diff --git a/src/main/java/kr/co/uplus/ez/api/custMgt/dto/InsertChrgReqDto.java b/src/main/java/kr/co/uplus/ez/api/custMgt/dto/InsertChrgReqDto.java index 80ce72c..2033e25 100644 --- a/src/main/java/kr/co/uplus/ez/api/custMgt/dto/InsertChrgReqDto.java +++ b/src/main/java/kr/co/uplus/ez/api/custMgt/dto/InsertChrgReqDto.java @@ -32,7 +32,4 @@ public class InsertChrgReqDto implements Serializable{ private String bizrNo; - - - } diff --git a/src/main/java/kr/co/uplus/ez/api/custMgt/dto/NotiHistDto.java b/src/main/java/kr/co/uplus/ez/api/custMgt/dto/NotiHistDto.java new file mode 100644 index 0000000..7c365e2 --- /dev/null +++ b/src/main/java/kr/co/uplus/ez/api/custMgt/dto/NotiHistDto.java @@ -0,0 +1,26 @@ +package kr.co.uplus.ez.api.custMgt.dto; + +import java.io.Serializable; + +import lombok.Data; + +@SuppressWarnings("serial") +@Data +public class NotiHistDto implements Serializable { + private String sndYmd; //알림일자 + private String userSeq; //유저seq + private String notiDiv; //알림구분 + private String notiSeq; //알림seq + private String notiMsg; //알림 메세지 + private String webReqId;//알림전송id + private String regDt; //알림등록일자 + + /** 부모 유저 일련번호 */ + private String prntsUserSeq; + + /** 등록 일 시 */ + private String regId; + + /** 핸드폰 번호 */ + private String hpNo; +} diff --git a/src/main/java/kr/co/uplus/ez/api/custMgt/dto/TargetSubsInfoDto.java b/src/main/java/kr/co/uplus/ez/api/custMgt/dto/TargetSubsInfoDto.java new file mode 100644 index 0000000..3cc69c0 --- /dev/null +++ b/src/main/java/kr/co/uplus/ez/api/custMgt/dto/TargetSubsInfoDto.java @@ -0,0 +1,32 @@ +package kr.co.uplus.ez.api.custMgt.dto; + +import java.io.Serializable; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@SuppressWarnings("serial") +@Data +public class TargetSubsInfoDto implements Serializable{ + + @ApiModelProperty(example = "청약ID", name = "청약ID", dataType = "String") + private String subsId; + @ApiModelProperty(example = "청약한 관리자ID userSeq", name = "청약한 관리자ID userSeq", dataType = "String") + private String userSeq; + @ApiModelProperty(example = "개통일시", name = "개통일시", dataType = "String") + private String opnDt; + @ApiModelProperty(example = "한도생성월", name = "한도생성월", dataType = "String") + private String limitYm; + @ApiModelProperty(example = "이월처리기간(월)", name = "이월처리기간(월)", dataType = "String") + private String cFwdTermMonth; + @ApiModelProperty(example = "청약상태", name = "청약상태", dataType = "String") + private String subsSttusCd; + @ApiModelProperty(example = "사용자 전화번호", name = "사용자 전화번호", dataType = "String") + private String hpNo; + + + + + + +} diff --git a/src/main/java/kr/co/uplus/ez/api/custMgt/dto/WebMsgCliDto.java b/src/main/java/kr/co/uplus/ez/api/custMgt/dto/WebMsgCliDto.java new file mode 100644 index 0000000..55c77af --- /dev/null +++ b/src/main/java/kr/co/uplus/ez/api/custMgt/dto/WebMsgCliDto.java @@ -0,0 +1,162 @@ +package kr.co.uplus.ez.api.custMgt.dto; + +import java.io.Serializable; + +import lombok.Data; + +@SuppressWarnings("serial") +@Data +public class WebMsgCliDto implements Serializable{ + + /** 테이블명 */ + private String tableName; + + /** DB insert시 App에서 생성해서 만듦. format example : datetime + bsiness name + random string */ + private String clientKey; + + /** 문자 : SMS, LMS, MMS, 글로벌SMS : SMS_GLOBAL, RCS : RCS, 카카오톡 : KKO_NOTI (알림톡), KKO_FRIEND (친구톡) */ + private String reqProduct; + + /** 메시지 유형 ( 기본값 normal ), real : 실시간 보장 중요한 메시지, normal : 일반, ad : 마케팅, 광고 */ + private String trafficType; + + /** req : 발송 대기, sent : 발송완료, complete : 결과 수신 완료, pre-send : select 완료, pre-image : 이미지 등록 작업 중 */ + private String msgStatus; + + /** 고객 요청 시간, 미래시간일 경우 예약 */ + private String reqDate; + + /** 메시지허브에서 사용하는 템플릿 키 */ + private String templateCode; + + /** 동보 발송 묶음 단위, Agent에서 발송 시 multi_key가 동일한 메시지는 묶어서 발송하여 발송 효율을 높입니다. */ + private String sendGroupKey; + + /** 문자, RCS 일 때 필수 입력, 발신번호(*특수부가사업자의 경우 필수 아님) */ + private String callbackNumber; + + /** KISA 최초발신사업자 구분 코드, 직접고객은 config에 있는 값으로 사용, 재판매고객은 건별 입력으로 사용 */ + private String msgBizKey; + + /** 태그, 이벤트, 캠페인 등을 분류하기 위한 용도로 사용 */ + private String tag; + + /** 부서코드, 부서별 빌링이 필요한 경우만 사용 */ + private String deptCode; + + /** 메시지 내용 (text) */ + private String msg; + + /** 수신번호 */ + private String phone; + + /** 가변 데이터 */ + private String mergeData; + + /** 제목, 대상상품 : LMS/MMS/RCS/PUSH */ + private String title; + + /** MMS 파일 절대 경로, ","로 구분되어 N개를 입력할 수 있다. */ + private String fileList; + + /** 상품, SMS/LMS/MMS 만 가능 */ + private String fbProduct; + + /** fallback 제목 */ + private String fbTitle; + + /** fallback 메시지 */ + private String fbMsg; + + /** 파일 아이디 단일파일 제공, fallback MMS는 이미지 사전 등록 방식만 제공함 */ + private String fbFileId; + + /** 메시지베이스 ID */ + private String rcsMsgbaseId; + + /** RCS 메시지 유형, info : 정보성 메시지, ad : 광고성 메시지 */ + private String rcsHeader; + + /** 무료수신거부 번호 (header의 값이 광고성일 때 footer 값을 포함하지 않고 발송하면 실패 처리) */ + private String rcsFooter; + + /** 사용자의 복사/공유 허용여부, 기본값 Y, Y : 허용, N : 미허용 */ + private String rcsCopyAllowed; + + /** 발송 타임아웃 옵션 : 옵션의 시간 만큼 발송을 시도 또는 결과 대기함, 1 : 72시간, 2 :30초 */ + private String rcsExpiryOption; + + /* + * 대행사 ID, 메시지허브와 직접 계약한 고객은 사용하지 않음, + * 재판매 사업자의 경우 RCS 브랜드 사업자와 RCS 발송 계약을 맺은 1차 대행사의 id를 넣어야 함 + */ + private String rcsAgencyId; + + /** RCS 버튼 Object array */ + private String rcsButton; + + /** 카카오톡 발신 프로필키 */ + private String kakaoSenderKey; + + /** 알림톡, 친구톡 템플릿 키 */ + private String kakaoTemplateKey; + + /** 카카오 버튼 Object array(LMKakaoButton) */ + private String kakaoButton; + + /** 친구톡 와이드 이미지 여부(Y/N) */ + private String kakaoImageWideYn; + + /** 친구톡 이미지(이미지 URL) */ + private String kakaoImageUrl; + + /** 친구톡 이미지(이미지 링크) */ + private String kakaoImageLink; + + /** kakao 파일 아이디 */ + private String kakaoFileId; + + /** 광고 표기 여부(Y/N) */ + private String kakaoAdFlag; + + /** 앱 아이디 */ + private String pushAppId; + + /** PUSH 공급자, FCM : 구글, APNS : 애플 */ + private String pushProvider; + + /** 앱 사용자 시 사용되는 아이디 */ + private String pushAppUserId; + + /** 발송 시간, Agent가 메시지허브로 발송 한 시간 */ + private String sentDate; + + /** 성공한 상품 종류, SMS, LMS, MMS, RCS_XXX, KKO_XXX, PUSH */ + private String doneProduct; + + /** 단말 전달 시간 or 실패 최종 시간 */ + private String doneDate; + + /** 처리 결과 코드, 10000 : 성공 */ + private String doneCode; + + /** 처리 결과 상세 */ + private String doneCodeDesc; + + /** 대체 발송 처리 상세. json array */ + private String doneFbDetail; + + /** 이통사 정보, 발송이 성공이고 채널이 문자, RCS 인 경우만 업데이트 됨 */ + private String doneTelco; + + /** 웹요청ID */ + private String webReqId; + + /* 승인오더ID */ + private String orderId; + + private String tmpltSbst; + private String tmpltTpCd; + private String etcInfo; + private String adMsg; +}