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;
+}
diff --git a/src/main/resources/mapper/mysql/custMgt/custMgt-mapper.xml b/src/main/resources/mapper/mysql/custMgt/custMgt-mapper.xml
index 2df71f0..7c9b206 100644
--- a/src/main/resources/mapper/mysql/custMgt/custMgt-mapper.xml
+++ b/src/main/resources/mapper/mysql/custMgt/custMgt-mapper.xml
@@ -1309,6 +1309,133 @@
)
+
+
+ /* extCarryOverAmtNoti.insertWebMsgCli - 메시지 원장 등록 */
+ INSERT INTO
+
+ hubez_send.EZ_MSG_NORMAL
+
+
+ hubez_send.EZ_MSG_REAL
+
+ (
+ CLIENT_KEY,
+ REQ_PRODUCT,
+ TRAFFIC_TYPE,
+ MSG_STATUS,
+ REQ_DATE,
+ MSG_BIZ_KEY,
+ TEMPLATE_CODE,
+ SEND_GROUP_KEY,
+ CALLBACK_NUMBER,
+ DEPT_CODE,
+ MSG,
+ PHONE,
+ MERGE_DATA,
+ TITLE,
+ FILE_LIST,
+ FB_PRODUCT,
+ FB_TITLE,
+ FB_MSG,
+ FB_FILE_ID,
+ RCS_MSGBASE_ID,
+ RCS_HEADER,
+ RCS_FOOTER,
+ RCS_COPY_ALLOWED,
+ RCS_EXPIRY_OPTION,
+ RCS_AGENCY_ID,
+ RCS_BUTTON,
+ KAKAO_SENDER_KEY,
+ KAKAO_TEMPLATE_KEY,
+ KAKAO_BUTTON,
+ KAKAO_IMAGE_WIDE_YN,
+ KAKAO_IMAGE_URL,
+ KAKAO_IMAGE_LINK,
+ PUSH_APP_ID,
+ PUSH_PROVIDER,
+ PUSH_APP_USER_ID,
+ WEB_REQ_ID,
+ ORDER_ID
+ )
+ VALUES
+ (
+ #{clientKey},
+ #{reqProduct},
+ #{trafficType},
+ #{msgStatus},
+ DATE_ADD(NOW(), INTERVAL +8 HOUR),
+ #{msgBizKey},
+ #{templateCode},
+ #{sendGroupKey},
+ #{callbackNumber},
+ #{deptCode},
+ #{msg},
+ #{phone},
+ #{mergeData},
+ '충전금액알림',
+ #{fileList},
+ #{fbProduct},
+ #{fbTitle},
+ #{fbMsg},
+ #{fbFileId},
+ #{rcsMsgbaseId},
+ #{rcsHeader},
+ #{rcsFooter},
+ #{rcsCopyAllowed},
+ #{rcsExpiryOption},
+ #{rcsAgencyId},
+ #{rcsButton},
+ #{kakaoSenderKey},
+ #{kakaoTemplateKey},
+ #{kakaoButton},
+ #{kakaoImageWideYn},
+ #{kakaoImageUrl},
+ #{kakaoImageLink},
+ #{pushAppId},
+ #{pushProvider},
+ #{pushAppUserId},
+ #{webReqId},
+ #{orderId}
+ )
+
+
+
+ /* extCarryOverAmtNoti.insertNotiHst - 알림 이력 등록 */
+ INSERT INTO hubez_common.EZ_NOTI_HIST
+ (
+ SND_YMD,
+ USER_SEQ,
+ NOTI_SEQ,
+ NOTI_DIV,
+ NOTI_MSG,
+ WEB_REQ_ID,
+ REG_DT
+ )
+ VALUES
+ (
+ DATE_FORMAT(NOW(), '%Y%m%d'),
+ #{userSeq},
+ #{notiSeq},
+ '04',
+ #{notiMsg},
+ #{webReqId},
+ NOW()
+ )
+
+
UPDATE
hubez_admin.EZ_USER_LMT eul