diff --git a/src/main/java/itn/let/kakao/admin/kakaoAt/service/MjonKakaoATVO.java b/src/main/java/itn/let/kakao/admin/kakaoAt/service/MjonKakaoATVO.java index 0054fb9a..712e0b91 100644 --- a/src/main/java/itn/let/kakao/admin/kakaoAt/service/MjonKakaoATVO.java +++ b/src/main/java/itn/let/kakao/admin/kakaoAt/service/MjonKakaoATVO.java @@ -151,6 +151,8 @@ public class MjonKakaoATVO extends ComDefaultVO{ private String bizKakaoResendType; /* 대체 문자 길이 => MMS / LMS / SMS */ private String bizKakaoJsonFile; //카카오 친구톡 Json 파일 경로 + private String yellowId; + private String bizKakaoResendTypeCnt; public String getMsgDiv() { return msgDiv; @@ -1273,5 +1275,19 @@ public class MjonKakaoATVO extends ComDefaultVO{ public void setBizKakaoJsonFile(String bizKakaoJsonFile) { this.bizKakaoJsonFile = bizKakaoJsonFile; } + public String getYellowId() { + return yellowId; + } + public void setYellowId(String yellowId) { + this.yellowId = yellowId; + } + public String getBizKakaoResendTypeCnt() { + return bizKakaoResendTypeCnt; + } + public void setBizKakaoResendTypeCnt(String bizKakaoResendTypeCnt) { + this.bizKakaoResendTypeCnt = bizKakaoResendTypeCnt; + } + + } diff --git a/src/main/java/itn/let/kakao/kakaoComm/KakaoVO.java b/src/main/java/itn/let/kakao/kakaoComm/KakaoVO.java index e6dd28a3..fd0a935f 100644 --- a/src/main/java/itn/let/kakao/kakaoComm/KakaoVO.java +++ b/src/main/java/itn/let/kakao/kakaoComm/KakaoVO.java @@ -246,6 +246,14 @@ public class KakaoVO extends MjonMsgVO{ private String successCntDay; private String successCntMonth; private String successCntYear; + + + + //재전송 영역 + private String msgResendAllFlag; + private String msgResendAllGroupId; + private String msgResendAllTmpKey; + private String msgResendAllYellowId; public String getSuccessDay() { return successDay; @@ -1238,4 +1246,39 @@ public class KakaoVO extends MjonMsgVO{ public void setPhmType(String phmType) { this.phmType = phmType; } + + public String getMsgResendAllFlag() { + return msgResendAllFlag; + } + + public void setMsgResendAllFlag(String msgResendAllFlag) { + this.msgResendAllFlag = msgResendAllFlag; + } + + public String getMsgResendAllGroupId() { + return msgResendAllGroupId; + } + + public void setMsgResendAllGroupId(String msgResendAllGroupId) { + this.msgResendAllGroupId = msgResendAllGroupId; + } + + public String getMsgResendAllTmpKey() { + return msgResendAllTmpKey; + } + + public void setMsgResendAllTmpKey(String msgResendAllTmpKey) { + this.msgResendAllTmpKey = msgResendAllTmpKey; + } + + public String getMsgResendAllYellowId() { + return msgResendAllYellowId; + } + + public void setMsgResendAllYellowId(String msgResendAllYellowId) { + this.msgResendAllYellowId = msgResendAllYellowId; + } + + + } diff --git a/src/main/java/itn/let/kakao/user/kakaoAt/web/KakaoAlimTalkSendController.java b/src/main/java/itn/let/kakao/user/kakaoAt/web/KakaoAlimTalkSendController.java index bb32b5d1..ea1bb737 100644 --- a/src/main/java/itn/let/kakao/user/kakaoAt/web/KakaoAlimTalkSendController.java +++ b/src/main/java/itn/let/kakao/user/kakaoAt/web/KakaoAlimTalkSendController.java @@ -46,6 +46,8 @@ import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartHttpServletRequest; import org.springframework.web.servlet.ModelAndView; +import com.fasterxml.jackson.databind.ObjectMapper; + import egovframework.rte.fdl.idgnr.EgovIdGnrService; import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper; import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo; @@ -216,6 +218,26 @@ public class KakaoAlimTalkSendController { model.addAttribute("sendPrice", kakaoSendUtil.selectSendPriceOfKakaoAtAndSmsAndMms(userId)); } + if("Y".equals(kakaoVO.getMsgResendAllFlag())) { + List resendList = new ArrayList(); + + MjonMsgDataVO mjonMsgDataVO = new MjonMsgDataVO(); + mjonMsgDataVO.setMsgGroupId(kakaoVO.getMsgResendAllGroupId()); + mjonMsgDataVO.setUserId(userId); + resendList = mjonMsgDataService.selectMjMsgListByResend(mjonMsgDataVO); + + ObjectMapper mapper = new ObjectMapper(); + try { + String resendListJson = mapper.writeValueAsString(resendList); + model.addAttribute("resendListJson", resendListJson); + } catch (Exception e) { + e.printStackTrace(); + } + + } + + + return "web/kakao/msgdata/at/KakaoAlimtalkMsgDataView"; } @@ -1403,4 +1425,80 @@ public class KakaoAlimTalkSendController { return modelAndView; } + + + @RequestMapping(value= {"/web/mjon/alimtalk/kakaoAlimtalkMsgDataView_test_set.do"}) + public String kakaoAlimtalkMsgDataView_test_set(ModelMap model + , @ModelAttribute("kakaoVO") KakaoVO kakaoVO) throws Exception { + + LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; + String author = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getAuthority()); + String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); + + model.addAttribute("loginVO", loginVO); +/* if(userId == "") { + return "redirect:/web/user/login/login.do"; + }*/ + + + //2.사용자 개인 단가 정보 불러오기 + if(!userId.equals("") && !author.equals("ROLE_ADMIN")) { + + // 사용자 아이디를 이용한 발신프로필 조회 + kakaoVO.setUserId(userId); + List selectKakaoProfileList = kakaoApiService.selectKakaoProfileList(kakaoVO); + model.addAttribute("kakaoProfileList", selectKakaoProfileList); + + //발신번호 불러오기 + //아이디 발신번호 리스트 불러오기. + List resultSendPhonList = mjonMsgDataService.selectSendPhonNumList(userId); + List resultPhonList = new ArrayList(); + MJUtil mjUtil = new MJUtil(); + + for(String phone : resultSendPhonList) { + + resultPhonList.add(mjUtil.addDash(phone)); + + } + model.addAttribute("resultPhonList", resultPhonList); + + + MberManageVO mberManageVO = mjonMsgDataService.selectMberManageInfo(userId); + + model.addAttribute("atSmishingYn", mberManageVO.getAtSmishingYn()); + + //3.사용자 개인단가 정보가 0이 아니면 개인단가 사용, 없으면 시스템 기본 단가 사용 + Float shortPrice = mberManageVO.getShortPrice(); + Float longPrice = mberManageVO.getLongPrice(); + Float picturePrice = mberManageVO.getPicturePrice(); + Float picture2Price = mberManageVO.getPicture2Price(); + Float picture3Price = mberManageVO.getPicture3Price(); + BigDecimal userMoney = new BigDecimal(mberManageVO.getUserMoney()).setScale(2, RoundingMode.HALF_EVEN); + + model.addAttribute("userMoney", userMoney); + + + ////////////////////////////////////////////////////////////////// + + //최근 전송 내역 + MjonMsgDataVO searchVO = new MjonMsgDataVO(); + Calendar cal = Calendar.getInstance(); + Date now = new Date(); + SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd"); + cal.setTime(now); + cal.add(Calendar.DATE, -3); + String chkDate = format.format(cal.getTime()); + searchVO.setUserId(userId); + searchVO.setMyMsgStDt(chkDate); //검색 시작일 저장 - 현재날짜로 부터 3일 이전 날짜로 시작 + model.addAttribute("resultLatestMsgList", mjonMsgDataService.selectLatestMsgList(searchVO)); + + //자주보내는 번호 + model.addAttribute("resultBookMarkMsgList", mjonMsgDataService.selectBookMarkMsgList(searchVO)); + + // 사용자 저으이 + model.addAttribute("sendPrice", kakaoSendUtil.selectSendPriceOfKakaoAtAndSmsAndMms(userId)); + } + + return "web/kakao/msgdata/at/KakaoAlimtalkMsgDataView_tmp"; + } } diff --git a/src/main/java/itn/let/kakao/user/sent/service/KakaoSentDetailVO.java b/src/main/java/itn/let/kakao/user/sent/service/KakaoSentDetailVO.java new file mode 100644 index 00000000..f5cc4dde --- /dev/null +++ b/src/main/java/itn/let/kakao/user/sent/service/KakaoSentDetailVO.java @@ -0,0 +1,51 @@ +package itn.let.kakao.user.sent.service; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class KakaoSentDetailVO extends KakaoSentVO{ + + private static final long serialVersionUID = 1L; + + private String msgGroupId; + private String reqDate; + private String regDate; + private String msgGroupCnt; + private String reserveYn; + private String reserveCYn; + private String canceldate; + private String callFrom; + private String userId; + private String smsTxt; + private String subject; + private String subjectChkYn; + private String msgType; + private String fileCnt; + private String msgKind; + private String eachPrice; + private String filePath1; + private String filePath2; + private String filePath3; + + private String callTo; + private String statusTxt; + private String addrNm; + + private String successPct; + private String failedPct; + private String waitingPct; + + private String statusCd; // 진행상태 코드 + private String divideYn; + private String divideText; + private String totPrice; + private String yellowId; + private String msgNoticetalkTmpKey; + + // FileInfo 리스트 필드 추가 +// private List fileInfos; + + +} diff --git a/src/main/java/itn/let/kakao/user/sent/service/KakaoSentService.java b/src/main/java/itn/let/kakao/user/sent/service/KakaoSentService.java index aa488b38..61308a39 100644 --- a/src/main/java/itn/let/kakao/user/sent/service/KakaoSentService.java +++ b/src/main/java/itn/let/kakao/user/sent/service/KakaoSentService.java @@ -1,6 +1,7 @@ package itn.let.kakao.user.sent.service; import java.util.List; +import java.util.Map; import itn.let.kakao.admin.kakaoAt.service.MjonKakaoATVO; @@ -31,5 +32,11 @@ public interface KakaoSentService { //예약 결과 전체 발송 리스트 불러오기 public List selectReservKakaoSentList(KakaoSentVO kakaoSentVO) throws Exception; + public Map selectKakaoSentCntAll_Advc(KakaoSentVO kakaoSentVO) throws Exception; + + public KakaoSentDetailVO selectKakaoSentDetailView(KakaoSentDetailVO kakaoSentDetailVO) throws Exception; + + //발송 관리 문자발송 내용 상세보기 팝업 + public MjonKakaoATVO selectKakaoSentDetailViewPhoneAjax(MjonKakaoATVO kakaoSentVO) throws Exception; } diff --git a/src/main/java/itn/let/kakao/user/sent/service/KakaoSentVO.java b/src/main/java/itn/let/kakao/user/sent/service/KakaoSentVO.java index d5cf36fa..f600ebae 100644 --- a/src/main/java/itn/let/kakao/user/sent/service/KakaoSentVO.java +++ b/src/main/java/itn/let/kakao/user/sent/service/KakaoSentVO.java @@ -4,7 +4,11 @@ import java.util.Date; import java.util.List; import itn.let.uss.umt.service.UserDefaultVO; +import lombok.Getter; +import lombok.Setter; +@Getter +@Setter public class KakaoSentVO extends UserDefaultVO{ private static final long serialVersionUID = 1L; @@ -90,6 +94,7 @@ public class KakaoSentVO extends UserDefaultVO{ private int successCount; private int waitCount; private int failCount; + private int allCount; private String bizUmid; private int kakaoResendSuccCount; @@ -103,471 +108,11 @@ public class KakaoSentVO extends UserDefaultVO{ private String atDelayCompleteYn; //알림톡 30분 지연 승인/취소 처리 여부 private Date atDelayOrgTime; //알림톡 30분 지연에 대한 원래 시간 (-30분 처리된 시간) - public String getCallToComma() { - return callToComma; - } - public void setCallToComma(String callToComma) { - this.callToComma = callToComma; - } - public String getCallFromComma() { - return callFromComma; - } - public void setCallFromComma(String callFromComma) { - this.callFromComma = callFromComma; - } + private String statusCd; - public String getAtchFiles() { - return atchFiles; - } - public void setAtchFiles(String atchFiles) { - this.atchFiles = atchFiles; - } + private int successPrice; + private int kakaoResendSuccPrice; - public String getMsgId() { - return msgId; - } - public void setMsgId(String msgId) { - this.msgId = msgId; - } - public int getSuccessCnt() { - return successCnt; - } - public void setSuccessCnt(int successCnt) { - this.successCnt = successCnt; - } - public String getMsgTypeName() { - return msgTypeName; - } - public void setMsgTypeName(String msgTypeName) { - this.msgTypeName = msgTypeName; - } - public int getOrderByCode() { - return orderByCode; - } - public void setOrderByCode(int orderByCode) { - this.orderByCode = orderByCode; - } - public String getAtchFileId() { - return atchFileId; - } - public void setAtchFileId(String atchFileId) { - this.atchFileId = atchFileId; - } - public String getFileSn() { - return fileSn; - } - public void setFileSn(String fileSn) { - this.fileSn = fileSn; - } - public String getUserId() { - return userId; - } - public void setUserId(String userId) { - this.userId = userId; - } - public String getAddrNm() { - return addrNm; - } - public void setAddrNm(String addrNm) { - this.addrNm = addrNm; - } - public String getMsgSeq() { - return msgSeq; - } - public void setMsgSeq(String msgSeq) { - this.msgSeq = msgSeq; - } - public String getMsgGroupId() { - return msgGroupId; - } - public void setMsgGroupId(String msgGroupId) { - this.msgGroupId = msgGroupId; - } - public List getMsgGroupIdList() { - return msgGroupIdList; - } - public void setMsgGroupIdList(List msgGroupIdList) { - this.msgGroupIdList = msgGroupIdList; - } - public String getSmsTxt() { - return smsTxt; - } - public void setSmsTxt(String smsTxt) { - this.smsTxt = smsTxt; - } - public String getSubject() { - return subject; - } - public void setSubject(String subject) { - this.subject = subject; - } - public Date getRegdate() { - return regdate; - } - public void setRegdate(Date regdate) { - this.regdate = regdate; - } - public Date getReqdate() { - return reqdate; - } - public void setReqdate(Date reqdate) { - this.reqdate = reqdate; - } - public String getCallFrom() { - return callFrom; - } - public void setCallFrom(String callFrom) { - this.callFrom = callFrom; - } - public String getCallTo() { - return callTo; - } - public void setCallTo(String callTo) { - this.callTo = callTo; - } - public List getCallToList() { - return callToList; - } - public void setCallToList(List callToList) { - this.callToList = callToList; - } - public String getTotPrice() { - return totPrice; - } - public void setTotPrice(String totPrice) { - this.totPrice = totPrice; - } - public String getEachPrice() { - return eachPrice; - } - public void setEachPrice(String eachPrice) { - this.eachPrice = eachPrice; - } - public String getDelFlag() { - return delFlag; - } - public void setDelFlag(String delFlag) { - this.delFlag = delFlag; - } - public String getTotMsgPrice() { - return totMsgPrice; - } - public void setTotMsgPrice(String totMsgPrice) { - this.totMsgPrice = totMsgPrice; - } - public String getRsltCode() { - return rsltCode; - } - public void setRsltCode(String rsltCode) { - this.rsltCode = rsltCode; - } - public String getRsltCode2() { - return rsltCode2; - } - public void setRsltCode2(String rsltCode2) { - this.rsltCode2 = rsltCode2; - } - public String getMsgType() { - return msgType; - } - public void setMsgType(String msgType) { - this.msgType = msgType; - } - public String getMsgGroupCnt() { - return msgGroupCnt; - } - public void setMsgGroupCnt(String msgGroupCnt) { - this.msgGroupCnt = msgGroupCnt; - } - public String getFileCnt() { - return fileCnt; - } - public void setFileCnt(String fileCnt) { - this.fileCnt = fileCnt; - } - public String getTotMsgCnt() { - return totMsgCnt; - } - public void setTotMsgCnt(String totMsgCnt) { - this.totMsgCnt = totMsgCnt; - } - public String getCurState() { - return curState; - } - public void setCurState(String curState) { - this.curState = curState; - } - public String getReserveYn() { - return reserveYn; - } - public void setReserveYn(String reserveYn) { - this.reserveYn = reserveYn; - } - public String getReserveCYn() { - return reserveCYn; - } - public void setReserveCYn(String reserveCYn) { - this.reserveCYn = reserveCYn; - } - public String getFilePath1() { - return filePath1; - } - public void setFilePath1(String filePath1) { - this.filePath1 = filePath1; - } - public String getFilePath2() { - return filePath2; - } - public void setFilePath2(String filePath2) { - this.filePath2 = filePath2; - } - public String getFilePath3() { - return filePath3; - } - public void setFilePath3(String filePath3) { - this.filePath3 = filePath3; - } - public Date getSentDate() { - return sentDate; - } - public void setSentDate(Date sentDate) { - this.sentDate = sentDate; - } - public String getAgentCode() { - return agentCode; - } - public void setAgentCode(String agentCode) { - this.agentCode = agentCode; - } - public String getUserData() { - return userData; - } - public void setUserData(String userData) { - this.userData = userData; - } - public List getUserDataList() { - return userDataList; - } - public void setUserDataList(List userDataList) { - this.userDataList = userDataList; - } - public Date getCancelDate() { - return cancelDate; - } - public void setCancelDate(Date cancelDate) { - this.cancelDate = cancelDate; - } - public String getStartDate() { - return startDate; - } - public void setStartDate(String startDate) { - this.startDate = startDate; - } - public String getEndDate() { - return endDate; - } - public void setEndDate(String endDate) { - this.endDate = endDate; - } - public String getSearchMsgType() { - return searchMsgType; - } - public void setSearchMsgType(String searchMsgType) { - this.searchMsgType = searchMsgType; - } - public String getTabType() { - return tabType; - } - public void setTabType(String tabType) { - this.tabType = tabType; - } - public String getStateType() { - return stateType; - } - public void setStateType(String stateType) { - this.stateType = stateType; - } - public String getListType() { - return listType; - } - public void setListType(String listType) { - this.listType = listType; - } - public String getResultType() { - return resultType; - } - public void setResultType(String resultType) { - this.resultType = resultType; - } - public String getMsgResultCnt() { - return msgResultCnt; - } - public void setMsgResultCnt(String msgResultCnt) { - this.msgResultCnt = msgResultCnt; - } - public String getMsgResultSts() { - return msgResultSts; - } - public void setMsgResultSts(String msgResultSts) { - this.msgResultSts = msgResultSts; - } - public String getAddrGrpNm() { - return addrGrpNm; - } - public void setAddrGrpNm(String addrGrpNm) { - this.addrGrpNm = addrGrpNm; - } - public int getOrderByrsltCode() { - return orderByrsltCode; - } - public void setOrderByrsltCode(int orderByrsltCode) { - this.orderByrsltCode = orderByrsltCode; - } - public String getMsgResult() { - return msgResult; - } - public void setMsgResult(String msgResult) { - this.msgResult = msgResult; - } - public String getNtceBgnde() { - return ntceBgnde; - } - public void setNtceBgnde(String ntceBgnde) { - this.ntceBgnde = ntceBgnde; - } - public String getNtceEndde() { - return ntceEndde; - } - public void setNtceEndde(String ntceEndde) { - this.ntceEndde = ntceEndde; - } - public String getMsgKind() { - return msgKind; - } - public void setMsgKind(String msgKind) { - this.msgKind = msgKind; - } - public String getDelayYn() { - return delayYn; - } - public void setDelayYn(String delayYn) { - this.delayYn = delayYn; - } - public String getDelayCompleteYn() { - return delayCompleteYn; - } - public void setDelayCompleteYn(String delayCompleteYn) { - this.delayCompleteYn = delayCompleteYn; - } - public String getBizKakaoResendYn() { - return bizKakaoResendYn; - } - public void setBizKakaoResendYn(String bizKakaoResendYn) { - this.bizKakaoResendYn = bizKakaoResendYn; - } - public String getBizKakaoResendType() { - return bizKakaoResendType; - } - public void setBizKakaoResendType(String bizKakaoResendType) { - this.bizKakaoResendType = bizKakaoResendType; - } - public String getBizKakaoResendData() { - return bizKakaoResendData; - } - public void setBizKakaoResendData(String bizKakaoResendData) { - this.bizKakaoResendData = bizKakaoResendData; - } - public String getCallStatus() { - return callStatus; - } - public void setCallStatus(String callStatus) { - this.callStatus = callStatus; - } - public String getBizKakaoAtPrice() { - return bizKakaoAtPrice; - } - public void setBizKakaoAtPrice(String bizKakaoAtPrice) { - this.bizKakaoAtPrice = bizKakaoAtPrice; - } - public String getBizKakaoFtPrice() { - return bizKakaoFtPrice; - } - public void setBizKakaoFtPrice(String bizKakaoFtPrice) { - this.bizKakaoFtPrice = bizKakaoFtPrice; - } - public String getBizSmsPrice() { - return bizSmsPrice; - } - public void setBizSmsPrice(String bizSmsPrice) { - this.bizSmsPrice = bizSmsPrice; - } - public String getDiffMin() { - return diffMin; - } - public void setDiffMin(String diffMin) { - this.diffMin = diffMin; - } - public String getBizMmsPrice() { - return bizMmsPrice; - } - public void setBizMmsPrice(String bizMmsPrice) { - this.bizMmsPrice = bizMmsPrice; - } - public int getSuccessCount() { - return successCount; - } - public void setSuccessCount(int successCount) { - this.successCount = successCount; - } - public String getBizUmid() { - return bizUmid; - } - public void setBizUmid(String bizUmid) { - this.bizUmid = bizUmid; - } - public int getKakaoResendSuccCount() { - return kakaoResendSuccCount; - } - public void setKakaoResendSuccCount(int kakaoResendSuccCount) { - this.kakaoResendSuccCount = kakaoResendSuccCount; - } - public int getKakaoResendFailCount() { - return kakaoResendFailCount; - } - public void setKakaoResendFailCount(int kakaoResendFailCount) { - this.kakaoResendFailCount = kakaoResendFailCount; - } - public int getWaitCount() { - return waitCount; - } - public void setWaitCount(int waitCount) { - this.waitCount = waitCount; - } - public int getFailCount() { - return failCount; - } - public void setFailCount(int failCount) { - this.failCount = failCount; - } - public String getAtDelayYn() { - return atDelayYn; - } - public void setAtDelayYn(String atDelayYn) { - this.atDelayYn = atDelayYn; - } - public String getAtDelayCompleteYn() { - return atDelayCompleteYn; - } - public void setAtDelayCompleteYn(String atDelayCompleteYn) { - this.atDelayCompleteYn = atDelayCompleteYn; - } - public Date getAtDelayOrgTime() { - return atDelayOrgTime; - } - public void setAtDelayOrgTime(Date atDelayOrgTime) { - this.atDelayOrgTime = atDelayOrgTime; - } - - + private String divideYn; } diff --git a/src/main/java/itn/let/kakao/user/sent/service/impl/KakaoSentDAO.java b/src/main/java/itn/let/kakao/user/sent/service/impl/KakaoSentDAO.java index 969bdb6b..d2a47e18 100644 --- a/src/main/java/itn/let/kakao/user/sent/service/impl/KakaoSentDAO.java +++ b/src/main/java/itn/let/kakao/user/sent/service/impl/KakaoSentDAO.java @@ -7,6 +7,7 @@ import org.springframework.stereotype.Repository; import egovframework.rte.psl.dataaccess.EgovAbstractDAO; import itn.let.kakao.admin.kakaoAt.service.MjonKakaoATVO; +import itn.let.kakao.user.sent.service.KakaoSentDetailVO; import itn.let.kakao.user.sent.service.KakaoSentVO; @Repository("KakaoSentDAO") @@ -45,6 +46,10 @@ public class KakaoSentDAO extends EgovAbstractDAO { public List selectAllKakaoSentList(KakaoSentVO kakaoSentVO) throws Exception{ return (List) list("KakaoSentDAO.selectAllKakaoSentList",kakaoSentVO); } + @SuppressWarnings("unchecked") + public List selectAllKakaoSentList_advc(KakaoSentVO kakaoSentVO) throws Exception{ + return (List) list("KakaoSentDAO.selectAllKakaoSentList_advc",kakaoSentVO); + } @SuppressWarnings("unchecked") public List selectAllPrivateKakaoSentList(KakaoSentVO KakaoSentVO) throws Exception{ @@ -90,4 +95,39 @@ public class KakaoSentDAO extends EgovAbstractDAO { return (List) list("KakaoSentDAO.selectReservKakaoSentList",kakaoSentVO); } + @SuppressWarnings("unchecked") + public List selectKakaoSentCntAll_advc(KakaoSentVO kakaoSentVO) throws Exception{ + + List result = new ArrayList(); + + try { + + result = (List) list("KakaoSentDAO.selectKakaoSentCntAll_advc", kakaoSentVO); + + } catch (Exception e) { + + throw new Exception("++++++++++ ErrorService DAO :: " + e); + + } + + return result; + } + + public KakaoSentVO selectKakaoSentCntEachCnt_advc(KakaoSentVO kakaoSentVO) throws Exception{ + return (KakaoSentVO) select("KakaoSentDAO.selectKakaoSentCntEachCnt_advc",kakaoSentVO); + } + + public KakaoSentDetailVO selectKakaoSentDetailView(KakaoSentDetailVO kakaoSentDetailVO) throws Exception{ + return (KakaoSentDetailVO) select("KakaoSentDAO.selectKakaoSentDetailView", kakaoSentDetailVO); + } + + public List findByReqDateWhereMsgGroupId(String msgGroupId) { + return (List) list("KakaoSentDAO.findByReqDateWhereMsgGroupId", msgGroupId); + } + + //발송 관리 문자발송 내용 상세보기 팝업[그룹] + public MjonKakaoATVO selectKakaoSentDetailViewPhoneAjax(MjonKakaoATVO KakaoSentVO) throws Exception{ + return (MjonKakaoATVO) select("KakaoSentDAO.selectKakaoSentDetailViewPhoneAjax", KakaoSentVO); + } + } diff --git a/src/main/java/itn/let/kakao/user/sent/service/impl/KakaoSentServiceImpl.java b/src/main/java/itn/let/kakao/user/sent/service/impl/KakaoSentServiceImpl.java index 3bbcf29e..0a622283 100644 --- a/src/main/java/itn/let/kakao/user/sent/service/impl/KakaoSentServiceImpl.java +++ b/src/main/java/itn/let/kakao/user/sent/service/impl/KakaoSentServiceImpl.java @@ -1,7 +1,15 @@ package itn.let.kakao.user.sent.service.impl; +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; import java.util.ArrayList; +import java.util.HashMap; +import java.util.LinkedHashMap; import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; import javax.annotation.Resource; @@ -10,6 +18,7 @@ import org.springframework.stereotype.Service; import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl; import egovframework.rte.fdl.idgnr.EgovIdGnrService; import itn.let.kakao.admin.kakaoAt.service.MjonKakaoATVO; +import itn.let.kakao.user.sent.service.KakaoSentDetailVO; import itn.let.kakao.user.sent.service.KakaoSentService; import itn.let.kakao.user.sent.service.KakaoSentVO; @@ -29,7 +38,8 @@ public class KakaoSentServiceImpl extends EgovAbstractServiceImpl implements Ka try { - result = kakaoSentDAO.selectKakaoSentCntAll(kakaoSentVO); +// result = kakaoSentDAO.selectKakaoSentCntAll(kakaoSentVO); + result = kakaoSentDAO.selectKakaoSentCntAll_advc(kakaoSentVO); } catch (Exception e) { throw new Exception("++++++++++ ErrorService Impl :: " + e); @@ -38,30 +48,83 @@ public class KakaoSentServiceImpl extends EgovAbstractServiceImpl implements Ka return result; } + public Map selectKakaoSentCntAll_Advc(KakaoSentVO kakaoSentVO) throws Exception{ + + List result = new ArrayList(); + Map returnMap = new HashMap(); + + try { + +// result = kakaoSentDAO.selectKakaoSentCntAll(kakaoSentVO); + result = kakaoSentDAO.selectKakaoSentCntAll_advc(kakaoSentVO); + + + KakaoSentVO allVO = new KakaoSentVO(); + KakaoSentVO atVO = new KakaoSentVO(); + KakaoSentVO ftVO = new KakaoSentVO(); + + result.stream() + .forEach(t -> + { + Integer rsultCnt = Integer.parseInt(t.getMsgResultCnt()); + + if(Integer.parseInt(t.getFilePath1()) > 0) { + if("S".equals(t.getMsgResultSts())) { + atVO.setSuccessCount(atVO.getSuccessCount()+rsultCnt); + }else if("W".equals(t.getMsgResultSts())) { + atVO.setWaitCount(atVO.getWaitCount()+rsultCnt); + }else { + atVO.setFailCount(atVO.getFailCount()+rsultCnt); + } + + atVO.setAllCount(atVO.getAllCount()+rsultCnt); + allVO.setAllCount(allVO.getAllCount()+rsultCnt); + + }else { + if("S".equals(t.getMsgResultSts())) { + ftVO.setSuccessCount(ftVO.getSuccessCount()+rsultCnt); + }else if("W".equals(t.getMsgResultSts())) { + ftVO.setWaitCount(ftVO.getWaitCount()+rsultCnt); + }else { + ftVO.setFailCount(ftVO.getFailCount()+rsultCnt); + } + + ftVO.setAllCount(ftVO.getAllCount()+rsultCnt); + allVO.setAllCount(allVO.getAllCount()+rsultCnt); + + } + }); + + allVO.setSuccessCount(atVO.getSuccessCount()+ftVO.getSuccessCount()); + allVO.setWaitCount(atVO.getWaitCount()+ftVO.getWaitCount()); + allVO.setFailCount(atVO.getFailCount()+ftVO.getFailCount()); + + //전체 성공건, 실패건 불러오기 + returnMap.put("allCnt", allVO); + + //알림톡 성공건, 실패건 불러오기 + returnMap.put("atCnt", atVO); + + //친구톡 성공건, 실패건 불러오기 + returnMap.put("ftCnt", ftVO); + + + } catch (Exception e) { + throw new Exception("++++++++++ ErrorService Impl :: " + e); + } + + return returnMap; + } + //발송 관리 전체 발송 리스트 불러오기 public List selectAllKakaoSentList(KakaoSentVO kakaoSentVO) throws Exception{ List resultList = new ArrayList(); - String listType = kakaoSentVO.getListType(); - String stateType = kakaoSentVO.getStateType(); + resultList = kakaoSentDAO.selectAllKakaoSentList_advc(kakaoSentVO); - if(stateType.equals("fail")) { - - listType = "privateList"; - - } - - System.out.println("listType : "+ listType); - if(listType.equals("groupList")) {//전송건별 리스트 불러오기 - - resultList = kakaoSentDAO.selectAllKakaoSentList(kakaoSentVO); - - }else {//개인별 리스트 불러오기 - - resultList = kakaoSentDAO.selectAllPrivateKakaoSentList(kakaoSentVO); - - } + //totPrice 계산 및 상태코드 set + resultList = resultList.stream().map(t -> setPriceNCode(t)).collect(Collectors.toList()); return resultList; } @@ -149,5 +212,229 @@ public class KakaoSentServiceImpl extends EgovAbstractServiceImpl implements Ka return kakaoSentDAO.selectReservKakaoSentList(kakaoSentVO); } + + @Override + public KakaoSentDetailVO selectKakaoSentDetailView(KakaoSentDetailVO kakaoSentDetailVO) throws Exception{ + + KakaoSentDetailVO resultVO = kakaoSentDAO.selectKakaoSentDetailView(kakaoSentDetailVO); + + int total = Integer.parseInt(resultVO.getMsgGroupCnt()); // 전체 건수 + int success = 0; // 성공 건수 + int waiting = 0; // 대기 건수 + int failed = 0; // 실패 건수 + if("Y".equals(resultVO.getBizKakaoResendYn())) { + success = resultVO.getSuccessCount() + resultVO.getKakaoResendSuccCount(); + failed = resultVO.getKakaoResendFailCount(); + }else { + success = resultVO.getSuccessCount(); + failed = resultVO.getFailCount(); + } + waiting = resultVO.getWaitCount(); // 대기 건수 + + String successPct = total > 0 ? String.format("%.1f%%", (success / (double) total) * 100) : "0.0%"; + String waitingPct = total > 0 ? String.format("%.1f%%", (waiting / (double) total) * 100) : "0.0%"; + String failedPct = total > 0 ? String.format("%.1f%%", (failed / (double) total) * 100) : "0.0%"; + + resultVO.setSuccessPct(successPct); + resultVO.setFailedPct(waitingPct); + resultVO.setWaitingPct(failedPct); + + resultVO.setTotPrice(this.priceProc(resultVO.getSuccessPrice(), resultVO.getKakaoResendSuccPrice())); + + resultVO = this.codeProc(resultVO); + + // 분할문자인 경우 + if("Y".equals(resultVO.getDivideYn())) { + String divideText = calculateBatchInfo(resultVO); + resultVO.setDivideText(divideText); + } + + return resultVO; + } + + //발송 관리 문자발송 내용 상세보기 팝업 => 문자내용(MJ_MSG_DATA) + public MjonKakaoATVO selectKakaoSentDetailViewPhoneAjax(MjonKakaoATVO kakaoSentVO) throws Exception{ + + return kakaoSentDAO.selectKakaoSentDetailViewPhoneAjax(kakaoSentVO); + } + + + // 공통코드 ITN057에 대한 코드화 진행 + /* + * CODE_ID CODE CODE_NM CODE_DC + * ITN057 01 진행중 진행중 + * ITN057 02 완료 완료출해야함 + * ITN057 03 예약대기 예약대기(발송전) 버튼으로 노출해야함 + * ITN057 04 - 예약취소 ( - 으로 노출 ) + * */ + private KakaoSentVO setPriceNCode(KakaoSentVO result) { + + //성공 건수 세팅 + KakaoSentVO eachCnt = new KakaoSentVO(); + eachCnt.setMsgGroupId(result.getMsgGroupId()); + try { + eachCnt = kakaoSentDAO.selectKakaoSentCntEachCnt_advc(eachCnt); + } catch (Exception e) { + System.out.println("setPriceNCode error!!"); + } + + result.setSuccessCount(eachCnt.getSuccessCount()); + result.setWaitCount(eachCnt.getWaitCount()); + result.setFailCount(eachCnt.getFailCount()); + result.setKakaoResendSuccCount(eachCnt.getKakaoResendSuccCount()); + result.setKakaoResendFailCount(eachCnt.getKakaoResendFailCount()); + + + //완료상태 시작 + result = this.codeProc(result); + + //완료상태 끝 + //======================================================= + + //총금액 시작 + result.setTotPrice(this.priceProc(eachCnt.getSuccessPrice(), eachCnt.getKakaoResendSuccPrice())); + + + return result; + + } + + private String priceProc(int successPrice, int kakaoResendSuccPrice) { + + String totPrice = "-"; + + //총금액 시작 + //======================================================= + // TotPrice : 성공건수에 대한 금액 곱하기 + BigDecimal atPrice = new BigDecimal(successPrice); + BigDecimal kakaoResendPrice = new BigDecimal(kakaoResendSuccPrice); + BigDecimal totalPrice = atPrice.add(kakaoResendPrice); + // 소수점 한 자리로 설정 (반올림)// totalPrice 값을 소수점 한 자리까지 반올림하여 roundedTotalPrice에 저장 + // RoundingMode.HALF_UP: 반올림 방식으로, 소수점 기준 5 이상이면 올림, 그렇지 않으면 내림 + BigDecimal roundedTotalPrice = totalPrice.setScale(1, RoundingMode.HALF_UP); + + // roundedTotalPrice가 0인지 확인 + // BigDecimal.compareTo(BigDecimal.ZERO)는 값을 비교하는 메서드 + // 결과: + // - 반환 값이 0이면 두 값이 같음 + // - 반환 값이 음수이면 roundedTotalPrice가 0보다 작음 + // - 반환 값이 양수이면 roundedTotalPrice가 0보다 큼 + if (roundedTotalPrice.compareTo(BigDecimal.ZERO) == 0) { + // roundedTotalPrice 값이 0이면, "-" 문자열을 totPrice에 설정 + totPrice = "-"; + } else { + // roundedTotalPrice 값이 0이 아닌 경우 + // 반올림된 BigDecimal 값을 toPlainString()을 사용하여 문자열로 변환 후 totPrice에 설정 + // toPlainString(): 지수 표기법 없이 일반적인 문자열 형태로 반환 + totPrice = roundedTotalPrice.toPlainString(); + } + //총금액 끝 + //======================================================= + + + return totPrice; + } + + private KakaoSentVO codeProc(KakaoSentVO result) { + //======================================================= + String returnCode; + if ("Y".equals(result.getReserveCYn())) { + returnCode = "04"; // 예약취소 코드 + } else if ( + "Y".equals(result.getReserveYn()) + && "N".equals(result.getReserveCYn()) + && Integer.valueOf(result.getMsgGroupCnt()).equals(result.getWaitCount()) + && Integer.valueOf(result.getDiffMin()) < -5 // 예약 시간이 5분 이상인 것들만 + ) { + returnCode = "03"; // 예약대기 코드 ( 예약취소 버튼 노출 ) + } else if ( + //대체문자 발송 Y일때 + ("Y".equals(result.getBizKakaoResendYn()) + //알림톡 발송 총건수 == 알림톡 발송 성공건 + 알림톡 발송 실패건 + && Integer.valueOf(result.getMsgGroupCnt()).equals(result.getSuccessCount() + result.getFailCount()) + //알림톡 발송 실패건 == 대체문자 발송 성공건 + 대체문자 발송 실패건 + && result.getFailCount() == (result.getKakaoResendSuccCount() + result.getKakaoResendFailCount()) + ) + || + //대체문자 발송 N일때 + ("N".equals(result.getBizKakaoResendYn()) + //알림톡 발송 총건수 == 알림톡 발송 성공건 + 알림톡 발송 실패건 + && Integer.valueOf(result.getMsgGroupCnt()).equals(result.getSuccessCount() + result.getFailCount())) + ) { + returnCode = "02"; // 완료 코드 + } else { + returnCode = "01"; // 진행중 코드 + } + + result.setStatusCd(returnCode); + + return result; + } + private KakaoSentDetailVO codeProc(KakaoSentDetailVO result) { + //======================================================= + String returnCode; + if ("Y".equals(result.getReserveCYn())) { + returnCode = "04"; // 예약취소 코드 + } else if ( + "Y".equals(result.getReserveYn()) + && "N".equals(result.getReserveCYn()) + && Integer.valueOf(result.getMsgGroupCnt()).equals(result.getWaitCount()) + && Integer.valueOf(result.getDiffMin()) < -5 // 예약 시간이 5분 이상인 것들만 + ) { + returnCode = "03"; // 예약대기 코드 ( 예약취소 버튼 노출 ) + } else if ( + //대체문자 발송 Y일때 + ("Y".equals(result.getBizKakaoResendYn()) + //알림톡 발송 총건수 == 알림톡 발송 성공건 + 알림톡 발송 실패건 + && Integer.valueOf(result.getMsgGroupCnt()).equals(result.getSuccessCount() + result.getFailCount()) + //알림톡 발송 실패건 == 대체문자 발송 성공건 + 대체문자 발송 실패건 + && result.getFailCount() == (result.getKakaoResendSuccCount() + result.getKakaoResendFailCount()) + ) + || + //대체문자 발송 N일때 + ("N".equals(result.getBizKakaoResendYn()) + //알림톡 발송 총건수 == 알림톡 발송 성공건 + 알림톡 발송 실패건 + && Integer.valueOf(result.getMsgGroupCnt()).equals(result.getSuccessCount() + result.getFailCount())) + ) { + returnCode = "02"; // 완료 코드 + } else { + returnCode = "01"; // 진행중 코드 + } + + result.setStatusCd(returnCode); + + return result; + } + + private String calculateBatchInfo(KakaoSentDetailVO resultVO) { + + String msgGroupId = resultVO.getMsgGroupId(); + + + List requestTimes = kakaoSentDAO.findByReqDateWhereMsgGroupId(msgGroupId); + + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.S"); + Map timeCountMap = new LinkedHashMap<>(); + + // REQ_DATE 그룹화 (같은 시간대 몇 건인지) + for (String timeStr : requestTimes) { + LocalDateTime time = LocalDateTime.parse(timeStr, formatter); + timeCountMap.put(time, timeCountMap.getOrDefault(time, 0) + 1); + } + + // 가장 첫 번째 시간 & 간격 계산 + List sortedKeys = new ArrayList<>(timeCountMap.keySet()); + if (sortedKeys.size() < 2) { + return "데이터 부족 (분석 불가)"; + } + + int batchSize = timeCountMap.get(sortedKeys.get(0)); // 한 번에 보낸 건수 + int intervalMinutes = sortedKeys.get(1).getMinute() - sortedKeys.get(0).getMinute(); // 시간 간격 계산 +// int batchCount = sortedKeys.size(); // 총 몇 번 보냈는지 + +// return String.format("%,d건씩 %d분 간격 (%d회 발송)", batchSize, intervalMinutes, batchCount); + return String.format("%,d건씩 %d분 간격", batchSize, intervalMinutes); + + } } diff --git a/src/main/java/itn/let/kakao/user/sent/web/KakaoSentController.java b/src/main/java/itn/let/kakao/user/sent/web/KakaoSentController.java index ec57539a..39dddf44 100644 --- a/src/main/java/itn/let/kakao/user/sent/web/KakaoSentController.java +++ b/src/main/java/itn/let/kakao/user/sent/web/KakaoSentController.java @@ -8,6 +8,7 @@ import java.util.Calendar; import java.util.Date; import java.util.List; import java.util.Locale; +import java.util.Map; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; @@ -26,6 +27,8 @@ import org.json.simple.parser.JSONParser; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Controller; import org.springframework.ui.ModelMap; import org.springframework.web.bind.annotation.ModelAttribute; @@ -43,6 +46,7 @@ import itn.let.kakao.kakaoComm.KakaoButtonVO; import itn.let.kakao.kakaoComm.KakaoReturnVO; import itn.let.kakao.kakaoComm.KakaoVO; import itn.let.kakao.kakaoComm.kakaoApi.KakaoApiTemplate; +import itn.let.kakao.user.sent.service.KakaoSentDetailVO; import itn.let.kakao.user.sent.service.KakaoSentService; import itn.let.kakao.user.sent.service.KakaoSentVO; @@ -82,26 +86,26 @@ public class KakaoSentController { //전체 발송 건수 통계 불러오기 kakaoSentVO.setMsgType(""); - List totalMsgCnt = kakaoSentService.selectKakaoSentCntAll(kakaoSentVO); - model.addAttribute("totalMsgCnt", totalMsgCnt); - - List atCnt = new ArrayList(); - List ftCnt = new ArrayList(); - - - totalMsgCnt.forEach(t->{ - if (Integer.parseInt(t.getFilePath1())>0) { - atCnt.add(t); - } else if (Integer.parseInt(t.getFilePath2())>0) { - ftCnt.add(t); - } - }); - - //알림톡 성공건, 실패건 불러오기 - model.addAttribute("atCnt", atCnt); - - //친구톡 성공건, 실패건 불러오기 - model.addAttribute("ftCnt", ftCnt); +// List totalMsgCnt = kakaoSentService.selectKakaoSentCntAll(kakaoSentVO); +// model.addAttribute("totalMsgCnt", totalMsgCnt); +// +// List atCnt = new ArrayList(); +// List ftCnt = new ArrayList(); +// +// +// totalMsgCnt.forEach(t->{ +// if (Integer.parseInt(t.getFilePath1())>0) { +// atCnt.add(t); +// } else if (Integer.parseInt(t.getFilePath2())>0) { +// ftCnt.add(t); +// } +// }); +// +// //알림톡 성공건, 실패건 불러오기 +// model.addAttribute("atCnt", atCnt); +// +// //친구톡 성공건, 실패건 불러오기 +// model.addAttribute("ftCnt", ftCnt); // 검색 리스트 불러오기 if(kakaoSentVO.getPageUnit() != 10) kakaoSentVO.setPageUnit(kakaoSentVO.getPageUnit()); @@ -193,7 +197,7 @@ public class KakaoSentController { List resultAllSentList = kakaoSentService.selectAllKakaoSentList(kakaoSentVO); System.out.println("??"); model.addAttribute("resultAllSentList", resultAllSentList); - model.addAttribute("resultAllSentCnt", resultAllSentList.size()); +// model.addAttribute("resultAllSentCnt", resultAllSentList.size()); model.addAttribute("searchKeyword", kakaoSentVO.getSearchKeyword()); paginationInfo.setTotalRecordCount( resultAllSentList.size()> 0 ? (Integer.parseInt((resultAllSentList.get(0)).getTotMsgCnt())) : 0); @@ -984,5 +988,105 @@ public class KakaoSentController { } + @RequestMapping(value= {"/web/kakao/sent/selectKakaoSentViewTotalSumAjax.do"}) + public ResponseEntity selectKakaoSentViewTotalSumAjax( + KakaoSentVO kakaoSentVO + ) throws Exception{ + //로그인 권한정보 불러오기 + LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; + String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); + if(loginVO == null) { +// return "redirect:/web/user/login/login.do"; + } + + kakaoSentVO.setUserId(userId); + + Map returnMap = kakaoSentService.selectKakaoSentCntAll_Advc(kakaoSentVO); + + return new ResponseEntity<>(returnMap, HttpStatus.OK); + } + /** + * 발송관리 상세화면 + * @param searchVO + * @param model + * @return "/web/kakao/sent/selectKakaoSentDetailView.do" + * @throws Exception + */ + @RequestMapping(value= {"/web/kakao/sent/selectKakaoSentDetailView.do"}) + public String selectKakaoSentDetailView(@ModelAttribute("searchVO") KakaoSentDetailVO kakaoSentDetailVO, + RedirectAttributes redirectAttributes, ModelMap model) throws Exception{ + //로그인 권한정보 불러오기 + LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; + String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); + if(loginVO == null) { + return "redirect:/web/user/login/login.do"; + } + + kakaoSentDetailVO.setUserId(userId); + + model.addAttribute("result", kakaoSentService.selectKakaoSentDetailView(kakaoSentDetailVO)); + + return "web/kakao/sent/KakaoSentDetailView"; + } + + + /** + * @methodName : selectMsgSentDetailDataAjax + * @author : 이호영 + * @date : 2023.03.06 + * @description : 알림톡 전송 - 내용 상세 팝업 [전송건별] + * @param mjonKakaoATVO + * @param model + * @return + * @throws Exception + */ + @RequestMapping(value= {"/web/kakao/sent/selectKakaoSentDetailViewPhoneAjax.do"}) + public String selectKakaoSentDetailViewPhoneAjax(@ModelAttribute("searchVO") MjonKakaoATVO mjonKakaoATVO, ModelMap model) throws Exception{ + + //로그인 권한정보 불러오기 + LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; + String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); + mjonKakaoATVO.setUserId(userId); + + + + //발송 관리 문자발송 내용 상세보기 팝업 => 문자내용(MJ_MSG_DATA) + MjonKakaoATVO mjonKakaoATResultVO = kakaoSentService.selectKakaoSentDetailDataAjax(mjonKakaoATVO); + // 대체문자 엔터키 치환 + mjonKakaoATResultVO.setSmsTxt(StringUtil2.replaceBR(mjonKakaoATResultVO.getSmsTxt())); + model.addAttribute("resultMsgDetail", mjonKakaoATResultVO); + + String msgType = mjonKakaoATResultVO.getMsgType(); + + if(msgType.equals("8")) {//카카오 알림톡인 경우 상세정보 처리 + + // 템플릿 api 가져오기 + KakaoVO kakaoVO = new KakaoVO(); + kakaoVO.setSenderKey(mjonKakaoATResultVO.getMsgNoticetalkSenderKey()); + kakaoVO.setTemplateCode(mjonKakaoATResultVO.getMsgNoticetalkTmpKey()); + + KakaoReturnVO kakaoTemplateInfo =kakaoApiTemplate.selectKakaoApiTemplateDetail(kakaoVO); + + model.addAttribute("kakaoTemplateInfo", kakaoTemplateInfo); + // //템플릿 api 가져오기 + + }else if(msgType.equals("9")) {//카카오 친구톡인 경우 상세정보 처리 + + //String smsTxt = mjonKakaoATResultVO.getSmsTxt(); + + KakaoReturnVO kakaoTemplateInfo = getKakaoFTSendTemplateInfo(mjonKakaoATResultVO); + //kakaoTemplateInfo.setTemplateContent(smsTxt); + + model.addAttribute("kakaoTemplateInfo", kakaoTemplateInfo); + + }else { + + model.addAttribute("kakaoTemplateInfo", ""); + + } + + model.addAttribute("msgType", msgType); + return "web/kakao/sent/KakaoSentDetailPopAjax"; + } } diff --git a/src/main/resources/egovframework/sqlmap/let/mjo/kakao/KakaoSent_SQL_Mysql.xml b/src/main/resources/egovframework/sqlmap/let/mjo/kakao/KakaoSent_SQL_Mysql.xml index 723ae746..4223f1d2 100644 --- a/src/main/resources/egovframework/sqlmap/let/mjo/kakao/KakaoSent_SQL_Mysql.xml +++ b/src/main/resources/egovframework/sqlmap/let/mjo/kakao/KakaoSent_SQL_Mysql.xml @@ -4,11 +4,13 @@ ========= ======= ================================================= 2023.02.17 안주영 --> - + + + @@ -1350,4 +1352,559 @@ ) M2 + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/resources/egovframework/sqlmap/let/msg/MjonMsgSent_SQL_mysql.xml b/src/main/resources/egovframework/sqlmap/let/msg/MjonMsgSent_SQL_mysql.xml index 49205e36..dd0d98b6 100644 --- a/src/main/resources/egovframework/sqlmap/let/msg/MjonMsgSent_SQL_mysql.xml +++ b/src/main/resources/egovframework/sqlmap/let/msg/MjonMsgSent_SQL_mysql.xml @@ -485,6 +485,9 @@ ]]> + + AND B.MSG_TYPE in ('4', '6') + = DATE_FORMAT(#searchStartDate#, '%Y-%m-%d') diff --git a/src/main/webapp/WEB-INF/jsp/web/kakao/msgdata/at/KakaoAlimtalkMsgDataView.jsp b/src/main/webapp/WEB-INF/jsp/web/kakao/msgdata/at/KakaoAlimtalkMsgDataView.jsp index 391e7a03..4fb0fd35 100644 --- a/src/main/webapp/WEB-INF/jsp/web/kakao/msgdata/at/KakaoAlimtalkMsgDataView.jsp +++ b/src/main/webapp/WEB-INF/jsp/web/kakao/msgdata/at/KakaoAlimtalkMsgDataView.jsp @@ -1076,6 +1076,62 @@ function checkNumber(event) { return true; } +//재전송 스크립트 수정 +$(window).on('load', function() { + if("${msgResendAllFlag eq 'Y'}") { + // 채널 ID 및 템플릿 선택 코드는 유지 + $("#selectKakaoProfileList option").filter(function() { + return $(this).text() === '${kakaoVO.msgResendAllYellowId}'; + }).prop('selected', true).parent().trigger("click"); + + // 템플릿 선택 + $("#selectTemplateList option").remove(); + selectTemplateList(); + $("#selectTemplateList").val("${kakaoVO.msgResendAllTmpKey}"); + selectTemplateInfo("${kakaoVO.msgResendAllTmpKey}"); + fn_viewDataInit02(); + priceInit(); + + try { + // JSON 파싱 + var resendListObj = JSON.parse('${resendListJson}'); + var listCnt = resendListObj.length; + + // 중복 제거 - Set 사용 + var uniquePhones = new Set(); + var uniqueResendList = []; + + // 중복 제거 로직 + for(var i = 0; i < resendListObj.length; i++) { + var phone = removeDash(resendListObj[i].callTo); + if(!uniquePhones.has(phone)) { + uniquePhones.add(phone); + uniqueResendList.push(resendListObj[i]); + } + } + + + // 중복 제거된 데이터로 처리 + for(var i = 0; i < uniqueResendList.length; i++) { + var phoneNumber = removeDash(uniqueResendList[i].callTo); + + // callTo 입력 필드에 값 설정 후 번호추가 버튼 클릭 + $("#callTo").val(phoneNumber); + $(".addCallToF").trigger("click"); + + } + + // 총 건수 확인 + setTimeout(function() { + updateTotCnt(); + }, 500); + + } catch(e) { + console.error("재전송 데이터 처리 오류:", e); + } + } +}); +
diff --git a/src/main/webapp/WEB-INF/jsp/web/kakao/msgdata/at/KakaoAlimtalkMsgDataView_tmp.jsp b/src/main/webapp/WEB-INF/jsp/web/kakao/msgdata/at/KakaoAlimtalkMsgDataView_tmp.jsp new file mode 100644 index 00000000..b6d64ba6 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/web/kakao/msgdata/at/KakaoAlimtalkMsgDataView_tmp.jsp @@ -0,0 +1,219 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> +<%@ page import="itn.com.cmm.LoginVO" %> + + + + + + + + + + + +
+
+
+
Loading
+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+ + <%@include file="/WEB-INF/jsp/web/kakao/include/KaKaoAlimtalkTopMenuTap.jsp" %> + + +
+
+
+
+
+
+
+
    +
  • + +
  • +
  • + +
  • +
+
+
+ + + +
+
+
+
+ 날짜 : +
+ +
+ +
+ + + +
+
+
+ + + + + + +
+
+
+
+
+
+
+
+
+ \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/jsp/web/kakao/sent/KakaoSentAllListAjax.jsp b/src/main/webapp/WEB-INF/jsp/web/kakao/sent/KakaoSentAllListAjax.jsp index 38fbb9f0..10115704 100644 --- a/src/main/webapp/WEB-INF/jsp/web/kakao/sent/KakaoSentAllListAjax.jsp +++ b/src/main/webapp/WEB-INF/jsp/web/kakao/sent/KakaoSentAllListAjax.jsp @@ -3,6 +3,7 @@ <%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> +<%@ taglib prefix="ec" uri="/WEB-INF/tld/ecnet_tld.tld"%> <%@ page import="itn.com.cmm.LoginVO" %> @@ -48,102 +49,145 @@ $(document).ready(function(){ } }); - - if($("#tdType").val() == "groupList" || $("#tdType").val() == ""){ - $("#privateListTable").hide(); - $("#groupListTable").show(); - }else{ - $("#privateListTable").show(); - $("#groupListTable").hide(); - } }); +function fnReservCancel(msgGroupId){ + + var form = document.resCancelForm; + var loginVO = '${LoginVO}'; + + form.msgGroupId.value = msgGroupId; + + if(loginVO == "" || loginVO == null){ + + alert("로그인 후 이용이 가능합니다."); + return false; + + } + + var data = new FormData(form); + url = "/web/mjon/reservmsg/deleteReservMsgCancelDataAjax.do"; + + if(confirm("정말 예약을 취소하시겠습니까?")){ + + $.ajax({ + type: "POST", + url: url, + data: data, + dataType:'json', + async: false, + processData: false, + contentType: false, + cache: false, + success: function (returnData, status) { + if(status == 'success'){ + if("fail"==returnData.result){ + + alert(returnData.message); + return false; + } + + var smsCnt = returnData.resultSts; + + alert("예약 발송이 정상적으로 취소 되었습니다."); + + linkPage(1); + + } else if(status== 'fail'){ + alert(returnData.message); + } + }, + error: function (e) { alert("예약 취소에 실패하였습니다."); console.log("ERROR : ", e); } + }); + + } + +} + +function fn_sentDetailView(msgGroupId) { + // msgGroupId 값을 form에 설정 + $("#searchForm #msgGroupId").val(msgGroupId); + + // form을 해당 URL로 제출 + $("#searchForm").attr("action", "/web/kakao/sent/selectKakaoSentDetailView.do"); + $("#searchForm").submit(); +} + -
- -

-
- - + - -
-
- -
+ +
+
+ +
- - - - - - - + - + - <%-- --%> + + + + + + + - - - - - - - + - - - - - + + + + + + + + + + + + - - - - - + - + + + + + + - - - - - - - - - - <%-- --%> - - - - - - - <%----%> - +
+ - 발송일시 + 발송일시
- 형태 + 형태
- +
내용 - 받는사람 -
- -
-
- 발신번호 -
- -
-
- 발송건수 + 내용발송건수
카카오톡 결과건수대체문자 결과건수대기카카오톡결과대체문자결과금액(원)진행상황
성공실패성공실패
+ - disabled> + disabled> + @@ -165,240 +209,89 @@ $(document).ready(function(){ -

- 알림톡 - 친구톡 -

+
+ 알림톡 + 친구톡 -<%-- --%> - + +
+ + 예약 + + + 분할 + + + + + +
+
+ + + + +

+
+

+
+

+
+

+
+ + + + + - + + - -

- - - - - - - - 명 -

-
- -

+ + -

+

정상수신

- -

onclick="javascript:fnMsgSFDetailList('${resultAllSentList.msgGroupId}', 'S'); return false;" style="cursor:pointer;"> -

-

정상수신

- -

onclick="javascript:fnMsgSFDetailList('${resultAllSentList.msgGroupId}', 'S'); return false;" style="cursor:pointer;"> -

-
-

- - 0 -

-

실패/대기

- -

onclick="javascript:fnMsgSFDetailList('${resultAllSentList.msgGroupId}', 'F'); return false;" style="cursor:pointer;"> - /

-

실패

-

onclick="javascript:fnMsgSFDetailList('${resultAllSentList.msgGroupId}', 'F'); return false;" style="cursor:pointer;"> -

-

- - 0 -

-
발송 내역이 없습니다.발송 내역이 없습니다.
- - - - - + +
-
- - - - - +
+
- - +
-
+
+
+ +
+ +
\ No newline at end of file diff --git a/src/main/webapp/WEB-INF/jsp/web/kakao/sent/KakaoSentAllListAjax_back_250318.jsp b/src/main/webapp/WEB-INF/jsp/web/kakao/sent/KakaoSentAllListAjax_back_250318.jsp new file mode 100644 index 00000000..43cfa302 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/web/kakao/sent/KakaoSentAllListAjax_back_250318.jsp @@ -0,0 +1,405 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> +<%@ page import="itn.com.cmm.LoginVO" %> + + + + +
+ +

+
+ + +
+
+ +
+ + + + + + + + + + + + + + <%-- --%> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <%-- --%> + + + + + + + <%----%> + + + + + + + + + +
+ + + + 발송일시 +
+ +
+
+ 형태 +
+ +
+
내용 + 받는사람 +
+ +
+
+ 발신번호 +
+ +
+
+ 발송건수 +
+ +
+
카카오톡 결과건수대체문자 결과건수
+ + disabled> + + + + + + <%-- + 20240906 추가 + 발송 대기 상태일 때만 원래 발송시간을 보여주고, 발송이 완료되면 발송 처리 완료 시간(reqDate)을 보여준다. + 30분 딜레이 된 건으로 관리자 승인/취소 처리가 완료 되지 않은 건에 대해서 -30분 처리하여 원래 사용자가 보내려던 시간을 표시해줌 + --%> +

+
+ +

+
+
+
+ +

+
+
+
+

+ 알림톡 + 친구톡 +

+
+<%-- --%> + + + + +

+ + + + + + + + 명 +

+
+ +

+
+ +

+
+
+<%--

${resultAllSentList.msgGroupId}

--%> +

정상수신

+ +

onclick="javascript:fnMsgSFDetailList('${resultAllSentList.msgGroupId}', 'S'); return false;" style="cursor:pointer;"> +

+

정상수신

+ +

onclick="javascript:fnMsgSFDetailList('${resultAllSentList.msgGroupId}', 'S'); return false;" style="cursor:pointer;"> +

+
+

+ + 0 +

+

실패/대기

+ +

onclick="javascript:fnMsgSFDetailList('${resultAllSentList.msgGroupId}', 'F'); return false;" style="cursor:pointer;"> + /

+

실패

+

onclick="javascript:fnMsgSFDetailList('${resultAllSentList.msgGroupId}', 'F'); return false;" style="cursor:pointer;"> +

+

+ + 0 +

+
발송 내역이 없습니다.
+
+ + + + + + +
+
+ + + + + +
+
+ + +
+
+ +
    + +
+
diff --git a/src/main/webapp/WEB-INF/jsp/web/kakao/sent/KakaoSentDetailPopAjax.jsp b/src/main/webapp/WEB-INF/jsp/web/kakao/sent/KakaoSentDetailPopAjax.jsp index f594a247..d8354c3c 100644 --- a/src/main/webapp/WEB-INF/jsp/web/kakao/sent/KakaoSentDetailPopAjax.jsp +++ b/src/main/webapp/WEB-INF/jsp/web/kakao/sent/KakaoSentDetailPopAjax.jsp @@ -5,111 +5,112 @@ <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> <% pageContext.setAttribute("newLineChar", "\n"); %> -
- -
    -
  • - -
  • -
    -
-
+
+ +
+
    +
  • + +
  • +
    +
+
+ -
-
-
- - - - - 알림톡 - - - 친구톡 - - - - - -
-
-
-
- - - - 알림톡 도착 - - - 친구톡 도착 - - - - -
-
- - - - -

-

-
- -
- -
-
- - -
- - -

- - - -

- - - - - -

-
- - -

-
- - -
- - - - - - - - - - - - -
-
-
-
-
-
-
-
- - 대체문자 -
-
- ${fn:replace(resultMsgDetail.bizKakaoResendOrgnlTxt, newLineChar, "
")} -
+ +
+
+
+

+ +
+
+ + + 알림톡 도착 + 친구톡 도착 + +
+
+ + +

+

+
+ +
+ +
+
+
+ +

+ +

+ + + +

+
+ +

+
+
+ + + + + + + + + + + +
+
+
+

※ 단말기 설정에 따라 다르게 보일 수 있습니다

+
+
+ + + +
+
+
+

문자내용

+
+ + + + 단문 + 장문 + + + 단문 + + + 장문 + + + +
+ 글자크기 + +
+
+
+

${fn:replace(resultMsgDetail.bizKakaoResendOrgnlTxt, newLineChar, "
")}

+
+
+
+
+

※ 단말기 설정에 따라 다르게 보일 수 있습니다

+
+ +
\ No newline at end of file diff --git a/src/main/webapp/WEB-INF/jsp/web/kakao/sent/KakaoSentDetailPopAjax_back_250320.jsp b/src/main/webapp/WEB-INF/jsp/web/kakao/sent/KakaoSentDetailPopAjax_back_250320.jsp new file mode 100644 index 00000000..f594a247 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/web/kakao/sent/KakaoSentDetailPopAjax_back_250320.jsp @@ -0,0 +1,115 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> +<% pageContext.setAttribute("newLineChar", "\n"); %> + +
+ +
    +
  • + +
  • +
    +
+
+ +
+
+
+ + + + + 알림톡 + + + 친구톡 + + + + + +
+
+
+
+ + + + 알림톡 도착 + + + 친구톡 도착 + + + + +
+
+ + + + +

+

+
+ +
+ +
+
+ + +
+ + +

+ + + +

+ + + + + +

+
+ + +

+
+ + +
+ + + + + + + + + + + + +
+
+
+
+
+
+
+
+ + 대체문자 +
+
+ ${fn:replace(resultMsgDetail.bizKakaoResendOrgnlTxt, newLineChar, "
")} +
+
+
+ \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/jsp/web/kakao/sent/KakaoSentDetailView.jsp b/src/main/webapp/WEB-INF/jsp/web/kakao/sent/KakaoSentDetailView.jsp new file mode 100644 index 00000000..c00dd4d1 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/web/kakao/sent/KakaoSentDetailView.jsp @@ -0,0 +1,922 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> +<%@ taglib prefix="ec" uri="/WEB-INF/tld/ecnet_tld.tld"%> +<%@ taglib prefix="fnc" uri="/WEB-INF/tld/functions.tld"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%> +<%@ page import="itn.com.cmm.LoginVO" %> +<% pageContext.setAttribute("newLineChar", "\n"); %> + + + + + + +
+ + + + +
+ +
+
+

발송결과 상세

+ +
+ + + +
+ +
+ +
+
+
+

발송정보

+

+
+
+
+
발송일시
+
${result.reqDate}
+
+ +
+
등록일시
+
${result.regDate}
+
+
+
+
형태
+
+ 알림톡 + 친구톡 +
+
+
+
발송건수
+
+
+
+
채널정보
+
+
+
+
진행상황 + + +
+
예약
+ + +
+ +
+ ${result.divideText } +
+
+
+
+
+ +
+
+ + + + 예약취소() + + + + + +

+
+
+
+
+
+
+
+
발송요금(합계)
+
+ + + + + 0 + +
+ +
+
+
+
· 카카오톡
+
+ +
+
+
+
· 대체문자
+
+ +
+
+
+
+
+
+ + +
+
+
+

상세결과

+

+
+
+
+
+
전체건수
+
+
+
+
+
+
성공건수
+
건(${result.successPct})
+
+
+
+
+
+
+
대기건수
+
건(${result.waitingPct})
+
+
+
+
+
실패건수
+
건(${result.failedPct})
+
+
+
+

* 전체건수를 클릭하면 받는 사람 상세정보를 확인하실 수 있습니다.

+
+
+ +
+ + + +
+ +
+ +
+ + + + +
+ +
+ + +
+
+ +
+ + + + +
+ +
+ + + +
+ +
+ + + +
+ " /> + + + + + + + + + +
+ + +
+ +
+ + +
+ + + + +
+ +
+ + +
+ diff --git a/src/main/webapp/WEB-INF/jsp/web/kakao/sent/KakaoSentView.jsp b/src/main/webapp/WEB-INF/jsp/web/kakao/sent/KakaoSentView.jsp index ea518568..d418e9f5 100644 --- a/src/main/webapp/WEB-INF/jsp/web/kakao/sent/KakaoSentView.jsp +++ b/src/main/webapp/WEB-INF/jsp/web/kakao/sent/KakaoSentView.jsp @@ -45,20 +45,6 @@ $(document).ready(function(){ threefulstday = prevMonth(3); threefuledday = today(); - /* 목록 정렬 항목 아이콘 표시 */ - /* var searchSortCnd = $("[name='searchSortCnd']").val(); - var searchSortOrd = $("[name='searchSortOrd']").val(); - - if (searchSortCnd != "" && searchSortOrd != "" && searchSortCnd != undefined && searchSortOrd != undefined) { - var $sort_div = $("#sort_"+ searchSortCnd); - var sortClass = 'sortBtn' ; - - if (searchSortOrd == "desc") sortClass = "sortBtnDesc"; - - $sort_div.replaceClass('sortBtn' , sortClass) ; - $sort_div.attr("sortOrd", searchSortOrd); - } */ - // 정렬 항목 이벤트 $(document).on('click', '.sort', function (){ listSortOrd(this); @@ -101,6 +87,9 @@ $(document).ready(function(){ }); + //발송건수 셋 + cntSet(); + }); //오늘날짜 구하기 @@ -147,56 +136,16 @@ function linkPage(pageNo){ form.pageIndex.value = pageNo; var sendData = $(document.searchForm).serializeArray(); - $(".msgSentAllLoad").html('
LOADING...
'); +// $(".msgSentAllLoad").html('
LOADING...
'); + $(".msgSentAllLoad tbody:first").html('LOADING...'); $(".msgSentAllLoad").load("/web/kakao/sent/selectKakaoSentListViewAjax.do", sendData ,function(response, status, xhr){ + if (status === 'success') { + $(this).html(response); + } }); } -//선택 삭제 실행 - -/* -function fnDelete(){ - - var msgId = []; - if($("input:checkbox[name='msgSentDel']").is(":checked")==false){ - alert("한 개 이상의 전송 내역을 선택하세요"); - return; - } - - $("input:checkbox[name='msgSentDel']:checked").each(function(index){ - var disabledChk = $(this).prop('disabled'); - if(!disabledChk){ //checkbox disabled 인 것은 제외하고 아이디 저장 - msgId[index] = $(this).val(); - } - }); - - if(msgId.length > 0){ - - //22.04.25 구글 독스 alert 기준으로 이지우가 수정 - // if(confirm("선택한 발송문자를 삭제하시겠습니까? 삭제된 문자는 복구가 불가능 합니다.")) - if(confirm("선택한 목록을 삭제하시겠습니까?")){ - - document.searchForm.msgGroupIdList.value = msgId; - var sendData = $(document.searchForm).serializeArray(); - - $(".msgSentAllLoad").load("/web/mjon/msgsent/deleteMsgSentDataAjax.do", sendData ,function(response, status, xhr){ - }); - -// var form = document.searchForm; -// form.action="/web/mjon/msgsent/selectMsgSentView.do"; -// form.submit(); - } - - }else{ - - alert("삭제할 문자를 선택해 주세요."); - return false; - - } - -} - */ //상세보기 버튼 실행 function fnRevDetailPop(msgGroupId, msgId){ document.resPopForm.msgGroupId.value = msgGroupId; @@ -204,20 +153,11 @@ function fnRevDetailPop(msgGroupId, msgId){ var sendData = $(document.resPopForm).serializeArray(); var form = document.searchForm; - if (form.listType.value == "privateList") { - // 개인별 - $("#msgSentDetailPopLoad").load("/web/kakao/sent/selectKakaoSentDetailData2Ajax.do", sendData ,function(response, status, xhr){ - $('#tooltopClick').trigger('click'); - }); - } - else { - // 전송건별 - $("#msgSentDetailPopLoad").load("/web/kakao/sent/selectKakaoSentDetailDataAjax.do", sendData ,function(response, status, xhr){ - // 상세보기 클릭때마다 툴팁 1 tab이 열리게 설정 - popupTab($('#atBtn'),'1'); - $('#tooltopClick').trigger('click'); - }); - } + $("#msgSentDetailPopLoad").load("/web/kakao/sent/selectKakaoSentDetailDataAjax.do", sendData ,function(response, status, xhr){ + // 상세보기 클릭때마다 툴팁 1 tab이 열리게 설정 + popupTab($('#atBtn'),'1'); + $('#tooltopClick').trigger('click'); + }); } @@ -231,12 +171,6 @@ function fnListLoad(pageType, tabNum){ $tab.siblings("li.btn_tab").removeClass("active"); $tab.siblings("li.tab").find("button").removeAttr("title"); - if(pageType == 'fail'){ - form.listType.value = "privateList"; - $(".tab_depth1").hide(); - } else { - $(".tab_depth1").show(); - } form.stateType.value = pageType; linkPage(1); @@ -311,182 +245,6 @@ $(document).on('click', '.msgGgoupList', function(){ }); -$(document).on('click', '.msgPrivateList', function(){ - - var form = document.searchForm; - form.listType.value = "privateList"; - linkPage(1); - -}); - - -function fnDeleteAddrNo(listType){ - - var msgId = []; - if($("input:checkbox[name='msgSentDel']").is(":checked")==false){ - alert("한 개 이상의 전송 내역을 선택하세요"); - return; - } - - $("input:checkbox[name='msgSentDel']:checked").each(function(index){ - - var disabledChk = $(this).prop('disabled'); - if(!disabledChk){ //checkbox disabled 인 것은 제외하고 아이디 저장 - - msgId[index] = $(this).val(); - - } - - }); - - if(msgId.length > 0){ - - //22.04.25 구글 독스 alert 기준으로 이지우가 수정 - /* if(confirm("선택한 수신번호를 주소록에서 삭제하시겠습니까? 삭제된 주소록은 복구가 불가능 합니다.")){ */ - if(confirm("선택하신 번호를 주소록에서 삭제하시겠습니까?")){ - - var form = document.searchForm; - - form.msgGroupIdList.value = msgId; - form.listType.value = listType; - - var data = new FormData(form); - url = "/web/mjon/msgsent/deleteAddrNoDataAjax.do"; - - $.ajax({ - type: "POST", - url: url, - data: data, - dataType:'json', - async: false, - processData: false, - contentType: false, - cache: false, - success: function (returnData, status) { - if(status == 'success'){ // status 확인 필요한가. 석세스 안뜨면 에러 가지 않나 - if("fail"==returnData.result){ - - alert(returnData.message); - return false; - - }else if("loginFail"==returnData.result){ - - alert(returnData.message); - return false; - - }else if(returnData.resultCnt == '0'){ - - alert("주소록에 삭제할 연락처가 없습니다."); - return false; - - }else{ - - alert(returnData.message); - return false; - - } - - } else if(status== 'fail'){ - alert(returnData.message); - } - }, - error: function (e) { alert("주소록 삭제에 실패하였습니다."); console.log("ERROR : ", e); } - }); - - } - - }else{ - - alert("삭제할 문자를 선택해 주세요."); - return false; - - } - -} - -function fnAddBlockNo(listType){ - - var msgId = []; - if($("input:checkbox[name='msgSentDel']").is(":checked")==false){ - alert("선택된 항목이 없습니다."); - return; - } - - $("input:checkbox[name='msgSentDel']:checked").each(function(index){ - - var disabledChk = $(this).prop('disabled'); - if(!disabledChk){ //checkbox disabled 인 것은 제외하고 아이디 저장 - - msgId[index] = $(this).val(); - - } - - }); - - if(msgId.length > 0){ - - //if(confirm("선택한 수신번호를 주소록에서 삭제하시겠습니까? 삭제된 주소록은 복구가 불가능 합니다.")){ - - var form = document.searchForm; - - form.msgGroupIdList.value = msgId; - form.listType.value = listType; - - var data = new FormData(form); - url = "/web/mjon/msgsent/insertAddBlockNoDataAjax.do"; - - $.ajax({ - type: "POST", - url: url, - data: data, - dataType:'json', - async: false, - processData: false, - contentType: false, - cache: false, - success: function (returnData, status) { - if(status == 'success'){ // status 확인 필요한가. 석세스 안뜨면 에러 가지 않나 - if("fail"==returnData.result){ - - alert(returnData.message); - return false; - - }else if("loginFail"==returnData.result){ - - alert(returnData.message); - return false; - - }else if(returnData.resultCnt == '0'){ - - alert("주소록에 삭제할 연락처가 없습니다."); - return false; - - }else{ - - alert(returnData.message); - return false; - - } - - } else if(status== 'fail'){ - alert(returnData.message); - } - }, - error: function (e) { alert("수신거부번호 등록에 실패하였습니다."); console.log("ERROR : ", e); } - }); - - //} - - }else{ - - alert("수신거부번호를 등록할 문자를 선택해 주세요."); - return false; - - } - - -} - function fnReSendMsg(){ var msgSeq = []; @@ -514,27 +272,6 @@ function fnReSendMsg(){ } -function fnMsgSFDetailList(msgGroupId, resultType){ - - var form = document.resPopForm; - form.msgGroupId.value = msgGroupId; - form.resultType.value = resultType; - - //만들려는 팝업의 크기 - var popup_wid = '1280'; - var popup_ht = '700'; - - var popup_left = (window.screen.width / 2) - (popup_wid / 2); - var popup_top =(window.screen.height / 2) - (popup_ht / 2); - - $("#resPopForm").attr("target","msgSFDetailPop"); - - window.open('', 'msgSFDetailPop', 'width='+ popup_wid +', height='+ popup_ht +', left=' + popup_left + ', top='+ popup_top ); - $("#resPopForm").attr({"action":"/web/kakao/sent/selectKakaoSentSFDetailListAjax.do", "method":"post"}).submit(); - -} - - /* 사용내역서 클릭 시 내역서 새창 팝업 오픈 */ function fnShowPrintPopup(tabType, type) { //만들려는 팝업의 크기 @@ -552,129 +289,6 @@ function fnShowPrintPopup(tabType, type) { } -function addrGroupDuplCnt() { - document.searchForm.addrGrpNm.value = $('#grpNm').val(); - - var data = $('#searchForm').serialize(); - //var data = new FormData(form); - - var flag = true; - var url = "/web/addr/selectDuplAddrGroupNameAjax.do"; - - $.ajax({ - async: false, - type: "post", - url: url, - data: data, - dataType:"JSON", -// contentType: false, -// processData: false, - cache: false, - success: function (returnData, status) { - if("dupl"==returnData.result1) { - flag = false; - } - }, - error: function (e) { - alert("error"); - console.log("ERROR : ", e); - } - }); - - return flag; -} - -//주소록 그룹 등록 기능 -function fnAddAddrNo(){ - - var addrGrpNm = $('#grpNm').val(); //입력 그룹 이름 불러오기 - - var msgId = []; - if($("input:checkbox[name='msgSentDel']").is(":checked")==false){ - alert("한 개 이상의 전송 내역을 선택하세요"); - return; - } - - - $("input:checkbox[name='msgSentDel']:checked").each(function(index){ - - var disabledChk = $(this).prop('disabled'); - if(!disabledChk){ //checkbox disabled 인 것은 제외하고 아이디 저장 - - msgId[index] = $(this).val(); - - } - - }); - - if(msgId.length > 0 && addrGrpNm != ''){ - - - //주소록 그룹명 중복체크 - if(!addrGroupDuplCnt()) { - alert("이미 등록되어있는 주소록입니다."); - return false; - } - - - var form = document.searchForm; - - form.msgGroupIdList.value = msgId; - form.addrGrpNm.value = addrGrpNm; - - var data = new FormData(form); - url = "/web/mjon/msgsent/insertAddAddrGrpDataAjax.do"; - - $.ajax({ - type: "POST", - url: url, - data: data, - dataType:'json', - async: false, - processData: false, - contentType: false, - cache: false, - success: function (returnData, status) { - if(status == 'success'){ // status 확인 필요한가. 석세스 안뜨면 에러 가지 않나 - if("fail"==returnData.result){ - - alert(returnData.message); - return false; - - }else if("loginFail"==returnData.result){ - - alert(returnData.message); - return false; - - }else if(returnData.resultCnt == '0'){ - - alert("주소록에 등록할 연락처가 없습니다."); - return false; - - }else{ - - alert(returnData.message); - $('#grpNm').val(""); //입력한 그룹명 초기화 - $(".tooltip-close").trigger("click"); - return false; - - } - - } else if(status== 'fail'){ - alert(returnData.message); - } - }, - error: function (e) { alert("주소록 등록에 실패하였습니다."); console.log("ERROR : ", e); } - }); - }else{ - - alert("등록할 문자를 선택해 주세요."); - return false; - - } - -} - /* 윈도우팝업 열기 */ function infoPop(pageUrl){ document.popForm.pageType.value = pageUrl; @@ -685,33 +299,90 @@ function infoPop(pageUrl){ document.popForm.submit(); } +function cntSet(){ + + $('#ntceBgnde').val($('#startDate').val()); + $('#ntceEndde').val($('#endDate').val()); + + $.ajax({ + url: '/web/kakao/sent/selectKakaoSentViewTotalSumAjax.do', + type: 'POST', +// contentType: 'application/json', + contentType: false, + processData: false, + data: new FormData(document.searchForm), + success: function(response) { + + cntView('allCnt', response.allCnt); + cntView('atCnt', response.atCnt); + //cntView('ftCnt', response.ftCnt); + }, + error: function(error) { + alert("error"); + }, + beforeSend : function(xmlHttpRequest) { + //로딩창 show + $('#lodingBefore').show(); + $('#lodingAfter').hide(); + }, + complete : function(xhr, textStatus) { + //로딩창 hide + $('#lodingBefore').hide(); + $('#lodingAfter').show(); + } + }); +} + +function cntView(type, obj){ + $('#'+type+' span[name="allCnt"]').text(obj.allCount.toLocaleString()); + $('#'+type+' span[name="waitCnt"]').text(obj.waitCount.toLocaleString()); + $('#'+type+' span[name="succCnt"]').text(obj.successCount.toLocaleString()); + $('#'+type+' span[name="failCnt"]').text(obj.failCount.toLocaleString()); +} + +//선택 삭제 실행 +function fnDelete(){ + + var msgId = []; + if($("input:checkbox[name='msgSentDel']").is(":checked")==false){ + alert("한 개 이상의 전송 내역을 선택하세요"); + return; + } + + $("input:checkbox[name='msgSentDel']:checked").each(function(index){ + var disabledChk = $(this).prop('disabled'); + if(!disabledChk){ //checkbox disabled 인 것은 제외하고 아이디 저장 + msgId[index] = $(this).val(); + } + }); + + console.log('msgId : ', msgId); + + if(msgId.length < 1){ + alert("삭제할 문자를 선택해 주세요."); + return false; + } + + //22.04.25 구글 독스 alert 기준으로 이지우가 수정 + /* if(confirm("선택한 발송문자를 삭제하시겠습니까? 삭제된 문자는 복구가 불가능 합니다.")) */ + if(confirm("선택한 목록을 삭제하시겠습니까?\n삭제한 목록은 복구가 불가합니다.")){ + + document.searchForm.msgGroupIdList.value = msgId; + var sendData = $(document.searchForm).serializeArray(); + + $(".msgSentAllLoad").load("/web/mjon/msgsent/deleteMsgSentDataAjax.do", sendData ,function(response, status, xhr){ + }); + + alert("삭제되었습니다."); + var form = document.searchForm; + form.action="/web/kakao/sent/selectKakaoSentView.do"; + form.submit(); + } + +} + - -
- -
- - - - - +
@@ -763,154 +434,19 @@ function infoPop(pageUrl){ - - - - - - - - - - - - - - - - - - + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-
-
-

전체

-

-
-
-
-
대기
-
-
-
-
성공
-
-
-
-
실패
-
-
-
-
-
-
-

알림톡

-

-
-
-
-
대기
-
-
-
-
성공
-
-
-
-
실패
-
-
-
-
- <%--
-
-

친구톡

-

-
-
-
-
대기
-
-
-
-
성공
-
-
-
-
실패
-
-
-
-
--%> + + +
+

- 최대 3개월간의 발송내역만 확인하실 수 있습니다.

+

- 전송내역이 필요한 경우 기간 내에 다운로드하여 주시기 바랍니다.

- + +
@@ -931,6 +467,8 @@ function infoPop(pageUrl){
+ +
+
+
+

전체

+

+
+
+
LOADING...
+
+
+
+
+

알림톡

+

+
+
+
LOADING...
+
+
+
+ + +
    @@ -953,22 +576,43 @@ function infoPop(pageUrl){
-
+
- --> + + + + + + + +
    +
  • + +
  • + +
  • + +
  • +
  • + +
  • +
diff --git a/src/main/webapp/WEB-INF/jsp/web/kakao/sent/KakaoSentView_back_250305.jsp b/src/main/webapp/WEB-INF/jsp/web/kakao/sent/KakaoSentView_back_250305.jsp new file mode 100644 index 00000000..d3c53069 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/web/kakao/sent/KakaoSentView_back_250305.jsp @@ -0,0 +1,996 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> +<%@ page import="itn.com.cmm.LoginVO" %> + + + + + +
+ +
+ + + + + + + +
+ +
+
+ +
+ +
+
+

발송결과

+ + +
+
+ + <%@include file="/WEB-INF/jsp/web/kakao/include/KakaoSentTopMentTap.jsp" %> + +
+
+ + + " /> + " /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+

전체

+

+
+
+
+
대기
+
+
+
+
성공
+
+
+
+
실패
+
+
+
+
+
+
+

알림톡

+

+
+
+
+
대기
+
+
+
+
성공
+
+
+
+
실패
+
+
+
+
+ <%--
+
+

친구톡

+

+
+
+
+
대기
+
+
+
+
성공
+
+
+
+
실패
+
+
+
+
--%> +
+ +
+
+
+ 기간선택 +
+ + ~ + +
+ + + + + + +
+
+ + + +
+
+
+
+ +
    +
  • +
  • +<%-- --%> + +<%-- --%> +
+
+ +
+ +
+
    +
  • +
  • +
  • +
  • +
  • +
+
+ 받는사람(전송건별) + + 받는사람(개인별) +
받는사람(전송건별)
+
+
+ +
+
+ +
+ +
+
+
+
+
+ + + + +
+
+ + +
+
+ +
+ \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/jsp/web/msgsent/MsgSentDetailView.jsp b/src/main/webapp/WEB-INF/jsp/web/msgsent/MsgSentDetailView.jsp index 8cfe3e41..bfdf9ff4 100644 --- a/src/main/webapp/WEB-INF/jsp/web/msgsent/MsgSentDetailView.jsp +++ b/src/main/webapp/WEB-INF/jsp/web/msgsent/MsgSentDetailView.jsp @@ -610,6 +610,7 @@ function getFilteredDataByTab() { // 탭 필터 적용하여 데이터 필터링 (수신번호 필터는 무시) return allData.filter(row => tabFilter ? row.result.includes(tabFilter.value) : true); } + diff --git a/src/main/webapp/WEB-INF/jsp/web/user/mberInfoIndex.jsp b/src/main/webapp/WEB-INF/jsp/web/user/mberInfoIndex.jsp index b20ca1fd..4db78d99 100644 --- a/src/main/webapp/WEB-INF/jsp/web/user/mberInfoIndex.jsp +++ b/src/main/webapp/WEB-INF/jsp/web/user/mberInfoIndex.jsp @@ -4,6 +4,8 @@ <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%> <%@ taglib prefix="ec" uri="/WEB-INF/tld/ecnet_tld.tld"%> <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> +<%@ taglib prefix="fnc" uri="/WEB-INF/tld/functions.tld"%> +