--- src/main/java/itn/com/cmm/MjonMsgSendVO.java
+++ src/main/java/itn/com/cmm/MjonMsgSendVO.java
... | ... | @@ -110,6 +110,13 @@ |
| 110 | 110 |
|
| 111 | 111 |
|
| 112 | 112 |
/** |
| 113 |
+ * @description : event 여부 / group tb에 넣는 용도 |
|
| 114 |
+ */ |
|
| 115 |
+ private String eventYn; |
|
| 116 |
+ |
|
| 117 |
+ |
|
| 118 |
+ |
|
| 119 |
+ /** |
|
| 113 | 120 |
* @description : 개별단가 |
| 114 | 121 |
*/ |
| 115 | 122 |
private String eachPrice; |
--- src/main/java/itn/com/cmm/util/MsgSendUtils.java
+++ src/main/java/itn/com/cmm/util/MsgSendUtils.java
... | ... | @@ -203,7 +203,7 @@ |
| 203 | 203 |
*/ |
| 204 | 204 |
public static Boolean populateSendLists(MjonMsgVO mjonMsgVO, List<MjonMsgSendVO> mjonMsgSendListVO |
| 205 | 205 |
, StatusResponse statusResponse, List<String> resultSpamTxt |
| 206 |
- , Map<String, Integer> agentSendCounts, List<MjonMsgVO> sendRateList, String nextMsgGroupId) throws Exception{
|
|
| 206 |
+ , Map<String, Integer> agentSendCounts, List<MjonMsgVO> sendRateList) throws Exception{
|
|
| 207 | 207 |
|
| 208 | 208 |
log.info(" :: populateSendLists :: ");
|
| 209 | 209 |
|
... | ... | @@ -380,8 +380,6 @@ |
| 380 | 380 |
? MsgSendUtils.assignAgentBasedOnCount(agentSendCounts, sendRateList) |
| 381 | 381 |
: mjonMsgVO.getAgentCode(); |
| 382 | 382 |
sendVO.setAgentCode(agentCode); |
| 383 |
- |
|
| 384 |
- sendVO.setMsgGroupId(nextMsgGroupId); |
|
| 385 | 383 |
|
| 386 | 384 |
} |
| 387 | 385 |
// Group TB에 넣어줄 제목 |
... | ... | @@ -612,7 +610,6 @@ |
| 612 | 610 |
// 각 가격을 합산 |
| 613 | 611 |
totalPrice += Float.parseFloat(eachPrice); |
| 614 | 612 |
} |
| 615 |
- mjonMsgVO.setTotPrice(String.valueOf(totalPrice)); |
|
| 616 | 613 |
|
| 617 | 614 |
|
| 618 | 615 |
} |
... | ... | @@ -724,6 +721,7 @@ |
| 724 | 721 |
if (sum + floatEachPrice <= targetCash) {
|
| 725 | 722 |
sum += floatEachPrice; |
| 726 | 723 |
msg.setEachPrice(eachPrice); |
| 724 |
+ msg.setEventYn("Y");
|
|
| 727 | 725 |
optimalList.add(msg); |
| 728 | 726 |
iterator.remove(); |
| 729 | 727 |
} else {
|
--- src/main/java/itn/let/mjo/mjocommon/MjonCommon.java
+++ src/main/java/itn/let/mjo/mjocommon/MjonCommon.java
... | ... | @@ -588,6 +588,7 @@ |
| 588 | 588 |
if (eventMberInfo == null || "E".equals(eventMberInfo.getEventStatus())) {
|
| 589 | 589 |
return statusResponse; // 이벤트 상태가 종료인 경우 처리하지 않음 |
| 590 | 590 |
} |
| 591 |
+ log.info(" + 이벤트 진행 대상자 :: [{}]", userId);
|
|
| 591 | 592 |
|
| 592 | 593 |
// 최적화된 메시지 리스트 및 이벤트 정보 가져오기 |
| 593 | 594 |
OptimalMsgResultDTO result = MsgSendUtils.getOptimalMsgList(eventMberInfo, mjonMsgSendVOList); |
--- src/main/java/itn/let/mjo/msgdata/service/impl/MjonMsgDataServiceImpl.java
+++ src/main/java/itn/let/mjo/msgdata/service/impl/MjonMsgDataServiceImpl.java
... | ... | @@ -12,6 +12,7 @@ |
| 12 | 12 |
import java.util.HashMap; |
| 13 | 13 |
import java.util.List; |
| 14 | 14 |
import java.util.Map; |
| 15 |
+import java.util.stream.Collectors; |
|
| 15 | 16 |
|
| 16 | 17 |
import javax.annotation.Resource; |
| 17 | 18 |
import javax.servlet.http.HttpServletRequest; |
... | ... | @@ -4107,9 +4108,6 @@ |
| 4107 | 4108 |
|
| 4108 | 4109 |
// 스팸관련 키워드 select |
| 4109 | 4110 |
List<String> resultSpamTxt = mjonMsgDataService.selectSpamKeywordList(); |
| 4110 |
- // msgGroupId 생성 |
|
| 4111 |
- String nextMsgGroupId = idgenMjonMsgGroupId.getNextStringId(); |
|
| 4112 |
- |
|
| 4113 | 4111 |
|
| 4114 | 4112 |
/** |
| 4115 | 4113 |
* @methodName : populateReplacementLists |
... | ... | @@ -4125,7 +4123,7 @@ |
| 4125 | 4123 |
* 7. 전송사 코드 셋팅 |
| 4126 | 4124 |
*/ |
| 4127 | 4125 |
if(!MsgSendUtils.populateSendLists(mjonMsgVO, mjonMsgSendVOList, statusResponse, resultSpamTxt |
| 4128 |
- , agentSendCounts, sendRateList, nextMsgGroupId)) {;
|
|
| 4126 |
+ , agentSendCounts, sendRateList)) {;
|
|
| 4129 | 4127 |
//문자 치환 후 전송 문자 길이를 초과하였습니다. |
| 4130 | 4128 |
//문자 치환 중 오류가 발생하였습니다. |
| 4131 | 4129 |
return statusResponse; |
... | ... | @@ -4161,15 +4159,11 @@ |
| 4161 | 4159 |
*/ |
| 4162 | 4160 |
// mjonCommon 호출 |
| 4163 | 4161 |
statusResponse = mjonCommon.processEventMessages(userId, mjonMsgVO, mjonMsgSendVOList); |
| 4164 |
- |
|
| 4165 | 4162 |
if (statusResponse.getStatus() != null && !statusResponse.getStatus().equals(HttpStatus.OK)) {
|
| 4166 | 4163 |
log.error("이벤트 처리 중 오류 발생: {}", statusResponse.getMessage());
|
| 4167 | 4164 |
return statusResponse; |
| 4168 | 4165 |
} |
| 4169 | 4166 |
|
| 4170 |
- float totalPrice = MsgSendUtils.setPriceforVO(mjonMsgSendVOList); |
|
| 4171 |
- mjonMsgVO.setTotPrice(String.valueOf(totalPrice)); |
|
| 4172 |
- |
|
| 4173 | 4167 |
|
| 4174 | 4168 |
if (!isCashSufficient(mjonMsgVO)) {
|
| 4175 | 4169 |
log.error("Insufficient balance for message sending.");
|
... | ... | @@ -4184,6 +4178,49 @@ |
| 4184 | 4178 |
// log.info("mj_msg_data insert start [{}]", mjonMsgSendVOList.size());
|
| 4185 | 4179 |
// 합산 금액을 String으로 변환하여 설정 |
| 4186 | 4180 |
|
| 4181 |
+ |
|
| 4182 |
+ |
|
| 4183 |
+ |
|
| 4184 |
+ // Step 1: 메시지를 가격별로 그룹화 |
|
| 4185 |
+ Map<String, List<MjonMsgSendVO>> priceGroupedMessages = mjonMsgSendVOList.stream() |
|
| 4186 |
+ .collect(Collectors.groupingBy(MjonMsgSendVO::getEachPrice)); |
|
| 4187 |
+ |
|
| 4188 |
+ int instTotalCnt = 0; |
|
| 4189 |
+ // Step 2: 그룹화 된 데이터를 그룹별로 insert 처리 |
|
| 4190 |
+ for (Map.Entry<String, List<MjonMsgSendVO>> entry : priceGroupedMessages.entrySet()) {
|
|
| 4191 |
+ String price = entry.getKey(); // 가격 (String) |
|
| 4192 |
+ List<MjonMsgSendVO> groupedMsgList = entry.getValue(); // 해당 가격의 메시지 리스트 |
|
| 4193 |
+ |
|
| 4194 |
+ // msgGroupId 생성 |
|
| 4195 |
+ String nextMsgGroupId = idgenMjonMsgGroupId.getNextStringId(); |
|
| 4196 |
+ groupedMsgList.forEach(t -> t.setMsgGroupId(nextMsgGroupId)); |
|
| 4197 |
+ |
|
| 4198 |
+ // 발송 데이터 삽입 |
|
| 4199 |
+ int instCnt = this.insertMsgData_advc(groupedMsgList); |
|
| 4200 |
+ |
|
| 4201 |
+ if(instCnt > 0) {
|
|
| 4202 |
+ instTotalCnt += instCnt; |
|
| 4203 |
+ this.insertMsgGroupDataTb_advc(instCnt, mjonMsgVO, groupedMsgList); |
|
| 4204 |
+ |
|
| 4205 |
+ // 금액 및 포인트 insert |
|
| 4206 |
+ priceAndPoint.insertCashAndPoint( |
|
| 4207 |
+ userId |
|
| 4208 |
+ , -Float.parseFloat(mjonMsgVO.getTotPrice()) |
|
| 4209 |
+ , "SMS 문자 총 " + groupedMsgList.size() + "건 중 " + instCnt + "건 발송" |
|
| 4210 |
+ , mjonMsgVO.getMsgGroupId() |
|
| 4211 |
+ ); |
|
| 4212 |
+ // spam 문자 저장 |
|
| 4213 |
+ handleSpamMsg_advc(mjonMsgVO, groupedMsgList.get(0)); |
|
| 4214 |
+ } |
|
| 4215 |
+ |
|
| 4216 |
+ // 수신거부 목록 업데이트 |
|
| 4217 |
+// returnMap.put("resultSts", instCnt);
|
|
| 4218 |
+ |
|
| 4219 |
+ log.debug("가격 [{}]의 총 갯수: [{}]", price, groupedMsgList.size());
|
|
| 4220 |
+ |
|
| 4221 |
+ } |
|
| 4222 |
+ |
|
| 4223 |
+ |
|
| 4187 | 4224 |
|
| 4188 | 4225 |
// 분할 최대건수가 되면 디비에 입력하기 |
| 4189 | 4226 |
// int instCnt = mjonMsgDataDAO.insertMsgDataInfo_advc(mjonMsgSendVOList); |
... | ... | @@ -4192,34 +4229,31 @@ |
| 4192 | 4229 |
// Batch 시작 시간 측정 |
| 4193 | 4230 |
// 총 발송 건수 = DB insert |
| 4194 | 4231 |
// int instCnt = 0; |
| 4195 |
- int instCnt = this.insertMsgData_advc(mjonMsgSendVOList); |
|
| 4196 |
- |
|
| 4197 |
- // Batch 종료 시간 측정 및 실행 시간 계산 |
|
| 4232 |
+// int instCnt = this.insertMsgData_advc(mjonMsgSendVOList); |
|
| 4198 | 4233 |
|
| 4199 | 4234 |
// 수신거부 목록 |
| 4200 |
- returnMap.put("resultSts", instCnt);
|
|
| 4201 |
- |
|
| 4235 |
+ returnMap.put("resultSts", instTotalCnt);
|
|
| 4202 | 4236 |
log.debug("총 단가 합계: [{}]", mjonMsgVO.getTotPrice());
|
| 4203 | 4237 |
//TODO: group 테이블에 저장 |
| 4204 |
- if(instCnt > 0) {
|
|
| 4205 |
- |
|
| 4206 |
- // Group TB insert |
|
| 4207 |
- mjonMsgVO.setMsgGroupCnt(Integer.toString(instCnt)); |
|
| 4208 |
- this.insertMsgGroupDataTb_advc(mjonMsgVO, mjonMsgSendVOList.get(0)); |
|
| 4209 |
- |
|
| 4210 |
- // 금액 및 포인트 insert |
|
| 4211 |
- priceAndPoint.insertCashAndPoint( |
|
| 4212 |
- userId |
|
| 4213 |
- , -Float.parseFloat(mjonMsgVO.getTotPrice()) |
|
| 4214 |
- , "SMS 문자 총 " + mjonMsgVO.getMjonMsgSendVOList().size() + "건 중 " + instCnt + "건 발송" |
|
| 4215 |
- , mjonMsgVO.getMsgGroupId() |
|
| 4216 |
- ); |
|
| 4217 |
- |
|
| 4218 |
- // 스팸 데이터가 있으면 MJ_SPAM_MSG_GROUP_DATA 테이블에 insert |
|
| 4219 |
- handleSpamMsg_advc(mjonMsgVO, mjonMsgSendVOList.get(0)); |
|
| 4220 |
- |
|
| 4221 |
- } |
|
| 4222 |
- |
|
| 4238 |
+// if(instCnt > 0) {
|
|
| 4239 |
+// |
|
| 4240 |
+// // Group TB insert |
|
| 4241 |
+// mjonMsgVO.setMsgGroupCnt(Integer.toString(instCnt)); |
|
| 4242 |
+// this.insertMsgGroupDataTb_advc(mjonMsgVO, mjonMsgSendVOList.get(0)); |
|
| 4243 |
+// |
|
| 4244 |
+// // 금액 및 포인트 insert |
|
| 4245 |
+// priceAndPoint.insertCashAndPoint( |
|
| 4246 |
+// userId |
|
| 4247 |
+// , -Float.parseFloat(mjonMsgVO.getTotPrice()) |
|
| 4248 |
+// , "SMS 문자 총 " + mjonMsgVO.getMjonMsgSendVOList().size() + "건 중 " + instCnt + "건 발송" |
|
| 4249 |
+// , mjonMsgVO.getMsgGroupId() |
|
| 4250 |
+// ); |
|
| 4251 |
+// |
|
| 4252 |
+// // 스팸 데이터가 있으면 MJ_SPAM_MSG_GROUP_DATA 테이블에 insert |
|
| 4253 |
+// handleSpamMsg_advc(mjonMsgVO, mjonMsgSendVOList.get(0)); |
|
| 4254 |
+// |
|
| 4255 |
+// } |
|
| 4256 |
+// |
|
| 4223 | 4257 |
|
| 4224 | 4258 |
// 스팸 및 스미싱 의심이면 slack 알림 |
| 4225 | 4259 |
boolean isNotified = mjonCommon.processUserAndCheckSms(mjonMsgVO, userId); |
... | ... | @@ -4248,10 +4282,24 @@ |
| 4248 | 4282 |
|
| 4249 | 4283 |
} |
| 4250 | 4284 |
|
| 4251 |
- private void insertMsgGroupDataTb_advc(MjonMsgVO mjonMsgVO, MjonMsgSendVO mjonMsgSendVO) throws Exception {
|
|
| 4285 |
+ private void insertMsgGroupDataTb_advc(int instCnt, MjonMsgVO mjonMsgVO, List<MjonMsgSendVO> mjonMsgSendVOList) throws Exception {
|
|
| 4252 | 4286 |
|
| 4253 |
- mjonMsgVO.setAgentCode(mjonMsgSendVO.getAgentCode());// 전송사 코드 번호를 셋팅해 준다. |
|
| 4254 |
- // 지연 유무 코드가 Null 인경우 체크 |
|
| 4287 |
+ |
|
| 4288 |
+ // insert 총 데이터 |
|
| 4289 |
+ mjonMsgVO.setMsgGroupCnt(Integer.toString(instCnt)); |
|
| 4290 |
+ |
|
| 4291 |
+ // insert 총 금액 |
|
| 4292 |
+ float totalPrice = MsgSendUtils.setPriceforVO(mjonMsgSendVOList); |
|
| 4293 |
+ mjonMsgVO.setTotPrice(String.valueOf(totalPrice)); |
|
| 4294 |
+ |
|
| 4295 |
+ |
|
| 4296 |
+ MjonMsgSendVO mjonMsgSendVO = mjonMsgSendVOList.get(0); |
|
| 4297 |
+ |
|
| 4298 |
+ // 개별단가 |
|
| 4299 |
+ mjonMsgVO.setEachPrice(mjonMsgSendVO.getEachPrice()); |
|
| 4300 |
+ |
|
| 4301 |
+ // 전송사 코드 번호를 셋팅해 준다. |
|
| 4302 |
+ mjonMsgVO.setAgentCode(mjonMsgSendVO.getAgentCode()); |
|
| 4255 | 4303 |
|
| 4256 | 4304 |
mjonMsgVO.setBefCash(priceAndPoint.getBefCash(mjonMsgVO.getUserId())); |
| 4257 | 4305 |
mjonMsgVO.setBefPoint(priceAndPoint.getBefPoint(mjonMsgVO.getUserId())); |
--- src/main/webapp/WEB-INF/jsp/web/msgdata/MsgDataSMLView.jsp
+++ src/main/webapp/WEB-INF/jsp/web/msgdata/MsgDataSMLView.jsp
... | ... | @@ -2182,16 +2182,12 @@ |
| 2182 | 2182 |
$('.realtime').text(contents);
|
| 2183 | 2183 |
|
| 2184 | 2184 |
// 2000byte 초과시 메세지 알림 |
| 2185 |
-// console.log('conLeng : ', conLeng);
|
|
| 2186 | 2185 |
if(conLeng > 2000){
|
| 2187 | 2186 |
|
| 2188 | 2187 |
var fullContents = adverYn != "N" ? adverTxt + denyTxt + contents : contents; |
| 2189 | 2188 |
var subUnderStr = strUnderLineSubstring(fullContents, 2000).replace(adverTxt, "").replace(denyTxt, ""); |
| 2190 |
- |
|
| 2191 |
- |
|
| 2192 |
-// var subUnderStr = strUnderLineSubstring(adverTxt+denyTxt+contents, 2000); |
|
| 2193 | 2189 |
subUnderStr = subUnderStr.replace(adverTxt,"").replace(denyTxt, ""); |
| 2194 |
- console.log('subUnderStr : ', subUnderStr)
|
|
| 2190 |
+// console.log('subUnderStr : ', subUnderStr)
|
|
| 2195 | 2191 |
|
| 2196 | 2192 |
|
| 2197 | 2193 |
$('#smsTxtArea').val(subUnderStr);
|
... | ... | @@ -2199,7 +2195,7 @@ |
| 2199 | 2195 |
var contentLeng = conByteLeng(subUnderStr); |
| 2200 | 2196 |
var totalLeng = adverYn != "N" ? contentLeng + adTxtLeng + denyTxtLeng : contentLeng; |
| 2201 | 2197 |
|
| 2202 |
- console.log('contentLeng : ', totalLeng);
|
|
| 2198 |
+// console.log('contentLeng : ', totalLeng);
|
|
| 2203 | 2199 |
$('#msgLeng').text(totalLeng + " / ");
|
| 2204 | 2200 |
$('#smsLen').val(contentLeng);
|
| 2205 | 2201 |
|
Add a comment
Delete comment
Once you delete this comment, you won't be able to recover it. Are you sure you want to delete this comment?