카톡발송진행중

This commit is contained in:
hehihoho3@gmail.com 2025-03-24 09:48:36 +09:00
parent 11e32cd532
commit 2bb22a522f
7 changed files with 143 additions and 66 deletions

View File

@ -630,7 +630,7 @@ public final class MsgSendUtils {
// 가격을 합산
totalPrice += Float.parseFloat(eachPrice);
}
mjonMsgVO.setTotalPrice(totalPrice);
}

View File

@ -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 ]";
}
}

View File

@ -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);

View File

@ -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 ]";
}

View File

@ -104,4 +104,8 @@ public class KakaoAlimTalkDAO extends EgovAbstractDAO {
public void insertKakaoAtDataJsonInfo_advc(List<KakaoSendAdvcVO> kakaoSendAdvcVOList) {
insert("kakaoAlimTalkDAO.insertKakaoAtDataJsonInfo_advc", kakaoSendAdvcVOList);
}
public void insertKakaoGroupDataTb_advc(KakaoSendAdvcVO sendVO) {
insert("kakaoAlimTalkDAO.insertKakaoGroupDataTb_advc", sendVO);
}
}

View File

@ -926,23 +926,12 @@ public class KakaoAlimTalkServiceImpl extends EgovAbstractServiceImpl implements
Map<String, List<KakaoSendAdvcVO>> 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<Map.Entry<String, List<KakaoSendAdvcVO>>> entryList = new ArrayList<>(priceGroupedMessages.entrySet());
// 기본 for문으로 반복 카운트를 사용하기 위해 foreach -> for 수정
for (int i = 0; i < entryList.size(); i++) {
Map.Entry<String, List<KakaoSendAdvcVO>> entry = entryList.get(i);
// 대안: entrySet() 직접 사용
for (Map.Entry<String, List<KakaoSendAdvcVO>> entry : priceGroupedMessages.entrySet()) {
// entry 사용
List<KakaoSendAdvcVO> 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<KakaoSendAdvcVO> 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<KakaoSendAdvcVO> kakaoSendAdvcVOList, int parentLoopCount, Boolean isJsonNotEmpty, Boolean isJsonNameAllSame) {
private int insertKakaoData_advc(List<KakaoSendAdvcVO> 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()))) // 변환 오류 방지

View File

@ -120,6 +120,54 @@
</iterate>
</insert>
<insert id="kakaoAlimTalkDAO.insertKakaoGroupDataTb_advc" parameterClass="kakaoSendAdvcVO">
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>
<insert id="kakaoAlimTalkDAO.insertKakaoSendPrice" parameterClass="kakaoVO">
INSERT INTO BIZ_KAKAO_PRICE
(