From 2bb22a522f5fe38a9e50fce62842e89724cb4fa4 Mon Sep 17 00:00:00 2001 From: "hehihoho3@gmail.com" Date: Mon, 24 Mar 2025 09:48:36 +0900 Subject: [PATCH] =?UTF-8?q?=EC=B9=B4=ED=86=A1=EB=B0=9C=EC=86=A1=EC=A7=84?= =?UTF-8?q?=ED=96=89=EC=A4=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/itn/com/cmm/util/MsgSendUtils.java | 2 +- .../let/kakao/kakaoComm/KakaoSendAdvcVO.java | 24 ++++ .../let/kakao/kakaoComm/KakaoSendUtil.java | 12 +- .../java/itn/let/kakao/kakaoComm/KakaoVO.java | 2 + .../service/impl/KakaoAlimTalkDAO.java | 4 + .../impl/KakaoAlimTalkServiceImpl.java | 117 +++++++++--------- .../let/mjo/kakao/Kakao_AT_SQL_Mysql.xml | 48 +++++++ 7 files changed, 143 insertions(+), 66 deletions(-) diff --git a/src/main/java/itn/com/cmm/util/MsgSendUtils.java b/src/main/java/itn/com/cmm/util/MsgSendUtils.java index 518ac60a..44de0c84 100644 --- a/src/main/java/itn/com/cmm/util/MsgSendUtils.java +++ b/src/main/java/itn/com/cmm/util/MsgSendUtils.java @@ -630,7 +630,7 @@ public final class MsgSendUtils { // 각 가격을 합산 totalPrice += Float.parseFloat(eachPrice); } - + mjonMsgVO.setTotalPrice(totalPrice); } diff --git a/src/main/java/itn/let/kakao/kakaoComm/KakaoSendAdvcVO.java b/src/main/java/itn/let/kakao/kakaoComm/KakaoSendAdvcVO.java index 900c61df..480cf85a 100644 --- a/src/main/java/itn/let/kakao/kakaoComm/KakaoSendAdvcVO.java +++ b/src/main/java/itn/let/kakao/kakaoComm/KakaoSendAdvcVO.java @@ -29,6 +29,7 @@ public class KakaoSendAdvcVO implements Serializable { // Insert 데이터 private String msgId; // 문자ID private String msgGroupId; // 전송그룹ID + private String msgGroupCnt; // 전송그룹ID private String userId; // 사용자ID private String agentCode; // 전송사코드 private String senderKey; // 발신프로필 키 @@ -52,8 +53,17 @@ public class KakaoSendAdvcVO implements Serializable { private String eachPrice; // sms 단가 private String smsPrice; // sms 단가 private String mmsPrice; // mms 단가 + private String totPrice; // mms 단가 + private String befCash; // mms 단가 + private String befPoint; // mms 단가 private String kakaoAtPrice; // 카카오 알림톡 단가 private String bizJsonName; // 카카오 알림톡 단가 + private String reserveYn; // 카카오 알림톡 단가 + private String atDelayYn; // 카카오 알림톡 단가 + private String bizKakaoResendOrgnlTxt; // 카카오 알림톡 단가 + private String bizKakaoResendType; // 카카오 알림톡 단가 + + @@ -63,6 +73,7 @@ public class KakaoSendAdvcVO implements Serializable { return "MsgSendVO[" + "\n msgId=[" + msgId + "]" + "\n , msgGroupId=[" + msgGroupId + "]" + + "\n , msgGroupCnt=[" + msgGroupCnt + "]" + "\n , userId=[" + userId + "]" + "\n , agentCode=[" + agentCode + "]" + "\n , senderKey=[" + senderKey + "]" + @@ -83,10 +94,23 @@ public class KakaoSendAdvcVO implements Serializable { "\n , eachPrice=[" + eachPrice + "]" + "\n , smsPrice=[" + smsPrice + "]" + "\n , mmsPrice=[" + mmsPrice + "]" + + "\n , totPrice=[" + totPrice + "]" + + "\n , befCash=[" + befCash + "]" + + "\n , befPoint=[" + befPoint + "]" + "\n , kakaoAtPrice=[" + kakaoAtPrice + "]" + "\n , bizJsonName=[" + bizJsonName + "]" + + "\n , reserveYn=[" + reserveYn + "]" + + "\n , atDelayYn=[" + atDelayYn + "]" + + "\n , bizKakaoResendOrgnlTxt=[" + bizKakaoResendOrgnlTxt + "]" + + "\n , bizKakaoResendType=[" + bizKakaoResendType + "]" + "\n ]"; } + + + + + + } diff --git a/src/main/java/itn/let/kakao/kakaoComm/KakaoSendUtil.java b/src/main/java/itn/let/kakao/kakaoComm/KakaoSendUtil.java index eae05172..092f6c03 100644 --- a/src/main/java/itn/let/kakao/kakaoComm/KakaoSendUtil.java +++ b/src/main/java/itn/let/kakao/kakaoComm/KakaoSendUtil.java @@ -141,7 +141,8 @@ public class KakaoSendUtil { /** @공통 기본값 */ KakaoSendAdvcVO sendVO = createSendVO(kakaoVO); - + String msgId = idList.get(i); + sendVO.setMsgId(msgId); // step1 // Step 1-1: 값 치환 및 수신번호 셋팅 @@ -176,6 +177,7 @@ public class KakaoSendUtil { } sendVO.setSubMsgTxt(subMsgTxt);// 실패 } + sendVO.setSubMsgSendYn(kakaoVO.getSubMsgSendYn()); /* @@ -242,21 +244,23 @@ public class KakaoSendUtil { sendVO.setReqDate(DATE_FORMATTER.format(calendar.getTime())); + /** @step5 전송 메세지 설정 json파일 만들기*/ // 타이틀과 버튼이 있고 - String msgId = idList.get(i); - sendVO.setMsgId(msgId); if(hasTitleOrButtons) { // 버튼과 타이틀에 치환데이터가 있으면 json String을 계속 생성 if(needsJsonReplacement) { sharedJsonStr = kakaoApiJsonSave.kakaoApiJsonSave_advc(sendVO, templateDetail); sendVO.setBizJsonName(msgId); + sendVO.setJsonStr(sharedJsonStr); } else if (StringUtils.isEmpty(sharedJsonStr)) { // 치환 데이터가 없고 아직 생성되지 않았으면 한 번만 생성 sharedJsonStr = kakaoApiJsonSave.kakaoApiJsonSave_advc(sendVO, templateDetail); sendVO.setBizJsonName(idList.get(0)); + sendVO.setJsonStr(sharedJsonStr); + }else { + sendVO.setBizJsonName(idList.get(0)); } - sendVO.setJsonStr(sharedJsonStr); } kakaoSendAdvcListVO.add(sendVO); diff --git a/src/main/java/itn/let/kakao/kakaoComm/KakaoVO.java b/src/main/java/itn/let/kakao/kakaoComm/KakaoVO.java index c5192711..4875ea38 100644 --- a/src/main/java/itn/let/kakao/kakaoComm/KakaoVO.java +++ b/src/main/java/itn/let/kakao/kakaoComm/KakaoVO.java @@ -302,6 +302,8 @@ public class KakaoVO extends MjonMsgVO{ "\n , msgType=[" + getMsgType() + "]" + "\n , userId=[" + userId + "]" + "\n , varListMap=[" + varListMapString + "]" + + "\n , befCash=[" + getBefCash() + "]" + + "\n , befPoint=[" + getBefPoint() + "]" + "\n ]"; } diff --git a/src/main/java/itn/let/kakao/user/kakaoAt/service/impl/KakaoAlimTalkDAO.java b/src/main/java/itn/let/kakao/user/kakaoAt/service/impl/KakaoAlimTalkDAO.java index 84c61b6d..fe3cd77b 100644 --- a/src/main/java/itn/let/kakao/user/kakaoAt/service/impl/KakaoAlimTalkDAO.java +++ b/src/main/java/itn/let/kakao/user/kakaoAt/service/impl/KakaoAlimTalkDAO.java @@ -104,4 +104,8 @@ public class KakaoAlimTalkDAO extends EgovAbstractDAO { public void insertKakaoAtDataJsonInfo_advc(List kakaoSendAdvcVOList) { insert("kakaoAlimTalkDAO.insertKakaoAtDataJsonInfo_advc", kakaoSendAdvcVOList); } + + public void insertKakaoGroupDataTb_advc(KakaoSendAdvcVO sendVO) { + insert("kakaoAlimTalkDAO.insertKakaoGroupDataTb_advc", sendVO); + } } diff --git a/src/main/java/itn/let/kakao/user/kakaoAt/service/impl/KakaoAlimTalkServiceImpl.java b/src/main/java/itn/let/kakao/user/kakaoAt/service/impl/KakaoAlimTalkServiceImpl.java index 4b5c8464..bd4176fc 100644 --- a/src/main/java/itn/let/kakao/user/kakaoAt/service/impl/KakaoAlimTalkServiceImpl.java +++ b/src/main/java/itn/let/kakao/user/kakaoAt/service/impl/KakaoAlimTalkServiceImpl.java @@ -926,23 +926,12 @@ public class KakaoAlimTalkServiceImpl extends EgovAbstractServiceImpl implements Map> priceGroupedMessages = kakaoSendAdvcListVO.stream() .collect(Collectors.groupingBy(KakaoSendAdvcVO::getEachPrice)); - // json Str이 있는지 확인 - Boolean isJsonNotEmpty = StringUtils.isNotEmpty(kakaoSendAdvcListVO.get(0).getJsonStr()); - // json Str 값이 list에서 다른지 확인 - Boolean isJsonNameAllSame = false; - if(isJsonNotEmpty) { - String firstBizJsonName = kakaoSendAdvcListVO.get(0).getBizJsonName(); - isJsonNameAllSame = kakaoSendAdvcListVO.stream() - .allMatch(t -> Objects.equals(t.getBizJsonName(), firstBizJsonName)); - } - // instTotalCnt : 화면에서 보여줄 총 발송건수 int instTotalCnt = 0; - List>> entryList = new ArrayList<>(priceGroupedMessages.entrySet()); - // 기본 for문으로 반복 카운트를 사용하기 위해 foreach -> for 수정 - for (int i = 0; i < entryList.size(); i++) { - Map.Entry> entry = entryList.get(i); + // 대안: entrySet() 직접 사용 + for (Map.Entry> entry : priceGroupedMessages.entrySet()) { + // entry 사용 List groupedMsgList = entry.getValue(); // 해당 가격의 메시지 리스트 @@ -951,14 +940,36 @@ public class KakaoAlimTalkServiceImpl extends EgovAbstractServiceImpl implements // 발송 데이터 삽입 -// int instCnt = this.insertKakaoData_advc(groupedMsgList, i, isJsonNotEmpty, isJsonNameAllSame); - int instCnt = 6; + int instCnt = this.insertKakaoData_advc(groupedMsgList); +// int instCnt = 6; if(instCnt > 0) { instTotalCnt += instCnt; -// this.insertMsgGroupDataTb_advc(instCnt, mjonMsgVO, groupedMsgList); - this.insertKakaoGroupDataTb_advc(instCnt, kakaoVO, groupedMsgList); + + KakaoSendAdvcVO sendVO = groupedMsgList.get(0); + +/** @groupData 테이블 insert */ + this.insertKakaoGroupDataTb_advc(instCnt, kakaoVO, sendVO); + + +/** @biz_kakao_price에 insert (대체문자 환불관련 테이블)*/ + kakaoVO.setMsgGroupId(sendVO.getMsgGroupId()); + kakaoVO.setKakaoAtPrice(Float.parseFloat(sendVO.getEachPrice())); + kakaoVO.setSmsPrice(Float.parseFloat(sendVO.getSmsPrice())); + kakaoVO.setMmsPrice(Float.parseFloat(sendVO.getMmsPrice())); + + kakaoAlimTalkDAO.insertKakaoSendPrice(kakaoVO); + + + priceAndPoint.insertCashAndPoint(kakaoVO.getUserId() + , -Float.parseFloat(sendVO.getTotPrice()) +// , "SMS 문자 " + groupedMsgList.size() + "건 발송" + , "카카오 알림톡 총 "+groupedMsgList.size()+"건 중 " + instCnt + "건 발송" + , nextMsgGroupId + ); + + } @@ -972,7 +983,7 @@ public class KakaoAlimTalkServiceImpl extends EgovAbstractServiceImpl implements // 실행 시간 계산 (나노초, 밀리초, 초) System.out.println("메소드 실행 시간 (초): " + Duration.between(start, end).getSeconds() + " s"); System.out.println("메소드 실행 시간 (Nano): " + Duration.between(start, end).getNano() + " Nano"); - kakaoSendAdvcListVO.forEach(t-> log.info(" + t.toString() :: [{}]", t.toString()) ); +// kakaoSendAdvcListVO.forEach(t-> log.info(" + t.toString() :: [{}]", t.toString()) ); // idgenMjonMsgGroupId.getNextStringId(); @@ -995,41 +1006,27 @@ public class KakaoAlimTalkServiceImpl extends EgovAbstractServiceImpl implements - private void insertKakaoGroupDataTb_advc(int instCnt, KakaoVO kakaoVO, List kakaoSendAdvcVOList) { + private void insertKakaoGroupDataTb_advc(int instCnt, KakaoVO kakaoVO, KakaoSendAdvcVO sendVO) throws Exception { // TODO Auto-generated method stub - log.info(" + insertKakaoGroupDataTb_advc kakaoVO :: \n[{}]", kakaoVO.toString());; - log.info(" + insertKakaoGroupDataTb_advc kakaoSendAdvcVOList :: \n[{}]", kakaoSendAdvcVOList.get(0).toString()); +// log.info(" + insertKakaoGroupDataTb_advc kakaoVO :: \n[{}]", kakaoVO.toString());; +// log.info(" + insertKakaoGroupDataTb_advc kakaoSendAdvcVOList :: \n[{}]", sendVO.toString()); + sendVO.setMsgGroupCnt(Integer.toString(instCnt)); + sendVO.setReserveYn(kakaoVO.getReserveYn()); + sendVO.setBefCash(priceAndPoint.getBefCash(sendVO.getUserId())); + sendVO.setBefPoint(priceAndPoint.getBefPoint(sendVO.getUserId())); - /* - #msgGroupId#, - #userId#, - #callFrom#, - #smsTxt#, mjonMsgVO.setSmsTxt(kakaoVO.getTemplateContent()); - // #mmsSubject#, - - #reqDate#, - #msgGroupCnt#, - // #conectMthd#, - #msgType#, - // #msgKind#, - - #agentCode#, - #eachPrice#, - #reserveYn#, - #befCash#, - #befPoint#, - - // #recommId#, - // #fileCnt#, - #totPrice#, - // #eventYn#, - // #delayYn#, + Float eachPrice = Float.parseFloat(sendVO.getEachPrice()); - #atDelayYn#, - #kakaoSubMagOrgnlTxt# - */ + Float totPrice = eachPrice * instCnt; + sendVO.setTotPrice(String.format("%.1f", totPrice)); + + sendVO.setAtDelayYn(kakaoVO.getAtSmishingYn()); + sendVO.setBizKakaoResendOrgnlTxt(kakaoVO.getSubMsgTxt()); + sendVO.setBizKakaoResendType(sendVO.getSubMsgType()); + kakaoAlimTalkDAO.insertKakaoGroupDataTb_advc(sendVO); + } /** @@ -1045,7 +1042,7 @@ public class KakaoAlimTalkServiceImpl extends EgovAbstractServiceImpl implements * @return * */ - private int insertKakaoData_advc(List kakaoSendAdvcVOList, int parentLoopCount, Boolean isJsonNotEmpty, Boolean isJsonNameAllSame) { + private int insertKakaoData_advc(List kakaoSendAdvcVOList) { // 시작 시간 측정 @@ -1068,7 +1065,6 @@ public class KakaoAlimTalkServiceImpl extends EgovAbstractServiceImpl implements // 첫 번째 배치에서만 삽입했는지 추적하는 플래그 - boolean isJsonInserted = false; for (int i = 0; i < totalSize; i += batchSize) { // Batch 시작 시간 측정 long batchStartTime = System.currentTimeMillis(); @@ -1079,15 +1075,14 @@ public class KakaoAlimTalkServiceImpl extends EgovAbstractServiceImpl implements // mj_msg_data 테이블 insert int insertedCount = kakaoAlimTalkDAO.insertKakaoAtDataInfo_advc(batchList); - if (isJsonNotEmpty) { - if (!isJsonNameAllSame) { - // BizJsonName이 동일하지 않으면 매번 삽입 - kakaoAlimTalkDAO.insertKakaoAtDataJsonInfo_advc(batchList); - } else if (parentLoopCount==0) { - // BizJsonName이 동일하면 첫 번째 배치에서만 삽입 - kakaoAlimTalkDAO.insertKakaoAtDataJsonInfo_advc(batchList); - isJsonInserted = true; // 삽입 완료 플래그 설정 - } + + /** @kakaoSendUtil.populateSendLists + * 하단에서 + * getJsonStr 데이터 처리 후 활용 + * */ + batchList.removeIf(t -> StringUtils.isBlank(t.getJsonStr())); + if(batchList.size() > 0) { + kakaoAlimTalkDAO.insertKakaoAtDataJsonInfo_advc(batchList); } instCnt += insertedCount; @@ -1131,7 +1126,7 @@ public class KakaoAlimTalkServiceImpl extends EgovAbstractServiceImpl implements // 사용자 보유 금액 BigDecimal 변환 (HALF_EVEN 적용) BigDecimal befCash = new BigDecimal(userMoney).setScale(2, RoundingMode.HALF_EVEN); - + // 총 메시지 금액 계산 (HALF_EVEN 적용) BigDecimal totalEachPrice = kakaoSendAdvcListVO.stream() .map(msg -> new BigDecimal(String.valueOf(msg.getEachPrice()))) // 변환 오류 방지 diff --git a/src/main/resources/egovframework/sqlmap/let/mjo/kakao/Kakao_AT_SQL_Mysql.xml b/src/main/resources/egovframework/sqlmap/let/mjo/kakao/Kakao_AT_SQL_Mysql.xml index 684fc5bb..4f1cfa20 100644 --- a/src/main/resources/egovframework/sqlmap/let/mjo/kakao/Kakao_AT_SQL_Mysql.xml +++ b/src/main/resources/egovframework/sqlmap/let/mjo/kakao/Kakao_AT_SQL_Mysql.xml @@ -120,6 +120,54 @@ + + INSERT INTO MJ_MSG_GROUP_DATA + ( + MSG_GROUP_ID, + USER_ID, + CALL_FROM, + SMS_TXT, + + REQ_DATE, + MSG_GROUP_CNT, + MSG_TYPE, + + AGENT_CODE, + EACH_PRICE, + RESERVE_YN, + BEF_CASH, + BEF_POINT, + + TOT_PRICE, + + AT_DELAY_YN, + BIZ_KAKAO_RESEND_ORGNL_TXT, + BIZ_KAKAO_RESEND_TYPE + )VALUES + ( + #msgGroupId#, + #userId#, + #callFrom#, + #templateContent#, + + #reqDate#, + #msgGroupCnt#, + #msgType#, + + #agentCode#, + #eachPrice#, + #reserveYn#, + #befCash#, + #befPoint#, + + #totPrice#, + + #atDelayYn#, + #bizKakaoResendOrgnlTxt#, + #bizKakaoResendType# + ) + + INSERT INTO BIZ_KAKAO_PRICE (