발송결과 알림톡 성능 개선
This commit is contained in:
parent
7d1cdedf03
commit
a67c970812
@ -151,6 +151,8 @@ public class MjonKakaoATVO extends ComDefaultVO{
|
|||||||
private String bizKakaoResendType; /* 대체 문자 길이 => MMS / LMS / SMS */
|
private String bizKakaoResendType; /* 대체 문자 길이 => MMS / LMS / SMS */
|
||||||
private String bizKakaoJsonFile; //카카오 친구톡 Json 파일 경로
|
private String bizKakaoJsonFile; //카카오 친구톡 Json 파일 경로
|
||||||
|
|
||||||
|
private String yellowId;
|
||||||
|
private String bizKakaoResendTypeCnt;
|
||||||
|
|
||||||
public String getMsgDiv() {
|
public String getMsgDiv() {
|
||||||
return msgDiv;
|
return msgDiv;
|
||||||
@ -1273,5 +1275,19 @@ public class MjonKakaoATVO extends ComDefaultVO{
|
|||||||
public void setBizKakaoJsonFile(String bizKakaoJsonFile) {
|
public void setBizKakaoJsonFile(String bizKakaoJsonFile) {
|
||||||
this.bizKakaoJsonFile = 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;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -246,6 +246,14 @@ public class KakaoVO extends MjonMsgVO{
|
|||||||
private String successCntDay;
|
private String successCntDay;
|
||||||
private String successCntMonth;
|
private String successCntMonth;
|
||||||
private String successCntYear;
|
private String successCntYear;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//재전송 영역
|
||||||
|
private String msgResendAllFlag;
|
||||||
|
private String msgResendAllGroupId;
|
||||||
|
private String msgResendAllTmpKey;
|
||||||
|
private String msgResendAllYellowId;
|
||||||
|
|
||||||
public String getSuccessDay() {
|
public String getSuccessDay() {
|
||||||
return successDay;
|
return successDay;
|
||||||
@ -1238,4 +1246,39 @@ public class KakaoVO extends MjonMsgVO{
|
|||||||
public void setPhmType(String phmType) {
|
public void setPhmType(String phmType) {
|
||||||
this.phmType = 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;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -46,6 +46,8 @@ import org.springframework.web.multipart.MultipartFile;
|
|||||||
import org.springframework.web.multipart.MultipartHttpServletRequest;
|
import org.springframework.web.multipart.MultipartHttpServletRequest;
|
||||||
import org.springframework.web.servlet.ModelAndView;
|
import org.springframework.web.servlet.ModelAndView;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||||
|
|
||||||
import egovframework.rte.fdl.idgnr.EgovIdGnrService;
|
import egovframework.rte.fdl.idgnr.EgovIdGnrService;
|
||||||
import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper;
|
import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper;
|
||||||
import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo;
|
import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo;
|
||||||
@ -216,6 +218,26 @@ public class KakaoAlimTalkSendController {
|
|||||||
model.addAttribute("sendPrice", kakaoSendUtil.selectSendPriceOfKakaoAtAndSmsAndMms(userId));
|
model.addAttribute("sendPrice", kakaoSendUtil.selectSendPriceOfKakaoAtAndSmsAndMms(userId));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if("Y".equals(kakaoVO.getMsgResendAllFlag())) {
|
||||||
|
List<MjonMsgDataVO> resendList = new ArrayList<MjonMsgDataVO>();
|
||||||
|
|
||||||
|
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";
|
return "web/kakao/msgdata/at/KakaoAlimtalkMsgDataView";
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1403,4 +1425,80 @@ public class KakaoAlimTalkSendController {
|
|||||||
|
|
||||||
return modelAndView;
|
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<KakaoVO> selectKakaoProfileList = kakaoApiService.selectKakaoProfileList(kakaoVO);
|
||||||
|
model.addAttribute("kakaoProfileList", selectKakaoProfileList);
|
||||||
|
|
||||||
|
//발신번호 불러오기
|
||||||
|
//아이디 발신번호 리스트 불러오기.
|
||||||
|
List<String> resultSendPhonList = mjonMsgDataService.selectSendPhonNumList(userId);
|
||||||
|
List<String> resultPhonList = new ArrayList<String>();
|
||||||
|
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";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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<FileInfoVO> fileInfos;
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@ -1,6 +1,7 @@
|
|||||||
package itn.let.kakao.user.sent.service;
|
package itn.let.kakao.user.sent.service;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
import itn.let.kakao.admin.kakaoAt.service.MjonKakaoATVO;
|
import itn.let.kakao.admin.kakaoAt.service.MjonKakaoATVO;
|
||||||
|
|
||||||
@ -31,5 +32,11 @@ public interface KakaoSentService {
|
|||||||
//예약 결과 전체 발송 리스트 불러오기
|
//예약 결과 전체 발송 리스트 불러오기
|
||||||
public List<KakaoSentVO> selectReservKakaoSentList(KakaoSentVO kakaoSentVO) throws Exception;
|
public List<KakaoSentVO> selectReservKakaoSentList(KakaoSentVO kakaoSentVO) throws Exception;
|
||||||
|
|
||||||
|
public Map<String, Object> selectKakaoSentCntAll_Advc(KakaoSentVO kakaoSentVO) throws Exception;
|
||||||
|
|
||||||
|
public KakaoSentDetailVO selectKakaoSentDetailView(KakaoSentDetailVO kakaoSentDetailVO) throws Exception;
|
||||||
|
|
||||||
|
//발송 관리 문자발송 내용 상세보기 팝업
|
||||||
|
public MjonKakaoATVO selectKakaoSentDetailViewPhoneAjax(MjonKakaoATVO kakaoSentVO) throws Exception;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -4,7 +4,11 @@ import java.util.Date;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import itn.let.uss.umt.service.UserDefaultVO;
|
import itn.let.uss.umt.service.UserDefaultVO;
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.Setter;
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
public class KakaoSentVO extends UserDefaultVO{
|
public class KakaoSentVO extends UserDefaultVO{
|
||||||
|
|
||||||
private static final long serialVersionUID = 1L;
|
private static final long serialVersionUID = 1L;
|
||||||
@ -90,6 +94,7 @@ public class KakaoSentVO extends UserDefaultVO{
|
|||||||
private int successCount;
|
private int successCount;
|
||||||
private int waitCount;
|
private int waitCount;
|
||||||
private int failCount;
|
private int failCount;
|
||||||
|
private int allCount;
|
||||||
|
|
||||||
private String bizUmid;
|
private String bizUmid;
|
||||||
private int kakaoResendSuccCount;
|
private int kakaoResendSuccCount;
|
||||||
@ -103,471 +108,11 @@ public class KakaoSentVO extends UserDefaultVO{
|
|||||||
private String atDelayCompleteYn; //알림톡 30분 지연 승인/취소 처리 여부
|
private String atDelayCompleteYn; //알림톡 30분 지연 승인/취소 처리 여부
|
||||||
private Date atDelayOrgTime; //알림톡 30분 지연에 대한 원래 시간 (-30분 처리된 시간)
|
private Date atDelayOrgTime; //알림톡 30분 지연에 대한 원래 시간 (-30분 처리된 시간)
|
||||||
|
|
||||||
public String getCallToComma() {
|
private String statusCd;
|
||||||
return callToComma;
|
|
||||||
}
|
|
||||||
public void setCallToComma(String callToComma) {
|
|
||||||
this.callToComma = callToComma;
|
|
||||||
}
|
|
||||||
public String getCallFromComma() {
|
|
||||||
return callFromComma;
|
|
||||||
}
|
|
||||||
public void setCallFromComma(String callFromComma) {
|
|
||||||
this.callFromComma = callFromComma;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getAtchFiles() {
|
private int successPrice;
|
||||||
return atchFiles;
|
private int kakaoResendSuccPrice;
|
||||||
}
|
|
||||||
public void setAtchFiles(String atchFiles) {
|
|
||||||
this.atchFiles = atchFiles;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getMsgId() {
|
private String divideYn;
|
||||||
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;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -7,6 +7,7 @@ import org.springframework.stereotype.Repository;
|
|||||||
|
|
||||||
import egovframework.rte.psl.dataaccess.EgovAbstractDAO;
|
import egovframework.rte.psl.dataaccess.EgovAbstractDAO;
|
||||||
import itn.let.kakao.admin.kakaoAt.service.MjonKakaoATVO;
|
import itn.let.kakao.admin.kakaoAt.service.MjonKakaoATVO;
|
||||||
|
import itn.let.kakao.user.sent.service.KakaoSentDetailVO;
|
||||||
import itn.let.kakao.user.sent.service.KakaoSentVO;
|
import itn.let.kakao.user.sent.service.KakaoSentVO;
|
||||||
|
|
||||||
@Repository("KakaoSentDAO")
|
@Repository("KakaoSentDAO")
|
||||||
@ -45,6 +46,10 @@ public class KakaoSentDAO extends EgovAbstractDAO {
|
|||||||
public List<KakaoSentVO> selectAllKakaoSentList(KakaoSentVO kakaoSentVO) throws Exception{
|
public List<KakaoSentVO> selectAllKakaoSentList(KakaoSentVO kakaoSentVO) throws Exception{
|
||||||
return (List<KakaoSentVO>) list("KakaoSentDAO.selectAllKakaoSentList",kakaoSentVO);
|
return (List<KakaoSentVO>) list("KakaoSentDAO.selectAllKakaoSentList",kakaoSentVO);
|
||||||
}
|
}
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
public List<KakaoSentVO> selectAllKakaoSentList_advc(KakaoSentVO kakaoSentVO) throws Exception{
|
||||||
|
return (List<KakaoSentVO>) list("KakaoSentDAO.selectAllKakaoSentList_advc",kakaoSentVO);
|
||||||
|
}
|
||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
public List<KakaoSentVO> selectAllPrivateKakaoSentList(KakaoSentVO KakaoSentVO) throws Exception{
|
public List<KakaoSentVO> selectAllPrivateKakaoSentList(KakaoSentVO KakaoSentVO) throws Exception{
|
||||||
@ -90,4 +95,39 @@ public class KakaoSentDAO extends EgovAbstractDAO {
|
|||||||
return (List<KakaoSentVO>) list("KakaoSentDAO.selectReservKakaoSentList",kakaoSentVO);
|
return (List<KakaoSentVO>) list("KakaoSentDAO.selectReservKakaoSentList",kakaoSentVO);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
public List<KakaoSentVO> selectKakaoSentCntAll_advc(KakaoSentVO kakaoSentVO) throws Exception{
|
||||||
|
|
||||||
|
List<KakaoSentVO> result = new ArrayList<KakaoSentVO>();
|
||||||
|
|
||||||
|
try {
|
||||||
|
|
||||||
|
result = (List<KakaoSentVO>) 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<String> findByReqDateWhereMsgGroupId(String msgGroupId) {
|
||||||
|
return (List<String>) list("KakaoSentDAO.findByReqDateWhereMsgGroupId", msgGroupId);
|
||||||
|
}
|
||||||
|
|
||||||
|
//발송 관리 문자발송 내용 상세보기 팝업[그룹]
|
||||||
|
public MjonKakaoATVO selectKakaoSentDetailViewPhoneAjax(MjonKakaoATVO KakaoSentVO) throws Exception{
|
||||||
|
return (MjonKakaoATVO) select("KakaoSentDAO.selectKakaoSentDetailViewPhoneAjax", KakaoSentVO);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,7 +1,15 @@
|
|||||||
package itn.let.kakao.user.sent.service.impl;
|
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.ArrayList;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.LinkedHashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
|
|
||||||
@ -10,6 +18,7 @@ import org.springframework.stereotype.Service;
|
|||||||
import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl;
|
import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl;
|
||||||
import egovframework.rte.fdl.idgnr.EgovIdGnrService;
|
import egovframework.rte.fdl.idgnr.EgovIdGnrService;
|
||||||
import itn.let.kakao.admin.kakaoAt.service.MjonKakaoATVO;
|
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.KakaoSentService;
|
||||||
import itn.let.kakao.user.sent.service.KakaoSentVO;
|
import itn.let.kakao.user.sent.service.KakaoSentVO;
|
||||||
|
|
||||||
@ -29,7 +38,8 @@ public class KakaoSentServiceImpl extends EgovAbstractServiceImpl implements Ka
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
|
|
||||||
result = kakaoSentDAO.selectKakaoSentCntAll(kakaoSentVO);
|
// result = kakaoSentDAO.selectKakaoSentCntAll(kakaoSentVO);
|
||||||
|
result = kakaoSentDAO.selectKakaoSentCntAll_advc(kakaoSentVO);
|
||||||
|
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
throw new Exception("++++++++++ ErrorService Impl :: " + e);
|
throw new Exception("++++++++++ ErrorService Impl :: " + e);
|
||||||
@ -38,30 +48,83 @@ public class KakaoSentServiceImpl extends EgovAbstractServiceImpl implements Ka
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Map<String, Object> selectKakaoSentCntAll_Advc(KakaoSentVO kakaoSentVO) throws Exception{
|
||||||
|
|
||||||
|
List<KakaoSentVO> result = new ArrayList<KakaoSentVO>();
|
||||||
|
Map<String, Object> returnMap = new HashMap<String, Object>();
|
||||||
|
|
||||||
|
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<KakaoSentVO> selectAllKakaoSentList(KakaoSentVO kakaoSentVO) throws Exception{
|
public List<KakaoSentVO> selectAllKakaoSentList(KakaoSentVO kakaoSentVO) throws Exception{
|
||||||
|
|
||||||
List<KakaoSentVO> resultList = new ArrayList<KakaoSentVO>();
|
List<KakaoSentVO> resultList = new ArrayList<KakaoSentVO>();
|
||||||
|
|
||||||
String listType = kakaoSentVO.getListType();
|
resultList = kakaoSentDAO.selectAllKakaoSentList_advc(kakaoSentVO);
|
||||||
String stateType = kakaoSentVO.getStateType();
|
|
||||||
|
|
||||||
if(stateType.equals("fail")) {
|
//totPrice 계산 및 상태코드 set
|
||||||
|
resultList = resultList.stream().map(t -> setPriceNCode(t)).collect(Collectors.toList());
|
||||||
listType = "privateList";
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
System.out.println("listType : "+ listType);
|
|
||||||
if(listType.equals("groupList")) {//전송건별 리스트 불러오기
|
|
||||||
|
|
||||||
resultList = kakaoSentDAO.selectAllKakaoSentList(kakaoSentVO);
|
|
||||||
|
|
||||||
}else {//개인별 리스트 불러오기
|
|
||||||
|
|
||||||
resultList = kakaoSentDAO.selectAllPrivateKakaoSentList(kakaoSentVO);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
return resultList;
|
return resultList;
|
||||||
}
|
}
|
||||||
@ -149,5 +212,229 @@ public class KakaoSentServiceImpl extends EgovAbstractServiceImpl implements Ka
|
|||||||
|
|
||||||
return kakaoSentDAO.selectReservKakaoSentList(kakaoSentVO);
|
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<String> requestTimes = kakaoSentDAO.findByReqDateWhereMsgGroupId(msgGroupId);
|
||||||
|
|
||||||
|
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.S");
|
||||||
|
Map<LocalDateTime, Integer> timeCountMap = new LinkedHashMap<>();
|
||||||
|
|
||||||
|
// REQ_DATE 그룹화 (같은 시간대 몇 건인지)
|
||||||
|
for (String timeStr : requestTimes) {
|
||||||
|
LocalDateTime time = LocalDateTime.parse(timeStr, formatter);
|
||||||
|
timeCountMap.put(time, timeCountMap.getOrDefault(time, 0) + 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 가장 첫 번째 시간 & 간격 계산
|
||||||
|
List<LocalDateTime> 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);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -8,6 +8,7 @@ import java.util.Calendar;
|
|||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpServletRequest;
|
||||||
@ -26,6 +27,8 @@ import org.json.simple.parser.JSONParser;
|
|||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
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.stereotype.Controller;
|
||||||
import org.springframework.ui.ModelMap;
|
import org.springframework.ui.ModelMap;
|
||||||
import org.springframework.web.bind.annotation.ModelAttribute;
|
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.KakaoReturnVO;
|
||||||
import itn.let.kakao.kakaoComm.KakaoVO;
|
import itn.let.kakao.kakaoComm.KakaoVO;
|
||||||
import itn.let.kakao.kakaoComm.kakaoApi.KakaoApiTemplate;
|
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.KakaoSentService;
|
||||||
import itn.let.kakao.user.sent.service.KakaoSentVO;
|
import itn.let.kakao.user.sent.service.KakaoSentVO;
|
||||||
|
|
||||||
@ -82,26 +86,26 @@ public class KakaoSentController {
|
|||||||
//전체 발송 건수 통계 불러오기
|
//전체 발송 건수 통계 불러오기
|
||||||
kakaoSentVO.setMsgType("");
|
kakaoSentVO.setMsgType("");
|
||||||
|
|
||||||
List<KakaoSentVO> totalMsgCnt = kakaoSentService.selectKakaoSentCntAll(kakaoSentVO);
|
// List<KakaoSentVO> totalMsgCnt = kakaoSentService.selectKakaoSentCntAll(kakaoSentVO);
|
||||||
model.addAttribute("totalMsgCnt", totalMsgCnt);
|
// model.addAttribute("totalMsgCnt", totalMsgCnt);
|
||||||
|
//
|
||||||
List<KakaoSentVO> atCnt = new ArrayList<KakaoSentVO>();
|
// List<KakaoSentVO> atCnt = new ArrayList<KakaoSentVO>();
|
||||||
List<KakaoSentVO> ftCnt = new ArrayList<KakaoSentVO>();
|
// List<KakaoSentVO> ftCnt = new ArrayList<KakaoSentVO>();
|
||||||
|
//
|
||||||
|
//
|
||||||
totalMsgCnt.forEach(t->{
|
// totalMsgCnt.forEach(t->{
|
||||||
if (Integer.parseInt(t.getFilePath1())>0) {
|
// if (Integer.parseInt(t.getFilePath1())>0) {
|
||||||
atCnt.add(t);
|
// atCnt.add(t);
|
||||||
} else if (Integer.parseInt(t.getFilePath2())>0) {
|
// } else if (Integer.parseInt(t.getFilePath2())>0) {
|
||||||
ftCnt.add(t);
|
// ftCnt.add(t);
|
||||||
}
|
// }
|
||||||
});
|
// });
|
||||||
|
//
|
||||||
//알림톡 성공건, 실패건 불러오기
|
// //알림톡 성공건, 실패건 불러오기
|
||||||
model.addAttribute("atCnt", atCnt);
|
// model.addAttribute("atCnt", atCnt);
|
||||||
|
//
|
||||||
//친구톡 성공건, 실패건 불러오기
|
// //친구톡 성공건, 실패건 불러오기
|
||||||
model.addAttribute("ftCnt", ftCnt);
|
// model.addAttribute("ftCnt", ftCnt);
|
||||||
|
|
||||||
// 검색 리스트 불러오기
|
// 검색 리스트 불러오기
|
||||||
if(kakaoSentVO.getPageUnit() != 10) kakaoSentVO.setPageUnit(kakaoSentVO.getPageUnit());
|
if(kakaoSentVO.getPageUnit() != 10) kakaoSentVO.setPageUnit(kakaoSentVO.getPageUnit());
|
||||||
@ -193,7 +197,7 @@ public class KakaoSentController {
|
|||||||
List<KakaoSentVO> resultAllSentList = kakaoSentService.selectAllKakaoSentList(kakaoSentVO);
|
List<KakaoSentVO> resultAllSentList = kakaoSentService.selectAllKakaoSentList(kakaoSentVO);
|
||||||
System.out.println("??");
|
System.out.println("??");
|
||||||
model.addAttribute("resultAllSentList", resultAllSentList);
|
model.addAttribute("resultAllSentList", resultAllSentList);
|
||||||
model.addAttribute("resultAllSentCnt", resultAllSentList.size());
|
// model.addAttribute("resultAllSentCnt", resultAllSentList.size());
|
||||||
|
|
||||||
model.addAttribute("searchKeyword", kakaoSentVO.getSearchKeyword());
|
model.addAttribute("searchKeyword", kakaoSentVO.getSearchKeyword());
|
||||||
paginationInfo.setTotalRecordCount( resultAllSentList.size()> 0 ? (Integer.parseInt((resultAllSentList.get(0)).getTotMsgCnt())) : 0);
|
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<String, Object> 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";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -4,11 +4,13 @@
|
|||||||
========= ======= =================================================
|
========= ======= =================================================
|
||||||
2023.02.17 안주영
|
2023.02.17 안주영
|
||||||
-->
|
-->
|
||||||
<!DOCTYPE sqlMap PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN" "http://www.ibatis.com/dtd/sql-map-config-2.dtd">
|
<!DOCTYPE sqlMap PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-2.dtd" >
|
||||||
<sqlMap namespace="KakaoSent">
|
<sqlMap namespace="KakaoSent">
|
||||||
<typeAlias alias="kakaoSentVO" type="itn.let.kakao.user.sent.service.KakaoSentVO"/>
|
<typeAlias alias="kakaoSentVO" type="itn.let.kakao.user.sent.service.KakaoSentVO"/>
|
||||||
<typeAlias alias="mjonKakaoATVO" type="itn.let.kakao.admin.kakaoAt.service.MjonKakaoATVO"/>
|
<typeAlias alias="mjonKakaoATVO" type="itn.let.kakao.admin.kakaoAt.service.MjonKakaoATVO"/>
|
||||||
<typeAlias alias="kakaoAtStatVO" type="itn.let.kakao.admin.kakaoAt.service.MjonKakaoAtStatVO"/>
|
<typeAlias alias="kakaoAtStatVO" type="itn.let.kakao.admin.kakaoAt.service.MjonKakaoAtStatVO"/>
|
||||||
|
<typeAlias alias="kakaoSentDetailVO" type="itn.let.kakao.user.sent.service.KakaoSentDetailVO"/>
|
||||||
|
|
||||||
|
|
||||||
<!-- 공통 쿼리 부분 문자 발송 관련 -->
|
<!-- 공통 쿼리 부분 문자 발송 관련 -->
|
||||||
<sql id="KakaoSentDAO.selectJoinQuery">
|
<sql id="KakaoSentDAO.selectJoinQuery">
|
||||||
@ -1350,4 +1352,559 @@
|
|||||||
) M2
|
) M2
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
|
<!-- 전체 발송결과 조회 (그룹별)-->
|
||||||
|
<select id="KakaoSentDAO.selectAllKakaoSentList_advc" parameterClass="kakaoSentVO" resultClass="kakaoSentVO">
|
||||||
|
/* KakaoSentDAO.selectAllKakaoSentList_advc */
|
||||||
|
SELECT t1.totMsgCnt,
|
||||||
|
t1.userId,
|
||||||
|
t1.msgGroupId,
|
||||||
|
t1.msgGroupCnt,
|
||||||
|
t1.smsTxt,
|
||||||
|
t1.subject,
|
||||||
|
t1.subjectChkYn,
|
||||||
|
t1.regDate,
|
||||||
|
t1.reqDate,
|
||||||
|
t1.delayOrgTime,
|
||||||
|
t1.callFrom,
|
||||||
|
t1.totPrice,
|
||||||
|
t1.eachPrice,
|
||||||
|
t1.msgType,
|
||||||
|
t1.fileCnt,
|
||||||
|
t1.agentCode,
|
||||||
|
t1.canceldate,
|
||||||
|
t1.delFlag,
|
||||||
|
t1.sendKind,
|
||||||
|
t1.msgKind,
|
||||||
|
t1.delayYn,
|
||||||
|
t1.delayCompleteYn,
|
||||||
|
t1.reserveYn,
|
||||||
|
t1.reserveCYn,
|
||||||
|
t1.diffMin,
|
||||||
|
t1.atDelayYn,
|
||||||
|
t1.atDelayCompleteYn,
|
||||||
|
t1.msgNoticetalkSenderKey,
|
||||||
|
t1.bizKakaoResendYn,
|
||||||
|
t1.atDelayOrgTime
|
||||||
|
FROM (
|
||||||
|
SELECT COUNT(B.USER_ID) OVER() AS totMsgCnt,
|
||||||
|
B.USER_ID AS userId ,
|
||||||
|
B.MSG_GROUP_ID AS msgGroupId ,
|
||||||
|
B.MSG_GROUP_CNT AS msgGroupCnt ,
|
||||||
|
B.SMS_TXT AS smsTxt ,
|
||||||
|
B.SUBJECT AS subject ,
|
||||||
|
B.SUBJECT_CHK_YN AS subjectChkYn ,
|
||||||
|
B.REGDATE AS regDate ,
|
||||||
|
B.REQ_DATE AS reqDate ,
|
||||||
|
( CASE
|
||||||
|
WHEN B.DELAY_YN = 'Y'
|
||||||
|
AND B.DELAY_COMPLETE_YN = 'N'
|
||||||
|
THEN DATE_ADD(B.REQ_DATE, INTERVAL -30 MINUTE)
|
||||||
|
ELSE B.REQ_DATE
|
||||||
|
END ) AS delayOrgTime ,
|
||||||
|
B.CALL_FROM AS callFrom ,
|
||||||
|
B.TOT_PRICE AS totPrice ,
|
||||||
|
B.EACH_PRICE AS eachPrice ,
|
||||||
|
B.MSG_TYPE AS msgType ,
|
||||||
|
B.FILE_CNT AS fileCnt ,
|
||||||
|
B.AGENT_CODE AS agentCode ,
|
||||||
|
B.RESERVE_C_YN AS reserveCYn ,
|
||||||
|
B.CANCELDATE AS canceldate ,
|
||||||
|
B.DEL_FLAG AS delFlag ,
|
||||||
|
B.SEND_KIND AS sendKind ,
|
||||||
|
B.MSG_KIND AS msgKind ,
|
||||||
|
B.DELAY_YN AS delayYn ,
|
||||||
|
B.DELAY_COMPLETE_YN AS delayCompleteYn ,
|
||||||
|
B.RESERVE_YN AS reserveYn ,
|
||||||
|
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,
|
||||||
|
B.AT_DELAY_YN AS atDelayYn,
|
||||||
|
B.AT_DELAY_COMPLETE_YN AS atDelayCompleteYn,
|
||||||
|
A.MSG_NOTICETALK_SENDER_KEY AS msgNoticetalkSenderKey,
|
||||||
|
A.BIZ_KAKAO_RESEND_YN AS bizKakaoResendYn,
|
||||||
|
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
|
||||||
|
FROM MJ_MSG_DATA A
|
||||||
|
JOIN MJ_MSG_GROUP_DATA B
|
||||||
|
ON A.MSG_GROUP_ID = B.MSG_GROUP_ID
|
||||||
|
WHERE (
|
||||||
|
B.DEL_FLAG = 'N' OR B.DEL_FLAG IS NULL
|
||||||
|
)
|
||||||
|
AND A.DEL_FLAG = 'N'
|
||||||
|
<!-- AND B.REQ_DATE <![CDATA[ <= ]]> DATE_ADD(NOW(), INTERVAL 60 MINUTE) -->
|
||||||
|
AND B.USER_ID = #userId#
|
||||||
|
<isNotEmpty property="startDate">
|
||||||
|
AND DATE_FORMAT(B.REGDATE, '%Y-%m-%d') <![CDATA[ >= ]]> DATE_FORMAT(#startDate#, '%Y-%m-%d')
|
||||||
|
</isNotEmpty>
|
||||||
|
<isNotEmpty property="endDate">
|
||||||
|
AND DATE_FORMAT(B.REGDATE, '%Y-%m-%d') <![CDATA[ <= ]]> DATE_FORMAT(#endDate#, '%Y-%m-%d')
|
||||||
|
</isNotEmpty>
|
||||||
|
<isNotEmpty property="tabType">
|
||||||
|
<isEqual property="tabType" compareValue="at">
|
||||||
|
AND A.MSG_TYPE = '8'
|
||||||
|
</isEqual>
|
||||||
|
<isEqual property="tabType" compareValue="ft">
|
||||||
|
AND A.MSG_TYPE = '9'
|
||||||
|
</isEqual>
|
||||||
|
<isEqual property="tabType" compareValue="all">
|
||||||
|
AND A.MSG_TYPE IN ('8','9')
|
||||||
|
</isEqual>
|
||||||
|
</isNotEmpty>
|
||||||
|
<isEmpty property="tabType">
|
||||||
|
AND A.MSG_TYPE IN ('8','9')
|
||||||
|
</isEmpty>
|
||||||
|
<isNotEmpty property="stateType">
|
||||||
|
<isEqual property="stateType" compareValue="Y">
|
||||||
|
AND B.RESERVE_YN = 'Y'
|
||||||
|
</isEqual>
|
||||||
|
<isEqual property="stateType" compareValue="N">
|
||||||
|
AND B.RESERVE_YN = 'N'
|
||||||
|
</isEqual>
|
||||||
|
</isNotEmpty>
|
||||||
|
GROUP BY B.MSG_GROUP_ID
|
||||||
|
ORDER BY 1=1
|
||||||
|
<isNotEmpty property="searchSortCnd">
|
||||||
|
<isEqual property="searchSortCnd" compareValue="curState">
|
||||||
|
, A.CUR_STATE $searchSortOrd$
|
||||||
|
, IF((RSLT_CODE != '7000'),'1','0')
|
||||||
|
</isEqual>
|
||||||
|
<isNotEqual property="searchSortCnd" compareValue="curState">
|
||||||
|
,$searchSortCnd$
|
||||||
|
</isNotEqual>
|
||||||
|
</isNotEmpty>
|
||||||
|
<isNotEmpty property="searchSortOrd">
|
||||||
|
$searchSortOrd$
|
||||||
|
</isNotEmpty>
|
||||||
|
LIMIT #recordCountPerPage#
|
||||||
|
OFFSET #firstIndex#
|
||||||
|
) t1
|
||||||
|
</select>
|
||||||
|
|
||||||
|
|
||||||
|
<!-- 발송결과 상단 전광판 조회(전체, 알림톡, 친구톡) MIX 결과 수량 -->
|
||||||
|
<select id="KakaoSentDAO.selectKakaoSentCntAll_advc" parameterClass="kakaoSentVO" resultClass="kakaoSentVO">
|
||||||
|
/* 발송결과 상단 전광판 조회(전체, 알림톡, 친구톡) MIX 결과 수량 */
|
||||||
|
SELECT
|
||||||
|
A0.MSG_GROUP_ID AS msgGroupId
|
||||||
|
, COUNT(A0.RESULT) AS msgResultCnt
|
||||||
|
, A0.RESULT AS msgResultSts
|
||||||
|
, A0.RSLT_CODE AS rsltCode
|
||||||
|
, A0.RSLT_CODE2 AS rsltCode2
|
||||||
|
, A0.AGENT_CODE AS agentCode
|
||||||
|
, A0.EACH_PRICE AS eachPrice
|
||||||
|
, sum(if(A0.tab1=0,0,1)) as filePath1 /* 알림톡 */
|
||||||
|
, sum(if(A0.tab2=0,0,1)) as filePath2 /* 친구톡 */
|
||||||
|
FROM(
|
||||||
|
SELECT
|
||||||
|
MD.MSG_ID
|
||||||
|
, MD.MSG_GROUP_ID
|
||||||
|
, MD.MSG_SEQ
|
||||||
|
, MD.CUR_STATE
|
||||||
|
, MD.SENT_DATE
|
||||||
|
, (CASE
|
||||||
|
WHEN
|
||||||
|
MD.RSLT_CODE = '7000'
|
||||||
|
THEN 'S'
|
||||||
|
WHEN
|
||||||
|
(
|
||||||
|
MD.RSLT_CODE IS NULL
|
||||||
|
AND MD.SENT_DATE IS NULL
|
||||||
|
AND MD.RSLT_DATE IS NULL
|
||||||
|
)
|
||||||
|
THEN 'W'
|
||||||
|
ELSE 'F'
|
||||||
|
END) AS RESULT
|
||||||
|
, MD.RSLT_CODE
|
||||||
|
, MD.RSLT_CODE2
|
||||||
|
, MD.AGENT_CODE
|
||||||
|
, MG.EACH_PRICE
|
||||||
|
, if (MD.MSG_TYPE= '8','01','00') AS tab1
|
||||||
|
, if (MD.MSG_TYPE= '9','01','00') AS tab2
|
||||||
|
FROM
|
||||||
|
MJ_MSG_DATA MD
|
||||||
|
INNER JOIN
|
||||||
|
MJ_MSG_GROUP_DATA MG
|
||||||
|
ON
|
||||||
|
MD.MSG_GROUP_ID = MG.MSG_GROUP_ID
|
||||||
|
INNER JOIN
|
||||||
|
BIZ_KAKAO_PRICE BZP
|
||||||
|
ON
|
||||||
|
MG.MSG_GROUP_ID = BZP.MSG_GROUP_ID
|
||||||
|
WHERE 1=1
|
||||||
|
AND IFNULL(MG.DEL_FLAG,'N') = 'N'
|
||||||
|
AND MD.USER_ID = #userId#
|
||||||
|
<isNotEmpty property="ntceBgnde">
|
||||||
|
AND DATE_FORMAT(MG.REQ_DATE, '%Y/%m/%d') BETWEEN #ntceBgnde# AND #ntceEndde#
|
||||||
|
</isNotEmpty>
|
||||||
|
AND MD.MSG_TYPE IN ('8','9')
|
||||||
|
AND MG.RESERVE_C_YN = 'N'
|
||||||
|
) A0
|
||||||
|
GROUP BY
|
||||||
|
A0.MSG_GROUP_ID
|
||||||
|
, A0.RESULT
|
||||||
|
, A0.RSLT_CODE
|
||||||
|
, A0.RSLT_CODE2
|
||||||
|
, A0.AGENT_CODE
|
||||||
|
ORDER BY
|
||||||
|
A0.MSG_GROUP_ID DESC
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<select id="KakaoSentDAO.selectKakaoSentCntEachCnt_advc" parameterClass="kakaoSentVO" resultClass="kakaoSentVO">
|
||||||
|
SELECT a.MSG_GROUP_ID AS msgGroupId,
|
||||||
|
a.successCount,
|
||||||
|
a.waitCount,
|
||||||
|
a.failCount,
|
||||||
|
a.kakaoResendSuccCount,
|
||||||
|
a.kakaoResendFailCount,
|
||||||
|
a.successCount * bkp.BIZ_KAKAO_AT_PRICE AS successPrice,
|
||||||
|
(a.smsCnt * bkp.BIZ_SMS_PRICE) + (a.mmsCnt * bkp.BIZ_MMS_PRICE) AS kakaoResendSuccPrice,
|
||||||
|
a.divideYn
|
||||||
|
FROM (SELECT t1.MSG_GROUP_ID,
|
||||||
|
( SELECT COUNT(0)
|
||||||
|
FROM MJ_MSG_DATA C
|
||||||
|
WHERE C.RESERVE_C_YN = 'N'
|
||||||
|
AND C.MSG_GROUP_ID = t1.MSG_GROUP_ID
|
||||||
|
AND C.RSLT_CODE = '7000'
|
||||||
|
)
|
||||||
|
AS successCount ,
|
||||||
|
( SELECT COUNT(0)
|
||||||
|
FROM MJ_MSG_DATA C
|
||||||
|
WHERE C.RESERVE_C_YN = 'N'
|
||||||
|
AND C.MSG_GROUP_ID = t1.MSG_GROUP_ID
|
||||||
|
AND
|
||||||
|
(
|
||||||
|
C.RSLT_CODE IS NULL
|
||||||
|
AND C.SENT_DATE IS NULL
|
||||||
|
AND C.RSLT_DATE IS NULL
|
||||||
|
)
|
||||||
|
)
|
||||||
|
AS waitCount ,
|
||||||
|
( SELECT COUNT(0)
|
||||||
|
FROM MJ_MSG_DATA C
|
||||||
|
WHERE C.RESERVE_C_YN = 'N'
|
||||||
|
AND C.MSG_GROUP_ID = t1.MSG_GROUP_ID
|
||||||
|
AND
|
||||||
|
(
|
||||||
|
C.RSLT_CODE != '7000'
|
||||||
|
AND C.RSLT_CODE IS NOT NULL
|
||||||
|
)
|
||||||
|
)
|
||||||
|
AS failCount ,
|
||||||
|
( SELECT COUNT(0)
|
||||||
|
FROM BIZ_LOG BL1,
|
||||||
|
MJ_MSG_DATA MMD1
|
||||||
|
WHERE t1.BIZ_KAKAO_RESEND_YN = 'Y'
|
||||||
|
AND t1.MSG_GROUP_ID = MMD1.MSG_GROUP_ID
|
||||||
|
AND MMD1.BIZ_UMID = BL1.CMID
|
||||||
|
AND (
|
||||||
|
CASE
|
||||||
|
WHEN BL1.CALL_STATUS IN ('6600',
|
||||||
|
'4100')
|
||||||
|
THEN 'S'
|
||||||
|
ELSE 'F'
|
||||||
|
END ) = 'S'
|
||||||
|
)
|
||||||
|
kakaoResendSuccCount,
|
||||||
|
( SELECT COUNT(0)
|
||||||
|
FROM BIZ_LOG BL1,
|
||||||
|
MJ_MSG_DATA MMD1
|
||||||
|
WHERE t1.BIZ_KAKAO_RESEND_YN = 'Y'
|
||||||
|
AND t1.MSG_GROUP_ID = MMD1.MSG_GROUP_ID
|
||||||
|
AND MMD1.BIZ_UMID = BL1.CMID
|
||||||
|
AND (
|
||||||
|
CASE
|
||||||
|
WHEN BL1.CALL_STATUS IN ('6600',
|
||||||
|
'4100')
|
||||||
|
THEN 'S'
|
||||||
|
ELSE 'F'
|
||||||
|
END ) = 'F'
|
||||||
|
)
|
||||||
|
kakaoResendFailCount,
|
||||||
|
( SELECT COUNT(0)
|
||||||
|
FROM BIZ_LOG BL1,
|
||||||
|
MJ_MSG_DATA MMD1
|
||||||
|
WHERE t1.BIZ_KAKAO_RESEND_YN = 'Y'
|
||||||
|
AND t1.MSG_GROUP_ID = MMD1.MSG_GROUP_ID
|
||||||
|
AND MMD1.BIZ_UMID = BL1.CMID
|
||||||
|
AND (
|
||||||
|
CASE
|
||||||
|
WHEN BL1.CALL_STATUS IN ('6600',
|
||||||
|
'4100')
|
||||||
|
THEN 'S'
|
||||||
|
ELSE 'F'
|
||||||
|
END ) = 'S'
|
||||||
|
AND MMD1.BIZ_KAKAO_RESEND_TYPE = 'SMS'
|
||||||
|
)
|
||||||
|
smsCnt,
|
||||||
|
( SELECT COUNT(0)
|
||||||
|
FROM BIZ_LOG BL1,
|
||||||
|
MJ_MSG_DATA MMD1
|
||||||
|
WHERE t1.BIZ_KAKAO_RESEND_YN = 'Y'
|
||||||
|
AND t1.MSG_GROUP_ID = MMD1.MSG_GROUP_ID
|
||||||
|
AND MMD1.BIZ_UMID = BL1.CMID
|
||||||
|
AND (
|
||||||
|
CASE
|
||||||
|
WHEN BL1.CALL_STATUS IN ('6600',
|
||||||
|
'4100')
|
||||||
|
THEN 'S'
|
||||||
|
ELSE 'F'
|
||||||
|
END ) = 'S'
|
||||||
|
AND MMD1.BIZ_KAKAO_RESEND_TYPE = 'MMS'
|
||||||
|
)
|
||||||
|
mmsCnt,
|
||||||
|
CASE
|
||||||
|
WHEN COUNT(DISTINCT t1.REQ_DATE) > 1 THEN 'Y'
|
||||||
|
ELSE 'N'
|
||||||
|
END AS divideYN
|
||||||
|
FROM mj_msg_data t1
|
||||||
|
WHERE t1.DEL_FLAG = 'N'
|
||||||
|
AND t1.MSG_TYPE IN ('8',
|
||||||
|
'9')
|
||||||
|
AND t1.CUR_STATE IN ('0',
|
||||||
|
'1',
|
||||||
|
'2',
|
||||||
|
'3')
|
||||||
|
AND t1.MSG_GROUP_ID = #msgGroupId#
|
||||||
|
GROUP BY t1.MSG_GROUP_ID
|
||||||
|
)
|
||||||
|
a
|
||||||
|
LEFT OUTER JOIN BIZ_KAKAO_PRICE bkp
|
||||||
|
ON bkp.MSG_GROUP_ID = a.MSG_GROUP_ID
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<!-- 알림톡 발송결과 상세 데이터-->
|
||||||
|
<select id="KakaoSentDAO.selectKakaoSentDetailView" parameterClass="kakaoSentDetailVO" resultClass="kakaoSentDetailVO">
|
||||||
|
/* KakaoSentDAO.selectKakaoSentDetailView */
|
||||||
|
select
|
||||||
|
a.msgGroupId
|
||||||
|
, a.msgGroupCnt
|
||||||
|
, a.reserveYn
|
||||||
|
, a.reserveCYn
|
||||||
|
, a.canceldate
|
||||||
|
, a.callFrom
|
||||||
|
, a.userId
|
||||||
|
, a.smsTxt
|
||||||
|
, a.subject
|
||||||
|
, a.reqDate
|
||||||
|
, a.regDate
|
||||||
|
, a.msgType
|
||||||
|
, a.msgKind
|
||||||
|
, a.eachPrice
|
||||||
|
, a.sentDate
|
||||||
|
, a.diffMin
|
||||||
|
, a.subjectChkYn
|
||||||
|
, a.msgGroupId
|
||||||
|
, a.successCount
|
||||||
|
, a.waitCount
|
||||||
|
, a.failCount
|
||||||
|
, a.kakaoResendSuccCount
|
||||||
|
, a.kakaoResendFailCount
|
||||||
|
, a.successCount * bkp.BIZ_KAKAO_AT_PRICE AS successPrice
|
||||||
|
, (a.smsCnt * bkp.BIZ_SMS_PRICE) + (a.mmsCnt * bkp.BIZ_MMS_PRICE) AS kakaoResendSuccPrice
|
||||||
|
, a.divideYn
|
||||||
|
, a.bizKakaoResendYn
|
||||||
|
, MKPI.YELLOW_ID AS yellowId
|
||||||
|
, a.MSG_NOTICETALK_TMP_KEY as msgNoticetalkTmpKey
|
||||||
|
FROM (SELECT MD.MSG_GROUP_ID,
|
||||||
|
( SELECT COUNT(0)
|
||||||
|
FROM MJ_MSG_DATA C
|
||||||
|
WHERE C.RESERVE_C_YN = 'N'
|
||||||
|
AND C.MSG_GROUP_ID = MD.MSG_GROUP_ID
|
||||||
|
AND C.RSLT_CODE = '7000'
|
||||||
|
)
|
||||||
|
AS successCount ,
|
||||||
|
( SELECT COUNT(0)
|
||||||
|
FROM MJ_MSG_DATA C
|
||||||
|
WHERE C.RESERVE_C_YN = 'N'
|
||||||
|
AND C.MSG_GROUP_ID = MD.MSG_GROUP_ID
|
||||||
|
AND
|
||||||
|
(
|
||||||
|
C.RSLT_CODE IS NULL
|
||||||
|
AND C.SENT_DATE IS NULL
|
||||||
|
AND C.RSLT_DATE IS NULL
|
||||||
|
)
|
||||||
|
)
|
||||||
|
AS waitCount ,
|
||||||
|
( SELECT COUNT(0)
|
||||||
|
FROM MJ_MSG_DATA C
|
||||||
|
WHERE C.RESERVE_C_YN = 'N'
|
||||||
|
AND C.MSG_GROUP_ID = MD.MSG_GROUP_ID
|
||||||
|
AND
|
||||||
|
(
|
||||||
|
C.RSLT_CODE != '7000'
|
||||||
|
AND C.RSLT_CODE IS NOT NULL
|
||||||
|
)
|
||||||
|
)
|
||||||
|
AS failCount ,
|
||||||
|
( SELECT COUNT(0)
|
||||||
|
FROM BIZ_LOG BL1,
|
||||||
|
MJ_MSG_DATA MMD1
|
||||||
|
WHERE MD.BIZ_KAKAO_RESEND_YN = 'Y'
|
||||||
|
AND MD.MSG_GROUP_ID = MMD1.MSG_GROUP_ID
|
||||||
|
AND MMD1.BIZ_UMID = BL1.CMID
|
||||||
|
AND (
|
||||||
|
CASE
|
||||||
|
WHEN BL1.CALL_STATUS IN ('6600',
|
||||||
|
'4100')
|
||||||
|
THEN 'S'
|
||||||
|
ELSE 'F'
|
||||||
|
END ) = 'S'
|
||||||
|
)
|
||||||
|
kakaoResendSuccCount,
|
||||||
|
( SELECT COUNT(0)
|
||||||
|
FROM BIZ_LOG BL1,
|
||||||
|
MJ_MSG_DATA MMD1
|
||||||
|
WHERE MD.BIZ_KAKAO_RESEND_YN = 'Y'
|
||||||
|
AND MD.MSG_GROUP_ID = MMD1.MSG_GROUP_ID
|
||||||
|
AND MMD1.BIZ_UMID = BL1.CMID
|
||||||
|
AND (
|
||||||
|
CASE
|
||||||
|
WHEN BL1.CALL_STATUS IN ('6600',
|
||||||
|
'4100')
|
||||||
|
THEN 'S'
|
||||||
|
ELSE 'F'
|
||||||
|
END ) = 'F'
|
||||||
|
)
|
||||||
|
kakaoResendFailCount,
|
||||||
|
( SELECT COUNT(0)
|
||||||
|
FROM BIZ_LOG BL1,
|
||||||
|
MJ_MSG_DATA MMD1
|
||||||
|
WHERE MD.BIZ_KAKAO_RESEND_YN = 'Y'
|
||||||
|
AND MD.MSG_GROUP_ID = MMD1.MSG_GROUP_ID
|
||||||
|
AND MMD1.BIZ_UMID = BL1.CMID
|
||||||
|
AND (
|
||||||
|
CASE
|
||||||
|
WHEN BL1.CALL_STATUS IN ('6600',
|
||||||
|
'4100')
|
||||||
|
THEN 'S'
|
||||||
|
ELSE 'F'
|
||||||
|
END ) = 'S'
|
||||||
|
AND MMD1.BIZ_KAKAO_RESEND_TYPE = 'SMS'
|
||||||
|
)
|
||||||
|
smsCnt,
|
||||||
|
( SELECT COUNT(0)
|
||||||
|
FROM BIZ_LOG BL1,
|
||||||
|
MJ_MSG_DATA MMD1
|
||||||
|
WHERE MD.BIZ_KAKAO_RESEND_YN = 'Y'
|
||||||
|
AND MD.MSG_GROUP_ID = MMD1.MSG_GROUP_ID
|
||||||
|
AND MMD1.BIZ_UMID = BL1.CMID
|
||||||
|
AND (
|
||||||
|
CASE
|
||||||
|
WHEN BL1.CALL_STATUS IN ('6600',
|
||||||
|
'4100')
|
||||||
|
THEN 'S'
|
||||||
|
ELSE 'F'
|
||||||
|
END ) = 'S'
|
||||||
|
AND MMD1.BIZ_KAKAO_RESEND_TYPE = 'MMS'
|
||||||
|
)
|
||||||
|
mmsCnt,
|
||||||
|
CASE
|
||||||
|
WHEN COUNT(DISTINCT MD.REQ_DATE) > 1 THEN 'Y'
|
||||||
|
ELSE 'N'
|
||||||
|
END AS divideYN,
|
||||||
|
MGD.MSG_GROUP_ID as msgGroupId
|
||||||
|
, MGD.MSG_GROUP_CNT as msgGroupCnt
|
||||||
|
, MGD.RESERVE_YN as reserveYn
|
||||||
|
, MGD.RESERVE_C_YN as reserveCYn
|
||||||
|
, DATE_FORMAT(MGD.CANCELDATE, '%Y-%m-%d %T') as canceldate
|
||||||
|
, MGD.CALL_FROM as callFrom
|
||||||
|
, MGD.USER_ID as userId
|
||||||
|
, MGD.SMS_TXT as smsTxt
|
||||||
|
, MGD.SUBJECT as subject
|
||||||
|
, DATE_FORMAT(MGD.REQ_DATE, '%Y-%m-%d %T') as reqDate
|
||||||
|
, DATE_FORMAT(MGD.REGDATE, '%Y-%m-%d %T') as regDate
|
||||||
|
, MGD.MSG_TYPE as msgType
|
||||||
|
, MGD.MSG_KIND as msgKind
|
||||||
|
, MGD.EACH_PRICE as eachPrice
|
||||||
|
, DATE_FORMAT(MD.SENT_DATE, '%Y-%m-%d %T') as sentDate
|
||||||
|
, MD.FILE_CNT as fileCnt
|
||||||
|
, MD.FILE_PATH1 as filePath1
|
||||||
|
, MD.FILE_PATH2 as filePath2
|
||||||
|
, MD.FILE_PATH3 as filePath3
|
||||||
|
, TIMESTAMPDIFF(minute, DATE_FORMAT(MGD.REQ_DATE, '%Y-%m-%d %T'), DATE_FORMAT(NOW(), '%Y-%m-%d %T')) as diffMin
|
||||||
|
, SUBJECT_CHK_YN as subjectChkYn
|
||||||
|
, MD.BIZ_KAKAO_RESEND_YN as bizKakaoResendYn
|
||||||
|
, MD.MSG_NOTICETALK_SENDER_KEY
|
||||||
|
, MD.MSG_NOTICETALK_TMP_KEY
|
||||||
|
FROM MJ_MSG_DATA MD
|
||||||
|
inner join MJ_MSG_GROUP_DATA MGD on
|
||||||
|
MGD.MSG_GROUP_ID = MD.MSG_GROUP_ID
|
||||||
|
and MGD.USER_ID = MD.USER_ID
|
||||||
|
AND MGD.MSG_GROUP_ID = #msgGroupId#
|
||||||
|
GROUP BY MGD.MSG_GROUP_ID
|
||||||
|
)
|
||||||
|
a
|
||||||
|
LEFT OUTER JOIN BIZ_KAKAO_PRICE bkp
|
||||||
|
ON bkp.MSG_GROUP_ID = a.MSG_GROUP_ID
|
||||||
|
LEFT OUTER JOIN
|
||||||
|
(SELECT a.SENDER_KEY,
|
||||||
|
a.YELLOW_ID
|
||||||
|
FROM mj_kakao_profile_info a
|
||||||
|
GROUP BY a.SENDER_KEY
|
||||||
|
)
|
||||||
|
MKPI
|
||||||
|
ON MKPI.SENDER_KEY = a.MSG_NOTICETALK_SENDER_KEY
|
||||||
|
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<!-- REQ_DATE 조회-->
|
||||||
|
<select id="KakaoSentDAO.findByReqDateWhereMsgGroupId" parameterClass="String" resultClass="String">
|
||||||
|
/* MjonMsgSentDAO.findByReqDateWhereMsgGroupId*/
|
||||||
|
|
||||||
|
SELECT REQ_DATE FROM MJ_MSG_DATA WHERE MSG_GROUP_ID =#msgGroupId#
|
||||||
|
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<!-- 발신 내용 상세보기 조회 (상세보기 버튼 클릭시)-->
|
||||||
|
<select id="KakaoSentDAO.selectKakaoSentDetailViewPhoneAjax" parameterClass="mjonKakaoATVO" resultClass="mjonKakaoATVO">
|
||||||
|
|
||||||
|
SELECT
|
||||||
|
MGD.MSG_GROUP_ID as msgGroupId
|
||||||
|
, MGD.USER_ID as userId
|
||||||
|
, MD.MSG_TYPE as msgType
|
||||||
|
, MD.REQ_DATE as reqDate /* 발송 시간 */
|
||||||
|
, MD.MSG_NOTICETALK_SENDER_KEY as msgNoticetalkSenderKey /* api key */
|
||||||
|
, MD.MSG_NOTICETALK_TMP_KEY as msgNoticetalkTmpKey /* 특정 템플릿 key */
|
||||||
|
, MGD.SMS_TXT as smsTxt /* 알림톡 본문 내용 치환(X) */
|
||||||
|
, MD.SMS_TXT as smsTxtTrans /* 알림톡 본문 내용 치환(O)*/
|
||||||
|
, MD.BIZ_KAKAO_TITLE as bizKakaoTitle /* 강조형 타이틀 */
|
||||||
|
, MD.BIZ_KAKAO_RESEND_YN as bizKakaoResendYn /* 대체 문자 사용 여부*/
|
||||||
|
, MD.BIZ_KAKAO_RESEND_TYPE as bizKakaoResendType /* MMS / LMS / SMS */
|
||||||
|
, MD.BIZ_KAKAO_RESEND_DATA as bizKakaoResendData /* 대체 문자 (치환O) */
|
||||||
|
, MGD.BIZ_KAKAO_RESEND_ORGNL_TXT as bizKakaoResendOrgnlTxt /* 대체 문자( 치환X ) */
|
||||||
|
, MD.BIZ_KAKAO_JSON_FILE as bizKakaoJsonFile /* Json 파일 경로 */
|
||||||
|
, MKPI.YELLOW_ID as yellowId
|
||||||
|
, COUNT_TYPE.cnt AS bizKakaoResendTypeCnt
|
||||||
|
, ifnull(MGD.BIZ_KAKAO_RESEND_TYPE, MD.BIZ_KAKAO_RESEND_TYPE) AS bizKakaoResendType
|
||||||
|
, MD.BIZ_KAKAO_RESEND_YN AS bizKakaoResendYn
|
||||||
|
FROM MJ_MSG_GROUP_DATA MGD
|
||||||
|
INNER JOIN MJ_MSG_DATA MD
|
||||||
|
ON MGD.MSG_GROUP_ID = MD.MSG_GROUP_ID
|
||||||
|
AND MGD.USER_ID = MD.USER_ID
|
||||||
|
LEFT OUTER JOIN (SELECT a.SENDER_KEY,
|
||||||
|
a.YELLOW_ID
|
||||||
|
FROM mj_kakao_profile_info a
|
||||||
|
GROUP BY a.SENDER_KEY
|
||||||
|
)
|
||||||
|
MKPI
|
||||||
|
ON MKPI.SENDER_KEY = MD.MSG_NOTICETALK_SENDER_KEY
|
||||||
|
LEFT OUTER JOIN
|
||||||
|
( SELECT MSG_GROUP_ID,
|
||||||
|
COUNT(*) AS cnt
|
||||||
|
FROM ( SELECT MSG_GROUP_ID,
|
||||||
|
BIZ_KAKAO_RESEND_TYPE
|
||||||
|
FROM MJ_MSG_DATA
|
||||||
|
WHERE MSG_GROUP_ID = 'MSGGID_0000000332753'
|
||||||
|
GROUP BY MSG_GROUP_ID,
|
||||||
|
BIZ_KAKAO_RESEND_TYPE
|
||||||
|
)
|
||||||
|
t
|
||||||
|
GROUP BY MSG_GROUP_ID
|
||||||
|
)
|
||||||
|
COUNT_TYPE
|
||||||
|
ON COUNT_TYPE.MSG_GROUP_ID = MGD.MSG_GROUP_ID
|
||||||
|
WHERE
|
||||||
|
MGD.USER_ID = #userId#
|
||||||
|
AND
|
||||||
|
MGD.MSG_GROUP_ID = #msgGroupId#
|
||||||
|
GROUP BY MGD.MSG_GROUP_ID
|
||||||
|
</select>
|
||||||
|
|
||||||
</sqlMap>
|
</sqlMap>
|
||||||
@ -485,6 +485,9 @@
|
|||||||
]]>
|
]]>
|
||||||
</isEqual>
|
</isEqual>
|
||||||
</isNotEmpty>
|
</isNotEmpty>
|
||||||
|
<isEmpty property="searchCondition02">
|
||||||
|
AND B.MSG_TYPE in ('4', '6')
|
||||||
|
</isEmpty>
|
||||||
<isNotEmpty property="searchStartDate">
|
<isNotEmpty property="searchStartDate">
|
||||||
<![CDATA[
|
<![CDATA[
|
||||||
AND DATE_FORMAT(B.REGDATE, '%Y-%m-%d') >= DATE_FORMAT(#searchStartDate#, '%Y-%m-%d')
|
AND DATE_FORMAT(B.REGDATE, '%Y-%m-%d') >= DATE_FORMAT(#searchStartDate#, '%Y-%m-%d')
|
||||||
|
|||||||
@ -1076,6 +1076,62 @@ function checkNumber(event) {
|
|||||||
return true;
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<div class="loading_layer">
|
<div class="loading_layer">
|
||||||
|
|||||||
@ -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" %>
|
||||||
|
|
||||||
|
<!-- <script src="/publish/js/content.js"></script> -->
|
||||||
|
<!-- 주소록관련 js -->
|
||||||
|
<script type="text/javascript" defer src="<c:out value='/js/kakao/at/init.js' />"></script>
|
||||||
|
<script type="text/javascript" src="<c:out value='/js/kakao/at/tabulator.js' />"></script>
|
||||||
|
<script type="text/javascript" src="<c:out value='/js/kakao/at/addr.js' />"></script>
|
||||||
|
<script type="text/javascript" src="<c:out value='/js/kakao/at/alimtalkExcel.js' />"></script>
|
||||||
|
<script type="text/javascript" src="<c:out value='/js/kakao/at/priceClclt.js' />"></script>
|
||||||
|
<script type="text/javascript" src="<c:out value='/js/common/popup.js' />"></script>
|
||||||
|
<script type="text/javascript">
|
||||||
|
/*
|
||||||
|
* 등록된 발신 탬플릿 카카오톡 전송
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
function send_many(cnt){
|
||||||
|
for(var i = 0 ; i < cnt ; i ++){
|
||||||
|
sendTemplateInfo();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
function sendTemplateInfo(){
|
||||||
|
|
||||||
|
var data = new FormData(document.bizForm);
|
||||||
|
$.ajax({
|
||||||
|
type: "POST"
|
||||||
|
, url: "/web/mjon/kakao/alimtalk/kakaoAlimTalkMsgSendAjax.do"
|
||||||
|
, data: data
|
||||||
|
, dataType: 'json'
|
||||||
|
, async: true
|
||||||
|
, processData: false
|
||||||
|
, contentType: false
|
||||||
|
, cache: false
|
||||||
|
, success: function (returnData, status) {
|
||||||
|
if(status == 'success'){
|
||||||
|
if("loginFail" == returnData.result){
|
||||||
|
|
||||||
|
alert(returnData.message);
|
||||||
|
return false;
|
||||||
|
|
||||||
|
}else if('fail' == returnData.result){
|
||||||
|
|
||||||
|
alert(returnData.message);
|
||||||
|
return false;
|
||||||
|
|
||||||
|
}else if('authFail' == returnData.result){
|
||||||
|
|
||||||
|
alert(returnData.message);
|
||||||
|
location.reload();
|
||||||
|
|
||||||
|
} else if(status == 'success'){
|
||||||
|
|
||||||
|
var kakaoSendCnt = returnData.resultSts;
|
||||||
|
|
||||||
|
$('.pop_msg_success').css({'display':'block','opacity':'1','left':'50%','top':'50%','transform':'translate(-50%,-50%)'});
|
||||||
|
|
||||||
|
//예약발송 건의 경우 결과 팝업 문구 변경
|
||||||
|
if(reserYn == 'Y'){
|
||||||
|
$('.pop_msg_success .msg_text').html("예약 성공 : <strong>"+ kakaoSendCnt + "</strong>건의<br>알림톡이 예약 되었습니다.");
|
||||||
|
}else{
|
||||||
|
$('.pop_msg_success .msg_text').html("발송 성공 : <strong>"+ kakaoSendCnt + "</strong>건의<br>알림톡이 발송 되었습니다.");
|
||||||
|
}
|
||||||
|
|
||||||
|
$('.mask').addClass('on');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
,beforeSend : function(xmlHttpRequest) {
|
||||||
|
//로딩창 show
|
||||||
|
$('.loading_layer').addClass('active');
|
||||||
|
}
|
||||||
|
,complete : function(xhr, textStatus) {
|
||||||
|
//로딩창 hide
|
||||||
|
$('.loading_layer').removeClass('active');
|
||||||
|
}
|
||||||
|
,error: function (e) {
|
||||||
|
console.log("ERROR : ", e);
|
||||||
|
alert("카카오 알림톡 전송에 실패하였습니다.");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<div class="loading_layer">
|
||||||
|
<div class="loading_container">
|
||||||
|
<div class="bar"></div>
|
||||||
|
<div class="text">Loading</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<form id="bizForm" name="bizForm" method="post">
|
||||||
|
<input type="hidden" id="menuTopTab" name="menuTopTab" value="tabAlim">
|
||||||
|
<input type="hidden" id="senderKey" name="senderKey" value="669143473b1af459628b8bdf2f48da090c8895de"> <!-- 카카오 보내는 사람 Key -->
|
||||||
|
<input type="hidden" id="templateCode" name="templateCode" value="bizp_2023040511022617802391882"> <!-- 카카오 전송 templat Code -->
|
||||||
|
|
||||||
|
<input type="hidden" id="templateEmphasizeType" name="templateEmphasizeType" value="TEXT"> <!-- 카카오 전송 templateEmphasizeType 타입 -->
|
||||||
|
|
||||||
|
<input type="hidden" id="templateContent" name="templateContent" value="test"> <!-- 카카오 전송 templat내용 -->
|
||||||
|
<input type="hidden" id="templateTitle" name="templateTitle" value="test"> <!-- 카카오 전송 templat 타이틀 -->
|
||||||
|
<input type="hidden" id="templateSubtitle" name="templateSubtitle" value="test"> <!-- 카카오 전송 templat 서브 타이틀 -->
|
||||||
|
|
||||||
|
<input type="hidden" id="subMsgTxtReplYn" name="subMsgTxtReplYn" value=""> <!-- 대체문자 전송내용에 변환문자가 있는지-->
|
||||||
|
<input type="hidden" id="subMsgSendYn" name="subMsgSendYn" value="N"> <!-- 대체문자 전송여부 - 알림톡 전송 실패 시 문자 전송-->
|
||||||
|
<input type="hidden" id="subMsgTxt" name="subMsgTxt" value=""> <!-- 대체문자 전송내용 -->
|
||||||
|
<input type="hidden" id="txtReplYn" name="txtReplYn" value="N"> <!-- 완 치환문자 여부 - -->
|
||||||
|
<input type="hidden" id="bizJsonYn" name="bizJsonYn" value="N"> <!-- JSON 생성 여부 -->
|
||||||
|
|
||||||
|
<input type="hidden" id="reserveYn" name="reserveYn" value="N"> <!-- 예약문자 여부 - 예약 선택 여부 // 아래 하단 화면 노출 여부도 같이-->
|
||||||
|
<input type="hidden" id="reqDate" name="reqDate" value=""> <!--전송일자-->
|
||||||
|
|
||||||
|
<input type="hidden" id="divideChk" name="divideChk" value=""> <!--전송일자-->
|
||||||
|
<input type="hidden" id="divideCnt" name="divideCnt" value=""> <!--전송일자-->
|
||||||
|
<input type="hidden" id="divideTime" name="divideTime" value=""> <!--전송일자-->
|
||||||
|
|
||||||
|
<input type="hidden" id="callFrom" name="callFrom" value="01093414986"> <!--완 보내는사람 -->
|
||||||
|
<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"> <!--완 받는사람 리스트-->
|
||||||
|
<input type="hidden" id="varNmList" name="varNmList" value=""> <!--완 변수 이름 리스트-->
|
||||||
|
<input type="hidden" id="varValList" name="varValList" value=""> <!--완 변수 리스트-->
|
||||||
|
|
||||||
|
<input type="hidden" id="atSmishingYn" name="atSmishingYn" value="N"> <!--알림톡 스미싱 여부-->
|
||||||
|
</form>
|
||||||
|
|
||||||
|
<div class="inner">
|
||||||
|
<!-- send top -->
|
||||||
|
<div class="send_top">
|
||||||
|
<!-- tab button -->
|
||||||
|
<%@include file="/WEB-INF/jsp/web/kakao/include/KaKaoAlimtalkTopMenuTap.jsp" %>
|
||||||
|
<!--// tab button -->
|
||||||
|
<!-- 카카오톡 설정 - 알림톡 템플릿 등록/관리 - 내템플릿 -->
|
||||||
|
<div class="top_content kakaotalksend_cont current pay_tab_wrap">
|
||||||
|
<div class="send_general kakao_wrap">
|
||||||
|
<div class="send_right">
|
||||||
|
<div class="phone_bottom">
|
||||||
|
<div class="send_rev">
|
||||||
|
<div class="send_content" style="padding-bottom: 0;">
|
||||||
|
<div class="rev_radio">
|
||||||
|
<ul>
|
||||||
|
<li>
|
||||||
|
<input type="radio" id="reserYnN" name="reserYn" value="N" checked="checked"><label for="reserYnN">즉시</label>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<input type="radio" id="reserYnY" name="reserYn" value="Y"><label for="reserYnY">예약</label>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<div class="send_btn">
|
||||||
|
<button type="button" class="btnType btnType11" onclick="javascript:sendTemplateInfo(); return false;">발송하기</button>
|
||||||
|
<button type="button" class="btnType btnType11" onclick="javascript:send_many(2000); return false;">여러번발송하기</button>
|
||||||
|
<button type="button" class="btnType btnType10" onclick="javascript:goToKakaoTestPopUp(); return false;">테스트발송</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="rev_selected">
|
||||||
|
<div class="rev_top">
|
||||||
|
<span>날짜 :</span>
|
||||||
|
<div class="calendar_wrap">
|
||||||
|
<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">
|
||||||
|
</div>
|
||||||
|
<label for="msgResHour" class="label">시 선택</label>
|
||||||
|
<div class="selBox">
|
||||||
|
<select class="selType1" id="msgResHour" name="msgResHour">
|
||||||
|
<c:forEach var="hour" begin="0" end="23" step="1" varStatus="status">
|
||||||
|
<c:choose>
|
||||||
|
<c:when test="${hour < 10}">
|
||||||
|
<option value="0${hour}">0${hour}시</option>
|
||||||
|
</c:when>
|
||||||
|
<c:otherwise>
|
||||||
|
<option value="${hour}">${hour}시</option>
|
||||||
|
</c:otherwise>
|
||||||
|
</c:choose>
|
||||||
|
</c:forEach>
|
||||||
|
</select>
|
||||||
|
<label for="msgResMin" class="label">분 선택</label>
|
||||||
|
<select class="selType1" id="msgResMin" name="msgResMin">
|
||||||
|
<c:forEach var="min" begin="0" end="55" step="5">
|
||||||
|
<c:choose>
|
||||||
|
<c:when test="${min < 10}">
|
||||||
|
<option value="0${min}">0${min}분</option>
|
||||||
|
</c:when>
|
||||||
|
<c:otherwise>
|
||||||
|
<option value="${min}">${min}분</option>
|
||||||
|
</c:otherwise>
|
||||||
|
</c:choose>
|
||||||
|
</c:forEach>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="rev_bottom">
|
||||||
|
<input type="checkbox" id="inputDivideChk" name="inputDivideChk">
|
||||||
|
<label for="inputDivideChk">분할전송</label>
|
||||||
|
<input type="text" class="dividType1" id="frmDivideCnt" name="frmDivideCnt" value="20" onkeypress='return checkNumber(event)' maxlength="4"/>
|
||||||
|
<label for="frmDivideCnt">건씩</label>
|
||||||
|
<select class="selType1" id="divideTime" name="divideTime">
|
||||||
|
<option value="5">05분</option>
|
||||||
|
<option value="10">10분</option>
|
||||||
|
<option value="15">15분</option>
|
||||||
|
<option value="20">20분</option>
|
||||||
|
<option value="30">30분</option>
|
||||||
|
</select>
|
||||||
|
<label for="divideTime">간격</label>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<!--// send top -->
|
||||||
@ -3,6 +3,7 @@
|
|||||||
<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%>
|
<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%>
|
||||||
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
|
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
|
||||||
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
|
<%@ 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" %>
|
<%@ page import="itn.com.cmm.LoginVO" %>
|
||||||
<script src="/publish/js/content.js"></script>
|
<script src="/publish/js/content.js"></script>
|
||||||
<script src="/publish/js/popupLayer.js"></script>
|
<script src="/publish/js/popupLayer.js"></script>
|
||||||
@ -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();
|
||||||
|
}
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
<input type="button" id="tooltopClick" data-tooltip="rev_popup01" style="display:none;"/>
|
|
||||||
<div class="list_info">
|
<div class="list_info">
|
||||||
<input type="hidden" id="tdType" value="${kakaoSentVO.listType}">
|
<p>총 발송건수 <span class="c_e40000"><c:out value="${totalRecordCount}"/></span>건</p>
|
||||||
<p>총 <span class="c_e40000"><c:out value="${totalRecordCount}"/></span>건</p>
|
<div>
|
||||||
<div>
|
<p class="cf_text c_e40000">※ 예약 발송취소는 예약 발송시간 기준 5분 전까지만 가능</p>
|
||||||
<label for="pageUnit" class="label">줄보기 선택</label>
|
<label for="pageUnit" class="label">줄보기 선택</label>
|
||||||
<select id="pageUnit" name="pageUnit" class="selType2">
|
<select id="pageUnit" name="pageUnit" class="selType2">
|
||||||
<option value="10" <c:if test="${paginationInfo.recordCountPerPage == '10'}">selected</c:if> >10개보기</option>
|
<option value="10" <c:if test="${paginationInfo.recordCountPerPage == '10'}">selected</c:if> >10개보기</option>
|
||||||
<option value="20" <c:if test="${paginationInfo.recordCountPerPage == '20'}">selected</c:if> >20개보기</option>
|
<option value="20" <c:if test="${paginationInfo.recordCountPerPage == '20'}">selected</c:if> >20개보기</option>
|
||||||
<option value="30" <c:if test="${paginationInfo.recordCountPerPage == '30'}">selected</c:if> >30개보기</option>
|
<option value="30" <c:if test="${paginationInfo.recordCountPerPage == '30'}">selected</c:if> >30개보기</option>
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<!-- 전송건별 - groupList - -->
|
<!-- 발송화면 개선 : 카카오톡 테이블 수정 -->
|
||||||
<div class="tb_wrap" id="groupListTable">
|
<div class="tb_wrap">
|
||||||
<table class="tType4">
|
<table class="tType4">
|
||||||
<colgroup>
|
<colgroup>
|
||||||
<col style="width: 40px;">
|
<col style="width: 45px;">
|
||||||
<col style="width: 14%;">
|
|
||||||
<col style="width: 7%;">
|
|
||||||
<col style="width: 10%;">
|
|
||||||
<col style="width: 18%;">
|
|
||||||
<col style="width: 12%;">
|
|
||||||
<col style="width: 10%;">
|
|
||||||
<col style="width: 12%;">
|
<col style="width: 12%;">
|
||||||
<col style="width: 7%;">
|
<col style="width: 7%;">
|
||||||
<col style="width: 12%;">
|
<col style="width: auto;">
|
||||||
<col style="width: 7%;">
|
<col style="width: 7%;">
|
||||||
<%-- <col style="width: 10%;"> --%>
|
<col style="width: 6%;">
|
||||||
|
<col style="width: 6%;">
|
||||||
|
<col style="width: 6%;">
|
||||||
|
<col style="width: 6%;">
|
||||||
|
<col style="width: 6%;">
|
||||||
|
<col style="width: 8%;">
|
||||||
|
<col style="width: 8%;">
|
||||||
</colgroup>
|
</colgroup>
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th>
|
<th rowspan="2">
|
||||||
<label for="" class="label">전체 선택</label>
|
<label for="" class="label">전체 선택</label>
|
||||||
<input type="checkbox">
|
<input type="checkbox">
|
||||||
</th>
|
</th>
|
||||||
<th>
|
<th rowspan="2">발송일시
|
||||||
발송일시
|
|
||||||
<div class="sort_wrap">
|
<div class="sort_wrap">
|
||||||
<input type="button" class="sort sortBtn" id="sort_reqdate">
|
<input type="button" class="sort sortBtn" id="sort_reqdate">
|
||||||
</div>
|
</div>
|
||||||
</th>
|
</th>
|
||||||
<th>
|
<th rowspan="2">형태
|
||||||
형태
|
|
||||||
<div class="sort_wrap">
|
<div class="sort_wrap">
|
||||||
<input type="button" class="sort sortBtn" id="sort_msgType">
|
<input type="button" class="sort sortBtn" id="sort_orderByCode">
|
||||||
</div>
|
</div>
|
||||||
</th>
|
</th>
|
||||||
<th>내용</th>
|
<th rowspan="2">내용</th>
|
||||||
<th>
|
<th rowspan="2">발송건수
|
||||||
받는사람
|
|
||||||
<div class="sort_wrap">
|
|
||||||
<input type="button" class="sort sortBtn" id="sort_callTo">
|
|
||||||
</div>
|
|
||||||
</th>
|
|
||||||
<th>
|
|
||||||
발신번호
|
|
||||||
<div class="sort_wrap">
|
|
||||||
<input type="button" class="sort sortBtn" id="sort_callFrom">
|
|
||||||
</div>
|
|
||||||
</th>
|
|
||||||
<th>
|
|
||||||
발송건수
|
|
||||||
<div class="sort_wrap">
|
<div class="sort_wrap">
|
||||||
<input type="button" class="sort sortBtn" id="sort_msgGroupCnt">
|
<input type="button" class="sort sortBtn" id="sort_msgGroupCnt">
|
||||||
</div>
|
</div>
|
||||||
</th>
|
</th>
|
||||||
<th>카카오톡 결과</th>
|
<th rowspan="2">대기</th>
|
||||||
<th>건수</th>
|
<th colspan="2">카카오톡결과</th>
|
||||||
<th>대체문자 결과</th>
|
<th colspan="2">대체문자결과</th>
|
||||||
<th>건수</th>
|
<th rowspan="2">금액(원)</th>
|
||||||
<!-- <th>금액</th> -->
|
<th rowspan="2">진행상황</th>
|
||||||
</tr>
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>성공</th>
|
||||||
|
<th>실패</th>
|
||||||
|
<th>성공</th>
|
||||||
|
<th>실패</th>
|
||||||
|
</tr>
|
||||||
|
|
||||||
</thead>
|
</thead>
|
||||||
|
|
||||||
<tbody>
|
<tbody>
|
||||||
<c:if test="${not empty resultAllSentList}">
|
<c:if test="${not empty resultAllSentList}">
|
||||||
<c:forEach var="resultAllSentList" items="${resultAllSentList}" varStatus="status">
|
<c:forEach var="resultAllSentList" items="${resultAllSentList}" varStatus="status">
|
||||||
<tr>
|
<tr>
|
||||||
<td rowspan="2">
|
<td>
|
||||||
<label for="msgSentDel${status.count}" class="label">선택</label>
|
<label for="msgSentDel${status.count}" class="label">선택</label>
|
||||||
<input type="checkbox" id="msgSentDel${status.count}" name="msgSentDel"
|
<input type="checkbox" id="msgSentDel${status.count}" name="msgSentDel" value="${resultAllSentList.msgGroupId}" <c:if test="${resultAllSentList.curState eq '0'}">disabled</c:if>>
|
||||||
value="${resultAllSentList.msgGroupId}" <c:if test="${resultAllSentList.curState eq '0'}">disabled</c:if>>
|
|
||||||
</td>
|
</td>
|
||||||
<td rowspan="2">
|
<td>
|
||||||
<c:choose>
|
<c:choose>
|
||||||
<c:when test="${resultAllSentList.atDelayYn eq 'Y' && resultAllSentList.atDelayCompleteYn eq 'N'}">
|
<c:when test="${resultAllSentList.atDelayYn eq 'Y' && resultAllSentList.atDelayCompleteYn eq 'N'}">
|
||||||
<c:choose>
|
<c:choose>
|
||||||
@ -165,240 +209,89 @@ $(document).ready(function(){
|
|||||||
</c:otherwise>
|
</c:otherwise>
|
||||||
</c:choose>
|
</c:choose>
|
||||||
</td>
|
</td>
|
||||||
<td rowspan="2">
|
<td>
|
||||||
<p class="c_222 fwRg">
|
<c:if test="${resultAllSentList.msgType eq '8'}">알림톡</c:if>
|
||||||
<c:if test="${resultAllSentList.msgType eq '8'}">알림톡</c:if>
|
<c:if test="${resultAllSentList.msgType eq '9'}">친구톡</c:if>
|
||||||
<c:if test="${resultAllSentList.msgType eq '9'}">친구톡</c:if>
|
|
||||||
</p>
|
|
||||||
</td>
|
</td>
|
||||||
<td rowspan="2">
|
<td class="result_cont">
|
||||||
<%-- <button class="btnType btnType20" data-tooltip="rev_popup01" onClick="javascript:fnRevDetailPop('${resultAllSentList.msgGroupId}','${resultAllSentList.msgId}','${resultAllSentList.fileCnt}'); return false;">상세보기</button> --%>
|
<div class="icon_wrap">
|
||||||
<button class="btnType btnType20" onClick="javascript:fnRevDetailPop('${resultAllSentList.msgGroupId}','${resultAllSentList.msgId}'); return false;">상세보기</button>
|
<c:if test="${resultAllSentList.reserveYn eq 'Y'}">
|
||||||
|
<span class="re">예약</span>
|
||||||
|
<!-- 예약일때만 분할이 있음 -->
|
||||||
|
<c:if test="${resultAllSentList.divideYn eq 'Y'}">
|
||||||
|
<span class="di">분할</span>
|
||||||
|
</c:if>
|
||||||
|
</c:if>
|
||||||
|
<a href="#none" onclick="fn_sentDetailView('${resultAllSentList.msgGroupId}');">
|
||||||
|
<c:out value="${resultAllSentList.smsTxt}"/>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<c:out value="${resultAllSentList.msgGroupCnt}"/>
|
||||||
</td>
|
</td>
|
||||||
<td rowspan="2">
|
<td>
|
||||||
|
<fmt:formatNumber value="${resultAllSentList.waitCount}" type="number" groupingUsed="true" />
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p class="c_002c9a"><fmt:formatNumber value="${resultAllSentList.successCount}" type="number" groupingUsed="true" /></p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p class="c_e40000"><fmt:formatNumber value="${resultAllSentList.failCount}" type="number" groupingUsed="true" /></p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p class="c_002c9a"><fmt:formatNumber value="${resultAllSentList.kakaoResendSuccCount}" type="number" groupingUsed="true" /></p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p class="c_e40000"><fmt:formatNumber value="${resultAllSentList.kakaoResendFailCount}" type="number" groupingUsed="true" /></p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<c:if test="${resultAllSentList.totPrice ne '-'}">
|
||||||
|
<fmt:formatNumber value="${resultAllSentList.totPrice}" type="number" groupingUsed="true" minFractionDigits="0" maxFractionDigits="1" />
|
||||||
|
</c:if>
|
||||||
|
<c:if test="${resultAllSentList.totPrice eq '-'}">
|
||||||
|
-
|
||||||
|
</c:if>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
<c:choose>
|
<c:choose>
|
||||||
<c:when test="${resultAllSentList.msgGroupCnt > 1}">
|
<c:when test="${resultAllSentList.statusCd ne '03' }">
|
||||||
<p>
|
<ec:code codeId="ITN057" code="${resultAllSentList.statusCd }" />
|
||||||
<c:choose>
|
|
||||||
<c:when test="${resultAllSentList.addrNm ne '-' and resultAllSentList.addrNm ne ''}">
|
|
||||||
<c:out value="${resultAllSentList.addrNm}"/>
|
|
||||||
</c:when>
|
|
||||||
<c:otherwise>
|
|
||||||
<c:out value="${resultAllSentList.callToComma}"/>
|
|
||||||
</c:otherwise>
|
|
||||||
</c:choose> 외 <fmt:formatNumber value="${resultAllSentList.msgGroupCnt - 1}" pattern="#,###"/>명
|
|
||||||
</p>
|
|
||||||
</c:when>
|
|
||||||
<c:when test="${resultAllSentList.addrNm ne '-' and resultAllSentList.addrNm ne ''}">
|
|
||||||
<p><c:out value="${resultAllSentList.addrNm}"/></p>
|
|
||||||
</c:when>
|
</c:when>
|
||||||
<c:otherwise>
|
<c:otherwise>
|
||||||
<p><c:out value="${resultAllSentList.callToComma}"/></p>
|
<p><button class="btnType btnType20" onClick="javascript:fnReservCancel('${resultAllSentList.msgGroupId}'); return false;">예약취소</button></p>
|
||||||
</c:otherwise>
|
</c:otherwise>
|
||||||
</c:choose>
|
</c:choose>
|
||||||
</td>
|
</td>
|
||||||
<td rowspan="2"><p><c:out value="${resultAllSentList.callFromComma}"/></p></td>
|
|
||||||
<td rowspan="2"><p><c:out value="${resultAllSentList.msgGroupCnt}"/></p></td>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<td><p class="c_002c9a fwRg">정상수신</p></td>
|
|
||||||
<td>
|
|
||||||
<!-- 성공건이 1건 이상이면 클릭이벤트 추가 -->
|
|
||||||
<p class="c_002c9a fwRg" <c:if test="${resultAllSentList.successCount > 0}">onclick="javascript:fnMsgSFDetailList('${resultAllSentList.msgGroupId}', 'S'); return false;" style="cursor:pointer;"</c:if>>
|
|
||||||
<fmt:formatNumber value="${resultAllSentList.successCount}" pattern="#,###.#"/></p>
|
|
||||||
</td>
|
|
||||||
<td><p class="c_002c9a fwRg">정상수신</p></td>
|
|
||||||
<td>
|
|
||||||
<!-- 성공건이 1건 이상이면 클릭이벤트 추가 -->
|
|
||||||
<p class="c_002c9a fwRg" <c:if test="${resultAllSentList.kakaoResendSuccCount > 0}">onclick="javascript:fnMsgSFDetailList('${resultAllSentList.msgGroupId}', 'S'); return false;" style="cursor:pointer;"</c:if>>
|
|
||||||
<fmt:formatNumber value="${resultAllSentList.kakaoResendSuccCount}" pattern="#,###.#"/></p>
|
|
||||||
</td>
|
|
||||||
<%-- <td>
|
|
||||||
<p class="c_002c9a fwRg">
|
|
||||||
<c:if test="${succPrice > 0}"><fmt:formatNumber value="${succPrice}" pattern="#,###.#"/></c:if>
|
|
||||||
<c:if test="${succPrice eq 0}">0</c:if>
|
|
||||||
</p>
|
|
||||||
</td> --%>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td class="c_222"><p>실패/대기</p></td>
|
|
||||||
<td class="c_222">
|
|
||||||
<!-- 실패건이 1건 이상이면 클릭이벤트 추가 -->
|
|
||||||
<p <c:if test="${(resultAllSentList.waitCount+resultAllSentList.failCount) > 0}"> onclick="javascript:fnMsgSFDetailList('${resultAllSentList.msgGroupId}', 'F'); return false;" style="cursor:pointer;"</c:if>>
|
|
||||||
<fmt:formatNumber value="${resultAllSentList.failCount}" pattern="#,###"/> / <fmt:formatNumber value="${resultAllSentList.waitCount}" pattern="#,###"/></p>
|
|
||||||
</td>
|
|
||||||
<td class="c_222"><p>실패</p></td>
|
|
||||||
<td class="c_222"><!-- 실패건이 1건 이상이면 클릭이벤트 추가 -->
|
|
||||||
<p <c:if test="${resultAllSentList.kakaoResendFailCount > 0}"> onclick="javascript:fnMsgSFDetailList('${resultAllSentList.msgGroupId}', 'F'); return false;" style="cursor:pointer;"</c:if>>
|
|
||||||
<fmt:formatNumber value="${resultAllSentList.kakaoResendFailCount}" pattern="#,###"/></p></td>
|
|
||||||
<%--<td class="c_222">
|
|
||||||
<p>
|
|
||||||
<c:if test="${(failPrice+waitPrice) > 0}"><fmt:formatNumber value="${(failPrice+waitPrice)}" pattern="#,###.#"/></c:if>
|
|
||||||
<c:if test="${(failPrice+waitPrice) eq 0}">0</c:if>
|
|
||||||
</p>
|
|
||||||
</td>--%>
|
|
||||||
</tr>
|
</tr>
|
||||||
</c:forEach>
|
</c:forEach>
|
||||||
</c:if>
|
</c:if>
|
||||||
<c:if test="${empty resultAllSentList}">
|
<c:if test="${empty resultAllSentList}">
|
||||||
<tr>
|
<tr>
|
||||||
<td colspan="11">발송 내역이 없습니다.</td>
|
<td colspan="12">발송 내역이 없습니다.</td>
|
||||||
</tr>
|
</tr>
|
||||||
</c:if>
|
</c:if>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
<!-- 전송건별 끝 -->
|
|
||||||
|
|
||||||
<!-- 받는사람(개인별) privatevate -->
|
|
||||||
<div class="tb_wrap" id="privateListTable" style="display:none;">
|
|
||||||
<table class="tType4">
|
|
||||||
<colgroup>
|
|
||||||
<col style="width: 40px;">
|
|
||||||
<col style="width: 15%;">
|
|
||||||
<col style="width: 12%;">
|
|
||||||
<col style="width: 90px;">
|
|
||||||
<col style="width: 12%;">
|
|
||||||
<col style="width: 14%;">
|
|
||||||
<col style="width: 11%;">
|
|
||||||
<col style="width: 11%;">
|
|
||||||
</colgroup>
|
|
||||||
<thead>
|
|
||||||
<tr>
|
|
||||||
<th>
|
|
||||||
<label for="" class="label">전체 선택</label>
|
|
||||||
<input type="checkbox">
|
|
||||||
</th>
|
|
||||||
<th>
|
|
||||||
발송일시
|
|
||||||
<div class="sort_wrap">
|
|
||||||
<input type="button" class="sort sortBtn" id="sort_reqdate">
|
|
||||||
</div>
|
|
||||||
</th>
|
|
||||||
<th>
|
|
||||||
형태
|
|
||||||
<div class="sort_wrap">
|
|
||||||
<input type="button" class="sort sortBtn" id="sort_msgType">
|
|
||||||
</div>
|
|
||||||
</th>
|
|
||||||
<th>내용</th>
|
|
||||||
<th>
|
|
||||||
받는사람
|
|
||||||
<div class="sort_wrap">
|
|
||||||
<input type="button" class="sort sortBtn" id="sort_callTo">
|
|
||||||
</div>
|
|
||||||
</th>
|
|
||||||
<th>
|
|
||||||
발신번호
|
|
||||||
<div class="sort_wrap">
|
|
||||||
<input type="button" class="sort sortBtn" id="sort_callFrom">
|
|
||||||
</div>
|
|
||||||
</th>
|
|
||||||
<th>카카오톡 결과</th>
|
|
||||||
<th>대체문자 결과</th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
|
|
||||||
<tbody>
|
|
||||||
<c:if test="${not empty resultAllSentList}">
|
|
||||||
<c:forEach var="resultAllSentList" items="${resultAllSentList}" varStatus="status">
|
|
||||||
<tr>
|
|
||||||
<td>
|
|
||||||
<label for="msgSentDel${status.count}" class="label">선택</label>
|
|
||||||
<input type="checkbox" id="msgSentDel${status.count}" name="msgSentDel"
|
|
||||||
value="${resultAllSentList.msgSeq}" <c:if test="${resultAllSentList.curState eq '0'}">disabled</c:if>>
|
|
||||||
</td>
|
|
||||||
<td><p><fmt:formatDate pattern = "yyyy-MM-dd HH:mm" value = "${resultAllSentList.reqdate}" /></p></td>
|
|
||||||
<td>
|
|
||||||
<p class="c_222 fwRg">
|
|
||||||
<c:if test="${resultAllSentList.msgType eq '8'}">알림톡</c:if>
|
|
||||||
<c:if test="${resultAllSentList.msgType eq '9'}">친구톡</c:if>
|
|
||||||
</p>
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
<%-- <button class="btnType btnType20" data-tooltip="rev_popup01" onClick="javascript:fnRevDetailPop('${resultAllSentList.msgGroupId}','${resultAllSentList.msgId}','${resultAllSentList.fileCnt}'); return false;">상세보기</button> --%>
|
|
||||||
<button class="btnType btnType20" onClick="javascript:fnRevDetailPop('${resultAllSentList.msgGroupId}','${resultAllSentList.msgId}'); return false;">상세보기</button>
|
|
||||||
<!-- <button class="btnType btnType20" data-tooltip="rev_popup03">상세보기</button> -->
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
<c:choose>
|
|
||||||
<c:when test="${resultAllSentList.msgGroupCnt > 1}">
|
|
||||||
<p>
|
|
||||||
<c:choose>
|
|
||||||
<c:when test="${resultAllSentList.addrNm ne '-' and resultAllSentList.addrNm ne ''}">
|
|
||||||
<c:out value="${resultAllSentList.addrNm}"/>
|
|
||||||
</c:when>
|
|
||||||
<c:otherwise>
|
|
||||||
<c:out value="${resultAllSentList.callToComma}"/>
|
|
||||||
</c:otherwise>
|
|
||||||
</c:choose> 외 <fmt:formatNumber value="${resultAllSentList.msgGroupCnt - 1}" pattern="#,###"/>명
|
|
||||||
</p>
|
|
||||||
</c:when>
|
|
||||||
<c:when test="${resultAllSentList.addrNm ne '-' and resultAllSentList.addrNm ne ''}">
|
|
||||||
<p><c:out value="${resultAllSentList.addrNm}"/></p>
|
|
||||||
</c:when>
|
|
||||||
<c:otherwise>
|
|
||||||
<p><c:out value="${resultAllSentList.callToComma}"/></p>
|
|
||||||
</c:otherwise>
|
|
||||||
</c:choose>
|
|
||||||
</td>
|
|
||||||
<td><p><c:out value="${resultAllSentList.callFromComma}"/></p></td>
|
|
||||||
<td>
|
|
||||||
<c:choose>
|
|
||||||
<c:when test="${resultAllSentList.msgResult eq 'S'}">
|
|
||||||
<p class="c_002c9a fwRg">정상수신</p>
|
|
||||||
</c:when>
|
|
||||||
<c:when test="${resultAllSentList.msgResult eq 'W'}">
|
|
||||||
<p class="fwRg c_19b32b">발송대기</p>
|
|
||||||
</c:when>
|
|
||||||
<c:when test="${resultAllSentList.msgResult eq 'F'}">
|
|
||||||
<p class="fwRg c_e40000">수신오류</p>
|
|
||||||
</c:when>
|
|
||||||
<c:otherwise>-</c:otherwise>
|
|
||||||
</c:choose>
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
<!-- 알림톡 수신오류인 경우, 대체문자 발송 여부에 따라 정상수신/수신오류 표기 -->
|
|
||||||
<c:choose>
|
|
||||||
<c:when test="${resultAllSentList.msgResult eq 'F' and resultAllSentList.bizKakaoResendYn eq 'Y' and resultAllSentList.callStatus eq 'S'}">
|
|
||||||
<p class="c_002c9a fwRg">정상수신</p>
|
|
||||||
</c:when>
|
|
||||||
<c:when test="${resultAllSentList.msgResult eq 'F' and resultAllSentList.bizKakaoResendYn eq 'Y' and resultAllSentList.callStatus eq 'F'}">
|
|
||||||
<p class="fwRg c_e40000">수신오류</p>
|
|
||||||
</c:when>
|
|
||||||
<c:otherwise>-</c:otherwise>
|
|
||||||
</c:choose>
|
|
||||||
</td>
|
|
||||||
|
|
||||||
</tr>
|
|
||||||
</c:forEach>
|
|
||||||
</c:if>
|
|
||||||
<c:if test="${empty resultAllSentList}">
|
|
||||||
<tr>
|
|
||||||
<td colspan="8">발송 내역이 없습니다.</td>
|
|
||||||
</tr>
|
|
||||||
</c:if>
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
</div>
|
|
||||||
<!-- 수신자별 끝 -->
|
|
||||||
|
|
||||||
|
<!--// 발송화면 개선 : 카카오톡 테이블 수정 -->
|
||||||
|
|
||||||
<div class="table_btn clearfix">
|
<div class="table_btn clearfix">
|
||||||
<div class="table_btn_left">
|
<div class="table_btn_left">
|
||||||
<!-- 2022.07.04 발송결과 화면에 리스트 선택삭제 기능 제거(카운팅 및 금액 합산 오류 관련) -->
|
<button type="button" onclick="javascript:fnDelete(); return false;" class="btnType btnType15"><i class="remove_img"></i>선택삭제</button>
|
||||||
<!-- <button type="button" class="btnType btnType15" onClick="javascript:fnDelete(); return false;"><i class="remove_img"></i>선택삭제</button> -->
|
|
||||||
<button type="button" data-tooltip="rev_popup02" class="btnType btnType15"><i class="add_img"></i>그룹등록</button>
|
|
||||||
<button type="button" class="btnType btnType15" onClick="javascript:fnDeleteAddrNo('${kakaoSentVO.listType}'); return false;"><i class="remove_img"></i>주소록에서 번호 삭제</button>
|
|
||||||
<button type="button" class="btnType btnType15" onClick="javascript:fnAddBlockNo('${kakaoSentVO.listType}'); return false;"></i>수신거부번호 등록</button>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="table_btn_right">
|
<div class="table_btn_right">
|
||||||
<button type="button" class="excel_btn btnType" onClick="javascript:fnExcelDownLoad('all','${kakaoSentVO.listType}'); return false;"><i class="downroad"></i>엑셀 다운로드</button>
|
<button type="button" class="excel_btn btnType"><i class="downroad"></i>발송결과 리스트</button>
|
||||||
<button type="button" class="print_btn btnType" onClick="javascript:fnShowPrintPopup('all','${kakaoSentVO.tabType}'); return false;"><i class="print_img"></i>발송결과 출력하기</button>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<c:if test="${!empty resultAllSentList}">
|
<c:if test="${!empty resultAllSentList}">
|
||||||
<ul class="pagination">
|
<ul class="pagination">
|
||||||
<ui:pagination paginationInfo = "${paginationInfo}" type="imageWeb" jsFunction="linkPage" />
|
<ui:pagination paginationInfo = "${paginationInfo}" type="imageWeb" jsFunction="linkPage" />
|
||||||
</ul>
|
</ul>
|
||||||
</c:if>
|
</c:if>
|
||||||
|
|
||||||
|
<form id="resCancelForm" name="resCancelForm" method="post">
|
||||||
|
<input type="hidden" id="msgGroupId" name="msgGroupId" value=""/>
|
||||||
|
</form>
|
||||||
@ -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" %>
|
||||||
|
<script src="/publish/js/content.js"></script>
|
||||||
|
<script src="/publish/js/popupLayer.js"></script>
|
||||||
|
<script type="text/javascript">
|
||||||
|
$(document).ready(function(){
|
||||||
|
|
||||||
|
/* 목록 정렬 항목 아이콘 표시 */
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
|
||||||
|
//체크박스 전체 선택 및 해제
|
||||||
|
var allChkSts = false;
|
||||||
|
$("#allCheck").click(function(){
|
||||||
|
|
||||||
|
if(!allChkSts){// 전체선택이 해제되어 있을 경우
|
||||||
|
|
||||||
|
$("input[name=msgSentDel]").prop("checked", true);
|
||||||
|
allChkSts = true;
|
||||||
|
|
||||||
|
//발송 대기건은 선택 삭제가 안되도록 처리함
|
||||||
|
$("input:checkbox[name='msgSentDel']:checked").each(function(index){
|
||||||
|
|
||||||
|
var disabledChk = $(this).prop('disabled');
|
||||||
|
if(disabledChk){ //checkbox disabled 인 것은 제외하고 아이디 저장
|
||||||
|
|
||||||
|
$(this).prop("checked", false);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
}else{
|
||||||
|
|
||||||
|
$("input[name=msgSentDel]").prop("checked", false);
|
||||||
|
allChkSts = false;
|
||||||
|
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
if($("#tdType").val() == "groupList" || $("#tdType").val() == ""){
|
||||||
|
$("#privateListTable").hide();
|
||||||
|
$("#groupListTable").show();
|
||||||
|
}else{
|
||||||
|
$("#privateListTable").show();
|
||||||
|
$("#groupListTable").hide();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
</script>
|
||||||
|
<input type="button" id="tooltopClick" data-tooltip="rev_popup01" style="display:none;"/>
|
||||||
|
<div class="list_info">
|
||||||
|
<input type="hidden" id="tdType" value="${kakaoSentVO.listType}">
|
||||||
|
<p>총 <span class="c_e40000"><c:out value="${totalRecordCount}"/></span>건</p>
|
||||||
|
<div>
|
||||||
|
<label for="pageUnit" class="label">줄보기 선택</label>
|
||||||
|
<select id="pageUnit" name="pageUnit" class="selType2">
|
||||||
|
<option value="10" <c:if test="${paginationInfo.recordCountPerPage == '10'}">selected</c:if> >10개보기</option>
|
||||||
|
<option value="20" <c:if test="${paginationInfo.recordCountPerPage == '20'}">selected</c:if> >20개보기</option>
|
||||||
|
<option value="30" <c:if test="${paginationInfo.recordCountPerPage == '30'}">selected</c:if> >30개보기</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<!-- 전송건별 - groupList - -->
|
||||||
|
<div class="tb_wrap" id="groupListTable">
|
||||||
|
<table class="tType4">
|
||||||
|
<colgroup>
|
||||||
|
<col style="width: 40px;">
|
||||||
|
<col style="width: 14%;">
|
||||||
|
<col style="width: 7%;">
|
||||||
|
<col style="width: 10%;">
|
||||||
|
<col style="width: 18%;">
|
||||||
|
<col style="width: 12%;">
|
||||||
|
<col style="width: 10%;">
|
||||||
|
<col style="width: 12%;">
|
||||||
|
<col style="width: 7%;">
|
||||||
|
<col style="width: 12%;">
|
||||||
|
<col style="width: 7%;">
|
||||||
|
<%-- <col style="width: 10%;"> --%>
|
||||||
|
</colgroup>
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>
|
||||||
|
<label for="" class="label">전체 선택</label>
|
||||||
|
<input type="checkbox">
|
||||||
|
</th>
|
||||||
|
<th>
|
||||||
|
발송일시
|
||||||
|
<div class="sort_wrap">
|
||||||
|
<input type="button" class="sort sortBtn" id="sort_reqdate">
|
||||||
|
</div>
|
||||||
|
</th>
|
||||||
|
<th>
|
||||||
|
형태
|
||||||
|
<div class="sort_wrap">
|
||||||
|
<input type="button" class="sort sortBtn" id="sort_msgType">
|
||||||
|
</div>
|
||||||
|
</th>
|
||||||
|
<th>내용</th>
|
||||||
|
<th>
|
||||||
|
받는사람
|
||||||
|
<div class="sort_wrap">
|
||||||
|
<input type="button" class="sort sortBtn" id="sort_callTo">
|
||||||
|
</div>
|
||||||
|
</th>
|
||||||
|
<th>
|
||||||
|
발신번호
|
||||||
|
<div class="sort_wrap">
|
||||||
|
<input type="button" class="sort sortBtn" id="sort_callFrom">
|
||||||
|
</div>
|
||||||
|
</th>
|
||||||
|
<th>
|
||||||
|
발송건수
|
||||||
|
<div class="sort_wrap">
|
||||||
|
<input type="button" class="sort sortBtn" id="sort_msgGroupCnt">
|
||||||
|
</div>
|
||||||
|
</th>
|
||||||
|
<th>카카오톡 결과</th>
|
||||||
|
<th>건수</th>
|
||||||
|
<th>대체문자 결과</th>
|
||||||
|
<th>건수</th>
|
||||||
|
<!-- <th>금액</th> -->
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
|
||||||
|
<tbody>
|
||||||
|
<c:if test="${not empty resultAllSentList}">
|
||||||
|
<c:forEach var="resultAllSentList" items="${resultAllSentList}" varStatus="status">
|
||||||
|
<tr>
|
||||||
|
<td rowspan="2">
|
||||||
|
<label for="msgSentDel${status.count}" class="label">선택</label>
|
||||||
|
<input type="checkbox" id="msgSentDel${status.count}" name="msgSentDel"
|
||||||
|
value="${resultAllSentList.msgGroupId}" <c:if test="${resultAllSentList.curState eq '0'}">disabled</c:if>>
|
||||||
|
</td>
|
||||||
|
<td rowspan="2">
|
||||||
|
<c:choose>
|
||||||
|
<c:when test="${resultAllSentList.atDelayYn eq 'Y' && resultAllSentList.atDelayCompleteYn eq 'N'}">
|
||||||
|
<c:choose>
|
||||||
|
<c:when test="${resultAllSentList.curState eq '0'}">
|
||||||
|
<%--
|
||||||
|
20240906 추가
|
||||||
|
발송 대기 상태일 때만 원래 발송시간을 보여주고, 발송이 완료되면 발송 처리 완료 시간(reqDate)을 보여준다.
|
||||||
|
30분 딜레이 된 건으로 관리자 승인/취소 처리가 완료 되지 않은 건에 대해서 -30분 처리하여 원래 사용자가 보내려던 시간을 표시해줌
|
||||||
|
--%>
|
||||||
|
<p><fmt:formatDate pattern = "yyyy-MM-dd HH:mm" value = "${resultAllSentList.atDelayOrgTime}" /></p>
|
||||||
|
</c:when>
|
||||||
|
<c:otherwise>
|
||||||
|
<p><fmt:formatDate pattern = "yyyy-MM-dd HH:mm" value = "${resultAllSentList.reqdate}" /></p>
|
||||||
|
</c:otherwise>
|
||||||
|
</c:choose>
|
||||||
|
</c:when>
|
||||||
|
<c:otherwise>
|
||||||
|
<p><fmt:formatDate pattern = "yyyy-MM-dd HH:mm" value = "${resultAllSentList.reqdate}" /></p>
|
||||||
|
</c:otherwise>
|
||||||
|
</c:choose>
|
||||||
|
</td>
|
||||||
|
<td rowspan="2">
|
||||||
|
<p class="c_222 fwRg">
|
||||||
|
<c:if test="${resultAllSentList.msgType eq '8'}">알림톡</c:if>
|
||||||
|
<c:if test="${resultAllSentList.msgType eq '9'}">친구톡</c:if>
|
||||||
|
</p>
|
||||||
|
</td>
|
||||||
|
<td rowspan="2">
|
||||||
|
<%-- <button class="btnType btnType20" data-tooltip="rev_popup01" onClick="javascript:fnRevDetailPop('${resultAllSentList.msgGroupId}','${resultAllSentList.msgId}','${resultAllSentList.fileCnt}'); return false;">상세보기</button> --%>
|
||||||
|
<button class="btnType btnType20" onClick="javascript:fnRevDetailPop('${resultAllSentList.msgGroupId}','${resultAllSentList.msgId}'); return false;">상세보기</button>
|
||||||
|
</td>
|
||||||
|
<td rowspan="2">
|
||||||
|
<c:choose>
|
||||||
|
<c:when test="${resultAllSentList.msgGroupCnt > 1}">
|
||||||
|
<p>
|
||||||
|
<c:choose>
|
||||||
|
<c:when test="${resultAllSentList.addrNm ne '-' and resultAllSentList.addrNm ne ''}">
|
||||||
|
<c:out value="${resultAllSentList.addrNm}"/>
|
||||||
|
</c:when>
|
||||||
|
<c:otherwise>
|
||||||
|
<c:out value="${resultAllSentList.callToComma}"/>
|
||||||
|
</c:otherwise>
|
||||||
|
</c:choose> 외 <fmt:formatNumber value="${resultAllSentList.msgGroupCnt - 1}" pattern="#,###"/>명
|
||||||
|
</p>
|
||||||
|
</c:when>
|
||||||
|
<c:when test="${resultAllSentList.addrNm ne '-' and resultAllSentList.addrNm ne ''}">
|
||||||
|
<p><c:out value="${resultAllSentList.addrNm}"/></p>
|
||||||
|
</c:when>
|
||||||
|
<c:otherwise>
|
||||||
|
<p><c:out value="${resultAllSentList.callToComma}"/></p>
|
||||||
|
</c:otherwise>
|
||||||
|
</c:choose>
|
||||||
|
<%-- <p>${resultAllSentList.msgGroupId}</p> --%>
|
||||||
|
</td>
|
||||||
|
<td rowspan="2"><p><c:out value="${resultAllSentList.callFromComma}"/></p></td>
|
||||||
|
<td rowspan="2"><p><c:out value="${resultAllSentList.msgGroupCnt}"/></p></td>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<td><p class="c_002c9a fwRg">정상수신</p></td>
|
||||||
|
<td>
|
||||||
|
<!-- 성공건이 1건 이상이면 클릭이벤트 추가 -->
|
||||||
|
<p class="c_002c9a fwRg" <c:if test="${resultAllSentList.successCount > 0}">onclick="javascript:fnMsgSFDetailList('${resultAllSentList.msgGroupId}', 'S'); return false;" style="cursor:pointer;"</c:if>>
|
||||||
|
<fmt:formatNumber value="${resultAllSentList.successCount}" pattern="#,###.#"/></p>
|
||||||
|
</td>
|
||||||
|
<td><p class="c_002c9a fwRg">정상수신</p></td>
|
||||||
|
<td>
|
||||||
|
<!-- 성공건이 1건 이상이면 클릭이벤트 추가 -->
|
||||||
|
<p class="c_002c9a fwRg" <c:if test="${resultAllSentList.kakaoResendSuccCount > 0}">onclick="javascript:fnMsgSFDetailList('${resultAllSentList.msgGroupId}', 'S'); return false;" style="cursor:pointer;"</c:if>>
|
||||||
|
<fmt:formatNumber value="${resultAllSentList.kakaoResendSuccCount}" pattern="#,###.#"/></p>
|
||||||
|
</td>
|
||||||
|
<%-- <td>
|
||||||
|
<p class="c_002c9a fwRg">
|
||||||
|
<c:if test="${succPrice > 0}"><fmt:formatNumber value="${succPrice}" pattern="#,###.#"/></c:if>
|
||||||
|
<c:if test="${succPrice eq 0}">0</c:if>
|
||||||
|
</p>
|
||||||
|
</td> --%>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class="c_222"><p>실패/대기</p></td>
|
||||||
|
<td class="c_222">
|
||||||
|
<!-- 실패건이 1건 이상이면 클릭이벤트 추가 -->
|
||||||
|
<p <c:if test="${(resultAllSentList.waitCount+resultAllSentList.failCount) > 0}"> onclick="javascript:fnMsgSFDetailList('${resultAllSentList.msgGroupId}', 'F'); return false;" style="cursor:pointer;"</c:if>>
|
||||||
|
<fmt:formatNumber value="${resultAllSentList.failCount}" pattern="#,###"/> / <fmt:formatNumber value="${resultAllSentList.waitCount}" pattern="#,###"/></p>
|
||||||
|
</td>
|
||||||
|
<td class="c_222"><p>실패</p></td>
|
||||||
|
<td class="c_222"><!-- 실패건이 1건 이상이면 클릭이벤트 추가 -->
|
||||||
|
<p <c:if test="${resultAllSentList.kakaoResendFailCount > 0}"> onclick="javascript:fnMsgSFDetailList('${resultAllSentList.msgGroupId}', 'F'); return false;" style="cursor:pointer;"</c:if>>
|
||||||
|
<fmt:formatNumber value="${resultAllSentList.kakaoResendFailCount}" pattern="#,###"/></p></td>
|
||||||
|
<%--<td class="c_222">
|
||||||
|
<p>
|
||||||
|
<c:if test="${(failPrice+waitPrice) > 0}"><fmt:formatNumber value="${(failPrice+waitPrice)}" pattern="#,###.#"/></c:if>
|
||||||
|
<c:if test="${(failPrice+waitPrice) eq 0}">0</c:if>
|
||||||
|
</p>
|
||||||
|
</td>--%>
|
||||||
|
</tr>
|
||||||
|
</c:forEach>
|
||||||
|
</c:if>
|
||||||
|
<c:if test="${empty resultAllSentList}">
|
||||||
|
<tr>
|
||||||
|
<td colspan="11">발송 내역이 없습니다.</td>
|
||||||
|
</tr>
|
||||||
|
</c:if>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<!-- 전송건별 끝 -->
|
||||||
|
|
||||||
|
<!-- 받는사람(개인별) privatevate -->
|
||||||
|
<div class="tb_wrap" id="privateListTable" style="display:none;">
|
||||||
|
<table class="tType4">
|
||||||
|
<colgroup>
|
||||||
|
<col style="width: 40px;">
|
||||||
|
<col style="width: 15%;">
|
||||||
|
<col style="width: 12%;">
|
||||||
|
<col style="width: 90px;">
|
||||||
|
<col style="width: 12%;">
|
||||||
|
<col style="width: 14%;">
|
||||||
|
<col style="width: 11%;">
|
||||||
|
<col style="width: 11%;">
|
||||||
|
</colgroup>
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>
|
||||||
|
<label for="" class="label">전체 선택</label>
|
||||||
|
<input type="checkbox">
|
||||||
|
</th>
|
||||||
|
<th>
|
||||||
|
발송일시
|
||||||
|
<div class="sort_wrap">
|
||||||
|
<input type="button" class="sort sortBtn" id="sort_reqdate">
|
||||||
|
</div>
|
||||||
|
</th>
|
||||||
|
<th>
|
||||||
|
형태
|
||||||
|
<div class="sort_wrap">
|
||||||
|
<input type="button" class="sort sortBtn" id="sort_msgType">
|
||||||
|
</div>
|
||||||
|
</th>
|
||||||
|
<th>내용</th>
|
||||||
|
<th>
|
||||||
|
받는사람
|
||||||
|
<div class="sort_wrap">
|
||||||
|
<input type="button" class="sort sortBtn" id="sort_callTo">
|
||||||
|
</div>
|
||||||
|
</th>
|
||||||
|
<th>
|
||||||
|
발신번호
|
||||||
|
<div class="sort_wrap">
|
||||||
|
<input type="button" class="sort sortBtn" id="sort_callFrom">
|
||||||
|
</div>
|
||||||
|
</th>
|
||||||
|
<th>카카오톡 결과</th>
|
||||||
|
<th>대체문자 결과</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
|
||||||
|
<tbody>
|
||||||
|
<c:if test="${not empty resultAllSentList}">
|
||||||
|
<c:forEach var="resultAllSentList" items="${resultAllSentList}" varStatus="status">
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<label for="msgSentDel${status.count}" class="label">선택</label>
|
||||||
|
<input type="checkbox" id="msgSentDel${status.count}" name="msgSentDel"
|
||||||
|
value="${resultAllSentList.msgSeq}" <c:if test="${resultAllSentList.curState eq '0'}">disabled</c:if>>
|
||||||
|
</td>
|
||||||
|
<td><p><fmt:formatDate pattern = "yyyy-MM-dd HH:mm" value = "${resultAllSentList.reqdate}" /></p></td>
|
||||||
|
<td>
|
||||||
|
<p class="c_222 fwRg">
|
||||||
|
<c:if test="${resultAllSentList.msgType eq '8'}">알림톡</c:if>
|
||||||
|
<c:if test="${resultAllSentList.msgType eq '9'}">친구톡</c:if>
|
||||||
|
</p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<%-- <button class="btnType btnType20" data-tooltip="rev_popup01" onClick="javascript:fnRevDetailPop('${resultAllSentList.msgGroupId}','${resultAllSentList.msgId}','${resultAllSentList.fileCnt}'); return false;">상세보기</button> --%>
|
||||||
|
<button class="btnType btnType20" onClick="javascript:fnRevDetailPop('${resultAllSentList.msgGroupId}','${resultAllSentList.msgId}'); return false;">상세보기</button>
|
||||||
|
<!-- <button class="btnType btnType20" data-tooltip="rev_popup03">상세보기</button> -->
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<c:choose>
|
||||||
|
<c:when test="${resultAllSentList.msgGroupCnt > 1}">
|
||||||
|
<p>
|
||||||
|
<c:choose>
|
||||||
|
<c:when test="${resultAllSentList.addrNm ne '-' and resultAllSentList.addrNm ne ''}">
|
||||||
|
<c:out value="${resultAllSentList.addrNm}"/>
|
||||||
|
</c:when>
|
||||||
|
<c:otherwise>
|
||||||
|
<c:out value="${resultAllSentList.callToComma}"/>
|
||||||
|
</c:otherwise>
|
||||||
|
</c:choose> 외 <fmt:formatNumber value="${resultAllSentList.msgGroupCnt - 1}" pattern="#,###"/>명
|
||||||
|
</p>
|
||||||
|
</c:when>
|
||||||
|
<c:when test="${resultAllSentList.addrNm ne '-' and resultAllSentList.addrNm ne ''}">
|
||||||
|
<p><c:out value="${resultAllSentList.addrNm}"/></p>
|
||||||
|
</c:when>
|
||||||
|
<c:otherwise>
|
||||||
|
<p><c:out value="${resultAllSentList.callToComma}"/></p>
|
||||||
|
</c:otherwise>
|
||||||
|
</c:choose>
|
||||||
|
</td>
|
||||||
|
<td><p><c:out value="${resultAllSentList.callFromComma}"/></p></td>
|
||||||
|
<td>
|
||||||
|
<c:choose>
|
||||||
|
<c:when test="${resultAllSentList.msgResult eq 'S'}">
|
||||||
|
<p class="c_002c9a fwRg">정상수신</p>
|
||||||
|
</c:when>
|
||||||
|
<c:when test="${resultAllSentList.msgResult eq 'W'}">
|
||||||
|
<p class="fwRg c_19b32b">발송대기</p>
|
||||||
|
</c:when>
|
||||||
|
<c:when test="${resultAllSentList.msgResult eq 'F'}">
|
||||||
|
<p class="fwRg c_e40000">수신오류</p>
|
||||||
|
</c:when>
|
||||||
|
<c:otherwise>-</c:otherwise>
|
||||||
|
</c:choose>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<!-- 알림톡 수신오류인 경우, 대체문자 발송 여부에 따라 정상수신/수신오류 표기 -->
|
||||||
|
<c:choose>
|
||||||
|
<c:when test="${resultAllSentList.msgResult eq 'F' and resultAllSentList.bizKakaoResendYn eq 'Y' and resultAllSentList.callStatus eq 'S'}">
|
||||||
|
<p class="c_002c9a fwRg">정상수신</p>
|
||||||
|
</c:when>
|
||||||
|
<c:when test="${resultAllSentList.msgResult eq 'F' and resultAllSentList.bizKakaoResendYn eq 'Y' and resultAllSentList.callStatus eq 'F'}">
|
||||||
|
<p class="fwRg c_e40000">수신오류</p>
|
||||||
|
</c:when>
|
||||||
|
<c:otherwise>-</c:otherwise>
|
||||||
|
</c:choose>
|
||||||
|
</td>
|
||||||
|
|
||||||
|
</tr>
|
||||||
|
</c:forEach>
|
||||||
|
</c:if>
|
||||||
|
<c:if test="${empty resultAllSentList}">
|
||||||
|
<tr>
|
||||||
|
<td colspan="8">발송 내역이 없습니다.</td>
|
||||||
|
</tr>
|
||||||
|
</c:if>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<!-- 수신자별 끝 -->
|
||||||
|
|
||||||
|
<div class="table_btn clearfix">
|
||||||
|
<div class="table_btn_left">
|
||||||
|
<!-- 2022.07.04 발송결과 화면에 리스트 선택삭제 기능 제거(카운팅 및 금액 합산 오류 관련) -->
|
||||||
|
<!-- <button type="button" class="btnType btnType15" onClick="javascript:fnDelete(); return false;"><i class="remove_img"></i>선택삭제</button> -->
|
||||||
|
<button type="button" data-tooltip="rev_popup02" class="btnType btnType15"><i class="add_img"></i>그룹등록</button>
|
||||||
|
<button type="button" class="btnType btnType15" onClick="javascript:fnDeleteAddrNo('${kakaoSentVO.listType}'); return false;"><i class="remove_img"></i>주소록에서 번호 삭제</button>
|
||||||
|
<button type="button" class="btnType btnType15" onClick="javascript:fnAddBlockNo('${kakaoSentVO.listType}'); return false;"></i>수신거부번호 등록</button>
|
||||||
|
</div>
|
||||||
|
<div class="table_btn_right">
|
||||||
|
<button type="button" class="excel_btn btnType" onClick="javascript:fnExcelDownLoad('all','${kakaoSentVO.listType}'); return false;"><i class="downroad"></i>엑셀 다운로드</button>
|
||||||
|
<button type="button" class="print_btn btnType" onClick="javascript:fnShowPrintPopup('all','${kakaoSentVO.tabType}'); return false;"><i class="print_img"></i>발송결과 출력하기</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<c:if test="${!empty resultAllSentList}">
|
||||||
|
<ul class="pagination">
|
||||||
|
<ui:pagination paginationInfo = "${paginationInfo}" type="imageWeb" jsFunction="linkPage" />
|
||||||
|
</ul>
|
||||||
|
</c:if>
|
||||||
@ -5,111 +5,112 @@
|
|||||||
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
|
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
|
||||||
<% pageContext.setAttribute("newLineChar", "\n"); %>
|
<% pageContext.setAttribute("newLineChar", "\n"); %>
|
||||||
|
|
||||||
<div class="list_tab_wrap2 kakao_rev_tab">
|
<div class="phone">
|
||||||
<!-- tab button -->
|
<!-- 탭스타일 -->
|
||||||
<ul class="list_tab">
|
<div class="list_tab_wrap2 type5">
|
||||||
<li class="tab active"><button type="button" onclick="popupTab(this,'1');" id="atBtn">카카오톡</button></li>
|
<ul class="tabType3" id="tabType" name="tabType">
|
||||||
<c:if test="${resultMsgDetail.bizKakaoResendYn eq 'Y'}">
|
<li class="tab active"><button type="button" onclick="phoneTab(this,'1');" title="선택됨">카카오톡</button></li>
|
||||||
<li class="tab"><button type="button" onclick="popupTab(this,'2');">대체문자</button></li>
|
<c:if test="${resultMsgDetail.bizKakaoResendYn eq 'Y'}">
|
||||||
</c:if>
|
<li class="tab"><button type="button" onclick="phoneTab(this,'2');">대체문자</button></li>
|
||||||
</ul><!--// tab button -->
|
</c:if>
|
||||||
</div>
|
</ul>
|
||||||
|
</div>
|
||||||
|
<!--// 탭스타일 -->
|
||||||
|
|
||||||
<div class="popCont current kakao_wrap" id="popCont_1">
|
<!-- 카카오 알림톡 미리보기 -->
|
||||||
<div class="rev_pop_in">
|
<div class="tab_phone current" id="tab_phone_1">
|
||||||
<div class="rev_pop_middle clearfix">
|
<div class="phone_kakako">
|
||||||
<span><c:out value="${resultMsgDetail.reqDate }" /></span>
|
<div class="phoneIn">
|
||||||
<span class="msg_com msg_allimtalk">
|
<p class="prev_p"><img src="/publish/images/content/kakao_prev_icon.png" alt=""><c:out value="${resultMsgDetail.yellowId}"/></p>
|
||||||
<c:choose>
|
<!-- 텍스트 미리보기 -->
|
||||||
<c:when test="${msgType eq '8'}">
|
<div class="text_preview">
|
||||||
알림톡
|
<div class="allimtalk_title">
|
||||||
</c:when>
|
<img src="/publish/images/content/icon_allimtalk.png" alt="">
|
||||||
<c:when test="${msgType eq '9'}">
|
<c:choose>
|
||||||
친구톡
|
<c:when test="${msgType eq '8'}">알림톡 도착</c:when>
|
||||||
</c:when>
|
<c:when test="${msgType eq '9'}">친구톡 도착</c:when>
|
||||||
<c:otherwise>
|
</c:choose>
|
||||||
</c:otherwise>
|
</div>
|
||||||
</c:choose>
|
<div class="allimtalk_content">
|
||||||
</span>
|
<c:choose>
|
||||||
</div>
|
<c:when test="${kakaoTemplateInfo.templateEmphasizeType eq 'TEXT'}">
|
||||||
<div class="rev_pop_txt">
|
<p class="emphasis_side_text"><c:out value="${kakaoTemplateInfo.templateSubtitle}"/></p>
|
||||||
<div class="text_preview">
|
<p class="emphasis_title_text"><c:out value="${kakaoTemplateInfo.templateTitle}"/></p>
|
||||||
<div class="allimtalk_title">
|
</c:when>
|
||||||
<img src="/publish/images/content/icon_allimtalk.png" alt="">
|
<c:when test="${kakaoTemplateInfo.templateEmphasizeType eq 'IMAGE'}">
|
||||||
<c:choose>
|
<div class="kakao_image">
|
||||||
<c:when test="${msgType eq '8'}">
|
<img src="<c:url value='${kakaoTemplateInfo.templateImageUrl}'/>" alt="">
|
||||||
알림톡 도착
|
</div>
|
||||||
</c:when>
|
</c:when>
|
||||||
<c:when test="${msgType eq '9'}">
|
</c:choose>
|
||||||
친구톡 도착
|
|
||||||
</c:when>
|
<p class="template_text">
|
||||||
<c:otherwise>
|
<c:out value="${fn:replace(fn:replace(kakaoTemplateInfo.templateContent, newLineChar, '<br/>'), newLineChar2, '<br/>')}" escapeXml="false"/>
|
||||||
</c:otherwise>
|
</p>
|
||||||
</c:choose>
|
|
||||||
</div>
|
<c:choose>
|
||||||
<div class="allimtalk_content">
|
<c:when test="${kakaoTemplateInfo.templateMessageType eq 'EX'}">
|
||||||
<!-- 강조 텍스트 -->
|
<p class="side_info_text"><c:out value="${kakaoTemplateInfo.templateExtra}"/></p>
|
||||||
<!-- 강조 텍스트 -->
|
</c:when>
|
||||||
<c:choose>
|
<c:when test="${kakaoTemplateInfo.templateMessageType eq 'AD'}">
|
||||||
<c:when test="${kakaoTemplateInfo.templateEmphasizeType eq 'TEXT'}">
|
<p class="channel_info_text"><c:out value="${kakaoTemplateInfo.templateAd}"/></p>
|
||||||
<p class="emphasis_side_text"><c:out value="${kakaoTemplateInfo.templateSubtitle}"/></p>
|
</c:when>
|
||||||
<p class="emphasis_title_text"><c:out value="${kakaoTemplateInfo.templateTitle}"/></p>
|
</c:choose>
|
||||||
</c:when>
|
|
||||||
<c:when test="${kakaoTemplateInfo.templateEmphasizeType eq 'IMAGE'}">
|
<c:forEach var="templatInfoButtonList" items="${kakaoTemplateInfo.buttonList}" varStatus="status">
|
||||||
<div class="kakao_image">
|
<c:choose>
|
||||||
<img src="<c:url value='${kakaoTemplateInfo.templateImageUrl}'/>" alt="">
|
<c:when test="${templatInfoButtonList.name eq '채널 추가'}">
|
||||||
</div>
|
<button type="button" class="btn_kakao_channel"><img src="/publish/images/content/icon_kakao_channel_plus.png" alt=""> 채널추가</button>
|
||||||
</c:when>
|
</c:when>
|
||||||
<c:otherwise>
|
<c:otherwise>
|
||||||
</c:otherwise>
|
<button type="button" class="btn_kakao_type"><c:out value="${templatInfoButtonList.name}"/></button>
|
||||||
</c:choose>
|
</c:otherwise>
|
||||||
|
</c:choose>
|
||||||
<!-- 알림톡 내용 표시 -->
|
</c:forEach>
|
||||||
<p class="template_text">
|
</div>
|
||||||
<!-- 내용 -->
|
</div>
|
||||||
<!-- 내용 -->
|
</div>
|
||||||
<c:out value="${fn:replace(fn:replace(kakaoTemplateInfo.templateContent, newLineChar, '<br/>'), newLineChar2, '<br/>')}" escapeXml="false"/>
|
<p class="addText">※ 단말기 설정에 따라 다르게 보일 수 있습니다</p>
|
||||||
</p>
|
</div>
|
||||||
|
</div>
|
||||||
<!-- 부가정보 내용 -->
|
<!--// 카카오 알림톡 미리보기 -->
|
||||||
<c:choose>
|
|
||||||
<c:when test="${kakaoTemplateInfo.templateMessageType eq 'EX'}">
|
<!-- 문자 미리보기 -->
|
||||||
<!-- 부가정보형인 경우 부가정보 내용 표시 -->
|
<div class="tab_phone" id="tab_phone_2">
|
||||||
<p class="side_info_text"><c:out value="${kakaoTemplateInfo.templateExtra}"/></p>
|
<div class="phoneIn">
|
||||||
</c:when>
|
<div>
|
||||||
<c:when test="${kakaoTemplateInfo.templateMessageType eq 'AD'}">
|
<p class="prev_p"><img src="/publish/images/search.png"> 문자내용</p>
|
||||||
<!-- 채널 추가형인경우 채널 추가 메세지 표시 -->
|
<div class="text_length2 clearfix">
|
||||||
<p class="channel_info_text"><c:out value="${kakaoTemplateInfo.templateAd}"/></p>
|
<c:if test="${resultMsgDetail.bizKakaoResendYn eq 'Y'}">
|
||||||
</c:when>
|
<c:choose>
|
||||||
<c:otherwise>
|
<c:when test="${resultMsgDetail.bizKakaoResendTypeCnt > 1}">
|
||||||
</c:otherwise>
|
<span class="msg_com msg_short">단문</span>
|
||||||
</c:choose>
|
<span class="msg_com msg_long">장문</span>
|
||||||
|
</c:when>
|
||||||
<!-- 채널 추가형을 선택한 경우 자동으로 버튼이 하나 추가됨, 버튼을 추가한 경우 버튼 정보 표시 -->
|
<c:when test="${resultMsgDetail.bizKakaoResendTypeCnt < 2
|
||||||
<c:forEach var="templatInfoButtonList" items="${kakaoTemplateInfo.buttonList}" varStatus="status">
|
&& resultMsgDetail.bizKakaoResendType eq 'SMS'}">
|
||||||
<c:choose>
|
<span class="msg_com msg_short">단문</span>
|
||||||
<c:when test="${templatInfoButtonList.name eq '채널 추가'}">
|
</c:when>
|
||||||
<button type="button" class="btn_kakao_channel"><img src="/publish/images/content/icon_kakao_channel_plus.png" alt=""> 채널추가</button>
|
<c:otherwise>
|
||||||
</c:when>
|
<span class="msg_com msg_long">장문</span>
|
||||||
<c:otherwise>
|
</c:otherwise>
|
||||||
<button type="button" class="btn_kakao_type"><c:out value="${templatInfoButtonList.name}"/></button>
|
</c:choose>
|
||||||
</c:otherwise>
|
</c:if>
|
||||||
</c:choose>
|
<div>
|
||||||
</c:forEach>
|
<span>글자크기</span>
|
||||||
</div>
|
<button type="button" onclick="changeFontSize('plus');"><img src="/publish/images/content/font_plus.png"></button>
|
||||||
</div>
|
<button type="button" onclick="changeFontSize('minus');"><img src="/publish/images/content/font_minus.png"></button>
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="popCont replace_send_popup" id="popCont_2">
|
|
||||||
<div class="rev_pop_in">
|
|
||||||
<div class="rev_pop_middle clearfix">
|
|
||||||
<span><c:out value="${resultMsgDetail.sentDate }" /></span>
|
|
||||||
<span class="msg_com msg_allimtalk">대체문자</span>
|
|
||||||
</div>
|
|
||||||
<div class="rev_pop_txt">
|
|
||||||
${fn:replace(resultMsgDetail.bizKakaoResendOrgnlTxt, newLineChar, "<br/>")}
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="text_preview">
|
||||||
|
<div class="preview_auto">
|
||||||
|
<p class="realtime">${fn:replace(resultMsgDetail.bizKakaoResendOrgnlTxt, newLineChar, "<br/>")}</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<p class="addText">※ 단말기 설정에 따라 다르게 보일 수 있습니다</p>
|
||||||
|
</div>
|
||||||
|
<!--// 문자 미리보기 -->
|
||||||
|
</div>
|
||||||
|
|
||||||
@ -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"); %>
|
||||||
|
|
||||||
|
<div class="list_tab_wrap2 kakao_rev_tab">
|
||||||
|
<!-- tab button -->
|
||||||
|
<ul class="list_tab">
|
||||||
|
<li class="tab active"><button type="button" onclick="popupTab(this,'1');" id="atBtn">카카오톡</button></li>
|
||||||
|
<c:if test="${resultMsgDetail.bizKakaoResendYn eq 'Y'}">
|
||||||
|
<li class="tab"><button type="button" onclick="popupTab(this,'2');">대체문자</button></li>
|
||||||
|
</c:if>
|
||||||
|
</ul><!--// tab button -->
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="popCont current kakao_wrap" id="popCont_1">
|
||||||
|
<div class="rev_pop_in">
|
||||||
|
<div class="rev_pop_middle clearfix">
|
||||||
|
<span><c:out value="${resultMsgDetail.reqDate }" /></span>
|
||||||
|
<span class="msg_com msg_allimtalk">
|
||||||
|
<c:choose>
|
||||||
|
<c:when test="${msgType eq '8'}">
|
||||||
|
알림톡
|
||||||
|
</c:when>
|
||||||
|
<c:when test="${msgType eq '9'}">
|
||||||
|
친구톡
|
||||||
|
</c:when>
|
||||||
|
<c:otherwise>
|
||||||
|
</c:otherwise>
|
||||||
|
</c:choose>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
<div class="rev_pop_txt">
|
||||||
|
<div class="text_preview">
|
||||||
|
<div class="allimtalk_title">
|
||||||
|
<img src="/publish/images/content/icon_allimtalk.png" alt="">
|
||||||
|
<c:choose>
|
||||||
|
<c:when test="${msgType eq '8'}">
|
||||||
|
알림톡 도착
|
||||||
|
</c:when>
|
||||||
|
<c:when test="${msgType eq '9'}">
|
||||||
|
친구톡 도착
|
||||||
|
</c:when>
|
||||||
|
<c:otherwise>
|
||||||
|
</c:otherwise>
|
||||||
|
</c:choose>
|
||||||
|
</div>
|
||||||
|
<div class="allimtalk_content">
|
||||||
|
<!-- 강조 텍스트 -->
|
||||||
|
<!-- 강조 텍스트 -->
|
||||||
|
<c:choose>
|
||||||
|
<c:when test="${kakaoTemplateInfo.templateEmphasizeType eq 'TEXT'}">
|
||||||
|
<p class="emphasis_side_text"><c:out value="${kakaoTemplateInfo.templateSubtitle}"/></p>
|
||||||
|
<p class="emphasis_title_text"><c:out value="${kakaoTemplateInfo.templateTitle}"/></p>
|
||||||
|
</c:when>
|
||||||
|
<c:when test="${kakaoTemplateInfo.templateEmphasizeType eq 'IMAGE'}">
|
||||||
|
<div class="kakao_image">
|
||||||
|
<img src="<c:url value='${kakaoTemplateInfo.templateImageUrl}'/>" alt="">
|
||||||
|
</div>
|
||||||
|
</c:when>
|
||||||
|
<c:otherwise>
|
||||||
|
</c:otherwise>
|
||||||
|
</c:choose>
|
||||||
|
|
||||||
|
<!-- 알림톡 내용 표시 -->
|
||||||
|
<p class="template_text">
|
||||||
|
<!-- 내용 -->
|
||||||
|
<!-- 내용 -->
|
||||||
|
<c:out value="${fn:replace(fn:replace(kakaoTemplateInfo.templateContent, newLineChar, '<br/>'), newLineChar2, '<br/>')}" escapeXml="false"/>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<!-- 부가정보 내용 -->
|
||||||
|
<c:choose>
|
||||||
|
<c:when test="${kakaoTemplateInfo.templateMessageType eq 'EX'}">
|
||||||
|
<!-- 부가정보형인 경우 부가정보 내용 표시 -->
|
||||||
|
<p class="side_info_text"><c:out value="${kakaoTemplateInfo.templateExtra}"/></p>
|
||||||
|
</c:when>
|
||||||
|
<c:when test="${kakaoTemplateInfo.templateMessageType eq 'AD'}">
|
||||||
|
<!-- 채널 추가형인경우 채널 추가 메세지 표시 -->
|
||||||
|
<p class="channel_info_text"><c:out value="${kakaoTemplateInfo.templateAd}"/></p>
|
||||||
|
</c:when>
|
||||||
|
<c:otherwise>
|
||||||
|
</c:otherwise>
|
||||||
|
</c:choose>
|
||||||
|
|
||||||
|
<!-- 채널 추가형을 선택한 경우 자동으로 버튼이 하나 추가됨, 버튼을 추가한 경우 버튼 정보 표시 -->
|
||||||
|
<c:forEach var="templatInfoButtonList" items="${kakaoTemplateInfo.buttonList}" varStatus="status">
|
||||||
|
<c:choose>
|
||||||
|
<c:when test="${templatInfoButtonList.name eq '채널 추가'}">
|
||||||
|
<button type="button" class="btn_kakao_channel"><img src="/publish/images/content/icon_kakao_channel_plus.png" alt=""> 채널추가</button>
|
||||||
|
</c:when>
|
||||||
|
<c:otherwise>
|
||||||
|
<button type="button" class="btn_kakao_type"><c:out value="${templatInfoButtonList.name}"/></button>
|
||||||
|
</c:otherwise>
|
||||||
|
</c:choose>
|
||||||
|
</c:forEach>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="popCont replace_send_popup" id="popCont_2">
|
||||||
|
<div class="rev_pop_in">
|
||||||
|
<div class="rev_pop_middle clearfix">
|
||||||
|
<span><c:out value="${resultMsgDetail.sentDate }" /></span>
|
||||||
|
<span class="msg_com msg_allimtalk">대체문자</span>
|
||||||
|
</div>
|
||||||
|
<div class="rev_pop_txt">
|
||||||
|
${fn:replace(resultMsgDetail.bizKakaoResendOrgnlTxt, newLineChar, "<br/>")}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
@ -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"); %>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<style>
|
||||||
|
/* Tabulator Placeholder 기본 스타일 유지 */
|
||||||
|
.tabulator-placeholder {
|
||||||
|
font-size: 22px !important; /* 기존 폰트 크기 유지 */
|
||||||
|
color: #e2d6d6 !important; /* 기존 색상 유지 */
|
||||||
|
font-weight: normal !important; /* 기본 폰트 두께 유지 */
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
|
||||||
|
var currentSearchKeyword = ""; // 검색어 저장
|
||||||
|
var currentTabFilter = "전체"; // 현재 선택된 탭 (기본값: 전체)
|
||||||
|
|
||||||
|
var $tbDtailList = null; //에러 팝업 영역
|
||||||
|
$(document).ready(function(){
|
||||||
|
|
||||||
|
//발송 미리보기 영역
|
||||||
|
previewPhone();
|
||||||
|
|
||||||
|
// 탭별 하위 버튼 활성화
|
||||||
|
fn_rowBtnSH('전체');
|
||||||
|
// 주소록 그룹 불러오기
|
||||||
|
getAddrGroupList();
|
||||||
|
|
||||||
|
//Tabulator AJAX Data Loading
|
||||||
|
$tbDtailList = new Tabulator("#detailPopup", {
|
||||||
|
height: "255px",
|
||||||
|
width: "20%",
|
||||||
|
// layout: "fitDataStretch", // 데이터가 너비에 맞게 늘어나도록 설정
|
||||||
|
layout: "fitColumns", // fitDataStretch 대신 fitColumns 사용
|
||||||
|
autoColumns: false,
|
||||||
|
headerHozAlign: "center",
|
||||||
|
validationMode: "highlight",
|
||||||
|
clipboard: false,
|
||||||
|
clipboardCopySelector: "table",
|
||||||
|
clipboardPasteAction: "insert", // insert, update, replace
|
||||||
|
placeholder:"데이터를 불러오고 있습니다...",
|
||||||
|
columns: [
|
||||||
|
{
|
||||||
|
title: "휴대폰",
|
||||||
|
field: "phone",
|
||||||
|
hozAlign: "center",
|
||||||
|
headerHozAlign: "center",
|
||||||
|
widthGrow: 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "상세결과",
|
||||||
|
field: "result",
|
||||||
|
hozAlign: "center",
|
||||||
|
headerHozAlign: "center",
|
||||||
|
widthGrow: 1
|
||||||
|
}
|
||||||
|
]
|
||||||
|
});
|
||||||
|
|
||||||
|
fn_getDetailList();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
$('#goPageBtn').click(function(){
|
||||||
|
$("#goList").submit();
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// 탭 버튼 클릭 이벤트
|
||||||
|
$(".type4 .tabType3 .tab button").on("click", function () {
|
||||||
|
|
||||||
|
// 모든 탭의 active 클래스 제거
|
||||||
|
$(".type4 .tabType3 .tab").removeClass("active");
|
||||||
|
|
||||||
|
// 클릭한 버튼의 부모 요소(li)에 active 클래스 추가
|
||||||
|
$(this).parent().addClass("active");
|
||||||
|
|
||||||
|
// 기존 버튼들의 title 속성 초기화
|
||||||
|
$(".type4 .tabType3 .tab button").removeAttr("title");
|
||||||
|
|
||||||
|
// 선택된 버튼의 title 속성을 "선택됨"으로 변경
|
||||||
|
$(this).attr("title", "선택됨");
|
||||||
|
|
||||||
|
// 검색어 초기화
|
||||||
|
$("#searchInput").val("");
|
||||||
|
|
||||||
|
// 필터 적용 (검색 필터 없이 탭 기준으로만 적용)
|
||||||
|
fn_applyFilters();
|
||||||
|
});
|
||||||
|
|
||||||
|
// 검색 버튼 클릭 시 실행
|
||||||
|
$("#searchBtn").on("click", function () {
|
||||||
|
fn_search();
|
||||||
|
});
|
||||||
|
|
||||||
|
// 실시간 검색 및 Enter 키 이벤트 처리
|
||||||
|
$("#searchInput").on("keyup", function (event) {
|
||||||
|
let keyword = $(this).val().trim();
|
||||||
|
|
||||||
|
if (keyword.length > 2) {
|
||||||
|
console.log("keyword :: ", keyword);
|
||||||
|
fn_applyFilters({ field: "phone", type: "like", value: keyword });
|
||||||
|
} else {
|
||||||
|
fn_applyFilters(null);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Enter 키 입력 시 검색 실행
|
||||||
|
if (event.key === "Enter") {
|
||||||
|
fn_search();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
$('.listClose').on("click", function (){
|
||||||
|
tooltipInit();
|
||||||
|
});
|
||||||
|
|
||||||
|
$('.grpClose').on("click", function (){
|
||||||
|
$('#grpNm').val('')
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
$(document).on('change', '#addrGrpIdInfo', function() {
|
||||||
|
if ($("#addrGrpIdInfo option:selected").val() != "NEW") {
|
||||||
|
$("#grpNm").val(""); // 새그룹명 Clear;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
||||||
|
// window.onload = function(){
|
||||||
|
// setTimeout(() => {
|
||||||
|
// //발송 미리보기 영역
|
||||||
|
// previewPhone();
|
||||||
|
// }, 100000); // 필터 적용 후 반영되도록 약간의 딜레이 추가
|
||||||
|
// }
|
||||||
|
|
||||||
|
//검색 실행 함수
|
||||||
|
function fn_search() {
|
||||||
|
let keyword = $("#searchInput").val().trim();
|
||||||
|
|
||||||
|
if (keyword.length < 3) {
|
||||||
|
alert("검색어를 3자 이상 입력해주세요.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
fn_applyFilters({ field: "phone", type: "like", value: keyword });
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Discription : 튤팁 닫을 때 팝업 초기화
|
||||||
|
*/
|
||||||
|
function tooltipInit(){
|
||||||
|
|
||||||
|
$tbDtailList.clearFilter();
|
||||||
|
$("#searchInput").val('');
|
||||||
|
$("#initTab").click();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Discription : 상세결과 팝업 내용 가져오는 로직
|
||||||
|
*/
|
||||||
|
function fn_getDetailList(){
|
||||||
|
|
||||||
|
var params = {
|
||||||
|
"msgGroupId" : $('#msgGroupId').val()
|
||||||
|
}
|
||||||
|
|
||||||
|
$.ajax({
|
||||||
|
type: "POST",
|
||||||
|
url: "/web/mjon/msgsent/findByMsgDetailListAjax.do",
|
||||||
|
data: params,
|
||||||
|
dataType:'json',
|
||||||
|
async: true,
|
||||||
|
success: function (returnData) {
|
||||||
|
console.log('returnData : ', returnData);
|
||||||
|
if(returnData.status == 'OK'){
|
||||||
|
fn_setData(returnData.object);
|
||||||
|
|
||||||
|
}
|
||||||
|
},
|
||||||
|
error: function (e) { alert("오류가 발생하였습니다."); console.log("ERROR : ", e); }
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Description: 데이터 설정
|
||||||
|
*/
|
||||||
|
function fn_setData(data){
|
||||||
|
// console.log('data : ', data);
|
||||||
|
// $tbDtailList.clearData();
|
||||||
|
|
||||||
|
const resultData = []; // 오류 데이터를 저장할 배열
|
||||||
|
|
||||||
|
data.forEach((row, index) => {
|
||||||
|
|
||||||
|
resultData.push({
|
||||||
|
// addrNm: row.addrNm, // 폰번호
|
||||||
|
phone: row.callTo, // 폰번호
|
||||||
|
result: row.statusTxt // 결과 메시지 추가
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
// 오류 및 중복 데이터를 한 번에 추가
|
||||||
|
$tbDtailList.setData(resultData);
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Discription : 필터 적용
|
||||||
|
*/
|
||||||
|
function fn_applyFilters(newFilter) {
|
||||||
|
console.log("newFilter :: ", newFilter);
|
||||||
|
// 현재 적용된 모든 필터 가져오기
|
||||||
|
let filters = [];
|
||||||
|
|
||||||
|
// 현재 선택된 탭 값 가져오기
|
||||||
|
let selectedTab = $(".type4 .tabType3 .tab.active button").text().trim();
|
||||||
|
|
||||||
|
// 탭 필터 적용 (탭이 "전체"가 아닐 경우)
|
||||||
|
if (selectedTab !== "전체") {
|
||||||
|
filters.push({ field: "result", type: "like", value: selectedTab });
|
||||||
|
}
|
||||||
|
|
||||||
|
// 검색어가 입력된 경우 검색 필터 추가
|
||||||
|
if (newFilter && newFilter.value) {
|
||||||
|
filters.push(newFilter);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 필터 적용
|
||||||
|
$tbDtailList.setFilter(filters);
|
||||||
|
|
||||||
|
// Placeholder 업데이트
|
||||||
|
fn_setPlaceholder("검색 결과가 없습니다.");
|
||||||
|
|
||||||
|
// 툽팁 하위 버튼 삭제
|
||||||
|
fn_rowBtnSH(selectedTab);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Description: 타블레이서 설명 수정
|
||||||
|
*/
|
||||||
|
function fn_setPlaceholder(msg){
|
||||||
|
|
||||||
|
// 검색 후 데이터가 있는지 확인 후 placeholder 변경
|
||||||
|
setTimeout(() => {
|
||||||
|
console.log("$tbDtailList.getRows('active').length :: ", $tbDtailList.getRows('active').length);
|
||||||
|
let filteredRows = $tbDtailList.getRows('active').length; // 필터링된 행 개수 가져오기
|
||||||
|
if (filteredRows === 0) {
|
||||||
|
// 기존 데이터 유지하면서 빈 데이터 추가하여 placeholder 변경
|
||||||
|
$(".tabulator-placeholder").text(msg); // placeholder 메시지 변경
|
||||||
|
}
|
||||||
|
}, 300); // 필터 적용 후 반영되도록 약간의 딜레이 추가
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Description: 필터링된 데이터만 다운로드
|
||||||
|
*/
|
||||||
|
function fn_downloadFilteredExcel() {
|
||||||
|
// 현재 날짜 및 시간 가져오기 (YYYYMMDD_HHMMSS 형식)
|
||||||
|
let now = new Date();
|
||||||
|
let timestamp = now.getFullYear() +
|
||||||
|
("0" + (now.getMonth() + 1)).slice(-2) +
|
||||||
|
("0" + now.getDate()).slice(-2) + "_" +
|
||||||
|
("0" + now.getHours()).slice(-2) +
|
||||||
|
("0" + now.getMinutes()).slice(-2) +
|
||||||
|
("0" + now.getSeconds()).slice(-2);
|
||||||
|
|
||||||
|
// 파일명 생성
|
||||||
|
let fileName = "filtered_data_" + timestamp + ".xlsx";
|
||||||
|
|
||||||
|
// 필터링된 데이터 가져오기
|
||||||
|
let filteredData = getFilteredDataByTab();
|
||||||
|
|
||||||
|
if (filteredData.length === 0) {
|
||||||
|
alert("다운로드할 데이터가 없습니다.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// console.log("엑셀 다운로드 - 필터링된 데이터:", filteredData);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// 컬럼명(타이틀) 설정 (배열 형태로 변환)
|
||||||
|
let headers = [["휴대폰", "상세결과"]];
|
||||||
|
|
||||||
|
console.log(filteredData); // 데이터 확인
|
||||||
|
console.log(filteredData[0]); // 첫 번째 데이터 확인 (객체 키값 체크)
|
||||||
|
|
||||||
|
|
||||||
|
// 필터링된 데이터 배열로 변환
|
||||||
|
let formattedData = filteredData.map(item => [item.phone, item.result]);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// 타이틀 행 추가
|
||||||
|
formattedData.unshift(headers[0]);
|
||||||
|
|
||||||
|
// 엑셀 생성
|
||||||
|
let workbook = XLSX.utils.book_new();
|
||||||
|
let worksheet = XLSX.utils.aoa_to_sheet(formattedData); // `aoa_to_sheet` 사용
|
||||||
|
|
||||||
|
XLSX.utils.book_append_sheet(workbook, worksheet, "Filtered Data");
|
||||||
|
|
||||||
|
// 엑셀 파일 다운로드
|
||||||
|
XLSX.writeFile(workbook, fileName);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @ 예약 취소
|
||||||
|
*/
|
||||||
|
function fnReservCancel(msgGroupId){
|
||||||
|
|
||||||
|
var form = document.resCancelForm;
|
||||||
|
var loginVO = '${LoginVO}';
|
||||||
|
|
||||||
|
form.msgGroupId.value = msgGroupId;
|
||||||
|
|
||||||
|
if(loginVO == "" || loginVO == null){
|
||||||
|
|
||||||
|
alert("로그인 후 이용이 가능합니다.");
|
||||||
|
return false;
|
||||||
|
|
||||||
|
}
|
||||||
|
console.log('msgGroupId : ', msgGroupId);
|
||||||
|
var data = new FormData(form);
|
||||||
|
url = "/web/mjon/reservmsg/deleteReservMsgCancelDataAjax.do";
|
||||||
|
|
||||||
|
if(confirm("정말 예약을 취소하시겠습니까?")){
|
||||||
|
|
||||||
|
$.ajax({
|
||||||
|
type: "POST",
|
||||||
|
url: url,
|
||||||
|
data: data,
|
||||||
|
dataType:'json',
|
||||||
|
async: true,
|
||||||
|
processData: false,
|
||||||
|
contentType: false,
|
||||||
|
cache: false,
|
||||||
|
success: function (returnData, status) {
|
||||||
|
if(status == 'success'){ // status 확인 필요한가. 석세스 안뜨면 에러 가지 않나
|
||||||
|
if("fail"==returnData.result){
|
||||||
|
alert(returnData.message);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
alert("예약 발송이 정상적으로 취소 되었습니다.");
|
||||||
|
|
||||||
|
location.reload(true);
|
||||||
|
|
||||||
|
} else if(status== 'fail'){
|
||||||
|
alert(returnData.message);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
error: function (e) {
|
||||||
|
alert("예약 취소에 실패하였습니다."); console.log("ERROR : ", e);
|
||||||
|
},
|
||||||
|
beforeSend : function(xmlHttpRequest) {
|
||||||
|
//로딩창 show
|
||||||
|
$('.loading_layer').addClass('active');
|
||||||
|
},
|
||||||
|
complete : function(xhr, textStatus) {
|
||||||
|
//로딩창 hide
|
||||||
|
$('.loading_layer').removeClass('active');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @알림톡 재전송
|
||||||
|
*/
|
||||||
|
function fnMjMsgReSendAll() {
|
||||||
|
|
||||||
|
var form = document.reSendAllForm;
|
||||||
|
|
||||||
|
if (!confirm("알림톡 발송 화면으로 이동합니다.")) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// msgKind에 따른 action 설정
|
||||||
|
form.action = "/web/mjon/alimtalk/kakaoAlimtalkMsgDataView.do";
|
||||||
|
|
||||||
|
form.submit();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function fn_rowBtnSH(tabText){
|
||||||
|
var $addReg = $('#addReg');
|
||||||
|
var $addRemove = $('#addRemove');
|
||||||
|
// addReg 주소록 등록
|
||||||
|
// addRemove 주소록 삭제
|
||||||
|
if(tabText == '전체'
|
||||||
|
|| tabText == '성공'){
|
||||||
|
$addReg.show();
|
||||||
|
$addRemove.hide();
|
||||||
|
}else if(tabText == '대기'){
|
||||||
|
$addReg.hide();
|
||||||
|
$addRemove.hide();
|
||||||
|
}else if(tabText == '실패' ){
|
||||||
|
$addReg.hide();
|
||||||
|
$addRemove.show();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function fnAddAddrNo(){
|
||||||
|
|
||||||
|
|
||||||
|
let url = "/web/mjon/addr/insertByAddrGrpDataAndAddrDataAjax.do";
|
||||||
|
|
||||||
|
|
||||||
|
console.log($("#addrGrpIdInfo option:selected").val());
|
||||||
|
console.log($("#grpNm").val());
|
||||||
|
if ($("#addrGrpIdInfo option:selected").val() == "NEW"
|
||||||
|
&& $("#grpNm").val() == "") {
|
||||||
|
alert("저장할 그룹을 선택하거나 새 그룹명을 입력해주세요.");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 필터링된 데이터 가져오기 (탭 필터 적용)
|
||||||
|
let filteredData = getFilteredDataByTab();
|
||||||
|
|
||||||
|
console.log('filteredData : ', filteredData)
|
||||||
|
|
||||||
|
// phone 필드 데이터만 추출
|
||||||
|
let addrPhones = filteredData.map(row => row.phone);
|
||||||
|
// console.log('addrPhones : ', addrPhones)
|
||||||
|
|
||||||
|
if(addrPhones.length < 1){
|
||||||
|
alert('해당 탭에 데이터가 없습니다.');
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 주소록 그룹명 가져오기
|
||||||
|
let addrGrpNm = $('#grpNm').val();
|
||||||
|
let addrGrpId = $("#addrGrpIdInfo option:selected").val();
|
||||||
|
|
||||||
|
// 데이터 객체 생성
|
||||||
|
let data = {
|
||||||
|
addrPhones : addrPhones
|
||||||
|
, addrGrpNm : addrGrpNm
|
||||||
|
, addrGrpId : addrGrpId
|
||||||
|
};
|
||||||
|
|
||||||
|
if(!confirm("연락처 정보를 주소록에 등록 하시겠습니까?")){
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
$.ajax({
|
||||||
|
type: "POST",
|
||||||
|
url: url,
|
||||||
|
data: JSON.stringify(data),
|
||||||
|
dataType: "json",
|
||||||
|
contentType: "application/json",
|
||||||
|
async: false,
|
||||||
|
processData: false,
|
||||||
|
success: function(data) {
|
||||||
|
|
||||||
|
if(data.status == 'BAD_REQUEST'){
|
||||||
|
alert(data.message);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// 성공 메세지
|
||||||
|
alert(data.message);
|
||||||
|
// 그룹등록 팝업 닫기
|
||||||
|
$('.grpClose').click();
|
||||||
|
|
||||||
|
},
|
||||||
|
error: function(error) {
|
||||||
|
alert("오류가 발생하였습니다.")
|
||||||
|
console.error("에러 발생:", error);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function fnDelAddrNo(){
|
||||||
|
|
||||||
|
|
||||||
|
let url = "/web/mjon/addr/deleteAddrNoDataAjax.do";
|
||||||
|
|
||||||
|
|
||||||
|
// 필터링된 데이터 가져오기 (탭 필터 적용)
|
||||||
|
let filteredData = getFilteredDataByTab();
|
||||||
|
|
||||||
|
// phone 필드 데이터만 추출
|
||||||
|
let addrPhones = filteredData.map(row => row.phone);
|
||||||
|
console.log('addrPhones : ', addrPhones)
|
||||||
|
|
||||||
|
if(addrPhones.length < 1){
|
||||||
|
alert('주소록에 살제할 연락처가 없습니다.');
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 데이터 객체 생성
|
||||||
|
let data = {
|
||||||
|
addrPhones: addrPhones
|
||||||
|
};
|
||||||
|
|
||||||
|
let selectedTab = $(".type4 .tabType3 .tab.active button").text().trim();
|
||||||
|
if(!confirm("발송"+selectedTab+" 번호를 주소록에서 삭제하시겠습니까?\n(모든 주소록 그룹에서 삭제)")){
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
$.ajax({
|
||||||
|
type: "POST",
|
||||||
|
url: url,
|
||||||
|
data: JSON.stringify(data),
|
||||||
|
dataType: "json",
|
||||||
|
contentType: "application/json",
|
||||||
|
async: false,
|
||||||
|
processData: false,
|
||||||
|
success: function(data) {
|
||||||
|
|
||||||
|
if(data.status == 'BAD_REQUEST'){
|
||||||
|
alert(data.message);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// 성공 메세지
|
||||||
|
alert(data.message);
|
||||||
|
|
||||||
|
},
|
||||||
|
error: function(error) {
|
||||||
|
alert("오류가 발생하였습니다.")
|
||||||
|
console.error("에러 발생:", error);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* @description 현재 선택된 탭(`result` 필터) 기준으로 데이터를 필터링
|
||||||
|
* @returns {Array} 필터링된 데이터 리스트
|
||||||
|
*/
|
||||||
|
// function getFilteredDataByTab() {
|
||||||
|
// // 현재 적용된 모든 필터 가져오기
|
||||||
|
// let filters = $tbDtailList.getFilters();
|
||||||
|
|
||||||
|
// // 현재 모든 데이터 가져오기 (전체 데이터에서 필터 적용)
|
||||||
|
// let allData = $tbDtailList.getData();
|
||||||
|
|
||||||
|
// // 현재 적용된 필터에서 "result" 필터만 찾기
|
||||||
|
// let tabFilter = filters.find(filter => filter.field === "result");
|
||||||
|
|
||||||
|
// // 탭 필터 적용하여 데이터 필터링 (수신번호 필터는 무시)
|
||||||
|
// return allData.filter(row => tabFilter ? row.result.includes(tabFilter.value) : true);
|
||||||
|
// }
|
||||||
|
function getFilteredDataByTab() {
|
||||||
|
// 현재 표시된(필터링된) 행들을 가져오기
|
||||||
|
let filteredRows = $tbDtailList.getRows('active');
|
||||||
|
|
||||||
|
// 행의 데이터를 배열로 반환
|
||||||
|
return filteredRows.map(row => row.getData());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//주소록 그룹정보 불러오기
|
||||||
|
function getAddrGroupList() {
|
||||||
|
$.ajax({
|
||||||
|
type : "POST",
|
||||||
|
async : false,
|
||||||
|
url : "/web/mjon/addr/addrGroupListAjax.do",
|
||||||
|
data : {},
|
||||||
|
dataType:'json',
|
||||||
|
success : function(data) {
|
||||||
|
//alert(JSON.stringify(data.addrGroupList));
|
||||||
|
|
||||||
|
// Show Html
|
||||||
|
getAddrGroupListShow(data.addrGroupList);
|
||||||
|
},
|
||||||
|
error : function(xhr, status, error) {
|
||||||
|
alert(error);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
//Show Html
|
||||||
|
function getAddrGroupListShow(jsonList) {
|
||||||
|
var sHtml = "";
|
||||||
|
sHtml += "<option value='NEW'>그룹추가</option>";
|
||||||
|
sHtml += "<option value='0'>그룹미지정</option>";
|
||||||
|
sHtml += "<option value='bookmark'>자주보내는 번호</option>";
|
||||||
|
for (var j = 0; j < jsonList.length; j++) {
|
||||||
|
sHtml += " <option value='" + $.trim(jsonList[j].addrGrpId) + "' />" + $.trim(jsonList[j].addrGrpNm) + "</option>";
|
||||||
|
}
|
||||||
|
|
||||||
|
$("#addrGrpIdInfo").html(sHtml);
|
||||||
|
}
|
||||||
|
|
||||||
|
function previewPhone(){
|
||||||
|
$("#previewPhone").load("/web/kakao/sent/selectKakaoSentDetailViewPhoneAjax.do", $(document.resPopForm).serialize() ,function(response, status, xhr){
|
||||||
|
if (status === 'success') {
|
||||||
|
$(this).html(response);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
</script>
|
||||||
|
<div class="inner">
|
||||||
|
|
||||||
|
<input id="msgGroupId" type="hidden" value="${result.msgGroupId}"/>
|
||||||
|
|
||||||
|
<!-- send top -->
|
||||||
|
<div class="send_top">
|
||||||
|
<!-- 결제관리 - 요금 사용내역 -->
|
||||||
|
<div class="rev_admin_cont serv_content current">
|
||||||
|
<div class="heading">
|
||||||
|
<h2>발송결과 상세</h2>
|
||||||
|
<button type="button" class="button junk" data-tooltip="popupJunk" style="right:0;">통신사 스팸규격안내</button>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- 발송결과 상세 및 미리보기-->
|
||||||
|
|
||||||
|
<div class="send_general">
|
||||||
|
<!-- 발송결과 상세 정보 -->
|
||||||
|
<div class="resultcont_left">
|
||||||
|
<!--발송정보-->
|
||||||
|
<div class="res_info">
|
||||||
|
<div class="res_info_in">
|
||||||
|
<div class="res_info_top clearfix">
|
||||||
|
<p>발송정보</p>
|
||||||
|
<p><button type="button" class="btnType btnType3" onclick="fnMjMsgReSendAll();">재전송</button></p>
|
||||||
|
</div>
|
||||||
|
<div class="res_info_btm">
|
||||||
|
<dl>
|
||||||
|
<dt>발송일시</dt>
|
||||||
|
<dd>${result.reqDate}</dd>
|
||||||
|
</dl>
|
||||||
|
<c:if test="${result.reserveYn eq 'Y' }">
|
||||||
|
<dl><!-- 예약 시 -->
|
||||||
|
<dt>등록일시</dt>
|
||||||
|
<dd>${result.regDate}</dd>
|
||||||
|
</dl>
|
||||||
|
</c:if>
|
||||||
|
<dl>
|
||||||
|
<dt>형태</dt>
|
||||||
|
<dd>
|
||||||
|
<c:if test="${result.msgType eq '8'}">알림톡</c:if>
|
||||||
|
<c:if test="${result.msgType eq '9'}">친구톡</c:if>
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
<dl>
|
||||||
|
<dt>발송건수</dt>
|
||||||
|
<dd><span class="c_222"><fmt:formatNumber value="${result.msgGroupCnt}" type="number" groupingUsed="true" /></span>건</dd>
|
||||||
|
</dl>
|
||||||
|
<dl>
|
||||||
|
<dt>채널정보</dt>
|
||||||
|
<dd><c:out value="${result.yellowId}"/></dd>
|
||||||
|
</dl>
|
||||||
|
<dl>
|
||||||
|
<dt>진행상황
|
||||||
|
<!-- 예약인 경우 -->
|
||||||
|
<c:if test="${result.reserveYn eq 'Y'}">
|
||||||
|
<div class="icon_wrap">
|
||||||
|
<div class="re">예약</div>
|
||||||
|
<!-- 예약일때만 분할이 있음 -->
|
||||||
|
<c:if test="${result.divideYn eq 'Y'}">
|
||||||
|
<div class="di_info">
|
||||||
|
<button class="di">분할</button>
|
||||||
|
<div class="di_hover_layer">
|
||||||
|
<strong>${result.divideText }</strong>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</c:if>
|
||||||
|
</div>
|
||||||
|
</c:if>
|
||||||
|
<!--// 예약인 경우 -->
|
||||||
|
</dt>
|
||||||
|
<dd>
|
||||||
|
|
||||||
|
<c:choose>
|
||||||
|
<c:when test="${result.statusCd eq '04' }">
|
||||||
|
예약취소(<c:out value="${result.canceldate }" />)
|
||||||
|
</c:when>
|
||||||
|
<c:when test="${result.statusCd ne '03' }">
|
||||||
|
<ec:code codeId="ITN057" code="${result.statusCd }" />
|
||||||
|
</c:when>
|
||||||
|
<c:otherwise>
|
||||||
|
<p><button class="btnType btnType20" onClick="javascript:fnReservCancel('${result.msgGroupId}'); return false;">예약취소</button></p>
|
||||||
|
</c:otherwise>
|
||||||
|
</c:choose>
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
</div>
|
||||||
|
<div class="res_info_btm">
|
||||||
|
<dl>
|
||||||
|
<dt class="btm_charge">발송요금(합계)</dt>
|
||||||
|
<dd><span class="stcharge">
|
||||||
|
<c:if test="${result.totPrice ne '-'}">
|
||||||
|
<fmt:formatNumber value="${result.totPrice}" type="number" groupingUsed="true" minFractionDigits="0" maxFractionDigits="1" />
|
||||||
|
</c:if>
|
||||||
|
<c:if test="${result.totPrice eq '-'}">
|
||||||
|
0
|
||||||
|
</c:if>
|
||||||
|
</span>원</dd>
|
||||||
|
<!--<dd><span class="stcharge">-</span>원</dd>--><!-- 예역취소 후 금액은 하이픈 처리-->
|
||||||
|
</dl>
|
||||||
|
<div class="charge_line">
|
||||||
|
<dl>
|
||||||
|
<dt class="charge_title">· 카카오톡</dt>
|
||||||
|
<dd><span class="c_222">
|
||||||
|
<fmt:formatNumber value="${result.successPrice}" type="number" groupingUsed="true" minFractionDigits="0" maxFractionDigits="1" />
|
||||||
|
</span>원</dd>
|
||||||
|
</dl>
|
||||||
|
<dl>
|
||||||
|
<dt class="charge_title">· 대체문자</dt>
|
||||||
|
<dd><span class="c_222">
|
||||||
|
<fmt:formatNumber value="${result.kakaoResendSuccPrice}" type="number" groupingUsed="true" minFractionDigits="0" maxFractionDigits="1" />
|
||||||
|
</span>원</dd>
|
||||||
|
</dl>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<!--// 발송정보-->
|
||||||
|
<!--상세결과-->
|
||||||
|
<div class="res_info">
|
||||||
|
<div class="res_info_in">
|
||||||
|
<div class="res_info_top clearfix" style="padding:0 0 10px 0;">
|
||||||
|
<p>상세결과</p>
|
||||||
|
<p></p>
|
||||||
|
</div>
|
||||||
|
<div class="res_num">
|
||||||
|
<div class="res_info_btm1">
|
||||||
|
<dl>
|
||||||
|
<dt>전체건수</dt>
|
||||||
|
<dd><a href="#" data-tooltip="rev_popup04"><span class="c_222_g"><fmt:formatNumber value="${result.msgGroupCnt}" type="number" groupingUsed="true" /></span>건</a></dd>
|
||||||
|
</dl>
|
||||||
|
</div>
|
||||||
|
<div class="res_info_btm1">
|
||||||
|
<dl>
|
||||||
|
<dt>성공건수</dt>
|
||||||
|
<dd><span class="c_002c9a_g"><fmt:formatNumber value="${result.successCount}" type="number" groupingUsed="true" /></span>건(${result.successPct})</dd>
|
||||||
|
</dl>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="res_num">
|
||||||
|
<div class="res_info_btm1">
|
||||||
|
<dl>
|
||||||
|
<dt>대기건수</dt>
|
||||||
|
<dd><span class="c_666_g"><fmt:formatNumber value="${result.waitCount}" type="number" groupingUsed="true" /></span>건(${result.waitingPct})</dd>
|
||||||
|
</dl>
|
||||||
|
</div>
|
||||||
|
<div class="res_info_btm1">
|
||||||
|
<dl>
|
||||||
|
<dt>실패건수</dt>
|
||||||
|
<dd><span class="c_e40000_g"><fmt:formatNumber value="${result.failCount}" type="number" groupingUsed="true" /></span>건(${result.failedPct})</dd>
|
||||||
|
</dl>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<p class="table_bottom_txt">* 전체건수를 클릭하면 받는 사람 상세정보를 확인하실 수 있습니다.</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<!--// 상세결과-->
|
||||||
|
</div>
|
||||||
|
<!--// 발송결과 상세 정보 -->
|
||||||
|
|
||||||
|
<!-- 발송결과 미리보기 -->
|
||||||
|
<div class="resultcont_right" id="previewPhone">
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<!--// 발송결과 미리보기 -->
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!--// 발송결과 상세 및 미리보기-->
|
||||||
|
|
||||||
|
<!-- 목록-->
|
||||||
|
<div class="btn_list_type1">
|
||||||
|
<button class="btnType btnType17">목록</button>
|
||||||
|
</div>
|
||||||
|
<!--// 목록-->
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<!--// send top -->
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<!-- 발송대상리스트 팝업 -->
|
||||||
|
<div class="tooltip-wrap">
|
||||||
|
<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;">
|
||||||
|
<div class="popup_heading">
|
||||||
|
<p>발송대상 리스트</p>
|
||||||
|
<button type="button" class="tooltip-close listClose" data-focus="rev_popup04-close"><img src="/publish/images/content/layerPopup_close.png" alt="팝업 닫기"></button>
|
||||||
|
</div>
|
||||||
|
<div class="layer_in">
|
||||||
|
<div class="popup_search_type2">
|
||||||
|
<label for="" class="label">검색종류 선택</label>
|
||||||
|
<div class="title">수신번호</div>
|
||||||
|
<label for="" class="label">검색어입력</label>
|
||||||
|
<input type="text" class="send_text" id="searchInput" placeholder="3자 이상 입력하세요." onfocus="this.placeholder=''" onblur="this.placeholder='3자 이상 입력하세요.'">
|
||||||
|
<button type="button" id="searchBtn" class="btnType btnType2" style="width:63px; margin:0;">검색</button>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="list_tab_wrap2 type4">
|
||||||
|
<ul class="tabType3" id="tabType" name="tabType">
|
||||||
|
<li class="tab active"><button type="button" id="initTab" title="선택됨">전체</button></li>
|
||||||
|
<li class="tab"><button type="button">대기</button></li>
|
||||||
|
<li class="tab"><button type="button">성공</button></li>
|
||||||
|
<li class="tab"><button type="button">실패</button></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="tb_wrap" id="detailPopup" style="min-height:200px;">
|
||||||
|
<!-- 타블레이터 영역 -->
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="table_btn clearfix">
|
||||||
|
<div class="table_btn_left">
|
||||||
|
<button type="button" onclick="fn_downloadFilteredExcel()" class="excel_btn btnType"><i class="downroad"></i>엑셀 다운로드</button>
|
||||||
|
<button type="button" id="addReg" data-tooltip="rev_popup02" class="btnType btnType14"><i class="add_img"></i>주소록 등록</button>
|
||||||
|
<button type="button" onclick="fnDelAddrNo()" id="addRemove" class="btnType btnType15"><i class="remove_img"></i>주소록에서 번호 삭제</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="popup_btn_wrap2" style="margin: -40px auto 30px auto;">
|
||||||
|
<button type="button" class="tooltip-close listClose" data-focus="adr_popup01-close" data-focus-next="popup02">닫기</button>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<!-- //발송대상 리스트 안내 팝업 -->
|
||||||
|
|
||||||
|
<!-- 주소록에 등록 팝업 -->
|
||||||
|
<div class="tooltip-wrap">
|
||||||
|
<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;">
|
||||||
|
<div class="popup_heading">
|
||||||
|
<p>주소록에 등록</p>
|
||||||
|
<button type="button" class="tooltip-close grpClose" data-focus="rev_popup02-close"><img src="/publish/images/content/layerPopup_close.png" alt="팝업 닫기"></button>
|
||||||
|
</div>
|
||||||
|
<div class="layer_in">
|
||||||
|
<table class="layer_tType1 style1">
|
||||||
|
<caption>주소록 그룹선택 표</caption>
|
||||||
|
<colgroup>
|
||||||
|
<col style="width: 80px">
|
||||||
|
<col style="width: auto">
|
||||||
|
</colgroup>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<th>그룹 선택</th>
|
||||||
|
<td>
|
||||||
|
<label for="" class="label">그룹 선택</label>
|
||||||
|
<select id="addrGrpIdInfo" name="addrGrpIdInfo">
|
||||||
|
</select>
|
||||||
|
<label for="" class="label">그룹명 입력</label>
|
||||||
|
<input type="text" id="grpNm" placeholder="새 그룹명을 입력해주세요." maxlength="24" onfocus="this.placeholder=''" onblur="this.placeholder='새 그룹명을 입력해주세요.'" class="inputLight">
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
<div class="popup_btn_wrap2">
|
||||||
|
<button type="button" onclick="fnAddAddrNo()">등록</button>
|
||||||
|
<button type="button" class="tooltip-close grpClose" data-focus="rev_popup02-close" data-focus-next="rev_popup02">닫기</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<!--// 주소록에 등록 팝업 -->
|
||||||
|
|
||||||
|
<!-- 이전 리스트 상태(검색조건, 페이징) 그대로 가기 위한 form -->
|
||||||
|
<form id="goList" name="goList" method="post" action="/web/mjon/msgsent/selectMsgSentView.do">
|
||||||
|
<input type="hidden" name="pageIndex" value="<c:out value="${searchVO.pageIndex}" />" />
|
||||||
|
<input type="hidden" name="searchSortCnd" value="<c:out value='${searchVO.searchSortCnd }' />" />
|
||||||
|
<input type="hidden" name="searchSortOrd" value="<c:out value='${searchVO.searchSortOrd }' />" />
|
||||||
|
<input type="hidden" name="searchCondition01" value="<c:out value='${searchVO.searchCondition01 }' />" />
|
||||||
|
<input type="hidden" name="searchCondition02" value="<c:out value='${searchVO.searchCondition02 }' />" />
|
||||||
|
<input type="hidden" name="searchStartDate" value="<c:out value='${searchVO.searchStartDate }' />" />
|
||||||
|
<input type="hidden" name="searchEndDate" value="<c:out value='${searchVO.searchEndDate }' />" />
|
||||||
|
<input type="hidden" name="searchCondition" value="<c:out value='${searchVO.searchCondition }' />" />
|
||||||
|
<input type="hidden" name="searchKeyword" value="<c:out value='${searchVO.searchKeyword }' />" />
|
||||||
|
<input type="hidden" name="pageUnit" value="<c:out value='${searchVO.pageUnit }' />" />
|
||||||
|
</form>
|
||||||
|
|
||||||
|
<!-- 예약 취소 -->
|
||||||
|
<form id="resCancelForm" name="resCancelForm" method="post">
|
||||||
|
<input type="hidden" id="msgGroupId" name="msgGroupId" value=""/>
|
||||||
|
</form>
|
||||||
|
|
||||||
|
<!-- 재발송 form -->
|
||||||
|
<form name="reSendAllForm" method="post">
|
||||||
|
<input type="hidden" name="msgResendAllFlag" value="Y"/>
|
||||||
|
<input type="hidden" name="msgResendAllGroupId" value="${result.msgGroupId}"/>
|
||||||
|
<input type="hidden" name="msgResendAllYellowId" value="${result.yellowId}"/>
|
||||||
|
<input type="hidden" name="msgResendAllTmpKey" value="${result.msgNoticetalkTmpKey}"/>
|
||||||
|
</form>
|
||||||
|
|
||||||
|
<form id="resPopForm" name="resPopForm" method="post">
|
||||||
|
<input type="hidden" id="msgGroupId" name="msgGroupId" value="${result.msgGroupId}"/>
|
||||||
|
<!-- <input type="hidden" id="msgId" name="msgId" value=""/> -->
|
||||||
|
</form>
|
||||||
|
|
||||||
@ -45,20 +45,6 @@ $(document).ready(function(){
|
|||||||
threefulstday = prevMonth(3);
|
threefulstday = prevMonth(3);
|
||||||
threefuledday = today();
|
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 (){
|
$(document).on('click', '.sort', function (){
|
||||||
listSortOrd(this);
|
listSortOrd(this);
|
||||||
@ -101,6 +87,9 @@ $(document).ready(function(){
|
|||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
//발송건수 셋
|
||||||
|
cntSet();
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
//오늘날짜 구하기
|
//오늘날짜 구하기
|
||||||
@ -147,56 +136,16 @@ function linkPage(pageNo){
|
|||||||
form.pageIndex.value = pageNo;
|
form.pageIndex.value = pageNo;
|
||||||
|
|
||||||
var sendData = $(document.searchForm).serializeArray();
|
var sendData = $(document.searchForm).serializeArray();
|
||||||
$(".msgSentAllLoad").html('<div class="list_info"><table class="tType4"><tbody><tr><td colspan="12">LOADING...</td></tr></tbody></table></div>');
|
// $(".msgSentAllLoad").html('<div class="list_info"><table class="tType4"><tbody><tr><td colspan="12">LOADING...</td></tr></tbody></table></div>');
|
||||||
|
$(".msgSentAllLoad tbody:first").html('<tr><td colspan="12">LOADING...</td></tr>');
|
||||||
$(".msgSentAllLoad").load("/web/kakao/sent/selectKakaoSentListViewAjax.do", sendData ,function(response, status, xhr){
|
$(".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){
|
function fnRevDetailPop(msgGroupId, msgId){
|
||||||
document.resPopForm.msgGroupId.value = msgGroupId;
|
document.resPopForm.msgGroupId.value = msgGroupId;
|
||||||
@ -204,20 +153,11 @@ function fnRevDetailPop(msgGroupId, msgId){
|
|||||||
var sendData = $(document.resPopForm).serializeArray();
|
var sendData = $(document.resPopForm).serializeArray();
|
||||||
|
|
||||||
var form = document.searchForm;
|
var form = document.searchForm;
|
||||||
if (form.listType.value == "privateList") {
|
$("#msgSentDetailPopLoad").load("/web/kakao/sent/selectKakaoSentDetailDataAjax.do", sendData ,function(response, status, xhr){
|
||||||
// 개인별
|
// 상세보기 클릭때마다 툴팁 1 tab이 열리게 설정
|
||||||
$("#msgSentDetailPopLoad").load("/web/kakao/sent/selectKakaoSentDetailData2Ajax.do", sendData ,function(response, status, xhr){
|
popupTab($('#atBtn'),'1');
|
||||||
$('#tooltopClick').trigger('click');
|
$('#tooltopClick').trigger('click');
|
||||||
});
|
});
|
||||||
}
|
|
||||||
else {
|
|
||||||
// 전송건별
|
|
||||||
$("#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.btn_tab").removeClass("active");
|
||||||
$tab.siblings("li.tab").find("button").removeAttr("title");
|
$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;
|
form.stateType.value = pageType;
|
||||||
|
|
||||||
linkPage(1);
|
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(){
|
function fnReSendMsg(){
|
||||||
|
|
||||||
var msgSeq = [];
|
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) {
|
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){
|
function infoPop(pageUrl){
|
||||||
document.popForm.pageType.value = pageUrl;
|
document.popForm.pageType.value = pageUrl;
|
||||||
@ -685,33 +299,90 @@ function infoPop(pageUrl){
|
|||||||
document.popForm.submit();
|
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();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
<!-- 문자내용 팝업 data-tooltip: rev_popup01 -->
|
|
||||||
<div class="tooltip-wrap">
|
|
||||||
<div class="popup-com adr_layer kakao_rev_popup rev_popup01" tabindex="0" data-tooltip-con="rev_popup01"
|
|
||||||
data-focus="rev_popup01" data-focus-prev="rev_popup01-close" style="width: 440px;">
|
|
||||||
<div class="popup_heading">
|
|
||||||
<p>문자내용</p>
|
|
||||||
<button type="button" class="tooltip-close" data-focus="rev_popup01-close"><img
|
|
||||||
src="/publish/images/content/layerPopup_close.png" alt="팝업 닫기"></button>
|
|
||||||
</div>
|
|
||||||
<div class="layer_in">
|
|
||||||
|
|
||||||
<!-- 팝업 상세내용 노출 -->
|
|
||||||
<div id="msgSentDetailPopLoad" >
|
|
||||||
</div>
|
|
||||||
<div class="popup_btn_wrap2" style="justify-content: center;">
|
|
||||||
<button type="button" class="tooltip-close" data-focus="rev_popup01-close"
|
|
||||||
data-focus-next="rev_popup01">닫기</button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<!-- //문자내용 팝업 data-tooltip: rev_popup01 -->
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<!-- 그룹등록 팝업 data-tooltip:rev_popup02 -->
|
<!-- 그룹등록 팝업 data-tooltip:rev_popup02 -->
|
||||||
<div class="tooltip-wrap">
|
<div class="tooltip-wrap">
|
||||||
@ -763,154 +434,19 @@ function infoPop(pageUrl){
|
|||||||
<input type="hidden" id="listType" name="listType" value="groupList"/><!-- 리스트 종류 -->
|
<input type="hidden" id="listType" name="listType" value="groupList"/><!-- 리스트 종류 -->
|
||||||
<input type="hidden" id="addrGrpNm" name="addrGrpNm" value=""/><!-- 주소록 그룹 이름 -->
|
<input type="hidden" id="addrGrpNm" name="addrGrpNm" value=""/><!-- 주소록 그룹 이름 -->
|
||||||
<input type="hidden" id="mberId" name="mberId" value="${LoginVO.id}"/><!-- 주소록 그룹 이름 -->
|
<input type="hidden" id="mberId" name="mberId" value="${LoginVO.id}"/><!-- 주소록 그룹 이름 -->
|
||||||
|
<input type="hidden" id="ntceBgnde" name="ntceBgnde" value=""/>
|
||||||
<!-- 각 통계별 총 건수 -->
|
<input type="hidden" id="ntceEndde" name="ntceEndde" value=""/>
|
||||||
<c:set var="totAllCnt" value="0"/><!-- 전체 건수 -->
|
<input type="hidden" id="msgGroupId" name="msgGroupId" value=""/>
|
||||||
<c:set var="totAtCnt" value="0"/><!-- 알림톡 건수 -->
|
|
||||||
<c:set var="totFtCnt" value="0"/><!-- 친구톡 건수 -->
|
|
||||||
|
|
||||||
<!-- 각 통계별 성공, 실패 건수 처리 -->
|
|
||||||
<c:set var="waitAllCnt" value="0"/><!-- 전체 대기 건수 -->
|
|
||||||
<c:set var="succAllCnt" value="0"/><!-- 전체 성공 건수 -->
|
|
||||||
<c:set var="failAllCnt" value="0"/><!-- 전체 실패 건수 -->
|
|
||||||
<c:set var="waitAtCnt" value="0"/><!-- 알림톡 대기 건수 -->
|
|
||||||
<c:set var="succAtCnt" value="0"/><!-- 알림톡 성공 건수 -->
|
|
||||||
<c:set var="failAtCnt" value="0"/><!-- 알림톡 실패 건수 -->
|
|
||||||
<c:set var="waitFtCnt" value="0"/><!-- 친구톡 대기 건수 -->
|
|
||||||
<c:set var="succFtCnt" value="0"/><!-- 친구톡 성공 건수 -->
|
|
||||||
<c:set var="failFtCnt" value="0"/><!-- 친구톡 실패 건수 -->
|
|
||||||
<!-- 발송대기 건수가 있으면 이것도 발송 실패건수로 일단 집계한다. -->
|
|
||||||
<c:forEach var="totalMsgCnt" items="${totalMsgCnt}" varStatus="status">
|
|
||||||
|
|
||||||
<!-- 전체 갯수 구하기 -->
|
|
||||||
<c:set var="totAllCnt" value="${totAllCnt + totalMsgCnt.msgResultCnt}"/>
|
|
||||||
|
|
||||||
<!-- 전체 대기 갯수 -->
|
|
||||||
<c:if test="${totalMsgCnt.msgResultSts == 'W'}">
|
|
||||||
<c:set var="waitAllCnt" value="${waitAllCnt + totalMsgCnt.msgResultCnt}"/>
|
|
||||||
</c:if>
|
|
||||||
|
|
||||||
<!-- 전체 성공 갯수 -->
|
|
||||||
<c:if test="${totalMsgCnt.msgResultSts == 'S'}">
|
|
||||||
<c:set var="succAllCnt" value="${succAllCnt + totalMsgCnt.msgResultCnt}"/>
|
|
||||||
</c:if>
|
|
||||||
|
|
||||||
<!-- 전체 실패 갯수 -->
|
|
||||||
<c:if test="${totalMsgCnt.msgResultSts == 'F'}">
|
|
||||||
<c:set var="failAllCnt" value="${failAllCnt + totalMsgCnt.msgResultCnt}"/>
|
|
||||||
</c:if>
|
|
||||||
|
|
||||||
</c:forEach>
|
|
||||||
|
|
||||||
<!-- 알림톡 처리 -->
|
|
||||||
<c:forEach var="atCnt" items="${atCnt}" varStatus="status">
|
|
||||||
|
|
||||||
<!-- 단문 전체 갯수 구하기 -->
|
|
||||||
<c:set var="totAtCnt" value="${totAtCnt + atCnt.msgResultCnt}"/>
|
|
||||||
|
|
||||||
<!-- 단문 대기 갯수 구하기 -->
|
|
||||||
<c:if test="${atCnt.msgResultSts == 'W'}">
|
|
||||||
<c:set var="waitAtCnt" value="${waitAtCnt + atCnt.msgResultCnt}"/>
|
|
||||||
</c:if>
|
|
||||||
|
|
||||||
<!-- 단문 성공 갯수 구하기 -->
|
|
||||||
<c:if test="${atCnt.msgResultSts == 'S'}">
|
|
||||||
<c:set var="succAtCnt" value="${succAtCnt + atCnt.msgResultCnt}"/>
|
|
||||||
</c:if>
|
|
||||||
|
|
||||||
<!-- 단문 실패 갯수 구하기 -->
|
|
||||||
<c:if test="${atCnt.msgResultSts == 'F'}">
|
|
||||||
<c:set var="failAtCnt" value="${failAtCnt + atCnt.msgResultCnt}"/>
|
|
||||||
</c:if>
|
|
||||||
|
|
||||||
</c:forEach>
|
|
||||||
|
|
||||||
<!-- 친구톡 처리 -->
|
|
||||||
<c:forEach var="ftCnt" items="${ftCnt}" varStatus="status">
|
|
||||||
|
|
||||||
<!-- 장문 전체 갯수 구하기 -->
|
|
||||||
<c:set var="totFtCnt" value="${totFtCnt + ftCnt.msgResultCnt}"/>
|
|
||||||
|
|
||||||
<!-- 장문 대기 갯수 구하기 -->
|
|
||||||
<c:if test="${ftCnt.msgResultSts == 'W'}">
|
|
||||||
<c:set var="waitFtCnt" value="${waitFtCnt + ftCnt.msgResultCnt}"/>
|
|
||||||
</c:if>
|
|
||||||
|
|
||||||
<!-- 장문 성공 갯수 구하기 -->
|
|
||||||
<c:if test="${ftCnt.msgResultSts == 'S'}">
|
|
||||||
<c:set var="succFtCnt" value="${succFtCnt + ftCnt.msgResultCnt}"/>
|
|
||||||
</c:if>
|
|
||||||
|
|
||||||
<!-- 장문 실패 갯수 구하기 -->
|
|
||||||
<c:if test="${ftCnt.msgResultSts == 'F'}">
|
|
||||||
<c:set var="failFtCnt" value="${failFtCnt + ftCnt.msgResultCnt}"/>
|
|
||||||
</c:if>
|
|
||||||
|
|
||||||
</c:forEach>
|
|
||||||
<div class="rev_content kakao_rev_content" id="tab5_2">
|
<div class="rev_content kakao_rev_content" id="tab5_2">
|
||||||
<div class="rev_admin">
|
|
||||||
<div class="rev_admin_in">
|
<!-- 발송결과 개선 : 문구추가 -->
|
||||||
<div class="rev_admin_top clearfix">
|
<div class="titBox_result">
|
||||||
<p>전체</p>
|
<p>- 최대 3개월간의 발송내역만 확인하실 수 있습니다.</p>
|
||||||
<p><span><fmt:formatNumber value="${totAllCnt}" pattern="#,###"/></span> 건</p>
|
<p>- 전송내역이 필요한 경우 기간 내에 다운로드하여 주시기 바랍니다.</p>
|
||||||
</div>
|
|
||||||
<div class="rev_admin_btm">
|
|
||||||
<dl>
|
|
||||||
<dt>대기</dt>
|
|
||||||
<dd><span class="c_002c9a"><fmt:formatNumber value="${waitAllCnt}" pattern="#,###"/></span>건</dd>
|
|
||||||
</dl>
|
|
||||||
<dl>
|
|
||||||
<dt>성공</dt>
|
|
||||||
<dd><span class="c_002c9a"><fmt:formatNumber value="${succAllCnt}" pattern="#,###"/></span>건</dd>
|
|
||||||
</dl>
|
|
||||||
<dl>
|
|
||||||
<dt>실패</dt>
|
|
||||||
<dd><span class="c_e40000"><fmt:formatNumber value="${failAllCnt}" pattern="#,###"/></span>건</dd>
|
|
||||||
</dl>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="rev_admin_in">
|
|
||||||
<div class="rev_admin_top clearfix">
|
|
||||||
<p>알림톡</p>
|
|
||||||
<p><span><fmt:formatNumber value="${totAtCnt}" pattern="#,###"/></span> 건</p>
|
|
||||||
</div>
|
|
||||||
<div class="rev_admin_btm">
|
|
||||||
<dl>
|
|
||||||
<dt>대기</dt>
|
|
||||||
<dd><span class="c_002c9a"><fmt:formatNumber value="${waitAtCnt}" pattern="#,###"/></span>건</dd>
|
|
||||||
</dl>
|
|
||||||
<dl>
|
|
||||||
<dt>성공</dt>
|
|
||||||
<dd><span class="c_002c9a"><fmt:formatNumber value="${succAtCnt}" pattern="#,###"/></span>건</dd>
|
|
||||||
</dl>
|
|
||||||
<dl>
|
|
||||||
<dt>실패</dt>
|
|
||||||
<dd><span class="c_e40000"><fmt:formatNumber value="${failAtCnt}" pattern="#,###"/></span>건</dd>
|
|
||||||
</dl>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<%-- <div class="rev_admin_in">
|
|
||||||
<div class="rev_admin_top clearfix">
|
|
||||||
<p>친구톡</p>
|
|
||||||
<p><span><fmt:formatNumber value="${totFtCnt}" pattern="#,###"/></span> 건</p>
|
|
||||||
</div>
|
|
||||||
<div class="rev_admin_btm">
|
|
||||||
<dl>
|
|
||||||
<dt>대기</dt>
|
|
||||||
<dd><span class="c_002c9a"><fmt:formatNumber value="${waitFtCnt}" pattern="#,###"/></span>건</dd>
|
|
||||||
</dl>
|
|
||||||
<dl>
|
|
||||||
<dt>성공</dt>
|
|
||||||
<dd><span class="c_002c9a"><fmt:formatNumber value="${succFtCnt}" pattern="#,###"/></span>건</dd>
|
|
||||||
</dl>
|
|
||||||
<dl>
|
|
||||||
<dt>실패</dt>
|
|
||||||
<dd><span class="c_e40000"><fmt:formatNumber value="${failFtCnt}" pattern="#,###"/></span>건</dd>
|
|
||||||
</dl>
|
|
||||||
</div>
|
|
||||||
</div> --%>
|
|
||||||
</div>
|
</div>
|
||||||
|
<!--// 발송결과 개선 : 문구추가 -->
|
||||||
|
|
||||||
<div class="excel_middle">
|
<div class="excel_middle">
|
||||||
<div class="select_btnWrap clearfix">
|
<div class="select_btnWrap clearfix">
|
||||||
<div class="btn_left">
|
<div class="btn_left">
|
||||||
@ -931,6 +467,8 @@ function infoPop(pageUrl){
|
|||||||
<div class="btn_right">
|
<div class="btn_right">
|
||||||
<label for="searchCondition" class="label">발신번호 선택 == ${kakaoSentVO.searchCondition}</label>
|
<label for="searchCondition" class="label">발신번호 선택 == ${kakaoSentVO.searchCondition}</label>
|
||||||
<select name="searchCondition" id="searchCondition" class="selType2">
|
<select name="searchCondition" id="searchCondition" class="selType2">
|
||||||
|
<option value="4" <c:if test="${kakaoSentVO.searchCondition == '3'}">selected</c:if> >채널ID</option>
|
||||||
|
<option value="5" <c:if test="${kakaoSentVO.searchCondition == '3'}">selected</c:if> >내용</option>
|
||||||
<option value="3" <c:if test="${kakaoSentVO.searchCondition == '3'}">selected</c:if> >수신번호</option>
|
<option value="3" <c:if test="${kakaoSentVO.searchCondition == '3'}">selected</c:if> >수신번호</option>
|
||||||
</select>
|
</select>
|
||||||
<div class="search">
|
<div class="search">
|
||||||
@ -941,6 +479,91 @@ function infoPop(pageUrl){
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div class="rev_admin" id="lodingBefore">
|
||||||
|
<div class="rev_admin_in">
|
||||||
|
<div class="rev_admin_top clearfix">
|
||||||
|
<p>전체</p>
|
||||||
|
<p></p>
|
||||||
|
</div>
|
||||||
|
<div class="rev_admin_btm admin_btm">
|
||||||
|
<table class="tType4"><tbody><tr><td>LOADING...</td></tr></tbody></table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="rev_admin_in">
|
||||||
|
<div class="rev_admin_top clearfix">
|
||||||
|
<p>알림톡</p>
|
||||||
|
<p></p>
|
||||||
|
</div>
|
||||||
|
<div class="rev_admin_btm admin_btm">
|
||||||
|
<table class="tType4"><tbody><tr><td>LOADING...</td></tr></tbody></table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="rev_admin" id="lodingAfter" style="display:none;">
|
||||||
|
<div class="rev_admin_in" id="allCnt">
|
||||||
|
<div class="rev_admin_top clearfix">
|
||||||
|
<p>전체</p>
|
||||||
|
<p><span name="allCnt">0</span> 건</p>
|
||||||
|
</div>
|
||||||
|
<div class="rev_admin_btm">
|
||||||
|
<dl>
|
||||||
|
<dt>대기</dt>
|
||||||
|
<dd><span class="c_002c9a" name="waitCnt">0</span>건</dd>
|
||||||
|
</dl>
|
||||||
|
<dl>
|
||||||
|
<dt>성공</dt>
|
||||||
|
<dd><span class="c_002c9a" name="succCnt">0</span>건</dd>
|
||||||
|
</dl>
|
||||||
|
<dl>
|
||||||
|
<dt>실패</dt>
|
||||||
|
<dd><span class="c_e40000" name="failCnt">0</span>건</dd>
|
||||||
|
</dl>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="rev_admin_in" id="atCnt">
|
||||||
|
<div class="rev_admin_top clearfix">
|
||||||
|
<p>알림톡</p>
|
||||||
|
<p><span name="allCnt">0</span> 건</p>
|
||||||
|
</div>
|
||||||
|
<div class="rev_admin_btm">
|
||||||
|
<dl>
|
||||||
|
<dt>대기</dt>
|
||||||
|
<dd><span class="c_002c9a" name="waitCnt">0</span>건</dd>
|
||||||
|
</dl>
|
||||||
|
<dl>
|
||||||
|
<dt>성공</dt>
|
||||||
|
<dd><span class="c_002c9a" name="succCnt">0</span>건</dd>
|
||||||
|
</dl>
|
||||||
|
<dl>
|
||||||
|
<dt>실패</dt>
|
||||||
|
<dd><span class="c_e40000" name="failCnt">0</span>건</dd>
|
||||||
|
</dl>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<%-- <div class="rev_admin_in" id="ftCnt">
|
||||||
|
<div class="rev_admin_top clearfix">
|
||||||
|
<p>친구톡</p>
|
||||||
|
<p><span><fmt:formatNumber value="${totFtCnt}" pattern="#,###"/></span> 건</p>
|
||||||
|
</div>
|
||||||
|
<div class="rev_admin_btm">
|
||||||
|
<dl>
|
||||||
|
<dt>대기</dt>
|
||||||
|
<dd><span class="c_002c9a" name="waitCnt"><fmt:formatNumber value="${waitFtCnt}" pattern="#,###"/></span>건</dd>
|
||||||
|
</dl>
|
||||||
|
<dl>
|
||||||
|
<dt>성공</dt>
|
||||||
|
<dd><span class="c_002c9a" name="succCnt"><fmt:formatNumber value="${succFtCnt}" pattern="#,###"/></span>건</dd>
|
||||||
|
</dl>
|
||||||
|
<dl>
|
||||||
|
<dt>실패</dt>
|
||||||
|
<dd><span class="c_e40000" name="failCnt"><fmt:formatNumber value="${failFtCnt}" pattern="#,###"/></span>건</dd>
|
||||||
|
</dl>
|
||||||
|
</div>
|
||||||
|
</div> --%>
|
||||||
|
</div>
|
||||||
|
|
||||||
<div class="list_tab_wrap2 type4">
|
<div class="list_tab_wrap2 type4">
|
||||||
<!-- tab button -->
|
<!-- tab button -->
|
||||||
<ul class="list_tab">
|
<ul class="list_tab">
|
||||||
@ -953,22 +576,43 @@ function infoPop(pageUrl){
|
|||||||
</ul><!--// tab button -->
|
</ul><!--// tab button -->
|
||||||
</div>
|
</div>
|
||||||
<!-- 예약관리 > 전체 -->
|
<!-- 예약관리 > 전체 -->
|
||||||
<div class="price_history_cont current" id="listTab_2">
|
<div class="price_history_cont current price_wrap" id="listTab_2">
|
||||||
<!-- tab button -->
|
<!-- tab button -->
|
||||||
<div class="table_tab_wrap">
|
<div class="table_tab_wrap">
|
||||||
<ul>
|
<!-- <ul>
|
||||||
<li class="tab active">
|
<li class="tab active">
|
||||||
<button type="button" onclick="fnListLoad('all','0'); return false;">전체</button></li>
|
<button type="button" onclick="fnListLoad('all','0'); return false;">전체</button></li>
|
||||||
<li class="tab"><button type="button" onclick="fnListLoad('ready','1'); return false;">결과대기</button></li>
|
<li class="tab"><button type="button" onclick="fnListLoad('ready','1'); return false;">결과대기</button></li>
|
||||||
<li class="tab"><button type="button" onclick="fnListLoad('complete','2'); return false;">정상수신</button></li>
|
<li class="tab"><button type="button" onclick="fnListLoad('complete','2'); return false;">정상수신</button></li>
|
||||||
<li class="tab"><button type="button" onclick="fnListLoad('fail','3'); return false;">수신오류</button></li>
|
<li class="tab"><button type="button" onclick="fnListLoad('fail','3'); return false;">수신오류</button></li>
|
||||||
</ul><!--// tab button -->
|
</ul> -->
|
||||||
<div class="tab_depth1">
|
<!--// tab button -->
|
||||||
<a href="#none" class="on msgGgoupList">받는사람(전송건별)</a>
|
<!-- <div class="tab_depth1"> -->
|
||||||
<a href="#none" style="display: none;"></a>
|
<!-- <a href="#none" class="on msgGgoupList">받는사람(전송건별)</a> -->
|
||||||
<a href="#none" class="msgPrivateList">받는사람(개인별)</a>
|
<!-- <a href="#none" style="display: none;"></a> -->
|
||||||
<div class="on_active">받는사람(전송건별)</div>
|
<!-- <a href="#none" class="msgPrivateList">받는사람(개인별)</a> -->
|
||||||
</div>
|
<!-- <div class="on_active">받는사람(전송건별)</div> -->
|
||||||
|
<!-- </div> -->
|
||||||
|
<ul>
|
||||||
|
<li class="tab active">
|
||||||
|
<button type="button" onclick="fnListLoad('all','0'); return false;">전체</button>
|
||||||
|
</li>
|
||||||
|
<!-- <li class="tab">
|
||||||
|
<button type="button" onclick="fnListLoad('ready','1'); return false;">결과대기</button>
|
||||||
|
</li>
|
||||||
|
<li class="tab">
|
||||||
|
<button type="button" onclick="fnListLoad('complete','2'); return false;">정상수신</button>
|
||||||
|
</li>
|
||||||
|
<li class="tab">
|
||||||
|
<button type="button" onclick="fnListLoad('fail','3'); return false;">수신오류</button>
|
||||||
|
</li> -->
|
||||||
|
<li class="tab">
|
||||||
|
<button type="button" onclick="fnListLoad('N','1'); return false;">즉시</button>
|
||||||
|
</li>
|
||||||
|
<li class="tab">
|
||||||
|
<button type="button" onclick="fnListLoad('Y','2'); return false;">예약</button>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
<!-- 발송관리 리스트 -->
|
<!-- 발송관리 리스트 -->
|
||||||
<div class="table_cont current msgSentAllLoad" id="tableCont_1">
|
<div class="table_cont current msgSentAllLoad" id="tableCont_1">
|
||||||
|
|||||||
@ -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" %>
|
||||||
|
<!-- <script src="/publish/js/content.js"></script> -->
|
||||||
|
<script src="/publish/js/popupLayer.js"></script>
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
|
||||||
|
var lastfulstday = ""; //전월 시작일
|
||||||
|
var lastfuledday = ""; //전월 마지막일
|
||||||
|
var thisfulstlday = ""; //당월 시작일
|
||||||
|
var thisfuledtlday = ""; //당원 마지막일
|
||||||
|
var threefulstday = ""; //3개월전 시작일
|
||||||
|
var threefuledday = ""; //3개월전 마지막일
|
||||||
|
|
||||||
|
$(document).ready(function(){
|
||||||
|
|
||||||
|
//초기 전체 리스트 페이지 보여주기
|
||||||
|
var form = document.searchForm;
|
||||||
|
form.listType.value = "groupList";
|
||||||
|
linkPage(1);
|
||||||
|
|
||||||
|
var date = new Date() ;
|
||||||
|
//이전달 첫날/마지막날 조회
|
||||||
|
if(date.getMonth()+1 == 1){
|
||||||
|
lastfulstday = date.getFullYear()-1 + "/12" + "/01";
|
||||||
|
lastfuledday = date.getFullYear()-1 + "/12" + "/"+new Date(date.getFullYear()-1, 12, 0).getDate()+"";
|
||||||
|
}else{
|
||||||
|
lastfulstday = date.getFullYear() + "/" ;
|
||||||
|
lastfulstday += date.getMonth() < 10 ? "0"+ (date.getMonth()) : date.getMonth()+"" ;
|
||||||
|
lastfuledday = lastfulstday + "/"+ new Date(date.getFullYear(), date.getMonth(), 0).getDate()+"" ;
|
||||||
|
lastfulstday += "/01" ;
|
||||||
|
}
|
||||||
|
|
||||||
|
//당월 첫날/마지막날 조회
|
||||||
|
thisfulstlday = date.getFullYear() + "/" ;
|
||||||
|
thisfulstlday += date.getMonth()+1 < 10 ? "0"+ (date.getMonth()+1) : date.getMonth()+1+"" ;
|
||||||
|
thisfuledtlday = thisfulstlday + "/"+ new Date(date.getFullYear(), date.getMonth()+1, 0).getDate()+"";
|
||||||
|
thisfulstlday += "/01" ;
|
||||||
|
|
||||||
|
//3개월 이전 날짜 구해오기
|
||||||
|
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);
|
||||||
|
});
|
||||||
|
|
||||||
|
//목록 정렬 항목 클릭
|
||||||
|
function listSortOrd(obj){
|
||||||
|
var sortOrd = $(obj).attr("sortOrd");
|
||||||
|
var sortCnd = $(obj).attr("id");
|
||||||
|
|
||||||
|
$("[name='searchSortCnd']").val(sortCnd.substring(5)); // 구분자 제거
|
||||||
|
if (sortOrd == "desc") $("[name='searchSortOrd']").val("asc");
|
||||||
|
else $("[name='searchSortOrd']").val("desc");
|
||||||
|
|
||||||
|
linkPage('1'); //각 JSP마다 다를때 메소드 정의해 줘야됨
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//전체선택 실행
|
||||||
|
var allChkSts = false;
|
||||||
|
$("#allCheck").click(function(){
|
||||||
|
|
||||||
|
if(!allChkSts){// 전체선택이 해제되어 있을 경우
|
||||||
|
|
||||||
|
$("input[name=msgSentDel]").prop("checked", true);
|
||||||
|
allChkSts = true;
|
||||||
|
|
||||||
|
}else{
|
||||||
|
|
||||||
|
$("input[name=msgSentDel]").prop("checked", false);
|
||||||
|
allChkSts = false;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
$(document).on('change','#pageUnit', function(){
|
||||||
|
|
||||||
|
linkPage(1);
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
//오늘날짜 구하기
|
||||||
|
function today() {
|
||||||
|
var d = new Date();
|
||||||
|
return getDateStr(d);
|
||||||
|
}
|
||||||
|
|
||||||
|
//이전 날짜 구하기
|
||||||
|
function prevDay(days) {
|
||||||
|
var d = new Date();
|
||||||
|
var dayOfMonth = d.getDate();
|
||||||
|
d.setDate(dayOfMonth - days);
|
||||||
|
return getDateStr(d);
|
||||||
|
}
|
||||||
|
|
||||||
|
//이전 월 구하기
|
||||||
|
function prevMonth(month) {
|
||||||
|
var d = new Date();
|
||||||
|
var monthOfYear = d.getMonth();
|
||||||
|
d.setMonth(monthOfYear - month);
|
||||||
|
return getDateStr(d);
|
||||||
|
}
|
||||||
|
|
||||||
|
//날짜 받아오기
|
||||||
|
function getDateStr(myDate){
|
||||||
|
var year = myDate.getFullYear();
|
||||||
|
var month = ("0"+(myDate.getMonth()+1)).slice(-2);
|
||||||
|
var day = ("0"+myDate.getDate()).slice(-2);
|
||||||
|
return ( year + '/' + month + '/' + day );
|
||||||
|
}
|
||||||
|
|
||||||
|
//캘린더에 날짜 입력해 주기
|
||||||
|
function setCalVal(val,targetObj){
|
||||||
|
$('input[name='+targetObj+']').val(val) ;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//검색 버튼 실행
|
||||||
|
function linkPage(pageNo){
|
||||||
|
|
||||||
|
var form = document.searchForm;
|
||||||
|
var stateType = form.stateType.value;
|
||||||
|
form.pageIndex.value = pageNo;
|
||||||
|
|
||||||
|
var sendData = $(document.searchForm).serializeArray();
|
||||||
|
$(".msgSentAllLoad").html('<div class="list_info"><table class="tType4"><tbody><tr><td colspan="12">LOADING...</td></tr></tbody></table></div>');
|
||||||
|
$(".msgSentAllLoad").load("/web/kakao/sent/selectKakaoSentListViewAjax.do", sendData ,function(response, status, xhr){
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
//선택 삭제 실행
|
||||||
|
|
||||||
|
/*
|
||||||
|
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;
|
||||||
|
document.resPopForm.msgId.value = 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');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function fnListLoad(pageType, tabNum){
|
||||||
|
|
||||||
|
var form = document.searchForm;
|
||||||
|
var $tab = $(".table_tab_wrap li").eq(tabNum); //
|
||||||
|
$tab.addClass("active");
|
||||||
|
$tab.find("button").attr("title", "선택됨");
|
||||||
|
$tab.siblings("li.tab").removeClass("active");
|
||||||
|
$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);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// 전체/단문/장문/그림 탭 선택 처리
|
||||||
|
function fnTabLoad(tabType, tabNum){
|
||||||
|
|
||||||
|
var form = document.searchForm;
|
||||||
|
|
||||||
|
form.tabType.value = tabType;
|
||||||
|
|
||||||
|
//해당 탭의 전체 리스트 내역으로 불러오기
|
||||||
|
fnListLoad('all', '0');
|
||||||
|
var n=tabNum+1;
|
||||||
|
|
||||||
|
//탭 선택 CSS 처리
|
||||||
|
var $tab = $(".list_tab_wrap2 li:nth-child("+n+")");
|
||||||
|
var $tabPrev = $(".list_tab_wrap2 li:nth-child("+n+")").prev("li")
|
||||||
|
$tab.addClass("active");
|
||||||
|
$tab.find("button").attr("title", "선택됨");
|
||||||
|
$tab.siblings("li.tab").removeClass("active");
|
||||||
|
$tab.siblings("li.tab").find("button").removeAttr("title");
|
||||||
|
|
||||||
|
$tab.siblings("li:not(li:last-child)").find("button").css("border-right","1px solid #e5e5e5");
|
||||||
|
$tabPrev.find("button").css("border-right","0");
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function fnSearch(pageNo){
|
||||||
|
|
||||||
|
var form = document.searchForm;
|
||||||
|
|
||||||
|
form.pageIndex.value = pageNo ;
|
||||||
|
|
||||||
|
|
||||||
|
form.action="/web/kakao/sent/selectKakaoSentView.do";
|
||||||
|
form.submit();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function fnExcelDownLoad(pageType, listType){
|
||||||
|
|
||||||
|
var form = document.searchForm;
|
||||||
|
var loginVO = '${LoginVO}';
|
||||||
|
|
||||||
|
form.stateType.value = pageType;
|
||||||
|
form.listType.value = listType;
|
||||||
|
|
||||||
|
if(loginVO == "" || loginVO == null){
|
||||||
|
|
||||||
|
alert("로그인 후 이용이 가능합니다.");
|
||||||
|
return false;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if(confirm("엑셀 다운로드를 하시겠습니까?")){
|
||||||
|
|
||||||
|
form.action="/web/mjon/msgsent/kakaoSentExcelDownLoadAjax.do";
|
||||||
|
form.submit();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
$(document).on('click', '.msgGgoupList', function(){
|
||||||
|
|
||||||
|
var form = document.searchForm;
|
||||||
|
form.listType.value = "groupList";
|
||||||
|
linkPage(1);
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
$(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 = [];
|
||||||
|
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 인 것은 제외하고 아이디 저장
|
||||||
|
|
||||||
|
msgSeq[index] = $(this).val();
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
var form = document.reSendForm;
|
||||||
|
form.msgSeqList.value = msgSeq;
|
||||||
|
form.msgResendFlag.value = "Y";
|
||||||
|
|
||||||
|
form.action="/web/mjon/msgdata/selectMsgDataView.do";
|
||||||
|
form.submit();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
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) {
|
||||||
|
//만들려는 팝업의 크기
|
||||||
|
var popup_wid = '840';
|
||||||
|
var popup_ht = '900';
|
||||||
|
|
||||||
|
var popup_left = (window.screen.width / 2) - (popup_wid / 2);
|
||||||
|
var popup_top =(window.screen.height / 2) - (popup_ht / 2);
|
||||||
|
|
||||||
|
$("#tabType").val(tabType);
|
||||||
|
$("#searchForm").attr("target","msgSentPrint");
|
||||||
|
|
||||||
|
window.open('', 'msgSentPrint', 'width='+ popup_wid +', height='+ popup_ht +', left=' + popup_left + ', top='+ popup_top +',scrollbars=1');
|
||||||
|
$("#searchForm").attr({"action":"/web/kakao/sent/printKakaoSentDataAjax.do", "method":"post"}).submit();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
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;
|
||||||
|
document.popForm.action = "/web/pop/infoPop.do";
|
||||||
|
document.popForm.method = "post";
|
||||||
|
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');
|
||||||
|
document.popForm.target = "infoPop";
|
||||||
|
document.popForm.submit();
|
||||||
|
}
|
||||||
|
|
||||||
|
</script>
|
||||||
|
<!-- 문자내용 팝업 data-tooltip: rev_popup01 -->
|
||||||
|
<div class="tooltip-wrap">
|
||||||
|
<div class="popup-com adr_layer kakao_rev_popup rev_popup01" tabindex="0" data-tooltip-con="rev_popup01"
|
||||||
|
data-focus="rev_popup01" data-focus-prev="rev_popup01-close" style="width: 440px;">
|
||||||
|
<div class="popup_heading">
|
||||||
|
<p>문자내용</p>
|
||||||
|
<button type="button" class="tooltip-close" data-focus="rev_popup01-close"><img
|
||||||
|
src="/publish/images/content/layerPopup_close.png" alt="팝업 닫기"></button>
|
||||||
|
</div>
|
||||||
|
<div class="layer_in">
|
||||||
|
|
||||||
|
<!-- 팝업 상세내용 노출 -->
|
||||||
|
<div id="msgSentDetailPopLoad" >
|
||||||
|
</div>
|
||||||
|
<div class="popup_btn_wrap2" style="justify-content: center;">
|
||||||
|
<button type="button" class="tooltip-close" data-focus="rev_popup01-close"
|
||||||
|
data-focus-next="rev_popup01">닫기</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<!-- //문자내용 팝업 data-tooltip: rev_popup01 -->
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<!-- 그룹등록 팝업 data-tooltip:rev_popup02 -->
|
||||||
|
<div class="tooltip-wrap">
|
||||||
|
<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;">
|
||||||
|
<div class="popup_heading">
|
||||||
|
<p>그룹등록</p>
|
||||||
|
<button type="button" class="tooltip-close" data-focus="rev_popup02-close"><img src="/publish/images/content/layerPopup_close.png" alt="팝업 닫기"></button>
|
||||||
|
</div>
|
||||||
|
<div class="layer_in">
|
||||||
|
<div class="gorup_join_cont">
|
||||||
|
<p class="adr_pop_title">선택된 발송내역 전화번호를 그룹으로 등록합니다.</p>
|
||||||
|
<div class="group_input" style="margin-top: 0;">
|
||||||
|
<div class="input_left">그룹이름</div>
|
||||||
|
<div class="input_right">
|
||||||
|
<label for="grpNm" class="label">새 그룹명 입력</label>
|
||||||
|
<input type="text" id="grpNm" name="grpNm" placeholder="새 그룹명 입력" onfocus="this.placeholder=''" onblur="this.placeholder='새 그룹명 입력'" class="inputLight">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="popup_btn_wrap2">
|
||||||
|
<button type="button" onclick="javascript:fnAddAddrNo(); return false;">저장</button>
|
||||||
|
<button type="button" class="tooltip-close" data-focus="rev_popup02-close" data-focus-next="rev_popup02">취소</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="inner">
|
||||||
|
<!-- send top -->
|
||||||
|
<div class="send_top">
|
||||||
|
<!-- 결제관리 - 요금 사용내역 -->
|
||||||
|
<div class="rev_admin_cont serv_content current">
|
||||||
|
<div class="heading">
|
||||||
|
<h2>발송결과</h2>
|
||||||
|
<button type="button" class="button info" onclick="infoPop('selectMsgSentView');">사용안내</button>
|
||||||
|
<button type="button" class="button junk" data-tooltip="popupJunk">통신사 스팸규격안내</button>
|
||||||
|
</div>
|
||||||
|
<div class="pay_tab_wrap">
|
||||||
|
<!-- tab button -->
|
||||||
|
<%@include file="/WEB-INF/jsp/web/kakao/include/KakaoSentTopMentTap.jsp" %>
|
||||||
|
<!--// tab button -->
|
||||||
|
</div>
|
||||||
|
<form id="searchForm" name="searchForm" method="post">
|
||||||
|
<input type="hidden" id="pageIndex" name="pageIndex" value="1"/>
|
||||||
|
<input type="hidden" id="msgGroupIdList" name="msgGroupIdList" value=""/>
|
||||||
|
<input type="hidden" name="searchSortCnd" value="<c:out value="${searchVO.searchSortCnd}" />" />
|
||||||
|
<input type="hidden" name="searchSortOrd" value="<c:out value="${searchVO.searchSortOrd}" />" />
|
||||||
|
<input type="hidden" id="tabType" name="tabType" value="all"/><!-- 탭 종류 -->
|
||||||
|
<input type="hidden" id="stateType" name="stateType" value="all"/><!-- 발송상태 종류 -->
|
||||||
|
<input type="hidden" id="listType" name="listType" value="groupList"/><!-- 리스트 종류 -->
|
||||||
|
<input type="hidden" id="addrGrpNm" name="addrGrpNm" value=""/><!-- 주소록 그룹 이름 -->
|
||||||
|
<input type="hidden" id="mberId" name="mberId" value="${LoginVO.id}"/><!-- 주소록 그룹 이름 -->
|
||||||
|
|
||||||
|
<!-- 각 통계별 총 건수 -->
|
||||||
|
<c:set var="totAllCnt" value="0"/><!-- 전체 건수 -->
|
||||||
|
<c:set var="totAtCnt" value="0"/><!-- 알림톡 건수 -->
|
||||||
|
<c:set var="totFtCnt" value="0"/><!-- 친구톡 건수 -->
|
||||||
|
|
||||||
|
<!-- 각 통계별 성공, 실패 건수 처리 -->
|
||||||
|
<c:set var="waitAllCnt" value="0"/><!-- 전체 대기 건수 -->
|
||||||
|
<c:set var="succAllCnt" value="0"/><!-- 전체 성공 건수 -->
|
||||||
|
<c:set var="failAllCnt" value="0"/><!-- 전체 실패 건수 -->
|
||||||
|
<c:set var="waitAtCnt" value="0"/><!-- 알림톡 대기 건수 -->
|
||||||
|
<c:set var="succAtCnt" value="0"/><!-- 알림톡 성공 건수 -->
|
||||||
|
<c:set var="failAtCnt" value="0"/><!-- 알림톡 실패 건수 -->
|
||||||
|
<c:set var="waitFtCnt" value="0"/><!-- 친구톡 대기 건수 -->
|
||||||
|
<c:set var="succFtCnt" value="0"/><!-- 친구톡 성공 건수 -->
|
||||||
|
<c:set var="failFtCnt" value="0"/><!-- 친구톡 실패 건수 -->
|
||||||
|
<!-- 발송대기 건수가 있으면 이것도 발송 실패건수로 일단 집계한다. -->
|
||||||
|
<c:forEach var="totalMsgCnt" items="${totalMsgCnt}" varStatus="status">
|
||||||
|
|
||||||
|
<!-- 전체 갯수 구하기 -->
|
||||||
|
<c:set var="totAllCnt" value="${totAllCnt + totalMsgCnt.msgResultCnt}"/>
|
||||||
|
|
||||||
|
<!-- 전체 대기 갯수 -->
|
||||||
|
<c:if test="${totalMsgCnt.msgResultSts == 'W'}">
|
||||||
|
<c:set var="waitAllCnt" value="${waitAllCnt + totalMsgCnt.msgResultCnt}"/>
|
||||||
|
</c:if>
|
||||||
|
|
||||||
|
<!-- 전체 성공 갯수 -->
|
||||||
|
<c:if test="${totalMsgCnt.msgResultSts == 'S'}">
|
||||||
|
<c:set var="succAllCnt" value="${succAllCnt + totalMsgCnt.msgResultCnt}"/>
|
||||||
|
</c:if>
|
||||||
|
|
||||||
|
<!-- 전체 실패 갯수 -->
|
||||||
|
<c:if test="${totalMsgCnt.msgResultSts == 'F'}">
|
||||||
|
<c:set var="failAllCnt" value="${failAllCnt + totalMsgCnt.msgResultCnt}"/>
|
||||||
|
</c:if>
|
||||||
|
|
||||||
|
</c:forEach>
|
||||||
|
|
||||||
|
<!-- 알림톡 처리 -->
|
||||||
|
<c:forEach var="atCnt" items="${atCnt}" varStatus="status">
|
||||||
|
|
||||||
|
<!-- 단문 전체 갯수 구하기 -->
|
||||||
|
<c:set var="totAtCnt" value="${totAtCnt + atCnt.msgResultCnt}"/>
|
||||||
|
|
||||||
|
<!-- 단문 대기 갯수 구하기 -->
|
||||||
|
<c:if test="${atCnt.msgResultSts == 'W'}">
|
||||||
|
<c:set var="waitAtCnt" value="${waitAtCnt + atCnt.msgResultCnt}"/>
|
||||||
|
</c:if>
|
||||||
|
|
||||||
|
<!-- 단문 성공 갯수 구하기 -->
|
||||||
|
<c:if test="${atCnt.msgResultSts == 'S'}">
|
||||||
|
<c:set var="succAtCnt" value="${succAtCnt + atCnt.msgResultCnt}"/>
|
||||||
|
</c:if>
|
||||||
|
|
||||||
|
<!-- 단문 실패 갯수 구하기 -->
|
||||||
|
<c:if test="${atCnt.msgResultSts == 'F'}">
|
||||||
|
<c:set var="failAtCnt" value="${failAtCnt + atCnt.msgResultCnt}"/>
|
||||||
|
</c:if>
|
||||||
|
|
||||||
|
</c:forEach>
|
||||||
|
|
||||||
|
<!-- 친구톡 처리 -->
|
||||||
|
<c:forEach var="ftCnt" items="${ftCnt}" varStatus="status">
|
||||||
|
|
||||||
|
<!-- 장문 전체 갯수 구하기 -->
|
||||||
|
<c:set var="totFtCnt" value="${totFtCnt + ftCnt.msgResultCnt}"/>
|
||||||
|
|
||||||
|
<!-- 장문 대기 갯수 구하기 -->
|
||||||
|
<c:if test="${ftCnt.msgResultSts == 'W'}">
|
||||||
|
<c:set var="waitFtCnt" value="${waitFtCnt + ftCnt.msgResultCnt}"/>
|
||||||
|
</c:if>
|
||||||
|
|
||||||
|
<!-- 장문 성공 갯수 구하기 -->
|
||||||
|
<c:if test="${ftCnt.msgResultSts == 'S'}">
|
||||||
|
<c:set var="succFtCnt" value="${succFtCnt + ftCnt.msgResultCnt}"/>
|
||||||
|
</c:if>
|
||||||
|
|
||||||
|
<!-- 장문 실패 갯수 구하기 -->
|
||||||
|
<c:if test="${ftCnt.msgResultSts == 'F'}">
|
||||||
|
<c:set var="failFtCnt" value="${failFtCnt + ftCnt.msgResultCnt}"/>
|
||||||
|
</c:if>
|
||||||
|
|
||||||
|
</c:forEach>
|
||||||
|
<div class="rev_content kakao_rev_content" id="tab5_2">
|
||||||
|
<div class="rev_admin">
|
||||||
|
<div class="rev_admin_in">
|
||||||
|
<div class="rev_admin_top clearfix">
|
||||||
|
<p>전체</p>
|
||||||
|
<p><span><fmt:formatNumber value="${totAllCnt}" pattern="#,###"/></span> 건</p>
|
||||||
|
</div>
|
||||||
|
<div class="rev_admin_btm">
|
||||||
|
<dl>
|
||||||
|
<dt>대기</dt>
|
||||||
|
<dd><span class="c_002c9a"><fmt:formatNumber value="${waitAllCnt}" pattern="#,###"/></span>건</dd>
|
||||||
|
</dl>
|
||||||
|
<dl>
|
||||||
|
<dt>성공</dt>
|
||||||
|
<dd><span class="c_002c9a"><fmt:formatNumber value="${succAllCnt}" pattern="#,###"/></span>건</dd>
|
||||||
|
</dl>
|
||||||
|
<dl>
|
||||||
|
<dt>실패</dt>
|
||||||
|
<dd><span class="c_e40000"><fmt:formatNumber value="${failAllCnt}" pattern="#,###"/></span>건</dd>
|
||||||
|
</dl>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="rev_admin_in">
|
||||||
|
<div class="rev_admin_top clearfix">
|
||||||
|
<p>알림톡</p>
|
||||||
|
<p><span><fmt:formatNumber value="${totAtCnt}" pattern="#,###"/></span> 건</p>
|
||||||
|
</div>
|
||||||
|
<div class="rev_admin_btm">
|
||||||
|
<dl>
|
||||||
|
<dt>대기</dt>
|
||||||
|
<dd><span class="c_002c9a"><fmt:formatNumber value="${waitAtCnt}" pattern="#,###"/></span>건</dd>
|
||||||
|
</dl>
|
||||||
|
<dl>
|
||||||
|
<dt>성공</dt>
|
||||||
|
<dd><span class="c_002c9a"><fmt:formatNumber value="${succAtCnt}" pattern="#,###"/></span>건</dd>
|
||||||
|
</dl>
|
||||||
|
<dl>
|
||||||
|
<dt>실패</dt>
|
||||||
|
<dd><span class="c_e40000"><fmt:formatNumber value="${failAtCnt}" pattern="#,###"/></span>건</dd>
|
||||||
|
</dl>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<%-- <div class="rev_admin_in">
|
||||||
|
<div class="rev_admin_top clearfix">
|
||||||
|
<p>친구톡</p>
|
||||||
|
<p><span><fmt:formatNumber value="${totFtCnt}" pattern="#,###"/></span> 건</p>
|
||||||
|
</div>
|
||||||
|
<div class="rev_admin_btm">
|
||||||
|
<dl>
|
||||||
|
<dt>대기</dt>
|
||||||
|
<dd><span class="c_002c9a"><fmt:formatNumber value="${waitFtCnt}" pattern="#,###"/></span>건</dd>
|
||||||
|
</dl>
|
||||||
|
<dl>
|
||||||
|
<dt>성공</dt>
|
||||||
|
<dd><span class="c_002c9a"><fmt:formatNumber value="${succFtCnt}" pattern="#,###"/></span>건</dd>
|
||||||
|
</dl>
|
||||||
|
<dl>
|
||||||
|
<dt>실패</dt>
|
||||||
|
<dd><span class="c_e40000"><fmt:formatNumber value="${failFtCnt}" pattern="#,###"/></span>건</dd>
|
||||||
|
</dl>
|
||||||
|
</div>
|
||||||
|
</div> --%>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="excel_middle">
|
||||||
|
<div class="select_btnWrap clearfix">
|
||||||
|
<div class="btn_left">
|
||||||
|
<span class="cal_label">기간선택</span>
|
||||||
|
<div class="calendar_wrap">
|
||||||
|
<input type="text" class="startDate inp calendar" title="검색 시작일" id="startDate" name="startDate" value="<c:out value='${kakaoSentVO.startDate}'/>" data-datecontrol="true">
|
||||||
|
<span class="dateEtc">~</span>
|
||||||
|
<input type="text" class="endDate inp calendar" title="검색 종료일" id="endDate" name="endDate" value="<c:out value='${kakaoSentVO.endDate}'/>" data-datecontrol="true">
|
||||||
|
</div>
|
||||||
|
<!-- <button type="button">전월</button>
|
||||||
|
<button type="button">당월</button> -->
|
||||||
|
<button type="button" onclick="setCalVal(lastfulstday,'startDate');setCalVal( lastfuledday,'endDate'); return false;" class="btnType btnType19">전월</button>
|
||||||
|
<button type="button" onclick="setCalVal(thisfulstlday,'startDate');setCalVal( thisfuledtlday,'endDate'); return false;" class="btnType btnType19">당월</button>
|
||||||
|
<!-- <button type="button">3개월</button> -->
|
||||||
|
<button type="button" onclick="setCalVal(threefulstday,'startDate');setCalVal( threefuledday,'endDate'); return false;" class="btnType btnType19">3개월</button>
|
||||||
|
<button type="button" class="btnType6" onClick="javascript:fnSearch(1); return false;">조회</button>
|
||||||
|
</div>
|
||||||
|
<div class="btn_right">
|
||||||
|
<label for="searchCondition" class="label">발신번호 선택 == ${kakaoSentVO.searchCondition}</label>
|
||||||
|
<select name="searchCondition" id="searchCondition" class="selType2">
|
||||||
|
<option value="3" <c:if test="${kakaoSentVO.searchCondition == '3'}">selected</c:if> >수신번호</option>
|
||||||
|
</select>
|
||||||
|
<div class="search">
|
||||||
|
<label for="id" class="label"></label>
|
||||||
|
<input type="text" id="searchKeyword" name="searchKeyword" value="<c:out value='${searchKeyword}'/>" placeholder="검색어를 입력하세요." onfocus="this.placeholder=''" onblur="this.placeholder='검색어를 입력하세요.'">
|
||||||
|
<button type="button" class="btnType btnType2" onClick="javascript:fnSearch(1); return false;">검색</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="list_tab_wrap2 type4">
|
||||||
|
<!-- tab button -->
|
||||||
|
<ul class="list_tab">
|
||||||
|
<li class="tab active"><button type="button" onclick="fnTabLoad('',0); return false;">전체</button></li>
|
||||||
|
<li class="tab"><button type="button" onclick="fnTabLoad('at', 1); return false;">알림톡</button></li>
|
||||||
|
<%-- <c:if test="${fn:contains(pageContext.request.requestURL , 'localhost') --%>
|
||||||
|
<%-- || fn:contains(pageContext.request.requestURL , '119.193.215.98')}"> --%>
|
||||||
|
<!-- <li class="tab"><button type="button" onclick="fnTabLoad('ft', 2); return false;">친구톡</button></li> -->
|
||||||
|
<%-- </c:if> --%>
|
||||||
|
</ul><!--// tab button -->
|
||||||
|
</div>
|
||||||
|
<!-- 예약관리 > 전체 -->
|
||||||
|
<div class="price_history_cont current" id="listTab_2">
|
||||||
|
<!-- tab button -->
|
||||||
|
<div class="table_tab_wrap">
|
||||||
|
<ul>
|
||||||
|
<li class="tab active">
|
||||||
|
<button type="button" onclick="fnListLoad('all','0'); return false;">전체</button></li>
|
||||||
|
<li class="tab"><button type="button" onclick="fnListLoad('ready','1'); return false;">결과대기</button></li>
|
||||||
|
<li class="tab"><button type="button" onclick="fnListLoad('complete','2'); return false;">정상수신</button></li>
|
||||||
|
<li class="tab"><button type="button" onclick="fnListLoad('fail','3'); return false;">수신오류</button></li>
|
||||||
|
</ul><!--// tab button -->
|
||||||
|
<div class="tab_depth1">
|
||||||
|
<a href="#none" class="on msgGgoupList">받는사람(전송건별)</a>
|
||||||
|
<a href="#none" style="display: none;"></a>
|
||||||
|
<a href="#none" class="msgPrivateList">받는사람(개인별)</a>
|
||||||
|
<div class="on_active">받는사람(전송건별)</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<!-- 발송관리 리스트 -->
|
||||||
|
<div class="table_cont current msgSentAllLoad" id="tableCont_1">
|
||||||
|
</div><!-- //전체 종료 -->
|
||||||
|
<!-- table -->
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div><!--// send top -->
|
||||||
|
</div>
|
||||||
|
<form id="resPopForm" name="resPopForm" method="post">
|
||||||
|
<input type="hidden" id="msgGroupId" name="msgGroupId" value=""/>
|
||||||
|
<input type="hidden" id="msgId" name="msgId" value=""/>
|
||||||
|
<input type="hidden" id="fileCnt" name="fileCnt" value=""/>
|
||||||
|
<input type="hidden" id="resultType" name="resultType" value="S"/>
|
||||||
|
</form>
|
||||||
|
<form id="reSendForm" name="reSendForm" method="post">
|
||||||
|
<input type="hidden" id="msgSeqList" name="msgSeqList" value=""/>
|
||||||
|
<input type="hidden" id="msgResendFlag" name="msgResendFlag" value="N"/>
|
||||||
|
</form>
|
||||||
|
<form name="popForm" id="popForm" method="post">
|
||||||
|
<input type="hidden" name="pageType" id="pageType" value=""/>
|
||||||
|
</form>
|
||||||
|
|
||||||
@ -610,6 +610,7 @@ function getFilteredDataByTab() {
|
|||||||
// 탭 필터 적용하여 데이터 필터링 (수신번호 필터는 무시)
|
// 탭 필터 적용하여 데이터 필터링 (수신번호 필터는 무시)
|
||||||
return allData.filter(row => tabFilter ? row.result.includes(tabFilter.value) : true);
|
return allData.filter(row => tabFilter ? row.result.includes(tabFilter.value) : true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user