--- src/main/java/itn/let/kakao/admin/kakaoAt/service/MjonKakaoATVO.java
+++ src/main/java/itn/let/kakao/admin/kakaoAt/service/MjonKakaoATVO.java
... | ... | @@ -151,6 +151,8 @@ |
| 151 | 151 |
private String bizKakaoResendType; /* 대체 문자 길이 => MMS / LMS / SMS */ |
| 152 | 152 |
private String bizKakaoJsonFile; //카카오 친구톡 Json 파일 경로 |
| 153 | 153 |
|
| 154 |
+ private String yellowId; |
|
| 155 |
+ private String bizKakaoResendTypeCnt; |
|
| 154 | 156 |
|
| 155 | 157 |
public String getMsgDiv() {
|
| 156 | 158 |
return msgDiv; |
... | ... | @@ -1273,5 +1275,19 @@ |
| 1273 | 1275 |
public void setBizKakaoJsonFile(String bizKakaoJsonFile) {
|
| 1274 | 1276 |
this.bizKakaoJsonFile = bizKakaoJsonFile; |
| 1275 | 1277 |
} |
| 1278 |
+ public String getYellowId() {
|
|
| 1279 |
+ return yellowId; |
|
| 1280 |
+ } |
|
| 1281 |
+ public void setYellowId(String yellowId) {
|
|
| 1282 |
+ this.yellowId = yellowId; |
|
| 1283 |
+ } |
|
| 1284 |
+ public String getBizKakaoResendTypeCnt() {
|
|
| 1285 |
+ return bizKakaoResendTypeCnt; |
|
| 1286 |
+ } |
|
| 1287 |
+ public void setBizKakaoResendTypeCnt(String bizKakaoResendTypeCnt) {
|
|
| 1288 |
+ this.bizKakaoResendTypeCnt = bizKakaoResendTypeCnt; |
|
| 1289 |
+ } |
|
| 1290 |
+ |
|
| 1291 |
+ |
|
| 1276 | 1292 |
|
| 1277 | 1293 |
} |
--- src/main/java/itn/let/kakao/kakaoComm/KakaoVO.java
+++ src/main/java/itn/let/kakao/kakaoComm/KakaoVO.java
... | ... | @@ -246,6 +246,14 @@ |
| 246 | 246 |
private String successCntDay; |
| 247 | 247 |
private String successCntMonth; |
| 248 | 248 |
private String successCntYear; |
| 249 |
+ |
|
| 250 |
+ |
|
| 251 |
+ |
|
| 252 |
+ //재전송 영역 |
|
| 253 |
+ private String msgResendAllFlag; |
|
| 254 |
+ private String msgResendAllGroupId; |
|
| 255 |
+ private String msgResendAllTmpKey; |
|
| 256 |
+ private String msgResendAllYellowId; |
|
| 249 | 257 |
|
| 250 | 258 |
public String getSuccessDay() {
|
| 251 | 259 |
return successDay; |
... | ... | @@ -1238,4 +1246,39 @@ |
| 1238 | 1246 |
public void setPhmType(String phmType) {
|
| 1239 | 1247 |
this.phmType = phmType; |
| 1240 | 1248 |
} |
| 1249 |
+ |
|
| 1250 |
+ public String getMsgResendAllFlag() {
|
|
| 1251 |
+ return msgResendAllFlag; |
|
| 1252 |
+ } |
|
| 1253 |
+ |
|
| 1254 |
+ public void setMsgResendAllFlag(String msgResendAllFlag) {
|
|
| 1255 |
+ this.msgResendAllFlag = msgResendAllFlag; |
|
| 1256 |
+ } |
|
| 1257 |
+ |
|
| 1258 |
+ public String getMsgResendAllGroupId() {
|
|
| 1259 |
+ return msgResendAllGroupId; |
|
| 1260 |
+ } |
|
| 1261 |
+ |
|
| 1262 |
+ public void setMsgResendAllGroupId(String msgResendAllGroupId) {
|
|
| 1263 |
+ this.msgResendAllGroupId = msgResendAllGroupId; |
|
| 1264 |
+ } |
|
| 1265 |
+ |
|
| 1266 |
+ public String getMsgResendAllTmpKey() {
|
|
| 1267 |
+ return msgResendAllTmpKey; |
|
| 1268 |
+ } |
|
| 1269 |
+ |
|
| 1270 |
+ public void setMsgResendAllTmpKey(String msgResendAllTmpKey) {
|
|
| 1271 |
+ this.msgResendAllTmpKey = msgResendAllTmpKey; |
|
| 1272 |
+ } |
|
| 1273 |
+ |
|
| 1274 |
+ public String getMsgResendAllYellowId() {
|
|
| 1275 |
+ return msgResendAllYellowId; |
|
| 1276 |
+ } |
|
| 1277 |
+ |
|
| 1278 |
+ public void setMsgResendAllYellowId(String msgResendAllYellowId) {
|
|
| 1279 |
+ this.msgResendAllYellowId = msgResendAllYellowId; |
|
| 1280 |
+ } |
|
| 1281 |
+ |
|
| 1282 |
+ |
|
| 1283 |
+ |
|
| 1241 | 1284 |
} |
--- src/main/java/itn/let/kakao/user/kakaoAt/web/KakaoAlimTalkSendController.java
+++ src/main/java/itn/let/kakao/user/kakaoAt/web/KakaoAlimTalkSendController.java
... | ... | @@ -46,6 +46,8 @@ |
| 46 | 46 |
import org.springframework.web.multipart.MultipartHttpServletRequest; |
| 47 | 47 |
import org.springframework.web.servlet.ModelAndView; |
| 48 | 48 |
|
| 49 |
+import com.fasterxml.jackson.databind.ObjectMapper; |
|
| 50 |
+ |
|
| 49 | 51 |
import egovframework.rte.fdl.idgnr.EgovIdGnrService; |
| 50 | 52 |
import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper; |
| 51 | 53 |
import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo; |
... | ... | @@ -215,6 +217,26 @@ |
| 215 | 217 |
// 사용자 저으이 |
| 216 | 218 |
model.addAttribute("sendPrice", kakaoSendUtil.selectSendPriceOfKakaoAtAndSmsAndMms(userId));
|
| 217 | 219 |
} |
| 220 |
+ |
|
| 221 |
+ if("Y".equals(kakaoVO.getMsgResendAllFlag())) {
|
|
| 222 |
+ List<MjonMsgDataVO> resendList = new ArrayList<MjonMsgDataVO>(); |
|
| 223 |
+ |
|
| 224 |
+ MjonMsgDataVO mjonMsgDataVO = new MjonMsgDataVO(); |
|
| 225 |
+ mjonMsgDataVO.setMsgGroupId(kakaoVO.getMsgResendAllGroupId()); |
|
| 226 |
+ mjonMsgDataVO.setUserId(userId); |
|
| 227 |
+ resendList = mjonMsgDataService.selectMjMsgListByResend(mjonMsgDataVO); |
|
| 228 |
+ |
|
| 229 |
+ ObjectMapper mapper = new ObjectMapper(); |
|
| 230 |
+ try {
|
|
| 231 |
+ String resendListJson = mapper.writeValueAsString(resendList); |
|
| 232 |
+ model.addAttribute("resendListJson", resendListJson);
|
|
| 233 |
+ } catch (Exception e) {
|
|
| 234 |
+ e.printStackTrace(); |
|
| 235 |
+ } |
|
| 236 |
+ |
|
| 237 |
+ } |
|
| 238 |
+ |
|
| 239 |
+ |
|
| 218 | 240 |
|
| 219 | 241 |
return "web/kakao/msgdata/at/KakaoAlimtalkMsgDataView"; |
| 220 | 242 |
} |
... | ... | @@ -1403,4 +1425,80 @@ |
| 1403 | 1425 |
|
| 1404 | 1426 |
return modelAndView; |
| 1405 | 1427 |
} |
| 1428 |
+ |
|
| 1429 |
+ |
|
| 1430 |
+ @RequestMapping(value= {"/web/mjon/alimtalk/kakaoAlimtalkMsgDataView_test_set.do"})
|
|
| 1431 |
+ public String kakaoAlimtalkMsgDataView_test_set(ModelMap model |
|
| 1432 |
+ , @ModelAttribute("kakaoVO") KakaoVO kakaoVO) throws Exception {
|
|
| 1433 |
+ |
|
| 1434 |
+ LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; |
|
| 1435 |
+ String author = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getAuthority()); |
|
| 1436 |
+ String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); |
|
| 1437 |
+ |
|
| 1438 |
+ model.addAttribute("loginVO", loginVO);
|
|
| 1439 |
+/* if(userId == "") {
|
|
| 1440 |
+ return "redirect:/web/user/login/login.do"; |
|
| 1441 |
+ }*/ |
|
| 1442 |
+ |
|
| 1443 |
+ |
|
| 1444 |
+ //2.사용자 개인 단가 정보 불러오기 |
|
| 1445 |
+ if(!userId.equals("") && !author.equals("ROLE_ADMIN")) {
|
|
| 1446 |
+ |
|
| 1447 |
+ // 사용자 아이디를 이용한 발신프로필 조회 |
|
| 1448 |
+ kakaoVO.setUserId(userId); |
|
| 1449 |
+ List<KakaoVO> selectKakaoProfileList = kakaoApiService.selectKakaoProfileList(kakaoVO); |
|
| 1450 |
+ model.addAttribute("kakaoProfileList", selectKakaoProfileList);
|
|
| 1451 |
+ |
|
| 1452 |
+ //발신번호 불러오기 |
|
| 1453 |
+ //아이디 발신번호 리스트 불러오기. |
|
| 1454 |
+ List<String> resultSendPhonList = mjonMsgDataService.selectSendPhonNumList(userId); |
|
| 1455 |
+ List<String> resultPhonList = new ArrayList<String>(); |
|
| 1456 |
+ MJUtil mjUtil = new MJUtil(); |
|
| 1457 |
+ |
|
| 1458 |
+ for(String phone : resultSendPhonList) {
|
|
| 1459 |
+ |
|
| 1460 |
+ resultPhonList.add(mjUtil.addDash(phone)); |
|
| 1461 |
+ |
|
| 1462 |
+ } |
|
| 1463 |
+ model.addAttribute("resultPhonList", resultPhonList);
|
|
| 1464 |
+ |
|
| 1465 |
+ |
|
| 1466 |
+ MberManageVO mberManageVO = mjonMsgDataService.selectMberManageInfo(userId); |
|
| 1467 |
+ |
|
| 1468 |
+ model.addAttribute("atSmishingYn", mberManageVO.getAtSmishingYn());
|
|
| 1469 |
+ |
|
| 1470 |
+ //3.사용자 개인단가 정보가 0이 아니면 개인단가 사용, 없으면 시스템 기본 단가 사용 |
|
| 1471 |
+ Float shortPrice = mberManageVO.getShortPrice(); |
|
| 1472 |
+ Float longPrice = mberManageVO.getLongPrice(); |
|
| 1473 |
+ Float picturePrice = mberManageVO.getPicturePrice(); |
|
| 1474 |
+ Float picture2Price = mberManageVO.getPicture2Price(); |
|
| 1475 |
+ Float picture3Price = mberManageVO.getPicture3Price(); |
|
| 1476 |
+ BigDecimal userMoney = new BigDecimal(mberManageVO.getUserMoney()).setScale(2, RoundingMode.HALF_EVEN); |
|
| 1477 |
+ |
|
| 1478 |
+ model.addAttribute("userMoney", userMoney);
|
|
| 1479 |
+ |
|
| 1480 |
+ |
|
| 1481 |
+ ////////////////////////////////////////////////////////////////// |
|
| 1482 |
+ |
|
| 1483 |
+ //최근 전송 내역 |
|
| 1484 |
+ MjonMsgDataVO searchVO = new MjonMsgDataVO(); |
|
| 1485 |
+ Calendar cal = Calendar.getInstance(); |
|
| 1486 |
+ Date now = new Date(); |
|
| 1487 |
+ SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd");
|
|
| 1488 |
+ cal.setTime(now); |
|
| 1489 |
+ cal.add(Calendar.DATE, -3); |
|
| 1490 |
+ String chkDate = format.format(cal.getTime()); |
|
| 1491 |
+ searchVO.setUserId(userId); |
|
| 1492 |
+ searchVO.setMyMsgStDt(chkDate); //검색 시작일 저장 - 현재날짜로 부터 3일 이전 날짜로 시작 |
|
| 1493 |
+ model.addAttribute("resultLatestMsgList", mjonMsgDataService.selectLatestMsgList(searchVO));
|
|
| 1494 |
+ |
|
| 1495 |
+ //자주보내는 번호 |
|
| 1496 |
+ model.addAttribute("resultBookMarkMsgList", mjonMsgDataService.selectBookMarkMsgList(searchVO));
|
|
| 1497 |
+ |
|
| 1498 |
+ // 사용자 저으이 |
|
| 1499 |
+ model.addAttribute("sendPrice", kakaoSendUtil.selectSendPriceOfKakaoAtAndSmsAndMms(userId));
|
|
| 1500 |
+ } |
|
| 1501 |
+ |
|
| 1502 |
+ return "web/kakao/msgdata/at/KakaoAlimtalkMsgDataView_tmp"; |
|
| 1503 |
+ } |
|
| 1406 | 1504 |
} |
+++ src/main/java/itn/let/kakao/user/sent/service/KakaoSentDetailVO.java
... | ... | @@ -0,0 +1,51 @@ |
| 1 | +package itn.let.kakao.user.sent.service; | |
| 2 | + | |
| 3 | +import lombok.Getter; | |
| 4 | +import lombok.Setter; | |
| 5 | + | |
| 6 | +@Getter | |
| 7 | +@Setter | |
| 8 | +public class KakaoSentDetailVO extends KakaoSentVO{ | |
| 9 | + | |
| 10 | + private static final long serialVersionUID = 1L; | |
| 11 | + | |
| 12 | + private String msgGroupId; | |
| 13 | + private String reqDate; | |
| 14 | + private String regDate; | |
| 15 | + private String msgGroupCnt; | |
| 16 | + private String reserveYn; | |
| 17 | + private String reserveCYn; | |
| 18 | + private String canceldate; | |
| 19 | + private String callFrom; | |
| 20 | + private String userId; | |
| 21 | + private String smsTxt; | |
| 22 | + private String subject; | |
| 23 | + private String subjectChkYn; | |
| 24 | + private String msgType; | |
| 25 | + private String fileCnt; | |
| 26 | + private String msgKind; | |
| 27 | + private String eachPrice; | |
| 28 | + private String filePath1; | |
| 29 | + private String filePath2; | |
| 30 | + private String filePath3; | |
| 31 | + | |
| 32 | + private String callTo; | |
| 33 | + private String statusTxt; | |
| 34 | + private String addrNm; | |
| 35 | + | |
| 36 | + private String successPct; | |
| 37 | + private String failedPct; | |
| 38 | + private String waitingPct; | |
| 39 | + | |
| 40 | + private String statusCd; // 진행상태 코드 | |
| 41 | + private String divideYn; | |
| 42 | + private String divideText; | |
| 43 | + private String totPrice; | |
| 44 | + private String yellowId; | |
| 45 | + private String msgNoticetalkTmpKey; | |
| 46 | + | |
| 47 | + // FileInfo 리스트 필드 추가 | |
| 48 | +// private List<FileInfoVO> fileInfos; | |
| 49 | + | |
| 50 | + | |
| 51 | +} |
--- src/main/java/itn/let/kakao/user/sent/service/KakaoSentService.java
+++ src/main/java/itn/let/kakao/user/sent/service/KakaoSentService.java
... | ... | @@ -1,6 +1,7 @@ |
| 1 | 1 |
package itn.let.kakao.user.sent.service; |
| 2 | 2 |
|
| 3 | 3 |
import java.util.List; |
| 4 |
+import java.util.Map; |
|
| 4 | 5 |
|
| 5 | 6 |
import itn.let.kakao.admin.kakaoAt.service.MjonKakaoATVO; |
| 6 | 7 |
|
... | ... | @@ -31,5 +32,11 @@ |
| 31 | 32 |
//예약 결과 전체 발송 리스트 불러오기 |
| 32 | 33 |
public List<KakaoSentVO> selectReservKakaoSentList(KakaoSentVO kakaoSentVO) throws Exception; |
| 33 | 34 |
|
| 35 |
+ public Map<String, Object> selectKakaoSentCntAll_Advc(KakaoSentVO kakaoSentVO) throws Exception; |
|
| 36 |
+ |
|
| 37 |
+ public KakaoSentDetailVO selectKakaoSentDetailView(KakaoSentDetailVO kakaoSentDetailVO) throws Exception; |
|
| 38 |
+ |
|
| 39 |
+ //발송 관리 문자발송 내용 상세보기 팝업 |
|
| 40 |
+ public MjonKakaoATVO selectKakaoSentDetailViewPhoneAjax(MjonKakaoATVO kakaoSentVO) throws Exception; |
|
| 34 | 41 |
|
| 35 | 42 |
} |
--- src/main/java/itn/let/kakao/user/sent/service/KakaoSentVO.java
+++ src/main/java/itn/let/kakao/user/sent/service/KakaoSentVO.java
... | ... | @@ -4,7 +4,11 @@ |
| 4 | 4 |
import java.util.List; |
| 5 | 5 |
|
| 6 | 6 |
import itn.let.uss.umt.service.UserDefaultVO; |
| 7 |
+import lombok.Getter; |
|
| 8 |
+import lombok.Setter; |
|
| 7 | 9 |
|
| 10 |
+@Getter |
|
| 11 |
+@Setter |
|
| 8 | 12 |
public class KakaoSentVO extends UserDefaultVO{
|
| 9 | 13 |
|
| 10 | 14 |
private static final long serialVersionUID = 1L; |
... | ... | @@ -90,6 +94,7 @@ |
| 90 | 94 |
private int successCount; |
| 91 | 95 |
private int waitCount; |
| 92 | 96 |
private int failCount; |
| 97 |
+ private int allCount; |
|
| 93 | 98 |
|
| 94 | 99 |
private String bizUmid; |
| 95 | 100 |
private int kakaoResendSuccCount; |
... | ... | @@ -103,471 +108,11 @@ |
| 103 | 108 |
private String atDelayCompleteYn; //알림톡 30분 지연 승인/취소 처리 여부 |
| 104 | 109 |
private Date atDelayOrgTime; //알림톡 30분 지연에 대한 원래 시간 (-30분 처리된 시간) |
| 105 | 110 |
|
| 106 |
- public String getCallToComma() {
|
|
| 107 |
- return callToComma; |
|
| 108 |
- } |
|
| 109 |
- public void setCallToComma(String callToComma) {
|
|
| 110 |
- this.callToComma = callToComma; |
|
| 111 |
- } |
|
| 112 |
- public String getCallFromComma() {
|
|
| 113 |
- return callFromComma; |
|
| 114 |
- } |
|
| 115 |
- public void setCallFromComma(String callFromComma) {
|
|
| 116 |
- this.callFromComma = callFromComma; |
|
| 117 |
- } |
|
| 111 |
+ private String statusCd; |
|
| 118 | 112 |
|
| 119 |
- public String getAtchFiles() {
|
|
| 120 |
- return atchFiles; |
|
| 121 |
- } |
|
| 122 |
- public void setAtchFiles(String atchFiles) {
|
|
| 123 |
- this.atchFiles = atchFiles; |
|
| 124 |
- } |
|
| 113 |
+ private int successPrice; |
|
| 114 |
+ private int kakaoResendSuccPrice; |
|
| 125 | 115 |
|
| 126 |
- public String getMsgId() {
|
|
| 127 |
- return msgId; |
|
| 128 |
- } |
|
| 129 |
- public void setMsgId(String msgId) {
|
|
| 130 |
- this.msgId = msgId; |
|
| 131 |
- } |
|
| 132 |
- public int getSuccessCnt() {
|
|
| 133 |
- return successCnt; |
|
| 134 |
- } |
|
| 135 |
- public void setSuccessCnt(int successCnt) {
|
|
| 136 |
- this.successCnt = successCnt; |
|
| 137 |
- } |
|
| 138 |
- public String getMsgTypeName() {
|
|
| 139 |
- return msgTypeName; |
|
| 140 |
- } |
|
| 141 |
- public void setMsgTypeName(String msgTypeName) {
|
|
| 142 |
- this.msgTypeName = msgTypeName; |
|
| 143 |
- } |
|
| 144 |
- public int getOrderByCode() {
|
|
| 145 |
- return orderByCode; |
|
| 146 |
- } |
|
| 147 |
- public void setOrderByCode(int orderByCode) {
|
|
| 148 |
- this.orderByCode = orderByCode; |
|
| 149 |
- } |
|
| 150 |
- public String getAtchFileId() {
|
|
| 151 |
- return atchFileId; |
|
| 152 |
- } |
|
| 153 |
- public void setAtchFileId(String atchFileId) {
|
|
| 154 |
- this.atchFileId = atchFileId; |
|
| 155 |
- } |
|
| 156 |
- public String getFileSn() {
|
|
| 157 |
- return fileSn; |
|
| 158 |
- } |
|
| 159 |
- public void setFileSn(String fileSn) {
|
|
| 160 |
- this.fileSn = fileSn; |
|
| 161 |
- } |
|
| 162 |
- public String getUserId() {
|
|
| 163 |
- return userId; |
|
| 164 |
- } |
|
| 165 |
- public void setUserId(String userId) {
|
|
| 166 |
- this.userId = userId; |
|
| 167 |
- } |
|
| 168 |
- public String getAddrNm() {
|
|
| 169 |
- return addrNm; |
|
| 170 |
- } |
|
| 171 |
- public void setAddrNm(String addrNm) {
|
|
| 172 |
- this.addrNm = addrNm; |
|
| 173 |
- } |
|
| 174 |
- public String getMsgSeq() {
|
|
| 175 |
- return msgSeq; |
|
| 176 |
- } |
|
| 177 |
- public void setMsgSeq(String msgSeq) {
|
|
| 178 |
- this.msgSeq = msgSeq; |
|
| 179 |
- } |
|
| 180 |
- public String getMsgGroupId() {
|
|
| 181 |
- return msgGroupId; |
|
| 182 |
- } |
|
| 183 |
- public void setMsgGroupId(String msgGroupId) {
|
|
| 184 |
- this.msgGroupId = msgGroupId; |
|
| 185 |
- } |
|
| 186 |
- public List getMsgGroupIdList() {
|
|
| 187 |
- return msgGroupIdList; |
|
| 188 |
- } |
|
| 189 |
- public void setMsgGroupIdList(List msgGroupIdList) {
|
|
| 190 |
- this.msgGroupIdList = msgGroupIdList; |
|
| 191 |
- } |
|
| 192 |
- public String getSmsTxt() {
|
|
| 193 |
- return smsTxt; |
|
| 194 |
- } |
|
| 195 |
- public void setSmsTxt(String smsTxt) {
|
|
| 196 |
- this.smsTxt = smsTxt; |
|
| 197 |
- } |
|
| 198 |
- public String getSubject() {
|
|
| 199 |
- return subject; |
|
| 200 |
- } |
|
| 201 |
- public void setSubject(String subject) {
|
|
| 202 |
- this.subject = subject; |
|
| 203 |
- } |
|
| 204 |
- public Date getRegdate() {
|
|
| 205 |
- return regdate; |
|
| 206 |
- } |
|
| 207 |
- public void setRegdate(Date regdate) {
|
|
| 208 |
- this.regdate = regdate; |
|
| 209 |
- } |
|
| 210 |
- public Date getReqdate() {
|
|
| 211 |
- return reqdate; |
|
| 212 |
- } |
|
| 213 |
- public void setReqdate(Date reqdate) {
|
|
| 214 |
- this.reqdate = reqdate; |
|
| 215 |
- } |
|
| 216 |
- public String getCallFrom() {
|
|
| 217 |
- return callFrom; |
|
| 218 |
- } |
|
| 219 |
- public void setCallFrom(String callFrom) {
|
|
| 220 |
- this.callFrom = callFrom; |
|
| 221 |
- } |
|
| 222 |
- public String getCallTo() {
|
|
| 223 |
- return callTo; |
|
| 224 |
- } |
|
| 225 |
- public void setCallTo(String callTo) {
|
|
| 226 |
- this.callTo = callTo; |
|
| 227 |
- } |
|
| 228 |
- public List getCallToList() {
|
|
| 229 |
- return callToList; |
|
| 230 |
- } |
|
| 231 |
- public void setCallToList(List callToList) {
|
|
| 232 |
- this.callToList = callToList; |
|
| 233 |
- } |
|
| 234 |
- public String getTotPrice() {
|
|
| 235 |
- return totPrice; |
|
| 236 |
- } |
|
| 237 |
- public void setTotPrice(String totPrice) {
|
|
| 238 |
- this.totPrice = totPrice; |
|
| 239 |
- } |
|
| 240 |
- public String getEachPrice() {
|
|
| 241 |
- return eachPrice; |
|
| 242 |
- } |
|
| 243 |
- public void setEachPrice(String eachPrice) {
|
|
| 244 |
- this.eachPrice = eachPrice; |
|
| 245 |
- } |
|
| 246 |
- public String getDelFlag() {
|
|
| 247 |
- return delFlag; |
|
| 248 |
- } |
|
| 249 |
- public void setDelFlag(String delFlag) {
|
|
| 250 |
- this.delFlag = delFlag; |
|
| 251 |
- } |
|
| 252 |
- public String getTotMsgPrice() {
|
|
| 253 |
- return totMsgPrice; |
|
| 254 |
- } |
|
| 255 |
- public void setTotMsgPrice(String totMsgPrice) {
|
|
| 256 |
- this.totMsgPrice = totMsgPrice; |
|
| 257 |
- } |
|
| 258 |
- public String getRsltCode() {
|
|
| 259 |
- return rsltCode; |
|
| 260 |
- } |
|
| 261 |
- public void setRsltCode(String rsltCode) {
|
|
| 262 |
- this.rsltCode = rsltCode; |
|
| 263 |
- } |
|
| 264 |
- public String getRsltCode2() {
|
|
| 265 |
- return rsltCode2; |
|
| 266 |
- } |
|
| 267 |
- public void setRsltCode2(String rsltCode2) {
|
|
| 268 |
- this.rsltCode2 = rsltCode2; |
|
| 269 |
- } |
|
| 270 |
- public String getMsgType() {
|
|
| 271 |
- return msgType; |
|
| 272 |
- } |
|
| 273 |
- public void setMsgType(String msgType) {
|
|
| 274 |
- this.msgType = msgType; |
|
| 275 |
- } |
|
| 276 |
- public String getMsgGroupCnt() {
|
|
| 277 |
- return msgGroupCnt; |
|
| 278 |
- } |
|
| 279 |
- public void setMsgGroupCnt(String msgGroupCnt) {
|
|
| 280 |
- this.msgGroupCnt = msgGroupCnt; |
|
| 281 |
- } |
|
| 282 |
- public String getFileCnt() {
|
|
| 283 |
- return fileCnt; |
|
| 284 |
- } |
|
| 285 |
- public void setFileCnt(String fileCnt) {
|
|
| 286 |
- this.fileCnt = fileCnt; |
|
| 287 |
- } |
|
| 288 |
- public String getTotMsgCnt() {
|
|
| 289 |
- return totMsgCnt; |
|
| 290 |
- } |
|
| 291 |
- public void setTotMsgCnt(String totMsgCnt) {
|
|
| 292 |
- this.totMsgCnt = totMsgCnt; |
|
| 293 |
- } |
|
| 294 |
- public String getCurState() {
|
|
| 295 |
- return curState; |
|
| 296 |
- } |
|
| 297 |
- public void setCurState(String curState) {
|
|
| 298 |
- this.curState = curState; |
|
| 299 |
- } |
|
| 300 |
- public String getReserveYn() {
|
|
| 301 |
- return reserveYn; |
|
| 302 |
- } |
|
| 303 |
- public void setReserveYn(String reserveYn) {
|
|
| 304 |
- this.reserveYn = reserveYn; |
|
| 305 |
- } |
|
| 306 |
- public String getReserveCYn() {
|
|
| 307 |
- return reserveCYn; |
|
| 308 |
- } |
|
| 309 |
- public void setReserveCYn(String reserveCYn) {
|
|
| 310 |
- this.reserveCYn = reserveCYn; |
|
| 311 |
- } |
|
| 312 |
- public String getFilePath1() {
|
|
| 313 |
- return filePath1; |
|
| 314 |
- } |
|
| 315 |
- public void setFilePath1(String filePath1) {
|
|
| 316 |
- this.filePath1 = filePath1; |
|
| 317 |
- } |
|
| 318 |
- public String getFilePath2() {
|
|
| 319 |
- return filePath2; |
|
| 320 |
- } |
|
| 321 |
- public void setFilePath2(String filePath2) {
|
|
| 322 |
- this.filePath2 = filePath2; |
|
| 323 |
- } |
|
| 324 |
- public String getFilePath3() {
|
|
| 325 |
- return filePath3; |
|
| 326 |
- } |
|
| 327 |
- public void setFilePath3(String filePath3) {
|
|
| 328 |
- this.filePath3 = filePath3; |
|
| 329 |
- } |
|
| 330 |
- public Date getSentDate() {
|
|
| 331 |
- return sentDate; |
|
| 332 |
- } |
|
| 333 |
- public void setSentDate(Date sentDate) {
|
|
| 334 |
- this.sentDate = sentDate; |
|
| 335 |
- } |
|
| 336 |
- public String getAgentCode() {
|
|
| 337 |
- return agentCode; |
|
| 338 |
- } |
|
| 339 |
- public void setAgentCode(String agentCode) {
|
|
| 340 |
- this.agentCode = agentCode; |
|
| 341 |
- } |
|
| 342 |
- public String getUserData() {
|
|
| 343 |
- return userData; |
|
| 344 |
- } |
|
| 345 |
- public void setUserData(String userData) {
|
|
| 346 |
- this.userData = userData; |
|
| 347 |
- } |
|
| 348 |
- public List getUserDataList() {
|
|
| 349 |
- return userDataList; |
|
| 350 |
- } |
|
| 351 |
- public void setUserDataList(List userDataList) {
|
|
| 352 |
- this.userDataList = userDataList; |
|
| 353 |
- } |
|
| 354 |
- public Date getCancelDate() {
|
|
| 355 |
- return cancelDate; |
|
| 356 |
- } |
|
| 357 |
- public void setCancelDate(Date cancelDate) {
|
|
| 358 |
- this.cancelDate = cancelDate; |
|
| 359 |
- } |
|
| 360 |
- public String getStartDate() {
|
|
| 361 |
- return startDate; |
|
| 362 |
- } |
|
| 363 |
- public void setStartDate(String startDate) {
|
|
| 364 |
- this.startDate = startDate; |
|
| 365 |
- } |
|
| 366 |
- public String getEndDate() {
|
|
| 367 |
- return endDate; |
|
| 368 |
- } |
|
| 369 |
- public void setEndDate(String endDate) {
|
|
| 370 |
- this.endDate = endDate; |
|
| 371 |
- } |
|
| 372 |
- public String getSearchMsgType() {
|
|
| 373 |
- return searchMsgType; |
|
| 374 |
- } |
|
| 375 |
- public void setSearchMsgType(String searchMsgType) {
|
|
| 376 |
- this.searchMsgType = searchMsgType; |
|
| 377 |
- } |
|
| 378 |
- public String getTabType() {
|
|
| 379 |
- return tabType; |
|
| 380 |
- } |
|
| 381 |
- public void setTabType(String tabType) {
|
|
| 382 |
- this.tabType = tabType; |
|
| 383 |
- } |
|
| 384 |
- public String getStateType() {
|
|
| 385 |
- return stateType; |
|
| 386 |
- } |
|
| 387 |
- public void setStateType(String stateType) {
|
|
| 388 |
- this.stateType = stateType; |
|
| 389 |
- } |
|
| 390 |
- public String getListType() {
|
|
| 391 |
- return listType; |
|
| 392 |
- } |
|
| 393 |
- public void setListType(String listType) {
|
|
| 394 |
- this.listType = listType; |
|
| 395 |
- } |
|
| 396 |
- public String getResultType() {
|
|
| 397 |
- return resultType; |
|
| 398 |
- } |
|
| 399 |
- public void setResultType(String resultType) {
|
|
| 400 |
- this.resultType = resultType; |
|
| 401 |
- } |
|
| 402 |
- public String getMsgResultCnt() {
|
|
| 403 |
- return msgResultCnt; |
|
| 404 |
- } |
|
| 405 |
- public void setMsgResultCnt(String msgResultCnt) {
|
|
| 406 |
- this.msgResultCnt = msgResultCnt; |
|
| 407 |
- } |
|
| 408 |
- public String getMsgResultSts() {
|
|
| 409 |
- return msgResultSts; |
|
| 410 |
- } |
|
| 411 |
- public void setMsgResultSts(String msgResultSts) {
|
|
| 412 |
- this.msgResultSts = msgResultSts; |
|
| 413 |
- } |
|
| 414 |
- public String getAddrGrpNm() {
|
|
| 415 |
- return addrGrpNm; |
|
| 416 |
- } |
|
| 417 |
- public void setAddrGrpNm(String addrGrpNm) {
|
|
| 418 |
- this.addrGrpNm = addrGrpNm; |
|
| 419 |
- } |
|
| 420 |
- public int getOrderByrsltCode() {
|
|
| 421 |
- return orderByrsltCode; |
|
| 422 |
- } |
|
| 423 |
- public void setOrderByrsltCode(int orderByrsltCode) {
|
|
| 424 |
- this.orderByrsltCode = orderByrsltCode; |
|
| 425 |
- } |
|
| 426 |
- public String getMsgResult() {
|
|
| 427 |
- return msgResult; |
|
| 428 |
- } |
|
| 429 |
- public void setMsgResult(String msgResult) {
|
|
| 430 |
- this.msgResult = msgResult; |
|
| 431 |
- } |
|
| 432 |
- public String getNtceBgnde() {
|
|
| 433 |
- return ntceBgnde; |
|
| 434 |
- } |
|
| 435 |
- public void setNtceBgnde(String ntceBgnde) {
|
|
| 436 |
- this.ntceBgnde = ntceBgnde; |
|
| 437 |
- } |
|
| 438 |
- public String getNtceEndde() {
|
|
| 439 |
- return ntceEndde; |
|
| 440 |
- } |
|
| 441 |
- public void setNtceEndde(String ntceEndde) {
|
|
| 442 |
- this.ntceEndde = ntceEndde; |
|
| 443 |
- } |
|
| 444 |
- public String getMsgKind() {
|
|
| 445 |
- return msgKind; |
|
| 446 |
- } |
|
| 447 |
- public void setMsgKind(String msgKind) {
|
|
| 448 |
- this.msgKind = msgKind; |
|
| 449 |
- } |
|
| 450 |
- public String getDelayYn() {
|
|
| 451 |
- return delayYn; |
|
| 452 |
- } |
|
| 453 |
- public void setDelayYn(String delayYn) {
|
|
| 454 |
- this.delayYn = delayYn; |
|
| 455 |
- } |
|
| 456 |
- public String getDelayCompleteYn() {
|
|
| 457 |
- return delayCompleteYn; |
|
| 458 |
- } |
|
| 459 |
- public void setDelayCompleteYn(String delayCompleteYn) {
|
|
| 460 |
- this.delayCompleteYn = delayCompleteYn; |
|
| 461 |
- } |
|
| 462 |
- public String getBizKakaoResendYn() {
|
|
| 463 |
- return bizKakaoResendYn; |
|
| 464 |
- } |
|
| 465 |
- public void setBizKakaoResendYn(String bizKakaoResendYn) {
|
|
| 466 |
- this.bizKakaoResendYn = bizKakaoResendYn; |
|
| 467 |
- } |
|
| 468 |
- public String getBizKakaoResendType() {
|
|
| 469 |
- return bizKakaoResendType; |
|
| 470 |
- } |
|
| 471 |
- public void setBizKakaoResendType(String bizKakaoResendType) {
|
|
| 472 |
- this.bizKakaoResendType = bizKakaoResendType; |
|
| 473 |
- } |
|
| 474 |
- public String getBizKakaoResendData() {
|
|
| 475 |
- return bizKakaoResendData; |
|
| 476 |
- } |
|
| 477 |
- public void setBizKakaoResendData(String bizKakaoResendData) {
|
|
| 478 |
- this.bizKakaoResendData = bizKakaoResendData; |
|
| 479 |
- } |
|
| 480 |
- public String getCallStatus() {
|
|
| 481 |
- return callStatus; |
|
| 482 |
- } |
|
| 483 |
- public void setCallStatus(String callStatus) {
|
|
| 484 |
- this.callStatus = callStatus; |
|
| 485 |
- } |
|
| 486 |
- public String getBizKakaoAtPrice() {
|
|
| 487 |
- return bizKakaoAtPrice; |
|
| 488 |
- } |
|
| 489 |
- public void setBizKakaoAtPrice(String bizKakaoAtPrice) {
|
|
| 490 |
- this.bizKakaoAtPrice = bizKakaoAtPrice; |
|
| 491 |
- } |
|
| 492 |
- public String getBizKakaoFtPrice() {
|
|
| 493 |
- return bizKakaoFtPrice; |
|
| 494 |
- } |
|
| 495 |
- public void setBizKakaoFtPrice(String bizKakaoFtPrice) {
|
|
| 496 |
- this.bizKakaoFtPrice = bizKakaoFtPrice; |
|
| 497 |
- } |
|
| 498 |
- public String getBizSmsPrice() {
|
|
| 499 |
- return bizSmsPrice; |
|
| 500 |
- } |
|
| 501 |
- public void setBizSmsPrice(String bizSmsPrice) {
|
|
| 502 |
- this.bizSmsPrice = bizSmsPrice; |
|
| 503 |
- } |
|
| 504 |
- public String getDiffMin() {
|
|
| 505 |
- return diffMin; |
|
| 506 |
- } |
|
| 507 |
- public void setDiffMin(String diffMin) {
|
|
| 508 |
- this.diffMin = diffMin; |
|
| 509 |
- } |
|
| 510 |
- public String getBizMmsPrice() {
|
|
| 511 |
- return bizMmsPrice; |
|
| 512 |
- } |
|
| 513 |
- public void setBizMmsPrice(String bizMmsPrice) {
|
|
| 514 |
- this.bizMmsPrice = bizMmsPrice; |
|
| 515 |
- } |
|
| 516 |
- public int getSuccessCount() {
|
|
| 517 |
- return successCount; |
|
| 518 |
- } |
|
| 519 |
- public void setSuccessCount(int successCount) {
|
|
| 520 |
- this.successCount = successCount; |
|
| 521 |
- } |
|
| 522 |
- public String getBizUmid() {
|
|
| 523 |
- return bizUmid; |
|
| 524 |
- } |
|
| 525 |
- public void setBizUmid(String bizUmid) {
|
|
| 526 |
- this.bizUmid = bizUmid; |
|
| 527 |
- } |
|
| 528 |
- public int getKakaoResendSuccCount() {
|
|
| 529 |
- return kakaoResendSuccCount; |
|
| 530 |
- } |
|
| 531 |
- public void setKakaoResendSuccCount(int kakaoResendSuccCount) {
|
|
| 532 |
- this.kakaoResendSuccCount = kakaoResendSuccCount; |
|
| 533 |
- } |
|
| 534 |
- public int getKakaoResendFailCount() {
|
|
| 535 |
- return kakaoResendFailCount; |
|
| 536 |
- } |
|
| 537 |
- public void setKakaoResendFailCount(int kakaoResendFailCount) {
|
|
| 538 |
- this.kakaoResendFailCount = kakaoResendFailCount; |
|
| 539 |
- } |
|
| 540 |
- public int getWaitCount() {
|
|
| 541 |
- return waitCount; |
|
| 542 |
- } |
|
| 543 |
- public void setWaitCount(int waitCount) {
|
|
| 544 |
- this.waitCount = waitCount; |
|
| 545 |
- } |
|
| 546 |
- public int getFailCount() {
|
|
| 547 |
- return failCount; |
|
| 548 |
- } |
|
| 549 |
- public void setFailCount(int failCount) {
|
|
| 550 |
- this.failCount = failCount; |
|
| 551 |
- } |
|
| 552 |
- public String getAtDelayYn() {
|
|
| 553 |
- return atDelayYn; |
|
| 554 |
- } |
|
| 555 |
- public void setAtDelayYn(String atDelayYn) {
|
|
| 556 |
- this.atDelayYn = atDelayYn; |
|
| 557 |
- } |
|
| 558 |
- public String getAtDelayCompleteYn() {
|
|
| 559 |
- return atDelayCompleteYn; |
|
| 560 |
- } |
|
| 561 |
- public void setAtDelayCompleteYn(String atDelayCompleteYn) {
|
|
| 562 |
- this.atDelayCompleteYn = atDelayCompleteYn; |
|
| 563 |
- } |
|
| 564 |
- public Date getAtDelayOrgTime() {
|
|
| 565 |
- return atDelayOrgTime; |
|
| 566 |
- } |
|
| 567 |
- public void setAtDelayOrgTime(Date atDelayOrgTime) {
|
|
| 568 |
- this.atDelayOrgTime = atDelayOrgTime; |
|
| 569 |
- } |
|
| 570 |
- |
|
| 571 |
- |
|
| 116 |
+ private String divideYn; |
|
| 572 | 117 |
|
| 573 | 118 |
} |
--- src/main/java/itn/let/kakao/user/sent/service/impl/KakaoSentDAO.java
+++ src/main/java/itn/let/kakao/user/sent/service/impl/KakaoSentDAO.java
... | ... | @@ -7,6 +7,7 @@ |
| 7 | 7 |
|
| 8 | 8 |
import egovframework.rte.psl.dataaccess.EgovAbstractDAO; |
| 9 | 9 |
import itn.let.kakao.admin.kakaoAt.service.MjonKakaoATVO; |
| 10 |
+import itn.let.kakao.user.sent.service.KakaoSentDetailVO; |
|
| 10 | 11 |
import itn.let.kakao.user.sent.service.KakaoSentVO; |
| 11 | 12 |
|
| 12 | 13 |
@Repository("KakaoSentDAO")
|
... | ... | @@ -44,6 +45,10 @@ |
| 44 | 45 |
@SuppressWarnings("unchecked")
|
| 45 | 46 |
public List<KakaoSentVO> selectAllKakaoSentList(KakaoSentVO kakaoSentVO) throws Exception{
|
| 46 | 47 |
return (List<KakaoSentVO>) list("KakaoSentDAO.selectAllKakaoSentList",kakaoSentVO);
|
| 48 |
+ } |
|
| 49 |
+ @SuppressWarnings("unchecked")
|
|
| 50 |
+ public List<KakaoSentVO> selectAllKakaoSentList_advc(KakaoSentVO kakaoSentVO) throws Exception{
|
|
| 51 |
+ return (List<KakaoSentVO>) list("KakaoSentDAO.selectAllKakaoSentList_advc",kakaoSentVO);
|
|
| 47 | 52 |
} |
| 48 | 53 |
|
| 49 | 54 |
@SuppressWarnings("unchecked")
|
... | ... | @@ -90,4 +95,39 @@ |
| 90 | 95 |
return (List<KakaoSentVO>) list("KakaoSentDAO.selectReservKakaoSentList",kakaoSentVO);
|
| 91 | 96 |
} |
| 92 | 97 |
|
| 98 |
+ @SuppressWarnings("unchecked")
|
|
| 99 |
+ public List<KakaoSentVO> selectKakaoSentCntAll_advc(KakaoSentVO kakaoSentVO) throws Exception{
|
|
| 100 |
+ |
|
| 101 |
+ List<KakaoSentVO> result = new ArrayList<KakaoSentVO>(); |
|
| 102 |
+ |
|
| 103 |
+ try {
|
|
| 104 |
+ |
|
| 105 |
+ result = (List<KakaoSentVO>) list("KakaoSentDAO.selectKakaoSentCntAll_advc", kakaoSentVO);
|
|
| 106 |
+ |
|
| 107 |
+ } catch (Exception e) {
|
|
| 108 |
+ |
|
| 109 |
+ throw new Exception("++++++++++ ErrorService DAO :: " + e);
|
|
| 110 |
+ |
|
| 111 |
+ } |
|
| 112 |
+ |
|
| 113 |
+ return result; |
|
| 114 |
+ } |
|
| 115 |
+ |
|
| 116 |
+ public KakaoSentVO selectKakaoSentCntEachCnt_advc(KakaoSentVO kakaoSentVO) throws Exception{
|
|
| 117 |
+ return (KakaoSentVO) select("KakaoSentDAO.selectKakaoSentCntEachCnt_advc",kakaoSentVO);
|
|
| 118 |
+ } |
|
| 119 |
+ |
|
| 120 |
+ public KakaoSentDetailVO selectKakaoSentDetailView(KakaoSentDetailVO kakaoSentDetailVO) throws Exception{
|
|
| 121 |
+ return (KakaoSentDetailVO) select("KakaoSentDAO.selectKakaoSentDetailView", kakaoSentDetailVO);
|
|
| 122 |
+ } |
|
| 123 |
+ |
|
| 124 |
+ public List<String> findByReqDateWhereMsgGroupId(String msgGroupId) {
|
|
| 125 |
+ return (List<String>) list("KakaoSentDAO.findByReqDateWhereMsgGroupId", msgGroupId);
|
|
| 126 |
+ } |
|
| 127 |
+ |
|
| 128 |
+ //발송 관리 문자발송 내용 상세보기 팝업[그룹] |
|
| 129 |
+ public MjonKakaoATVO selectKakaoSentDetailViewPhoneAjax(MjonKakaoATVO KakaoSentVO) throws Exception{
|
|
| 130 |
+ return (MjonKakaoATVO) select("KakaoSentDAO.selectKakaoSentDetailViewPhoneAjax", KakaoSentVO);
|
|
| 131 |
+ } |
|
| 132 |
+ |
|
| 93 | 133 |
} |
--- src/main/java/itn/let/kakao/user/sent/service/impl/KakaoSentServiceImpl.java
+++ src/main/java/itn/let/kakao/user/sent/service/impl/KakaoSentServiceImpl.java
... | ... | @@ -1,7 +1,15 @@ |
| 1 | 1 |
package itn.let.kakao.user.sent.service.impl; |
| 2 | 2 |
|
| 3 |
+import java.math.BigDecimal; |
|
| 4 |
+import java.math.RoundingMode; |
|
| 5 |
+import java.time.LocalDateTime; |
|
| 6 |
+import java.time.format.DateTimeFormatter; |
|
| 3 | 7 |
import java.util.ArrayList; |
| 8 |
+import java.util.HashMap; |
|
| 9 |
+import java.util.LinkedHashMap; |
|
| 4 | 10 |
import java.util.List; |
| 11 |
+import java.util.Map; |
|
| 12 |
+import java.util.stream.Collectors; |
|
| 5 | 13 |
|
| 6 | 14 |
import javax.annotation.Resource; |
| 7 | 15 |
|
... | ... | @@ -10,6 +18,7 @@ |
| 10 | 18 |
import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl; |
| 11 | 19 |
import egovframework.rte.fdl.idgnr.EgovIdGnrService; |
| 12 | 20 |
import itn.let.kakao.admin.kakaoAt.service.MjonKakaoATVO; |
| 21 |
+import itn.let.kakao.user.sent.service.KakaoSentDetailVO; |
|
| 13 | 22 |
import itn.let.kakao.user.sent.service.KakaoSentService; |
| 14 | 23 |
import itn.let.kakao.user.sent.service.KakaoSentVO; |
| 15 | 24 |
|
... | ... | @@ -29,7 +38,8 @@ |
| 29 | 38 |
|
| 30 | 39 |
try {
|
| 31 | 40 |
|
| 32 |
- result = kakaoSentDAO.selectKakaoSentCntAll(kakaoSentVO); |
|
| 41 |
+// result = kakaoSentDAO.selectKakaoSentCntAll(kakaoSentVO); |
|
| 42 |
+ result = kakaoSentDAO.selectKakaoSentCntAll_advc(kakaoSentVO); |
|
| 33 | 43 |
|
| 34 | 44 |
} catch (Exception e) {
|
| 35 | 45 |
throw new Exception("++++++++++ ErrorService Impl :: " + e);
|
... | ... | @@ -38,30 +48,83 @@ |
| 38 | 48 |
return result; |
| 39 | 49 |
} |
| 40 | 50 |
|
| 51 |
+ public Map<String, Object> selectKakaoSentCntAll_Advc(KakaoSentVO kakaoSentVO) throws Exception{
|
|
| 52 |
+ |
|
| 53 |
+ List<KakaoSentVO> result = new ArrayList<KakaoSentVO>(); |
|
| 54 |
+ Map<String, Object> returnMap = new HashMap<String, Object>(); |
|
| 55 |
+ |
|
| 56 |
+ try {
|
|
| 57 |
+ |
|
| 58 |
+// result = kakaoSentDAO.selectKakaoSentCntAll(kakaoSentVO); |
|
| 59 |
+ result = kakaoSentDAO.selectKakaoSentCntAll_advc(kakaoSentVO); |
|
| 60 |
+ |
|
| 61 |
+ |
|
| 62 |
+ KakaoSentVO allVO = new KakaoSentVO(); |
|
| 63 |
+ KakaoSentVO atVO = new KakaoSentVO(); |
|
| 64 |
+ KakaoSentVO ftVO = new KakaoSentVO(); |
|
| 65 |
+ |
|
| 66 |
+ result.stream() |
|
| 67 |
+ .forEach(t -> |
|
| 68 |
+ {
|
|
| 69 |
+ Integer rsultCnt = Integer.parseInt(t.getMsgResultCnt()); |
|
| 70 |
+ |
|
| 71 |
+ if(Integer.parseInt(t.getFilePath1()) > 0) {
|
|
| 72 |
+ if("S".equals(t.getMsgResultSts())) {
|
|
| 73 |
+ atVO.setSuccessCount(atVO.getSuccessCount()+rsultCnt); |
|
| 74 |
+ }else if("W".equals(t.getMsgResultSts())) {
|
|
| 75 |
+ atVO.setWaitCount(atVO.getWaitCount()+rsultCnt); |
|
| 76 |
+ }else {
|
|
| 77 |
+ atVO.setFailCount(atVO.getFailCount()+rsultCnt); |
|
| 78 |
+ } |
|
| 79 |
+ |
|
| 80 |
+ atVO.setAllCount(atVO.getAllCount()+rsultCnt); |
|
| 81 |
+ allVO.setAllCount(allVO.getAllCount()+rsultCnt); |
|
| 82 |
+ |
|
| 83 |
+ }else {
|
|
| 84 |
+ if("S".equals(t.getMsgResultSts())) {
|
|
| 85 |
+ ftVO.setSuccessCount(ftVO.getSuccessCount()+rsultCnt); |
|
| 86 |
+ }else if("W".equals(t.getMsgResultSts())) {
|
|
| 87 |
+ ftVO.setWaitCount(ftVO.getWaitCount()+rsultCnt); |
|
| 88 |
+ }else {
|
|
| 89 |
+ ftVO.setFailCount(ftVO.getFailCount()+rsultCnt); |
|
| 90 |
+ } |
|
| 91 |
+ |
|
| 92 |
+ ftVO.setAllCount(ftVO.getAllCount()+rsultCnt); |
|
| 93 |
+ allVO.setAllCount(allVO.getAllCount()+rsultCnt); |
|
| 94 |
+ |
|
| 95 |
+ } |
|
| 96 |
+ }); |
|
| 97 |
+ |
|
| 98 |
+ allVO.setSuccessCount(atVO.getSuccessCount()+ftVO.getSuccessCount()); |
|
| 99 |
+ allVO.setWaitCount(atVO.getWaitCount()+ftVO.getWaitCount()); |
|
| 100 |
+ allVO.setFailCount(atVO.getFailCount()+ftVO.getFailCount()); |
|
| 101 |
+ |
|
| 102 |
+ //전체 성공건, 실패건 불러오기 |
|
| 103 |
+ returnMap.put("allCnt", allVO);
|
|
| 104 |
+ |
|
| 105 |
+ //알림톡 성공건, 실패건 불러오기 |
|
| 106 |
+ returnMap.put("atCnt", atVO);
|
|
| 107 |
+ |
|
| 108 |
+ //친구톡 성공건, 실패건 불러오기 |
|
| 109 |
+ returnMap.put("ftCnt", ftVO);
|
|
| 110 |
+ |
|
| 111 |
+ |
|
| 112 |
+ } catch (Exception e) {
|
|
| 113 |
+ throw new Exception("++++++++++ ErrorService Impl :: " + e);
|
|
| 114 |
+ } |
|
| 115 |
+ |
|
| 116 |
+ return returnMap; |
|
| 117 |
+ } |
|
| 118 |
+ |
|
| 41 | 119 |
//발송 관리 전체 발송 리스트 불러오기 |
| 42 | 120 |
public List<KakaoSentVO> selectAllKakaoSentList(KakaoSentVO kakaoSentVO) throws Exception{
|
| 43 | 121 |
|
| 44 | 122 |
List<KakaoSentVO> resultList = new ArrayList<KakaoSentVO>(); |
| 45 | 123 |
|
| 46 |
- String listType = kakaoSentVO.getListType(); |
|
| 47 |
- String stateType = kakaoSentVO.getStateType(); |
|
| 124 |
+ resultList = kakaoSentDAO.selectAllKakaoSentList_advc(kakaoSentVO); |
|
| 48 | 125 |
|
| 49 |
- if(stateType.equals("fail")) {
|
|
| 50 |
- |
|
| 51 |
- listType = "privateList"; |
|
| 52 |
- |
|
| 53 |
- } |
|
| 54 |
- |
|
| 55 |
- System.out.println("listType : "+ listType);
|
|
| 56 |
- if(listType.equals("groupList")) {//전송건별 리스트 불러오기
|
|
| 57 |
- |
|
| 58 |
- resultList = kakaoSentDAO.selectAllKakaoSentList(kakaoSentVO); |
|
| 59 |
- |
|
| 60 |
- }else {//개인별 리스트 불러오기
|
|
| 61 |
- |
|
| 62 |
- resultList = kakaoSentDAO.selectAllPrivateKakaoSentList(kakaoSentVO); |
|
| 63 |
- |
|
| 64 |
- } |
|
| 126 |
+ //totPrice 계산 및 상태코드 set |
|
| 127 |
+ resultList = resultList.stream().map(t -> setPriceNCode(t)).collect(Collectors.toList()); |
|
| 65 | 128 |
|
| 66 | 129 |
return resultList; |
| 67 | 130 |
} |
... | ... | @@ -149,5 +212,229 @@ |
| 149 | 212 |
|
| 150 | 213 |
return kakaoSentDAO.selectReservKakaoSentList(kakaoSentVO); |
| 151 | 214 |
} |
| 215 |
+ |
|
| 216 |
+ @Override |
|
| 217 |
+ public KakaoSentDetailVO selectKakaoSentDetailView(KakaoSentDetailVO kakaoSentDetailVO) throws Exception{
|
|
| 218 |
+ |
|
| 219 |
+ KakaoSentDetailVO resultVO = kakaoSentDAO.selectKakaoSentDetailView(kakaoSentDetailVO); |
|
| 220 |
+ |
|
| 221 |
+ int total = Integer.parseInt(resultVO.getMsgGroupCnt()); // 전체 건수 |
|
| 222 |
+ int success = 0; // 성공 건수 |
|
| 223 |
+ int waiting = 0; // 대기 건수 |
|
| 224 |
+ int failed = 0; // 실패 건수 |
|
| 225 |
+ if("Y".equals(resultVO.getBizKakaoResendYn())) {
|
|
| 226 |
+ success = resultVO.getSuccessCount() + resultVO.getKakaoResendSuccCount(); |
|
| 227 |
+ failed = resultVO.getKakaoResendFailCount(); |
|
| 228 |
+ }else {
|
|
| 229 |
+ success = resultVO.getSuccessCount(); |
|
| 230 |
+ failed = resultVO.getFailCount(); |
|
| 231 |
+ } |
|
| 232 |
+ waiting = resultVO.getWaitCount(); // 대기 건수 |
|
| 233 |
+ |
|
| 234 |
+ String successPct = total > 0 ? String.format("%.1f%%", (success / (double) total) * 100) : "0.0%";
|
|
| 235 |
+ String waitingPct = total > 0 ? String.format("%.1f%%", (waiting / (double) total) * 100) : "0.0%";
|
|
| 236 |
+ String failedPct = total > 0 ? String.format("%.1f%%", (failed / (double) total) * 100) : "0.0%";
|
|
| 237 |
+ |
|
| 238 |
+ resultVO.setSuccessPct(successPct); |
|
| 239 |
+ resultVO.setFailedPct(waitingPct); |
|
| 240 |
+ resultVO.setWaitingPct(failedPct); |
|
| 241 |
+ |
|
| 242 |
+ resultVO.setTotPrice(this.priceProc(resultVO.getSuccessPrice(), resultVO.getKakaoResendSuccPrice())); |
|
| 243 |
+ |
|
| 244 |
+ resultVO = this.codeProc(resultVO); |
|
| 245 |
+ |
|
| 246 |
+ // 분할문자인 경우 |
|
| 247 |
+ if("Y".equals(resultVO.getDivideYn())) {
|
|
| 248 |
+ String divideText = calculateBatchInfo(resultVO); |
|
| 249 |
+ resultVO.setDivideText(divideText); |
|
| 250 |
+ } |
|
| 251 |
+ |
|
| 252 |
+ return resultVO; |
|
| 253 |
+ } |
|
| 254 |
+ |
|
| 255 |
+ //발송 관리 문자발송 내용 상세보기 팝업 => 문자내용(MJ_MSG_DATA) |
|
| 256 |
+ public MjonKakaoATVO selectKakaoSentDetailViewPhoneAjax(MjonKakaoATVO kakaoSentVO) throws Exception{
|
|
| 257 |
+ |
|
| 258 |
+ return kakaoSentDAO.selectKakaoSentDetailViewPhoneAjax(kakaoSentVO); |
|
| 259 |
+ } |
|
| 260 |
+ |
|
| 261 |
+ |
|
| 262 |
+ // 공통코드 ITN057에 대한 코드화 진행 |
|
| 263 |
+ /* |
|
| 264 |
+ * CODE_ID CODE CODE_NM CODE_DC |
|
| 265 |
+ * ITN057 01 진행중 진행중 |
|
| 266 |
+ * ITN057 02 완료 완료출해야함 |
|
| 267 |
+ * ITN057 03 예약대기 예약대기(발송전) 버튼으로 노출해야함 |
|
| 268 |
+ * ITN057 04 - 예약취소 ( - 으로 노출 ) |
|
| 269 |
+ * */ |
|
| 270 |
+ private KakaoSentVO setPriceNCode(KakaoSentVO result) {
|
|
| 271 |
+ |
|
| 272 |
+ //성공 건수 세팅 |
|
| 273 |
+ KakaoSentVO eachCnt = new KakaoSentVO(); |
|
| 274 |
+ eachCnt.setMsgGroupId(result.getMsgGroupId()); |
|
| 275 |
+ try {
|
|
| 276 |
+ eachCnt = kakaoSentDAO.selectKakaoSentCntEachCnt_advc(eachCnt); |
|
| 277 |
+ } catch (Exception e) {
|
|
| 278 |
+ System.out.println("setPriceNCode error!!");
|
|
| 279 |
+ } |
|
| 280 |
+ |
|
| 281 |
+ result.setSuccessCount(eachCnt.getSuccessCount()); |
|
| 282 |
+ result.setWaitCount(eachCnt.getWaitCount()); |
|
| 283 |
+ result.setFailCount(eachCnt.getFailCount()); |
|
| 284 |
+ result.setKakaoResendSuccCount(eachCnt.getKakaoResendSuccCount()); |
|
| 285 |
+ result.setKakaoResendFailCount(eachCnt.getKakaoResendFailCount()); |
|
| 286 |
+ |
|
| 287 |
+ |
|
| 288 |
+ //완료상태 시작 |
|
| 289 |
+ result = this.codeProc(result); |
|
| 290 |
+ |
|
| 291 |
+ //완료상태 끝 |
|
| 292 |
+ //======================================================= |
|
| 293 |
+ |
|
| 294 |
+ //총금액 시작 |
|
| 295 |
+ result.setTotPrice(this.priceProc(eachCnt.getSuccessPrice(), eachCnt.getKakaoResendSuccPrice())); |
|
| 296 |
+ |
|
| 297 |
+ |
|
| 298 |
+ return result; |
|
| 299 |
+ |
|
| 300 |
+ } |
|
| 301 |
+ |
|
| 302 |
+ private String priceProc(int successPrice, int kakaoResendSuccPrice) {
|
|
| 303 |
+ |
|
| 304 |
+ String totPrice = "-"; |
|
| 305 |
+ |
|
| 306 |
+ //총금액 시작 |
|
| 307 |
+ //======================================================= |
|
| 308 |
+ // TotPrice : 성공건수에 대한 금액 곱하기 |
|
| 309 |
+ BigDecimal atPrice = new BigDecimal(successPrice); |
|
| 310 |
+ BigDecimal kakaoResendPrice = new BigDecimal(kakaoResendSuccPrice); |
|
| 311 |
+ BigDecimal totalPrice = atPrice.add(kakaoResendPrice); |
|
| 312 |
+ // 소수점 한 자리로 설정 (반올림)// totalPrice 값을 소수점 한 자리까지 반올림하여 roundedTotalPrice에 저장 |
|
| 313 |
+ // RoundingMode.HALF_UP: 반올림 방식으로, 소수점 기준 5 이상이면 올림, 그렇지 않으면 내림 |
|
| 314 |
+ BigDecimal roundedTotalPrice = totalPrice.setScale(1, RoundingMode.HALF_UP); |
|
| 315 |
+ |
|
| 316 |
+ // roundedTotalPrice가 0인지 확인 |
|
| 317 |
+ // BigDecimal.compareTo(BigDecimal.ZERO)는 값을 비교하는 메서드 |
|
| 318 |
+ // 결과: |
|
| 319 |
+ // - 반환 값이 0이면 두 값이 같음 |
|
| 320 |
+ // - 반환 값이 음수이면 roundedTotalPrice가 0보다 작음 |
|
| 321 |
+ // - 반환 값이 양수이면 roundedTotalPrice가 0보다 큼 |
|
| 322 |
+ if (roundedTotalPrice.compareTo(BigDecimal.ZERO) == 0) {
|
|
| 323 |
+ // roundedTotalPrice 값이 0이면, "-" 문자열을 totPrice에 설정 |
|
| 324 |
+ totPrice = "-"; |
|
| 325 |
+ } else {
|
|
| 326 |
+ // roundedTotalPrice 값이 0이 아닌 경우 |
|
| 327 |
+ // 반올림된 BigDecimal 값을 toPlainString()을 사용하여 문자열로 변환 후 totPrice에 설정 |
|
| 328 |
+ // toPlainString(): 지수 표기법 없이 일반적인 문자열 형태로 반환 |
|
| 329 |
+ totPrice = roundedTotalPrice.toPlainString(); |
|
| 330 |
+ } |
|
| 331 |
+ //총금액 끝 |
|
| 332 |
+ //======================================================= |
|
| 333 |
+ |
|
| 334 |
+ |
|
| 335 |
+ return totPrice; |
|
| 336 |
+ } |
|
| 337 |
+ |
|
| 338 |
+ private KakaoSentVO codeProc(KakaoSentVO result) {
|
|
| 339 |
+ //======================================================= |
|
| 340 |
+ String returnCode; |
|
| 341 |
+ if ("Y".equals(result.getReserveCYn())) {
|
|
| 342 |
+ returnCode = "04"; // 예약취소 코드 |
|
| 343 |
+ } else if ( |
|
| 344 |
+ "Y".equals(result.getReserveYn()) |
|
| 345 |
+ && "N".equals(result.getReserveCYn()) |
|
| 346 |
+ && Integer.valueOf(result.getMsgGroupCnt()).equals(result.getWaitCount()) |
|
| 347 |
+ && Integer.valueOf(result.getDiffMin()) < -5 // 예약 시간이 5분 이상인 것들만 |
|
| 348 |
+ ) {
|
|
| 349 |
+ returnCode = "03"; // 예약대기 코드 ( 예약취소 버튼 노출 ) |
|
| 350 |
+ } else if ( |
|
| 351 |
+ //대체문자 발송 Y일때 |
|
| 352 |
+ ("Y".equals(result.getBizKakaoResendYn())
|
|
| 353 |
+ //알림톡 발송 총건수 == 알림톡 발송 성공건 + 알림톡 발송 실패건 |
|
| 354 |
+ && Integer.valueOf(result.getMsgGroupCnt()).equals(result.getSuccessCount() + result.getFailCount()) |
|
| 355 |
+ //알림톡 발송 실패건 == 대체문자 발송 성공건 + 대체문자 발송 실패건 |
|
| 356 |
+ && result.getFailCount() == (result.getKakaoResendSuccCount() + result.getKakaoResendFailCount()) |
|
| 357 |
+ ) |
|
| 358 |
+ || |
|
| 359 |
+ //대체문자 발송 N일때 |
|
| 360 |
+ ("N".equals(result.getBizKakaoResendYn())
|
|
| 361 |
+ //알림톡 발송 총건수 == 알림톡 발송 성공건 + 알림톡 발송 실패건 |
|
| 362 |
+ && Integer.valueOf(result.getMsgGroupCnt()).equals(result.getSuccessCount() + result.getFailCount())) |
|
| 363 |
+ ) {
|
|
| 364 |
+ returnCode = "02"; // 완료 코드 |
|
| 365 |
+ } else {
|
|
| 366 |
+ returnCode = "01"; // 진행중 코드 |
|
| 367 |
+ } |
|
| 368 |
+ |
|
| 369 |
+ result.setStatusCd(returnCode); |
|
| 370 |
+ |
|
| 371 |
+ return result; |
|
| 372 |
+ } |
|
| 373 |
+ private KakaoSentDetailVO codeProc(KakaoSentDetailVO result) {
|
|
| 374 |
+ //======================================================= |
|
| 375 |
+ String returnCode; |
|
| 376 |
+ if ("Y".equals(result.getReserveCYn())) {
|
|
| 377 |
+ returnCode = "04"; // 예약취소 코드 |
|
| 378 |
+ } else if ( |
|
| 379 |
+ "Y".equals(result.getReserveYn()) |
|
| 380 |
+ && "N".equals(result.getReserveCYn()) |
|
| 381 |
+ && Integer.valueOf(result.getMsgGroupCnt()).equals(result.getWaitCount()) |
|
| 382 |
+ && Integer.valueOf(result.getDiffMin()) < -5 // 예약 시간이 5분 이상인 것들만 |
|
| 383 |
+ ) {
|
|
| 384 |
+ returnCode = "03"; // 예약대기 코드 ( 예약취소 버튼 노출 ) |
|
| 385 |
+ } else if ( |
|
| 386 |
+ //대체문자 발송 Y일때 |
|
| 387 |
+ ("Y".equals(result.getBizKakaoResendYn())
|
|
| 388 |
+ //알림톡 발송 총건수 == 알림톡 발송 성공건 + 알림톡 발송 실패건 |
|
| 389 |
+ && Integer.valueOf(result.getMsgGroupCnt()).equals(result.getSuccessCount() + result.getFailCount()) |
|
| 390 |
+ //알림톡 발송 실패건 == 대체문자 발송 성공건 + 대체문자 발송 실패건 |
|
| 391 |
+ && result.getFailCount() == (result.getKakaoResendSuccCount() + result.getKakaoResendFailCount()) |
|
| 392 |
+ ) |
|
| 393 |
+ || |
|
| 394 |
+ //대체문자 발송 N일때 |
|
| 395 |
+ ("N".equals(result.getBizKakaoResendYn())
|
|
| 396 |
+ //알림톡 발송 총건수 == 알림톡 발송 성공건 + 알림톡 발송 실패건 |
|
| 397 |
+ && Integer.valueOf(result.getMsgGroupCnt()).equals(result.getSuccessCount() + result.getFailCount())) |
|
| 398 |
+ ) {
|
|
| 399 |
+ returnCode = "02"; // 완료 코드 |
|
| 400 |
+ } else {
|
|
| 401 |
+ returnCode = "01"; // 진행중 코드 |
|
| 402 |
+ } |
|
| 403 |
+ |
|
| 404 |
+ result.setStatusCd(returnCode); |
|
| 405 |
+ |
|
| 406 |
+ return result; |
|
| 407 |
+ } |
|
| 408 |
+ |
|
| 409 |
+ private String calculateBatchInfo(KakaoSentDetailVO resultVO) {
|
|
| 410 |
+ |
|
| 411 |
+ String msgGroupId = resultVO.getMsgGroupId(); |
|
| 412 |
+ |
|
| 413 |
+ |
|
| 414 |
+ List<String> requestTimes = kakaoSentDAO.findByReqDateWhereMsgGroupId(msgGroupId); |
|
| 415 |
+ |
|
| 416 |
+ DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.S");
|
|
| 417 |
+ Map<LocalDateTime, Integer> timeCountMap = new LinkedHashMap<>(); |
|
| 418 |
+ |
|
| 419 |
+ // REQ_DATE 그룹화 (같은 시간대 몇 건인지) |
|
| 420 |
+ for (String timeStr : requestTimes) {
|
|
| 421 |
+ LocalDateTime time = LocalDateTime.parse(timeStr, formatter); |
|
| 422 |
+ timeCountMap.put(time, timeCountMap.getOrDefault(time, 0) + 1); |
|
| 423 |
+ } |
|
| 424 |
+ |
|
| 425 |
+ // 가장 첫 번째 시간 & 간격 계산 |
|
| 426 |
+ List<LocalDateTime> sortedKeys = new ArrayList<>(timeCountMap.keySet()); |
|
| 427 |
+ if (sortedKeys.size() < 2) {
|
|
| 428 |
+ return "데이터 부족 (분석 불가)"; |
|
| 429 |
+ } |
|
| 430 |
+ |
|
| 431 |
+ int batchSize = timeCountMap.get(sortedKeys.get(0)); // 한 번에 보낸 건수 |
|
| 432 |
+ int intervalMinutes = sortedKeys.get(1).getMinute() - sortedKeys.get(0).getMinute(); // 시간 간격 계산 |
|
| 433 |
+// int batchCount = sortedKeys.size(); // 총 몇 번 보냈는지 |
|
| 434 |
+ |
|
| 435 |
+// return String.format("%,d건씩 %d분 간격 (%d회 발송)", batchSize, intervalMinutes, batchCount);
|
|
| 436 |
+ return String.format("%,d건씩 %d분 간격", batchSize, intervalMinutes);
|
|
| 437 |
+ |
|
| 438 |
+ } |
|
| 152 | 439 |
|
| 153 | 440 |
} |
--- src/main/java/itn/let/kakao/user/sent/web/KakaoSentController.java
+++ src/main/java/itn/let/kakao/user/sent/web/KakaoSentController.java
... | ... | @@ -8,6 +8,7 @@ |
| 8 | 8 |
import java.util.Date; |
| 9 | 9 |
import java.util.List; |
| 10 | 10 |
import java.util.Locale; |
| 11 |
+import java.util.Map; |
|
| 11 | 12 |
|
| 12 | 13 |
import javax.annotation.Resource; |
| 13 | 14 |
import javax.servlet.http.HttpServletRequest; |
... | ... | @@ -26,6 +27,8 @@ |
| 26 | 27 |
import org.slf4j.Logger; |
| 27 | 28 |
import org.slf4j.LoggerFactory; |
| 28 | 29 |
import org.springframework.beans.factory.annotation.Autowired; |
| 30 |
+import org.springframework.http.HttpStatus; |
|
| 31 |
+import org.springframework.http.ResponseEntity; |
|
| 29 | 32 |
import org.springframework.stereotype.Controller; |
| 30 | 33 |
import org.springframework.ui.ModelMap; |
| 31 | 34 |
import org.springframework.web.bind.annotation.ModelAttribute; |
... | ... | @@ -43,6 +46,7 @@ |
| 43 | 46 |
import itn.let.kakao.kakaoComm.KakaoReturnVO; |
| 44 | 47 |
import itn.let.kakao.kakaoComm.KakaoVO; |
| 45 | 48 |
import itn.let.kakao.kakaoComm.kakaoApi.KakaoApiTemplate; |
| 49 |
+import itn.let.kakao.user.sent.service.KakaoSentDetailVO; |
|
| 46 | 50 |
import itn.let.kakao.user.sent.service.KakaoSentService; |
| 47 | 51 |
import itn.let.kakao.user.sent.service.KakaoSentVO; |
| 48 | 52 |
|
... | ... | @@ -82,26 +86,26 @@ |
| 82 | 86 |
//전체 발송 건수 통계 불러오기 |
| 83 | 87 |
kakaoSentVO.setMsgType("");
|
| 84 | 88 |
|
| 85 |
- List<KakaoSentVO> totalMsgCnt = kakaoSentService.selectKakaoSentCntAll(kakaoSentVO); |
|
| 86 |
- model.addAttribute("totalMsgCnt", totalMsgCnt);
|
|
| 87 |
- |
|
| 88 |
- List<KakaoSentVO> atCnt = new ArrayList<KakaoSentVO>(); |
|
| 89 |
- List<KakaoSentVO> ftCnt = new ArrayList<KakaoSentVO>(); |
|
| 90 |
- |
|
| 91 |
- |
|
| 92 |
- totalMsgCnt.forEach(t->{
|
|
| 93 |
- if (Integer.parseInt(t.getFilePath1())>0) {
|
|
| 94 |
- atCnt.add(t); |
|
| 95 |
- } else if (Integer.parseInt(t.getFilePath2())>0) {
|
|
| 96 |
- ftCnt.add(t); |
|
| 97 |
- } |
|
| 98 |
- }); |
|
| 99 |
- |
|
| 100 |
- //알림톡 성공건, 실패건 불러오기 |
|
| 101 |
- model.addAttribute("atCnt", atCnt);
|
|
| 102 |
- |
|
| 103 |
- //친구톡 성공건, 실패건 불러오기 |
|
| 104 |
- model.addAttribute("ftCnt", ftCnt);
|
|
| 89 |
+// List<KakaoSentVO> totalMsgCnt = kakaoSentService.selectKakaoSentCntAll(kakaoSentVO); |
|
| 90 |
+// model.addAttribute("totalMsgCnt", totalMsgCnt);
|
|
| 91 |
+// |
|
| 92 |
+// List<KakaoSentVO> atCnt = new ArrayList<KakaoSentVO>(); |
|
| 93 |
+// List<KakaoSentVO> ftCnt = new ArrayList<KakaoSentVO>(); |
|
| 94 |
+// |
|
| 95 |
+// |
|
| 96 |
+// totalMsgCnt.forEach(t->{
|
|
| 97 |
+// if (Integer.parseInt(t.getFilePath1())>0) {
|
|
| 98 |
+// atCnt.add(t); |
|
| 99 |
+// } else if (Integer.parseInt(t.getFilePath2())>0) {
|
|
| 100 |
+// ftCnt.add(t); |
|
| 101 |
+// } |
|
| 102 |
+// }); |
|
| 103 |
+// |
|
| 104 |
+// //알림톡 성공건, 실패건 불러오기 |
|
| 105 |
+// model.addAttribute("atCnt", atCnt);
|
|
| 106 |
+// |
|
| 107 |
+// //친구톡 성공건, 실패건 불러오기 |
|
| 108 |
+// model.addAttribute("ftCnt", ftCnt);
|
|
| 105 | 109 |
|
| 106 | 110 |
// 검색 리스트 불러오기 |
| 107 | 111 |
if(kakaoSentVO.getPageUnit() != 10) kakaoSentVO.setPageUnit(kakaoSentVO.getPageUnit()); |
... | ... | @@ -193,7 +197,7 @@ |
| 193 | 197 |
List<KakaoSentVO> resultAllSentList = kakaoSentService.selectAllKakaoSentList(kakaoSentVO); |
| 194 | 198 |
System.out.println("??");
|
| 195 | 199 |
model.addAttribute("resultAllSentList", resultAllSentList);
|
| 196 |
- model.addAttribute("resultAllSentCnt", resultAllSentList.size());
|
|
| 200 |
+// model.addAttribute("resultAllSentCnt", resultAllSentList.size());
|
|
| 197 | 201 |
|
| 198 | 202 |
model.addAttribute("searchKeyword", kakaoSentVO.getSearchKeyword());
|
| 199 | 203 |
paginationInfo.setTotalRecordCount( resultAllSentList.size()> 0 ? (Integer.parseInt((resultAllSentList.get(0)).getTotMsgCnt())) : 0); |
... | ... | @@ -984,5 +988,105 @@ |
| 984 | 988 |
|
| 985 | 989 |
} |
| 986 | 990 |
|
| 991 |
+ @RequestMapping(value= {"/web/kakao/sent/selectKakaoSentViewTotalSumAjax.do"})
|
|
| 992 |
+ public ResponseEntity<?> selectKakaoSentViewTotalSumAjax( |
|
| 993 |
+ KakaoSentVO kakaoSentVO |
|
| 994 |
+ ) throws Exception{
|
|
| 995 |
+ //로그인 권한정보 불러오기 |
|
| 996 |
+ LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; |
|
| 997 |
+ String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); |
|
| 998 |
+ if(loginVO == null) {
|
|
| 999 |
+// return "redirect:/web/user/login/login.do"; |
|
| 1000 |
+ } |
|
| 1001 |
+ |
|
| 1002 |
+ kakaoSentVO.setUserId(userId); |
|
| 1003 |
+ |
|
| 1004 |
+ Map<String, Object> returnMap = kakaoSentService.selectKakaoSentCntAll_Advc(kakaoSentVO); |
|
| 1005 |
+ |
|
| 1006 |
+ return new ResponseEntity<>(returnMap, HttpStatus.OK); |
|
| 1007 |
+ } |
|
| 987 | 1008 |
|
| 1009 |
+ /** |
|
| 1010 |
+ * 발송관리 상세화면 |
|
| 1011 |
+ * @param searchVO |
|
| 1012 |
+ * @param model |
|
| 1013 |
+ * @return "/web/kakao/sent/selectKakaoSentDetailView.do" |
|
| 1014 |
+ * @throws Exception |
|
| 1015 |
+ */ |
|
| 1016 |
+ @RequestMapping(value= {"/web/kakao/sent/selectKakaoSentDetailView.do"})
|
|
| 1017 |
+ public String selectKakaoSentDetailView(@ModelAttribute("searchVO") KakaoSentDetailVO kakaoSentDetailVO,
|
|
| 1018 |
+ RedirectAttributes redirectAttributes, ModelMap model) throws Exception{
|
|
| 1019 |
+ //로그인 권한정보 불러오기 |
|
| 1020 |
+ LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; |
|
| 1021 |
+ String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); |
|
| 1022 |
+ if(loginVO == null) {
|
|
| 1023 |
+ return "redirect:/web/user/login/login.do"; |
|
| 1024 |
+ } |
|
| 1025 |
+ |
|
| 1026 |
+ kakaoSentDetailVO.setUserId(userId); |
|
| 1027 |
+ |
|
| 1028 |
+ model.addAttribute("result", kakaoSentService.selectKakaoSentDetailView(kakaoSentDetailVO));
|
|
| 1029 |
+ |
|
| 1030 |
+ return "web/kakao/sent/KakaoSentDetailView"; |
|
| 1031 |
+ } |
|
| 1032 |
+ |
|
| 1033 |
+ |
|
| 1034 |
+ /** |
|
| 1035 |
+ * @methodName : selectMsgSentDetailDataAjax |
|
| 1036 |
+ * @author : 이호영 |
|
| 1037 |
+ * @date : 2023.03.06 |
|
| 1038 |
+ * @description : 알림톡 전송 - 내용 상세 팝업 [전송건별] |
|
| 1039 |
+ * @param mjonKakaoATVO |
|
| 1040 |
+ * @param model |
|
| 1041 |
+ * @return |
|
| 1042 |
+ * @throws Exception |
|
| 1043 |
+ */ |
|
| 1044 |
+ @RequestMapping(value= {"/web/kakao/sent/selectKakaoSentDetailViewPhoneAjax.do"})
|
|
| 1045 |
+ public String selectKakaoSentDetailViewPhoneAjax(@ModelAttribute("searchVO") MjonKakaoATVO mjonKakaoATVO, ModelMap model) throws Exception{
|
|
| 1046 |
+ |
|
| 1047 |
+ //로그인 권한정보 불러오기 |
|
| 1048 |
+ LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; |
|
| 1049 |
+ String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); |
|
| 1050 |
+ mjonKakaoATVO.setUserId(userId); |
|
| 1051 |
+ |
|
| 1052 |
+ |
|
| 1053 |
+ |
|
| 1054 |
+ //발송 관리 문자발송 내용 상세보기 팝업 => 문자내용(MJ_MSG_DATA) |
|
| 1055 |
+ MjonKakaoATVO mjonKakaoATResultVO = kakaoSentService.selectKakaoSentDetailDataAjax(mjonKakaoATVO); |
|
| 1056 |
+ // 대체문자 엔터키 치환 |
|
| 1057 |
+ mjonKakaoATResultVO.setSmsTxt(StringUtil2.replaceBR(mjonKakaoATResultVO.getSmsTxt())); |
|
| 1058 |
+ model.addAttribute("resultMsgDetail", mjonKakaoATResultVO);
|
|
| 1059 |
+ |
|
| 1060 |
+ String msgType = mjonKakaoATResultVO.getMsgType(); |
|
| 1061 |
+ |
|
| 1062 |
+ if(msgType.equals("8")) {//카카오 알림톡인 경우 상세정보 처리
|
|
| 1063 |
+ |
|
| 1064 |
+ // 템플릿 api 가져오기 |
|
| 1065 |
+ KakaoVO kakaoVO = new KakaoVO(); |
|
| 1066 |
+ kakaoVO.setSenderKey(mjonKakaoATResultVO.getMsgNoticetalkSenderKey()); |
|
| 1067 |
+ kakaoVO.setTemplateCode(mjonKakaoATResultVO.getMsgNoticetalkTmpKey()); |
|
| 1068 |
+ |
|
| 1069 |
+ KakaoReturnVO kakaoTemplateInfo =kakaoApiTemplate.selectKakaoApiTemplateDetail(kakaoVO); |
|
| 1070 |
+ |
|
| 1071 |
+ model.addAttribute("kakaoTemplateInfo", kakaoTemplateInfo);
|
|
| 1072 |
+ // //템플릿 api 가져오기 |
|
| 1073 |
+ |
|
| 1074 |
+ }else if(msgType.equals("9")) {//카카오 친구톡인 경우 상세정보 처리
|
|
| 1075 |
+ |
|
| 1076 |
+ //String smsTxt = mjonKakaoATResultVO.getSmsTxt(); |
|
| 1077 |
+ |
|
| 1078 |
+ KakaoReturnVO kakaoTemplateInfo = getKakaoFTSendTemplateInfo(mjonKakaoATResultVO); |
|
| 1079 |
+ //kakaoTemplateInfo.setTemplateContent(smsTxt); |
|
| 1080 |
+ |
|
| 1081 |
+ model.addAttribute("kakaoTemplateInfo", kakaoTemplateInfo);
|
|
| 1082 |
+ |
|
| 1083 |
+ }else {
|
|
| 1084 |
+ |
|
| 1085 |
+ model.addAttribute("kakaoTemplateInfo", "");
|
|
| 1086 |
+ |
|
| 1087 |
+ } |
|
| 1088 |
+ |
|
| 1089 |
+ model.addAttribute("msgType", msgType);
|
|
| 1090 |
+ return "web/kakao/sent/KakaoSentDetailPopAjax"; |
|
| 1091 |
+ } |
|
| 988 | 1092 |
} |
--- src/main/resources/egovframework/sqlmap/let/mjo/kakao/KakaoSent_SQL_Mysql.xml
+++ src/main/resources/egovframework/sqlmap/let/mjo/kakao/KakaoSent_SQL_Mysql.xml
... | ... | @@ -4,11 +4,13 @@ |
| 4 | 4 |
========= ======= ================================================= |
| 5 | 5 |
2023.02.17 안주영 |
| 6 | 6 |
--> |
| 7 |
-<!DOCTYPE sqlMap PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN" "http://www.ibatis.com/dtd/sql-map-config-2.dtd"> |
|
| 7 |
+<!DOCTYPE sqlMap PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-2.dtd" > |
|
| 8 | 8 |
<sqlMap namespace="KakaoSent"> |
| 9 | 9 |
<typeAlias alias="kakaoSentVO" type="itn.let.kakao.user.sent.service.KakaoSentVO"/> |
| 10 | 10 |
<typeAlias alias="mjonKakaoATVO" type="itn.let.kakao.admin.kakaoAt.service.MjonKakaoATVO"/> |
| 11 | 11 |
<typeAlias alias="kakaoAtStatVO" type="itn.let.kakao.admin.kakaoAt.service.MjonKakaoAtStatVO"/> |
| 12 |
+ <typeAlias alias="kakaoSentDetailVO" type="itn.let.kakao.user.sent.service.KakaoSentDetailVO"/> |
|
| 13 |
+ |
|
| 12 | 14 |
|
| 13 | 15 |
<!-- 공통 쿼리 부분 문자 발송 관련 --> |
| 14 | 16 |
<sql id="KakaoSentDAO.selectJoinQuery"> |
... | ... | @@ -1350,4 +1352,559 @@ |
| 1350 | 1352 |
) M2 |
| 1351 | 1353 |
</select> |
| 1352 | 1354 |
|
| 1355 |
+ <!-- 전체 발송결과 조회 (그룹별)--> |
|
| 1356 |
+ <select id="KakaoSentDAO.selectAllKakaoSentList_advc" parameterClass="kakaoSentVO" resultClass="kakaoSentVO"> |
|
| 1357 |
+ /* KakaoSentDAO.selectAllKakaoSentList_advc */ |
|
| 1358 |
+ SELECT t1.totMsgCnt, |
|
| 1359 |
+ t1.userId, |
|
| 1360 |
+ t1.msgGroupId, |
|
| 1361 |
+ t1.msgGroupCnt, |
|
| 1362 |
+ t1.smsTxt, |
|
| 1363 |
+ t1.subject, |
|
| 1364 |
+ t1.subjectChkYn, |
|
| 1365 |
+ t1.regDate, |
|
| 1366 |
+ t1.reqDate, |
|
| 1367 |
+ t1.delayOrgTime, |
|
| 1368 |
+ t1.callFrom, |
|
| 1369 |
+ t1.totPrice, |
|
| 1370 |
+ t1.eachPrice, |
|
| 1371 |
+ t1.msgType, |
|
| 1372 |
+ t1.fileCnt, |
|
| 1373 |
+ t1.agentCode, |
|
| 1374 |
+ t1.canceldate, |
|
| 1375 |
+ t1.delFlag, |
|
| 1376 |
+ t1.sendKind, |
|
| 1377 |
+ t1.msgKind, |
|
| 1378 |
+ t1.delayYn, |
|
| 1379 |
+ t1.delayCompleteYn, |
|
| 1380 |
+ t1.reserveYn, |
|
| 1381 |
+ t1.reserveCYn, |
|
| 1382 |
+ t1.diffMin, |
|
| 1383 |
+ t1.atDelayYn, |
|
| 1384 |
+ t1.atDelayCompleteYn, |
|
| 1385 |
+ t1.msgNoticetalkSenderKey, |
|
| 1386 |
+ t1.bizKakaoResendYn, |
|
| 1387 |
+ t1.atDelayOrgTime |
|
| 1388 |
+ FROM ( |
|
| 1389 |
+ SELECT COUNT(B.USER_ID) OVER() AS totMsgCnt, |
|
| 1390 |
+ B.USER_ID AS userId , |
|
| 1391 |
+ B.MSG_GROUP_ID AS msgGroupId , |
|
| 1392 |
+ B.MSG_GROUP_CNT AS msgGroupCnt , |
|
| 1393 |
+ B.SMS_TXT AS smsTxt , |
|
| 1394 |
+ B.SUBJECT AS subject , |
|
| 1395 |
+ B.SUBJECT_CHK_YN AS subjectChkYn , |
|
| 1396 |
+ B.REGDATE AS regDate , |
|
| 1397 |
+ B.REQ_DATE AS reqDate , |
|
| 1398 |
+ ( CASE |
|
| 1399 |
+ WHEN B.DELAY_YN = 'Y' |
|
| 1400 |
+ AND B.DELAY_COMPLETE_YN = 'N' |
|
| 1401 |
+ THEN DATE_ADD(B.REQ_DATE, INTERVAL -30 MINUTE) |
|
| 1402 |
+ ELSE B.REQ_DATE |
|
| 1403 |
+ END ) AS delayOrgTime , |
|
| 1404 |
+ B.CALL_FROM AS callFrom , |
|
| 1405 |
+ B.TOT_PRICE AS totPrice , |
|
| 1406 |
+ B.EACH_PRICE AS eachPrice , |
|
| 1407 |
+ B.MSG_TYPE AS msgType , |
|
| 1408 |
+ B.FILE_CNT AS fileCnt , |
|
| 1409 |
+ B.AGENT_CODE AS agentCode , |
|
| 1410 |
+ B.RESERVE_C_YN AS reserveCYn , |
|
| 1411 |
+ B.CANCELDATE AS canceldate , |
|
| 1412 |
+ B.DEL_FLAG AS delFlag , |
|
| 1413 |
+ B.SEND_KIND AS sendKind , |
|
| 1414 |
+ B.MSG_KIND AS msgKind , |
|
| 1415 |
+ B.DELAY_YN AS delayYn , |
|
| 1416 |
+ B.DELAY_COMPLETE_YN AS delayCompleteYn , |
|
| 1417 |
+ B.RESERVE_YN AS reserveYn , |
|
| 1418 |
+ TIMESTAMPDIFF(minute, CAST(DATE_FORMAT(B.REQ_DATE, '%Y-%m-%d %H:%i') AS CHAR), DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i')) AS diffMin, |
|
| 1419 |
+ B.AT_DELAY_YN AS atDelayYn, |
|
| 1420 |
+ B.AT_DELAY_COMPLETE_YN AS atDelayCompleteYn, |
|
| 1421 |
+ A.MSG_NOTICETALK_SENDER_KEY AS msgNoticetalkSenderKey, |
|
| 1422 |
+ A.BIZ_KAKAO_RESEND_YN AS bizKakaoResendYn, |
|
| 1423 |
+ IF(B.AT_DELAY_YN = 'Y' and B.AT_DELAY_COMPLETE_YN = 'N', DATE_ADD(B.REQ_DATE, INTERVAL -30 MINUTE), B.REQ_DATE) AS atDelayOrgTime |
|
| 1424 |
+ FROM MJ_MSG_DATA A |
|
| 1425 |
+ JOIN MJ_MSG_GROUP_DATA B |
|
| 1426 |
+ ON A.MSG_GROUP_ID = B.MSG_GROUP_ID |
|
| 1427 |
+ WHERE ( |
|
| 1428 |
+ B.DEL_FLAG = 'N' OR B.DEL_FLAG IS NULL |
|
| 1429 |
+ ) |
|
| 1430 |
+ AND A.DEL_FLAG = 'N' |
|
| 1431 |
+<!-- AND B.REQ_DATE <![CDATA[ <= ]]> DATE_ADD(NOW(), INTERVAL 60 MINUTE) --> |
|
| 1432 |
+ AND B.USER_ID = #userId# |
|
| 1433 |
+ <isNotEmpty property="startDate"> |
|
| 1434 |
+ AND DATE_FORMAT(B.REGDATE, '%Y-%m-%d') <![CDATA[ >= ]]> DATE_FORMAT(#startDate#, '%Y-%m-%d') |
|
| 1435 |
+ </isNotEmpty> |
|
| 1436 |
+ <isNotEmpty property="endDate"> |
|
| 1437 |
+ AND DATE_FORMAT(B.REGDATE, '%Y-%m-%d') <![CDATA[ <= ]]> DATE_FORMAT(#endDate#, '%Y-%m-%d') |
|
| 1438 |
+ </isNotEmpty> |
|
| 1439 |
+ <isNotEmpty property="tabType"> |
|
| 1440 |
+ <isEqual property="tabType" compareValue="at"> |
|
| 1441 |
+ AND A.MSG_TYPE = '8' |
|
| 1442 |
+ </isEqual> |
|
| 1443 |
+ <isEqual property="tabType" compareValue="ft"> |
|
| 1444 |
+ AND A.MSG_TYPE = '9' |
|
| 1445 |
+ </isEqual> |
|
| 1446 |
+ <isEqual property="tabType" compareValue="all"> |
|
| 1447 |
+ AND A.MSG_TYPE IN ('8','9')
|
|
| 1448 |
+ </isEqual> |
|
| 1449 |
+ </isNotEmpty> |
|
| 1450 |
+ <isEmpty property="tabType"> |
|
| 1451 |
+ AND A.MSG_TYPE IN ('8','9')
|
|
| 1452 |
+ </isEmpty> |
|
| 1453 |
+ <isNotEmpty property="stateType"> |
|
| 1454 |
+ <isEqual property="stateType" compareValue="Y"> |
|
| 1455 |
+ AND B.RESERVE_YN = 'Y' |
|
| 1456 |
+ </isEqual> |
|
| 1457 |
+ <isEqual property="stateType" compareValue="N"> |
|
| 1458 |
+ AND B.RESERVE_YN = 'N' |
|
| 1459 |
+ </isEqual> |
|
| 1460 |
+ </isNotEmpty> |
|
| 1461 |
+ GROUP BY B.MSG_GROUP_ID |
|
| 1462 |
+ ORDER BY 1=1 |
|
| 1463 |
+ <isNotEmpty property="searchSortCnd"> |
|
| 1464 |
+ <isEqual property="searchSortCnd" compareValue="curState"> |
|
| 1465 |
+ , A.CUR_STATE $searchSortOrd$ |
|
| 1466 |
+ , IF((RSLT_CODE != '7000'),'1','0') |
|
| 1467 |
+ </isEqual> |
|
| 1468 |
+ <isNotEqual property="searchSortCnd" compareValue="curState"> |
|
| 1469 |
+ ,$searchSortCnd$ |
|
| 1470 |
+ </isNotEqual> |
|
| 1471 |
+ </isNotEmpty> |
|
| 1472 |
+ <isNotEmpty property="searchSortOrd"> |
|
| 1473 |
+ $searchSortOrd$ |
|
| 1474 |
+ </isNotEmpty> |
|
| 1475 |
+ LIMIT #recordCountPerPage# |
|
| 1476 |
+ OFFSET #firstIndex# |
|
| 1477 |
+ ) t1 |
|
| 1478 |
+ </select> |
|
| 1479 |
+ |
|
| 1480 |
+ |
|
| 1481 |
+ <!-- 발송결과 상단 전광판 조회(전체, 알림톡, 친구톡) MIX 결과 수량 --> |
|
| 1482 |
+ <select id="KakaoSentDAO.selectKakaoSentCntAll_advc" parameterClass="kakaoSentVO" resultClass="kakaoSentVO"> |
|
| 1483 |
+ /* 발송결과 상단 전광판 조회(전체, 알림톡, 친구톡) MIX 결과 수량 */ |
|
| 1484 |
+ SELECT |
|
| 1485 |
+ A0.MSG_GROUP_ID AS msgGroupId |
|
| 1486 |
+ , COUNT(A0.RESULT) AS msgResultCnt |
|
| 1487 |
+ , A0.RESULT AS msgResultSts |
|
| 1488 |
+ , A0.RSLT_CODE AS rsltCode |
|
| 1489 |
+ , A0.RSLT_CODE2 AS rsltCode2 |
|
| 1490 |
+ , A0.AGENT_CODE AS agentCode |
|
| 1491 |
+ , A0.EACH_PRICE AS eachPrice |
|
| 1492 |
+ , sum(if(A0.tab1=0,0,1)) as filePath1 /* 알림톡 */ |
|
| 1493 |
+ , sum(if(A0.tab2=0,0,1)) as filePath2 /* 친구톡 */ |
|
| 1494 |
+ FROM( |
|
| 1495 |
+ SELECT |
|
| 1496 |
+ MD.MSG_ID |
|
| 1497 |
+ , MD.MSG_GROUP_ID |
|
| 1498 |
+ , MD.MSG_SEQ |
|
| 1499 |
+ , MD.CUR_STATE |
|
| 1500 |
+ , MD.SENT_DATE |
|
| 1501 |
+ , (CASE |
|
| 1502 |
+ WHEN |
|
| 1503 |
+ MD.RSLT_CODE = '7000' |
|
| 1504 |
+ THEN 'S' |
|
| 1505 |
+ WHEN |
|
| 1506 |
+ ( |
|
| 1507 |
+ MD.RSLT_CODE IS NULL |
|
| 1508 |
+ AND MD.SENT_DATE IS NULL |
|
| 1509 |
+ AND MD.RSLT_DATE IS NULL |
|
| 1510 |
+ ) |
|
| 1511 |
+ THEN 'W' |
|
| 1512 |
+ ELSE 'F' |
|
| 1513 |
+ END) AS RESULT |
|
| 1514 |
+ , MD.RSLT_CODE |
|
| 1515 |
+ , MD.RSLT_CODE2 |
|
| 1516 |
+ , MD.AGENT_CODE |
|
| 1517 |
+ , MG.EACH_PRICE |
|
| 1518 |
+ , if (MD.MSG_TYPE= '8','01','00') AS tab1 |
|
| 1519 |
+ , if (MD.MSG_TYPE= '9','01','00') AS tab2 |
|
| 1520 |
+ FROM |
|
| 1521 |
+ MJ_MSG_DATA MD |
|
| 1522 |
+ INNER JOIN |
|
| 1523 |
+ MJ_MSG_GROUP_DATA MG |
|
| 1524 |
+ ON |
|
| 1525 |
+ MD.MSG_GROUP_ID = MG.MSG_GROUP_ID |
|
| 1526 |
+ INNER JOIN |
|
| 1527 |
+ BIZ_KAKAO_PRICE BZP |
|
| 1528 |
+ ON |
|
| 1529 |
+ MG.MSG_GROUP_ID = BZP.MSG_GROUP_ID |
|
| 1530 |
+ WHERE 1=1 |
|
| 1531 |
+ AND IFNULL(MG.DEL_FLAG,'N') = 'N' |
|
| 1532 |
+ AND MD.USER_ID = #userId# |
|
| 1533 |
+ <isNotEmpty property="ntceBgnde"> |
|
| 1534 |
+ AND DATE_FORMAT(MG.REQ_DATE, '%Y/%m/%d') BETWEEN #ntceBgnde# AND #ntceEndde# |
|
| 1535 |
+ </isNotEmpty> |
|
| 1536 |
+ AND MD.MSG_TYPE IN ('8','9')
|
|
| 1537 |
+ AND MG.RESERVE_C_YN = 'N' |
|
| 1538 |
+ ) A0 |
|
| 1539 |
+ GROUP BY |
|
| 1540 |
+ A0.MSG_GROUP_ID |
|
| 1541 |
+ , A0.RESULT |
|
| 1542 |
+ , A0.RSLT_CODE |
|
| 1543 |
+ , A0.RSLT_CODE2 |
|
| 1544 |
+ , A0.AGENT_CODE |
|
| 1545 |
+ ORDER BY |
|
| 1546 |
+ A0.MSG_GROUP_ID DESC |
|
| 1547 |
+ </select> |
|
| 1548 |
+ |
|
| 1549 |
+ <select id="KakaoSentDAO.selectKakaoSentCntEachCnt_advc" parameterClass="kakaoSentVO" resultClass="kakaoSentVO"> |
|
| 1550 |
+ SELECT a.MSG_GROUP_ID AS msgGroupId, |
|
| 1551 |
+ a.successCount, |
|
| 1552 |
+ a.waitCount, |
|
| 1553 |
+ a.failCount, |
|
| 1554 |
+ a.kakaoResendSuccCount, |
|
| 1555 |
+ a.kakaoResendFailCount, |
|
| 1556 |
+ a.successCount * bkp.BIZ_KAKAO_AT_PRICE AS successPrice, |
|
| 1557 |
+ (a.smsCnt * bkp.BIZ_SMS_PRICE) + (a.mmsCnt * bkp.BIZ_MMS_PRICE) AS kakaoResendSuccPrice, |
|
| 1558 |
+ a.divideYn |
|
| 1559 |
+ FROM (SELECT t1.MSG_GROUP_ID, |
|
| 1560 |
+ ( SELECT COUNT(0) |
|
| 1561 |
+ FROM MJ_MSG_DATA C |
|
| 1562 |
+ WHERE C.RESERVE_C_YN = 'N' |
|
| 1563 |
+ AND C.MSG_GROUP_ID = t1.MSG_GROUP_ID |
|
| 1564 |
+ AND C.RSLT_CODE = '7000' |
|
| 1565 |
+ ) |
|
| 1566 |
+ AS successCount , |
|
| 1567 |
+ ( SELECT COUNT(0) |
|
| 1568 |
+ FROM MJ_MSG_DATA C |
|
| 1569 |
+ WHERE C.RESERVE_C_YN = 'N' |
|
| 1570 |
+ AND C.MSG_GROUP_ID = t1.MSG_GROUP_ID |
|
| 1571 |
+ AND |
|
| 1572 |
+ ( |
|
| 1573 |
+ C.RSLT_CODE IS NULL |
|
| 1574 |
+ AND C.SENT_DATE IS NULL |
|
| 1575 |
+ AND C.RSLT_DATE IS NULL |
|
| 1576 |
+ ) |
|
| 1577 |
+ ) |
|
| 1578 |
+ AS waitCount , |
|
| 1579 |
+ ( SELECT COUNT(0) |
|
| 1580 |
+ FROM MJ_MSG_DATA C |
|
| 1581 |
+ WHERE C.RESERVE_C_YN = 'N' |
|
| 1582 |
+ AND C.MSG_GROUP_ID = t1.MSG_GROUP_ID |
|
| 1583 |
+ AND |
|
| 1584 |
+ ( |
|
| 1585 |
+ C.RSLT_CODE != '7000' |
|
| 1586 |
+ AND C.RSLT_CODE IS NOT NULL |
|
| 1587 |
+ ) |
|
| 1588 |
+ ) |
|
| 1589 |
+ AS failCount , |
|
| 1590 |
+ ( SELECT COUNT(0) |
|
| 1591 |
+ FROM BIZ_LOG BL1, |
|
| 1592 |
+ MJ_MSG_DATA MMD1 |
|
| 1593 |
+ WHERE t1.BIZ_KAKAO_RESEND_YN = 'Y' |
|
| 1594 |
+ AND t1.MSG_GROUP_ID = MMD1.MSG_GROUP_ID |
|
| 1595 |
+ AND MMD1.BIZ_UMID = BL1.CMID |
|
| 1596 |
+ AND ( |
|
| 1597 |
+ CASE |
|
| 1598 |
+ WHEN BL1.CALL_STATUS IN ('6600',
|
|
| 1599 |
+ '4100') |
|
| 1600 |
+ THEN 'S' |
|
| 1601 |
+ ELSE 'F' |
|
| 1602 |
+ END ) = 'S' |
|
| 1603 |
+ ) |
|
| 1604 |
+ kakaoResendSuccCount, |
|
| 1605 |
+ ( SELECT COUNT(0) |
|
| 1606 |
+ FROM BIZ_LOG BL1, |
|
| 1607 |
+ MJ_MSG_DATA MMD1 |
|
| 1608 |
+ WHERE t1.BIZ_KAKAO_RESEND_YN = 'Y' |
|
| 1609 |
+ AND t1.MSG_GROUP_ID = MMD1.MSG_GROUP_ID |
|
| 1610 |
+ AND MMD1.BIZ_UMID = BL1.CMID |
|
| 1611 |
+ AND ( |
|
| 1612 |
+ CASE |
|
| 1613 |
+ WHEN BL1.CALL_STATUS IN ('6600',
|
|
| 1614 |
+ '4100') |
|
| 1615 |
+ THEN 'S' |
|
| 1616 |
+ ELSE 'F' |
|
| 1617 |
+ END ) = 'F' |
|
| 1618 |
+ ) |
|
| 1619 |
+ kakaoResendFailCount, |
|
| 1620 |
+ ( SELECT COUNT(0) |
|
| 1621 |
+ FROM BIZ_LOG BL1, |
|
| 1622 |
+ MJ_MSG_DATA MMD1 |
|
| 1623 |
+ WHERE t1.BIZ_KAKAO_RESEND_YN = 'Y' |
|
| 1624 |
+ AND t1.MSG_GROUP_ID = MMD1.MSG_GROUP_ID |
|
| 1625 |
+ AND MMD1.BIZ_UMID = BL1.CMID |
|
| 1626 |
+ AND ( |
|
| 1627 |
+ CASE |
|
| 1628 |
+ WHEN BL1.CALL_STATUS IN ('6600',
|
|
| 1629 |
+ '4100') |
|
| 1630 |
+ THEN 'S' |
|
| 1631 |
+ ELSE 'F' |
|
| 1632 |
+ END ) = 'S' |
|
| 1633 |
+ AND MMD1.BIZ_KAKAO_RESEND_TYPE = 'SMS' |
|
| 1634 |
+ ) |
|
| 1635 |
+ smsCnt, |
|
| 1636 |
+ ( SELECT COUNT(0) |
|
| 1637 |
+ FROM BIZ_LOG BL1, |
|
| 1638 |
+ MJ_MSG_DATA MMD1 |
|
| 1639 |
+ WHERE t1.BIZ_KAKAO_RESEND_YN = 'Y' |
|
| 1640 |
+ AND t1.MSG_GROUP_ID = MMD1.MSG_GROUP_ID |
|
| 1641 |
+ AND MMD1.BIZ_UMID = BL1.CMID |
|
| 1642 |
+ AND ( |
|
| 1643 |
+ CASE |
|
| 1644 |
+ WHEN BL1.CALL_STATUS IN ('6600',
|
|
| 1645 |
+ '4100') |
|
| 1646 |
+ THEN 'S' |
|
| 1647 |
+ ELSE 'F' |
|
| 1648 |
+ END ) = 'S' |
|
| 1649 |
+ AND MMD1.BIZ_KAKAO_RESEND_TYPE = 'MMS' |
|
| 1650 |
+ ) |
|
| 1651 |
+ mmsCnt, |
|
| 1652 |
+ CASE |
|
| 1653 |
+ WHEN COUNT(DISTINCT t1.REQ_DATE) > 1 THEN 'Y' |
|
| 1654 |
+ ELSE 'N' |
|
| 1655 |
+ END AS divideYN |
|
| 1656 |
+ FROM mj_msg_data t1 |
|
| 1657 |
+ WHERE t1.DEL_FLAG = 'N' |
|
| 1658 |
+ AND t1.MSG_TYPE IN ('8',
|
|
| 1659 |
+ '9') |
|
| 1660 |
+ AND t1.CUR_STATE IN ('0',
|
|
| 1661 |
+ '1', |
|
| 1662 |
+ '2', |
|
| 1663 |
+ '3') |
|
| 1664 |
+ AND t1.MSG_GROUP_ID = #msgGroupId# |
|
| 1665 |
+ GROUP BY t1.MSG_GROUP_ID |
|
| 1666 |
+ ) |
|
| 1667 |
+ a |
|
| 1668 |
+ LEFT OUTER JOIN BIZ_KAKAO_PRICE bkp |
|
| 1669 |
+ ON bkp.MSG_GROUP_ID = a.MSG_GROUP_ID |
|
| 1670 |
+ </select> |
|
| 1671 |
+ |
|
| 1672 |
+ <!-- 알림톡 발송결과 상세 데이터--> |
|
| 1673 |
+ <select id="KakaoSentDAO.selectKakaoSentDetailView" parameterClass="kakaoSentDetailVO" resultClass="kakaoSentDetailVO"> |
|
| 1674 |
+ /* KakaoSentDAO.selectKakaoSentDetailView */ |
|
| 1675 |
+ select |
|
| 1676 |
+ a.msgGroupId |
|
| 1677 |
+ , a.msgGroupCnt |
|
| 1678 |
+ , a.reserveYn |
|
| 1679 |
+ , a.reserveCYn |
|
| 1680 |
+ , a.canceldate |
|
| 1681 |
+ , a.callFrom |
|
| 1682 |
+ , a.userId |
|
| 1683 |
+ , a.smsTxt |
|
| 1684 |
+ , a.subject |
|
| 1685 |
+ , a.reqDate |
|
| 1686 |
+ , a.regDate |
|
| 1687 |
+ , a.msgType |
|
| 1688 |
+ , a.msgKind |
|
| 1689 |
+ , a.eachPrice |
|
| 1690 |
+ , a.sentDate |
|
| 1691 |
+ , a.diffMin |
|
| 1692 |
+ , a.subjectChkYn |
|
| 1693 |
+ , a.msgGroupId |
|
| 1694 |
+ , a.successCount |
|
| 1695 |
+ , a.waitCount |
|
| 1696 |
+ , a.failCount |
|
| 1697 |
+ , a.kakaoResendSuccCount |
|
| 1698 |
+ , a.kakaoResendFailCount |
|
| 1699 |
+ , a.successCount * bkp.BIZ_KAKAO_AT_PRICE AS successPrice |
|
| 1700 |
+ , (a.smsCnt * bkp.BIZ_SMS_PRICE) + (a.mmsCnt * bkp.BIZ_MMS_PRICE) AS kakaoResendSuccPrice |
|
| 1701 |
+ , a.divideYn |
|
| 1702 |
+ , a.bizKakaoResendYn |
|
| 1703 |
+ , MKPI.YELLOW_ID AS yellowId |
|
| 1704 |
+ , a.MSG_NOTICETALK_TMP_KEY as msgNoticetalkTmpKey |
|
| 1705 |
+ FROM (SELECT MD.MSG_GROUP_ID, |
|
| 1706 |
+ ( SELECT COUNT(0) |
|
| 1707 |
+ FROM MJ_MSG_DATA C |
|
| 1708 |
+ WHERE C.RESERVE_C_YN = 'N' |
|
| 1709 |
+ AND C.MSG_GROUP_ID = MD.MSG_GROUP_ID |
|
| 1710 |
+ AND C.RSLT_CODE = '7000' |
|
| 1711 |
+ ) |
|
| 1712 |
+ AS successCount , |
|
| 1713 |
+ ( SELECT COUNT(0) |
|
| 1714 |
+ FROM MJ_MSG_DATA C |
|
| 1715 |
+ WHERE C.RESERVE_C_YN = 'N' |
|
| 1716 |
+ AND C.MSG_GROUP_ID = MD.MSG_GROUP_ID |
|
| 1717 |
+ AND |
|
| 1718 |
+ ( |
|
| 1719 |
+ C.RSLT_CODE IS NULL |
|
| 1720 |
+ AND C.SENT_DATE IS NULL |
|
| 1721 |
+ AND C.RSLT_DATE IS NULL |
|
| 1722 |
+ ) |
|
| 1723 |
+ ) |
|
| 1724 |
+ AS waitCount , |
|
| 1725 |
+ ( SELECT COUNT(0) |
|
| 1726 |
+ FROM MJ_MSG_DATA C |
|
| 1727 |
+ WHERE C.RESERVE_C_YN = 'N' |
|
| 1728 |
+ AND C.MSG_GROUP_ID = MD.MSG_GROUP_ID |
|
| 1729 |
+ AND |
|
| 1730 |
+ ( |
|
| 1731 |
+ C.RSLT_CODE != '7000' |
|
| 1732 |
+ AND C.RSLT_CODE IS NOT NULL |
|
| 1733 |
+ ) |
|
| 1734 |
+ ) |
|
| 1735 |
+ AS failCount , |
|
| 1736 |
+ ( SELECT COUNT(0) |
|
| 1737 |
+ FROM BIZ_LOG BL1, |
|
| 1738 |
+ MJ_MSG_DATA MMD1 |
|
| 1739 |
+ WHERE MD.BIZ_KAKAO_RESEND_YN = 'Y' |
|
| 1740 |
+ AND MD.MSG_GROUP_ID = MMD1.MSG_GROUP_ID |
|
| 1741 |
+ AND MMD1.BIZ_UMID = BL1.CMID |
|
| 1742 |
+ AND ( |
|
| 1743 |
+ CASE |
|
| 1744 |
+ WHEN BL1.CALL_STATUS IN ('6600',
|
|
| 1745 |
+ '4100') |
|
| 1746 |
+ THEN 'S' |
|
| 1747 |
+ ELSE 'F' |
|
| 1748 |
+ END ) = 'S' |
|
| 1749 |
+ ) |
|
| 1750 |
+ kakaoResendSuccCount, |
|
| 1751 |
+ ( SELECT COUNT(0) |
|
| 1752 |
+ FROM BIZ_LOG BL1, |
|
| 1753 |
+ MJ_MSG_DATA MMD1 |
|
| 1754 |
+ WHERE MD.BIZ_KAKAO_RESEND_YN = 'Y' |
|
| 1755 |
+ AND MD.MSG_GROUP_ID = MMD1.MSG_GROUP_ID |
|
| 1756 |
+ AND MMD1.BIZ_UMID = BL1.CMID |
|
| 1757 |
+ AND ( |
|
| 1758 |
+ CASE |
|
| 1759 |
+ WHEN BL1.CALL_STATUS IN ('6600',
|
|
| 1760 |
+ '4100') |
|
| 1761 |
+ THEN 'S' |
|
| 1762 |
+ ELSE 'F' |
|
| 1763 |
+ END ) = 'F' |
|
| 1764 |
+ ) |
|
| 1765 |
+ kakaoResendFailCount, |
|
| 1766 |
+ ( SELECT COUNT(0) |
|
| 1767 |
+ FROM BIZ_LOG BL1, |
|
| 1768 |
+ MJ_MSG_DATA MMD1 |
|
| 1769 |
+ WHERE MD.BIZ_KAKAO_RESEND_YN = 'Y' |
|
| 1770 |
+ AND MD.MSG_GROUP_ID = MMD1.MSG_GROUP_ID |
|
| 1771 |
+ AND MMD1.BIZ_UMID = BL1.CMID |
|
| 1772 |
+ AND ( |
|
| 1773 |
+ CASE |
|
| 1774 |
+ WHEN BL1.CALL_STATUS IN ('6600',
|
|
| 1775 |
+ '4100') |
|
| 1776 |
+ THEN 'S' |
|
| 1777 |
+ ELSE 'F' |
|
| 1778 |
+ END ) = 'S' |
|
| 1779 |
+ AND MMD1.BIZ_KAKAO_RESEND_TYPE = 'SMS' |
|
| 1780 |
+ ) |
|
| 1781 |
+ smsCnt, |
|
| 1782 |
+ ( SELECT COUNT(0) |
|
| 1783 |
+ FROM BIZ_LOG BL1, |
|
| 1784 |
+ MJ_MSG_DATA MMD1 |
|
| 1785 |
+ WHERE MD.BIZ_KAKAO_RESEND_YN = 'Y' |
|
| 1786 |
+ AND MD.MSG_GROUP_ID = MMD1.MSG_GROUP_ID |
|
| 1787 |
+ AND MMD1.BIZ_UMID = BL1.CMID |
|
| 1788 |
+ AND ( |
|
| 1789 |
+ CASE |
|
| 1790 |
+ WHEN BL1.CALL_STATUS IN ('6600',
|
|
| 1791 |
+ '4100') |
|
| 1792 |
+ THEN 'S' |
|
| 1793 |
+ ELSE 'F' |
|
| 1794 |
+ END ) = 'S' |
|
| 1795 |
+ AND MMD1.BIZ_KAKAO_RESEND_TYPE = 'MMS' |
|
| 1796 |
+ ) |
|
| 1797 |
+ mmsCnt, |
|
| 1798 |
+ CASE |
|
| 1799 |
+ WHEN COUNT(DISTINCT MD.REQ_DATE) > 1 THEN 'Y' |
|
| 1800 |
+ ELSE 'N' |
|
| 1801 |
+ END AS divideYN, |
|
| 1802 |
+ MGD.MSG_GROUP_ID as msgGroupId |
|
| 1803 |
+ , MGD.MSG_GROUP_CNT as msgGroupCnt |
|
| 1804 |
+ , MGD.RESERVE_YN as reserveYn |
|
| 1805 |
+ , MGD.RESERVE_C_YN as reserveCYn |
|
| 1806 |
+ , DATE_FORMAT(MGD.CANCELDATE, '%Y-%m-%d %T') as canceldate |
|
| 1807 |
+ , MGD.CALL_FROM as callFrom |
|
| 1808 |
+ , MGD.USER_ID as userId |
|
| 1809 |
+ , MGD.SMS_TXT as smsTxt |
|
| 1810 |
+ , MGD.SUBJECT as subject |
|
| 1811 |
+ , DATE_FORMAT(MGD.REQ_DATE, '%Y-%m-%d %T') as reqDate |
|
| 1812 |
+ , DATE_FORMAT(MGD.REGDATE, '%Y-%m-%d %T') as regDate |
|
| 1813 |
+ , MGD.MSG_TYPE as msgType |
|
| 1814 |
+ , MGD.MSG_KIND as msgKind |
|
| 1815 |
+ , MGD.EACH_PRICE as eachPrice |
|
| 1816 |
+ , DATE_FORMAT(MD.SENT_DATE, '%Y-%m-%d %T') as sentDate |
|
| 1817 |
+ , MD.FILE_CNT as fileCnt |
|
| 1818 |
+ , MD.FILE_PATH1 as filePath1 |
|
| 1819 |
+ , MD.FILE_PATH2 as filePath2 |
|
| 1820 |
+ , MD.FILE_PATH3 as filePath3 |
|
| 1821 |
+ , TIMESTAMPDIFF(minute, DATE_FORMAT(MGD.REQ_DATE, '%Y-%m-%d %T'), DATE_FORMAT(NOW(), '%Y-%m-%d %T')) as diffMin |
|
| 1822 |
+ , SUBJECT_CHK_YN as subjectChkYn |
|
| 1823 |
+ , MD.BIZ_KAKAO_RESEND_YN as bizKakaoResendYn |
|
| 1824 |
+ , MD.MSG_NOTICETALK_SENDER_KEY |
|
| 1825 |
+ , MD.MSG_NOTICETALK_TMP_KEY |
|
| 1826 |
+ FROM MJ_MSG_DATA MD |
|
| 1827 |
+ inner join MJ_MSG_GROUP_DATA MGD on |
|
| 1828 |
+ MGD.MSG_GROUP_ID = MD.MSG_GROUP_ID |
|
| 1829 |
+ and MGD.USER_ID = MD.USER_ID |
|
| 1830 |
+ AND MGD.MSG_GROUP_ID = #msgGroupId# |
|
| 1831 |
+ GROUP BY MGD.MSG_GROUP_ID |
|
| 1832 |
+ ) |
|
| 1833 |
+ a |
|
| 1834 |
+ LEFT OUTER JOIN BIZ_KAKAO_PRICE bkp |
|
| 1835 |
+ ON bkp.MSG_GROUP_ID = a.MSG_GROUP_ID |
|
| 1836 |
+ LEFT OUTER JOIN |
|
| 1837 |
+ (SELECT a.SENDER_KEY, |
|
| 1838 |
+ a.YELLOW_ID |
|
| 1839 |
+ FROM mj_kakao_profile_info a |
|
| 1840 |
+ GROUP BY a.SENDER_KEY |
|
| 1841 |
+ ) |
|
| 1842 |
+ MKPI |
|
| 1843 |
+ ON MKPI.SENDER_KEY = a.MSG_NOTICETALK_SENDER_KEY |
|
| 1844 |
+ |
|
| 1845 |
+ </select> |
|
| 1846 |
+ |
|
| 1847 |
+ <!-- REQ_DATE 조회--> |
|
| 1848 |
+ <select id="KakaoSentDAO.findByReqDateWhereMsgGroupId" parameterClass="String" resultClass="String"> |
|
| 1849 |
+ /* MjonMsgSentDAO.findByReqDateWhereMsgGroupId*/ |
|
| 1850 |
+ |
|
| 1851 |
+ SELECT REQ_DATE FROM MJ_MSG_DATA WHERE MSG_GROUP_ID =#msgGroupId# |
|
| 1852 |
+ |
|
| 1853 |
+ </select> |
|
| 1854 |
+ |
|
| 1855 |
+ <!-- 발신 내용 상세보기 조회 (상세보기 버튼 클릭시)--> |
|
| 1856 |
+ <select id="KakaoSentDAO.selectKakaoSentDetailViewPhoneAjax" parameterClass="mjonKakaoATVO" resultClass="mjonKakaoATVO"> |
|
| 1857 |
+ |
|
| 1858 |
+ SELECT |
|
| 1859 |
+ MGD.MSG_GROUP_ID as msgGroupId |
|
| 1860 |
+ , MGD.USER_ID as userId |
|
| 1861 |
+ , MD.MSG_TYPE as msgType |
|
| 1862 |
+ , MD.REQ_DATE as reqDate /* 발송 시간 */ |
|
| 1863 |
+ , MD.MSG_NOTICETALK_SENDER_KEY as msgNoticetalkSenderKey /* api key */ |
|
| 1864 |
+ , MD.MSG_NOTICETALK_TMP_KEY as msgNoticetalkTmpKey /* 특정 템플릿 key */ |
|
| 1865 |
+ , MGD.SMS_TXT as smsTxt /* 알림톡 본문 내용 치환(X) */ |
|
| 1866 |
+ , MD.SMS_TXT as smsTxtTrans /* 알림톡 본문 내용 치환(O)*/ |
|
| 1867 |
+ , MD.BIZ_KAKAO_TITLE as bizKakaoTitle /* 강조형 타이틀 */ |
|
| 1868 |
+ , MD.BIZ_KAKAO_RESEND_YN as bizKakaoResendYn /* 대체 문자 사용 여부*/ |
|
| 1869 |
+ , MD.BIZ_KAKAO_RESEND_TYPE as bizKakaoResendType /* MMS / LMS / SMS */ |
|
| 1870 |
+ , MD.BIZ_KAKAO_RESEND_DATA as bizKakaoResendData /* 대체 문자 (치환O) */ |
|
| 1871 |
+ , MGD.BIZ_KAKAO_RESEND_ORGNL_TXT as bizKakaoResendOrgnlTxt /* 대체 문자( 치환X ) */ |
|
| 1872 |
+ , MD.BIZ_KAKAO_JSON_FILE as bizKakaoJsonFile /* Json 파일 경로 */ |
|
| 1873 |
+ , MKPI.YELLOW_ID as yellowId |
|
| 1874 |
+ , COUNT_TYPE.cnt AS bizKakaoResendTypeCnt |
|
| 1875 |
+ , ifnull(MGD.BIZ_KAKAO_RESEND_TYPE, MD.BIZ_KAKAO_RESEND_TYPE) AS bizKakaoResendType |
|
| 1876 |
+ , MD.BIZ_KAKAO_RESEND_YN AS bizKakaoResendYn |
|
| 1877 |
+ FROM MJ_MSG_GROUP_DATA MGD |
|
| 1878 |
+ INNER JOIN MJ_MSG_DATA MD |
|
| 1879 |
+ ON MGD.MSG_GROUP_ID = MD.MSG_GROUP_ID |
|
| 1880 |
+ AND MGD.USER_ID = MD.USER_ID |
|
| 1881 |
+ LEFT OUTER JOIN (SELECT a.SENDER_KEY, |
|
| 1882 |
+ a.YELLOW_ID |
|
| 1883 |
+ FROM mj_kakao_profile_info a |
|
| 1884 |
+ GROUP BY a.SENDER_KEY |
|
| 1885 |
+ ) |
|
| 1886 |
+ MKPI |
|
| 1887 |
+ ON MKPI.SENDER_KEY = MD.MSG_NOTICETALK_SENDER_KEY |
|
| 1888 |
+ LEFT OUTER JOIN |
|
| 1889 |
+ ( SELECT MSG_GROUP_ID, |
|
| 1890 |
+ COUNT(*) AS cnt |
|
| 1891 |
+ FROM ( SELECT MSG_GROUP_ID, |
|
| 1892 |
+ BIZ_KAKAO_RESEND_TYPE |
|
| 1893 |
+ FROM MJ_MSG_DATA |
|
| 1894 |
+ WHERE MSG_GROUP_ID = 'MSGGID_0000000332753' |
|
| 1895 |
+ GROUP BY MSG_GROUP_ID, |
|
| 1896 |
+ BIZ_KAKAO_RESEND_TYPE |
|
| 1897 |
+ ) |
|
| 1898 |
+ t |
|
| 1899 |
+ GROUP BY MSG_GROUP_ID |
|
| 1900 |
+ ) |
|
| 1901 |
+ COUNT_TYPE |
|
| 1902 |
+ ON COUNT_TYPE.MSG_GROUP_ID = MGD.MSG_GROUP_ID |
|
| 1903 |
+ WHERE |
|
| 1904 |
+ MGD.USER_ID = #userId# |
|
| 1905 |
+ AND |
|
| 1906 |
+ MGD.MSG_GROUP_ID = #msgGroupId# |
|
| 1907 |
+ GROUP BY MGD.MSG_GROUP_ID |
|
| 1908 |
+ </select> |
|
| 1909 |
+ |
|
| 1353 | 1910 |
</sqlMap>(No newline at end of file) |
--- src/main/resources/egovframework/sqlmap/let/msg/MjonMsgSent_SQL_mysql.xml
+++ src/main/resources/egovframework/sqlmap/let/msg/MjonMsgSent_SQL_mysql.xml
... | ... | @@ -485,6 +485,9 @@ |
| 485 | 485 |
]]> |
| 486 | 486 |
</isEqual> |
| 487 | 487 |
</isNotEmpty> |
| 488 |
+ <isEmpty property="searchCondition02"> |
|
| 489 |
+ AND B.MSG_TYPE in ('4', '6')
|
|
| 490 |
+ </isEmpty> |
|
| 488 | 491 |
<isNotEmpty property="searchStartDate"> |
| 489 | 492 |
<![CDATA[ |
| 490 | 493 |
AND DATE_FORMAT(B.REGDATE, '%Y-%m-%d') >= DATE_FORMAT(#searchStartDate#, '%Y-%m-%d') |
--- src/main/webapp/WEB-INF/jsp/web/kakao/msgdata/at/KakaoAlimtalkMsgDataView.jsp
+++ src/main/webapp/WEB-INF/jsp/web/kakao/msgdata/at/KakaoAlimtalkMsgDataView.jsp
... | ... | @@ -1076,6 +1076,62 @@ |
| 1076 | 1076 |
return true; |
| 1077 | 1077 |
} |
| 1078 | 1078 |
|
| 1079 |
+//재전송 스크립트 수정 |
|
| 1080 |
+$(window).on('load', function() {
|
|
| 1081 |
+ if("${msgResendAllFlag eq 'Y'}") {
|
|
| 1082 |
+ // 채널 ID 및 템플릿 선택 코드는 유지 |
|
| 1083 |
+ $("#selectKakaoProfileList option").filter(function() {
|
|
| 1084 |
+ return $(this).text() === '${kakaoVO.msgResendAllYellowId}';
|
|
| 1085 |
+ }).prop('selected', true).parent().trigger("click");
|
|
| 1086 |
+ |
|
| 1087 |
+ // 템플릿 선택 |
|
| 1088 |
+ $("#selectTemplateList option").remove();
|
|
| 1089 |
+ selectTemplateList(); |
|
| 1090 |
+ $("#selectTemplateList").val("${kakaoVO.msgResendAllTmpKey}");
|
|
| 1091 |
+ selectTemplateInfo("${kakaoVO.msgResendAllTmpKey}");
|
|
| 1092 |
+ fn_viewDataInit02(); |
|
| 1093 |
+ priceInit(); |
|
| 1094 |
+ |
|
| 1095 |
+ try {
|
|
| 1096 |
+ // JSON 파싱 |
|
| 1097 |
+ var resendListObj = JSON.parse('${resendListJson}');
|
|
| 1098 |
+ var listCnt = resendListObj.length; |
|
| 1099 |
+ |
|
| 1100 |
+ // 중복 제거 - Set 사용 |
|
| 1101 |
+ var uniquePhones = new Set(); |
|
| 1102 |
+ var uniqueResendList = []; |
|
| 1103 |
+ |
|
| 1104 |
+ // 중복 제거 로직 |
|
| 1105 |
+ for(var i = 0; i < resendListObj.length; i++) {
|
|
| 1106 |
+ var phone = removeDash(resendListObj[i].callTo); |
|
| 1107 |
+ if(!uniquePhones.has(phone)) {
|
|
| 1108 |
+ uniquePhones.add(phone); |
|
| 1109 |
+ uniqueResendList.push(resendListObj[i]); |
|
| 1110 |
+ } |
|
| 1111 |
+ } |
|
| 1112 |
+ |
|
| 1113 |
+ |
|
| 1114 |
+ // 중복 제거된 데이터로 처리 |
|
| 1115 |
+ for(var i = 0; i < uniqueResendList.length; i++) {
|
|
| 1116 |
+ var phoneNumber = removeDash(uniqueResendList[i].callTo); |
|
| 1117 |
+ |
|
| 1118 |
+ // callTo 입력 필드에 값 설정 후 번호추가 버튼 클릭 |
|
| 1119 |
+ $("#callTo").val(phoneNumber);
|
|
| 1120 |
+ $(".addCallToF").trigger("click");
|
|
| 1121 |
+ |
|
| 1122 |
+ } |
|
| 1123 |
+ |
|
| 1124 |
+ // 총 건수 확인 |
|
| 1125 |
+ setTimeout(function() {
|
|
| 1126 |
+ updateTotCnt(); |
|
| 1127 |
+ }, 500); |
|
| 1128 |
+ |
|
| 1129 |
+ } catch(e) {
|
|
| 1130 |
+ console.error("재전송 데이터 처리 오류:", e);
|
|
| 1131 |
+ } |
|
| 1132 |
+ } |
|
| 1133 |
+}); |
|
| 1134 |
+ |
|
| 1079 | 1135 |
</script> |
| 1080 | 1136 |
|
| 1081 | 1137 |
<div class="loading_layer"> |
+++ src/main/webapp/WEB-INF/jsp/web/kakao/msgdata/at/KakaoAlimtalkMsgDataView_tmp.jsp
... | ... | @@ -0,0 +1,219 @@ |
| 1 | +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> | |
| 2 | +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> | |
| 3 | +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> | |
| 4 | +<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> | |
| 5 | +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> | |
| 6 | +<%@ page import="itn.com.cmm.LoginVO" %> | |
| 7 | + | |
| 8 | +<!-- <script src="/publish/js/content.js"></script> --> | |
| 9 | +<!-- 주소록관련 js --> | |
| 10 | +<script type="text/javascript" defer src="<c:out value='/js/kakao/at/init.js' />"></script> | |
| 11 | +<script type="text/javascript" src="<c:out value='/js/kakao/at/tabulator.js' />"></script> | |
| 12 | +<script type="text/javascript" src="<c:out value='/js/kakao/at/addr.js' />"></script> | |
| 13 | +<script type="text/javascript" src="<c:out value='/js/kakao/at/alimtalkExcel.js' />"></script> | |
| 14 | +<script type="text/javascript" src="<c:out value='/js/kakao/at/priceClclt.js' />"></script> | |
| 15 | +<script type="text/javascript" src="<c:out value='/js/common/popup.js' />"></script> | |
| 16 | +<script type="text/javascript"> | |
| 17 | +/* | |
| 18 | + * 등록된 발신 탬플릿 카카오톡 전송 | |
| 19 | + */ | |
| 20 | + | |
| 21 | + | |
| 22 | +function send_many(cnt){ | |
| 23 | + for(var i = 0 ; i < cnt ; i ++){ | |
| 24 | + sendTemplateInfo(); | |
| 25 | + } | |
| 26 | +} | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | +function sendTemplateInfo(){ | |
| 31 | + | |
| 32 | + var data = new FormData(document.bizForm); | |
| 33 | + $.ajax({ | |
| 34 | + type: "POST" | |
| 35 | + , url: "/web/mjon/kakao/alimtalk/kakaoAlimTalkMsgSendAjax.do" | |
| 36 | + , data: data | |
| 37 | + , dataType: 'json' | |
| 38 | + , async: true | |
| 39 | + , processData: false | |
| 40 | + , contentType: false | |
| 41 | + , cache: false | |
| 42 | + , success: function (returnData, status) { | |
| 43 | + if(status == 'success'){ | |
| 44 | + if("loginFail" == returnData.result){ | |
| 45 | + | |
| 46 | + alert(returnData.message); | |
| 47 | + return false; | |
| 48 | + | |
| 49 | + }else if('fail' == returnData.result){ | |
| 50 | + | |
| 51 | + alert(returnData.message); | |
| 52 | + return false; | |
| 53 | + | |
| 54 | + }else if('authFail' == returnData.result){ | |
| 55 | + | |
| 56 | + alert(returnData.message); | |
| 57 | + location.reload(); | |
| 58 | + | |
| 59 | + } else if(status == 'success'){ | |
| 60 | + | |
| 61 | + var kakaoSendCnt = returnData.resultSts; | |
| 62 | + | |
| 63 | + $('.pop_msg_success').css({'display':'block','opacity':'1','left':'50%','top':'50%','transform':'translate(-50%,-50%)'}); | |
| 64 | + | |
| 65 | + //예약발송 건의 경우 결과 팝업 문구 변경 | |
| 66 | + if(reserYn == 'Y'){ | |
| 67 | + $('.pop_msg_success .msg_text').html("예약 성공 : <strong>"+ kakaoSendCnt + "</strong>건의<br>알림톡이 예약 되었습니다."); | |
| 68 | + }else{ | |
| 69 | + $('.pop_msg_success .msg_text').html("발송 성공 : <strong>"+ kakaoSendCnt + "</strong>건의<br>알림톡이 발송 되었습니다."); | |
| 70 | + } | |
| 71 | + | |
| 72 | + $('.mask').addClass('on'); | |
| 73 | + } | |
| 74 | + } | |
| 75 | + } | |
| 76 | + ,beforeSend : function(xmlHttpRequest) { | |
| 77 | + //로딩창 show | |
| 78 | + $('.loading_layer').addClass('active'); | |
| 79 | + } | |
| 80 | + ,complete : function(xhr, textStatus) { | |
| 81 | + //로딩창 hide | |
| 82 | + $('.loading_layer').removeClass('active'); | |
| 83 | + } | |
| 84 | + ,error: function (e) { | |
| 85 | + console.log("ERROR : ", e); | |
| 86 | + alert("카카오 알림톡 전송에 실패하였습니다."); | |
| 87 | + } | |
| 88 | + }); | |
| 89 | +} | |
| 90 | + | |
| 91 | + | |
| 92 | +</script> | |
| 93 | + | |
| 94 | + <div class="loading_layer"> | |
| 95 | + <div class="loading_container"> | |
| 96 | + <div class="bar"></div> | |
| 97 | + <div class="text">Loading</div> | |
| 98 | + </div> | |
| 99 | + </div> | |
| 100 | + | |
| 101 | + <form id="bizForm" name="bizForm" method="post"> | |
| 102 | + <input type="hidden" id="menuTopTab" name="menuTopTab" value="tabAlim"> | |
| 103 | + <input type="hidden" id="senderKey" name="senderKey" value="669143473b1af459628b8bdf2f48da090c8895de"> <!-- 카카오 보내는 사람 Key --> | |
| 104 | + <input type="hidden" id="templateCode" name="templateCode" value="bizp_2023040511022617802391882"> <!-- 카카오 전송 templat Code --> | |
| 105 | + | |
| 106 | + <input type="hidden" id="templateEmphasizeType" name="templateEmphasizeType" value="TEXT"> <!-- 카카오 전송 templateEmphasizeType 타입 --> | |
| 107 | + | |
| 108 | + <input type="hidden" id="templateContent" name="templateContent" value="test"> <!-- 카카오 전송 templat내용 --> | |
| 109 | + <input type="hidden" id="templateTitle" name="templateTitle" value="test"> <!-- 카카오 전송 templat 타이틀 --> | |
| 110 | + <input type="hidden" id="templateSubtitle" name="templateSubtitle" value="test"> <!-- 카카오 전송 templat 서브 타이틀 --> | |
| 111 | + | |
| 112 | + <input type="hidden" id="subMsgTxtReplYn" name="subMsgTxtReplYn" value=""> <!-- 대체문자 전송내용에 변환문자가 있는지--> | |
| 113 | + <input type="hidden" id="subMsgSendYn" name="subMsgSendYn" value="N"> <!-- 대체문자 전송여부 - 알림톡 전송 실패 시 문자 전송--> | |
| 114 | + <input type="hidden" id="subMsgTxt" name="subMsgTxt" value=""> <!-- 대체문자 전송내용 --> | |
| 115 | + <input type="hidden" id="txtReplYn" name="txtReplYn" value="N"> <!-- 완 치환문자 여부 - --> | |
| 116 | + <input type="hidden" id="bizJsonYn" name="bizJsonYn" value="N"> <!-- JSON 생성 여부 --> | |
| 117 | + | |
| 118 | + <input type="hidden" id="reserveYn" name="reserveYn" value="N"> <!-- 예약문자 여부 - 예약 선택 여부 // 아래 하단 화면 노출 여부도 같이--> | |
| 119 | + <input type="hidden" id="reqDate" name="reqDate" value=""> <!--전송일자--> | |
| 120 | + | |
| 121 | + <input type="hidden" id="divideChk" name="divideChk" value=""> <!--전송일자--> | |
| 122 | + <input type="hidden" id="divideCnt" name="divideCnt" value=""> <!--전송일자--> | |
| 123 | + <input type="hidden" id="divideTime" name="divideTime" value=""> <!--전송일자--> | |
| 124 | + | |
| 125 | + <input type="hidden" id="callFrom" name="callFrom" value="01093414986"> <!--완 보내는사람 --> | |
| 126 | + <input type="hidden" id="callToList" name="callToList" value="01012345678,01012345679,01012345680,01012345681,01012345682,01012345683,01012345684,01012345685,01012345686,01012345687,01012345688,01012345689,01012345690,01012345691,01012345692,01012345693,01012345694,01012345695,01012345696,01012345697,01012345698,01012345699,01012345700,01012345701,01012345702,01012345703,01012345704,01012345705,01012345706,01012345707,01012345708,01012345709,01012345710,01012345711,01012345712,01012345713,01012345714,01012345715,01012345716,01012345717,01012345718,01012345719,01012345720,01012345721,01012345722,01012345723,01012345724,01012345725,01012345726,01012345727,01012345728,01012345729,01012345730,01012345731,01012345732,01012345733,01012345734,01012345735,01012345736,01012345737,01012345738,01012345739,01012345740,01012345741,01012345742,01012345743,01012345744,01012345745,01012345746,01012345747,01012345748,01012345749,01012345750,01012345751,01012345752,01012345753,01012345754,01012345755,01012345756,01012345757,01012345758,01012345759,01012345760,01012345761,01012345762,01012345763,01012345764,01012345765,01012345766,01012345767,01012345768,01012345769,01012345770,01012345771,01012345772,01012345773,01012345774,01012345775,01012345776,01012345777,01012345778,01012345779,01012345780,01012345781,01012345782,01012345783,01012345784,01012345785,01012345786,01012345787,01012345788,01012345789,01012345790,01012345791,01012345792,01012345793,01012345794,01012345795,01012345796,01012345797,01012345798,01012345799,01012345800,01012345801,01012345802,01012345803,01012345804,01012345805,01012345806,01012345807,01012345808,01012345809,01012345810,01012345811,01012345812,01012345813,01012345814,01012345815,01012345816,01012345817,01012345818,01012345819,01012345820,01012345821,01012345822,01012345823,01012345824,01012345825,01012345826,01012345827,01012345828,01012345829,01012345830,01012345831,01012345832,01012345833,01012345834,01012345835,01012345836,01012345837,01012345838,01012345839,01012345840,01012345841,01012345842,01012345843,01012345844,01012345845,01012345846,01012345847,01012345848,01012345849,01012345850,01012345851,01012345852,01012345853,01012345854,01012345855,01012345856,01012345857,01012345858,01012345859,01012345860,01012345861,01012345862,01012345863,01012345864,01012345865,01012345866,01012345867,01012345868,01012345869,01012345870,01012345871,01012345872,01012345873,01012345874,01012345875,01012345876,01012345877"> <!--완 받는사람 리스트--> | |
| 127 | + <input type="hidden" id="varNmList" name="varNmList" value=""> <!--완 변수 이름 리스트--> | |
| 128 | + <input type="hidden" id="varValList" name="varValList" value=""> <!--완 변수 리스트--> | |
| 129 | + | |
| 130 | + <input type="hidden" id="atSmishingYn" name="atSmishingYn" value="N"> <!--알림톡 스미싱 여부--> | |
| 131 | + </form> | |
| 132 | + | |
| 133 | + <div class="inner"> | |
| 134 | + <!-- send top --> | |
| 135 | + <div class="send_top"> | |
| 136 | + <!-- tab button --> | |
| 137 | + <%@include file="/WEB-INF/jsp/web/kakao/include/KaKaoAlimtalkTopMenuTap.jsp" %> | |
| 138 | + <!--// tab button --> | |
| 139 | + <!-- 카카오톡 설정 - 알림톡 템플릿 등록/관리 - 내템플릿 --> | |
| 140 | + <div class="top_content kakaotalksend_cont current pay_tab_wrap"> | |
| 141 | + <div class="send_general kakao_wrap"> | |
| 142 | + <div class="send_right"> | |
| 143 | + <div class="phone_bottom"> | |
| 144 | + <div class="send_rev"> | |
| 145 | + <div class="send_content" style="padding-bottom: 0;"> | |
| 146 | + <div class="rev_radio"> | |
| 147 | + <ul> | |
| 148 | + <li> | |
| 149 | + <input type="radio" id="reserYnN" name="reserYn" value="N" checked="checked"><label for="reserYnN">즉시</label> | |
| 150 | + </li> | |
| 151 | + <li> | |
| 152 | + <input type="radio" id="reserYnY" name="reserYn" value="Y"><label for="reserYnY">예약</label> | |
| 153 | + </li> | |
| 154 | + </ul> | |
| 155 | + </div> | |
| 156 | + <div class="send_btn"> | |
| 157 | + <button type="button" class="btnType btnType11" onclick="javascript:sendTemplateInfo(); return false;">발송하기</button> | |
| 158 | + <button type="button" class="btnType btnType11" onclick="javascript:send_many(2000); return false;">여러번발송하기</button> | |
| 159 | + <button type="button" class="btnType btnType10" onclick="javascript:goToKakaoTestPopUp(); return false;">테스트발송</button> | |
| 160 | + </div> | |
| 161 | + </div> | |
| 162 | + <div class="rev_selected"> | |
| 163 | + <div class="rev_top"> | |
| 164 | + <span>날짜 :</span> | |
| 165 | + <div class="calendar_wrap"> | |
| 166 | + <input type="text" class="startDate2 inp resDate calendar picker__input picker__input--active" title="검색 시작일" id="startDate2" name="startDate2" value="" data-datecontrol="true" readonly="" aria-haspopup="true" aria-expanded="true" aria-readonly="false" aria-owns="startDate2_root"> | |
| 167 | + </div> | |
| 168 | + <label for="msgResHour" class="label">시 선택</label> | |
| 169 | + <div class="selBox"> | |
| 170 | + <select class="selType1" id="msgResHour" name="msgResHour"> | |
| 171 | + <c:forEach var="hour" begin="0" end="23" step="1" varStatus="status"> | |
| 172 | + <c:choose> | |
| 173 | + <c:when test="${hour < 10}"> | |
| 174 | + <option value="0${hour}">0${hour}시</option> | |
| 175 | + </c:when> | |
| 176 | + <c:otherwise> | |
| 177 | + <option value="${hour}">${hour}시</option> | |
| 178 | + </c:otherwise> | |
| 179 | + </c:choose> | |
| 180 | + </c:forEach> | |
| 181 | + </select> | |
| 182 | + <label for="msgResMin" class="label">분 선택</label> | |
| 183 | + <select class="selType1" id="msgResMin" name="msgResMin"> | |
| 184 | + <c:forEach var="min" begin="0" end="55" step="5"> | |
| 185 | + <c:choose> | |
| 186 | + <c:when test="${min < 10}"> | |
| 187 | + <option value="0${min}">0${min}분</option> | |
| 188 | + </c:when> | |
| 189 | + <c:otherwise> | |
| 190 | + <option value="${min}">${min}분</option> | |
| 191 | + </c:otherwise> | |
| 192 | + </c:choose> | |
| 193 | + </c:forEach> | |
| 194 | + </select> | |
| 195 | + </div> | |
| 196 | + </div> | |
| 197 | + <div class="rev_bottom"> | |
| 198 | + <input type="checkbox" id="inputDivideChk" name="inputDivideChk"> | |
| 199 | + <label for="inputDivideChk">분할전송</label> | |
| 200 | + <input type="text" class="dividType1" id="frmDivideCnt" name="frmDivideCnt" value="20" onkeypress='return checkNumber(event)' maxlength="4"/> | |
| 201 | + <label for="frmDivideCnt">건씩</label> | |
| 202 | + <select class="selType1" id="divideTime" name="divideTime"> | |
| 203 | + <option value="5">05분</option> | |
| 204 | + <option value="10">10분</option> | |
| 205 | + <option value="15">15분</option> | |
| 206 | + <option value="20">20분</option> | |
| 207 | + <option value="30">30분</option> | |
| 208 | + </select> | |
| 209 | + <label for="divideTime">간격</label> | |
| 210 | + </div> | |
| 211 | + </div> | |
| 212 | + </div> | |
| 213 | + </div> | |
| 214 | + </div> | |
| 215 | + </div> | |
| 216 | + </div> | |
| 217 | + </div> | |
| 218 | + </div> | |
| 219 | + <!--// send top -->(No newline at end of file) |
--- src/main/webapp/WEB-INF/jsp/web/kakao/sent/KakaoSentAllListAjax.jsp
+++ src/main/webapp/WEB-INF/jsp/web/kakao/sent/KakaoSentAllListAjax.jsp
... | ... | @@ -3,6 +3,7 @@ |
| 3 | 3 |
<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> |
| 4 | 4 |
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> |
| 5 | 5 |
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> |
| 6 |
+<%@ taglib prefix="ec" uri="/WEB-INF/tld/ecnet_tld.tld"%> |
|
| 6 | 7 |
<%@ page import="itn.com.cmm.LoginVO" %> |
| 7 | 8 |
<script src="/publish/js/content.js"></script> |
| 8 | 9 |
<script src="/publish/js/popupLayer.js"></script> |
... | ... | @@ -48,102 +49,145 @@ |
| 48 | 49 |
|
| 49 | 50 |
} |
| 50 | 51 |
}); |
| 51 |
- |
|
| 52 |
- if($("#tdType").val() == "groupList" || $("#tdType").val() == ""){
|
|
| 53 |
- $("#privateListTable").hide();
|
|
| 54 |
- $("#groupListTable").show();
|
|
| 55 |
- }else{
|
|
| 56 |
- $("#privateListTable").show();
|
|
| 57 |
- $("#groupListTable").hide();
|
|
| 58 |
- } |
|
| 59 | 52 |
}); |
| 60 | 53 |
|
| 54 |
+function fnReservCancel(msgGroupId){
|
|
| 55 |
+ |
|
| 56 |
+ var form = document.resCancelForm; |
|
| 57 |
+ var loginVO = '${LoginVO}';
|
|
| 58 |
+ |
|
| 59 |
+ form.msgGroupId.value = msgGroupId; |
|
| 60 |
+ |
|
| 61 |
+ if(loginVO == "" || loginVO == null){
|
|
| 62 |
+ |
|
| 63 |
+ alert("로그인 후 이용이 가능합니다.");
|
|
| 64 |
+ return false; |
|
| 65 |
+ |
|
| 66 |
+ } |
|
| 67 |
+ |
|
| 68 |
+ var data = new FormData(form); |
|
| 69 |
+ url = "/web/mjon/reservmsg/deleteReservMsgCancelDataAjax.do"; |
|
| 70 |
+ |
|
| 71 |
+ if(confirm("정말 예약을 취소하시겠습니까?")){
|
|
| 72 |
+ |
|
| 73 |
+ $.ajax({
|
|
| 74 |
+ type: "POST", |
|
| 75 |
+ url: url, |
|
| 76 |
+ data: data, |
|
| 77 |
+ dataType:'json', |
|
| 78 |
+ async: false, |
|
| 79 |
+ processData: false, |
|
| 80 |
+ contentType: false, |
|
| 81 |
+ cache: false, |
|
| 82 |
+ success: function (returnData, status) {
|
|
| 83 |
+ if(status == 'success'){
|
|
| 84 |
+ if("fail"==returnData.result){
|
|
| 85 |
+ |
|
| 86 |
+ alert(returnData.message); |
|
| 87 |
+ return false; |
|
| 88 |
+ } |
|
| 89 |
+ |
|
| 90 |
+ var smsCnt = returnData.resultSts; |
|
| 91 |
+ |
|
| 92 |
+ alert("예약 발송이 정상적으로 취소 되었습니다.");
|
|
| 93 |
+ |
|
| 94 |
+ linkPage(1); |
|
| 95 |
+ |
|
| 96 |
+ } else if(status== 'fail'){
|
|
| 97 |
+ alert(returnData.message); |
|
| 98 |
+ } |
|
| 99 |
+ }, |
|
| 100 |
+ error: function (e) { alert("예약 취소에 실패하였습니다."); console.log("ERROR : ", e); }
|
|
| 101 |
+ }); |
|
| 102 |
+ |
|
| 103 |
+ } |
|
| 104 |
+ |
|
| 105 |
+} |
|
| 106 |
+ |
|
| 107 |
+function fn_sentDetailView(msgGroupId) {
|
|
| 108 |
+ // msgGroupId 값을 form에 설정 |
|
| 109 |
+ $("#searchForm #msgGroupId").val(msgGroupId);
|
|
| 110 |
+ |
|
| 111 |
+ // form을 해당 URL로 제출 |
|
| 112 |
+ $("#searchForm").attr("action", "/web/kakao/sent/selectKakaoSentDetailView.do");
|
|
| 113 |
+ $("#searchForm").submit();
|
|
| 114 |
+} |
|
| 115 |
+ |
|
| 61 | 116 |
</script> |
| 62 |
- <input type="button" id="tooltopClick" data-tooltip="rev_popup01" style="display:none;"/> |
|
| 63 | 117 |
<div class="list_info"> |
| 64 |
- <input type="hidden" id="tdType" value="${kakaoSentVO.listType}">
|
|
| 65 |
- <p>총 <span class="c_e40000"><c:out value="${totalRecordCount}"/></span>건</p>
|
|
| 66 |
- <div> |
|
| 67 |
- <label for="pageUnit" class="label">줄보기 선택</label> |
|
| 68 |
- <select id="pageUnit" name="pageUnit" class="selType2"> |
|
| 69 |
- <option value="10" <c:if test="${paginationInfo.recordCountPerPage == '10'}">selected</c:if> >10개보기</option>
|
|
| 118 |
+ <p>총 발송건수 <span class="c_e40000"><c:out value="${totalRecordCount}"/></span>건</p>
|
|
| 119 |
+ <div> |
|
| 120 |
+ <p class="cf_text c_e40000">※ 예약 발송취소는 예약 발송시간 기준 5분 전까지만 가능</p> |
|
| 121 |
+ <label for="pageUnit" class="label">줄보기 선택</label> |
|
| 122 |
+ <select id="pageUnit" name="pageUnit" class="selType2"> |
|
| 123 |
+ <option value="10" <c:if test="${paginationInfo.recordCountPerPage == '10'}">selected</c:if> >10개보기</option>
|
|
| 70 | 124 |
<option value="20" <c:if test="${paginationInfo.recordCountPerPage == '20'}">selected</c:if> >20개보기</option>
|
| 71 | 125 |
<option value="30" <c:if test="${paginationInfo.recordCountPerPage == '30'}">selected</c:if> >30개보기</option>
|
| 72 |
- </select> |
|
| 73 |
- </div> |
|
| 74 |
- </div> |
|
| 75 |
- <!-- 전송건별 - groupList - --> |
|
| 76 |
- <div class="tb_wrap" id="groupListTable"> |
|
| 126 |
+ </select> |
|
| 127 |
+ </div> |
|
| 128 |
+ </div> |
|
| 129 |
+ <!-- 발송화면 개선 : 카카오톡 테이블 수정 --> |
|
| 130 |
+ <div class="tb_wrap"> |
|
| 77 | 131 |
<table class="tType4"> |
| 78 | 132 |
<colgroup> |
| 79 |
- <col style="width: 40px;"> |
|
| 80 |
- <col style="width: 14%;"> |
|
| 81 |
- <col style="width: 7%;"> |
|
| 82 |
- <col style="width: 10%;"> |
|
| 83 |
- <col style="width: 18%;"> |
|
| 84 |
- <col style="width: 12%;"> |
|
| 85 |
- <col style="width: 10%;"> |
|
| 133 |
+ <col style="width: 45px;"> |
|
| 86 | 134 |
<col style="width: 12%;"> |
| 87 | 135 |
<col style="width: 7%;"> |
| 88 |
- <col style="width: 12%;"> |
|
| 136 |
+ <col style="width: auto;"> |
|
| 89 | 137 |
<col style="width: 7%;"> |
| 90 |
- <%-- <col style="width: 10%;"> --%> |
|
| 138 |
+ <col style="width: 6%;"> |
|
| 139 |
+ <col style="width: 6%;"> |
|
| 140 |
+ <col style="width: 6%;"> |
|
| 141 |
+ <col style="width: 6%;"> |
|
| 142 |
+ <col style="width: 6%;"> |
|
| 143 |
+ <col style="width: 8%;"> |
|
| 144 |
+ <col style="width: 8%;"> |
|
| 91 | 145 |
</colgroup> |
| 92 | 146 |
<thead> |
| 93 | 147 |
<tr> |
| 94 |
- <th> |
|
| 148 |
+ <th rowspan="2"> |
|
| 95 | 149 |
<label for="" class="label">전체 선택</label> |
| 96 | 150 |
<input type="checkbox"> |
| 97 | 151 |
</th> |
| 98 |
- <th> |
|
| 99 |
- 발송일시 |
|
| 152 |
+ <th rowspan="2">발송일시 |
|
| 100 | 153 |
<div class="sort_wrap"> |
| 101 | 154 |
<input type="button" class="sort sortBtn" id="sort_reqdate"> |
| 102 | 155 |
</div> |
| 103 | 156 |
</th> |
| 104 |
- <th> |
|
| 105 |
- 형태 |
|
| 157 |
+ <th rowspan="2">형태 |
|
| 106 | 158 |
<div class="sort_wrap"> |
| 107 |
- <input type="button" class="sort sortBtn" id="sort_msgType"> |
|
| 159 |
+ <input type="button" class="sort sortBtn" id="sort_orderByCode"> |
|
| 108 | 160 |
</div> |
| 109 | 161 |
</th> |
| 110 |
- <th>내용</th> |
|
| 111 |
- <th> |
|
| 112 |
- 받는사람 |
|
| 113 |
- <div class="sort_wrap"> |
|
| 114 |
- <input type="button" class="sort sortBtn" id="sort_callTo"> |
|
| 115 |
- </div> |
|
| 116 |
- </th> |
|
| 117 |
- <th> |
|
| 118 |
- 발신번호 |
|
| 119 |
- <div class="sort_wrap"> |
|
| 120 |
- <input type="button" class="sort sortBtn" id="sort_callFrom"> |
|
| 121 |
- </div> |
|
| 122 |
- </th> |
|
| 123 |
- <th> |
|
| 124 |
- 발송건수 |
|
| 162 |
+ <th rowspan="2">내용</th> |
|
| 163 |
+ <th rowspan="2">발송건수 |
|
| 125 | 164 |
<div class="sort_wrap"> |
| 126 | 165 |
<input type="button" class="sort sortBtn" id="sort_msgGroupCnt"> |
| 127 | 166 |
</div> |
| 128 | 167 |
</th> |
| 129 |
- <th>카카오톡 결과</th> |
|
| 130 |
- <th>건수</th> |
|
| 131 |
- <th>대체문자 결과</th> |
|
| 132 |
- <th>건수</th> |
|
| 133 |
- <!-- <th>금액</th> --> |
|
| 168 |
+ <th rowspan="2">대기</th> |
|
| 169 |
+ <th colspan="2">카카오톡결과</th> |
|
| 170 |
+ <th colspan="2">대체문자결과</th> |
|
| 171 |
+ <th rowspan="2">금액(원)</th> |
|
| 172 |
+ <th rowspan="2">진행상황</th> |
|
| 134 | 173 |
</tr> |
| 174 |
+ <tr> |
|
| 175 |
+ <th>성공</th> |
|
| 176 |
+ <th>실패</th> |
|
| 177 |
+ <th>성공</th> |
|
| 178 |
+ <th>실패</th> |
|
| 179 |
+ </tr> |
|
| 180 |
+ |
|
| 135 | 181 |
</thead> |
| 136 |
- |
|
| 137 | 182 |
<tbody> |
| 138 | 183 |
<c:if test="${not empty resultAllSentList}">
|
| 139 | 184 |
<c:forEach var="resultAllSentList" items="${resultAllSentList}" varStatus="status">
|
| 140 | 185 |
<tr> |
| 141 |
- <td rowspan="2"> |
|
| 186 |
+ <td> |
|
| 142 | 187 |
<label for="msgSentDel${status.count}" class="label">선택</label>
|
| 143 |
- <input type="checkbox" id="msgSentDel${status.count}" name="msgSentDel"
|
|
| 144 |
- value="${resultAllSentList.msgGroupId}" <c:if test="${resultAllSentList.curState eq '0'}">disabled</c:if>>
|
|
| 188 |
+ <input type="checkbox" id="msgSentDel${status.count}" name="msgSentDel" value="${resultAllSentList.msgGroupId}" <c:if test="${resultAllSentList.curState eq '0'}">disabled</c:if>>
|
|
| 145 | 189 |
</td> |
| 146 |
- <td rowspan="2"> |
|
| 190 |
+ <td> |
|
| 147 | 191 |
<c:choose> |
| 148 | 192 |
<c:when test="${resultAllSentList.atDelayYn eq 'Y' && resultAllSentList.atDelayCompleteYn eq 'N'}">
|
| 149 | 193 |
<c:choose> |
... | ... | @@ -165,240 +209,89 @@ |
| 165 | 209 |
</c:otherwise> |
| 166 | 210 |
</c:choose> |
| 167 | 211 |
</td> |
| 168 |
- <td rowspan="2"> |
|
| 169 |
- <p class="c_222 fwRg"> |
|
| 170 |
- <c:if test="${resultAllSentList.msgType eq '8'}">알림톡</c:if>
|
|
| 171 |
- <c:if test="${resultAllSentList.msgType eq '9'}">친구톡</c:if>
|
|
| 172 |
- </p> |
|
| 212 |
+ <td> |
|
| 213 |
+ <c:if test="${resultAllSentList.msgType eq '8'}">알림톡</c:if>
|
|
| 214 |
+ <c:if test="${resultAllSentList.msgType eq '9'}">친구톡</c:if>
|
|
| 173 | 215 |
</td> |
| 174 |
- <td rowspan="2"> |
|
| 175 |
-<%-- <button class="btnType btnType20" data-tooltip="rev_popup01" onClick="javascript:fnRevDetailPop('${resultAllSentList.msgGroupId}','${resultAllSentList.msgId}','${resultAllSentList.fileCnt}'); return false;">상세보기</button> --%>
|
|
| 176 |
- <button class="btnType btnType20" onClick="javascript:fnRevDetailPop('${resultAllSentList.msgGroupId}','${resultAllSentList.msgId}'); return false;">상세보기</button>
|
|
| 216 |
+ <td class="result_cont"> |
|
| 217 |
+ <div class="icon_wrap"> |
|
| 218 |
+ <c:if test="${resultAllSentList.reserveYn eq 'Y'}">
|
|
| 219 |
+ <span class="re">예약</span> |
|
| 220 |
+ <!-- 예약일때만 분할이 있음 --> |
|
| 221 |
+ <c:if test="${resultAllSentList.divideYn eq 'Y'}">
|
|
| 222 |
+ <span class="di">분할</span> |
|
| 223 |
+ </c:if> |
|
| 224 |
+ </c:if> |
|
| 225 |
+ <a href="#none" onclick="fn_sentDetailView('${resultAllSentList.msgGroupId}');">
|
|
| 226 |
+ <c:out value="${resultAllSentList.smsTxt}"/>
|
|
| 227 |
+ </a> |
|
| 228 |
+ </div> |
|
| 229 |
+ </td> |
|
| 230 |
+ <td> |
|
| 231 |
+ <c:out value="${resultAllSentList.msgGroupCnt}"/>
|
|
| 177 | 232 |
</td> |
| 178 |
- <td rowspan="2"> |
|
| 233 |
+ <td> |
|
| 234 |
+ <fmt:formatNumber value="${resultAllSentList.waitCount}" type="number" groupingUsed="true" />
|
|
| 235 |
+ </td> |
|
| 236 |
+ <td> |
|
| 237 |
+ <p class="c_002c9a"><fmt:formatNumber value="${resultAllSentList.successCount}" type="number" groupingUsed="true" /></p>
|
|
| 238 |
+ </td> |
|
| 239 |
+ <td> |
|
| 240 |
+ <p class="c_e40000"><fmt:formatNumber value="${resultAllSentList.failCount}" type="number" groupingUsed="true" /></p>
|
|
| 241 |
+ </td> |
|
| 242 |
+ <td> |
|
| 243 |
+ <p class="c_002c9a"><fmt:formatNumber value="${resultAllSentList.kakaoResendSuccCount}" type="number" groupingUsed="true" /></p>
|
|
| 244 |
+ </td> |
|
| 245 |
+ <td> |
|
| 246 |
+ <p class="c_e40000"><fmt:formatNumber value="${resultAllSentList.kakaoResendFailCount}" type="number" groupingUsed="true" /></p>
|
|
| 247 |
+ </td> |
|
| 248 |
+ <td> |
|
| 249 |
+ <c:if test="${resultAllSentList.totPrice ne '-'}">
|
|
| 250 |
+ <fmt:formatNumber value="${resultAllSentList.totPrice}" type="number" groupingUsed="true" minFractionDigits="0" maxFractionDigits="1" />
|
|
| 251 |
+ </c:if> |
|
| 252 |
+ <c:if test="${resultAllSentList.totPrice eq '-'}">
|
|
| 253 |
+ - |
|
| 254 |
+ </c:if> |
|
| 255 |
+ </td> |
|
| 256 |
+ <td> |
|
| 179 | 257 |
<c:choose> |
| 180 |
- <c:when test="${resultAllSentList.msgGroupCnt > 1}">
|
|
| 181 |
- <p> |
|
| 182 |
- <c:choose> |
|
| 183 |
- <c:when test="${resultAllSentList.addrNm ne '-' and resultAllSentList.addrNm ne ''}">
|
|
| 184 |
- <c:out value="${resultAllSentList.addrNm}"/>
|
|
| 185 |
- </c:when> |
|
| 186 |
- <c:otherwise> |
|
| 187 |
- <c:out value="${resultAllSentList.callToComma}"/>
|
|
| 188 |
- </c:otherwise> |
|
| 189 |
- </c:choose> 외 <fmt:formatNumber value="${resultAllSentList.msgGroupCnt - 1}" pattern="#,###"/>명
|
|
| 190 |
- </p> |
|
| 191 |
- </c:when> |
|
| 192 |
- <c:when test="${resultAllSentList.addrNm ne '-' and resultAllSentList.addrNm ne ''}">
|
|
| 193 |
- <p><c:out value="${resultAllSentList.addrNm}"/></p>
|
|
| 258 |
+ <c:when test="${resultAllSentList.statusCd ne '03' }">
|
|
| 259 |
+ <ec:code codeId="ITN057" code="${resultAllSentList.statusCd }" />
|
|
| 194 | 260 |
</c:when> |
| 195 | 261 |
<c:otherwise> |
| 196 |
- <p><c:out value="${resultAllSentList.callToComma}"/></p>
|
|
| 262 |
+ <p><button class="btnType btnType20" onClick="javascript:fnReservCancel('${resultAllSentList.msgGroupId}'); return false;">예약취소</button></p>
|
|
| 197 | 263 |
</c:otherwise> |
| 198 | 264 |
</c:choose> |
| 199 | 265 |
</td> |
| 200 |
- <td rowspan="2"><p><c:out value="${resultAllSentList.callFromComma}"/></p></td>
|
|
| 201 |
- <td rowspan="2"><p><c:out value="${resultAllSentList.msgGroupCnt}"/></p></td>
|
|
| 202 |
- |
|
| 203 |
- |
|
| 204 |
- |
|
| 205 |
- <td><p class="c_002c9a fwRg">정상수신</p></td> |
|
| 206 |
- <td> |
|
| 207 |
- <!-- 성공건이 1건 이상이면 클릭이벤트 추가 --> |
|
| 208 |
- <p class="c_002c9a fwRg" <c:if test="${resultAllSentList.successCount > 0}">onclick="javascript:fnMsgSFDetailList('${resultAllSentList.msgGroupId}', 'S'); return false;" style="cursor:pointer;"</c:if>>
|
|
| 209 |
- <fmt:formatNumber value="${resultAllSentList.successCount}" pattern="#,###.#"/></p>
|
|
| 210 |
- </td> |
|
| 211 |
- <td><p class="c_002c9a fwRg">정상수신</p></td> |
|
| 212 |
- <td> |
|
| 213 |
- <!-- 성공건이 1건 이상이면 클릭이벤트 추가 --> |
|
| 214 |
- <p class="c_002c9a fwRg" <c:if test="${resultAllSentList.kakaoResendSuccCount > 0}">onclick="javascript:fnMsgSFDetailList('${resultAllSentList.msgGroupId}', 'S'); return false;" style="cursor:pointer;"</c:if>>
|
|
| 215 |
- <fmt:formatNumber value="${resultAllSentList.kakaoResendSuccCount}" pattern="#,###.#"/></p>
|
|
| 216 |
- </td> |
|
| 217 |
- <%-- <td> |
|
| 218 |
- <p class="c_002c9a fwRg"> |
|
| 219 |
- <c:if test="${succPrice > 0}"><fmt:formatNumber value="${succPrice}" pattern="#,###.#"/></c:if>
|
|
| 220 |
- <c:if test="${succPrice eq 0}">0</c:if>
|
|
| 221 |
- </p> |
|
| 222 |
- </td> --%> |
|
| 223 |
- </tr> |
|
| 224 |
- <tr> |
|
| 225 |
- <td class="c_222"><p>실패/대기</p></td> |
|
| 226 |
- <td class="c_222"> |
|
| 227 |
- <!-- 실패건이 1건 이상이면 클릭이벤트 추가 --> |
|
| 228 |
- <p <c:if test="${(resultAllSentList.waitCount+resultAllSentList.failCount) > 0}"> onclick="javascript:fnMsgSFDetailList('${resultAllSentList.msgGroupId}', 'F'); return false;" style="cursor:pointer;"</c:if>>
|
|
| 229 |
- <fmt:formatNumber value="${resultAllSentList.failCount}" pattern="#,###"/> / <fmt:formatNumber value="${resultAllSentList.waitCount}" pattern="#,###"/></p>
|
|
| 230 |
- </td> |
|
| 231 |
- <td class="c_222"><p>실패</p></td> |
|
| 232 |
- <td class="c_222"><!-- 실패건이 1건 이상이면 클릭이벤트 추가 --> |
|
| 233 |
- <p <c:if test="${resultAllSentList.kakaoResendFailCount > 0}"> onclick="javascript:fnMsgSFDetailList('${resultAllSentList.msgGroupId}', 'F'); return false;" style="cursor:pointer;"</c:if>>
|
|
| 234 |
- <fmt:formatNumber value="${resultAllSentList.kakaoResendFailCount}" pattern="#,###"/></p></td>
|
|
| 235 |
- <%--<td class="c_222"> |
|
| 236 |
- <p> |
|
| 237 |
- <c:if test="${(failPrice+waitPrice) > 0}"><fmt:formatNumber value="${(failPrice+waitPrice)}" pattern="#,###.#"/></c:if>
|
|
| 238 |
- <c:if test="${(failPrice+waitPrice) eq 0}">0</c:if>
|
|
| 239 |
- </p> |
|
| 240 |
- </td>--%> |
|
| 241 | 266 |
</tr> |
| 242 | 267 |
</c:forEach> |
| 243 | 268 |
</c:if> |
| 244 | 269 |
<c:if test="${empty resultAllSentList}">
|
| 245 | 270 |
<tr> |
| 246 |
- <td colspan="11">발송 내역이 없습니다.</td> |
|
| 271 |
+ <td colspan="12">발송 내역이 없습니다.</td> |
|
| 247 | 272 |
</tr> |
| 248 | 273 |
</c:if> |
| 249 | 274 |
</tbody> |
| 250 | 275 |
</table> |
| 251 | 276 |
</div> |
| 252 |
- <!-- 전송건별 끝 --> |
|
| 253 | 277 |
|
| 254 |
- <!-- 받는사람(개인별) privatevate --> |
|
| 255 |
- <div class="tb_wrap" id="privateListTable" style="display:none;"> |
|
| 256 |
- <table class="tType4"> |
|
| 257 |
- <colgroup> |
|
| 258 |
- <col style="width: 40px;"> |
|
| 259 |
- <col style="width: 15%;"> |
|
| 260 |
- <col style="width: 12%;"> |
|
| 261 |
- <col style="width: 90px;"> |
|
| 262 |
- <col style="width: 12%;"> |
|
| 263 |
- <col style="width: 14%;"> |
|
| 264 |
- <col style="width: 11%;"> |
|
| 265 |
- <col style="width: 11%;"> |
|
| 266 |
- </colgroup> |
|
| 267 |
- <thead> |
|
| 268 |
- <tr> |
|
| 269 |
- <th> |
|
| 270 |
- <label for="" class="label">전체 선택</label> |
|
| 271 |
- <input type="checkbox"> |
|
| 272 |
- </th> |
|
| 273 |
- <th> |
|
| 274 |
- 발송일시 |
|
| 275 |
- <div class="sort_wrap"> |
|
| 276 |
- <input type="button" class="sort sortBtn" id="sort_reqdate"> |
|
| 277 |
- </div> |
|
| 278 |
- </th> |
|
| 279 |
- <th> |
|
| 280 |
- 형태 |
|
| 281 |
- <div class="sort_wrap"> |
|
| 282 |
- <input type="button" class="sort sortBtn" id="sort_msgType"> |
|
| 283 |
- </div> |
|
| 284 |
- </th> |
|
| 285 |
- <th>내용</th> |
|
| 286 |
- <th> |
|
| 287 |
- 받는사람 |
|
| 288 |
- <div class="sort_wrap"> |
|
| 289 |
- <input type="button" class="sort sortBtn" id="sort_callTo"> |
|
| 290 |
- </div> |
|
| 291 |
- </th> |
|
| 292 |
- <th> |
|
| 293 |
- 발신번호 |
|
| 294 |
- <div class="sort_wrap"> |
|
| 295 |
- <input type="button" class="sort sortBtn" id="sort_callFrom"> |
|
| 296 |
- </div> |
|
| 297 |
- </th> |
|
| 298 |
- <th>카카오톡 결과</th> |
|
| 299 |
- <th>대체문자 결과</th> |
|
| 300 |
- </tr> |
|
| 301 |
- </thead> |
|
| 302 |
- |
|
| 303 |
- <tbody> |
|
| 304 |
- <c:if test="${not empty resultAllSentList}">
|
|
| 305 |
- <c:forEach var="resultAllSentList" items="${resultAllSentList}" varStatus="status">
|
|
| 306 |
- <tr> |
|
| 307 |
- <td> |
|
| 308 |
- <label for="msgSentDel${status.count}" class="label">선택</label>
|
|
| 309 |
- <input type="checkbox" id="msgSentDel${status.count}" name="msgSentDel"
|
|
| 310 |
- value="${resultAllSentList.msgSeq}" <c:if test="${resultAllSentList.curState eq '0'}">disabled</c:if>>
|
|
| 311 |
- </td> |
|
| 312 |
- <td><p><fmt:formatDate pattern = "yyyy-MM-dd HH:mm" value = "${resultAllSentList.reqdate}" /></p></td>
|
|
| 313 |
- <td> |
|
| 314 |
- <p class="c_222 fwRg"> |
|
| 315 |
- <c:if test="${resultAllSentList.msgType eq '8'}">알림톡</c:if>
|
|
| 316 |
- <c:if test="${resultAllSentList.msgType eq '9'}">친구톡</c:if>
|
|
| 317 |
- </p> |
|
| 318 |
- </td> |
|
| 319 |
- <td> |
|
| 320 |
-<%-- <button class="btnType btnType20" data-tooltip="rev_popup01" onClick="javascript:fnRevDetailPop('${resultAllSentList.msgGroupId}','${resultAllSentList.msgId}','${resultAllSentList.fileCnt}'); return false;">상세보기</button> --%>
|
|
| 321 |
- <button class="btnType btnType20" onClick="javascript:fnRevDetailPop('${resultAllSentList.msgGroupId}','${resultAllSentList.msgId}'); return false;">상세보기</button>
|
|
| 322 |
- <!-- <button class="btnType btnType20" data-tooltip="rev_popup03">상세보기</button> --> |
|
| 323 |
- </td> |
|
| 324 |
- <td> |
|
| 325 |
- <c:choose> |
|
| 326 |
- <c:when test="${resultAllSentList.msgGroupCnt > 1}">
|
|
| 327 |
- <p> |
|
| 328 |
- <c:choose> |
|
| 329 |
- <c:when test="${resultAllSentList.addrNm ne '-' and resultAllSentList.addrNm ne ''}">
|
|
| 330 |
- <c:out value="${resultAllSentList.addrNm}"/>
|
|
| 331 |
- </c:when> |
|
| 332 |
- <c:otherwise> |
|
| 333 |
- <c:out value="${resultAllSentList.callToComma}"/>
|
|
| 334 |
- </c:otherwise> |
|
| 335 |
- </c:choose> 외 <fmt:formatNumber value="${resultAllSentList.msgGroupCnt - 1}" pattern="#,###"/>명
|
|
| 336 |
- </p> |
|
| 337 |
- </c:when> |
|
| 338 |
- <c:when test="${resultAllSentList.addrNm ne '-' and resultAllSentList.addrNm ne ''}">
|
|
| 339 |
- <p><c:out value="${resultAllSentList.addrNm}"/></p>
|
|
| 340 |
- </c:when> |
|
| 341 |
- <c:otherwise> |
|
| 342 |
- <p><c:out value="${resultAllSentList.callToComma}"/></p>
|
|
| 343 |
- </c:otherwise> |
|
| 344 |
- </c:choose> |
|
| 345 |
- </td> |
|
| 346 |
- <td><p><c:out value="${resultAllSentList.callFromComma}"/></p></td>
|
|
| 347 |
- <td> |
|
| 348 |
- <c:choose> |
|
| 349 |
- <c:when test="${resultAllSentList.msgResult eq 'S'}">
|
|
| 350 |
- <p class="c_002c9a fwRg">정상수신</p> |
|
| 351 |
- </c:when> |
|
| 352 |
- <c:when test="${resultAllSentList.msgResult eq 'W'}">
|
|
| 353 |
- <p class="fwRg c_19b32b">발송대기</p> |
|
| 354 |
- </c:when> |
|
| 355 |
- <c:when test="${resultAllSentList.msgResult eq 'F'}">
|
|
| 356 |
- <p class="fwRg c_e40000">수신오류</p> |
|
| 357 |
- </c:when> |
|
| 358 |
- <c:otherwise>-</c:otherwise> |
|
| 359 |
- </c:choose> |
|
| 360 |
- </td> |
|
| 361 |
- <td> |
|
| 362 |
- <!-- 알림톡 수신오류인 경우, 대체문자 발송 여부에 따라 정상수신/수신오류 표기 --> |
|
| 363 |
- <c:choose> |
|
| 364 |
- <c:when test="${resultAllSentList.msgResult eq 'F' and resultAllSentList.bizKakaoResendYn eq 'Y' and resultAllSentList.callStatus eq 'S'}">
|
|
| 365 |
- <p class="c_002c9a fwRg">정상수신</p> |
|
| 366 |
- </c:when> |
|
| 367 |
- <c:when test="${resultAllSentList.msgResult eq 'F' and resultAllSentList.bizKakaoResendYn eq 'Y' and resultAllSentList.callStatus eq 'F'}">
|
|
| 368 |
- <p class="fwRg c_e40000">수신오류</p> |
|
| 369 |
- </c:when> |
|
| 370 |
- <c:otherwise>-</c:otherwise> |
|
| 371 |
- </c:choose> |
|
| 372 |
- </td> |
|
| 373 |
- |
|
| 374 |
- </tr> |
|
| 375 |
- </c:forEach> |
|
| 376 |
- </c:if> |
|
| 377 |
- <c:if test="${empty resultAllSentList}">
|
|
| 378 |
- <tr> |
|
| 379 |
- <td colspan="8">발송 내역이 없습니다.</td> |
|
| 380 |
- </tr> |
|
| 381 |
- </c:if> |
|
| 382 |
- </tbody> |
|
| 383 |
- </table> |
|
| 384 |
- </div> |
|
| 385 |
- <!-- 수신자별 끝 --> |
|
| 386 |
- |
|
| 278 |
+ <!--// 발송화면 개선 : 카카오톡 테이블 수정 --> |
|
| 279 |
+ |
|
| 387 | 280 |
<div class="table_btn clearfix"> |
| 388 |
- <div class="table_btn_left"> |
|
| 389 |
- <!-- 2022.07.04 발송결과 화면에 리스트 선택삭제 기능 제거(카운팅 및 금액 합산 오류 관련) --> |
|
| 390 |
-<!-- <button type="button" class="btnType btnType15" onClick="javascript:fnDelete(); return false;"><i class="remove_img"></i>선택삭제</button> --> |
|
| 391 |
- <button type="button" data-tooltip="rev_popup02" class="btnType btnType15"><i class="add_img"></i>그룹등록</button> |
|
| 392 |
- <button type="button" class="btnType btnType15" onClick="javascript:fnDeleteAddrNo('${kakaoSentVO.listType}'); return false;"><i class="remove_img"></i>주소록에서 번호 삭제</button>
|
|
| 393 |
- <button type="button" class="btnType btnType15" onClick="javascript:fnAddBlockNo('${kakaoSentVO.listType}'); return false;"></i>수신거부번호 등록</button>
|
|
| 281 |
+ <div class="table_btn_left"> |
|
| 282 |
+ <button type="button" onclick="javascript:fnDelete(); return false;" class="btnType btnType15"><i class="remove_img"></i>선택삭제</button> |
|
| 394 | 283 |
</div> |
| 395 | 284 |
<div class="table_btn_right"> |
| 396 |
- <button type="button" class="excel_btn btnType" onClick="javascript:fnExcelDownLoad('all','${kakaoSentVO.listType}'); return false;"><i class="downroad"></i>엑셀 다운로드</button>
|
|
| 397 |
- <button type="button" class="print_btn btnType" onClick="javascript:fnShowPrintPopup('all','${kakaoSentVO.tabType}'); return false;"><i class="print_img"></i>발송결과 출력하기</button>
|
|
| 285 |
+ <button type="button" class="excel_btn btnType"><i class="downroad"></i>발송결과 리스트</button> |
|
| 398 | 286 |
</div> |
| 399 |
- </div> |
|
| 287 |
+ </div> |
|
| 288 |
+ |
|
| 400 | 289 |
<c:if test="${!empty resultAllSentList}">
|
| 401 | 290 |
<ul class="pagination"> |
| 402 | 291 |
<ui:pagination paginationInfo = "${paginationInfo}" type="imageWeb" jsFunction="linkPage" />
|
| 403 | 292 |
</ul> |
| 404 | 293 |
</c:if> |
| 294 |
+ |
|
| 295 |
+ <form id="resCancelForm" name="resCancelForm" method="post"> |
|
| 296 |
+ <input type="hidden" id="msgGroupId" name="msgGroupId" value=""/> |
|
| 297 |
+ </form>(No newline at end of file) |
+++ src/main/webapp/WEB-INF/jsp/web/kakao/sent/KakaoSentAllListAjax_back_250318.jsp
... | ... | @@ -0,0 +1,405 @@ |
| 1 | +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> | |
| 2 | +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> | |
| 3 | +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> | |
| 4 | +<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> | |
| 5 | +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> | |
| 6 | +<%@ page import="itn.com.cmm.LoginVO" %> | |
| 7 | +<script src="/publish/js/content.js"></script> | |
| 8 | +<script src="/publish/js/popupLayer.js"></script> | |
| 9 | +<script type="text/javascript"> | |
| 10 | +$(document).ready(function(){ | |
| 11 | + | |
| 12 | + /* 목록 정렬 항목 아이콘 표시 */ | |
| 13 | + var searchSortCnd = $("[name='searchSortCnd']").val(); | |
| 14 | + var searchSortOrd = $("[name='searchSortOrd']").val(); | |
| 15 | + if (searchSortCnd != "" && searchSortOrd != "" && searchSortCnd != undefined && searchSortOrd != undefined) { | |
| 16 | + var $sort_div = $("#sort_"+ searchSortCnd); | |
| 17 | + var sortClass = 'sortBtn' ; | |
| 18 | + if (searchSortOrd == "desc") sortClass = "sortBtnDesc"; | |
| 19 | + $sort_div.replaceClass('sortBtn' , sortClass) ; | |
| 20 | + $sort_div.attr("sortOrd", searchSortOrd); | |
| 21 | + } | |
| 22 | + | |
| 23 | + //체크박스 전체 선택 및 해제 | |
| 24 | + var allChkSts = false; | |
| 25 | + $("#allCheck").click(function(){ | |
| 26 | + | |
| 27 | + if(!allChkSts){// 전체선택이 해제되어 있을 경우 | |
| 28 | + | |
| 29 | + $("input[name=msgSentDel]").prop("checked", true); | |
| 30 | + allChkSts = true; | |
| 31 | + | |
| 32 | + //발송 대기건은 선택 삭제가 안되도록 처리함 | |
| 33 | + $("input:checkbox[name='msgSentDel']:checked").each(function(index){ | |
| 34 | + | |
| 35 | + var disabledChk = $(this).prop('disabled'); | |
| 36 | + if(disabledChk){ //checkbox disabled 인 것은 제외하고 아이디 저장 | |
| 37 | + | |
| 38 | + $(this).prop("checked", false); | |
| 39 | + | |
| 40 | + } | |
| 41 | + | |
| 42 | + }); | |
| 43 | + | |
| 44 | + }else{ | |
| 45 | + | |
| 46 | + $("input[name=msgSentDel]").prop("checked", false); | |
| 47 | + allChkSts = false; | |
| 48 | + | |
| 49 | + } | |
| 50 | + }); | |
| 51 | + | |
| 52 | + if($("#tdType").val() == "groupList" || $("#tdType").val() == ""){ | |
| 53 | + $("#privateListTable").hide(); | |
| 54 | + $("#groupListTable").show(); | |
| 55 | + }else{ | |
| 56 | + $("#privateListTable").show(); | |
| 57 | + $("#groupListTable").hide(); | |
| 58 | + } | |
| 59 | +}); | |
| 60 | + | |
| 61 | +</script> | |
| 62 | + <input type="button" id="tooltopClick" data-tooltip="rev_popup01" style="display:none;"/> | |
| 63 | + <div class="list_info"> | |
| 64 | + <input type="hidden" id="tdType" value="${kakaoSentVO.listType}"> | |
| 65 | + <p>총 <span class="c_e40000"><c:out value="${totalRecordCount}"/></span>건</p> | |
| 66 | + <div> | |
| 67 | + <label for="pageUnit" class="label">줄보기 선택</label> | |
| 68 | + <select id="pageUnit" name="pageUnit" class="selType2"> | |
| 69 | + <option value="10" <c:if test="${paginationInfo.recordCountPerPage == '10'}">selected</c:if> >10개보기</option> | |
| 70 | + <option value="20" <c:if test="${paginationInfo.recordCountPerPage == '20'}">selected</c:if> >20개보기</option> | |
| 71 | + <option value="30" <c:if test="${paginationInfo.recordCountPerPage == '30'}">selected</c:if> >30개보기</option> | |
| 72 | + </select> | |
| 73 | + </div> | |
| 74 | + </div> | |
| 75 | + <!-- 전송건별 - groupList - --> | |
| 76 | + <div class="tb_wrap" id="groupListTable"> | |
| 77 | + <table class="tType4"> | |
| 78 | + <colgroup> | |
| 79 | + <col style="width: 40px;"> | |
| 80 | + <col style="width: 14%;"> | |
| 81 | + <col style="width: 7%;"> | |
| 82 | + <col style="width: 10%;"> | |
| 83 | + <col style="width: 18%;"> | |
| 84 | + <col style="width: 12%;"> | |
| 85 | + <col style="width: 10%;"> | |
| 86 | + <col style="width: 12%;"> | |
| 87 | + <col style="width: 7%;"> | |
| 88 | + <col style="width: 12%;"> | |
| 89 | + <col style="width: 7%;"> | |
| 90 | + <%-- <col style="width: 10%;"> --%> | |
| 91 | + </colgroup> | |
| 92 | + <thead> | |
| 93 | + <tr> | |
| 94 | + <th> | |
| 95 | + <label for="" class="label">전체 선택</label> | |
| 96 | + <input type="checkbox"> | |
| 97 | + </th> | |
| 98 | + <th> | |
| 99 | + 발송일시 | |
| 100 | + <div class="sort_wrap"> | |
| 101 | + <input type="button" class="sort sortBtn" id="sort_reqdate"> | |
| 102 | + </div> | |
| 103 | + </th> | |
| 104 | + <th> | |
| 105 | + 형태 | |
| 106 | + <div class="sort_wrap"> | |
| 107 | + <input type="button" class="sort sortBtn" id="sort_msgType"> | |
| 108 | + </div> | |
| 109 | + </th> | |
| 110 | + <th>내용</th> | |
| 111 | + <th> | |
| 112 | + 받는사람 | |
| 113 | + <div class="sort_wrap"> | |
| 114 | + <input type="button" class="sort sortBtn" id="sort_callTo"> | |
| 115 | + </div> | |
| 116 | + </th> | |
| 117 | + <th> | |
| 118 | + 발신번호 | |
| 119 | + <div class="sort_wrap"> | |
| 120 | + <input type="button" class="sort sortBtn" id="sort_callFrom"> | |
| 121 | + </div> | |
| 122 | + </th> | |
| 123 | + <th> | |
| 124 | + 발송건수 | |
| 125 | + <div class="sort_wrap"> | |
| 126 | + <input type="button" class="sort sortBtn" id="sort_msgGroupCnt"> | |
| 127 | + </div> | |
| 128 | + </th> | |
| 129 | + <th>카카오톡 결과</th> | |
| 130 | + <th>건수</th> | |
| 131 | + <th>대체문자 결과</th> | |
| 132 | + <th>건수</th> | |
| 133 | + <!-- <th>금액</th> --> | |
| 134 | + </tr> | |
| 135 | + </thead> | |
| 136 | + | |
| 137 | + <tbody> | |
| 138 | + <c:if test="${not empty resultAllSentList}"> | |
| 139 | + <c:forEach var="resultAllSentList" items="${resultAllSentList}" varStatus="status"> | |
| 140 | + <tr> | |
| 141 | + <td rowspan="2"> | |
| 142 | + <label for="msgSentDel${status.count}" class="label">선택</label> | |
| 143 | + <input type="checkbox" id="msgSentDel${status.count}" name="msgSentDel" | |
| 144 | + value="${resultAllSentList.msgGroupId}" <c:if test="${resultAllSentList.curState eq '0'}">disabled</c:if>> | |
| 145 | + </td> | |
| 146 | + <td rowspan="2"> | |
| 147 | + <c:choose> | |
| 148 | + <c:when test="${resultAllSentList.atDelayYn eq 'Y' && resultAllSentList.atDelayCompleteYn eq 'N'}"> | |
| 149 | + <c:choose> | |
| 150 | + <c:when test="${resultAllSentList.curState eq '0'}"> | |
| 151 | + <%-- | |
| 152 | + 20240906 추가 | |
| 153 | + 발송 대기 상태일 때만 원래 발송시간을 보여주고, 발송이 완료되면 발송 처리 완료 시간(reqDate)을 보여준다. | |
| 154 | + 30분 딜레이 된 건으로 관리자 승인/취소 처리가 완료 되지 않은 건에 대해서 -30분 처리하여 원래 사용자가 보내려던 시간을 표시해줌 | |
| 155 | + --%> | |
| 156 | + <p><fmt:formatDate pattern = "yyyy-MM-dd HH:mm" value = "${resultAllSentList.atDelayOrgTime}" /></p> | |
| 157 | + </c:when> | |
| 158 | + <c:otherwise> | |
| 159 | + <p><fmt:formatDate pattern = "yyyy-MM-dd HH:mm" value = "${resultAllSentList.reqdate}" /></p> | |
| 160 | + </c:otherwise> | |
| 161 | + </c:choose> | |
| 162 | + </c:when> | |
| 163 | + <c:otherwise> | |
| 164 | + <p><fmt:formatDate pattern = "yyyy-MM-dd HH:mm" value = "${resultAllSentList.reqdate}" /></p> | |
| 165 | + </c:otherwise> | |
| 166 | + </c:choose> | |
| 167 | + </td> | |
| 168 | + <td rowspan="2"> | |
| 169 | + <p class="c_222 fwRg"> | |
| 170 | + <c:if test="${resultAllSentList.msgType eq '8'}">알림톡</c:if> | |
| 171 | + <c:if test="${resultAllSentList.msgType eq '9'}">친구톡</c:if> | |
| 172 | + </p> | |
| 173 | + </td> | |
| 174 | + <td rowspan="2"> | |
| 175 | +<%-- <button class="btnType btnType20" data-tooltip="rev_popup01" onClick="javascript:fnRevDetailPop('${resultAllSentList.msgGroupId}','${resultAllSentList.msgId}','${resultAllSentList.fileCnt}'); return false;">상세보기</button> --%> | |
| 176 | + <button class="btnType btnType20" onClick="javascript:fnRevDetailPop('${resultAllSentList.msgGroupId}','${resultAllSentList.msgId}'); return false;">상세보기</button> | |
| 177 | + </td> | |
| 178 | + <td rowspan="2"> | |
| 179 | + <c:choose> | |
| 180 | + <c:when test="${resultAllSentList.msgGroupCnt > 1}"> | |
| 181 | + <p> | |
| 182 | + <c:choose> | |
| 183 | + <c:when test="${resultAllSentList.addrNm ne '-' and resultAllSentList.addrNm ne ''}"> | |
| 184 | + <c:out value="${resultAllSentList.addrNm}"/> | |
| 185 | + </c:when> | |
| 186 | + <c:otherwise> | |
| 187 | + <c:out value="${resultAllSentList.callToComma}"/> | |
| 188 | + </c:otherwise> | |
| 189 | + </c:choose> 외 <fmt:formatNumber value="${resultAllSentList.msgGroupCnt - 1}" pattern="#,###"/>명 | |
| 190 | + </p> | |
| 191 | + </c:when> | |
| 192 | + <c:when test="${resultAllSentList.addrNm ne '-' and resultAllSentList.addrNm ne ''}"> | |
| 193 | + <p><c:out value="${resultAllSentList.addrNm}"/></p> | |
| 194 | + </c:when> | |
| 195 | + <c:otherwise> | |
| 196 | + <p><c:out value="${resultAllSentList.callToComma}"/></p> | |
| 197 | + </c:otherwise> | |
| 198 | + </c:choose> | |
| 199 | +<%-- <p>${resultAllSentList.msgGroupId}</p> --%> | |
| 200 | + </td> | |
| 201 | + <td rowspan="2"><p><c:out value="${resultAllSentList.callFromComma}"/></p></td> | |
| 202 | + <td rowspan="2"><p><c:out value="${resultAllSentList.msgGroupCnt}"/></p></td> | |
| 203 | + | |
| 204 | + | |
| 205 | + | |
| 206 | + <td><p class="c_002c9a fwRg">정상수신</p></td> | |
| 207 | + <td> | |
| 208 | + <!-- 성공건이 1건 이상이면 클릭이벤트 추가 --> | |
| 209 | + <p class="c_002c9a fwRg" <c:if test="${resultAllSentList.successCount > 0}">onclick="javascript:fnMsgSFDetailList('${resultAllSentList.msgGroupId}', 'S'); return false;" style="cursor:pointer;"</c:if>> | |
| 210 | + <fmt:formatNumber value="${resultAllSentList.successCount}" pattern="#,###.#"/></p> | |
| 211 | + </td> | |
| 212 | + <td><p class="c_002c9a fwRg">정상수신</p></td> | |
| 213 | + <td> | |
| 214 | + <!-- 성공건이 1건 이상이면 클릭이벤트 추가 --> | |
| 215 | + <p class="c_002c9a fwRg" <c:if test="${resultAllSentList.kakaoResendSuccCount > 0}">onclick="javascript:fnMsgSFDetailList('${resultAllSentList.msgGroupId}', 'S'); return false;" style="cursor:pointer;"</c:if>> | |
| 216 | + <fmt:formatNumber value="${resultAllSentList.kakaoResendSuccCount}" pattern="#,###.#"/></p> | |
| 217 | + </td> | |
| 218 | + <%-- <td> | |
| 219 | + <p class="c_002c9a fwRg"> | |
| 220 | + <c:if test="${succPrice > 0}"><fmt:formatNumber value="${succPrice}" pattern="#,###.#"/></c:if> | |
| 221 | + <c:if test="${succPrice eq 0}">0</c:if> | |
| 222 | + </p> | |
| 223 | + </td> --%> | |
| 224 | + </tr> | |
| 225 | + <tr> | |
| 226 | + <td class="c_222"><p>실패/대기</p></td> | |
| 227 | + <td class="c_222"> | |
| 228 | + <!-- 실패건이 1건 이상이면 클릭이벤트 추가 --> | |
| 229 | + <p <c:if test="${(resultAllSentList.waitCount+resultAllSentList.failCount) > 0}"> onclick="javascript:fnMsgSFDetailList('${resultAllSentList.msgGroupId}', 'F'); return false;" style="cursor:pointer;"</c:if>> | |
| 230 | + <fmt:formatNumber value="${resultAllSentList.failCount}" pattern="#,###"/> / <fmt:formatNumber value="${resultAllSentList.waitCount}" pattern="#,###"/></p> | |
| 231 | + </td> | |
| 232 | + <td class="c_222"><p>실패</p></td> | |
| 233 | + <td class="c_222"><!-- 실패건이 1건 이상이면 클릭이벤트 추가 --> | |
| 234 | + <p <c:if test="${resultAllSentList.kakaoResendFailCount > 0}"> onclick="javascript:fnMsgSFDetailList('${resultAllSentList.msgGroupId}', 'F'); return false;" style="cursor:pointer;"</c:if>> | |
| 235 | + <fmt:formatNumber value="${resultAllSentList.kakaoResendFailCount}" pattern="#,###"/></p></td> | |
| 236 | + <%--<td class="c_222"> | |
| 237 | + <p> | |
| 238 | + <c:if test="${(failPrice+waitPrice) > 0}"><fmt:formatNumber value="${(failPrice+waitPrice)}" pattern="#,###.#"/></c:if> | |
| 239 | + <c:if test="${(failPrice+waitPrice) eq 0}">0</c:if> | |
| 240 | + </p> | |
| 241 | + </td>--%> | |
| 242 | + </tr> | |
| 243 | + </c:forEach> | |
| 244 | + </c:if> | |
| 245 | + <c:if test="${empty resultAllSentList}"> | |
| 246 | + <tr> | |
| 247 | + <td colspan="11">발송 내역이 없습니다.</td> | |
| 248 | + </tr> | |
| 249 | + </c:if> | |
| 250 | + </tbody> | |
| 251 | + </table> | |
| 252 | + </div> | |
| 253 | + <!-- 전송건별 끝 --> | |
| 254 | + | |
| 255 | + <!-- 받는사람(개인별) privatevate --> | |
| 256 | + <div class="tb_wrap" id="privateListTable" style="display:none;"> | |
| 257 | + <table class="tType4"> | |
| 258 | + <colgroup> | |
| 259 | + <col style="width: 40px;"> | |
| 260 | + <col style="width: 15%;"> | |
| 261 | + <col style="width: 12%;"> | |
| 262 | + <col style="width: 90px;"> | |
| 263 | + <col style="width: 12%;"> | |
| 264 | + <col style="width: 14%;"> | |
| 265 | + <col style="width: 11%;"> | |
| 266 | + <col style="width: 11%;"> | |
| 267 | + </colgroup> | |
| 268 | + <thead> | |
| 269 | + <tr> | |
| 270 | + <th> | |
| 271 | + <label for="" class="label">전체 선택</label> | |
| 272 | + <input type="checkbox"> | |
| 273 | + </th> | |
| 274 | + <th> | |
| 275 | + 발송일시 | |
| 276 | + <div class="sort_wrap"> | |
| 277 | + <input type="button" class="sort sortBtn" id="sort_reqdate"> | |
| 278 | + </div> | |
| 279 | + </th> | |
| 280 | + <th> | |
| 281 | + 형태 | |
| 282 | + <div class="sort_wrap"> | |
| 283 | + <input type="button" class="sort sortBtn" id="sort_msgType"> | |
| 284 | + </div> | |
| 285 | + </th> | |
| 286 | + <th>내용</th> | |
| 287 | + <th> | |
| 288 | + 받는사람 | |
| 289 | + <div class="sort_wrap"> | |
| 290 | + <input type="button" class="sort sortBtn" id="sort_callTo"> | |
| 291 | + </div> | |
| 292 | + </th> | |
| 293 | + <th> | |
| 294 | + 발신번호 | |
| 295 | + <div class="sort_wrap"> | |
| 296 | + <input type="button" class="sort sortBtn" id="sort_callFrom"> | |
| 297 | + </div> | |
| 298 | + </th> | |
| 299 | + <th>카카오톡 결과</th> | |
| 300 | + <th>대체문자 결과</th> | |
| 301 | + </tr> | |
| 302 | + </thead> | |
| 303 | + | |
| 304 | + <tbody> | |
| 305 | + <c:if test="${not empty resultAllSentList}"> | |
| 306 | + <c:forEach var="resultAllSentList" items="${resultAllSentList}" varStatus="status"> | |
| 307 | + <tr> | |
| 308 | + <td> | |
| 309 | + <label for="msgSentDel${status.count}" class="label">선택</label> | |
| 310 | + <input type="checkbox" id="msgSentDel${status.count}" name="msgSentDel" | |
| 311 | + value="${resultAllSentList.msgSeq}" <c:if test="${resultAllSentList.curState eq '0'}">disabled</c:if>> | |
| 312 | + </td> | |
| 313 | + <td><p><fmt:formatDate pattern = "yyyy-MM-dd HH:mm" value = "${resultAllSentList.reqdate}" /></p></td> | |
| 314 | + <td> | |
| 315 | + <p class="c_222 fwRg"> | |
| 316 | + <c:if test="${resultAllSentList.msgType eq '8'}">알림톡</c:if> | |
| 317 | + <c:if test="${resultAllSentList.msgType eq '9'}">친구톡</c:if> | |
| 318 | + </p> | |
| 319 | + </td> | |
| 320 | + <td> | |
| 321 | +<%-- <button class="btnType btnType20" data-tooltip="rev_popup01" onClick="javascript:fnRevDetailPop('${resultAllSentList.msgGroupId}','${resultAllSentList.msgId}','${resultAllSentList.fileCnt}'); return false;">상세보기</button> --%> | |
| 322 | + <button class="btnType btnType20" onClick="javascript:fnRevDetailPop('${resultAllSentList.msgGroupId}','${resultAllSentList.msgId}'); return false;">상세보기</button> | |
| 323 | + <!-- <button class="btnType btnType20" data-tooltip="rev_popup03">상세보기</button> --> | |
| 324 | + </td> | |
| 325 | + <td> | |
| 326 | + <c:choose> | |
| 327 | + <c:when test="${resultAllSentList.msgGroupCnt > 1}"> | |
| 328 | + <p> | |
| 329 | + <c:choose> | |
| 330 | + <c:when test="${resultAllSentList.addrNm ne '-' and resultAllSentList.addrNm ne ''}"> | |
| 331 | + <c:out value="${resultAllSentList.addrNm}"/> | |
| 332 | + </c:when> | |
| 333 | + <c:otherwise> | |
| 334 | + <c:out value="${resultAllSentList.callToComma}"/> | |
| 335 | + </c:otherwise> | |
| 336 | + </c:choose> 외 <fmt:formatNumber value="${resultAllSentList.msgGroupCnt - 1}" pattern="#,###"/>명 | |
| 337 | + </p> | |
| 338 | + </c:when> | |
| 339 | + <c:when test="${resultAllSentList.addrNm ne '-' and resultAllSentList.addrNm ne ''}"> | |
| 340 | + <p><c:out value="${resultAllSentList.addrNm}"/></p> | |
| 341 | + </c:when> | |
| 342 | + <c:otherwise> | |
| 343 | + <p><c:out value="${resultAllSentList.callToComma}"/></p> | |
| 344 | + </c:otherwise> | |
| 345 | + </c:choose> | |
| 346 | + </td> | |
| 347 | + <td><p><c:out value="${resultAllSentList.callFromComma}"/></p></td> | |
| 348 | + <td> | |
| 349 | + <c:choose> | |
| 350 | + <c:when test="${resultAllSentList.msgResult eq 'S'}"> | |
| 351 | + <p class="c_002c9a fwRg">정상수신</p> | |
| 352 | + </c:when> | |
| 353 | + <c:when test="${resultAllSentList.msgResult eq 'W'}"> | |
| 354 | + <p class="fwRg c_19b32b">발송대기</p> | |
| 355 | + </c:when> | |
| 356 | + <c:when test="${resultAllSentList.msgResult eq 'F'}"> | |
| 357 | + <p class="fwRg c_e40000">수신오류</p> | |
| 358 | + </c:when> | |
| 359 | + <c:otherwise>-</c:otherwise> | |
| 360 | + </c:choose> | |
| 361 | + </td> | |
| 362 | + <td> | |
| 363 | + <!-- 알림톡 수신오류인 경우, 대체문자 발송 여부에 따라 정상수신/수신오류 표기 --> | |
| 364 | + <c:choose> | |
| 365 | + <c:when test="${resultAllSentList.msgResult eq 'F' and resultAllSentList.bizKakaoResendYn eq 'Y' and resultAllSentList.callStatus eq 'S'}"> | |
| 366 | + <p class="c_002c9a fwRg">정상수신</p> | |
| 367 | + </c:when> | |
| 368 | + <c:when test="${resultAllSentList.msgResult eq 'F' and resultAllSentList.bizKakaoResendYn eq 'Y' and resultAllSentList.callStatus eq 'F'}"> | |
| 369 | + <p class="fwRg c_e40000">수신오류</p> | |
| 370 | + </c:when> | |
| 371 | + <c:otherwise>-</c:otherwise> | |
| 372 | + </c:choose> | |
| 373 | + </td> | |
| 374 | + | |
| 375 | + </tr> | |
| 376 | + </c:forEach> | |
| 377 | + </c:if> | |
| 378 | + <c:if test="${empty resultAllSentList}"> | |
| 379 | + <tr> | |
| 380 | + <td colspan="8">발송 내역이 없습니다.</td> | |
| 381 | + </tr> | |
| 382 | + </c:if> | |
| 383 | + </tbody> | |
| 384 | + </table> | |
| 385 | + </div> | |
| 386 | + <!-- 수신자별 끝 --> | |
| 387 | + | |
| 388 | + <div class="table_btn clearfix"> | |
| 389 | + <div class="table_btn_left"> | |
| 390 | + <!-- 2022.07.04 발송결과 화면에 리스트 선택삭제 기능 제거(카운팅 및 금액 합산 오류 관련) --> | |
| 391 | +<!-- <button type="button" class="btnType btnType15" onClick="javascript:fnDelete(); return false;"><i class="remove_img"></i>선택삭제</button> --> | |
| 392 | + <button type="button" data-tooltip="rev_popup02" class="btnType btnType15"><i class="add_img"></i>그룹등록</button> | |
| 393 | + <button type="button" class="btnType btnType15" onClick="javascript:fnDeleteAddrNo('${kakaoSentVO.listType}'); return false;"><i class="remove_img"></i>주소록에서 번호 삭제</button> | |
| 394 | + <button type="button" class="btnType btnType15" onClick="javascript:fnAddBlockNo('${kakaoSentVO.listType}'); return false;"></i>수신거부번호 등록</button> | |
| 395 | + </div> | |
| 396 | + <div class="table_btn_right"> | |
| 397 | + <button type="button" class="excel_btn btnType" onClick="javascript:fnExcelDownLoad('all','${kakaoSentVO.listType}'); return false;"><i class="downroad"></i>엑셀 다운로드</button> | |
| 398 | + <button type="button" class="print_btn btnType" onClick="javascript:fnShowPrintPopup('all','${kakaoSentVO.tabType}'); return false;"><i class="print_img"></i>발송결과 출력하기</button> | |
| 399 | + </div> | |
| 400 | + </div> | |
| 401 | + <c:if test="${!empty resultAllSentList}"> | |
| 402 | + <ul class="pagination"> | |
| 403 | + <ui:pagination paginationInfo = "${paginationInfo}" type="imageWeb" jsFunction="linkPage" /> | |
| 404 | + </ul> | |
| 405 | + </c:if> |
--- src/main/webapp/WEB-INF/jsp/web/kakao/sent/KakaoSentDetailPopAjax.jsp
+++ src/main/webapp/WEB-INF/jsp/web/kakao/sent/KakaoSentDetailPopAjax.jsp
... | ... | @@ -5,111 +5,112 @@ |
| 5 | 5 |
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> |
| 6 | 6 |
<% pageContext.setAttribute("newLineChar", "\n"); %>
|
| 7 | 7 |
|
| 8 |
- <div class="list_tab_wrap2 kakao_rev_tab"> |
|
| 9 |
- <!-- tab button --> |
|
| 10 |
- <ul class="list_tab"> |
|
| 11 |
- <li class="tab active"><button type="button" onclick="popupTab(this,'1');" id="atBtn">카카오톡</button></li> |
|
| 12 |
- <c:if test="${resultMsgDetail.bizKakaoResendYn eq 'Y'}">
|
|
| 13 |
- <li class="tab"><button type="button" onclick="popupTab(this,'2');">대체문자</button></li> |
|
| 14 |
- </c:if> |
|
| 15 |
- </ul><!--// tab button --> |
|
| 16 |
- </div> |
|
| 8 |
+<div class="phone"> |
|
| 9 |
+ <!-- 탭스타일 --> |
|
| 10 |
+ <div class="list_tab_wrap2 type5"> |
|
| 11 |
+ <ul class="tabType3" id="tabType" name="tabType"> |
|
| 12 |
+ <li class="tab active"><button type="button" onclick="phoneTab(this,'1');" title="선택됨">카카오톡</button></li> |
|
| 13 |
+ <c:if test="${resultMsgDetail.bizKakaoResendYn eq 'Y'}">
|
|
| 14 |
+ <li class="tab"><button type="button" onclick="phoneTab(this,'2');">대체문자</button></li> |
|
| 15 |
+ </c:if> |
|
| 16 |
+ </ul> |
|
| 17 |
+ </div> |
|
| 18 |
+ <!--// 탭스타일 --> |
|
| 17 | 19 |
|
| 18 |
- <div class="popCont current kakao_wrap" id="popCont_1"> |
|
| 19 |
- <div class="rev_pop_in"> |
|
| 20 |
- <div class="rev_pop_middle clearfix"> |
|
| 21 |
- <span><c:out value="${resultMsgDetail.reqDate }" /></span>
|
|
| 22 |
- <span class="msg_com msg_allimtalk"> |
|
| 23 |
- <c:choose> |
|
| 24 |
- <c:when test="${msgType eq '8'}">
|
|
| 25 |
- 알림톡 |
|
| 26 |
- </c:when> |
|
| 27 |
- <c:when test="${msgType eq '9'}">
|
|
| 28 |
- 친구톡 |
|
| 29 |
- </c:when> |
|
| 30 |
- <c:otherwise> |
|
| 31 |
- </c:otherwise> |
|
| 32 |
- </c:choose> |
|
| 33 |
- </span> |
|
| 34 |
- </div> |
|
| 35 |
- <div class="rev_pop_txt"> |
|
| 36 |
- <div class="text_preview"> |
|
| 37 |
- <div class="allimtalk_title"> |
|
| 38 |
- <img src="/publish/images/content/icon_allimtalk.png" alt=""> |
|
| 39 |
- <c:choose> |
|
| 40 |
- <c:when test="${msgType eq '8'}">
|
|
| 41 |
- 알림톡 도착 |
|
| 42 |
- </c:when> |
|
| 43 |
- <c:when test="${msgType eq '9'}">
|
|
| 44 |
- 친구톡 도착 |
|
| 45 |
- </c:when> |
|
| 46 |
- <c:otherwise> |
|
| 47 |
- </c:otherwise> |
|
| 48 |
- </c:choose> |
|
| 49 |
- </div> |
|
| 50 |
- <div class="allimtalk_content"> |
|
| 51 |
- <!-- 강조 텍스트 --> |
|
| 52 |
- <!-- 강조 텍스트 --> |
|
| 53 |
- <c:choose> |
|
| 54 |
- <c:when test="${kakaoTemplateInfo.templateEmphasizeType eq 'TEXT'}">
|
|
| 55 |
- <p class="emphasis_side_text"><c:out value="${kakaoTemplateInfo.templateSubtitle}"/></p>
|
|
| 56 |
- <p class="emphasis_title_text"><c:out value="${kakaoTemplateInfo.templateTitle}"/></p>
|
|
| 57 |
- </c:when> |
|
| 58 |
- <c:when test="${kakaoTemplateInfo.templateEmphasizeType eq 'IMAGE'}">
|
|
| 59 |
- <div class="kakao_image"> |
|
| 60 |
- <img src="<c:url value='${kakaoTemplateInfo.templateImageUrl}'/>" alt="">
|
|
| 61 |
- </div> |
|
| 62 |
- </c:when> |
|
| 63 |
- <c:otherwise> |
|
| 64 |
- </c:otherwise> |
|
| 65 |
- </c:choose> |
|
| 66 |
- |
|
| 67 |
- <!-- 알림톡 내용 표시 --> |
|
| 68 |
- <p class="template_text"> |
|
| 69 |
- <!-- 내용 --> |
|
| 70 |
- <!-- 내용 --> |
|
| 71 |
- <c:out value="${fn:replace(fn:replace(kakaoTemplateInfo.templateContent, newLineChar, '<br/>'), newLineChar2, '<br/>')}" escapeXml="false"/>
|
|
| 72 |
- </p> |
|
| 73 |
- |
|
| 74 |
- <!-- 부가정보 내용 --> |
|
| 75 |
- <c:choose> |
|
| 76 |
- <c:when test="${kakaoTemplateInfo.templateMessageType eq 'EX'}">
|
|
| 77 |
- <!-- 부가정보형인 경우 부가정보 내용 표시 --> |
|
| 78 |
- <p class="side_info_text"><c:out value="${kakaoTemplateInfo.templateExtra}"/></p>
|
|
| 79 |
- </c:when> |
|
| 80 |
- <c:when test="${kakaoTemplateInfo.templateMessageType eq 'AD'}">
|
|
| 81 |
- <!-- 채널 추가형인경우 채널 추가 메세지 표시 --> |
|
| 82 |
- <p class="channel_info_text"><c:out value="${kakaoTemplateInfo.templateAd}"/></p>
|
|
| 83 |
- </c:when> |
|
| 84 |
- <c:otherwise> |
|
| 85 |
- </c:otherwise> |
|
| 86 |
- </c:choose> |
|
| 87 |
- |
|
| 88 |
- <!-- 채널 추가형을 선택한 경우 자동으로 버튼이 하나 추가됨, 버튼을 추가한 경우 버튼 정보 표시 --> |
|
| 89 |
- <c:forEach var="templatInfoButtonList" items="${kakaoTemplateInfo.buttonList}" varStatus="status">
|
|
| 90 |
- <c:choose> |
|
| 91 |
- <c:when test="${templatInfoButtonList.name eq '채널 추가'}">
|
|
| 92 |
- <button type="button" class="btn_kakao_channel"><img src="/publish/images/content/icon_kakao_channel_plus.png" alt=""> 채널추가</button> |
|
| 93 |
- </c:when> |
|
| 94 |
- <c:otherwise> |
|
| 95 |
- <button type="button" class="btn_kakao_type"><c:out value="${templatInfoButtonList.name}"/></button>
|
|
| 96 |
- </c:otherwise> |
|
| 97 |
- </c:choose> |
|
| 98 |
- </c:forEach> |
|
| 99 |
- </div> |
|
| 100 |
- </div> |
|
| 101 |
- </div> |
|
| 20 |
+ <!-- 카카오 알림톡 미리보기 --> |
|
| 21 |
+ <div class="tab_phone current" id="tab_phone_1"> |
|
| 22 |
+ <div class="phone_kakako"> |
|
| 23 |
+ <div class="phoneIn"> |
|
| 24 |
+ <p class="prev_p"><img src="/publish/images/content/kakao_prev_icon.png" alt=""><c:out value="${resultMsgDetail.yellowId}"/></p>
|
|
| 25 |
+ <!-- 텍스트 미리보기 --> |
|
| 26 |
+ <div class="text_preview"> |
|
| 27 |
+ <div class="allimtalk_title"> |
|
| 28 |
+ <img src="/publish/images/content/icon_allimtalk.png" alt=""> |
|
| 29 |
+ <c:choose> |
|
| 30 |
+ <c:when test="${msgType eq '8'}">알림톡 도착</c:when>
|
|
| 31 |
+ <c:when test="${msgType eq '9'}">친구톡 도착</c:when>
|
|
| 32 |
+ </c:choose> |
|
| 33 |
+ </div> |
|
| 34 |
+ <div class="allimtalk_content"> |
|
| 35 |
+ <c:choose> |
|
| 36 |
+ <c:when test="${kakaoTemplateInfo.templateEmphasizeType eq 'TEXT'}">
|
|
| 37 |
+ <p class="emphasis_side_text"><c:out value="${kakaoTemplateInfo.templateSubtitle}"/></p>
|
|
| 38 |
+ <p class="emphasis_title_text"><c:out value="${kakaoTemplateInfo.templateTitle}"/></p>
|
|
| 39 |
+ </c:when> |
|
| 40 |
+ <c:when test="${kakaoTemplateInfo.templateEmphasizeType eq 'IMAGE'}">
|
|
| 41 |
+ <div class="kakao_image"> |
|
| 42 |
+ <img src="<c:url value='${kakaoTemplateInfo.templateImageUrl}'/>" alt="">
|
|
| 43 |
+ </div> |
|
| 44 |
+ </c:when> |
|
| 45 |
+ </c:choose> |
|
| 46 |
+ |
|
| 47 |
+ <p class="template_text"> |
|
| 48 |
+ <c:out value="${fn:replace(fn:replace(kakaoTemplateInfo.templateContent, newLineChar, '<br/>'), newLineChar2, '<br/>')}" escapeXml="false"/>
|
|
| 49 |
+ </p> |
|
| 50 |
+ |
|
| 51 |
+ <c:choose> |
|
| 52 |
+ <c:when test="${kakaoTemplateInfo.templateMessageType eq 'EX'}">
|
|
| 53 |
+ <p class="side_info_text"><c:out value="${kakaoTemplateInfo.templateExtra}"/></p>
|
|
| 54 |
+ </c:when> |
|
| 55 |
+ <c:when test="${kakaoTemplateInfo.templateMessageType eq 'AD'}">
|
|
| 56 |
+ <p class="channel_info_text"><c:out value="${kakaoTemplateInfo.templateAd}"/></p>
|
|
| 57 |
+ </c:when> |
|
| 58 |
+ </c:choose> |
|
| 59 |
+ |
|
| 60 |
+ <c:forEach var="templatInfoButtonList" items="${kakaoTemplateInfo.buttonList}" varStatus="status">
|
|
| 61 |
+ <c:choose> |
|
| 62 |
+ <c:when test="${templatInfoButtonList.name eq '채널 추가'}">
|
|
| 63 |
+ <button type="button" class="btn_kakao_channel"><img src="/publish/images/content/icon_kakao_channel_plus.png" alt=""> 채널추가</button> |
|
| 64 |
+ </c:when> |
|
| 65 |
+ <c:otherwise> |
|
| 66 |
+ <button type="button" class="btn_kakao_type"><c:out value="${templatInfoButtonList.name}"/></button>
|
|
| 67 |
+ </c:otherwise> |
|
| 68 |
+ </c:choose> |
|
| 69 |
+ </c:forEach> |
|
| 70 |
+ </div> |
|
| 71 |
+ </div> |
|
| 72 |
+ </div> |
|
| 73 |
+ <p class="addText">※ 단말기 설정에 따라 다르게 보일 수 있습니다</p> |
|
| 74 |
+ </div> |
|
| 75 |
+ </div> |
|
| 76 |
+ <!--// 카카오 알림톡 미리보기 --> |
|
| 77 |
+ |
|
| 78 |
+ <!-- 문자 미리보기 --> |
|
| 79 |
+ <div class="tab_phone" id="tab_phone_2"> |
|
| 80 |
+ <div class="phoneIn"> |
|
| 81 |
+ <div> |
|
| 82 |
+ <p class="prev_p"><img src="/publish/images/search.png"> 문자내용</p> |
|
| 83 |
+ <div class="text_length2 clearfix"> |
|
| 84 |
+ <c:if test="${resultMsgDetail.bizKakaoResendYn eq 'Y'}">
|
|
| 85 |
+ <c:choose> |
|
| 86 |
+ <c:when test="${resultMsgDetail.bizKakaoResendTypeCnt > 1}">
|
|
| 87 |
+ <span class="msg_com msg_short">단문</span> |
|
| 88 |
+ <span class="msg_com msg_long">장문</span> |
|
| 89 |
+ </c:when> |
|
| 90 |
+ <c:when test="${resultMsgDetail.bizKakaoResendTypeCnt < 2
|
|
| 91 |
+ && resultMsgDetail.bizKakaoResendType eq 'SMS'}"> |
|
| 92 |
+ <span class="msg_com msg_short">단문</span> |
|
| 93 |
+ </c:when> |
|
| 94 |
+ <c:otherwise> |
|
| 95 |
+ <span class="msg_com msg_long">장문</span> |
|
| 96 |
+ </c:otherwise> |
|
| 97 |
+ </c:choose> |
|
| 98 |
+ </c:if> |
|
| 99 |
+ <div> |
|
| 100 |
+ <span>글자크기</span> |
|
| 101 |
+ <button type="button" onclick="changeFontSize('plus');"><img src="/publish/images/content/font_plus.png"></button>
|
|
| 102 |
+ <button type="button" onclick="changeFontSize('minus');"><img src="/publish/images/content/font_minus.png"></button>
|
|
| 102 | 103 |
</div> |
| 103 | 104 |
</div> |
| 104 |
- <div class="popCont replace_send_popup" id="popCont_2"> |
|
| 105 |
- <div class="rev_pop_in"> |
|
| 106 |
- <div class="rev_pop_middle clearfix"> |
|
| 107 |
- <span><c:out value="${resultMsgDetail.sentDate }" /></span>
|
|
| 108 |
- <span class="msg_com msg_allimtalk">대체문자</span> |
|
| 109 |
- </div> |
|
| 110 |
- <div class="rev_pop_txt"> |
|
| 111 |
- ${fn:replace(resultMsgDetail.bizKakaoResendOrgnlTxt, newLineChar, "<br/>")}
|
|
| 112 |
- </div> |
|
| 113 |
- </div> |
|
| 114 |
- </div> |
|
| 105 |
+ <div class="text_preview"> |
|
| 106 |
+ <div class="preview_auto"> |
|
| 107 |
+ <p class="realtime">${fn:replace(resultMsgDetail.bizKakaoResendOrgnlTxt, newLineChar, "<br/>")}</p>
|
|
| 108 |
+ </div> |
|
| 109 |
+ </div> |
|
| 110 |
+ </div> |
|
| 111 |
+ </div> |
|
| 112 |
+ <p class="addText">※ 단말기 설정에 따라 다르게 보일 수 있습니다</p> |
|
| 113 |
+ </div> |
|
| 114 |
+ <!--// 문자 미리보기 --> |
|
| 115 |
+</div> |
|
| 115 | 116 |
(No newline at end of file) |
+++ src/main/webapp/WEB-INF/jsp/web/kakao/sent/KakaoSentDetailPopAjax_back_250320.jsp
... | ... | @@ -0,0 +1,115 @@ |
| 1 | +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> | |
| 2 | +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> | |
| 3 | +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> | |
| 4 | +<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> | |
| 5 | +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> | |
| 6 | +<% pageContext.setAttribute("newLineChar", "\n"); %> | |
| 7 | + | |
| 8 | + <div class="list_tab_wrap2 kakao_rev_tab"> | |
| 9 | + <!-- tab button --> | |
| 10 | + <ul class="list_tab"> | |
| 11 | + <li class="tab active"><button type="button" onclick="popupTab(this,'1');" id="atBtn">카카오톡</button></li> | |
| 12 | + <c:if test="${resultMsgDetail.bizKakaoResendYn eq 'Y'}"> | |
| 13 | + <li class="tab"><button type="button" onclick="popupTab(this,'2');">대체문자</button></li> | |
| 14 | + </c:if> | |
| 15 | + </ul><!--// tab button --> | |
| 16 | + </div> | |
| 17 | + | |
| 18 | + <div class="popCont current kakao_wrap" id="popCont_1"> | |
| 19 | + <div class="rev_pop_in"> | |
| 20 | + <div class="rev_pop_middle clearfix"> | |
| 21 | + <span><c:out value="${resultMsgDetail.reqDate }" /></span> | |
| 22 | + <span class="msg_com msg_allimtalk"> | |
| 23 | + <c:choose> | |
| 24 | + <c:when test="${msgType eq '8'}"> | |
| 25 | + 알림톡 | |
| 26 | + </c:when> | |
| 27 | + <c:when test="${msgType eq '9'}"> | |
| 28 | + 친구톡 | |
| 29 | + </c:when> | |
| 30 | + <c:otherwise> | |
| 31 | + </c:otherwise> | |
| 32 | + </c:choose> | |
| 33 | + </span> | |
| 34 | + </div> | |
| 35 | + <div class="rev_pop_txt"> | |
| 36 | + <div class="text_preview"> | |
| 37 | + <div class="allimtalk_title"> | |
| 38 | + <img src="/publish/images/content/icon_allimtalk.png" alt=""> | |
| 39 | + <c:choose> | |
| 40 | + <c:when test="${msgType eq '8'}"> | |
| 41 | + 알림톡 도착 | |
| 42 | + </c:when> | |
| 43 | + <c:when test="${msgType eq '9'}"> | |
| 44 | + 친구톡 도착 | |
| 45 | + </c:when> | |
| 46 | + <c:otherwise> | |
| 47 | + </c:otherwise> | |
| 48 | + </c:choose> | |
| 49 | + </div> | |
| 50 | + <div class="allimtalk_content"> | |
| 51 | + <!-- 강조 텍스트 --> | |
| 52 | + <!-- 강조 텍스트 --> | |
| 53 | + <c:choose> | |
| 54 | + <c:when test="${kakaoTemplateInfo.templateEmphasizeType eq 'TEXT'}"> | |
| 55 | + <p class="emphasis_side_text"><c:out value="${kakaoTemplateInfo.templateSubtitle}"/></p> | |
| 56 | + <p class="emphasis_title_text"><c:out value="${kakaoTemplateInfo.templateTitle}"/></p> | |
| 57 | + </c:when> | |
| 58 | + <c:when test="${kakaoTemplateInfo.templateEmphasizeType eq 'IMAGE'}"> | |
| 59 | + <div class="kakao_image"> | |
| 60 | + <img src="<c:url value='${kakaoTemplateInfo.templateImageUrl}'/>" alt=""> | |
| 61 | + </div> | |
| 62 | + </c:when> | |
| 63 | + <c:otherwise> | |
| 64 | + </c:otherwise> | |
| 65 | + </c:choose> | |
| 66 | + | |
| 67 | + <!-- 알림톡 내용 표시 --> | |
| 68 | + <p class="template_text"> | |
| 69 | + <!-- 내용 --> | |
| 70 | + <!-- 내용 --> | |
| 71 | + <c:out value="${fn:replace(fn:replace(kakaoTemplateInfo.templateContent, newLineChar, '<br/>'), newLineChar2, '<br/>')}" escapeXml="false"/> | |
| 72 | + </p> | |
| 73 | + | |
| 74 | + <!-- 부가정보 내용 --> | |
| 75 | + <c:choose> | |
| 76 | + <c:when test="${kakaoTemplateInfo.templateMessageType eq 'EX'}"> | |
| 77 | + <!-- 부가정보형인 경우 부가정보 내용 표시 --> | |
| 78 | + <p class="side_info_text"><c:out value="${kakaoTemplateInfo.templateExtra}"/></p> | |
| 79 | + </c:when> | |
| 80 | + <c:when test="${kakaoTemplateInfo.templateMessageType eq 'AD'}"> | |
| 81 | + <!-- 채널 추가형인경우 채널 추가 메세지 표시 --> | |
| 82 | + <p class="channel_info_text"><c:out value="${kakaoTemplateInfo.templateAd}"/></p> | |
| 83 | + </c:when> | |
| 84 | + <c:otherwise> | |
| 85 | + </c:otherwise> | |
| 86 | + </c:choose> | |
| 87 | + | |
| 88 | + <!-- 채널 추가형을 선택한 경우 자동으로 버튼이 하나 추가됨, 버튼을 추가한 경우 버튼 정보 표시 --> | |
| 89 | + <c:forEach var="templatInfoButtonList" items="${kakaoTemplateInfo.buttonList}" varStatus="status"> | |
| 90 | + <c:choose> | |
| 91 | + <c:when test="${templatInfoButtonList.name eq '채널 추가'}"> | |
| 92 | + <button type="button" class="btn_kakao_channel"><img src="/publish/images/content/icon_kakao_channel_plus.png" alt=""> 채널추가</button> | |
| 93 | + </c:when> | |
| 94 | + <c:otherwise> | |
| 95 | + <button type="button" class="btn_kakao_type"><c:out value="${templatInfoButtonList.name}"/></button> | |
| 96 | + </c:otherwise> | |
| 97 | + </c:choose> | |
| 98 | + </c:forEach> | |
| 99 | + </div> | |
| 100 | + </div> | |
| 101 | + </div> | |
| 102 | + </div> | |
| 103 | + </div> | |
| 104 | + <div class="popCont replace_send_popup" id="popCont_2"> | |
| 105 | + <div class="rev_pop_in"> | |
| 106 | + <div class="rev_pop_middle clearfix"> | |
| 107 | + <span><c:out value="${resultMsgDetail.sentDate }" /></span> | |
| 108 | + <span class="msg_com msg_allimtalk">대체문자</span> | |
| 109 | + </div> | |
| 110 | + <div class="rev_pop_txt"> | |
| 111 | + ${fn:replace(resultMsgDetail.bizKakaoResendOrgnlTxt, newLineChar, "<br/>")} | |
| 112 | + </div> | |
| 113 | + </div> | |
| 114 | + </div> | |
| 115 | + (No newline at end of file) |
+++ src/main/webapp/WEB-INF/jsp/web/kakao/sent/KakaoSentDetailView.jsp
... | ... | @@ -0,0 +1,922 @@ |
| 1 | +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> | |
| 2 | +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> | |
| 3 | +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> | |
| 4 | +<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> | |
| 5 | +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> | |
| 6 | +<%@ taglib prefix="ec" uri="/WEB-INF/tld/ecnet_tld.tld"%> | |
| 7 | +<%@ taglib prefix="fnc" uri="/WEB-INF/tld/functions.tld"%> | |
| 8 | +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%> | |
| 9 | +<%@ page import="itn.com.cmm.LoginVO" %> | |
| 10 | +<% pageContext.setAttribute("newLineChar", "\n"); %> | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | +<style> | |
| 15 | +/* Tabulator Placeholder 기본 스타일 유지 */ | |
| 16 | +.tabulator-placeholder { | |
| 17 | + font-size: 22px !important; /* 기존 폰트 크기 유지 */ | |
| 18 | + color: #e2d6d6 !important; /* 기존 색상 유지 */ | |
| 19 | + font-weight: normal !important; /* 기본 폰트 두께 유지 */ | |
| 20 | + display: flex; | |
| 21 | + justify-content: center; | |
| 22 | + align-items: center; | |
| 23 | + height: 100%; | |
| 24 | +} | |
| 25 | + | |
| 26 | +</style> | |
| 27 | + | |
| 28 | +<script type="text/javascript"> | |
| 29 | + | |
| 30 | +var currentSearchKeyword = ""; // 검색어 저장 | |
| 31 | +var currentTabFilter = "전체"; // 현재 선택된 탭 (기본값: 전체) | |
| 32 | + | |
| 33 | +var $tbDtailList = null; //에러 팝업 영역 | |
| 34 | +$(document).ready(function(){ | |
| 35 | + | |
| 36 | + //발송 미리보기 영역 | |
| 37 | + previewPhone(); | |
| 38 | + | |
| 39 | + // 탭별 하위 버튼 활성화 | |
| 40 | + fn_rowBtnSH('전체'); | |
| 41 | + // 주소록 그룹 불러오기 | |
| 42 | + getAddrGroupList(); | |
| 43 | + | |
| 44 | + //Tabulator AJAX Data Loading | |
| 45 | + $tbDtailList = new Tabulator("#detailPopup", { | |
| 46 | + height: "255px", | |
| 47 | + width: "20%", | |
| 48 | + // layout: "fitDataStretch", // 데이터가 너비에 맞게 늘어나도록 설정 | |
| 49 | + layout: "fitColumns", // fitDataStretch 대신 fitColumns 사용 | |
| 50 | + autoColumns: false, | |
| 51 | + headerHozAlign: "center", | |
| 52 | + validationMode: "highlight", | |
| 53 | + clipboard: false, | |
| 54 | + clipboardCopySelector: "table", | |
| 55 | + clipboardPasteAction: "insert", // insert, update, replace | |
| 56 | + placeholder:"데이터를 불러오고 있습니다...", | |
| 57 | + columns: [ | |
| 58 | + { | |
| 59 | + title: "휴대폰", | |
| 60 | + field: "phone", | |
| 61 | + hozAlign: "center", | |
| 62 | + headerHozAlign: "center", | |
| 63 | + widthGrow: 1 | |
| 64 | + }, | |
| 65 | + { | |
| 66 | + title: "상세결과", | |
| 67 | + field: "result", | |
| 68 | + hozAlign: "center", | |
| 69 | + headerHozAlign: "center", | |
| 70 | + widthGrow: 1 | |
| 71 | + } | |
| 72 | + ] | |
| 73 | + }); | |
| 74 | + | |
| 75 | + fn_getDetailList(); | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + $('#goPageBtn').click(function(){ | |
| 80 | + $("#goList").submit(); | |
| 81 | + }); | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + // 탭 버튼 클릭 이벤트 | |
| 86 | + $(".type4 .tabType3 .tab button").on("click", function () { | |
| 87 | + | |
| 88 | + // 모든 탭의 active 클래스 제거 | |
| 89 | + $(".type4 .tabType3 .tab").removeClass("active"); | |
| 90 | + | |
| 91 | + // 클릭한 버튼의 부모 요소(li)에 active 클래스 추가 | |
| 92 | + $(this).parent().addClass("active"); | |
| 93 | + | |
| 94 | + // 기존 버튼들의 title 속성 초기화 | |
| 95 | + $(".type4 .tabType3 .tab button").removeAttr("title"); | |
| 96 | + | |
| 97 | + // 선택된 버튼의 title 속성을 "선택됨"으로 변경 | |
| 98 | + $(this).attr("title", "선택됨"); | |
| 99 | + | |
| 100 | + // 검색어 초기화 | |
| 101 | + $("#searchInput").val(""); | |
| 102 | + | |
| 103 | + // 필터 적용 (검색 필터 없이 탭 기준으로만 적용) | |
| 104 | + fn_applyFilters(); | |
| 105 | + }); | |
| 106 | + | |
| 107 | + // 검색 버튼 클릭 시 실행 | |
| 108 | + $("#searchBtn").on("click", function () { | |
| 109 | + fn_search(); | |
| 110 | + }); | |
| 111 | + | |
| 112 | + // 실시간 검색 및 Enter 키 이벤트 처리 | |
| 113 | + $("#searchInput").on("keyup", function (event) { | |
| 114 | + let keyword = $(this).val().trim(); | |
| 115 | + | |
| 116 | + if (keyword.length > 2) { | |
| 117 | + console.log("keyword :: ", keyword); | |
| 118 | + fn_applyFilters({ field: "phone", type: "like", value: keyword }); | |
| 119 | + } else { | |
| 120 | + fn_applyFilters(null); | |
| 121 | + } | |
| 122 | + | |
| 123 | + // Enter 키 입력 시 검색 실행 | |
| 124 | + if (event.key === "Enter") { | |
| 125 | + fn_search(); | |
| 126 | + } | |
| 127 | + }); | |
| 128 | + | |
| 129 | + | |
| 130 | + | |
| 131 | + $('.listClose').on("click", function (){ | |
| 132 | + tooltipInit(); | |
| 133 | + }); | |
| 134 | + | |
| 135 | + $('.grpClose').on("click", function (){ | |
| 136 | + $('#grpNm').val('') | |
| 137 | + }); | |
| 138 | + | |
| 139 | + | |
| 140 | + $(document).on('change', '#addrGrpIdInfo', function() { | |
| 141 | + if ($("#addrGrpIdInfo option:selected").val() != "NEW") { | |
| 142 | + $("#grpNm").val(""); // 새그룹명 Clear; | |
| 143 | + } | |
| 144 | + }); | |
| 145 | + | |
| 146 | +}); | |
| 147 | +// window.onload = function(){ | |
| 148 | +// setTimeout(() => { | |
| 149 | +// //발송 미리보기 영역 | |
| 150 | +// previewPhone(); | |
| 151 | +// }, 100000); // 필터 적용 후 반영되도록 약간의 딜레이 추가 | |
| 152 | +// } | |
| 153 | + | |
| 154 | +//검색 실행 함수 | |
| 155 | +function fn_search() { | |
| 156 | + let keyword = $("#searchInput").val().trim(); | |
| 157 | + | |
| 158 | + if (keyword.length < 3) { | |
| 159 | + alert("검색어를 3자 이상 입력해주세요."); | |
| 160 | + return; | |
| 161 | + } | |
| 162 | + | |
| 163 | + fn_applyFilters({ field: "phone", type: "like", value: keyword }); | |
| 164 | +} | |
| 165 | + | |
| 166 | +/** | |
| 167 | + * @Discription : 튤팁 닫을 때 팝업 초기화 | |
| 168 | + */ | |
| 169 | +function tooltipInit(){ | |
| 170 | + | |
| 171 | + $tbDtailList.clearFilter(); | |
| 172 | + $("#searchInput").val(''); | |
| 173 | + $("#initTab").click(); | |
| 174 | +} | |
| 175 | + | |
| 176 | +/** | |
| 177 | + * @Discription : 상세결과 팝업 내용 가져오는 로직 | |
| 178 | + */ | |
| 179 | +function fn_getDetailList(){ | |
| 180 | + | |
| 181 | + var params = { | |
| 182 | + "msgGroupId" : $('#msgGroupId').val() | |
| 183 | + } | |
| 184 | + | |
| 185 | + $.ajax({ | |
| 186 | + type: "POST", | |
| 187 | + url: "/web/mjon/msgsent/findByMsgDetailListAjax.do", | |
| 188 | + data: params, | |
| 189 | + dataType:'json', | |
| 190 | + async: true, | |
| 191 | + success: function (returnData) { | |
| 192 | + console.log('returnData : ', returnData); | |
| 193 | + if(returnData.status == 'OK'){ | |
| 194 | + fn_setData(returnData.object); | |
| 195 | + | |
| 196 | + } | |
| 197 | + }, | |
| 198 | + error: function (e) { alert("오류가 발생하였습니다."); console.log("ERROR : ", e); } | |
| 199 | + }); | |
| 200 | +} | |
| 201 | + | |
| 202 | + | |
| 203 | +/** | |
| 204 | + * @Description: 데이터 설정 | |
| 205 | + */ | |
| 206 | +function fn_setData(data){ | |
| 207 | +// console.log('data : ', data); | |
| 208 | +// $tbDtailList.clearData(); | |
| 209 | + | |
| 210 | + const resultData = []; // 오류 데이터를 저장할 배열 | |
| 211 | + | |
| 212 | + data.forEach((row, index) => { | |
| 213 | + | |
| 214 | + resultData.push({ | |
| 215 | + // addrNm: row.addrNm, // 폰번호 | |
| 216 | + phone: row.callTo, // 폰번호 | |
| 217 | + result: row.statusTxt // 결과 메시지 추가 | |
| 218 | + }); | |
| 219 | + }); | |
| 220 | + | |
| 221 | + | |
| 222 | + // 오류 및 중복 데이터를 한 번에 추가 | |
| 223 | + $tbDtailList.setData(resultData); | |
| 224 | + | |
| 225 | +}; | |
| 226 | + | |
| 227 | + | |
| 228 | + | |
| 229 | +/** | |
| 230 | + * @Discription : 필터 적용 | |
| 231 | + */ | |
| 232 | +function fn_applyFilters(newFilter) { | |
| 233 | + console.log("newFilter :: ", newFilter); | |
| 234 | + // 현재 적용된 모든 필터 가져오기 | |
| 235 | + let filters = []; | |
| 236 | + | |
| 237 | + // 현재 선택된 탭 값 가져오기 | |
| 238 | + let selectedTab = $(".type4 .tabType3 .tab.active button").text().trim(); | |
| 239 | + | |
| 240 | + // 탭 필터 적용 (탭이 "전체"가 아닐 경우) | |
| 241 | + if (selectedTab !== "전체") { | |
| 242 | + filters.push({ field: "result", type: "like", value: selectedTab }); | |
| 243 | + } | |
| 244 | + | |
| 245 | + // 검색어가 입력된 경우 검색 필터 추가 | |
| 246 | + if (newFilter && newFilter.value) { | |
| 247 | + filters.push(newFilter); | |
| 248 | + } | |
| 249 | + | |
| 250 | + // 필터 적용 | |
| 251 | + $tbDtailList.setFilter(filters); | |
| 252 | + | |
| 253 | + // Placeholder 업데이트 | |
| 254 | + fn_setPlaceholder("검색 결과가 없습니다."); | |
| 255 | + | |
| 256 | + // 툽팁 하위 버튼 삭제 | |
| 257 | + fn_rowBtnSH(selectedTab); | |
| 258 | +} | |
| 259 | + | |
| 260 | + | |
| 261 | + | |
| 262 | + | |
| 263 | +/** | |
| 264 | + * @Description: 타블레이서 설명 수정 | |
| 265 | + */ | |
| 266 | +function fn_setPlaceholder(msg){ | |
| 267 | + | |
| 268 | + // 검색 후 데이터가 있는지 확인 후 placeholder 변경 | |
| 269 | + setTimeout(() => { | |
| 270 | + console.log("$tbDtailList.getRows('active').length :: ", $tbDtailList.getRows('active').length); | |
| 271 | + let filteredRows = $tbDtailList.getRows('active').length; // 필터링된 행 개수 가져오기 | |
| 272 | + if (filteredRows === 0) { | |
| 273 | + // 기존 데이터 유지하면서 빈 데이터 추가하여 placeholder 변경 | |
| 274 | + $(".tabulator-placeholder").text(msg); // placeholder 메시지 변경 | |
| 275 | + } | |
| 276 | + }, 300); // 필터 적용 후 반영되도록 약간의 딜레이 추가 | |
| 277 | +} | |
| 278 | + | |
| 279 | + | |
| 280 | +/** | |
| 281 | + * @Description: 필터링된 데이터만 다운로드 | |
| 282 | + */ | |
| 283 | + function fn_downloadFilteredExcel() { | |
| 284 | + // 현재 날짜 및 시간 가져오기 (YYYYMMDD_HHMMSS 형식) | |
| 285 | + let now = new Date(); | |
| 286 | + let timestamp = now.getFullYear() + | |
| 287 | + ("0" + (now.getMonth() + 1)).slice(-2) + | |
| 288 | + ("0" + now.getDate()).slice(-2) + "_" + | |
| 289 | + ("0" + now.getHours()).slice(-2) + | |
| 290 | + ("0" + now.getMinutes()).slice(-2) + | |
| 291 | + ("0" + now.getSeconds()).slice(-2); | |
| 292 | + | |
| 293 | + // 파일명 생성 | |
| 294 | + let fileName = "filtered_data_" + timestamp + ".xlsx"; | |
| 295 | + | |
| 296 | + // 필터링된 데이터 가져오기 | |
| 297 | + let filteredData = getFilteredDataByTab(); | |
| 298 | + | |
| 299 | + if (filteredData.length === 0) { | |
| 300 | + alert("다운로드할 데이터가 없습니다."); | |
| 301 | + return; | |
| 302 | + } | |
| 303 | + | |
| 304 | +// console.log("엑셀 다운로드 - 필터링된 데이터:", filteredData); | |
| 305 | + | |
| 306 | + | |
| 307 | + | |
| 308 | + // 컬럼명(타이틀) 설정 (배열 형태로 변환) | |
| 309 | + let headers = [["휴대폰", "상세결과"]]; | |
| 310 | + | |
| 311 | + console.log(filteredData); // 데이터 확인 | |
| 312 | + console.log(filteredData[0]); // 첫 번째 데이터 확인 (객체 키값 체크) | |
| 313 | + | |
| 314 | + | |
| 315 | + // 필터링된 데이터 배열로 변환 | |
| 316 | + let formattedData = filteredData.map(item => [item.phone, item.result]); | |
| 317 | + | |
| 318 | + | |
| 319 | + | |
| 320 | + // 타이틀 행 추가 | |
| 321 | + formattedData.unshift(headers[0]); | |
| 322 | + | |
| 323 | + // 엑셀 생성 | |
| 324 | + let workbook = XLSX.utils.book_new(); | |
| 325 | + let worksheet = XLSX.utils.aoa_to_sheet(formattedData); // `aoa_to_sheet` 사용 | |
| 326 | + | |
| 327 | + XLSX.utils.book_append_sheet(workbook, worksheet, "Filtered Data"); | |
| 328 | + | |
| 329 | + // 엑셀 파일 다운로드 | |
| 330 | + XLSX.writeFile(workbook, fileName); | |
| 331 | + } | |
| 332 | + | |
| 333 | +/** | |
| 334 | + * @ 예약 취소 | |
| 335 | + */ | |
| 336 | +function fnReservCancel(msgGroupId){ | |
| 337 | + | |
| 338 | + var form = document.resCancelForm; | |
| 339 | + var loginVO = '${LoginVO}'; | |
| 340 | + | |
| 341 | + form.msgGroupId.value = msgGroupId; | |
| 342 | + | |
| 343 | + if(loginVO == "" || loginVO == null){ | |
| 344 | + | |
| 345 | + alert("로그인 후 이용이 가능합니다."); | |
| 346 | + return false; | |
| 347 | + | |
| 348 | + } | |
| 349 | + console.log('msgGroupId : ', msgGroupId); | |
| 350 | + var data = new FormData(form); | |
| 351 | + url = "/web/mjon/reservmsg/deleteReservMsgCancelDataAjax.do"; | |
| 352 | + | |
| 353 | + if(confirm("정말 예약을 취소하시겠습니까?")){ | |
| 354 | + | |
| 355 | + $.ajax({ | |
| 356 | + type: "POST", | |
| 357 | + url: url, | |
| 358 | + data: data, | |
| 359 | + dataType:'json', | |
| 360 | + async: true, | |
| 361 | + processData: false, | |
| 362 | + contentType: false, | |
| 363 | + cache: false, | |
| 364 | + success: function (returnData, status) { | |
| 365 | + if(status == 'success'){ // status 확인 필요한가. 석세스 안뜨면 에러 가지 않나 | |
| 366 | + if("fail"==returnData.result){ | |
| 367 | + alert(returnData.message); | |
| 368 | + return false; | |
| 369 | + } | |
| 370 | + | |
| 371 | + alert("예약 발송이 정상적으로 취소 되었습니다."); | |
| 372 | + | |
| 373 | + location.reload(true); | |
| 374 | + | |
| 375 | + } else if(status== 'fail'){ | |
| 376 | + alert(returnData.message); | |
| 377 | + } | |
| 378 | + }, | |
| 379 | + error: function (e) { | |
| 380 | + alert("예약 취소에 실패하였습니다."); console.log("ERROR : ", e); | |
| 381 | + }, | |
| 382 | + beforeSend : function(xmlHttpRequest) { | |
| 383 | + //로딩창 show | |
| 384 | + $('.loading_layer').addClass('active'); | |
| 385 | + }, | |
| 386 | + complete : function(xhr, textStatus) { | |
| 387 | + //로딩창 hide | |
| 388 | + $('.loading_layer').removeClass('active'); | |
| 389 | + } | |
| 390 | + }); | |
| 391 | + | |
| 392 | + } | |
| 393 | + | |
| 394 | +} | |
| 395 | + | |
| 396 | +/** | |
| 397 | + * @알림톡 재전송 | |
| 398 | + */ | |
| 399 | +function fnMjMsgReSendAll() { | |
| 400 | + | |
| 401 | + var form = document.reSendAllForm; | |
| 402 | + | |
| 403 | + if (!confirm("알림톡 발송 화면으로 이동합니다.")) { | |
| 404 | + return; | |
| 405 | + } | |
| 406 | + | |
| 407 | + // msgKind에 따른 action 설정 | |
| 408 | + form.action = "/web/mjon/alimtalk/kakaoAlimtalkMsgDataView.do"; | |
| 409 | + | |
| 410 | + form.submit(); | |
| 411 | +} | |
| 412 | + | |
| 413 | + | |
| 414 | +function fn_rowBtnSH(tabText){ | |
| 415 | + var $addReg = $('#addReg'); | |
| 416 | + var $addRemove = $('#addRemove'); | |
| 417 | + // addReg 주소록 등록 | |
| 418 | + // addRemove 주소록 삭제 | |
| 419 | + if(tabText == '전체' | |
| 420 | + || tabText == '성공'){ | |
| 421 | + $addReg.show(); | |
| 422 | + $addRemove.hide(); | |
| 423 | + }else if(tabText == '대기'){ | |
| 424 | + $addReg.hide(); | |
| 425 | + $addRemove.hide(); | |
| 426 | + }else if(tabText == '실패' ){ | |
| 427 | + $addReg.hide(); | |
| 428 | + $addRemove.show(); | |
| 429 | + } | |
| 430 | +} | |
| 431 | + | |
| 432 | +function fnAddAddrNo(){ | |
| 433 | + | |
| 434 | + | |
| 435 | + let url = "/web/mjon/addr/insertByAddrGrpDataAndAddrDataAjax.do"; | |
| 436 | + | |
| 437 | + | |
| 438 | + console.log($("#addrGrpIdInfo option:selected").val()); | |
| 439 | + console.log($("#grpNm").val()); | |
| 440 | + if ($("#addrGrpIdInfo option:selected").val() == "NEW" | |
| 441 | + && $("#grpNm").val() == "") { | |
| 442 | + alert("저장할 그룹을 선택하거나 새 그룹명을 입력해주세요."); | |
| 443 | + return false; | |
| 444 | + } | |
| 445 | + | |
| 446 | + // 필터링된 데이터 가져오기 (탭 필터 적용) | |
| 447 | + let filteredData = getFilteredDataByTab(); | |
| 448 | + | |
| 449 | + console.log('filteredData : ', filteredData) | |
| 450 | + | |
| 451 | + // phone 필드 데이터만 추출 | |
| 452 | + let addrPhones = filteredData.map(row => row.phone); | |
| 453 | +// console.log('addrPhones : ', addrPhones) | |
| 454 | + | |
| 455 | + if(addrPhones.length < 1){ | |
| 456 | + alert('해당 탭에 데이터가 없습니다.'); | |
| 457 | + return false; | |
| 458 | + } | |
| 459 | + | |
| 460 | + // 주소록 그룹명 가져오기 | |
| 461 | + let addrGrpNm = $('#grpNm').val(); | |
| 462 | + let addrGrpId = $("#addrGrpIdInfo option:selected").val(); | |
| 463 | + | |
| 464 | + // 데이터 객체 생성 | |
| 465 | + let data = { | |
| 466 | + addrPhones : addrPhones | |
| 467 | + , addrGrpNm : addrGrpNm | |
| 468 | + , addrGrpId : addrGrpId | |
| 469 | + }; | |
| 470 | + | |
| 471 | + if(!confirm("연락처 정보를 주소록에 등록 하시겠습니까?")){ | |
| 472 | + return false; | |
| 473 | + } | |
| 474 | + | |
| 475 | + | |
| 476 | + $.ajax({ | |
| 477 | + type: "POST", | |
| 478 | + url: url, | |
| 479 | + data: JSON.stringify(data), | |
| 480 | + dataType: "json", | |
| 481 | + contentType: "application/json", | |
| 482 | + async: false, | |
| 483 | + processData: false, | |
| 484 | + success: function(data) { | |
| 485 | + | |
| 486 | + if(data.status == 'BAD_REQUEST'){ | |
| 487 | + alert(data.message); | |
| 488 | + return false; | |
| 489 | + } | |
| 490 | + | |
| 491 | + | |
| 492 | + // 성공 메세지 | |
| 493 | + alert(data.message); | |
| 494 | + // 그룹등록 팝업 닫기 | |
| 495 | + $('.grpClose').click(); | |
| 496 | + | |
| 497 | + }, | |
| 498 | + error: function(error) { | |
| 499 | + alert("오류가 발생하였습니다.") | |
| 500 | + console.error("에러 발생:", error); | |
| 501 | + } | |
| 502 | + }); | |
| 503 | +} | |
| 504 | + | |
| 505 | +function fnDelAddrNo(){ | |
| 506 | + | |
| 507 | + | |
| 508 | + let url = "/web/mjon/addr/deleteAddrNoDataAjax.do"; | |
| 509 | + | |
| 510 | + | |
| 511 | + // 필터링된 데이터 가져오기 (탭 필터 적용) | |
| 512 | + let filteredData = getFilteredDataByTab(); | |
| 513 | + | |
| 514 | + // phone 필드 데이터만 추출 | |
| 515 | + let addrPhones = filteredData.map(row => row.phone); | |
| 516 | + console.log('addrPhones : ', addrPhones) | |
| 517 | + | |
| 518 | + if(addrPhones.length < 1){ | |
| 519 | + alert('주소록에 살제할 연락처가 없습니다.'); | |
| 520 | + return false; | |
| 521 | + } | |
| 522 | + | |
| 523 | + // 데이터 객체 생성 | |
| 524 | + let data = { | |
| 525 | + addrPhones: addrPhones | |
| 526 | + }; | |
| 527 | + | |
| 528 | + let selectedTab = $(".type4 .tabType3 .tab.active button").text().trim(); | |
| 529 | + if(!confirm("발송"+selectedTab+" 번호를 주소록에서 삭제하시겠습니까?\n(모든 주소록 그룹에서 삭제)")){ | |
| 530 | + return false; | |
| 531 | + } | |
| 532 | + | |
| 533 | + $.ajax({ | |
| 534 | + type: "POST", | |
| 535 | + url: url, | |
| 536 | + data: JSON.stringify(data), | |
| 537 | + dataType: "json", | |
| 538 | + contentType: "application/json", | |
| 539 | + async: false, | |
| 540 | + processData: false, | |
| 541 | + success: function(data) { | |
| 542 | + | |
| 543 | + if(data.status == 'BAD_REQUEST'){ | |
| 544 | + alert(data.message); | |
| 545 | + return false; | |
| 546 | + } | |
| 547 | + | |
| 548 | + | |
| 549 | + // 성공 메세지 | |
| 550 | + alert(data.message); | |
| 551 | + | |
| 552 | + }, | |
| 553 | + error: function(error) { | |
| 554 | + alert("오류가 발생하였습니다.") | |
| 555 | + console.error("에러 발생:", error); | |
| 556 | + } | |
| 557 | + }); | |
| 558 | +} | |
| 559 | +/** | |
| 560 | + * @description 현재 선택된 탭(`result` 필터) 기준으로 데이터를 필터링 | |
| 561 | + * @returns {Array} 필터링된 데이터 리스트 | |
| 562 | + */ | |
| 563 | +// function getFilteredDataByTab() { | |
| 564 | +// // 현재 적용된 모든 필터 가져오기 | |
| 565 | +// let filters = $tbDtailList.getFilters(); | |
| 566 | + | |
| 567 | +// // 현재 모든 데이터 가져오기 (전체 데이터에서 필터 적용) | |
| 568 | +// let allData = $tbDtailList.getData(); | |
| 569 | + | |
| 570 | +// // 현재 적용된 필터에서 "result" 필터만 찾기 | |
| 571 | +// let tabFilter = filters.find(filter => filter.field === "result"); | |
| 572 | + | |
| 573 | +// // 탭 필터 적용하여 데이터 필터링 (수신번호 필터는 무시) | |
| 574 | +// return allData.filter(row => tabFilter ? row.result.includes(tabFilter.value) : true); | |
| 575 | +// } | |
| 576 | + function getFilteredDataByTab() { | |
| 577 | + // 현재 표시된(필터링된) 행들을 가져오기 | |
| 578 | + let filteredRows = $tbDtailList.getRows('active'); | |
| 579 | + | |
| 580 | + // 행의 데이터를 배열로 반환 | |
| 581 | + return filteredRows.map(row => row.getData()); | |
| 582 | + } | |
| 583 | + | |
| 584 | + | |
| 585 | + | |
| 586 | +//주소록 그룹정보 불러오기 | |
| 587 | +function getAddrGroupList() { | |
| 588 | + $.ajax({ | |
| 589 | + type : "POST", | |
| 590 | + async : false, | |
| 591 | + url : "/web/mjon/addr/addrGroupListAjax.do", | |
| 592 | + data : {}, | |
| 593 | + dataType:'json', | |
| 594 | + success : function(data) { | |
| 595 | + //alert(JSON.stringify(data.addrGroupList)); | |
| 596 | + | |
| 597 | + // Show Html | |
| 598 | + getAddrGroupListShow(data.addrGroupList); | |
| 599 | + }, | |
| 600 | + error : function(xhr, status, error) { | |
| 601 | + alert(error); | |
| 602 | + return false; | |
| 603 | + } | |
| 604 | + }); | |
| 605 | +} | |
| 606 | + | |
| 607 | +//Show Html | |
| 608 | +function getAddrGroupListShow(jsonList) { | |
| 609 | + var sHtml = ""; | |
| 610 | + sHtml += "<option value='NEW'>그룹추가</option>"; | |
| 611 | + sHtml += "<option value='0'>그룹미지정</option>"; | |
| 612 | + sHtml += "<option value='bookmark'>자주보내는 번호</option>"; | |
| 613 | + for (var j = 0; j < jsonList.length; j++) { | |
| 614 | + sHtml += " <option value='" + $.trim(jsonList[j].addrGrpId) + "' />" + $.trim(jsonList[j].addrGrpNm) + "</option>"; | |
| 615 | + } | |
| 616 | + | |
| 617 | + $("#addrGrpIdInfo").html(sHtml); | |
| 618 | +} | |
| 619 | + | |
| 620 | +function previewPhone(){ | |
| 621 | + $("#previewPhone").load("/web/kakao/sent/selectKakaoSentDetailViewPhoneAjax.do", $(document.resPopForm).serialize() ,function(response, status, xhr){ | |
| 622 | + if (status === 'success') { | |
| 623 | + $(this).html(response); | |
| 624 | + } | |
| 625 | + }); | |
| 626 | +} | |
| 627 | + | |
| 628 | +</script> | |
| 629 | +<div class="inner"> | |
| 630 | + | |
| 631 | + <input id="msgGroupId" type="hidden" value="${result.msgGroupId}"/> | |
| 632 | + | |
| 633 | + <!-- send top --> | |
| 634 | + <div class="send_top"> | |
| 635 | + <!-- 결제관리 - 요금 사용내역 --> | |
| 636 | + <div class="rev_admin_cont serv_content current"> | |
| 637 | + <div class="heading"> | |
| 638 | + <h2>발송결과 상세</h2> | |
| 639 | + <button type="button" class="button junk" data-tooltip="popupJunk" style="right:0;">통신사 스팸규격안내</button> | |
| 640 | + </div> | |
| 641 | + | |
| 642 | + <!-- 발송결과 상세 및 미리보기--> | |
| 643 | + | |
| 644 | + <div class="send_general"> | |
| 645 | + <!-- 발송결과 상세 정보 --> | |
| 646 | + <div class="resultcont_left"> | |
| 647 | + <!--발송정보--> | |
| 648 | + <div class="res_info"> | |
| 649 | + <div class="res_info_in"> | |
| 650 | + <div class="res_info_top clearfix"> | |
| 651 | + <p>발송정보</p> | |
| 652 | + <p><button type="button" class="btnType btnType3" onclick="fnMjMsgReSendAll();">재전송</button></p> | |
| 653 | + </div> | |
| 654 | + <div class="res_info_btm"> | |
| 655 | + <dl> | |
| 656 | + <dt>발송일시</dt> | |
| 657 | + <dd>${result.reqDate}</dd> | |
| 658 | + </dl> | |
| 659 | + <c:if test="${result.reserveYn eq 'Y' }"> | |
| 660 | + <dl><!-- 예약 시 --> | |
| 661 | + <dt>등록일시</dt> | |
| 662 | + <dd>${result.regDate}</dd> | |
| 663 | + </dl> | |
| 664 | + </c:if> | |
| 665 | + <dl> | |
| 666 | + <dt>형태</dt> | |
| 667 | + <dd> | |
| 668 | + <c:if test="${result.msgType eq '8'}">알림톡</c:if> | |
| 669 | + <c:if test="${result.msgType eq '9'}">친구톡</c:if> | |
| 670 | + </dd> | |
| 671 | + </dl> | |
| 672 | + <dl> | |
| 673 | + <dt>발송건수</dt> | |
| 674 | + <dd><span class="c_222"><fmt:formatNumber value="${result.msgGroupCnt}" type="number" groupingUsed="true" /></span>건</dd> | |
| 675 | + </dl> | |
| 676 | + <dl> | |
| 677 | + <dt>채널정보</dt> | |
| 678 | + <dd><c:out value="${result.yellowId}"/></dd> | |
| 679 | + </dl> | |
| 680 | + <dl> | |
| 681 | + <dt>진행상황 | |
| 682 | + <!-- 예약인 경우 --> | |
| 683 | + <c:if test="${result.reserveYn eq 'Y'}"> | |
| 684 | + <div class="icon_wrap"> | |
| 685 | + <div class="re">예약</div> | |
| 686 | + <!-- 예약일때만 분할이 있음 --> | |
| 687 | + <c:if test="${result.divideYn eq 'Y'}"> | |
| 688 | + <div class="di_info"> | |
| 689 | + <button class="di">분할</button> | |
| 690 | + <div class="di_hover_layer"> | |
| 691 | + <strong>${result.divideText }</strong> | |
| 692 | + </div> | |
| 693 | + </div> | |
| 694 | + </c:if> | |
| 695 | + </div> | |
| 696 | + </c:if> | |
| 697 | + <!--// 예약인 경우 --> | |
| 698 | + </dt> | |
| 699 | + <dd> | |
| 700 | + | |
| 701 | + <c:choose> | |
| 702 | + <c:when test="${result.statusCd eq '04' }"> | |
| 703 | + 예약취소(<c:out value="${result.canceldate }" />) | |
| 704 | + </c:when> | |
| 705 | + <c:when test="${result.statusCd ne '03' }"> | |
| 706 | + <ec:code codeId="ITN057" code="${result.statusCd }" /> | |
| 707 | + </c:when> | |
| 708 | + <c:otherwise> | |
| 709 | + <p><button class="btnType btnType20" onClick="javascript:fnReservCancel('${result.msgGroupId}'); return false;">예약취소</button></p> | |
| 710 | + </c:otherwise> | |
| 711 | + </c:choose> | |
| 712 | + </dd> | |
| 713 | + </dl> | |
| 714 | + </div> | |
| 715 | + <div class="res_info_btm"> | |
| 716 | + <dl> | |
| 717 | + <dt class="btm_charge">발송요금(합계)</dt> | |
| 718 | + <dd><span class="stcharge"> | |
| 719 | + <c:if test="${result.totPrice ne '-'}"> | |
| 720 | + <fmt:formatNumber value="${result.totPrice}" type="number" groupingUsed="true" minFractionDigits="0" maxFractionDigits="1" /> | |
| 721 | + </c:if> | |
| 722 | + <c:if test="${result.totPrice eq '-'}"> | |
| 723 | + 0 | |
| 724 | + </c:if> | |
| 725 | + </span>원</dd> | |
| 726 | + <!--<dd><span class="stcharge">-</span>원</dd>--><!-- 예역취소 후 금액은 하이픈 처리--> | |
| 727 | + </dl> | |
| 728 | + <div class="charge_line"> | |
| 729 | + <dl> | |
| 730 | + <dt class="charge_title">· 카카오톡</dt> | |
| 731 | + <dd><span class="c_222"> | |
| 732 | + <fmt:formatNumber value="${result.successPrice}" type="number" groupingUsed="true" minFractionDigits="0" maxFractionDigits="1" /> | |
| 733 | + </span>원</dd> | |
| 734 | + </dl> | |
| 735 | + <dl> | |
| 736 | + <dt class="charge_title">· 대체문자</dt> | |
| 737 | + <dd><span class="c_222"> | |
| 738 | + <fmt:formatNumber value="${result.kakaoResendSuccPrice}" type="number" groupingUsed="true" minFractionDigits="0" maxFractionDigits="1" /> | |
| 739 | + </span>원</dd> | |
| 740 | + </dl> | |
| 741 | + </div> | |
| 742 | + </div> | |
| 743 | + </div> | |
| 744 | + </div> | |
| 745 | + <!--// 발송정보--> | |
| 746 | + <!--상세결과--> | |
| 747 | + <div class="res_info"> | |
| 748 | + <div class="res_info_in"> | |
| 749 | + <div class="res_info_top clearfix" style="padding:0 0 10px 0;"> | |
| 750 | + <p>상세결과</p> | |
| 751 | + <p></p> | |
| 752 | + </div> | |
| 753 | + <div class="res_num"> | |
| 754 | + <div class="res_info_btm1"> | |
| 755 | + <dl> | |
| 756 | + <dt>전체건수</dt> | |
| 757 | + <dd><a href="#" data-tooltip="rev_popup04"><span class="c_222_g"><fmt:formatNumber value="${result.msgGroupCnt}" type="number" groupingUsed="true" /></span>건</a></dd> | |
| 758 | + </dl> | |
| 759 | + </div> | |
| 760 | + <div class="res_info_btm1"> | |
| 761 | + <dl> | |
| 762 | + <dt>성공건수</dt> | |
| 763 | + <dd><span class="c_002c9a_g"><fmt:formatNumber value="${result.successCount}" type="number" groupingUsed="true" /></span>건(${result.successPct})</dd> | |
| 764 | + </dl> | |
| 765 | + </div> | |
| 766 | + </div> | |
| 767 | + <div class="res_num"> | |
| 768 | + <div class="res_info_btm1"> | |
| 769 | + <dl> | |
| 770 | + <dt>대기건수</dt> | |
| 771 | + <dd><span class="c_666_g"><fmt:formatNumber value="${result.waitCount}" type="number" groupingUsed="true" /></span>건(${result.waitingPct})</dd> | |
| 772 | + </dl> | |
| 773 | + </div> | |
| 774 | + <div class="res_info_btm1"> | |
| 775 | + <dl> | |
| 776 | + <dt>실패건수</dt> | |
| 777 | + <dd><span class="c_e40000_g"><fmt:formatNumber value="${result.failCount}" type="number" groupingUsed="true" /></span>건(${result.failedPct})</dd> | |
| 778 | + </dl> | |
| 779 | + </div> | |
| 780 | + </div> | |
| 781 | + <p class="table_bottom_txt">* 전체건수를 클릭하면 받는 사람 상세정보를 확인하실 수 있습니다.</p> | |
| 782 | + </div> | |
| 783 | + </div> | |
| 784 | + <!--// 상세결과--> | |
| 785 | + </div> | |
| 786 | + <!--// 발송결과 상세 정보 --> | |
| 787 | + | |
| 788 | + <!-- 발송결과 미리보기 --> | |
| 789 | + <div class="resultcont_right" id="previewPhone"> | |
| 790 | + | |
| 791 | + </div> | |
| 792 | + <!--// 발송결과 미리보기 --> | |
| 793 | + </div> | |
| 794 | + | |
| 795 | + <!--// 발송결과 상세 및 미리보기--> | |
| 796 | + | |
| 797 | + <!-- 목록--> | |
| 798 | + <div class="btn_list_type1"> | |
| 799 | + <button class="btnType btnType17">목록</button> | |
| 800 | + </div> | |
| 801 | + <!--// 목록--> | |
| 802 | + | |
| 803 | + </div> | |
| 804 | + </div> | |
| 805 | + <!--// send top --> | |
| 806 | +</div> | |
| 807 | + | |
| 808 | + | |
| 809 | + | |
| 810 | + <!-- 발송대상리스트 팝업 --> | |
| 811 | + <div class="tooltip-wrap"> | |
| 812 | + <div class="popup-com ad_layer rev_popup04" tabindex="0" data-tooltip-con="rev_popup04" data-focus="rev_popup04" data-focus-prev="rev_popup04-close" style="width:530px;"> | |
| 813 | + <div class="popup_heading"> | |
| 814 | + <p>발송대상 리스트</p> | |
| 815 | + <button type="button" class="tooltip-close listClose" data-focus="rev_popup04-close"><img src="/publish/images/content/layerPopup_close.png" alt="팝업 닫기"></button> | |
| 816 | + </div> | |
| 817 | + <div class="layer_in"> | |
| 818 | + <div class="popup_search_type2"> | |
| 819 | + <label for="" class="label">검색종류 선택</label> | |
| 820 | + <div class="title">수신번호</div> | |
| 821 | + <label for="" class="label">검색어입력</label> | |
| 822 | + <input type="text" class="send_text" id="searchInput" placeholder="3자 이상 입력하세요." onfocus="this.placeholder=''" onblur="this.placeholder='3자 이상 입력하세요.'"> | |
| 823 | + <button type="button" id="searchBtn" class="btnType btnType2" style="width:63px; margin:0;">검색</button> | |
| 824 | + </div> | |
| 825 | + | |
| 826 | + <div class="list_tab_wrap2 type4"> | |
| 827 | + <ul class="tabType3" id="tabType" name="tabType"> | |
| 828 | + <li class="tab active"><button type="button" id="initTab" title="선택됨">전체</button></li> | |
| 829 | + <li class="tab"><button type="button">대기</button></li> | |
| 830 | + <li class="tab"><button type="button">성공</button></li> | |
| 831 | + <li class="tab"><button type="button">실패</button></li> | |
| 832 | + </ul> | |
| 833 | + </div> | |
| 834 | + | |
| 835 | + <div class="tb_wrap" id="detailPopup" style="min-height:200px;"> | |
| 836 | + <!-- 타블레이터 영역 --> | |
| 837 | + </div> | |
| 838 | + | |
| 839 | + <div class="table_btn clearfix"> | |
| 840 | + <div class="table_btn_left"> | |
| 841 | + <button type="button" onclick="fn_downloadFilteredExcel()" class="excel_btn btnType"><i class="downroad"></i>엑셀 다운로드</button> | |
| 842 | + <button type="button" id="addReg" data-tooltip="rev_popup02" class="btnType btnType14"><i class="add_img"></i>주소록 등록</button> | |
| 843 | + <button type="button" onclick="fnDelAddrNo()" id="addRemove" class="btnType btnType15"><i class="remove_img"></i>주소록에서 번호 삭제</button> | |
| 844 | + </div> | |
| 845 | + </div> | |
| 846 | + </div> | |
| 847 | + <div class="popup_btn_wrap2" style="margin: -40px auto 30px auto;"> | |
| 848 | + <button type="button" class="tooltip-close listClose" data-focus="adr_popup01-close" data-focus-next="popup02">닫기</button> | |
| 849 | + </div> | |
| 850 | + | |
| 851 | + </div> | |
| 852 | + </div> | |
| 853 | + <!-- //발송대상 리스트 안내 팝업 --> | |
| 854 | + | |
| 855 | + <!-- 주소록에 등록 팝업 --> | |
| 856 | + <div class="tooltip-wrap"> | |
| 857 | + <div class="popup-com adr_layer rev_popup02" tabindex="0" data-tooltip-con="rev_popup02" data-focus="rev_popup02" data-focus-prev="rev_popup02-close" style="width: 510px;"> | |
| 858 | + <div class="popup_heading"> | |
| 859 | + <p>주소록에 등록</p> | |
| 860 | + <button type="button" class="tooltip-close grpClose" data-focus="rev_popup02-close"><img src="/publish/images/content/layerPopup_close.png" alt="팝업 닫기"></button> | |
| 861 | + </div> | |
| 862 | + <div class="layer_in"> | |
| 863 | + <table class="layer_tType1 style1"> | |
| 864 | + <caption>주소록 그룹선택 표</caption> | |
| 865 | + <colgroup> | |
| 866 | + <col style="width: 80px"> | |
| 867 | + <col style="width: auto"> | |
| 868 | + </colgroup> | |
| 869 | + <tbody> | |
| 870 | + <tr> | |
| 871 | + <th>그룹 선택</th> | |
| 872 | + <td> | |
| 873 | + <label for="" class="label">그룹 선택</label> | |
| 874 | + <select id="addrGrpIdInfo" name="addrGrpIdInfo"> | |
| 875 | + </select> | |
| 876 | + <label for="" class="label">그룹명 입력</label> | |
| 877 | + <input type="text" id="grpNm" placeholder="새 그룹명을 입력해주세요." maxlength="24" onfocus="this.placeholder=''" onblur="this.placeholder='새 그룹명을 입력해주세요.'" class="inputLight"> | |
| 878 | + </td> | |
| 879 | + </tr> | |
| 880 | + </tbody> | |
| 881 | + </table> | |
| 882 | + <div class="popup_btn_wrap2"> | |
| 883 | + <button type="button" onclick="fnAddAddrNo()">등록</button> | |
| 884 | + <button type="button" class="tooltip-close grpClose" data-focus="rev_popup02-close" data-focus-next="rev_popup02">닫기</button> | |
| 885 | + </div> | |
| 886 | + </div> | |
| 887 | + </div> | |
| 888 | + </div> | |
| 889 | + <!--// 주소록에 등록 팝업 --> | |
| 890 | + | |
| 891 | + <!-- 이전 리스트 상태(검색조건, 페이징) 그대로 가기 위한 form --> | |
| 892 | + <form id="goList" name="goList" method="post" action="/web/mjon/msgsent/selectMsgSentView.do"> | |
| 893 | + <input type="hidden" name="pageIndex" value="<c:out value="${searchVO.pageIndex}" />" /> | |
| 894 | + <input type="hidden" name="searchSortCnd" value="<c:out value='${searchVO.searchSortCnd }' />" /> | |
| 895 | + <input type="hidden" name="searchSortOrd" value="<c:out value='${searchVO.searchSortOrd }' />" /> | |
| 896 | + <input type="hidden" name="searchCondition01" value="<c:out value='${searchVO.searchCondition01 }' />" /> | |
| 897 | + <input type="hidden" name="searchCondition02" value="<c:out value='${searchVO.searchCondition02 }' />" /> | |
| 898 | + <input type="hidden" name="searchStartDate" value="<c:out value='${searchVO.searchStartDate }' />" /> | |
| 899 | + <input type="hidden" name="searchEndDate" value="<c:out value='${searchVO.searchEndDate }' />" /> | |
| 900 | + <input type="hidden" name="searchCondition" value="<c:out value='${searchVO.searchCondition }' />" /> | |
| 901 | + <input type="hidden" name="searchKeyword" value="<c:out value='${searchVO.searchKeyword }' />" /> | |
| 902 | + <input type="hidden" name="pageUnit" value="<c:out value='${searchVO.pageUnit }' />" /> | |
| 903 | + </form> | |
| 904 | + | |
| 905 | + <!-- 예약 취소 --> | |
| 906 | + <form id="resCancelForm" name="resCancelForm" method="post"> | |
| 907 | + <input type="hidden" id="msgGroupId" name="msgGroupId" value=""/> | |
| 908 | + </form> | |
| 909 | + | |
| 910 | + <!-- 재발송 form --> | |
| 911 | + <form name="reSendAllForm" method="post"> | |
| 912 | + <input type="hidden" name="msgResendAllFlag" value="Y"/> | |
| 913 | + <input type="hidden" name="msgResendAllGroupId" value="${result.msgGroupId}"/> | |
| 914 | + <input type="hidden" name="msgResendAllYellowId" value="${result.yellowId}"/> | |
| 915 | + <input type="hidden" name="msgResendAllTmpKey" value="${result.msgNoticetalkTmpKey}"/> | |
| 916 | + </form> | |
| 917 | + | |
| 918 | + <form id="resPopForm" name="resPopForm" method="post"> | |
| 919 | + <input type="hidden" id="msgGroupId" name="msgGroupId" value="${result.msgGroupId}"/> | |
| 920 | +<!-- <input type="hidden" id="msgId" name="msgId" value=""/> --> | |
| 921 | + </form> | |
| 922 | + |
--- src/main/webapp/WEB-INF/jsp/web/kakao/sent/KakaoSentView.jsp
+++ src/main/webapp/WEB-INF/jsp/web/kakao/sent/KakaoSentView.jsp
... | ... | @@ -45,20 +45,6 @@ |
| 45 | 45 |
threefulstday = prevMonth(3); |
| 46 | 46 |
threefuledday = today(); |
| 47 | 47 |
|
| 48 |
- /* 목록 정렬 항목 아이콘 표시 */ |
|
| 49 |
- /* var searchSortCnd = $("[name='searchSortCnd']").val();
|
|
| 50 |
- var searchSortOrd = $("[name='searchSortOrd']").val();
|
|
| 51 |
- |
|
| 52 |
- if (searchSortCnd != "" && searchSortOrd != "" && searchSortCnd != undefined && searchSortOrd != undefined) {
|
|
| 53 |
- var $sort_div = $("#sort_"+ searchSortCnd);
|
|
| 54 |
- var sortClass = 'sortBtn' ; |
|
| 55 |
- |
|
| 56 |
- if (searchSortOrd == "desc") sortClass = "sortBtnDesc"; |
|
| 57 |
- |
|
| 58 |
- $sort_div.replaceClass('sortBtn' , sortClass) ;
|
|
| 59 |
- $sort_div.attr("sortOrd", searchSortOrd);
|
|
| 60 |
- } */ |
|
| 61 |
- |
|
| 62 | 48 |
// 정렬 항목 이벤트 |
| 63 | 49 |
$(document).on('click', '.sort', function (){
|
| 64 | 50 |
listSortOrd(this); |
... | ... | @@ -100,6 +86,9 @@ |
| 100 | 86 |
linkPage(1); |
| 101 | 87 |
|
| 102 | 88 |
}); |
| 89 |
+ |
|
| 90 |
+ //발송건수 셋 |
|
| 91 |
+ cntSet(); |
|
| 103 | 92 |
|
| 104 | 93 |
}); |
| 105 | 94 |
|
... | ... | @@ -147,56 +136,16 @@ |
| 147 | 136 |
form.pageIndex.value = pageNo; |
| 148 | 137 |
|
| 149 | 138 |
var sendData = $(document.searchForm).serializeArray(); |
| 150 |
- $(".msgSentAllLoad").html('<div class="list_info"><table class="tType4"><tbody><tr><td colspan="12">LOADING...</td></tr></tbody></table></div>');
|
|
| 139 |
+// $(".msgSentAllLoad").html('<div class="list_info"><table class="tType4"><tbody><tr><td colspan="12">LOADING...</td></tr></tbody></table></div>');
|
|
| 140 |
+ $(".msgSentAllLoad tbody:first").html('<tr><td colspan="12">LOADING...</td></tr>');
|
|
| 151 | 141 |
$(".msgSentAllLoad").load("/web/kakao/sent/selectKakaoSentListViewAjax.do", sendData ,function(response, status, xhr){
|
| 142 |
+ if (status === 'success') {
|
|
| 143 |
+ $(this).html(response); |
|
| 144 |
+ } |
|
| 152 | 145 |
}); |
| 153 | 146 |
|
| 154 | 147 |
} |
| 155 | 148 |
|
| 156 |
-//선택 삭제 실행 |
|
| 157 |
- |
|
| 158 |
-/* |
|
| 159 |
-function fnDelete(){
|
|
| 160 |
- |
|
| 161 |
- var msgId = []; |
|
| 162 |
- if($("input:checkbox[name='msgSentDel']").is(":checked")==false){
|
|
| 163 |
- alert("한 개 이상의 전송 내역을 선택하세요");
|
|
| 164 |
- return; |
|
| 165 |
- } |
|
| 166 |
- |
|
| 167 |
- $("input:checkbox[name='msgSentDel']:checked").each(function(index){
|
|
| 168 |
- var disabledChk = $(this).prop('disabled');
|
|
| 169 |
- if(!disabledChk){ //checkbox disabled 인 것은 제외하고 아이디 저장
|
|
| 170 |
- msgId[index] = $(this).val(); |
|
| 171 |
- } |
|
| 172 |
- }); |
|
| 173 |
- |
|
| 174 |
- if(msgId.length > 0){
|
|
| 175 |
- |
|
| 176 |
- //22.04.25 구글 독스 alert 기준으로 이지우가 수정 |
|
| 177 |
- // if(confirm("선택한 발송문자를 삭제하시겠습니까? 삭제된 문자는 복구가 불가능 합니다."))
|
|
| 178 |
- if(confirm("선택한 목록을 삭제하시겠습니까?")){
|
|
| 179 |
- |
|
| 180 |
- document.searchForm.msgGroupIdList.value = msgId; |
|
| 181 |
- var sendData = $(document.searchForm).serializeArray(); |
|
| 182 |
- |
|
| 183 |
- $(".msgSentAllLoad").load("/web/mjon/msgsent/deleteMsgSentDataAjax.do", sendData ,function(response, status, xhr){
|
|
| 184 |
- }); |
|
| 185 |
- |
|
| 186 |
-// var form = document.searchForm; |
|
| 187 |
-// form.action="/web/mjon/msgsent/selectMsgSentView.do"; |
|
| 188 |
-// form.submit(); |
|
| 189 |
- } |
|
| 190 |
- |
|
| 191 |
- }else{
|
|
| 192 |
- |
|
| 193 |
- alert("삭제할 문자를 선택해 주세요.");
|
|
| 194 |
- return false; |
|
| 195 |
- |
|
| 196 |
- } |
|
| 197 |
- |
|
| 198 |
-} |
|
| 199 |
- */ |
|
| 200 | 149 |
//상세보기 버튼 실행 |
| 201 | 150 |
function fnRevDetailPop(msgGroupId, msgId){
|
| 202 | 151 |
document.resPopForm.msgGroupId.value = msgGroupId; |
... | ... | @@ -204,20 +153,11 @@ |
| 204 | 153 |
var sendData = $(document.resPopForm).serializeArray(); |
| 205 | 154 |
|
| 206 | 155 |
var form = document.searchForm; |
| 207 |
- if (form.listType.value == "privateList") {
|
|
| 208 |
- // 개인별 |
|
| 209 |
- $("#msgSentDetailPopLoad").load("/web/kakao/sent/selectKakaoSentDetailData2Ajax.do", sendData ,function(response, status, xhr){
|
|
| 210 |
- $('#tooltopClick').trigger('click');
|
|
| 211 |
- }); |
|
| 212 |
- } |
|
| 213 |
- else {
|
|
| 214 |
- // 전송건별 |
|
| 215 |
- $("#msgSentDetailPopLoad").load("/web/kakao/sent/selectKakaoSentDetailDataAjax.do", sendData ,function(response, status, xhr){
|
|
| 216 |
- // 상세보기 클릭때마다 툴팁 1 tab이 열리게 설정 |
|
| 217 |
- popupTab($('#atBtn'),'1');
|
|
| 218 |
- $('#tooltopClick').trigger('click');
|
|
| 219 |
- }); |
|
| 220 |
- } |
|
| 156 |
+ $("#msgSentDetailPopLoad").load("/web/kakao/sent/selectKakaoSentDetailDataAjax.do", sendData ,function(response, status, xhr){
|
|
| 157 |
+ // 상세보기 클릭때마다 툴팁 1 tab이 열리게 설정 |
|
| 158 |
+ popupTab($('#atBtn'),'1');
|
|
| 159 |
+ $('#tooltopClick').trigger('click');
|
|
| 160 |
+ }); |
|
| 221 | 161 |
|
| 222 | 162 |
} |
| 223 | 163 |
|
... | ... | @@ -231,12 +171,6 @@ |
| 231 | 171 |
$tab.siblings("li.btn_tab").removeClass("active");
|
| 232 | 172 |
$tab.siblings("li.tab").find("button").removeAttr("title");
|
| 233 | 173 |
|
| 234 |
- if(pageType == 'fail'){
|
|
| 235 |
- form.listType.value = "privateList"; |
|
| 236 |
- $(".tab_depth1").hide();
|
|
| 237 |
- } else {
|
|
| 238 |
- $(".tab_depth1").show();
|
|
| 239 |
- } |
|
| 240 | 174 |
form.stateType.value = pageType; |
| 241 | 175 |
|
| 242 | 176 |
linkPage(1); |
... | ... | @@ -311,182 +245,6 @@ |
| 311 | 245 |
|
| 312 | 246 |
}); |
| 313 | 247 |
|
| 314 |
-$(document).on('click', '.msgPrivateList', function(){
|
|
| 315 |
- |
|
| 316 |
- var form = document.searchForm; |
|
| 317 |
- form.listType.value = "privateList"; |
|
| 318 |
- linkPage(1); |
|
| 319 |
- |
|
| 320 |
-}); |
|
| 321 |
- |
|
| 322 |
- |
|
| 323 |
-function fnDeleteAddrNo(listType){
|
|
| 324 |
- |
|
| 325 |
- var msgId = []; |
|
| 326 |
- if($("input:checkbox[name='msgSentDel']").is(":checked")==false){
|
|
| 327 |
- alert("한 개 이상의 전송 내역을 선택하세요");
|
|
| 328 |
- return; |
|
| 329 |
- } |
|
| 330 |
- |
|
| 331 |
- $("input:checkbox[name='msgSentDel']:checked").each(function(index){
|
|
| 332 |
- |
|
| 333 |
- var disabledChk = $(this).prop('disabled');
|
|
| 334 |
- if(!disabledChk){ //checkbox disabled 인 것은 제외하고 아이디 저장
|
|
| 335 |
- |
|
| 336 |
- msgId[index] = $(this).val(); |
|
| 337 |
- |
|
| 338 |
- } |
|
| 339 |
- |
|
| 340 |
- }); |
|
| 341 |
- |
|
| 342 |
- if(msgId.length > 0){
|
|
| 343 |
- |
|
| 344 |
- //22.04.25 구글 독스 alert 기준으로 이지우가 수정 |
|
| 345 |
- /* if(confirm("선택한 수신번호를 주소록에서 삭제하시겠습니까? 삭제된 주소록은 복구가 불가능 합니다.")){ */
|
|
| 346 |
- if(confirm("선택하신 번호를 주소록에서 삭제하시겠습니까?")){
|
|
| 347 |
- |
|
| 348 |
- var form = document.searchForm; |
|
| 349 |
- |
|
| 350 |
- form.msgGroupIdList.value = msgId; |
|
| 351 |
- form.listType.value = listType; |
|
| 352 |
- |
|
| 353 |
- var data = new FormData(form); |
|
| 354 |
- url = "/web/mjon/msgsent/deleteAddrNoDataAjax.do"; |
|
| 355 |
- |
|
| 356 |
- $.ajax({
|
|
| 357 |
- type: "POST", |
|
| 358 |
- url: url, |
|
| 359 |
- data: data, |
|
| 360 |
- dataType:'json', |
|
| 361 |
- async: false, |
|
| 362 |
- processData: false, |
|
| 363 |
- contentType: false, |
|
| 364 |
- cache: false, |
|
| 365 |
- success: function (returnData, status) {
|
|
| 366 |
- if(status == 'success'){ // status 확인 필요한가. 석세스 안뜨면 에러 가지 않나
|
|
| 367 |
- if("fail"==returnData.result){
|
|
| 368 |
- |
|
| 369 |
- alert(returnData.message); |
|
| 370 |
- return false; |
|
| 371 |
- |
|
| 372 |
- }else if("loginFail"==returnData.result){
|
|
| 373 |
- |
|
| 374 |
- alert(returnData.message); |
|
| 375 |
- return false; |
|
| 376 |
- |
|
| 377 |
- }else if(returnData.resultCnt == '0'){
|
|
| 378 |
- |
|
| 379 |
- alert("주소록에 삭제할 연락처가 없습니다.");
|
|
| 380 |
- return false; |
|
| 381 |
- |
|
| 382 |
- }else{
|
|
| 383 |
- |
|
| 384 |
- alert(returnData.message); |
|
| 385 |
- return false; |
|
| 386 |
- |
|
| 387 |
- } |
|
| 388 |
- |
|
| 389 |
- } else if(status== 'fail'){
|
|
| 390 |
- alert(returnData.message); |
|
| 391 |
- } |
|
| 392 |
- }, |
|
| 393 |
- error: function (e) { alert("주소록 삭제에 실패하였습니다."); console.log("ERROR : ", e); }
|
|
| 394 |
- }); |
|
| 395 |
- |
|
| 396 |
- } |
|
| 397 |
- |
|
| 398 |
- }else{
|
|
| 399 |
- |
|
| 400 |
- alert("삭제할 문자를 선택해 주세요.");
|
|
| 401 |
- return false; |
|
| 402 |
- |
|
| 403 |
- } |
|
| 404 |
- |
|
| 405 |
-} |
|
| 406 |
- |
|
| 407 |
-function fnAddBlockNo(listType){
|
|
| 408 |
- |
|
| 409 |
- var msgId = []; |
|
| 410 |
- if($("input:checkbox[name='msgSentDel']").is(":checked")==false){
|
|
| 411 |
- alert("선택된 항목이 없습니다.");
|
|
| 412 |
- return; |
|
| 413 |
- } |
|
| 414 |
- |
|
| 415 |
- $("input:checkbox[name='msgSentDel']:checked").each(function(index){
|
|
| 416 |
- |
|
| 417 |
- var disabledChk = $(this).prop('disabled');
|
|
| 418 |
- if(!disabledChk){ //checkbox disabled 인 것은 제외하고 아이디 저장
|
|
| 419 |
- |
|
| 420 |
- msgId[index] = $(this).val(); |
|
| 421 |
- |
|
| 422 |
- } |
|
| 423 |
- |
|
| 424 |
- }); |
|
| 425 |
- |
|
| 426 |
- if(msgId.length > 0){
|
|
| 427 |
- |
|
| 428 |
- //if(confirm("선택한 수신번호를 주소록에서 삭제하시겠습니까? 삭제된 주소록은 복구가 불가능 합니다.")){
|
|
| 429 |
- |
|
| 430 |
- var form = document.searchForm; |
|
| 431 |
- |
|
| 432 |
- form.msgGroupIdList.value = msgId; |
|
| 433 |
- form.listType.value = listType; |
|
| 434 |
- |
|
| 435 |
- var data = new FormData(form); |
|
| 436 |
- url = "/web/mjon/msgsent/insertAddBlockNoDataAjax.do"; |
|
| 437 |
- |
|
| 438 |
- $.ajax({
|
|
| 439 |
- type: "POST", |
|
| 440 |
- url: url, |
|
| 441 |
- data: data, |
|
| 442 |
- dataType:'json', |
|
| 443 |
- async: false, |
|
| 444 |
- processData: false, |
|
| 445 |
- contentType: false, |
|
| 446 |
- cache: false, |
|
| 447 |
- success: function (returnData, status) {
|
|
| 448 |
- if(status == 'success'){ // status 확인 필요한가. 석세스 안뜨면 에러 가지 않나
|
|
| 449 |
- if("fail"==returnData.result){
|
|
| 450 |
- |
|
| 451 |
- alert(returnData.message); |
|
| 452 |
- return false; |
|
| 453 |
- |
|
| 454 |
- }else if("loginFail"==returnData.result){
|
|
| 455 |
- |
|
| 456 |
- alert(returnData.message); |
|
| 457 |
- return false; |
|
| 458 |
- |
|
| 459 |
- }else if(returnData.resultCnt == '0'){
|
|
| 460 |
- |
|
| 461 |
- alert("주소록에 삭제할 연락처가 없습니다.");
|
|
| 462 |
- return false; |
|
| 463 |
- |
|
| 464 |
- }else{
|
|
| 465 |
- |
|
| 466 |
- alert(returnData.message); |
|
| 467 |
- return false; |
|
| 468 |
- |
|
| 469 |
- } |
|
| 470 |
- |
|
| 471 |
- } else if(status== 'fail'){
|
|
| 472 |
- alert(returnData.message); |
|
| 473 |
- } |
|
| 474 |
- }, |
|
| 475 |
- error: function (e) { alert("수신거부번호 등록에 실패하였습니다."); console.log("ERROR : ", e); }
|
|
| 476 |
- }); |
|
| 477 |
- |
|
| 478 |
- //} |
|
| 479 |
- |
|
| 480 |
- }else{
|
|
| 481 |
- |
|
| 482 |
- alert("수신거부번호를 등록할 문자를 선택해 주세요.");
|
|
| 483 |
- return false; |
|
| 484 |
- |
|
| 485 |
- } |
|
| 486 |
- |
|
| 487 |
- |
|
| 488 |
-} |
|
| 489 |
- |
|
| 490 | 248 |
function fnReSendMsg(){
|
| 491 | 249 |
|
| 492 | 250 |
var msgSeq = []; |
... | ... | @@ -514,27 +272,6 @@ |
| 514 | 272 |
|
| 515 | 273 |
} |
| 516 | 274 |
|
| 517 |
-function fnMsgSFDetailList(msgGroupId, resultType){
|
|
| 518 |
- |
|
| 519 |
- var form = document.resPopForm; |
|
| 520 |
- form.msgGroupId.value = msgGroupId; |
|
| 521 |
- form.resultType.value = resultType; |
|
| 522 |
- |
|
| 523 |
- //만들려는 팝업의 크기 |
|
| 524 |
- var popup_wid = '1280'; |
|
| 525 |
- var popup_ht = '700'; |
|
| 526 |
- |
|
| 527 |
- var popup_left = (window.screen.width / 2) - (popup_wid / 2); |
|
| 528 |
- var popup_top =(window.screen.height / 2) - (popup_ht / 2); |
|
| 529 |
- |
|
| 530 |
- $("#resPopForm").attr("target","msgSFDetailPop");
|
|
| 531 |
- |
|
| 532 |
- window.open('', 'msgSFDetailPop', 'width='+ popup_wid +', height='+ popup_ht +', left=' + popup_left + ', top='+ popup_top );
|
|
| 533 |
- $("#resPopForm").attr({"action":"/web/kakao/sent/selectKakaoSentSFDetailListAjax.do", "method":"post"}).submit();
|
|
| 534 |
- |
|
| 535 |
-} |
|
| 536 |
- |
|
| 537 |
- |
|
| 538 | 275 |
/* 사용내역서 클릭 시 내역서 새창 팝업 오픈 */ |
| 539 | 276 |
function fnShowPrintPopup(tabType, type) {
|
| 540 | 277 |
//만들려는 팝업의 크기 |
... | ... | @@ -552,129 +289,6 @@ |
| 552 | 289 |
|
| 553 | 290 |
} |
| 554 | 291 |
|
| 555 |
-function addrGroupDuplCnt() {
|
|
| 556 |
- document.searchForm.addrGrpNm.value = $('#grpNm').val();
|
|
| 557 |
- |
|
| 558 |
- var data = $('#searchForm').serialize();
|
|
| 559 |
- //var data = new FormData(form); |
|
| 560 |
- |
|
| 561 |
- var flag = true; |
|
| 562 |
- var url = "/web/addr/selectDuplAddrGroupNameAjax.do"; |
|
| 563 |
- |
|
| 564 |
- $.ajax({
|
|
| 565 |
- async: false, |
|
| 566 |
- type: "post", |
|
| 567 |
- url: url, |
|
| 568 |
- data: data, |
|
| 569 |
- dataType:"JSON", |
|
| 570 |
-// contentType: false, |
|
| 571 |
-// processData: false, |
|
| 572 |
- cache: false, |
|
| 573 |
- success: function (returnData, status) {
|
|
| 574 |
- if("dupl"==returnData.result1) {
|
|
| 575 |
- flag = false; |
|
| 576 |
- } |
|
| 577 |
- }, |
|
| 578 |
- error: function (e) {
|
|
| 579 |
- alert("error");
|
|
| 580 |
- console.log("ERROR : ", e);
|
|
| 581 |
- } |
|
| 582 |
- }); |
|
| 583 |
- |
|
| 584 |
- return flag; |
|
| 585 |
-} |
|
| 586 |
- |
|
| 587 |
-//주소록 그룹 등록 기능 |
|
| 588 |
-function fnAddAddrNo(){
|
|
| 589 |
- |
|
| 590 |
- var addrGrpNm = $('#grpNm').val(); //입력 그룹 이름 불러오기
|
|
| 591 |
- |
|
| 592 |
- var msgId = []; |
|
| 593 |
- if($("input:checkbox[name='msgSentDel']").is(":checked")==false){
|
|
| 594 |
- alert("한 개 이상의 전송 내역을 선택하세요");
|
|
| 595 |
- return; |
|
| 596 |
- } |
|
| 597 |
- |
|
| 598 |
- |
|
| 599 |
- $("input:checkbox[name='msgSentDel']:checked").each(function(index){
|
|
| 600 |
- |
|
| 601 |
- var disabledChk = $(this).prop('disabled');
|
|
| 602 |
- if(!disabledChk){ //checkbox disabled 인 것은 제외하고 아이디 저장
|
|
| 603 |
- |
|
| 604 |
- msgId[index] = $(this).val(); |
|
| 605 |
- |
|
| 606 |
- } |
|
| 607 |
- |
|
| 608 |
- }); |
|
| 609 |
- |
|
| 610 |
- if(msgId.length > 0 && addrGrpNm != ''){
|
|
| 611 |
- |
|
| 612 |
- |
|
| 613 |
- //주소록 그룹명 중복체크 |
|
| 614 |
- if(!addrGroupDuplCnt()) {
|
|
| 615 |
- alert("이미 등록되어있는 주소록입니다.");
|
|
| 616 |
- return false; |
|
| 617 |
- } |
|
| 618 |
- |
|
| 619 |
- |
|
| 620 |
- var form = document.searchForm; |
|
| 621 |
- |
|
| 622 |
- form.msgGroupIdList.value = msgId; |
|
| 623 |
- form.addrGrpNm.value = addrGrpNm; |
|
| 624 |
- |
|
| 625 |
- var data = new FormData(form); |
|
| 626 |
- url = "/web/mjon/msgsent/insertAddAddrGrpDataAjax.do"; |
|
| 627 |
- |
|
| 628 |
- $.ajax({
|
|
| 629 |
- type: "POST", |
|
| 630 |
- url: url, |
|
| 631 |
- data: data, |
|
| 632 |
- dataType:'json', |
|
| 633 |
- async: false, |
|
| 634 |
- processData: false, |
|
| 635 |
- contentType: false, |
|
| 636 |
- cache: false, |
|
| 637 |
- success: function (returnData, status) {
|
|
| 638 |
- if(status == 'success'){ // status 확인 필요한가. 석세스 안뜨면 에러 가지 않나
|
|
| 639 |
- if("fail"==returnData.result){
|
|
| 640 |
- |
|
| 641 |
- alert(returnData.message); |
|
| 642 |
- return false; |
|
| 643 |
- |
|
| 644 |
- }else if("loginFail"==returnData.result){
|
|
| 645 |
- |
|
| 646 |
- alert(returnData.message); |
|
| 647 |
- return false; |
|
| 648 |
- |
|
| 649 |
- }else if(returnData.resultCnt == '0'){
|
|
| 650 |
- |
|
| 651 |
- alert("주소록에 등록할 연락처가 없습니다.");
|
|
| 652 |
- return false; |
|
| 653 |
- |
|
| 654 |
- }else{
|
|
| 655 |
- |
|
| 656 |
- alert(returnData.message); |
|
| 657 |
- $('#grpNm').val(""); //입력한 그룹명 초기화
|
|
| 658 |
- $(".tooltip-close").trigger("click");
|
|
| 659 |
- return false; |
|
| 660 |
- |
|
| 661 |
- } |
|
| 662 |
- |
|
| 663 |
- } else if(status== 'fail'){
|
|
| 664 |
- alert(returnData.message); |
|
| 665 |
- } |
|
| 666 |
- }, |
|
| 667 |
- error: function (e) { alert("주소록 등록에 실패하였습니다."); console.log("ERROR : ", e); }
|
|
| 668 |
- }); |
|
| 669 |
- }else{
|
|
| 670 |
- |
|
| 671 |
- alert("등록할 문자를 선택해 주세요.");
|
|
| 672 |
- return false; |
|
| 673 |
- |
|
| 674 |
- } |
|
| 675 |
- |
|
| 676 |
-} |
|
| 677 |
- |
|
| 678 | 292 |
/* 윈도우팝업 열기 */ |
| 679 | 293 |
function infoPop(pageUrl){
|
| 680 | 294 |
document.popForm.pageType.value = pageUrl; |
... | ... | @@ -685,33 +299,90 @@ |
| 685 | 299 |
document.popForm.submit(); |
| 686 | 300 |
} |
| 687 | 301 |
|
| 302 |
+function cntSet(){
|
|
| 303 |
+ |
|
| 304 |
+ $('#ntceBgnde').val($('#startDate').val());
|
|
| 305 |
+ $('#ntceEndde').val($('#endDate').val());
|
|
| 306 |
+ |
|
| 307 |
+ $.ajax({
|
|
| 308 |
+ url: '/web/kakao/sent/selectKakaoSentViewTotalSumAjax.do', |
|
| 309 |
+ type: 'POST', |
|
| 310 |
+// contentType: 'application/json', |
|
| 311 |
+ contentType: false, |
|
| 312 |
+ processData: false, |
|
| 313 |
+ data: new FormData(document.searchForm), |
|
| 314 |
+ success: function(response) {
|
|
| 315 |
+ |
|
| 316 |
+ cntView('allCnt', response.allCnt);
|
|
| 317 |
+ cntView('atCnt', response.atCnt);
|
|
| 318 |
+ //cntView('ftCnt', response.ftCnt);
|
|
| 319 |
+ }, |
|
| 320 |
+ error: function(error) {
|
|
| 321 |
+ alert("error");
|
|
| 322 |
+ }, |
|
| 323 |
+ beforeSend : function(xmlHttpRequest) {
|
|
| 324 |
+ //로딩창 show |
|
| 325 |
+ $('#lodingBefore').show();
|
|
| 326 |
+ $('#lodingAfter').hide();
|
|
| 327 |
+ }, |
|
| 328 |
+ complete : function(xhr, textStatus) {
|
|
| 329 |
+ //로딩창 hide |
|
| 330 |
+ $('#lodingBefore').hide();
|
|
| 331 |
+ $('#lodingAfter').show();
|
|
| 332 |
+ } |
|
| 333 |
+ }); |
|
| 334 |
+} |
|
| 335 |
+ |
|
| 336 |
+function cntView(type, obj){
|
|
| 337 |
+ $('#'+type+' span[name="allCnt"]').text(obj.allCount.toLocaleString());
|
|
| 338 |
+ $('#'+type+' span[name="waitCnt"]').text(obj.waitCount.toLocaleString());
|
|
| 339 |
+ $('#'+type+' span[name="succCnt"]').text(obj.successCount.toLocaleString());
|
|
| 340 |
+ $('#'+type+' span[name="failCnt"]').text(obj.failCount.toLocaleString());
|
|
| 341 |
+} |
|
| 342 |
+ |
|
| 343 |
+//선택 삭제 실행 |
|
| 344 |
+function fnDelete(){
|
|
| 345 |
+ |
|
| 346 |
+ var msgId = []; |
|
| 347 |
+ if($("input:checkbox[name='msgSentDel']").is(":checked")==false){
|
|
| 348 |
+ alert("한 개 이상의 전송 내역을 선택하세요");
|
|
| 349 |
+ return; |
|
| 350 |
+ } |
|
| 351 |
+ |
|
| 352 |
+ $("input:checkbox[name='msgSentDel']:checked").each(function(index){
|
|
| 353 |
+ var disabledChk = $(this).prop('disabled');
|
|
| 354 |
+ if(!disabledChk){ //checkbox disabled 인 것은 제외하고 아이디 저장
|
|
| 355 |
+ msgId[index] = $(this).val(); |
|
| 356 |
+ } |
|
| 357 |
+ }); |
|
| 358 |
+ |
|
| 359 |
+ console.log('msgId : ', msgId);
|
|
| 360 |
+ |
|
| 361 |
+ if(msgId.length < 1){
|
|
| 362 |
+ alert("삭제할 문자를 선택해 주세요.");
|
|
| 363 |
+ return false; |
|
| 364 |
+ } |
|
| 365 |
+ |
|
| 366 |
+ //22.04.25 구글 독스 alert 기준으로 이지우가 수정 |
|
| 367 |
+ /* if(confirm("선택한 발송문자를 삭제하시겠습니까? 삭제된 문자는 복구가 불가능 합니다.")) */
|
|
| 368 |
+ if(confirm("선택한 목록을 삭제하시겠습니까?\n삭제한 목록은 복구가 불가합니다.")){
|
|
| 369 |
+ |
|
| 370 |
+ document.searchForm.msgGroupIdList.value = msgId; |
|
| 371 |
+ var sendData = $(document.searchForm).serializeArray(); |
|
| 372 |
+ |
|
| 373 |
+ $(".msgSentAllLoad").load("/web/mjon/msgsent/deleteMsgSentDataAjax.do", sendData ,function(response, status, xhr){
|
|
| 374 |
+ }); |
|
| 375 |
+ |
|
| 376 |
+ alert("삭제되었습니다.");
|
|
| 377 |
+ var form = document.searchForm; |
|
| 378 |
+ form.action="/web/kakao/sent/selectKakaoSentView.do"; |
|
| 379 |
+ form.submit(); |
|
| 380 |
+ } |
|
| 381 |
+ |
|
| 382 |
+} |
|
| 383 |
+ |
|
| 688 | 384 |
</script> |
| 689 |
- <!-- 문자내용 팝업 data-tooltip: rev_popup01 --> |
|
| 690 |
- <div class="tooltip-wrap"> |
|
| 691 |
- <div class="popup-com adr_layer kakao_rev_popup rev_popup01" tabindex="0" data-tooltip-con="rev_popup01" |
|
| 692 |
- data-focus="rev_popup01" data-focus-prev="rev_popup01-close" style="width: 440px;"> |
|
| 693 |
- <div class="popup_heading"> |
|
| 694 |
- <p>문자내용</p> |
|
| 695 |
- <button type="button" class="tooltip-close" data-focus="rev_popup01-close"><img |
|
| 696 |
- src="/publish/images/content/layerPopup_close.png" alt="팝업 닫기"></button> |
|
| 697 |
- </div> |
|
| 698 |
- <div class="layer_in"> |
|
| 699 |
- |
|
| 700 |
- <!-- 팝업 상세내용 노출 --> |
|
| 701 |
- <div id="msgSentDetailPopLoad" > |
|
| 702 |
- </div> |
|
| 703 |
- <div class="popup_btn_wrap2" style="justify-content: center;"> |
|
| 704 |
- <button type="button" class="tooltip-close" data-focus="rev_popup01-close" |
|
| 705 |
- data-focus-next="rev_popup01">닫기</button> |
|
| 706 |
- </div> |
|
| 707 |
- </div> |
|
| 708 |
- </div> |
|
| 709 |
- </div> |
|
| 710 |
- <!-- //문자내용 팝업 data-tooltip: rev_popup01 --> |
|
| 711 |
- |
|
| 712 |
- |
|
| 713 |
- |
|
| 714 |
- |
|
| 385 |
+ |
|
| 715 | 386 |
|
| 716 | 387 |
<!-- 그룹등록 팝업 data-tooltip:rev_popup02 --> |
| 717 | 388 |
<div class="tooltip-wrap"> |
... | ... | @@ -763,154 +434,19 @@ |
| 763 | 434 |
<input type="hidden" id="listType" name="listType" value="groupList"/><!-- 리스트 종류 --> |
| 764 | 435 |
<input type="hidden" id="addrGrpNm" name="addrGrpNm" value=""/><!-- 주소록 그룹 이름 --> |
| 765 | 436 |
<input type="hidden" id="mberId" name="mberId" value="${LoginVO.id}"/><!-- 주소록 그룹 이름 -->
|
| 766 |
- |
|
| 767 |
- <!-- 각 통계별 총 건수 --> |
|
| 768 |
- <c:set var="totAllCnt" value="0"/><!-- 전체 건수 --> |
|
| 769 |
- <c:set var="totAtCnt" value="0"/><!-- 알림톡 건수 --> |
|
| 770 |
- <c:set var="totFtCnt" value="0"/><!-- 친구톡 건수 --> |
|
| 771 |
- |
|
| 772 |
- <!-- 각 통계별 성공, 실패 건수 처리 --> |
|
| 773 |
- <c:set var="waitAllCnt" value="0"/><!-- 전체 대기 건수 --> |
|
| 774 |
- <c:set var="succAllCnt" value="0"/><!-- 전체 성공 건수 --> |
|
| 775 |
- <c:set var="failAllCnt" value="0"/><!-- 전체 실패 건수 --> |
|
| 776 |
- <c:set var="waitAtCnt" value="0"/><!-- 알림톡 대기 건수 --> |
|
| 777 |
- <c:set var="succAtCnt" value="0"/><!-- 알림톡 성공 건수 --> |
|
| 778 |
- <c:set var="failAtCnt" value="0"/><!-- 알림톡 실패 건수 --> |
|
| 779 |
- <c:set var="waitFtCnt" value="0"/><!-- 친구톡 대기 건수 --> |
|
| 780 |
- <c:set var="succFtCnt" value="0"/><!-- 친구톡 성공 건수 --> |
|
| 781 |
- <c:set var="failFtCnt" value="0"/><!-- 친구톡 실패 건수 --> |
|
| 782 |
- <!-- 발송대기 건수가 있으면 이것도 발송 실패건수로 일단 집계한다. --> |
|
| 783 |
- <c:forEach var="totalMsgCnt" items="${totalMsgCnt}" varStatus="status">
|
|
| 437 |
+ <input type="hidden" id="ntceBgnde" name="ntceBgnde" value=""/> |
|
| 438 |
+ <input type="hidden" id="ntceEndde" name="ntceEndde" value=""/> |
|
| 439 |
+ <input type="hidden" id="msgGroupId" name="msgGroupId" value=""/> |
|
| 784 | 440 |
|
| 785 |
- <!-- 전체 갯수 구하기 --> |
|
| 786 |
- <c:set var="totAllCnt" value="${totAllCnt + totalMsgCnt.msgResultCnt}"/>
|
|
| 787 |
- |
|
| 788 |
- <!-- 전체 대기 갯수 --> |
|
| 789 |
- <c:if test="${totalMsgCnt.msgResultSts == 'W'}">
|
|
| 790 |
- <c:set var="waitAllCnt" value="${waitAllCnt + totalMsgCnt.msgResultCnt}"/>
|
|
| 791 |
- </c:if> |
|
| 792 |
- |
|
| 793 |
- <!-- 전체 성공 갯수 --> |
|
| 794 |
- <c:if test="${totalMsgCnt.msgResultSts == 'S'}">
|
|
| 795 |
- <c:set var="succAllCnt" value="${succAllCnt + totalMsgCnt.msgResultCnt}"/>
|
|
| 796 |
- </c:if> |
|
| 797 |
- |
|
| 798 |
- <!-- 전체 실패 갯수 --> |
|
| 799 |
- <c:if test="${totalMsgCnt.msgResultSts == 'F'}">
|
|
| 800 |
- <c:set var="failAllCnt" value="${failAllCnt + totalMsgCnt.msgResultCnt}"/>
|
|
| 801 |
- </c:if> |
|
| 802 |
- |
|
| 803 |
- </c:forEach> |
|
| 804 |
- |
|
| 805 |
- <!-- 알림톡 처리 --> |
|
| 806 |
- <c:forEach var="atCnt" items="${atCnt}" varStatus="status">
|
|
| 807 |
- |
|
| 808 |
- <!-- 단문 전체 갯수 구하기 --> |
|
| 809 |
- <c:set var="totAtCnt" value="${totAtCnt + atCnt.msgResultCnt}"/>
|
|
| 810 |
- |
|
| 811 |
- <!-- 단문 대기 갯수 구하기 --> |
|
| 812 |
- <c:if test="${atCnt.msgResultSts == 'W'}">
|
|
| 813 |
- <c:set var="waitAtCnt" value="${waitAtCnt + atCnt.msgResultCnt}"/>
|
|
| 814 |
- </c:if> |
|
| 815 |
- |
|
| 816 |
- <!-- 단문 성공 갯수 구하기 --> |
|
| 817 |
- <c:if test="${atCnt.msgResultSts == 'S'}">
|
|
| 818 |
- <c:set var="succAtCnt" value="${succAtCnt + atCnt.msgResultCnt}"/>
|
|
| 819 |
- </c:if> |
|
| 820 |
- |
|
| 821 |
- <!-- 단문 실패 갯수 구하기 --> |
|
| 822 |
- <c:if test="${atCnt.msgResultSts == 'F'}">
|
|
| 823 |
- <c:set var="failAtCnt" value="${failAtCnt + atCnt.msgResultCnt}"/>
|
|
| 824 |
- </c:if> |
|
| 825 |
- |
|
| 826 |
- </c:forEach> |
|
| 827 |
- |
|
| 828 |
- <!-- 친구톡 처리 --> |
|
| 829 |
- <c:forEach var="ftCnt" items="${ftCnt}" varStatus="status">
|
|
| 830 |
- |
|
| 831 |
- <!-- 장문 전체 갯수 구하기 --> |
|
| 832 |
- <c:set var="totFtCnt" value="${totFtCnt + ftCnt.msgResultCnt}"/>
|
|
| 833 |
- |
|
| 834 |
- <!-- 장문 대기 갯수 구하기 --> |
|
| 835 |
- <c:if test="${ftCnt.msgResultSts == 'W'}">
|
|
| 836 |
- <c:set var="waitFtCnt" value="${waitFtCnt + ftCnt.msgResultCnt}"/>
|
|
| 837 |
- </c:if> |
|
| 838 |
- |
|
| 839 |
- <!-- 장문 성공 갯수 구하기 --> |
|
| 840 |
- <c:if test="${ftCnt.msgResultSts == 'S'}">
|
|
| 841 |
- <c:set var="succFtCnt" value="${succFtCnt + ftCnt.msgResultCnt}"/>
|
|
| 842 |
- </c:if> |
|
| 843 |
- |
|
| 844 |
- <!-- 장문 실패 갯수 구하기 --> |
|
| 845 |
- <c:if test="${ftCnt.msgResultSts == 'F'}">
|
|
| 846 |
- <c:set var="failFtCnt" value="${failFtCnt + ftCnt.msgResultCnt}"/>
|
|
| 847 |
- </c:if> |
|
| 848 |
- |
|
| 849 |
- </c:forEach> |
|
| 850 | 441 |
<div class="rev_content kakao_rev_content" id="tab5_2"> |
| 851 |
- <div class="rev_admin"> |
|
| 852 |
- <div class="rev_admin_in"> |
|
| 853 |
- <div class="rev_admin_top clearfix"> |
|
| 854 |
- <p>전체</p> |
|
| 855 |
- <p><span><fmt:formatNumber value="${totAllCnt}" pattern="#,###"/></span> 건</p>
|
|
| 856 |
- </div> |
|
| 857 |
- <div class="rev_admin_btm"> |
|
| 858 |
- <dl> |
|
| 859 |
- <dt>대기</dt> |
|
| 860 |
- <dd><span class="c_002c9a"><fmt:formatNumber value="${waitAllCnt}" pattern="#,###"/></span>건</dd>
|
|
| 861 |
- </dl> |
|
| 862 |
- <dl> |
|
| 863 |
- <dt>성공</dt> |
|
| 864 |
- <dd><span class="c_002c9a"><fmt:formatNumber value="${succAllCnt}" pattern="#,###"/></span>건</dd>
|
|
| 865 |
- </dl> |
|
| 866 |
- <dl> |
|
| 867 |
- <dt>실패</dt> |
|
| 868 |
- <dd><span class="c_e40000"><fmt:formatNumber value="${failAllCnt}" pattern="#,###"/></span>건</dd>
|
|
| 869 |
- </dl> |
|
| 870 |
- </div> |
|
| 871 |
- </div> |
|
| 872 |
- <div class="rev_admin_in"> |
|
| 873 |
- <div class="rev_admin_top clearfix"> |
|
| 874 |
- <p>알림톡</p> |
|
| 875 |
- <p><span><fmt:formatNumber value="${totAtCnt}" pattern="#,###"/></span> 건</p>
|
|
| 876 |
- </div> |
|
| 877 |
- <div class="rev_admin_btm"> |
|
| 878 |
- <dl> |
|
| 879 |
- <dt>대기</dt> |
|
| 880 |
- <dd><span class="c_002c9a"><fmt:formatNumber value="${waitAtCnt}" pattern="#,###"/></span>건</dd>
|
|
| 881 |
- </dl> |
|
| 882 |
- <dl> |
|
| 883 |
- <dt>성공</dt> |
|
| 884 |
- <dd><span class="c_002c9a"><fmt:formatNumber value="${succAtCnt}" pattern="#,###"/></span>건</dd>
|
|
| 885 |
- </dl> |
|
| 886 |
- <dl> |
|
| 887 |
- <dt>실패</dt> |
|
| 888 |
- <dd><span class="c_e40000"><fmt:formatNumber value="${failAtCnt}" pattern="#,###"/></span>건</dd>
|
|
| 889 |
- </dl> |
|
| 890 |
- </div> |
|
| 891 |
- </div> |
|
| 892 |
- <%-- <div class="rev_admin_in"> |
|
| 893 |
- <div class="rev_admin_top clearfix"> |
|
| 894 |
- <p>친구톡</p> |
|
| 895 |
- <p><span><fmt:formatNumber value="${totFtCnt}" pattern="#,###"/></span> 건</p>
|
|
| 896 |
- </div> |
|
| 897 |
- <div class="rev_admin_btm"> |
|
| 898 |
- <dl> |
|
| 899 |
- <dt>대기</dt> |
|
| 900 |
- <dd><span class="c_002c9a"><fmt:formatNumber value="${waitFtCnt}" pattern="#,###"/></span>건</dd>
|
|
| 901 |
- </dl> |
|
| 902 |
- <dl> |
|
| 903 |
- <dt>성공</dt> |
|
| 904 |
- <dd><span class="c_002c9a"><fmt:formatNumber value="${succFtCnt}" pattern="#,###"/></span>건</dd>
|
|
| 905 |
- </dl> |
|
| 906 |
- <dl> |
|
| 907 |
- <dt>실패</dt> |
|
| 908 |
- <dd><span class="c_e40000"><fmt:formatNumber value="${failFtCnt}" pattern="#,###"/></span>건</dd>
|
|
| 909 |
- </dl> |
|
| 910 |
- </div> |
|
| 911 |
- </div> --%> |
|
| 442 |
+ |
|
| 443 |
+ <!-- 발송결과 개선 : 문구추가 --> |
|
| 444 |
+ <div class="titBox_result"> |
|
| 445 |
+ <p>- 최대 3개월간의 발송내역만 확인하실 수 있습니다.</p> |
|
| 446 |
+ <p>- 전송내역이 필요한 경우 기간 내에 다운로드하여 주시기 바랍니다.</p> |
|
| 912 | 447 |
</div> |
| 913 |
- |
|
| 448 |
+ <!--// 발송결과 개선 : 문구추가 --> |
|
| 449 |
+ |
|
| 914 | 450 |
<div class="excel_middle"> |
| 915 | 451 |
<div class="select_btnWrap clearfix"> |
| 916 | 452 |
<div class="btn_left"> |
... | ... | @@ -931,6 +467,8 @@ |
| 931 | 467 |
<div class="btn_right"> |
| 932 | 468 |
<label for="searchCondition" class="label">발신번호 선택 == ${kakaoSentVO.searchCondition}</label>
|
| 933 | 469 |
<select name="searchCondition" id="searchCondition" class="selType2"> |
| 470 |
+ <option value="4" <c:if test="${kakaoSentVO.searchCondition == '3'}">selected</c:if> >채널ID</option>
|
|
| 471 |
+ <option value="5" <c:if test="${kakaoSentVO.searchCondition == '3'}">selected</c:if> >내용</option>
|
|
| 934 | 472 |
<option value="3" <c:if test="${kakaoSentVO.searchCondition == '3'}">selected</c:if> >수신번호</option>
|
| 935 | 473 |
</select> |
| 936 | 474 |
<div class="search"> |
... | ... | @@ -941,6 +479,91 @@ |
| 941 | 479 |
</div> |
| 942 | 480 |
</div> |
| 943 | 481 |
</div> |
| 482 |
+ |
|
| 483 |
+ <div class="rev_admin" id="lodingBefore"> |
|
| 484 |
+ <div class="rev_admin_in"> |
|
| 485 |
+ <div class="rev_admin_top clearfix"> |
|
| 486 |
+ <p>전체</p> |
|
| 487 |
+ <p></p> |
|
| 488 |
+ </div> |
|
| 489 |
+ <div class="rev_admin_btm admin_btm"> |
|
| 490 |
+ <table class="tType4"><tbody><tr><td>LOADING...</td></tr></tbody></table> |
|
| 491 |
+ </div> |
|
| 492 |
+ </div> |
|
| 493 |
+ <div class="rev_admin_in"> |
|
| 494 |
+ <div class="rev_admin_top clearfix"> |
|
| 495 |
+ <p>알림톡</p> |
|
| 496 |
+ <p></p> |
|
| 497 |
+ </div> |
|
| 498 |
+ <div class="rev_admin_btm admin_btm"> |
|
| 499 |
+ <table class="tType4"><tbody><tr><td>LOADING...</td></tr></tbody></table> |
|
| 500 |
+ </div> |
|
| 501 |
+ </div> |
|
| 502 |
+ </div> |
|
| 503 |
+ |
|
| 504 |
+ <div class="rev_admin" id="lodingAfter" style="display:none;"> |
|
| 505 |
+ <div class="rev_admin_in" id="allCnt"> |
|
| 506 |
+ <div class="rev_admin_top clearfix"> |
|
| 507 |
+ <p>전체</p> |
|
| 508 |
+ <p><span name="allCnt">0</span> 건</p> |
|
| 509 |
+ </div> |
|
| 510 |
+ <div class="rev_admin_btm"> |
|
| 511 |
+ <dl> |
|
| 512 |
+ <dt>대기</dt> |
|
| 513 |
+ <dd><span class="c_002c9a" name="waitCnt">0</span>건</dd> |
|
| 514 |
+ </dl> |
|
| 515 |
+ <dl> |
|
| 516 |
+ <dt>성공</dt> |
|
| 517 |
+ <dd><span class="c_002c9a" name="succCnt">0</span>건</dd> |
|
| 518 |
+ </dl> |
|
| 519 |
+ <dl> |
|
| 520 |
+ <dt>실패</dt> |
|
| 521 |
+ <dd><span class="c_e40000" name="failCnt">0</span>건</dd> |
|
| 522 |
+ </dl> |
|
| 523 |
+ </div> |
|
| 524 |
+ </div> |
|
| 525 |
+ <div class="rev_admin_in" id="atCnt"> |
|
| 526 |
+ <div class="rev_admin_top clearfix"> |
|
| 527 |
+ <p>알림톡</p> |
|
| 528 |
+ <p><span name="allCnt">0</span> 건</p> |
|
| 529 |
+ </div> |
|
| 530 |
+ <div class="rev_admin_btm"> |
|
| 531 |
+ <dl> |
|
| 532 |
+ <dt>대기</dt> |
|
| 533 |
+ <dd><span class="c_002c9a" name="waitCnt">0</span>건</dd> |
|
| 534 |
+ </dl> |
|
| 535 |
+ <dl> |
|
| 536 |
+ <dt>성공</dt> |
|
| 537 |
+ <dd><span class="c_002c9a" name="succCnt">0</span>건</dd> |
|
| 538 |
+ </dl> |
|
| 539 |
+ <dl> |
|
| 540 |
+ <dt>실패</dt> |
|
| 541 |
+ <dd><span class="c_e40000" name="failCnt">0</span>건</dd> |
|
| 542 |
+ </dl> |
|
| 543 |
+ </div> |
|
| 544 |
+ </div> |
|
| 545 |
+ <%-- <div class="rev_admin_in" id="ftCnt"> |
|
| 546 |
+ <div class="rev_admin_top clearfix"> |
|
| 547 |
+ <p>친구톡</p> |
|
| 548 |
+ <p><span><fmt:formatNumber value="${totFtCnt}" pattern="#,###"/></span> 건</p>
|
|
| 549 |
+ </div> |
|
| 550 |
+ <div class="rev_admin_btm"> |
|
| 551 |
+ <dl> |
|
| 552 |
+ <dt>대기</dt> |
|
| 553 |
+ <dd><span class="c_002c9a" name="waitCnt"><fmt:formatNumber value="${waitFtCnt}" pattern="#,###"/></span>건</dd>
|
|
| 554 |
+ </dl> |
|
| 555 |
+ <dl> |
|
| 556 |
+ <dt>성공</dt> |
|
| 557 |
+ <dd><span class="c_002c9a" name="succCnt"><fmt:formatNumber value="${succFtCnt}" pattern="#,###"/></span>건</dd>
|
|
| 558 |
+ </dl> |
|
| 559 |
+ <dl> |
|
| 560 |
+ <dt>실패</dt> |
|
| 561 |
+ <dd><span class="c_e40000" name="failCnt"><fmt:formatNumber value="${failFtCnt}" pattern="#,###"/></span>건</dd>
|
|
| 562 |
+ </dl> |
|
| 563 |
+ </div> |
|
| 564 |
+ </div> --%> |
|
| 565 |
+ </div> |
|
| 566 |
+ |
|
| 944 | 567 |
<div class="list_tab_wrap2 type4"> |
| 945 | 568 |
<!-- tab button --> |
| 946 | 569 |
<ul class="list_tab"> |
... | ... | @@ -953,22 +576,43 @@ |
| 953 | 576 |
</ul><!--// tab button --> |
| 954 | 577 |
</div> |
| 955 | 578 |
<!-- 예약관리 > 전체 --> |
| 956 |
- <div class="price_history_cont current" id="listTab_2"> |
|
| 579 |
+ <div class="price_history_cont current price_wrap" id="listTab_2"> |
|
| 957 | 580 |
<!-- tab button --> |
| 958 | 581 |
<div class="table_tab_wrap"> |
| 959 |
- <ul> |
|
| 582 |
+ <!-- <ul> |
|
| 960 | 583 |
<li class="tab active"> |
| 961 | 584 |
<button type="button" onclick="fnListLoad('all','0'); return false;">전체</button></li>
|
| 962 | 585 |
<li class="tab"><button type="button" onclick="fnListLoad('ready','1'); return false;">결과대기</button></li>
|
| 963 | 586 |
<li class="tab"><button type="button" onclick="fnListLoad('complete','2'); return false;">정상수신</button></li>
|
| 964 | 587 |
<li class="tab"><button type="button" onclick="fnListLoad('fail','3'); return false;">수신오류</button></li>
|
| 965 |
- </ul><!--// tab button --> |
|
| 966 |
- <div class="tab_depth1"> |
|
| 967 |
- <a href="#none" class="on msgGgoupList">받는사람(전송건별)</a> |
|
| 968 |
- <a href="#none" style="display: none;"></a> |
|
| 969 |
- <a href="#none" class="msgPrivateList">받는사람(개인별)</a> |
|
| 970 |
- <div class="on_active">받는사람(전송건별)</div> |
|
| 971 |
- </div> |
|
| 588 |
+ </ul> --> |
|
| 589 |
+ <!--// tab button --> |
|
| 590 |
+<!-- <div class="tab_depth1"> --> |
|
| 591 |
+<!-- <a href="#none" class="on msgGgoupList">받는사람(전송건별)</a> --> |
|
| 592 |
+<!-- <a href="#none" style="display: none;"></a> --> |
|
| 593 |
+<!-- <a href="#none" class="msgPrivateList">받는사람(개인별)</a> --> |
|
| 594 |
+<!-- <div class="on_active">받는사람(전송건별)</div> --> |
|
| 595 |
+<!-- </div> --> |
|
| 596 |
+ <ul> |
|
| 597 |
+ <li class="tab active"> |
|
| 598 |
+ <button type="button" onclick="fnListLoad('all','0'); return false;">전체</button>
|
|
| 599 |
+ </li> |
|
| 600 |
+ <!-- <li class="tab"> |
|
| 601 |
+ <button type="button" onclick="fnListLoad('ready','1'); return false;">결과대기</button>
|
|
| 602 |
+ </li> |
|
| 603 |
+ <li class="tab"> |
|
| 604 |
+ <button type="button" onclick="fnListLoad('complete','2'); return false;">정상수신</button>
|
|
| 605 |
+ </li> |
|
| 606 |
+ <li class="tab"> |
|
| 607 |
+ <button type="button" onclick="fnListLoad('fail','3'); return false;">수신오류</button>
|
|
| 608 |
+ </li> --> |
|
| 609 |
+ <li class="tab"> |
|
| 610 |
+ <button type="button" onclick="fnListLoad('N','1'); return false;">즉시</button>
|
|
| 611 |
+ </li> |
|
| 612 |
+ <li class="tab"> |
|
| 613 |
+ <button type="button" onclick="fnListLoad('Y','2'); return false;">예약</button>
|
|
| 614 |
+ </li> |
|
| 615 |
+ </ul> |
|
| 972 | 616 |
</div> |
| 973 | 617 |
<!-- 발송관리 리스트 --> |
| 974 | 618 |
<div class="table_cont current msgSentAllLoad" id="tableCont_1"> |
+++ src/main/webapp/WEB-INF/jsp/web/kakao/sent/KakaoSentView_back_250305.jsp
... | ... | @@ -0,0 +1,996 @@ |
| 1 | +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> | |
| 2 | +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> | |
| 3 | +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> | |
| 4 | +<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> | |
| 5 | +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> | |
| 6 | +<%@ page import="itn.com.cmm.LoginVO" %> | |
| 7 | +<!-- <script src="/publish/js/content.js"></script> --> | |
| 8 | +<script src="/publish/js/popupLayer.js"></script> | |
| 9 | + | |
| 10 | +<script type="text/javascript"> | |
| 11 | + | |
| 12 | +var lastfulstday = ""; //전월 시작일 | |
| 13 | +var lastfuledday = ""; //전월 마지막일 | |
| 14 | +var thisfulstlday = ""; //당월 시작일 | |
| 15 | +var thisfuledtlday = ""; //당원 마지막일 | |
| 16 | +var threefulstday = ""; //3개월전 시작일 | |
| 17 | +var threefuledday = ""; //3개월전 마지막일 | |
| 18 | + | |
| 19 | +$(document).ready(function(){ | |
| 20 | + | |
| 21 | + //초기 전체 리스트 페이지 보여주기 | |
| 22 | + var form = document.searchForm; | |
| 23 | + form.listType.value = "groupList"; | |
| 24 | + linkPage(1); | |
| 25 | + | |
| 26 | + var date = new Date() ; | |
| 27 | + //이전달 첫날/마지막날 조회 | |
| 28 | + if(date.getMonth()+1 == 1){ | |
| 29 | + lastfulstday = date.getFullYear()-1 + "/12" + "/01"; | |
| 30 | + lastfuledday = date.getFullYear()-1 + "/12" + "/"+new Date(date.getFullYear()-1, 12, 0).getDate()+""; | |
| 31 | + }else{ | |
| 32 | + lastfulstday = date.getFullYear() + "/" ; | |
| 33 | + lastfulstday += date.getMonth() < 10 ? "0"+ (date.getMonth()) : date.getMonth()+"" ; | |
| 34 | + lastfuledday = lastfulstday + "/"+ new Date(date.getFullYear(), date.getMonth(), 0).getDate()+"" ; | |
| 35 | + lastfulstday += "/01" ; | |
| 36 | + } | |
| 37 | + | |
| 38 | + //당월 첫날/마지막날 조회 | |
| 39 | + thisfulstlday = date.getFullYear() + "/" ; | |
| 40 | + thisfulstlday += date.getMonth()+1 < 10 ? "0"+ (date.getMonth()+1) : date.getMonth()+1+"" ; | |
| 41 | + thisfuledtlday = thisfulstlday + "/"+ new Date(date.getFullYear(), date.getMonth()+1, 0).getDate()+""; | |
| 42 | + thisfulstlday += "/01" ; | |
| 43 | + | |
| 44 | + //3개월 이전 날짜 구해오기 | |
| 45 | + threefulstday = prevMonth(3); | |
| 46 | + threefuledday = today(); | |
| 47 | + | |
| 48 | + /* 목록 정렬 항목 아이콘 표시 */ | |
| 49 | + /* var searchSortCnd = $("[name='searchSortCnd']").val(); | |
| 50 | + var searchSortOrd = $("[name='searchSortOrd']").val(); | |
| 51 | + | |
| 52 | + if (searchSortCnd != "" && searchSortOrd != "" && searchSortCnd != undefined && searchSortOrd != undefined) { | |
| 53 | + var $sort_div = $("#sort_"+ searchSortCnd); | |
| 54 | + var sortClass = 'sortBtn' ; | |
| 55 | + | |
| 56 | + if (searchSortOrd == "desc") sortClass = "sortBtnDesc"; | |
| 57 | + | |
| 58 | + $sort_div.replaceClass('sortBtn' , sortClass) ; | |
| 59 | + $sort_div.attr("sortOrd", searchSortOrd); | |
| 60 | + } */ | |
| 61 | + | |
| 62 | + // 정렬 항목 이벤트 | |
| 63 | + $(document).on('click', '.sort', function (){ | |
| 64 | + listSortOrd(this); | |
| 65 | + }); | |
| 66 | + | |
| 67 | + //목록 정렬 항목 클릭 | |
| 68 | + function listSortOrd(obj){ | |
| 69 | + var sortOrd = $(obj).attr("sortOrd"); | |
| 70 | + var sortCnd = $(obj).attr("id"); | |
| 71 | + | |
| 72 | + $("[name='searchSortCnd']").val(sortCnd.substring(5)); // 구분자 제거 | |
| 73 | + if (sortOrd == "desc") $("[name='searchSortOrd']").val("asc"); | |
| 74 | + else $("[name='searchSortOrd']").val("desc"); | |
| 75 | + | |
| 76 | + linkPage('1'); //각 JSP마다 다를때 메소드 정의해 줘야됨 | |
| 77 | + } | |
| 78 | + | |
| 79 | + | |
| 80 | + //전체선택 실행 | |
| 81 | + var allChkSts = false; | |
| 82 | + $("#allCheck").click(function(){ | |
| 83 | + | |
| 84 | + if(!allChkSts){// 전체선택이 해제되어 있을 경우 | |
| 85 | + | |
| 86 | + $("input[name=msgSentDel]").prop("checked", true); | |
| 87 | + allChkSts = true; | |
| 88 | + | |
| 89 | + }else{ | |
| 90 | + | |
| 91 | + $("input[name=msgSentDel]").prop("checked", false); | |
| 92 | + allChkSts = false; | |
| 93 | + | |
| 94 | + } | |
| 95 | + | |
| 96 | + }); | |
| 97 | + | |
| 98 | + $(document).on('change','#pageUnit', function(){ | |
| 99 | + | |
| 100 | + linkPage(1); | |
| 101 | + | |
| 102 | + }); | |
| 103 | + | |
| 104 | +}); | |
| 105 | + | |
| 106 | +//오늘날짜 구하기 | |
| 107 | +function today() { | |
| 108 | + var d = new Date(); | |
| 109 | + return getDateStr(d); | |
| 110 | +} | |
| 111 | + | |
| 112 | +//이전 날짜 구하기 | |
| 113 | +function prevDay(days) { | |
| 114 | + var d = new Date(); | |
| 115 | + var dayOfMonth = d.getDate(); | |
| 116 | + d.setDate(dayOfMonth - days); | |
| 117 | + return getDateStr(d); | |
| 118 | +} | |
| 119 | + | |
| 120 | +//이전 월 구하기 | |
| 121 | +function prevMonth(month) { | |
| 122 | + var d = new Date(); | |
| 123 | + var monthOfYear = d.getMonth(); | |
| 124 | + d.setMonth(monthOfYear - month); | |
| 125 | + return getDateStr(d); | |
| 126 | +} | |
| 127 | + | |
| 128 | +//날짜 받아오기 | |
| 129 | +function getDateStr(myDate){ | |
| 130 | + var year = myDate.getFullYear(); | |
| 131 | + var month = ("0"+(myDate.getMonth()+1)).slice(-2); | |
| 132 | + var day = ("0"+myDate.getDate()).slice(-2); | |
| 133 | + return ( year + '/' + month + '/' + day ); | |
| 134 | +} | |
| 135 | + | |
| 136 | +//캘린더에 날짜 입력해 주기 | |
| 137 | +function setCalVal(val,targetObj){ | |
| 138 | + $('input[name='+targetObj+']').val(val) ; | |
| 139 | +} | |
| 140 | + | |
| 141 | + | |
| 142 | +//검색 버튼 실행 | |
| 143 | +function linkPage(pageNo){ | |
| 144 | + | |
| 145 | + var form = document.searchForm; | |
| 146 | + var stateType = form.stateType.value; | |
| 147 | + form.pageIndex.value = pageNo; | |
| 148 | + | |
| 149 | + var sendData = $(document.searchForm).serializeArray(); | |
| 150 | + $(".msgSentAllLoad").html('<div class="list_info"><table class="tType4"><tbody><tr><td colspan="12">LOADING...</td></tr></tbody></table></div>'); | |
| 151 | + $(".msgSentAllLoad").load("/web/kakao/sent/selectKakaoSentListViewAjax.do", sendData ,function(response, status, xhr){ | |
| 152 | + }); | |
| 153 | + | |
| 154 | +} | |
| 155 | + | |
| 156 | +//선택 삭제 실행 | |
| 157 | + | |
| 158 | +/* | |
| 159 | +function fnDelete(){ | |
| 160 | + | |
| 161 | + var msgId = []; | |
| 162 | + if($("input:checkbox[name='msgSentDel']").is(":checked")==false){ | |
| 163 | + alert("한 개 이상의 전송 내역을 선택하세요"); | |
| 164 | + return; | |
| 165 | + } | |
| 166 | + | |
| 167 | + $("input:checkbox[name='msgSentDel']:checked").each(function(index){ | |
| 168 | + var disabledChk = $(this).prop('disabled'); | |
| 169 | + if(!disabledChk){ //checkbox disabled 인 것은 제외하고 아이디 저장 | |
| 170 | + msgId[index] = $(this).val(); | |
| 171 | + } | |
| 172 | + }); | |
| 173 | + | |
| 174 | + if(msgId.length > 0){ | |
| 175 | + | |
| 176 | + //22.04.25 구글 독스 alert 기준으로 이지우가 수정 | |
| 177 | + // if(confirm("선택한 발송문자를 삭제하시겠습니까? 삭제된 문자는 복구가 불가능 합니다.")) | |
| 178 | + if(confirm("선택한 목록을 삭제하시겠습니까?")){ | |
| 179 | + | |
| 180 | + document.searchForm.msgGroupIdList.value = msgId; | |
| 181 | + var sendData = $(document.searchForm).serializeArray(); | |
| 182 | + | |
| 183 | + $(".msgSentAllLoad").load("/web/mjon/msgsent/deleteMsgSentDataAjax.do", sendData ,function(response, status, xhr){ | |
| 184 | + }); | |
| 185 | + | |
| 186 | +// var form = document.searchForm; | |
| 187 | +// form.action="/web/mjon/msgsent/selectMsgSentView.do"; | |
| 188 | +// form.submit(); | |
| 189 | + } | |
| 190 | + | |
| 191 | + }else{ | |
| 192 | + | |
| 193 | + alert("삭제할 문자를 선택해 주세요."); | |
| 194 | + return false; | |
| 195 | + | |
| 196 | + } | |
| 197 | + | |
| 198 | +} | |
| 199 | + */ | |
| 200 | +//상세보기 버튼 실행 | |
| 201 | +function fnRevDetailPop(msgGroupId, msgId){ | |
| 202 | + document.resPopForm.msgGroupId.value = msgGroupId; | |
| 203 | + document.resPopForm.msgId.value = msgId; | |
| 204 | + var sendData = $(document.resPopForm).serializeArray(); | |
| 205 | + | |
| 206 | + var form = document.searchForm; | |
| 207 | + if (form.listType.value == "privateList") { | |
| 208 | + // 개인별 | |
| 209 | + $("#msgSentDetailPopLoad").load("/web/kakao/sent/selectKakaoSentDetailData2Ajax.do", sendData ,function(response, status, xhr){ | |
| 210 | + $('#tooltopClick').trigger('click'); | |
| 211 | + }); | |
| 212 | + } | |
| 213 | + else { | |
| 214 | + // 전송건별 | |
| 215 | + $("#msgSentDetailPopLoad").load("/web/kakao/sent/selectKakaoSentDetailDataAjax.do", sendData ,function(response, status, xhr){ | |
| 216 | + // 상세보기 클릭때마다 툴팁 1 tab이 열리게 설정 | |
| 217 | + popupTab($('#atBtn'),'1'); | |
| 218 | + $('#tooltopClick').trigger('click'); | |
| 219 | + }); | |
| 220 | + } | |
| 221 | + | |
| 222 | +} | |
| 223 | + | |
| 224 | +function fnListLoad(pageType, tabNum){ | |
| 225 | + | |
| 226 | + var form = document.searchForm; | |
| 227 | + var $tab = $(".table_tab_wrap li").eq(tabNum); // | |
| 228 | + $tab.addClass("active"); | |
| 229 | + $tab.find("button").attr("title", "선택됨"); | |
| 230 | + $tab.siblings("li.tab").removeClass("active"); | |
| 231 | + $tab.siblings("li.btn_tab").removeClass("active"); | |
| 232 | + $tab.siblings("li.tab").find("button").removeAttr("title"); | |
| 233 | + | |
| 234 | + if(pageType == 'fail'){ | |
| 235 | + form.listType.value = "privateList"; | |
| 236 | + $(".tab_depth1").hide(); | |
| 237 | + } else { | |
| 238 | + $(".tab_depth1").show(); | |
| 239 | + } | |
| 240 | + form.stateType.value = pageType; | |
| 241 | + | |
| 242 | + linkPage(1); | |
| 243 | + | |
| 244 | +} | |
| 245 | + | |
| 246 | +// 전체/단문/장문/그림 탭 선택 처리 | |
| 247 | +function fnTabLoad(tabType, tabNum){ | |
| 248 | + | |
| 249 | + var form = document.searchForm; | |
| 250 | + | |
| 251 | + form.tabType.value = tabType; | |
| 252 | + | |
| 253 | + //해당 탭의 전체 리스트 내역으로 불러오기 | |
| 254 | + fnListLoad('all', '0'); | |
| 255 | + var n=tabNum+1; | |
| 256 | + | |
| 257 | + //탭 선택 CSS 처리 | |
| 258 | + var $tab = $(".list_tab_wrap2 li:nth-child("+n+")"); | |
| 259 | + var $tabPrev = $(".list_tab_wrap2 li:nth-child("+n+")").prev("li") | |
| 260 | + $tab.addClass("active"); | |
| 261 | + $tab.find("button").attr("title", "선택됨"); | |
| 262 | + $tab.siblings("li.tab").removeClass("active"); | |
| 263 | + $tab.siblings("li.tab").find("button").removeAttr("title"); | |
| 264 | + | |
| 265 | + $tab.siblings("li:not(li:last-child)").find("button").css("border-right","1px solid #e5e5e5"); | |
| 266 | + $tabPrev.find("button").css("border-right","0"); | |
| 267 | + | |
| 268 | +} | |
| 269 | + | |
| 270 | +function fnSearch(pageNo){ | |
| 271 | + | |
| 272 | + var form = document.searchForm; | |
| 273 | + | |
| 274 | + form.pageIndex.value = pageNo ; | |
| 275 | + | |
| 276 | + | |
| 277 | + form.action="/web/kakao/sent/selectKakaoSentView.do"; | |
| 278 | + form.submit(); | |
| 279 | + | |
| 280 | +} | |
| 281 | + | |
| 282 | +function fnExcelDownLoad(pageType, listType){ | |
| 283 | + | |
| 284 | + var form = document.searchForm; | |
| 285 | + var loginVO = '${LoginVO}'; | |
| 286 | + | |
| 287 | + form.stateType.value = pageType; | |
| 288 | + form.listType.value = listType; | |
| 289 | + | |
| 290 | + if(loginVO == "" || loginVO == null){ | |
| 291 | + | |
| 292 | + alert("로그인 후 이용이 가능합니다."); | |
| 293 | + return false; | |
| 294 | + | |
| 295 | + } | |
| 296 | + | |
| 297 | + if(confirm("엑셀 다운로드를 하시겠습니까?")){ | |
| 298 | + | |
| 299 | + form.action="/web/mjon/msgsent/kakaoSentExcelDownLoadAjax.do"; | |
| 300 | + form.submit(); | |
| 301 | + | |
| 302 | + } | |
| 303 | + | |
| 304 | +} | |
| 305 | + | |
| 306 | +$(document).on('click', '.msgGgoupList', function(){ | |
| 307 | + | |
| 308 | + var form = document.searchForm; | |
| 309 | + form.listType.value = "groupList"; | |
| 310 | + linkPage(1); | |
| 311 | + | |
| 312 | +}); | |
| 313 | + | |
| 314 | +$(document).on('click', '.msgPrivateList', function(){ | |
| 315 | + | |
| 316 | + var form = document.searchForm; | |
| 317 | + form.listType.value = "privateList"; | |
| 318 | + linkPage(1); | |
| 319 | + | |
| 320 | +}); | |
| 321 | + | |
| 322 | + | |
| 323 | +function fnDeleteAddrNo(listType){ | |
| 324 | + | |
| 325 | + var msgId = []; | |
| 326 | + if($("input:checkbox[name='msgSentDel']").is(":checked")==false){ | |
| 327 | + alert("한 개 이상의 전송 내역을 선택하세요"); | |
| 328 | + return; | |
| 329 | + } | |
| 330 | + | |
| 331 | + $("input:checkbox[name='msgSentDel']:checked").each(function(index){ | |
| 332 | + | |
| 333 | + var disabledChk = $(this).prop('disabled'); | |
| 334 | + if(!disabledChk){ //checkbox disabled 인 것은 제외하고 아이디 저장 | |
| 335 | + | |
| 336 | + msgId[index] = $(this).val(); | |
| 337 | + | |
| 338 | + } | |
| 339 | + | |
| 340 | + }); | |
| 341 | + | |
| 342 | + if(msgId.length > 0){ | |
| 343 | + | |
| 344 | + //22.04.25 구글 독스 alert 기준으로 이지우가 수정 | |
| 345 | + /* if(confirm("선택한 수신번호를 주소록에서 삭제하시겠습니까? 삭제된 주소록은 복구가 불가능 합니다.")){ */ | |
| 346 | + if(confirm("선택하신 번호를 주소록에서 삭제하시겠습니까?")){ | |
| 347 | + | |
| 348 | + var form = document.searchForm; | |
| 349 | + | |
| 350 | + form.msgGroupIdList.value = msgId; | |
| 351 | + form.listType.value = listType; | |
| 352 | + | |
| 353 | + var data = new FormData(form); | |
| 354 | + url = "/web/mjon/msgsent/deleteAddrNoDataAjax.do"; | |
| 355 | + | |
| 356 | + $.ajax({ | |
| 357 | + type: "POST", | |
| 358 | + url: url, | |
| 359 | + data: data, | |
| 360 | + dataType:'json', | |
| 361 | + async: false, | |
| 362 | + processData: false, | |
| 363 | + contentType: false, | |
| 364 | + cache: false, | |
| 365 | + success: function (returnData, status) { | |
| 366 | + if(status == 'success'){ // status 확인 필요한가. 석세스 안뜨면 에러 가지 않나 | |
| 367 | + if("fail"==returnData.result){ | |
| 368 | + | |
| 369 | + alert(returnData.message); | |
| 370 | + return false; | |
| 371 | + | |
| 372 | + }else if("loginFail"==returnData.result){ | |
| 373 | + | |
| 374 | + alert(returnData.message); | |
| 375 | + return false; | |
| 376 | + | |
| 377 | + }else if(returnData.resultCnt == '0'){ | |
| 378 | + | |
| 379 | + alert("주소록에 삭제할 연락처가 없습니다."); | |
| 380 | + return false; | |
| 381 | + | |
| 382 | + }else{ | |
| 383 | + | |
| 384 | + alert(returnData.message); | |
| 385 | + return false; | |
| 386 | + | |
| 387 | + } | |
| 388 | + | |
| 389 | + } else if(status== 'fail'){ | |
| 390 | + alert(returnData.message); | |
| 391 | + } | |
| 392 | + }, | |
| 393 | + error: function (e) { alert("주소록 삭제에 실패하였습니다."); console.log("ERROR : ", e); } | |
| 394 | + }); | |
| 395 | + | |
| 396 | + } | |
| 397 | + | |
| 398 | + }else{ | |
| 399 | + | |
| 400 | + alert("삭제할 문자를 선택해 주세요."); | |
| 401 | + return false; | |
| 402 | + | |
| 403 | + } | |
| 404 | + | |
| 405 | +} | |
| 406 | + | |
| 407 | +function fnAddBlockNo(listType){ | |
| 408 | + | |
| 409 | + var msgId = []; | |
| 410 | + if($("input:checkbox[name='msgSentDel']").is(":checked")==false){ | |
| 411 | + alert("선택된 항목이 없습니다."); | |
| 412 | + return; | |
| 413 | + } | |
| 414 | + | |
| 415 | + $("input:checkbox[name='msgSentDel']:checked").each(function(index){ | |
| 416 | + | |
| 417 | + var disabledChk = $(this).prop('disabled'); | |
| 418 | + if(!disabledChk){ //checkbox disabled 인 것은 제외하고 아이디 저장 | |
| 419 | + | |
| 420 | + msgId[index] = $(this).val(); | |
| 421 | + | |
| 422 | + } | |
| 423 | + | |
| 424 | + }); | |
| 425 | + | |
| 426 | + if(msgId.length > 0){ | |
| 427 | + | |
| 428 | + //if(confirm("선택한 수신번호를 주소록에서 삭제하시겠습니까? 삭제된 주소록은 복구가 불가능 합니다.")){ | |
| 429 | + | |
| 430 | + var form = document.searchForm; | |
| 431 | + | |
| 432 | + form.msgGroupIdList.value = msgId; | |
| 433 | + form.listType.value = listType; | |
| 434 | + | |
| 435 | + var data = new FormData(form); | |
| 436 | + url = "/web/mjon/msgsent/insertAddBlockNoDataAjax.do"; | |
| 437 | + | |
| 438 | + $.ajax({ | |
| 439 | + type: "POST", | |
| 440 | + url: url, | |
| 441 | + data: data, | |
| 442 | + dataType:'json', | |
| 443 | + async: false, | |
| 444 | + processData: false, | |
| 445 | + contentType: false, | |
| 446 | + cache: false, | |
| 447 | + success: function (returnData, status) { | |
| 448 | + if(status == 'success'){ // status 확인 필요한가. 석세스 안뜨면 에러 가지 않나 | |
| 449 | + if("fail"==returnData.result){ | |
| 450 | + | |
| 451 | + alert(returnData.message); | |
| 452 | + return false; | |
| 453 | + | |
| 454 | + }else if("loginFail"==returnData.result){ | |
| 455 | + | |
| 456 | + alert(returnData.message); | |
| 457 | + return false; | |
| 458 | + | |
| 459 | + }else if(returnData.resultCnt == '0'){ | |
| 460 | + | |
| 461 | + alert("주소록에 삭제할 연락처가 없습니다."); | |
| 462 | + return false; | |
| 463 | + | |
| 464 | + }else{ | |
| 465 | + | |
| 466 | + alert(returnData.message); | |
| 467 | + return false; | |
| 468 | + | |
| 469 | + } | |
| 470 | + | |
| 471 | + } else if(status== 'fail'){ | |
| 472 | + alert(returnData.message); | |
| 473 | + } | |
| 474 | + }, | |
| 475 | + error: function (e) { alert("수신거부번호 등록에 실패하였습니다."); console.log("ERROR : ", e); } | |
| 476 | + }); | |
| 477 | + | |
| 478 | + //} | |
| 479 | + | |
| 480 | + }else{ | |
| 481 | + | |
| 482 | + alert("수신거부번호를 등록할 문자를 선택해 주세요."); | |
| 483 | + return false; | |
| 484 | + | |
| 485 | + } | |
| 486 | + | |
| 487 | + | |
| 488 | +} | |
| 489 | + | |
| 490 | +function fnReSendMsg(){ | |
| 491 | + | |
| 492 | + var msgSeq = []; | |
| 493 | + if($("input:checkbox[name='msgSentDel']").is(":checked")==false){ | |
| 494 | + alert("선택된 항목이 없습니다."); | |
| 495 | + return; | |
| 496 | + } | |
| 497 | + | |
| 498 | + $("input:checkbox[name='msgSentDel']:checked").each(function(index){ | |
| 499 | + | |
| 500 | + var disabledChk = $(this).prop('disabled'); | |
| 501 | + if(!disabledChk){ //checkbox disabled 인 것은 제외하고 아이디 저장 | |
| 502 | + | |
| 503 | + msgSeq[index] = $(this).val(); | |
| 504 | + } | |
| 505 | + | |
| 506 | + }); | |
| 507 | + | |
| 508 | + var form = document.reSendForm; | |
| 509 | + form.msgSeqList.value = msgSeq; | |
| 510 | + form.msgResendFlag.value = "Y"; | |
| 511 | + | |
| 512 | + form.action="/web/mjon/msgdata/selectMsgDataView.do"; | |
| 513 | + form.submit(); | |
| 514 | + | |
| 515 | +} | |
| 516 | + | |
| 517 | +function fnMsgSFDetailList(msgGroupId, resultType){ | |
| 518 | + | |
| 519 | + var form = document.resPopForm; | |
| 520 | + form.msgGroupId.value = msgGroupId; | |
| 521 | + form.resultType.value = resultType; | |
| 522 | + | |
| 523 | + //만들려는 팝업의 크기 | |
| 524 | + var popup_wid = '1280'; | |
| 525 | + var popup_ht = '700'; | |
| 526 | + | |
| 527 | + var popup_left = (window.screen.width / 2) - (popup_wid / 2); | |
| 528 | + var popup_top =(window.screen.height / 2) - (popup_ht / 2); | |
| 529 | + | |
| 530 | + $("#resPopForm").attr("target","msgSFDetailPop"); | |
| 531 | + | |
| 532 | + window.open('', 'msgSFDetailPop', 'width='+ popup_wid +', height='+ popup_ht +', left=' + popup_left + ', top='+ popup_top ); | |
| 533 | + $("#resPopForm").attr({"action":"/web/kakao/sent/selectKakaoSentSFDetailListAjax.do", "method":"post"}).submit(); | |
| 534 | + | |
| 535 | +} | |
| 536 | + | |
| 537 | + | |
| 538 | +/* 사용내역서 클릭 시 내역서 새창 팝업 오픈 */ | |
| 539 | +function fnShowPrintPopup(tabType, type) { | |
| 540 | + //만들려는 팝업의 크기 | |
| 541 | + var popup_wid = '840'; | |
| 542 | + var popup_ht = '900'; | |
| 543 | + | |
| 544 | + var popup_left = (window.screen.width / 2) - (popup_wid / 2); | |
| 545 | + var popup_top =(window.screen.height / 2) - (popup_ht / 2); | |
| 546 | + | |
| 547 | + $("#tabType").val(tabType); | |
| 548 | + $("#searchForm").attr("target","msgSentPrint"); | |
| 549 | + | |
| 550 | + window.open('', 'msgSentPrint', 'width='+ popup_wid +', height='+ popup_ht +', left=' + popup_left + ', top='+ popup_top +',scrollbars=1'); | |
| 551 | + $("#searchForm").attr({"action":"/web/kakao/sent/printKakaoSentDataAjax.do", "method":"post"}).submit(); | |
| 552 | + | |
| 553 | +} | |
| 554 | + | |
| 555 | +function addrGroupDuplCnt() { | |
| 556 | + document.searchForm.addrGrpNm.value = $('#grpNm').val(); | |
| 557 | + | |
| 558 | + var data = $('#searchForm').serialize(); | |
| 559 | + //var data = new FormData(form); | |
| 560 | + | |
| 561 | + var flag = true; | |
| 562 | + var url = "/web/addr/selectDuplAddrGroupNameAjax.do"; | |
| 563 | + | |
| 564 | + $.ajax({ | |
| 565 | + async: false, | |
| 566 | + type: "post", | |
| 567 | + url: url, | |
| 568 | + data: data, | |
| 569 | + dataType:"JSON", | |
| 570 | +// contentType: false, | |
| 571 | +// processData: false, | |
| 572 | + cache: false, | |
| 573 | + success: function (returnData, status) { | |
| 574 | + if("dupl"==returnData.result1) { | |
| 575 | + flag = false; | |
| 576 | + } | |
| 577 | + }, | |
| 578 | + error: function (e) { | |
| 579 | + alert("error"); | |
| 580 | + console.log("ERROR : ", e); | |
| 581 | + } | |
| 582 | + }); | |
| 583 | + | |
| 584 | + return flag; | |
| 585 | +} | |
| 586 | + | |
| 587 | +//주소록 그룹 등록 기능 | |
| 588 | +function fnAddAddrNo(){ | |
| 589 | + | |
| 590 | + var addrGrpNm = $('#grpNm').val(); //입력 그룹 이름 불러오기 | |
| 591 | + | |
| 592 | + var msgId = []; | |
| 593 | + if($("input:checkbox[name='msgSentDel']").is(":checked")==false){ | |
| 594 | + alert("한 개 이상의 전송 내역을 선택하세요"); | |
| 595 | + return; | |
| 596 | + } | |
| 597 | + | |
| 598 | + | |
| 599 | + $("input:checkbox[name='msgSentDel']:checked").each(function(index){ | |
| 600 | + | |
| 601 | + var disabledChk = $(this).prop('disabled'); | |
| 602 | + if(!disabledChk){ //checkbox disabled 인 것은 제외하고 아이디 저장 | |
| 603 | + | |
| 604 | + msgId[index] = $(this).val(); | |
| 605 | + | |
| 606 | + } | |
| 607 | + | |
| 608 | + }); | |
| 609 | + | |
| 610 | + if(msgId.length > 0 && addrGrpNm != ''){ | |
| 611 | + | |
| 612 | + | |
| 613 | + //주소록 그룹명 중복체크 | |
| 614 | + if(!addrGroupDuplCnt()) { | |
| 615 | + alert("이미 등록되어있는 주소록입니다."); | |
| 616 | + return false; | |
| 617 | + } | |
| 618 | + | |
| 619 | + | |
| 620 | + var form = document.searchForm; | |
| 621 | + | |
| 622 | + form.msgGroupIdList.value = msgId; | |
| 623 | + form.addrGrpNm.value = addrGrpNm; | |
| 624 | + | |
| 625 | + var data = new FormData(form); | |
| 626 | + url = "/web/mjon/msgsent/insertAddAddrGrpDataAjax.do"; | |
| 627 | + | |
| 628 | + $.ajax({ | |
| 629 | + type: "POST", | |
| 630 | + url: url, | |
| 631 | + data: data, | |
| 632 | + dataType:'json', | |
| 633 | + async: false, | |
| 634 | + processData: false, | |
| 635 | + contentType: false, | |
| 636 | + cache: false, | |
| 637 | + success: function (returnData, status) { | |
| 638 | + if(status == 'success'){ // status 확인 필요한가. 석세스 안뜨면 에러 가지 않나 | |
| 639 | + if("fail"==returnData.result){ | |
| 640 | + | |
| 641 | + alert(returnData.message); | |
| 642 | + return false; | |
| 643 | + | |
| 644 | + }else if("loginFail"==returnData.result){ | |
| 645 | + | |
| 646 | + alert(returnData.message); | |
| 647 | + return false; | |
| 648 | + | |
| 649 | + }else if(returnData.resultCnt == '0'){ | |
| 650 | + | |
| 651 | + alert("주소록에 등록할 연락처가 없습니다."); | |
| 652 | + return false; | |
| 653 | + | |
| 654 | + }else{ | |
| 655 | + | |
| 656 | + alert(returnData.message); | |
| 657 | + $('#grpNm').val(""); //입력한 그룹명 초기화 | |
| 658 | + $(".tooltip-close").trigger("click"); | |
| 659 | + return false; | |
| 660 | + | |
| 661 | + } | |
| 662 | + | |
| 663 | + } else if(status== 'fail'){ | |
| 664 | + alert(returnData.message); | |
| 665 | + } | |
| 666 | + }, | |
| 667 | + error: function (e) { alert("주소록 등록에 실패하였습니다."); console.log("ERROR : ", e); } | |
| 668 | + }); | |
| 669 | + }else{ | |
| 670 | + | |
| 671 | + alert("등록할 문자를 선택해 주세요."); | |
| 672 | + return false; | |
| 673 | + | |
| 674 | + } | |
| 675 | + | |
| 676 | +} | |
| 677 | + | |
| 678 | +/* 윈도우팝업 열기 */ | |
| 679 | +function infoPop(pageUrl){ | |
| 680 | + document.popForm.pageType.value = pageUrl; | |
| 681 | + document.popForm.action = "/web/pop/infoPop.do"; | |
| 682 | + document.popForm.method = "post"; | |
| 683 | + window.open("about:blank", 'infoPop', 'width=790, height=320, top=100, left=100, fullscreen=no, menubar=no, status=no, toolbar=no, titlebar=yes, location=no, scrollbars=1'); | |
| 684 | + document.popForm.target = "infoPop"; | |
| 685 | + document.popForm.submit(); | |
| 686 | +} | |
| 687 | + | |
| 688 | +</script> | |
| 689 | + <!-- 문자내용 팝업 data-tooltip: rev_popup01 --> | |
| 690 | + <div class="tooltip-wrap"> | |
| 691 | + <div class="popup-com adr_layer kakao_rev_popup rev_popup01" tabindex="0" data-tooltip-con="rev_popup01" | |
| 692 | + data-focus="rev_popup01" data-focus-prev="rev_popup01-close" style="width: 440px;"> | |
| 693 | + <div class="popup_heading"> | |
| 694 | + <p>문자내용</p> | |
| 695 | + <button type="button" class="tooltip-close" data-focus="rev_popup01-close"><img | |
| 696 | + src="/publish/images/content/layerPopup_close.png" alt="팝업 닫기"></button> | |
| 697 | + </div> | |
| 698 | + <div class="layer_in"> | |
| 699 | + | |
| 700 | + <!-- 팝업 상세내용 노출 --> | |
| 701 | + <div id="msgSentDetailPopLoad" > | |
| 702 | + </div> | |
| 703 | + <div class="popup_btn_wrap2" style="justify-content: center;"> | |
| 704 | + <button type="button" class="tooltip-close" data-focus="rev_popup01-close" | |
| 705 | + data-focus-next="rev_popup01">닫기</button> | |
| 706 | + </div> | |
| 707 | + </div> | |
| 708 | + </div> | |
| 709 | + </div> | |
| 710 | + <!-- //문자내용 팝업 data-tooltip: rev_popup01 --> | |
| 711 | + | |
| 712 | + | |
| 713 | + | |
| 714 | + | |
| 715 | + | |
| 716 | + <!-- 그룹등록 팝업 data-tooltip:rev_popup02 --> | |
| 717 | + <div class="tooltip-wrap"> | |
| 718 | + <div class="popup-com adr_layer rev_popup02" tabindex="0" data-tooltip-con="rev_popup02" data-focus="rev_popup02" data-focus-prev="rev_popup02-close" style="width: 500px;"> | |
| 719 | + <div class="popup_heading"> | |
| 720 | + <p>그룹등록</p> | |
| 721 | + <button type="button" class="tooltip-close" data-focus="rev_popup02-close"><img src="/publish/images/content/layerPopup_close.png" alt="팝업 닫기"></button> | |
| 722 | + </div> | |
| 723 | + <div class="layer_in"> | |
| 724 | + <div class="gorup_join_cont"> | |
| 725 | + <p class="adr_pop_title">선택된 발송내역 전화번호를 그룹으로 등록합니다.</p> | |
| 726 | + <div class="group_input" style="margin-top: 0;"> | |
| 727 | + <div class="input_left">그룹이름</div> | |
| 728 | + <div class="input_right"> | |
| 729 | + <label for="grpNm" class="label">새 그룹명 입력</label> | |
| 730 | + <input type="text" id="grpNm" name="grpNm" placeholder="새 그룹명 입력" onfocus="this.placeholder=''" onblur="this.placeholder='새 그룹명 입력'" class="inputLight"> | |
| 731 | + </div> | |
| 732 | + </div> | |
| 733 | + <div class="popup_btn_wrap2"> | |
| 734 | + <button type="button" onclick="javascript:fnAddAddrNo(); return false;">저장</button> | |
| 735 | + <button type="button" class="tooltip-close" data-focus="rev_popup02-close" data-focus-next="rev_popup02">취소</button> | |
| 736 | + </div> | |
| 737 | + </div> | |
| 738 | + </div> | |
| 739 | + </div> | |
| 740 | + </div> | |
| 741 | + <div class="inner"> | |
| 742 | + <!-- send top --> | |
| 743 | + <div class="send_top"> | |
| 744 | + <!-- 결제관리 - 요금 사용내역 --> | |
| 745 | + <div class="rev_admin_cont serv_content current"> | |
| 746 | + <div class="heading"> | |
| 747 | + <h2>발송결과</h2> | |
| 748 | + <button type="button" class="button info" onclick="infoPop('selectMsgSentView');">사용안내</button> | |
| 749 | + <button type="button" class="button junk" data-tooltip="popupJunk">통신사 스팸규격안내</button> | |
| 750 | + </div> | |
| 751 | + <div class="pay_tab_wrap"> | |
| 752 | + <!-- tab button --> | |
| 753 | + <%@include file="/WEB-INF/jsp/web/kakao/include/KakaoSentTopMentTap.jsp" %> | |
| 754 | + <!--// tab button --> | |
| 755 | + </div> | |
| 756 | + <form id="searchForm" name="searchForm" method="post"> | |
| 757 | + <input type="hidden" id="pageIndex" name="pageIndex" value="1"/> | |
| 758 | + <input type="hidden" id="msgGroupIdList" name="msgGroupIdList" value=""/> | |
| 759 | + <input type="hidden" name="searchSortCnd" value="<c:out value="${searchVO.searchSortCnd}" />" /> | |
| 760 | + <input type="hidden" name="searchSortOrd" value="<c:out value="${searchVO.searchSortOrd}" />" /> | |
| 761 | + <input type="hidden" id="tabType" name="tabType" value="all"/><!-- 탭 종류 --> | |
| 762 | + <input type="hidden" id="stateType" name="stateType" value="all"/><!-- 발송상태 종류 --> | |
| 763 | + <input type="hidden" id="listType" name="listType" value="groupList"/><!-- 리스트 종류 --> | |
| 764 | + <input type="hidden" id="addrGrpNm" name="addrGrpNm" value=""/><!-- 주소록 그룹 이름 --> | |
| 765 | + <input type="hidden" id="mberId" name="mberId" value="${LoginVO.id}"/><!-- 주소록 그룹 이름 --> | |
| 766 | + | |
| 767 | + <!-- 각 통계별 총 건수 --> | |
| 768 | + <c:set var="totAllCnt" value="0"/><!-- 전체 건수 --> | |
| 769 | + <c:set var="totAtCnt" value="0"/><!-- 알림톡 건수 --> | |
| 770 | + <c:set var="totFtCnt" value="0"/><!-- 친구톡 건수 --> | |
| 771 | + | |
| 772 | + <!-- 각 통계별 성공, 실패 건수 처리 --> | |
| 773 | + <c:set var="waitAllCnt" value="0"/><!-- 전체 대기 건수 --> | |
| 774 | + <c:set var="succAllCnt" value="0"/><!-- 전체 성공 건수 --> | |
| 775 | + <c:set var="failAllCnt" value="0"/><!-- 전체 실패 건수 --> | |
| 776 | + <c:set var="waitAtCnt" value="0"/><!-- 알림톡 대기 건수 --> | |
| 777 | + <c:set var="succAtCnt" value="0"/><!-- 알림톡 성공 건수 --> | |
| 778 | + <c:set var="failAtCnt" value="0"/><!-- 알림톡 실패 건수 --> | |
| 779 | + <c:set var="waitFtCnt" value="0"/><!-- 친구톡 대기 건수 --> | |
| 780 | + <c:set var="succFtCnt" value="0"/><!-- 친구톡 성공 건수 --> | |
| 781 | + <c:set var="failFtCnt" value="0"/><!-- 친구톡 실패 건수 --> | |
| 782 | + <!-- 발송대기 건수가 있으면 이것도 발송 실패건수로 일단 집계한다. --> | |
| 783 | + <c:forEach var="totalMsgCnt" items="${totalMsgCnt}" varStatus="status"> | |
| 784 | + | |
| 785 | + <!-- 전체 갯수 구하기 --> | |
| 786 | + <c:set var="totAllCnt" value="${totAllCnt + totalMsgCnt.msgResultCnt}"/> | |
| 787 | + | |
| 788 | + <!-- 전체 대기 갯수 --> | |
| 789 | + <c:if test="${totalMsgCnt.msgResultSts == 'W'}"> | |
| 790 | + <c:set var="waitAllCnt" value="${waitAllCnt + totalMsgCnt.msgResultCnt}"/> | |
| 791 | + </c:if> | |
| 792 | + | |
| 793 | + <!-- 전체 성공 갯수 --> | |
| 794 | + <c:if test="${totalMsgCnt.msgResultSts == 'S'}"> | |
| 795 | + <c:set var="succAllCnt" value="${succAllCnt + totalMsgCnt.msgResultCnt}"/> | |
| 796 | + </c:if> | |
| 797 | + | |
| 798 | + <!-- 전체 실패 갯수 --> | |
| 799 | + <c:if test="${totalMsgCnt.msgResultSts == 'F'}"> | |
| 800 | + <c:set var="failAllCnt" value="${failAllCnt + totalMsgCnt.msgResultCnt}"/> | |
| 801 | + </c:if> | |
| 802 | + | |
| 803 | + </c:forEach> | |
| 804 | + | |
| 805 | + <!-- 알림톡 처리 --> | |
| 806 | + <c:forEach var="atCnt" items="${atCnt}" varStatus="status"> | |
| 807 | + | |
| 808 | + <!-- 단문 전체 갯수 구하기 --> | |
| 809 | + <c:set var="totAtCnt" value="${totAtCnt + atCnt.msgResultCnt}"/> | |
| 810 | + | |
| 811 | + <!-- 단문 대기 갯수 구하기 --> | |
| 812 | + <c:if test="${atCnt.msgResultSts == 'W'}"> | |
| 813 | + <c:set var="waitAtCnt" value="${waitAtCnt + atCnt.msgResultCnt}"/> | |
| 814 | + </c:if> | |
| 815 | + | |
| 816 | + <!-- 단문 성공 갯수 구하기 --> | |
| 817 | + <c:if test="${atCnt.msgResultSts == 'S'}"> | |
| 818 | + <c:set var="succAtCnt" value="${succAtCnt + atCnt.msgResultCnt}"/> | |
| 819 | + </c:if> | |
| 820 | + | |
| 821 | + <!-- 단문 실패 갯수 구하기 --> | |
| 822 | + <c:if test="${atCnt.msgResultSts == 'F'}"> | |
| 823 | + <c:set var="failAtCnt" value="${failAtCnt + atCnt.msgResultCnt}"/> | |
| 824 | + </c:if> | |
| 825 | + | |
| 826 | + </c:forEach> | |
| 827 | + | |
| 828 | + <!-- 친구톡 처리 --> | |
| 829 | + <c:forEach var="ftCnt" items="${ftCnt}" varStatus="status"> | |
| 830 | + | |
| 831 | + <!-- 장문 전체 갯수 구하기 --> | |
| 832 | + <c:set var="totFtCnt" value="${totFtCnt + ftCnt.msgResultCnt}"/> | |
| 833 | + | |
| 834 | + <!-- 장문 대기 갯수 구하기 --> | |
| 835 | + <c:if test="${ftCnt.msgResultSts == 'W'}"> | |
| 836 | + <c:set var="waitFtCnt" value="${waitFtCnt + ftCnt.msgResultCnt}"/> | |
| 837 | + </c:if> | |
| 838 | + | |
| 839 | + <!-- 장문 성공 갯수 구하기 --> | |
| 840 | + <c:if test="${ftCnt.msgResultSts == 'S'}"> | |
| 841 | + <c:set var="succFtCnt" value="${succFtCnt + ftCnt.msgResultCnt}"/> | |
| 842 | + </c:if> | |
| 843 | + | |
| 844 | + <!-- 장문 실패 갯수 구하기 --> | |
| 845 | + <c:if test="${ftCnt.msgResultSts == 'F'}"> | |
| 846 | + <c:set var="failFtCnt" value="${failFtCnt + ftCnt.msgResultCnt}"/> | |
| 847 | + </c:if> | |
| 848 | + | |
| 849 | + </c:forEach> | |
| 850 | + <div class="rev_content kakao_rev_content" id="tab5_2"> | |
| 851 | + <div class="rev_admin"> | |
| 852 | + <div class="rev_admin_in"> | |
| 853 | + <div class="rev_admin_top clearfix"> | |
| 854 | + <p>전체</p> | |
| 855 | + <p><span><fmt:formatNumber value="${totAllCnt}" pattern="#,###"/></span> 건</p> | |
| 856 | + </div> | |
| 857 | + <div class="rev_admin_btm"> | |
| 858 | + <dl> | |
| 859 | + <dt>대기</dt> | |
| 860 | + <dd><span class="c_002c9a"><fmt:formatNumber value="${waitAllCnt}" pattern="#,###"/></span>건</dd> | |
| 861 | + </dl> | |
| 862 | + <dl> | |
| 863 | + <dt>성공</dt> | |
| 864 | + <dd><span class="c_002c9a"><fmt:formatNumber value="${succAllCnt}" pattern="#,###"/></span>건</dd> | |
| 865 | + </dl> | |
| 866 | + <dl> | |
| 867 | + <dt>실패</dt> | |
| 868 | + <dd><span class="c_e40000"><fmt:formatNumber value="${failAllCnt}" pattern="#,###"/></span>건</dd> | |
| 869 | + </dl> | |
| 870 | + </div> | |
| 871 | + </div> | |
| 872 | + <div class="rev_admin_in"> | |
| 873 | + <div class="rev_admin_top clearfix"> | |
| 874 | + <p>알림톡</p> | |
| 875 | + <p><span><fmt:formatNumber value="${totAtCnt}" pattern="#,###"/></span> 건</p> | |
| 876 | + </div> | |
| 877 | + <div class="rev_admin_btm"> | |
| 878 | + <dl> | |
| 879 | + <dt>대기</dt> | |
| 880 | + <dd><span class="c_002c9a"><fmt:formatNumber value="${waitAtCnt}" pattern="#,###"/></span>건</dd> | |
| 881 | + </dl> | |
| 882 | + <dl> | |
| 883 | + <dt>성공</dt> | |
| 884 | + <dd><span class="c_002c9a"><fmt:formatNumber value="${succAtCnt}" pattern="#,###"/></span>건</dd> | |
| 885 | + </dl> | |
| 886 | + <dl> | |
| 887 | + <dt>실패</dt> | |
| 888 | + <dd><span class="c_e40000"><fmt:formatNumber value="${failAtCnt}" pattern="#,###"/></span>건</dd> | |
| 889 | + </dl> | |
| 890 | + </div> | |
| 891 | + </div> | |
| 892 | + <%-- <div class="rev_admin_in"> | |
| 893 | + <div class="rev_admin_top clearfix"> | |
| 894 | + <p>친구톡</p> | |
| 895 | + <p><span><fmt:formatNumber value="${totFtCnt}" pattern="#,###"/></span> 건</p> | |
| 896 | + </div> | |
| 897 | + <div class="rev_admin_btm"> | |
| 898 | + <dl> | |
| 899 | + <dt>대기</dt> | |
| 900 | + <dd><span class="c_002c9a"><fmt:formatNumber value="${waitFtCnt}" pattern="#,###"/></span>건</dd> | |
| 901 | + </dl> | |
| 902 | + <dl> | |
| 903 | + <dt>성공</dt> | |
| 904 | + <dd><span class="c_002c9a"><fmt:formatNumber value="${succFtCnt}" pattern="#,###"/></span>건</dd> | |
| 905 | + </dl> | |
| 906 | + <dl> | |
| 907 | + <dt>실패</dt> | |
| 908 | + <dd><span class="c_e40000"><fmt:formatNumber value="${failFtCnt}" pattern="#,###"/></span>건</dd> | |
| 909 | + </dl> | |
| 910 | + </div> | |
| 911 | + </div> --%> | |
| 912 | + </div> | |
| 913 | + | |
| 914 | + <div class="excel_middle"> | |
| 915 | + <div class="select_btnWrap clearfix"> | |
| 916 | + <div class="btn_left"> | |
| 917 | + <span class="cal_label">기간선택</span> | |
| 918 | + <div class="calendar_wrap"> | |
| 919 | + <input type="text" class="startDate inp calendar" title="검색 시작일" id="startDate" name="startDate" value="<c:out value='${kakaoSentVO.startDate}'/>" data-datecontrol="true"> | |
| 920 | + <span class="dateEtc">~</span> | |
| 921 | + <input type="text" class="endDate inp calendar" title="검색 종료일" id="endDate" name="endDate" value="<c:out value='${kakaoSentVO.endDate}'/>" data-datecontrol="true"> | |
| 922 | + </div> | |
| 923 | + <!-- <button type="button">전월</button> | |
| 924 | + <button type="button">당월</button> --> | |
| 925 | + <button type="button" onclick="setCalVal(lastfulstday,'startDate');setCalVal( lastfuledday,'endDate'); return false;" class="btnType btnType19">전월</button> | |
| 926 | + <button type="button" onclick="setCalVal(thisfulstlday,'startDate');setCalVal( thisfuledtlday,'endDate'); return false;" class="btnType btnType19">당월</button> | |
| 927 | + <!-- <button type="button">3개월</button> --> | |
| 928 | + <button type="button" onclick="setCalVal(threefulstday,'startDate');setCalVal( threefuledday,'endDate'); return false;" class="btnType btnType19">3개월</button> | |
| 929 | + <button type="button" class="btnType6" onClick="javascript:fnSearch(1); return false;">조회</button> | |
| 930 | + </div> | |
| 931 | + <div class="btn_right"> | |
| 932 | + <label for="searchCondition" class="label">발신번호 선택 == ${kakaoSentVO.searchCondition}</label> | |
| 933 | + <select name="searchCondition" id="searchCondition" class="selType2"> | |
| 934 | + <option value="3" <c:if test="${kakaoSentVO.searchCondition == '3'}">selected</c:if> >수신번호</option> | |
| 935 | + </select> | |
| 936 | + <div class="search"> | |
| 937 | + <label for="id" class="label"></label> | |
| 938 | + <input type="text" id="searchKeyword" name="searchKeyword" value="<c:out value='${searchKeyword}'/>" placeholder="검색어를 입력하세요." onfocus="this.placeholder=''" onblur="this.placeholder='검색어를 입력하세요.'"> | |
| 939 | + <button type="button" class="btnType btnType2" onClick="javascript:fnSearch(1); return false;">검색</button> | |
| 940 | + </div> | |
| 941 | + </div> | |
| 942 | + </div> | |
| 943 | + </div> | |
| 944 | + <div class="list_tab_wrap2 type4"> | |
| 945 | + <!-- tab button --> | |
| 946 | + <ul class="list_tab"> | |
| 947 | + <li class="tab active"><button type="button" onclick="fnTabLoad('',0); return false;">전체</button></li> | |
| 948 | + <li class="tab"><button type="button" onclick="fnTabLoad('at', 1); return false;">알림톡</button></li> | |
| 949 | +<%-- <c:if test="${fn:contains(pageContext.request.requestURL , 'localhost') --%> | |
| 950 | +<%-- || fn:contains(pageContext.request.requestURL , '119.193.215.98')}"> --%> | |
| 951 | +<!-- <li class="tab"><button type="button" onclick="fnTabLoad('ft', 2); return false;">친구톡</button></li> --> | |
| 952 | +<%-- </c:if> --%> | |
| 953 | + </ul><!--// tab button --> | |
| 954 | + </div> | |
| 955 | + <!-- 예약관리 > 전체 --> | |
| 956 | + <div class="price_history_cont current" id="listTab_2"> | |
| 957 | + <!-- tab button --> | |
| 958 | + <div class="table_tab_wrap"> | |
| 959 | + <ul> | |
| 960 | + <li class="tab active"> | |
| 961 | + <button type="button" onclick="fnListLoad('all','0'); return false;">전체</button></li> | |
| 962 | + <li class="tab"><button type="button" onclick="fnListLoad('ready','1'); return false;">결과대기</button></li> | |
| 963 | + <li class="tab"><button type="button" onclick="fnListLoad('complete','2'); return false;">정상수신</button></li> | |
| 964 | + <li class="tab"><button type="button" onclick="fnListLoad('fail','3'); return false;">수신오류</button></li> | |
| 965 | + </ul><!--// tab button --> | |
| 966 | + <div class="tab_depth1"> | |
| 967 | + <a href="#none" class="on msgGgoupList">받는사람(전송건별)</a> | |
| 968 | + <a href="#none" style="display: none;"></a> | |
| 969 | + <a href="#none" class="msgPrivateList">받는사람(개인별)</a> | |
| 970 | + <div class="on_active">받는사람(전송건별)</div> | |
| 971 | + </div> | |
| 972 | + </div> | |
| 973 | + <!-- 발송관리 리스트 --> | |
| 974 | + <div class="table_cont current msgSentAllLoad" id="tableCont_1"> | |
| 975 | + </div><!-- //전체 종료 --> | |
| 976 | + <!-- table --> | |
| 977 | + </div> | |
| 978 | + </form> | |
| 979 | + </div> | |
| 980 | + </div> | |
| 981 | + </div><!--// send top --> | |
| 982 | + </div> | |
| 983 | + <form id="resPopForm" name="resPopForm" method="post"> | |
| 984 | + <input type="hidden" id="msgGroupId" name="msgGroupId" value=""/> | |
| 985 | + <input type="hidden" id="msgId" name="msgId" value=""/> | |
| 986 | + <input type="hidden" id="fileCnt" name="fileCnt" value=""/> | |
| 987 | + <input type="hidden" id="resultType" name="resultType" value="S"/> | |
| 988 | + </form> | |
| 989 | + <form id="reSendForm" name="reSendForm" method="post"> | |
| 990 | + <input type="hidden" id="msgSeqList" name="msgSeqList" value=""/> | |
| 991 | + <input type="hidden" id="msgResendFlag" name="msgResendFlag" value="N"/> | |
| 992 | + </form> | |
| 993 | + <form name="popForm" id="popForm" method="post"> | |
| 994 | + <input type="hidden" name="pageType" id="pageType" value=""/> | |
| 995 | + </form> | |
| 996 | + (No newline at end of file) |
--- src/main/webapp/WEB-INF/jsp/web/msgsent/MsgSentDetailView.jsp
+++ src/main/webapp/WEB-INF/jsp/web/msgsent/MsgSentDetailView.jsp
... | ... | @@ -610,6 +610,7 @@ |
| 610 | 610 |
// 탭 필터 적용하여 데이터 필터링 (수신번호 필터는 무시) |
| 611 | 611 |
return allData.filter(row => tabFilter ? row.result.includes(tabFilter.value) : true); |
| 612 | 612 |
} |
| 613 |
+ |
|
| 613 | 614 |
|
| 614 | 615 |
|
| 615 | 616 |
|
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?