Merge branch 'advc' of http://dudgusw@vcs.iten.co.kr:9999/hylee/mjon_git into advc
This commit is contained in:
commit
97040318a0
@ -151,6 +151,8 @@ public class MjonKakaoATVO extends ComDefaultVO{
|
||||
private String bizKakaoResendType; /* 대체 문자 길이 => MMS / LMS / SMS */
|
||||
private String bizKakaoJsonFile; //카카오 친구톡 Json 파일 경로
|
||||
|
||||
private String yellowId;
|
||||
private String bizKakaoResendTypeCnt;
|
||||
|
||||
public String getMsgDiv() {
|
||||
return msgDiv;
|
||||
@ -1273,5 +1275,19 @@ public class MjonKakaoATVO extends ComDefaultVO{
|
||||
public void setBizKakaoJsonFile(String bizKakaoJsonFile) {
|
||||
this.bizKakaoJsonFile = bizKakaoJsonFile;
|
||||
}
|
||||
public String getYellowId() {
|
||||
return yellowId;
|
||||
}
|
||||
public void setYellowId(String yellowId) {
|
||||
this.yellowId = yellowId;
|
||||
}
|
||||
public String getBizKakaoResendTypeCnt() {
|
||||
return bizKakaoResendTypeCnt;
|
||||
}
|
||||
public void setBizKakaoResendTypeCnt(String bizKakaoResendTypeCnt) {
|
||||
this.bizKakaoResendTypeCnt = bizKakaoResendTypeCnt;
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
@ -246,6 +246,14 @@ public class KakaoVO extends MjonMsgVO{
|
||||
private String successCntDay;
|
||||
private String successCntMonth;
|
||||
private String successCntYear;
|
||||
|
||||
|
||||
|
||||
//재전송 영역
|
||||
private String msgResendAllFlag;
|
||||
private String msgResendAllGroupId;
|
||||
private String msgResendAllTmpKey;
|
||||
private String msgResendAllYellowId;
|
||||
|
||||
public String getSuccessDay() {
|
||||
return successDay;
|
||||
@ -1238,4 +1246,39 @@ public class KakaoVO extends MjonMsgVO{
|
||||
public void setPhmType(String phmType) {
|
||||
this.phmType = phmType;
|
||||
}
|
||||
|
||||
public String getMsgResendAllFlag() {
|
||||
return msgResendAllFlag;
|
||||
}
|
||||
|
||||
public void setMsgResendAllFlag(String msgResendAllFlag) {
|
||||
this.msgResendAllFlag = msgResendAllFlag;
|
||||
}
|
||||
|
||||
public String getMsgResendAllGroupId() {
|
||||
return msgResendAllGroupId;
|
||||
}
|
||||
|
||||
public void setMsgResendAllGroupId(String msgResendAllGroupId) {
|
||||
this.msgResendAllGroupId = msgResendAllGroupId;
|
||||
}
|
||||
|
||||
public String getMsgResendAllTmpKey() {
|
||||
return msgResendAllTmpKey;
|
||||
}
|
||||
|
||||
public void setMsgResendAllTmpKey(String msgResendAllTmpKey) {
|
||||
this.msgResendAllTmpKey = msgResendAllTmpKey;
|
||||
}
|
||||
|
||||
public String getMsgResendAllYellowId() {
|
||||
return msgResendAllYellowId;
|
||||
}
|
||||
|
||||
public void setMsgResendAllYellowId(String msgResendAllYellowId) {
|
||||
this.msgResendAllYellowId = msgResendAllYellowId;
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
@ -46,6 +46,8 @@ import org.springframework.web.multipart.MultipartFile;
|
||||
import org.springframework.web.multipart.MultipartHttpServletRequest;
|
||||
import org.springframework.web.servlet.ModelAndView;
|
||||
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
|
||||
import egovframework.rte.fdl.idgnr.EgovIdGnrService;
|
||||
import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper;
|
||||
import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo;
|
||||
@ -216,6 +218,26 @@ public class KakaoAlimTalkSendController {
|
||||
model.addAttribute("sendPrice", kakaoSendUtil.selectSendPriceOfKakaoAtAndSmsAndMms(userId));
|
||||
}
|
||||
|
||||
if("Y".equals(kakaoVO.getMsgResendAllFlag())) {
|
||||
List<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";
|
||||
}
|
||||
|
||||
@ -1403,4 +1425,80 @@ public class KakaoAlimTalkSendController {
|
||||
|
||||
return modelAndView;
|
||||
}
|
||||
|
||||
|
||||
@RequestMapping(value= {"/web/mjon/alimtalk/kakaoAlimtalkMsgDataView_test_set.do"})
|
||||
public String kakaoAlimtalkMsgDataView_test_set(ModelMap model
|
||||
, @ModelAttribute("kakaoVO") KakaoVO kakaoVO) throws Exception {
|
||||
|
||||
LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
|
||||
String author = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getAuthority());
|
||||
String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
|
||||
|
||||
model.addAttribute("loginVO", loginVO);
|
||||
/* if(userId == "") {
|
||||
return "redirect:/web/user/login/login.do";
|
||||
}*/
|
||||
|
||||
|
||||
//2.사용자 개인 단가 정보 불러오기
|
||||
if(!userId.equals("") && !author.equals("ROLE_ADMIN")) {
|
||||
|
||||
// 사용자 아이디를 이용한 발신프로필 조회
|
||||
kakaoVO.setUserId(userId);
|
||||
List<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;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import itn.let.kakao.admin.kakaoAt.service.MjonKakaoATVO;
|
||||
|
||||
@ -31,5 +32,11 @@ public interface KakaoSentService {
|
||||
//예약 결과 전체 발송 리스트 불러오기
|
||||
public List<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 itn.let.uss.umt.service.UserDefaultVO;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
public class KakaoSentVO extends UserDefaultVO{
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
@ -90,6 +94,7 @@ public class KakaoSentVO extends UserDefaultVO{
|
||||
private int successCount;
|
||||
private int waitCount;
|
||||
private int failCount;
|
||||
private int allCount;
|
||||
|
||||
private String bizUmid;
|
||||
private int kakaoResendSuccCount;
|
||||
@ -103,471 +108,11 @@ public class KakaoSentVO extends UserDefaultVO{
|
||||
private String atDelayCompleteYn; //알림톡 30분 지연 승인/취소 처리 여부
|
||||
private Date atDelayOrgTime; //알림톡 30분 지연에 대한 원래 시간 (-30분 처리된 시간)
|
||||
|
||||
public String getCallToComma() {
|
||||
return callToComma;
|
||||
}
|
||||
public void setCallToComma(String callToComma) {
|
||||
this.callToComma = callToComma;
|
||||
}
|
||||
public String getCallFromComma() {
|
||||
return callFromComma;
|
||||
}
|
||||
public void setCallFromComma(String callFromComma) {
|
||||
this.callFromComma = callFromComma;
|
||||
}
|
||||
private String statusCd;
|
||||
|
||||
public String getAtchFiles() {
|
||||
return atchFiles;
|
||||
}
|
||||
public void setAtchFiles(String atchFiles) {
|
||||
this.atchFiles = atchFiles;
|
||||
}
|
||||
private int successPrice;
|
||||
private int kakaoResendSuccPrice;
|
||||
|
||||
public String getMsgId() {
|
||||
return msgId;
|
||||
}
|
||||
public void setMsgId(String msgId) {
|
||||
this.msgId = msgId;
|
||||
}
|
||||
public int getSuccessCnt() {
|
||||
return successCnt;
|
||||
}
|
||||
public void setSuccessCnt(int successCnt) {
|
||||
this.successCnt = successCnt;
|
||||
}
|
||||
public String getMsgTypeName() {
|
||||
return msgTypeName;
|
||||
}
|
||||
public void setMsgTypeName(String msgTypeName) {
|
||||
this.msgTypeName = msgTypeName;
|
||||
}
|
||||
public int getOrderByCode() {
|
||||
return orderByCode;
|
||||
}
|
||||
public void setOrderByCode(int orderByCode) {
|
||||
this.orderByCode = orderByCode;
|
||||
}
|
||||
public String getAtchFileId() {
|
||||
return atchFileId;
|
||||
}
|
||||
public void setAtchFileId(String atchFileId) {
|
||||
this.atchFileId = atchFileId;
|
||||
}
|
||||
public String getFileSn() {
|
||||
return fileSn;
|
||||
}
|
||||
public void setFileSn(String fileSn) {
|
||||
this.fileSn = fileSn;
|
||||
}
|
||||
public String getUserId() {
|
||||
return userId;
|
||||
}
|
||||
public void setUserId(String userId) {
|
||||
this.userId = userId;
|
||||
}
|
||||
public String getAddrNm() {
|
||||
return addrNm;
|
||||
}
|
||||
public void setAddrNm(String addrNm) {
|
||||
this.addrNm = addrNm;
|
||||
}
|
||||
public String getMsgSeq() {
|
||||
return msgSeq;
|
||||
}
|
||||
public void setMsgSeq(String msgSeq) {
|
||||
this.msgSeq = msgSeq;
|
||||
}
|
||||
public String getMsgGroupId() {
|
||||
return msgGroupId;
|
||||
}
|
||||
public void setMsgGroupId(String msgGroupId) {
|
||||
this.msgGroupId = msgGroupId;
|
||||
}
|
||||
public List getMsgGroupIdList() {
|
||||
return msgGroupIdList;
|
||||
}
|
||||
public void setMsgGroupIdList(List msgGroupIdList) {
|
||||
this.msgGroupIdList = msgGroupIdList;
|
||||
}
|
||||
public String getSmsTxt() {
|
||||
return smsTxt;
|
||||
}
|
||||
public void setSmsTxt(String smsTxt) {
|
||||
this.smsTxt = smsTxt;
|
||||
}
|
||||
public String getSubject() {
|
||||
return subject;
|
||||
}
|
||||
public void setSubject(String subject) {
|
||||
this.subject = subject;
|
||||
}
|
||||
public Date getRegdate() {
|
||||
return regdate;
|
||||
}
|
||||
public void setRegdate(Date regdate) {
|
||||
this.regdate = regdate;
|
||||
}
|
||||
public Date getReqdate() {
|
||||
return reqdate;
|
||||
}
|
||||
public void setReqdate(Date reqdate) {
|
||||
this.reqdate = reqdate;
|
||||
}
|
||||
public String getCallFrom() {
|
||||
return callFrom;
|
||||
}
|
||||
public void setCallFrom(String callFrom) {
|
||||
this.callFrom = callFrom;
|
||||
}
|
||||
public String getCallTo() {
|
||||
return callTo;
|
||||
}
|
||||
public void setCallTo(String callTo) {
|
||||
this.callTo = callTo;
|
||||
}
|
||||
public List getCallToList() {
|
||||
return callToList;
|
||||
}
|
||||
public void setCallToList(List callToList) {
|
||||
this.callToList = callToList;
|
||||
}
|
||||
public String getTotPrice() {
|
||||
return totPrice;
|
||||
}
|
||||
public void setTotPrice(String totPrice) {
|
||||
this.totPrice = totPrice;
|
||||
}
|
||||
public String getEachPrice() {
|
||||
return eachPrice;
|
||||
}
|
||||
public void setEachPrice(String eachPrice) {
|
||||
this.eachPrice = eachPrice;
|
||||
}
|
||||
public String getDelFlag() {
|
||||
return delFlag;
|
||||
}
|
||||
public void setDelFlag(String delFlag) {
|
||||
this.delFlag = delFlag;
|
||||
}
|
||||
public String getTotMsgPrice() {
|
||||
return totMsgPrice;
|
||||
}
|
||||
public void setTotMsgPrice(String totMsgPrice) {
|
||||
this.totMsgPrice = totMsgPrice;
|
||||
}
|
||||
public String getRsltCode() {
|
||||
return rsltCode;
|
||||
}
|
||||
public void setRsltCode(String rsltCode) {
|
||||
this.rsltCode = rsltCode;
|
||||
}
|
||||
public String getRsltCode2() {
|
||||
return rsltCode2;
|
||||
}
|
||||
public void setRsltCode2(String rsltCode2) {
|
||||
this.rsltCode2 = rsltCode2;
|
||||
}
|
||||
public String getMsgType() {
|
||||
return msgType;
|
||||
}
|
||||
public void setMsgType(String msgType) {
|
||||
this.msgType = msgType;
|
||||
}
|
||||
public String getMsgGroupCnt() {
|
||||
return msgGroupCnt;
|
||||
}
|
||||
public void setMsgGroupCnt(String msgGroupCnt) {
|
||||
this.msgGroupCnt = msgGroupCnt;
|
||||
}
|
||||
public String getFileCnt() {
|
||||
return fileCnt;
|
||||
}
|
||||
public void setFileCnt(String fileCnt) {
|
||||
this.fileCnt = fileCnt;
|
||||
}
|
||||
public String getTotMsgCnt() {
|
||||
return totMsgCnt;
|
||||
}
|
||||
public void setTotMsgCnt(String totMsgCnt) {
|
||||
this.totMsgCnt = totMsgCnt;
|
||||
}
|
||||
public String getCurState() {
|
||||
return curState;
|
||||
}
|
||||
public void setCurState(String curState) {
|
||||
this.curState = curState;
|
||||
}
|
||||
public String getReserveYn() {
|
||||
return reserveYn;
|
||||
}
|
||||
public void setReserveYn(String reserveYn) {
|
||||
this.reserveYn = reserveYn;
|
||||
}
|
||||
public String getReserveCYn() {
|
||||
return reserveCYn;
|
||||
}
|
||||
public void setReserveCYn(String reserveCYn) {
|
||||
this.reserveCYn = reserveCYn;
|
||||
}
|
||||
public String getFilePath1() {
|
||||
return filePath1;
|
||||
}
|
||||
public void setFilePath1(String filePath1) {
|
||||
this.filePath1 = filePath1;
|
||||
}
|
||||
public String getFilePath2() {
|
||||
return filePath2;
|
||||
}
|
||||
public void setFilePath2(String filePath2) {
|
||||
this.filePath2 = filePath2;
|
||||
}
|
||||
public String getFilePath3() {
|
||||
return filePath3;
|
||||
}
|
||||
public void setFilePath3(String filePath3) {
|
||||
this.filePath3 = filePath3;
|
||||
}
|
||||
public Date getSentDate() {
|
||||
return sentDate;
|
||||
}
|
||||
public void setSentDate(Date sentDate) {
|
||||
this.sentDate = sentDate;
|
||||
}
|
||||
public String getAgentCode() {
|
||||
return agentCode;
|
||||
}
|
||||
public void setAgentCode(String agentCode) {
|
||||
this.agentCode = agentCode;
|
||||
}
|
||||
public String getUserData() {
|
||||
return userData;
|
||||
}
|
||||
public void setUserData(String userData) {
|
||||
this.userData = userData;
|
||||
}
|
||||
public List getUserDataList() {
|
||||
return userDataList;
|
||||
}
|
||||
public void setUserDataList(List userDataList) {
|
||||
this.userDataList = userDataList;
|
||||
}
|
||||
public Date getCancelDate() {
|
||||
return cancelDate;
|
||||
}
|
||||
public void setCancelDate(Date cancelDate) {
|
||||
this.cancelDate = cancelDate;
|
||||
}
|
||||
public String getStartDate() {
|
||||
return startDate;
|
||||
}
|
||||
public void setStartDate(String startDate) {
|
||||
this.startDate = startDate;
|
||||
}
|
||||
public String getEndDate() {
|
||||
return endDate;
|
||||
}
|
||||
public void setEndDate(String endDate) {
|
||||
this.endDate = endDate;
|
||||
}
|
||||
public String getSearchMsgType() {
|
||||
return searchMsgType;
|
||||
}
|
||||
public void setSearchMsgType(String searchMsgType) {
|
||||
this.searchMsgType = searchMsgType;
|
||||
}
|
||||
public String getTabType() {
|
||||
return tabType;
|
||||
}
|
||||
public void setTabType(String tabType) {
|
||||
this.tabType = tabType;
|
||||
}
|
||||
public String getStateType() {
|
||||
return stateType;
|
||||
}
|
||||
public void setStateType(String stateType) {
|
||||
this.stateType = stateType;
|
||||
}
|
||||
public String getListType() {
|
||||
return listType;
|
||||
}
|
||||
public void setListType(String listType) {
|
||||
this.listType = listType;
|
||||
}
|
||||
public String getResultType() {
|
||||
return resultType;
|
||||
}
|
||||
public void setResultType(String resultType) {
|
||||
this.resultType = resultType;
|
||||
}
|
||||
public String getMsgResultCnt() {
|
||||
return msgResultCnt;
|
||||
}
|
||||
public void setMsgResultCnt(String msgResultCnt) {
|
||||
this.msgResultCnt = msgResultCnt;
|
||||
}
|
||||
public String getMsgResultSts() {
|
||||
return msgResultSts;
|
||||
}
|
||||
public void setMsgResultSts(String msgResultSts) {
|
||||
this.msgResultSts = msgResultSts;
|
||||
}
|
||||
public String getAddrGrpNm() {
|
||||
return addrGrpNm;
|
||||
}
|
||||
public void setAddrGrpNm(String addrGrpNm) {
|
||||
this.addrGrpNm = addrGrpNm;
|
||||
}
|
||||
public int getOrderByrsltCode() {
|
||||
return orderByrsltCode;
|
||||
}
|
||||
public void setOrderByrsltCode(int orderByrsltCode) {
|
||||
this.orderByrsltCode = orderByrsltCode;
|
||||
}
|
||||
public String getMsgResult() {
|
||||
return msgResult;
|
||||
}
|
||||
public void setMsgResult(String msgResult) {
|
||||
this.msgResult = msgResult;
|
||||
}
|
||||
public String getNtceBgnde() {
|
||||
return ntceBgnde;
|
||||
}
|
||||
public void setNtceBgnde(String ntceBgnde) {
|
||||
this.ntceBgnde = ntceBgnde;
|
||||
}
|
||||
public String getNtceEndde() {
|
||||
return ntceEndde;
|
||||
}
|
||||
public void setNtceEndde(String ntceEndde) {
|
||||
this.ntceEndde = ntceEndde;
|
||||
}
|
||||
public String getMsgKind() {
|
||||
return msgKind;
|
||||
}
|
||||
public void setMsgKind(String msgKind) {
|
||||
this.msgKind = msgKind;
|
||||
}
|
||||
public String getDelayYn() {
|
||||
return delayYn;
|
||||
}
|
||||
public void setDelayYn(String delayYn) {
|
||||
this.delayYn = delayYn;
|
||||
}
|
||||
public String getDelayCompleteYn() {
|
||||
return delayCompleteYn;
|
||||
}
|
||||
public void setDelayCompleteYn(String delayCompleteYn) {
|
||||
this.delayCompleteYn = delayCompleteYn;
|
||||
}
|
||||
public String getBizKakaoResendYn() {
|
||||
return bizKakaoResendYn;
|
||||
}
|
||||
public void setBizKakaoResendYn(String bizKakaoResendYn) {
|
||||
this.bizKakaoResendYn = bizKakaoResendYn;
|
||||
}
|
||||
public String getBizKakaoResendType() {
|
||||
return bizKakaoResendType;
|
||||
}
|
||||
public void setBizKakaoResendType(String bizKakaoResendType) {
|
||||
this.bizKakaoResendType = bizKakaoResendType;
|
||||
}
|
||||
public String getBizKakaoResendData() {
|
||||
return bizKakaoResendData;
|
||||
}
|
||||
public void setBizKakaoResendData(String bizKakaoResendData) {
|
||||
this.bizKakaoResendData = bizKakaoResendData;
|
||||
}
|
||||
public String getCallStatus() {
|
||||
return callStatus;
|
||||
}
|
||||
public void setCallStatus(String callStatus) {
|
||||
this.callStatus = callStatus;
|
||||
}
|
||||
public String getBizKakaoAtPrice() {
|
||||
return bizKakaoAtPrice;
|
||||
}
|
||||
public void setBizKakaoAtPrice(String bizKakaoAtPrice) {
|
||||
this.bizKakaoAtPrice = bizKakaoAtPrice;
|
||||
}
|
||||
public String getBizKakaoFtPrice() {
|
||||
return bizKakaoFtPrice;
|
||||
}
|
||||
public void setBizKakaoFtPrice(String bizKakaoFtPrice) {
|
||||
this.bizKakaoFtPrice = bizKakaoFtPrice;
|
||||
}
|
||||
public String getBizSmsPrice() {
|
||||
return bizSmsPrice;
|
||||
}
|
||||
public void setBizSmsPrice(String bizSmsPrice) {
|
||||
this.bizSmsPrice = bizSmsPrice;
|
||||
}
|
||||
public String getDiffMin() {
|
||||
return diffMin;
|
||||
}
|
||||
public void setDiffMin(String diffMin) {
|
||||
this.diffMin = diffMin;
|
||||
}
|
||||
public String getBizMmsPrice() {
|
||||
return bizMmsPrice;
|
||||
}
|
||||
public void setBizMmsPrice(String bizMmsPrice) {
|
||||
this.bizMmsPrice = bizMmsPrice;
|
||||
}
|
||||
public int getSuccessCount() {
|
||||
return successCount;
|
||||
}
|
||||
public void setSuccessCount(int successCount) {
|
||||
this.successCount = successCount;
|
||||
}
|
||||
public String getBizUmid() {
|
||||
return bizUmid;
|
||||
}
|
||||
public void setBizUmid(String bizUmid) {
|
||||
this.bizUmid = bizUmid;
|
||||
}
|
||||
public int getKakaoResendSuccCount() {
|
||||
return kakaoResendSuccCount;
|
||||
}
|
||||
public void setKakaoResendSuccCount(int kakaoResendSuccCount) {
|
||||
this.kakaoResendSuccCount = kakaoResendSuccCount;
|
||||
}
|
||||
public int getKakaoResendFailCount() {
|
||||
return kakaoResendFailCount;
|
||||
}
|
||||
public void setKakaoResendFailCount(int kakaoResendFailCount) {
|
||||
this.kakaoResendFailCount = kakaoResendFailCount;
|
||||
}
|
||||
public int getWaitCount() {
|
||||
return waitCount;
|
||||
}
|
||||
public void setWaitCount(int waitCount) {
|
||||
this.waitCount = waitCount;
|
||||
}
|
||||
public int getFailCount() {
|
||||
return failCount;
|
||||
}
|
||||
public void setFailCount(int failCount) {
|
||||
this.failCount = failCount;
|
||||
}
|
||||
public String getAtDelayYn() {
|
||||
return atDelayYn;
|
||||
}
|
||||
public void setAtDelayYn(String atDelayYn) {
|
||||
this.atDelayYn = atDelayYn;
|
||||
}
|
||||
public String getAtDelayCompleteYn() {
|
||||
return atDelayCompleteYn;
|
||||
}
|
||||
public void setAtDelayCompleteYn(String atDelayCompleteYn) {
|
||||
this.atDelayCompleteYn = atDelayCompleteYn;
|
||||
}
|
||||
public Date getAtDelayOrgTime() {
|
||||
return atDelayOrgTime;
|
||||
}
|
||||
public void setAtDelayOrgTime(Date atDelayOrgTime) {
|
||||
this.atDelayOrgTime = atDelayOrgTime;
|
||||
}
|
||||
|
||||
|
||||
private String divideYn;
|
||||
|
||||
}
|
||||
|
||||
@ -7,6 +7,7 @@ import org.springframework.stereotype.Repository;
|
||||
|
||||
import egovframework.rte.psl.dataaccess.EgovAbstractDAO;
|
||||
import itn.let.kakao.admin.kakaoAt.service.MjonKakaoATVO;
|
||||
import itn.let.kakao.user.sent.service.KakaoSentDetailVO;
|
||||
import itn.let.kakao.user.sent.service.KakaoSentVO;
|
||||
|
||||
@Repository("KakaoSentDAO")
|
||||
@ -45,6 +46,10 @@ public class KakaoSentDAO extends EgovAbstractDAO {
|
||||
public List<KakaoSentVO> selectAllKakaoSentList(KakaoSentVO kakaoSentVO) throws Exception{
|
||||
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")
|
||||
public List<KakaoSentVO> selectAllPrivateKakaoSentList(KakaoSentVO KakaoSentVO) throws Exception{
|
||||
@ -90,4 +95,39 @@ public class KakaoSentDAO extends EgovAbstractDAO {
|
||||
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;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.math.RoundingMode;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
|
||||
@ -10,6 +18,7 @@ import org.springframework.stereotype.Service;
|
||||
import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl;
|
||||
import egovframework.rte.fdl.idgnr.EgovIdGnrService;
|
||||
import itn.let.kakao.admin.kakaoAt.service.MjonKakaoATVO;
|
||||
import itn.let.kakao.user.sent.service.KakaoSentDetailVO;
|
||||
import itn.let.kakao.user.sent.service.KakaoSentService;
|
||||
import itn.let.kakao.user.sent.service.KakaoSentVO;
|
||||
|
||||
@ -29,7 +38,8 @@ public class KakaoSentServiceImpl extends EgovAbstractServiceImpl implements Ka
|
||||
|
||||
try {
|
||||
|
||||
result = kakaoSentDAO.selectKakaoSentCntAll(kakaoSentVO);
|
||||
// result = kakaoSentDAO.selectKakaoSentCntAll(kakaoSentVO);
|
||||
result = kakaoSentDAO.selectKakaoSentCntAll_advc(kakaoSentVO);
|
||||
|
||||
} catch (Exception e) {
|
||||
throw new Exception("++++++++++ ErrorService Impl :: " + e);
|
||||
@ -38,30 +48,83 @@ public class KakaoSentServiceImpl extends EgovAbstractServiceImpl implements Ka
|
||||
return result;
|
||||
}
|
||||
|
||||
public Map<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{
|
||||
|
||||
List<KakaoSentVO> resultList = new ArrayList<KakaoSentVO>();
|
||||
|
||||
String listType = kakaoSentVO.getListType();
|
||||
String stateType = kakaoSentVO.getStateType();
|
||||
resultList = kakaoSentDAO.selectAllKakaoSentList_advc(kakaoSentVO);
|
||||
|
||||
if(stateType.equals("fail")) {
|
||||
|
||||
listType = "privateList";
|
||||
|
||||
}
|
||||
|
||||
System.out.println("listType : "+ listType);
|
||||
if(listType.equals("groupList")) {//전송건별 리스트 불러오기
|
||||
|
||||
resultList = kakaoSentDAO.selectAllKakaoSentList(kakaoSentVO);
|
||||
|
||||
}else {//개인별 리스트 불러오기
|
||||
|
||||
resultList = kakaoSentDAO.selectAllPrivateKakaoSentList(kakaoSentVO);
|
||||
|
||||
}
|
||||
//totPrice 계산 및 상태코드 set
|
||||
resultList = resultList.stream().map(t -> setPriceNCode(t)).collect(Collectors.toList());
|
||||
|
||||
return resultList;
|
||||
}
|
||||
@ -149,5 +212,229 @@ public class KakaoSentServiceImpl extends EgovAbstractServiceImpl implements Ka
|
||||
|
||||
return kakaoSentDAO.selectReservKakaoSentList(kakaoSentVO);
|
||||
}
|
||||
|
||||
@Override
|
||||
public KakaoSentDetailVO selectKakaoSentDetailView(KakaoSentDetailVO kakaoSentDetailVO) throws Exception{
|
||||
|
||||
KakaoSentDetailVO resultVO = kakaoSentDAO.selectKakaoSentDetailView(kakaoSentDetailVO);
|
||||
|
||||
int total = Integer.parseInt(resultVO.getMsgGroupCnt()); // 전체 건수
|
||||
int success = 0; // 성공 건수
|
||||
int waiting = 0; // 대기 건수
|
||||
int failed = 0; // 실패 건수
|
||||
if("Y".equals(resultVO.getBizKakaoResendYn())) {
|
||||
success = resultVO.getSuccessCount() + resultVO.getKakaoResendSuccCount();
|
||||
failed = resultVO.getKakaoResendFailCount();
|
||||
}else {
|
||||
success = resultVO.getSuccessCount();
|
||||
failed = resultVO.getFailCount();
|
||||
}
|
||||
waiting = resultVO.getWaitCount(); // 대기 건수
|
||||
|
||||
String successPct = total > 0 ? String.format("%.1f%%", (success / (double) total) * 100) : "0.0%";
|
||||
String waitingPct = total > 0 ? String.format("%.1f%%", (waiting / (double) total) * 100) : "0.0%";
|
||||
String failedPct = total > 0 ? String.format("%.1f%%", (failed / (double) total) * 100) : "0.0%";
|
||||
|
||||
resultVO.setSuccessPct(successPct);
|
||||
resultVO.setFailedPct(waitingPct);
|
||||
resultVO.setWaitingPct(failedPct);
|
||||
|
||||
resultVO.setTotPrice(this.priceProc(resultVO.getSuccessPrice(), resultVO.getKakaoResendSuccPrice()));
|
||||
|
||||
resultVO = this.codeProc(resultVO);
|
||||
|
||||
// 분할문자인 경우
|
||||
if("Y".equals(resultVO.getDivideYn())) {
|
||||
String divideText = calculateBatchInfo(resultVO);
|
||||
resultVO.setDivideText(divideText);
|
||||
}
|
||||
|
||||
return resultVO;
|
||||
}
|
||||
|
||||
//발송 관리 문자발송 내용 상세보기 팝업 => 문자내용(MJ_MSG_DATA)
|
||||
public MjonKakaoATVO selectKakaoSentDetailViewPhoneAjax(MjonKakaoATVO kakaoSentVO) throws Exception{
|
||||
|
||||
return kakaoSentDAO.selectKakaoSentDetailViewPhoneAjax(kakaoSentVO);
|
||||
}
|
||||
|
||||
|
||||
// 공통코드 ITN057에 대한 코드화 진행
|
||||
/*
|
||||
* CODE_ID CODE CODE_NM CODE_DC
|
||||
* ITN057 01 진행중 진행중
|
||||
* ITN057 02 완료 완료출해야함
|
||||
* ITN057 03 예약대기 예약대기(발송전) 버튼으로 노출해야함
|
||||
* ITN057 04 - 예약취소 ( - 으로 노출 )
|
||||
* */
|
||||
private KakaoSentVO setPriceNCode(KakaoSentVO result) {
|
||||
|
||||
//성공 건수 세팅
|
||||
KakaoSentVO eachCnt = new KakaoSentVO();
|
||||
eachCnt.setMsgGroupId(result.getMsgGroupId());
|
||||
try {
|
||||
eachCnt = kakaoSentDAO.selectKakaoSentCntEachCnt_advc(eachCnt);
|
||||
} catch (Exception e) {
|
||||
System.out.println("setPriceNCode error!!");
|
||||
}
|
||||
|
||||
result.setSuccessCount(eachCnt.getSuccessCount());
|
||||
result.setWaitCount(eachCnt.getWaitCount());
|
||||
result.setFailCount(eachCnt.getFailCount());
|
||||
result.setKakaoResendSuccCount(eachCnt.getKakaoResendSuccCount());
|
||||
result.setKakaoResendFailCount(eachCnt.getKakaoResendFailCount());
|
||||
|
||||
|
||||
//완료상태 시작
|
||||
result = this.codeProc(result);
|
||||
|
||||
//완료상태 끝
|
||||
//=======================================================
|
||||
|
||||
//총금액 시작
|
||||
result.setTotPrice(this.priceProc(eachCnt.getSuccessPrice(), eachCnt.getKakaoResendSuccPrice()));
|
||||
|
||||
|
||||
return result;
|
||||
|
||||
}
|
||||
|
||||
private String priceProc(int successPrice, int kakaoResendSuccPrice) {
|
||||
|
||||
String totPrice = "-";
|
||||
|
||||
//총금액 시작
|
||||
//=======================================================
|
||||
// TotPrice : 성공건수에 대한 금액 곱하기
|
||||
BigDecimal atPrice = new BigDecimal(successPrice);
|
||||
BigDecimal kakaoResendPrice = new BigDecimal(kakaoResendSuccPrice);
|
||||
BigDecimal totalPrice = atPrice.add(kakaoResendPrice);
|
||||
// 소수점 한 자리로 설정 (반올림)// totalPrice 값을 소수점 한 자리까지 반올림하여 roundedTotalPrice에 저장
|
||||
// RoundingMode.HALF_UP: 반올림 방식으로, 소수점 기준 5 이상이면 올림, 그렇지 않으면 내림
|
||||
BigDecimal roundedTotalPrice = totalPrice.setScale(1, RoundingMode.HALF_UP);
|
||||
|
||||
// roundedTotalPrice가 0인지 확인
|
||||
// BigDecimal.compareTo(BigDecimal.ZERO)는 값을 비교하는 메서드
|
||||
// 결과:
|
||||
// - 반환 값이 0이면 두 값이 같음
|
||||
// - 반환 값이 음수이면 roundedTotalPrice가 0보다 작음
|
||||
// - 반환 값이 양수이면 roundedTotalPrice가 0보다 큼
|
||||
if (roundedTotalPrice.compareTo(BigDecimal.ZERO) == 0) {
|
||||
// roundedTotalPrice 값이 0이면, "-" 문자열을 totPrice에 설정
|
||||
totPrice = "-";
|
||||
} else {
|
||||
// roundedTotalPrice 값이 0이 아닌 경우
|
||||
// 반올림된 BigDecimal 값을 toPlainString()을 사용하여 문자열로 변환 후 totPrice에 설정
|
||||
// toPlainString(): 지수 표기법 없이 일반적인 문자열 형태로 반환
|
||||
totPrice = roundedTotalPrice.toPlainString();
|
||||
}
|
||||
//총금액 끝
|
||||
//=======================================================
|
||||
|
||||
|
||||
return totPrice;
|
||||
}
|
||||
|
||||
private KakaoSentVO codeProc(KakaoSentVO result) {
|
||||
//=======================================================
|
||||
String returnCode;
|
||||
if ("Y".equals(result.getReserveCYn())) {
|
||||
returnCode = "04"; // 예약취소 코드
|
||||
} else if (
|
||||
"Y".equals(result.getReserveYn())
|
||||
&& "N".equals(result.getReserveCYn())
|
||||
&& Integer.valueOf(result.getMsgGroupCnt()).equals(result.getWaitCount())
|
||||
&& Integer.valueOf(result.getDiffMin()) < -5 // 예약 시간이 5분 이상인 것들만
|
||||
) {
|
||||
returnCode = "03"; // 예약대기 코드 ( 예약취소 버튼 노출 )
|
||||
} else if (
|
||||
//대체문자 발송 Y일때
|
||||
("Y".equals(result.getBizKakaoResendYn())
|
||||
//알림톡 발송 총건수 == 알림톡 발송 성공건 + 알림톡 발송 실패건
|
||||
&& Integer.valueOf(result.getMsgGroupCnt()).equals(result.getSuccessCount() + result.getFailCount())
|
||||
//알림톡 발송 실패건 == 대체문자 발송 성공건 + 대체문자 발송 실패건
|
||||
&& result.getFailCount() == (result.getKakaoResendSuccCount() + result.getKakaoResendFailCount())
|
||||
)
|
||||
||
|
||||
//대체문자 발송 N일때
|
||||
("N".equals(result.getBizKakaoResendYn())
|
||||
//알림톡 발송 총건수 == 알림톡 발송 성공건 + 알림톡 발송 실패건
|
||||
&& Integer.valueOf(result.getMsgGroupCnt()).equals(result.getSuccessCount() + result.getFailCount()))
|
||||
) {
|
||||
returnCode = "02"; // 완료 코드
|
||||
} else {
|
||||
returnCode = "01"; // 진행중 코드
|
||||
}
|
||||
|
||||
result.setStatusCd(returnCode);
|
||||
|
||||
return result;
|
||||
}
|
||||
private KakaoSentDetailVO codeProc(KakaoSentDetailVO result) {
|
||||
//=======================================================
|
||||
String returnCode;
|
||||
if ("Y".equals(result.getReserveCYn())) {
|
||||
returnCode = "04"; // 예약취소 코드
|
||||
} else if (
|
||||
"Y".equals(result.getReserveYn())
|
||||
&& "N".equals(result.getReserveCYn())
|
||||
&& Integer.valueOf(result.getMsgGroupCnt()).equals(result.getWaitCount())
|
||||
&& Integer.valueOf(result.getDiffMin()) < -5 // 예약 시간이 5분 이상인 것들만
|
||||
) {
|
||||
returnCode = "03"; // 예약대기 코드 ( 예약취소 버튼 노출 )
|
||||
} else if (
|
||||
//대체문자 발송 Y일때
|
||||
("Y".equals(result.getBizKakaoResendYn())
|
||||
//알림톡 발송 총건수 == 알림톡 발송 성공건 + 알림톡 발송 실패건
|
||||
&& Integer.valueOf(result.getMsgGroupCnt()).equals(result.getSuccessCount() + result.getFailCount())
|
||||
//알림톡 발송 실패건 == 대체문자 발송 성공건 + 대체문자 발송 실패건
|
||||
&& result.getFailCount() == (result.getKakaoResendSuccCount() + result.getKakaoResendFailCount())
|
||||
)
|
||||
||
|
||||
//대체문자 발송 N일때
|
||||
("N".equals(result.getBizKakaoResendYn())
|
||||
//알림톡 발송 총건수 == 알림톡 발송 성공건 + 알림톡 발송 실패건
|
||||
&& Integer.valueOf(result.getMsgGroupCnt()).equals(result.getSuccessCount() + result.getFailCount()))
|
||||
) {
|
||||
returnCode = "02"; // 완료 코드
|
||||
} else {
|
||||
returnCode = "01"; // 진행중 코드
|
||||
}
|
||||
|
||||
result.setStatusCd(returnCode);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
private String calculateBatchInfo(KakaoSentDetailVO resultVO) {
|
||||
|
||||
String msgGroupId = resultVO.getMsgGroupId();
|
||||
|
||||
|
||||
List<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.List;
|
||||
import java.util.Locale;
|
||||
import java.util.Map;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
@ -26,6 +27,8 @@ import org.json.simple.parser.JSONParser;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.stereotype.Controller;
|
||||
import org.springframework.ui.ModelMap;
|
||||
import org.springframework.web.bind.annotation.ModelAttribute;
|
||||
@ -43,6 +46,7 @@ import itn.let.kakao.kakaoComm.KakaoButtonVO;
|
||||
import itn.let.kakao.kakaoComm.KakaoReturnVO;
|
||||
import itn.let.kakao.kakaoComm.KakaoVO;
|
||||
import itn.let.kakao.kakaoComm.kakaoApi.KakaoApiTemplate;
|
||||
import itn.let.kakao.user.sent.service.KakaoSentDetailVO;
|
||||
import itn.let.kakao.user.sent.service.KakaoSentService;
|
||||
import itn.let.kakao.user.sent.service.KakaoSentVO;
|
||||
|
||||
@ -82,26 +86,26 @@ public class KakaoSentController {
|
||||
//전체 발송 건수 통계 불러오기
|
||||
kakaoSentVO.setMsgType("");
|
||||
|
||||
List<KakaoSentVO> totalMsgCnt = kakaoSentService.selectKakaoSentCntAll(kakaoSentVO);
|
||||
model.addAttribute("totalMsgCnt", totalMsgCnt);
|
||||
|
||||
List<KakaoSentVO> atCnt = new ArrayList<KakaoSentVO>();
|
||||
List<KakaoSentVO> ftCnt = new ArrayList<KakaoSentVO>();
|
||||
|
||||
|
||||
totalMsgCnt.forEach(t->{
|
||||
if (Integer.parseInt(t.getFilePath1())>0) {
|
||||
atCnt.add(t);
|
||||
} else if (Integer.parseInt(t.getFilePath2())>0) {
|
||||
ftCnt.add(t);
|
||||
}
|
||||
});
|
||||
|
||||
//알림톡 성공건, 실패건 불러오기
|
||||
model.addAttribute("atCnt", atCnt);
|
||||
|
||||
//친구톡 성공건, 실패건 불러오기
|
||||
model.addAttribute("ftCnt", ftCnt);
|
||||
// List<KakaoSentVO> totalMsgCnt = kakaoSentService.selectKakaoSentCntAll(kakaoSentVO);
|
||||
// model.addAttribute("totalMsgCnt", totalMsgCnt);
|
||||
//
|
||||
// List<KakaoSentVO> atCnt = new ArrayList<KakaoSentVO>();
|
||||
// List<KakaoSentVO> ftCnt = new ArrayList<KakaoSentVO>();
|
||||
//
|
||||
//
|
||||
// totalMsgCnt.forEach(t->{
|
||||
// if (Integer.parseInt(t.getFilePath1())>0) {
|
||||
// atCnt.add(t);
|
||||
// } else if (Integer.parseInt(t.getFilePath2())>0) {
|
||||
// ftCnt.add(t);
|
||||
// }
|
||||
// });
|
||||
//
|
||||
// //알림톡 성공건, 실패건 불러오기
|
||||
// model.addAttribute("atCnt", atCnt);
|
||||
//
|
||||
// //친구톡 성공건, 실패건 불러오기
|
||||
// model.addAttribute("ftCnt", ftCnt);
|
||||
|
||||
// 검색 리스트 불러오기
|
||||
if(kakaoSentVO.getPageUnit() != 10) kakaoSentVO.setPageUnit(kakaoSentVO.getPageUnit());
|
||||
@ -193,7 +197,7 @@ public class KakaoSentController {
|
||||
List<KakaoSentVO> resultAllSentList = kakaoSentService.selectAllKakaoSentList(kakaoSentVO);
|
||||
System.out.println("??");
|
||||
model.addAttribute("resultAllSentList", resultAllSentList);
|
||||
model.addAttribute("resultAllSentCnt", resultAllSentList.size());
|
||||
// model.addAttribute("resultAllSentCnt", resultAllSentList.size());
|
||||
|
||||
model.addAttribute("searchKeyword", kakaoSentVO.getSearchKeyword());
|
||||
paginationInfo.setTotalRecordCount( resultAllSentList.size()> 0 ? (Integer.parseInt((resultAllSentList.get(0)).getTotMsgCnt())) : 0);
|
||||
@ -984,5 +988,105 @@ public class KakaoSentController {
|
||||
|
||||
}
|
||||
|
||||
@RequestMapping(value= {"/web/kakao/sent/selectKakaoSentViewTotalSumAjax.do"})
|
||||
public ResponseEntity<?> selectKakaoSentViewTotalSumAjax(
|
||||
KakaoSentVO kakaoSentVO
|
||||
) throws Exception{
|
||||
//로그인 권한정보 불러오기
|
||||
LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
|
||||
String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
|
||||
if(loginVO == null) {
|
||||
// return "redirect:/web/user/login/login.do";
|
||||
}
|
||||
|
||||
kakaoSentVO.setUserId(userId);
|
||||
|
||||
Map<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 안주영
|
||||
-->
|
||||
<!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">
|
||||
<typeAlias alias="kakaoSentVO" type="itn.let.kakao.user.sent.service.KakaoSentVO"/>
|
||||
<typeAlias alias="mjonKakaoATVO" type="itn.let.kakao.admin.kakaoAt.service.MjonKakaoATVO"/>
|
||||
<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">
|
||||
@ -1350,4 +1352,559 @@
|
||||
) M2
|
||||
</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>
|
||||
@ -485,6 +485,9 @@
|
||||
]]>
|
||||
</isEqual>
|
||||
</isNotEmpty>
|
||||
<isEmpty property="searchCondition02">
|
||||
AND B.MSG_TYPE in ('4', '6')
|
||||
</isEmpty>
|
||||
<isNotEmpty property="searchStartDate">
|
||||
<![CDATA[
|
||||
AND DATE_FORMAT(B.REGDATE, '%Y-%m-%d') >= DATE_FORMAT(#searchStartDate#, '%Y-%m-%d')
|
||||
|
||||
@ -1076,6 +1076,62 @@ function checkNumber(event) {
|
||||
return true;
|
||||
}
|
||||
|
||||
//재전송 스크립트 수정
|
||||
$(window).on('load', function() {
|
||||
if("${msgResendAllFlag eq 'Y'}") {
|
||||
// 채널 ID 및 템플릿 선택 코드는 유지
|
||||
$("#selectKakaoProfileList option").filter(function() {
|
||||
return $(this).text() === '${kakaoVO.msgResendAllYellowId}';
|
||||
}).prop('selected', true).parent().trigger("click");
|
||||
|
||||
// 템플릿 선택
|
||||
$("#selectTemplateList option").remove();
|
||||
selectTemplateList();
|
||||
$("#selectTemplateList").val("${kakaoVO.msgResendAllTmpKey}");
|
||||
selectTemplateInfo("${kakaoVO.msgResendAllTmpKey}");
|
||||
fn_viewDataInit02();
|
||||
priceInit();
|
||||
|
||||
try {
|
||||
// JSON 파싱
|
||||
var resendListObj = JSON.parse('${resendListJson}');
|
||||
var listCnt = resendListObj.length;
|
||||
|
||||
// 중복 제거 - Set 사용
|
||||
var uniquePhones = new Set();
|
||||
var uniqueResendList = [];
|
||||
|
||||
// 중복 제거 로직
|
||||
for(var i = 0; i < resendListObj.length; i++) {
|
||||
var phone = removeDash(resendListObj[i].callTo);
|
||||
if(!uniquePhones.has(phone)) {
|
||||
uniquePhones.add(phone);
|
||||
uniqueResendList.push(resendListObj[i]);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// 중복 제거된 데이터로 처리
|
||||
for(var i = 0; i < uniqueResendList.length; i++) {
|
||||
var phoneNumber = removeDash(uniqueResendList[i].callTo);
|
||||
|
||||
// callTo 입력 필드에 값 설정 후 번호추가 버튼 클릭
|
||||
$("#callTo").val(phoneNumber);
|
||||
$(".addCallToF").trigger("click");
|
||||
|
||||
}
|
||||
|
||||
// 총 건수 확인
|
||||
setTimeout(function() {
|
||||
updateTotCnt();
|
||||
}, 500);
|
||||
|
||||
} catch(e) {
|
||||
console.error("재전송 데이터 처리 오류:", e);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
</script>
|
||||
|
||||
<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 uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
|
||||
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
|
||||
<%@ taglib prefix="ec" uri="/WEB-INF/tld/ecnet_tld.tld"%>
|
||||
<%@ page import="itn.com.cmm.LoginVO" %>
|
||||
<script src="/publish/js/content.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>
|
||||
<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>
|
||||
<p>총 발송건수 <span class="c_e40000"><c:out value="${totalRecordCount}"/></span>건</p>
|
||||
<div>
|
||||
<p class="cf_text c_e40000">※ 예약 발송취소는 예약 발송시간 기준 5분 전까지만 가능</p>
|
||||
<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">
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<!-- 발송화면 개선 : 카카오톡 테이블 수정 -->
|
||||
<div class="tb_wrap">
|
||||
<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: 45px;">
|
||||
<col style="width: 12%;">
|
||||
<col style="width: 7%;">
|
||||
<col style="width: 12%;">
|
||||
<col style="width: auto;">
|
||||
<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>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>
|
||||
<th rowspan="2">
|
||||
<label for="" class="label">전체 선택</label>
|
||||
<input type="checkbox">
|
||||
</th>
|
||||
<th>
|
||||
발송일시
|
||||
<th rowspan="2">발송일시
|
||||
<div class="sort_wrap">
|
||||
<input type="button" class="sort sortBtn" id="sort_reqdate">
|
||||
</div>
|
||||
</th>
|
||||
<th>
|
||||
형태
|
||||
<th rowspan="2">형태
|
||||
<div class="sort_wrap">
|
||||
<input type="button" class="sort sortBtn" id="sort_msgType">
|
||||
<input type="button" class="sort sortBtn" id="sort_orderByCode">
|
||||
</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 rowspan="2">내용</th>
|
||||
<th rowspan="2">발송건수
|
||||
<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> -->
|
||||
<th rowspan="2">대기</th>
|
||||
<th colspan="2">카카오톡결과</th>
|
||||
<th colspan="2">대체문자결과</th>
|
||||
<th rowspan="2">금액(원)</th>
|
||||
<th rowspan="2">진행상황</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<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">
|
||||
<td>
|
||||
<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>>
|
||||
<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">
|
||||
<td>
|
||||
<c:choose>
|
||||
<c:when test="${resultAllSentList.atDelayYn eq 'Y' && resultAllSentList.atDelayCompleteYn eq 'N'}">
|
||||
<c:choose>
|
||||
@ -165,240 +209,89 @@ $(document).ready(function(){
|
||||
</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>
|
||||
<c:if test="${resultAllSentList.msgType eq '8'}">알림톡</c:if>
|
||||
<c:if test="${resultAllSentList.msgType eq '9'}">친구톡</c:if>
|
||||
</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 class="result_cont">
|
||||
<div class="icon_wrap">
|
||||
<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 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: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 test="${resultAllSentList.statusCd ne '03' }">
|
||||
<ec:code codeId="ITN057" code="${resultAllSentList.statusCd }" />
|
||||
</c:when>
|
||||
<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:choose>
|
||||
</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>
|
||||
<td colspan="12">발송 내역이 없습니다.</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 class="table_btn_left">
|
||||
<button type="button" onclick="javascript:fnDelete(); return false;" class="btnType btnType15"><i class="remove_img"></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>
|
||||
<button type="button" class="excel_btn btnType"><i class="downroad"></i>발송결과 리스트</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<c:if test="${!empty resultAllSentList}">
|
||||
<ul class="pagination">
|
||||
<ui:pagination paginationInfo = "${paginationInfo}" type="imageWeb" jsFunction="linkPage" />
|
||||
</ul>
|
||||
</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" %>
|
||||
<% 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="phone">
|
||||
<!-- 탭스타일 -->
|
||||
<div class="list_tab_wrap2 type5">
|
||||
<ul class="tabType3" id="tabType" name="tabType">
|
||||
<li class="tab active"><button type="button" onclick="phoneTab(this,'1');" title="선택됨">카카오톡</button></li>
|
||||
<c:if test="${resultMsgDetail.bizKakaoResendYn eq 'Y'}">
|
||||
<li class="tab"><button type="button" onclick="phoneTab(this,'2');">대체문자</button></li>
|
||||
</c:if>
|
||||
</ul>
|
||||
</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 class="tab_phone current" id="tab_phone_1">
|
||||
<div class="phone_kakako">
|
||||
<div class="phoneIn">
|
||||
<p class="prev_p"><img src="/publish/images/content/kakao_prev_icon.png" alt=""><c:out value="${resultMsgDetail.yellowId}"/></p>
|
||||
<!-- 텍스트 미리보기 -->
|
||||
<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: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: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: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>
|
||||
<p class="addText">※ 단말기 설정에 따라 다르게 보일 수 있습니다</p>
|
||||
</div>
|
||||
</div>
|
||||
<!--// 카카오 알림톡 미리보기 -->
|
||||
|
||||
<!-- 문자 미리보기 -->
|
||||
<div class="tab_phone" id="tab_phone_2">
|
||||
<div class="phoneIn">
|
||||
<div>
|
||||
<p class="prev_p"><img src="/publish/images/search.png"> 문자내용</p>
|
||||
<div class="text_length2 clearfix">
|
||||
<c:if test="${resultMsgDetail.bizKakaoResendYn eq 'Y'}">
|
||||
<c:choose>
|
||||
<c:when test="${resultMsgDetail.bizKakaoResendTypeCnt > 1}">
|
||||
<span class="msg_com msg_short">단문</span>
|
||||
<span class="msg_com msg_long">장문</span>
|
||||
</c:when>
|
||||
<c:when test="${resultMsgDetail.bizKakaoResendTypeCnt < 2
|
||||
&& resultMsgDetail.bizKakaoResendType eq 'SMS'}">
|
||||
<span class="msg_com msg_short">단문</span>
|
||||
</c:when>
|
||||
<c:otherwise>
|
||||
<span class="msg_com msg_long">장문</span>
|
||||
</c:otherwise>
|
||||
</c:choose>
|
||||
</c:if>
|
||||
<div>
|
||||
<span>글자크기</span>
|
||||
<button type="button" onclick="changeFontSize('plus');"><img src="/publish/images/content/font_plus.png"></button>
|
||||
<button type="button" onclick="changeFontSize('minus');"><img src="/publish/images/content/font_minus.png"></button>
|
||||
</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);
|
||||
threefuledday = today();
|
||||
|
||||
/* 목록 정렬 항목 아이콘 표시 */
|
||||
/* var searchSortCnd = $("[name='searchSortCnd']").val();
|
||||
var searchSortOrd = $("[name='searchSortOrd']").val();
|
||||
|
||||
if (searchSortCnd != "" && searchSortOrd != "" && searchSortCnd != undefined && searchSortOrd != undefined) {
|
||||
var $sort_div = $("#sort_"+ searchSortCnd);
|
||||
var sortClass = 'sortBtn' ;
|
||||
|
||||
if (searchSortOrd == "desc") sortClass = "sortBtnDesc";
|
||||
|
||||
$sort_div.replaceClass('sortBtn' , sortClass) ;
|
||||
$sort_div.attr("sortOrd", searchSortOrd);
|
||||
} */
|
||||
|
||||
// 정렬 항목 이벤트
|
||||
$(document).on('click', '.sort', function (){
|
||||
listSortOrd(this);
|
||||
@ -101,6 +87,9 @@ $(document).ready(function(){
|
||||
|
||||
});
|
||||
|
||||
//발송건수 셋
|
||||
cntSet();
|
||||
|
||||
});
|
||||
|
||||
//오늘날짜 구하기
|
||||
@ -147,56 +136,16 @@ function linkPage(pageNo){
|
||||
form.pageIndex.value = pageNo;
|
||||
|
||||
var sendData = $(document.searchForm).serializeArray();
|
||||
$(".msgSentAllLoad").html('<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){
|
||||
if (status === 'success') {
|
||||
$(this).html(response);
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
//선택 삭제 실행
|
||||
|
||||
/*
|
||||
function fnDelete(){
|
||||
|
||||
var msgId = [];
|
||||
if($("input:checkbox[name='msgSentDel']").is(":checked")==false){
|
||||
alert("한 개 이상의 전송 내역을 선택하세요");
|
||||
return;
|
||||
}
|
||||
|
||||
$("input:checkbox[name='msgSentDel']:checked").each(function(index){
|
||||
var disabledChk = $(this).prop('disabled');
|
||||
if(!disabledChk){ //checkbox disabled 인 것은 제외하고 아이디 저장
|
||||
msgId[index] = $(this).val();
|
||||
}
|
||||
});
|
||||
|
||||
if(msgId.length > 0){
|
||||
|
||||
//22.04.25 구글 독스 alert 기준으로 이지우가 수정
|
||||
// if(confirm("선택한 발송문자를 삭제하시겠습니까? 삭제된 문자는 복구가 불가능 합니다."))
|
||||
if(confirm("선택한 목록을 삭제하시겠습니까?")){
|
||||
|
||||
document.searchForm.msgGroupIdList.value = msgId;
|
||||
var sendData = $(document.searchForm).serializeArray();
|
||||
|
||||
$(".msgSentAllLoad").load("/web/mjon/msgsent/deleteMsgSentDataAjax.do", sendData ,function(response, status, xhr){
|
||||
});
|
||||
|
||||
// var form = document.searchForm;
|
||||
// form.action="/web/mjon/msgsent/selectMsgSentView.do";
|
||||
// form.submit();
|
||||
}
|
||||
|
||||
}else{
|
||||
|
||||
alert("삭제할 문자를 선택해 주세요.");
|
||||
return false;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
*/
|
||||
//상세보기 버튼 실행
|
||||
function fnRevDetailPop(msgGroupId, msgId){
|
||||
document.resPopForm.msgGroupId.value = msgGroupId;
|
||||
@ -204,20 +153,11 @@ function fnRevDetailPop(msgGroupId, msgId){
|
||||
var sendData = $(document.resPopForm).serializeArray();
|
||||
|
||||
var form = document.searchForm;
|
||||
if (form.listType.value == "privateList") {
|
||||
// 개인별
|
||||
$("#msgSentDetailPopLoad").load("/web/kakao/sent/selectKakaoSentDetailData2Ajax.do", sendData ,function(response, status, xhr){
|
||||
$('#tooltopClick').trigger('click');
|
||||
});
|
||||
}
|
||||
else {
|
||||
// 전송건별
|
||||
$("#msgSentDetailPopLoad").load("/web/kakao/sent/selectKakaoSentDetailDataAjax.do", sendData ,function(response, status, xhr){
|
||||
// 상세보기 클릭때마다 툴팁 1 tab이 열리게 설정
|
||||
popupTab($('#atBtn'),'1');
|
||||
$('#tooltopClick').trigger('click');
|
||||
});
|
||||
}
|
||||
$("#msgSentDetailPopLoad").load("/web/kakao/sent/selectKakaoSentDetailDataAjax.do", sendData ,function(response, status, xhr){
|
||||
// 상세보기 클릭때마다 툴팁 1 tab이 열리게 설정
|
||||
popupTab($('#atBtn'),'1');
|
||||
$('#tooltopClick').trigger('click');
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
@ -231,12 +171,6 @@ function fnListLoad(pageType, tabNum){
|
||||
$tab.siblings("li.btn_tab").removeClass("active");
|
||||
$tab.siblings("li.tab").find("button").removeAttr("title");
|
||||
|
||||
if(pageType == 'fail'){
|
||||
form.listType.value = "privateList";
|
||||
$(".tab_depth1").hide();
|
||||
} else {
|
||||
$(".tab_depth1").show();
|
||||
}
|
||||
form.stateType.value = pageType;
|
||||
|
||||
linkPage(1);
|
||||
@ -311,182 +245,6 @@ $(document).on('click', '.msgGgoupList', function(){
|
||||
|
||||
});
|
||||
|
||||
$(document).on('click', '.msgPrivateList', function(){
|
||||
|
||||
var form = document.searchForm;
|
||||
form.listType.value = "privateList";
|
||||
linkPage(1);
|
||||
|
||||
});
|
||||
|
||||
|
||||
function fnDeleteAddrNo(listType){
|
||||
|
||||
var msgId = [];
|
||||
if($("input:checkbox[name='msgSentDel']").is(":checked")==false){
|
||||
alert("한 개 이상의 전송 내역을 선택하세요");
|
||||
return;
|
||||
}
|
||||
|
||||
$("input:checkbox[name='msgSentDel']:checked").each(function(index){
|
||||
|
||||
var disabledChk = $(this).prop('disabled');
|
||||
if(!disabledChk){ //checkbox disabled 인 것은 제외하고 아이디 저장
|
||||
|
||||
msgId[index] = $(this).val();
|
||||
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
if(msgId.length > 0){
|
||||
|
||||
//22.04.25 구글 독스 alert 기준으로 이지우가 수정
|
||||
/* if(confirm("선택한 수신번호를 주소록에서 삭제하시겠습니까? 삭제된 주소록은 복구가 불가능 합니다.")){ */
|
||||
if(confirm("선택하신 번호를 주소록에서 삭제하시겠습니까?")){
|
||||
|
||||
var form = document.searchForm;
|
||||
|
||||
form.msgGroupIdList.value = msgId;
|
||||
form.listType.value = listType;
|
||||
|
||||
var data = new FormData(form);
|
||||
url = "/web/mjon/msgsent/deleteAddrNoDataAjax.do";
|
||||
|
||||
$.ajax({
|
||||
type: "POST",
|
||||
url: url,
|
||||
data: data,
|
||||
dataType:'json',
|
||||
async: false,
|
||||
processData: false,
|
||||
contentType: false,
|
||||
cache: false,
|
||||
success: function (returnData, status) {
|
||||
if(status == 'success'){ // status 확인 필요한가. 석세스 안뜨면 에러 가지 않나
|
||||
if("fail"==returnData.result){
|
||||
|
||||
alert(returnData.message);
|
||||
return false;
|
||||
|
||||
}else if("loginFail"==returnData.result){
|
||||
|
||||
alert(returnData.message);
|
||||
return false;
|
||||
|
||||
}else if(returnData.resultCnt == '0'){
|
||||
|
||||
alert("주소록에 삭제할 연락처가 없습니다.");
|
||||
return false;
|
||||
|
||||
}else{
|
||||
|
||||
alert(returnData.message);
|
||||
return false;
|
||||
|
||||
}
|
||||
|
||||
} else if(status== 'fail'){
|
||||
alert(returnData.message);
|
||||
}
|
||||
},
|
||||
error: function (e) { alert("주소록 삭제에 실패하였습니다."); console.log("ERROR : ", e); }
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
}else{
|
||||
|
||||
alert("삭제할 문자를 선택해 주세요.");
|
||||
return false;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
function fnAddBlockNo(listType){
|
||||
|
||||
var msgId = [];
|
||||
if($("input:checkbox[name='msgSentDel']").is(":checked")==false){
|
||||
alert("선택된 항목이 없습니다.");
|
||||
return;
|
||||
}
|
||||
|
||||
$("input:checkbox[name='msgSentDel']:checked").each(function(index){
|
||||
|
||||
var disabledChk = $(this).prop('disabled');
|
||||
if(!disabledChk){ //checkbox disabled 인 것은 제외하고 아이디 저장
|
||||
|
||||
msgId[index] = $(this).val();
|
||||
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
if(msgId.length > 0){
|
||||
|
||||
//if(confirm("선택한 수신번호를 주소록에서 삭제하시겠습니까? 삭제된 주소록은 복구가 불가능 합니다.")){
|
||||
|
||||
var form = document.searchForm;
|
||||
|
||||
form.msgGroupIdList.value = msgId;
|
||||
form.listType.value = listType;
|
||||
|
||||
var data = new FormData(form);
|
||||
url = "/web/mjon/msgsent/insertAddBlockNoDataAjax.do";
|
||||
|
||||
$.ajax({
|
||||
type: "POST",
|
||||
url: url,
|
||||
data: data,
|
||||
dataType:'json',
|
||||
async: false,
|
||||
processData: false,
|
||||
contentType: false,
|
||||
cache: false,
|
||||
success: function (returnData, status) {
|
||||
if(status == 'success'){ // status 확인 필요한가. 석세스 안뜨면 에러 가지 않나
|
||||
if("fail"==returnData.result){
|
||||
|
||||
alert(returnData.message);
|
||||
return false;
|
||||
|
||||
}else if("loginFail"==returnData.result){
|
||||
|
||||
alert(returnData.message);
|
||||
return false;
|
||||
|
||||
}else if(returnData.resultCnt == '0'){
|
||||
|
||||
alert("주소록에 삭제할 연락처가 없습니다.");
|
||||
return false;
|
||||
|
||||
}else{
|
||||
|
||||
alert(returnData.message);
|
||||
return false;
|
||||
|
||||
}
|
||||
|
||||
} else if(status== 'fail'){
|
||||
alert(returnData.message);
|
||||
}
|
||||
},
|
||||
error: function (e) { alert("수신거부번호 등록에 실패하였습니다."); console.log("ERROR : ", e); }
|
||||
});
|
||||
|
||||
//}
|
||||
|
||||
}else{
|
||||
|
||||
alert("수신거부번호를 등록할 문자를 선택해 주세요.");
|
||||
return false;
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
function fnReSendMsg(){
|
||||
|
||||
var msgSeq = [];
|
||||
@ -514,27 +272,6 @@ function fnReSendMsg(){
|
||||
|
||||
}
|
||||
|
||||
function fnMsgSFDetailList(msgGroupId, resultType){
|
||||
|
||||
var form = document.resPopForm;
|
||||
form.msgGroupId.value = msgGroupId;
|
||||
form.resultType.value = resultType;
|
||||
|
||||
//만들려는 팝업의 크기
|
||||
var popup_wid = '1280';
|
||||
var popup_ht = '700';
|
||||
|
||||
var popup_left = (window.screen.width / 2) - (popup_wid / 2);
|
||||
var popup_top =(window.screen.height / 2) - (popup_ht / 2);
|
||||
|
||||
$("#resPopForm").attr("target","msgSFDetailPop");
|
||||
|
||||
window.open('', 'msgSFDetailPop', 'width='+ popup_wid +', height='+ popup_ht +', left=' + popup_left + ', top='+ popup_top );
|
||||
$("#resPopForm").attr({"action":"/web/kakao/sent/selectKakaoSentSFDetailListAjax.do", "method":"post"}).submit();
|
||||
|
||||
}
|
||||
|
||||
|
||||
/* 사용내역서 클릭 시 내역서 새창 팝업 오픈 */
|
||||
function fnShowPrintPopup(tabType, type) {
|
||||
//만들려는 팝업의 크기
|
||||
@ -552,129 +289,6 @@ function fnShowPrintPopup(tabType, type) {
|
||||
|
||||
}
|
||||
|
||||
function addrGroupDuplCnt() {
|
||||
document.searchForm.addrGrpNm.value = $('#grpNm').val();
|
||||
|
||||
var data = $('#searchForm').serialize();
|
||||
//var data = new FormData(form);
|
||||
|
||||
var flag = true;
|
||||
var url = "/web/addr/selectDuplAddrGroupNameAjax.do";
|
||||
|
||||
$.ajax({
|
||||
async: false,
|
||||
type: "post",
|
||||
url: url,
|
||||
data: data,
|
||||
dataType:"JSON",
|
||||
// contentType: false,
|
||||
// processData: false,
|
||||
cache: false,
|
||||
success: function (returnData, status) {
|
||||
if("dupl"==returnData.result1) {
|
||||
flag = false;
|
||||
}
|
||||
},
|
||||
error: function (e) {
|
||||
alert("error");
|
||||
console.log("ERROR : ", e);
|
||||
}
|
||||
});
|
||||
|
||||
return flag;
|
||||
}
|
||||
|
||||
//주소록 그룹 등록 기능
|
||||
function fnAddAddrNo(){
|
||||
|
||||
var addrGrpNm = $('#grpNm').val(); //입력 그룹 이름 불러오기
|
||||
|
||||
var msgId = [];
|
||||
if($("input:checkbox[name='msgSentDel']").is(":checked")==false){
|
||||
alert("한 개 이상의 전송 내역을 선택하세요");
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
$("input:checkbox[name='msgSentDel']:checked").each(function(index){
|
||||
|
||||
var disabledChk = $(this).prop('disabled');
|
||||
if(!disabledChk){ //checkbox disabled 인 것은 제외하고 아이디 저장
|
||||
|
||||
msgId[index] = $(this).val();
|
||||
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
if(msgId.length > 0 && addrGrpNm != ''){
|
||||
|
||||
|
||||
//주소록 그룹명 중복체크
|
||||
if(!addrGroupDuplCnt()) {
|
||||
alert("이미 등록되어있는 주소록입니다.");
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
var form = document.searchForm;
|
||||
|
||||
form.msgGroupIdList.value = msgId;
|
||||
form.addrGrpNm.value = addrGrpNm;
|
||||
|
||||
var data = new FormData(form);
|
||||
url = "/web/mjon/msgsent/insertAddAddrGrpDataAjax.do";
|
||||
|
||||
$.ajax({
|
||||
type: "POST",
|
||||
url: url,
|
||||
data: data,
|
||||
dataType:'json',
|
||||
async: false,
|
||||
processData: false,
|
||||
contentType: false,
|
||||
cache: false,
|
||||
success: function (returnData, status) {
|
||||
if(status == 'success'){ // status 확인 필요한가. 석세스 안뜨면 에러 가지 않나
|
||||
if("fail"==returnData.result){
|
||||
|
||||
alert(returnData.message);
|
||||
return false;
|
||||
|
||||
}else if("loginFail"==returnData.result){
|
||||
|
||||
alert(returnData.message);
|
||||
return false;
|
||||
|
||||
}else if(returnData.resultCnt == '0'){
|
||||
|
||||
alert("주소록에 등록할 연락처가 없습니다.");
|
||||
return false;
|
||||
|
||||
}else{
|
||||
|
||||
alert(returnData.message);
|
||||
$('#grpNm').val(""); //입력한 그룹명 초기화
|
||||
$(".tooltip-close").trigger("click");
|
||||
return false;
|
||||
|
||||
}
|
||||
|
||||
} else if(status== 'fail'){
|
||||
alert(returnData.message);
|
||||
}
|
||||
},
|
||||
error: function (e) { alert("주소록 등록에 실패하였습니다."); console.log("ERROR : ", e); }
|
||||
});
|
||||
}else{
|
||||
|
||||
alert("등록할 문자를 선택해 주세요.");
|
||||
return false;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/* 윈도우팝업 열기 */
|
||||
function infoPop(pageUrl){
|
||||
document.popForm.pageType.value = pageUrl;
|
||||
@ -685,33 +299,90 @@ function infoPop(pageUrl){
|
||||
document.popForm.submit();
|
||||
}
|
||||
|
||||
function cntSet(){
|
||||
|
||||
$('#ntceBgnde').val($('#startDate').val());
|
||||
$('#ntceEndde').val($('#endDate').val());
|
||||
|
||||
$.ajax({
|
||||
url: '/web/kakao/sent/selectKakaoSentViewTotalSumAjax.do',
|
||||
type: 'POST',
|
||||
// contentType: 'application/json',
|
||||
contentType: false,
|
||||
processData: false,
|
||||
data: new FormData(document.searchForm),
|
||||
success: function(response) {
|
||||
|
||||
cntView('allCnt', response.allCnt);
|
||||
cntView('atCnt', response.atCnt);
|
||||
//cntView('ftCnt', response.ftCnt);
|
||||
},
|
||||
error: function(error) {
|
||||
alert("error");
|
||||
},
|
||||
beforeSend : function(xmlHttpRequest) {
|
||||
//로딩창 show
|
||||
$('#lodingBefore').show();
|
||||
$('#lodingAfter').hide();
|
||||
},
|
||||
complete : function(xhr, textStatus) {
|
||||
//로딩창 hide
|
||||
$('#lodingBefore').hide();
|
||||
$('#lodingAfter').show();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function cntView(type, obj){
|
||||
$('#'+type+' span[name="allCnt"]').text(obj.allCount.toLocaleString());
|
||||
$('#'+type+' span[name="waitCnt"]').text(obj.waitCount.toLocaleString());
|
||||
$('#'+type+' span[name="succCnt"]').text(obj.successCount.toLocaleString());
|
||||
$('#'+type+' span[name="failCnt"]').text(obj.failCount.toLocaleString());
|
||||
}
|
||||
|
||||
//선택 삭제 실행
|
||||
function fnDelete(){
|
||||
|
||||
var msgId = [];
|
||||
if($("input:checkbox[name='msgSentDel']").is(":checked")==false){
|
||||
alert("한 개 이상의 전송 내역을 선택하세요");
|
||||
return;
|
||||
}
|
||||
|
||||
$("input:checkbox[name='msgSentDel']:checked").each(function(index){
|
||||
var disabledChk = $(this).prop('disabled');
|
||||
if(!disabledChk){ //checkbox disabled 인 것은 제외하고 아이디 저장
|
||||
msgId[index] = $(this).val();
|
||||
}
|
||||
});
|
||||
|
||||
console.log('msgId : ', msgId);
|
||||
|
||||
if(msgId.length < 1){
|
||||
alert("삭제할 문자를 선택해 주세요.");
|
||||
return false;
|
||||
}
|
||||
|
||||
//22.04.25 구글 독스 alert 기준으로 이지우가 수정
|
||||
/* if(confirm("선택한 발송문자를 삭제하시겠습니까? 삭제된 문자는 복구가 불가능 합니다.")) */
|
||||
if(confirm("선택한 목록을 삭제하시겠습니까?\n삭제한 목록은 복구가 불가합니다.")){
|
||||
|
||||
document.searchForm.msgGroupIdList.value = msgId;
|
||||
var sendData = $(document.searchForm).serializeArray();
|
||||
|
||||
$(".msgSentAllLoad").load("/web/mjon/msgsent/deleteMsgSentDataAjax.do", sendData ,function(response, status, xhr){
|
||||
});
|
||||
|
||||
alert("삭제되었습니다.");
|
||||
var form = document.searchForm;
|
||||
form.action="/web/kakao/sent/selectKakaoSentView.do";
|
||||
form.submit();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
</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">
|
||||
@ -763,154 +434,19 @@ function infoPop(pageUrl){
|
||||
<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">
|
||||
<input type="hidden" id="ntceBgnde" name="ntceBgnde" value=""/>
|
||||
<input type="hidden" id="ntceEndde" name="ntceEndde" value=""/>
|
||||
<input type="hidden" id="msgGroupId" name="msgGroupId" value=""/>
|
||||
|
||||
<!-- 전체 갯수 구하기 -->
|
||||
<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 class="titBox_result">
|
||||
<p>- 최대 3개월간의 발송내역만 확인하실 수 있습니다.</p>
|
||||
<p>- 전송내역이 필요한 경우 기간 내에 다운로드하여 주시기 바랍니다.</p>
|
||||
</div>
|
||||
|
||||
<!--// 발송결과 개선 : 문구추가 -->
|
||||
|
||||
<div class="excel_middle">
|
||||
<div class="select_btnWrap clearfix">
|
||||
<div class="btn_left">
|
||||
@ -931,6 +467,8 @@ function infoPop(pageUrl){
|
||||
<div class="btn_right">
|
||||
<label for="searchCondition" class="label">발신번호 선택 == ${kakaoSentVO.searchCondition}</label>
|
||||
<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>
|
||||
</select>
|
||||
<div class="search">
|
||||
@ -941,6 +479,91 @@ function infoPop(pageUrl){
|
||||
</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">
|
||||
<!-- tab button -->
|
||||
<ul class="list_tab">
|
||||
@ -953,22 +576,43 @@ function infoPop(pageUrl){
|
||||
</ul><!--// tab button -->
|
||||
</div>
|
||||
<!-- 예약관리 > 전체 -->
|
||||
<div class="price_history_cont current" id="listTab_2">
|
||||
<div class="price_history_cont current price_wrap" id="listTab_2">
|
||||
<!-- tab button -->
|
||||
<div class="table_tab_wrap">
|
||||
<ul>
|
||||
<!-- <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>
|
||||
</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> -->
|
||||
<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 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);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@ -4,6 +4,8 @@
|
||||
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
|
||||
<%@ taglib prefix="ec" uri="/WEB-INF/tld/ecnet_tld.tld"%>
|
||||
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
|
||||
<%@ taglib prefix="fnc" uri="/WEB-INF/tld/functions.tld"%>
|
||||
|
||||
|
||||
<script src="https://t1.daumcdn.net/mapjsapi/bundle/postcode/prod/postcode.v2.js"></script>
|
||||
<script language=javascript>
|
||||
@ -845,8 +847,9 @@ function callTo() {
|
||||
</td>
|
||||
<td>
|
||||
<c:choose>
|
||||
<c:when test="${not empty resultSentMsg.regdate}">
|
||||
<fmt:formatDate value="${resultSentMsg.regdate}" pattern="yyyy-MM-dd HH:mm:ss"/>
|
||||
<c:when test="${not empty resultSentMsg.regDate}">
|
||||
<%-- <fmt:formatDate value="${resultSentMsg.regDate}" pattern="yyyy-MM-dd HH:mm:ss"/> --%>
|
||||
${fnc:setStrToDataFormatter(resultSentMsg.regDate, 'yyyy-MM-dd HH:mm:ss') }
|
||||
</c:when>
|
||||
<c:otherwise>
|
||||
-
|
||||
|
||||
@ -2126,7 +2126,10 @@ button.check_validity:hover {border: 1px solid #a3a3a3;box-shadow: 0px 0px 5px
|
||||
|
||||
.res_info .res_info_in .res_info_btm {margin:20px 0 0 0;padding:10px;background:#fff;border-radius:5px;box-sizing:border-box;}
|
||||
.res_info .res_info_in .res_info_btm dl {display:flex;padding:8px 10px;font-size:16px;font-weight:300;justify-content:space-between; color:#222;}
|
||||
.res_info .res_info_in .res_info_btm dl.charge_line {border-top:1px solid #e6e6e6; text-align:center;}
|
||||
.res_info .res_info_in .res_info_btm .charge_line {border-top:1px solid #e6e6e6; text-align:center; margin:0 10px; padding:7px 0 5px 0; }
|
||||
.res_info .res_info_in .res_info_btm .charge_line dl {padding:7px 0 5px 10px; }
|
||||
.res_info .res_info_in .res_info_btm .charge_line dl dt {font-size:15px;}
|
||||
.res_info .res_info_in .res_info_btm .charge_line dl dd {padding:0; font-size:16px;}
|
||||
.res_info .res_info_in .res_info_btm dl dt.charge_title {font-size:15px; padding:0 0 0 5px;}
|
||||
.res_info .res_info_in .res_info_btm dl dt {font-weight:400;}
|
||||
.res_info .res_info_in .res_info_btm dl dt.btm_charge {font-size:16px;}
|
||||
@ -2151,7 +2154,7 @@ button.check_validity:hover {border: 1px solid #a3a3a3;box-shadow: 0px 0px 5px
|
||||
/* phone 기본 -- sticky */
|
||||
.send_top .resultcont_right .phone {width: 374px; position: absolute; right: -2px; top: 0;}
|
||||
.send_top .resultcont_right .phone .phoneIn {background-image: url(/publish/images/content/phoneBg.png); height: 720px; background-size: 100% auto; background-repeat: no-repeat; }
|
||||
.send_top .resultcont_right .phone .phoneIn>div {padding: 45px 30px 0 30px; position: relative; height: 96%; box-sizing: border-box;}
|
||||
.send_top .resultcont_right .phone .phoneIn>div {padding: 45px 30px 25px 30px; position: relative; height: 96%; box-sizing: border-box;}
|
||||
.send_top .resultcont_right .phone .prev_p {font-size: 20px;font-weight: 500;padding-bottom: 12px;border-bottom: 1px solid #e5e5e5;}
|
||||
.send_top .resultcont_right .phone .text_length2 {padding: 12px 0;}
|
||||
.send_top .resultcont_right .phone .text_length2>span {float: left;line-height: 27px;}
|
||||
@ -2182,7 +2185,7 @@ button.check_validity:hover {border: 1px solid #a3a3a3;box-shadow: 0px 0px 5px
|
||||
|
||||
/* 알림톡 미리보기 */
|
||||
.send_top .resultcont_right .phone_kakao {width: 374px; position: absolute; right:0; top: 0;}
|
||||
.send_top .resultcont_right .phone_kakako .phoneIn{height: 720px; width:346px; background-image: url(/publish/images/content/kakaoBg.png); padding: 27px 25px 0 25px; margin:0 0 0 -12px;}
|
||||
.send_top .resultcont_right .phone_kakako .phoneIn{height: 720px; width:346px; background-image: url(/publish/images/content/kakaoBg_01.png); padding: 27px 25px 0 25px; margin:0 0 0 -12px;}
|
||||
.send_top .resultcont_right .phone_kakako .prev_p{padding: 0 0 0 10px; border: 0; letter-spacing: -0.25px;}
|
||||
.send_top .resultcont_right .phone_kakako .prev_p img{margin: 0 10px 0 0;}
|
||||
.send_top .resultcont_right .phone_kakako .allimtalk_title{position: relative; width: calc(100% - 20px); background-color: #fae100; font-family: 'LotteMartDream'; font-size: 18px; padding: 12px 21px; border-radius: 5px 5px 0 0; box-sizing: border-box;}
|
||||
@ -2206,7 +2209,7 @@ button.check_validity:hover {border: 1px solid #a3a3a3;box-shadow: 0px 0px 5px
|
||||
.send_top .resultcont_right .phone_kakako .phoneIn .text_preview .allimtalk_content .btn_kakao_type{width: calc(100% - 20px); height: 40px; font-size: 15px; border-radius: 5px; background-color: #ededed;}
|
||||
.send_top .resultcont_right .phone_kakako .phoneIn .template_info_wrap{display: flex; width: calc(85% + 13px); height: auto; padding: 6px 15px 6px 23px; justify-content: space-between; align-items: center; background-color: #fae100; margin: -5px 0 0 -3px; border-radius: 0 0 25px 25px;}
|
||||
.send_top .resultcont_right .phone_kakako .phoneIn .template_info_wrap .btn_template_choice{width: 120px; height: 36px; font-size: 16px; color: #fae100; background-color: #302218; border-radius: 5px;}
|
||||
.send_top .resultcont_right .phone_kakako .addText{color: #002c9a;text-align: center; font-size: 14px; padding-top: 2px; margin:10px 0 10px 0;}
|
||||
.send_top .resultcont_right .phone_kakako .addText{color: #002c9a;text-align: center; font-size: 14px; padding-top: 2px; margin:-27px 0 10px 0;}
|
||||
|
||||
.btn_list_type1 {border-top:solid 1px #e5e5e5; text-align: right; padding:26px 0 0 0; margin:60px 0 0 0;}
|
||||
.btn_list_type1 .btnType.btnType17 {width:100px; }
|
||||
|
||||
BIN
src/main/webapp/publish/images/content/kakaoBg_01.png
Normal file
BIN
src/main/webapp/publish/images/content/kakaoBg_01.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 20 KiB |
@ -1,146 +1,143 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="ko">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>프리미엄 문자 발송 서비스 문자온</title>
|
||||
<meta property="og:title" content="프리미엄 문자 발송 서비스 문자온">
|
||||
<meta property="og:image" content="https://www.munjaon.co.kr/publish/publish_m/img/preview_logo.png">
|
||||
|
||||
<link rel="apple-touch-icon" sizes="57x57" href="/publish/images/favicon/apple-icon-57x57.png">
|
||||
<link rel="apple-touch-icon" sizes="60x60" href="/publish/images/favicon/apple-icon-60x60.png">
|
||||
<link rel="apple-touch-icon" sizes="72x72" href="/publish/images/favicon/apple-icon-72x72.png">
|
||||
<link rel="apple-touch-icon" sizes="76x76" href="/publish/images/favicon/apple-icon-76x76.png">
|
||||
<link rel="apple-touch-icon" sizes="114x114" href="/publish/images/favicon/apple-icon-114x114.png">
|
||||
<link rel="apple-touch-icon" sizes="120x120" href="/publish/images/favicon/apple-icon-120x120.png">
|
||||
<link rel="apple-touch-icon" sizes="144x144" href="/publish/images/favicon/apple-icon-144x144.png">
|
||||
<link rel="apple-touch-icon" sizes="152x152" href="/publish/images/favicon/apple-icon-152x152.png">
|
||||
<link rel="apple-touch-icon" sizes="180x180" href="/publish/images/favicon/apple-icon-180x180.png">
|
||||
<link rel="icon" type="image/png" sizes="192x192" href="/publish/images/favicon/android-icon-192x192.png">
|
||||
<link rel="icon" type="image/png" sizes="32x32" href="/publish/images/favicon/favicon-32x32.png">
|
||||
<link rel="icon" type="image/png" sizes="96x96" href="/publish/images/favicon/favicon-96x96.png">
|
||||
<link rel="icon" type="image/png" sizes="16x16" href="/publish/images/favicon/favicon-16x16.png">
|
||||
<link rel="manifest" href="/publish/images/favicon/manifest.json">
|
||||
|
||||
<link rel="stylesheet" href="/publish/publish_m/css/reset.css">
|
||||
<link rel="stylesheet" href="/publish/publish_m/css/style.css">
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div class="con_wrap">
|
||||
<header>
|
||||
<div class="inner">
|
||||
<a href="https://www.munjaon.co.kr">
|
||||
<h1><img src="/publish/publish_m/img/header_logo.png" alt="문자온 로고"></h1>
|
||||
<p>munjaon.co.kr</p>
|
||||
</a>
|
||||
</div>
|
||||
</header>
|
||||
<div class="visual">
|
||||
<div class="inner">
|
||||
<h2><span>프리미엄</span> 문자<br>발송 서비스</h2>
|
||||
<div class="button">
|
||||
<a href="https://www.munjaon.co.kr">
|
||||
<p>문자온 바로가기 <span>(클릭)</span></p>
|
||||
</a>
|
||||
</div>
|
||||
<div class="price banner_con">
|
||||
<ul>
|
||||
<li>
|
||||
<div class="wrap">
|
||||
<p class="inner_text">최저가 요금<span>(후불제 가능)</span></p>
|
||||
</div>
|
||||
</li>
|
||||
<li>
|
||||
<div class="wrap">
|
||||
<p class="inner_text second_te">편리한 선거문자 시스템</p>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<section>
|
||||
<div class="con">
|
||||
<div class="title">
|
||||
<p class="num">1</p>
|
||||
<p>특장점</p>
|
||||
</div>
|
||||
<div class="text_wrap add_wrap">
|
||||
<div class="text">
|
||||
<p class="te">편리한 20건 선거문자 발송</p>
|
||||
<p class="inner_sub">(자동분류, 전체선택 가능)</p>
|
||||
</div>
|
||||
<div class="text">
|
||||
<p class="te">업계 최저가 요금</p>
|
||||
<p class="inner_sub">(현 요금보다 저렴하게 제공)</p>
|
||||
</div>
|
||||
<div class="text">
|
||||
<p class="te">단문<span class="inner_sub">(SMS)</span>, 장문<span class="inner_sub">(LMS)</span>, 그림문자<span class="inner_sub">(MMS)</span>, 카카오 알림톡, 팩스 발송 기능 제공</p>
|
||||
</div>
|
||||
<div class="text">
|
||||
<p class="te">최신 트렌드 반영 서비스 제공</p>
|
||||
<div class="text_sub">
|
||||
<p>- 주소록 입력 대행(무료)</p>
|
||||
<p>- 예약발송 기능 제공(분 단위)</p>
|
||||
<p>- 문자메시지 지도‧약도 자동 첨부 가능</p>
|
||||
<p>- 그림문자 주문제작 서비스 제공</p>
|
||||
<p>- 다양한 결제수단 제공(신용카드, 휴대폰 결제, 전용계좌, 즉시이체, 간편결제 등)</p>
|
||||
<p>- 무제한 발송량 제공</p>
|
||||
<p>- 특정 공통문구(이름, 일시, 비용 등) 일괄 변경 기능 제공</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="text">
|
||||
<p class="te">기업‧단체‧공공기관 B2B 전용라인 제공</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<section>
|
||||
<div class="con">
|
||||
<div class="title">
|
||||
<p class="num">2</p>
|
||||
<p>이용고객</p>
|
||||
</div>
|
||||
<div class="text_wrap add_wrap">
|
||||
<div class="text">
|
||||
<p class="te">개인<span class="inner_sub">(사업자)</span></p>
|
||||
<div class="text_sub">
|
||||
<p>- 동호회, 동문회, 향우회, 병원, 부동산, 음식점, 마트, 대리점, 숙박업, 전문직 사무실, 소셜커머스 사업자, 교육시설(학원, 학교, 유치원, 어린이집), 스포츠시설(골프장, 피트니스) 등</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="text">
|
||||
<p class="te">기업‧협회‧단체</p>
|
||||
<div class="text_sub">
|
||||
<p>- 기업(대‧중‧소기업), 협회, 조합, 비영리단체, 종교단체(교회, 사찰), 은행, 카드사, 쇼핑몰, 택배사, 보험사, 리서치사 등</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="text">
|
||||
<p class="te">공공</p>
|
||||
<div class="text_sub">
|
||||
<p>- 정부, 지방자치단체, 국회, 지방의회, 법원, 공공기관, 공직유관단체, 도서관, 미술관, 전시관, 공연시설, 영화관 등</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<footer>
|
||||
<div class="title">
|
||||
<img src="/publish/publish_m/img/tel_icon.png" alt="고객센터 아이콘">
|
||||
<p>고객센터</p>
|
||||
</div>
|
||||
<ul>
|
||||
<li>
|
||||
<a href="tel:010-8432-9333">010-8432-9333</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="tel:010-2290-4789">010-2290-4789</a>
|
||||
</li>
|
||||
</ul>
|
||||
<p class="iten">주식회사 아이티앤</p>
|
||||
</footer>
|
||||
</div>
|
||||
|
||||
</body>
|
||||
<!DOCTYPE html>
|
||||
<html lang="ko">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>프리미엄 문자 발송 서비스 문자온</title>
|
||||
<meta property="og:title" content="프리미엄 문자 발송 서비스 문자온">
|
||||
<meta property="og:image" content="https://www.munjaon.co.kr/publish/publish_m/img/preview_logo.png">
|
||||
|
||||
<link rel="apple-touch-icon" sizes="57x57" href="/publish/images/favicon/apple-icon-57x57.png">
|
||||
<link rel="apple-touch-icon" sizes="60x60" href="/publish/images/favicon/apple-icon-60x60.png">
|
||||
<link rel="apple-touch-icon" sizes="72x72" href="/publish/images/favicon/apple-icon-72x72.png">
|
||||
<link rel="apple-touch-icon" sizes="76x76" href="/publish/images/favicon/apple-icon-76x76.png">
|
||||
<link rel="apple-touch-icon" sizes="114x114" href="/publish/images/favicon/apple-icon-114x114.png">
|
||||
<link rel="apple-touch-icon" sizes="120x120" href="/publish/images/favicon/apple-icon-120x120.png">
|
||||
<link rel="apple-touch-icon" sizes="144x144" href="/publish/images/favicon/apple-icon-144x144.png">
|
||||
<link rel="apple-touch-icon" sizes="152x152" href="/publish/images/favicon/apple-icon-152x152.png">
|
||||
<link rel="apple-touch-icon" sizes="180x180" href="/publish/images/favicon/apple-icon-180x180.png">
|
||||
<link rel="icon" type="image/png" sizes="192x192" href="/publish/images/favicon/android-icon-192x192.png">
|
||||
<link rel="icon" type="image/png" sizes="32x32" href="/publish/images/favicon/favicon-32x32.png">
|
||||
<link rel="icon" type="image/png" sizes="96x96" href="/publish/images/favicon/favicon-96x96.png">
|
||||
<link rel="icon" type="image/png" sizes="16x16" href="/publish/images/favicon/favicon-16x16.png">
|
||||
<link rel="manifest" href="/publish/images/favicon/manifest.json">
|
||||
|
||||
<link rel="stylesheet" href="/publish/publish_m/css/reset.css">
|
||||
<link rel="stylesheet" href="/publish/publish_m/css/style.css">
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div class="con_wrap">
|
||||
<header>
|
||||
<div class="inner">
|
||||
<a href="https://www.munjaon.co.kr">
|
||||
<h1><img src="/publish/publish_m/img/header_logo.png" alt="문자온 로고"></h1>
|
||||
<p>munjaon.co.kr</p>
|
||||
</a>
|
||||
</div>
|
||||
</header>
|
||||
<div class="visual">
|
||||
<div class="inner">
|
||||
<h2><span>프리미엄</span> 문자<br>발송 서비스</h2>
|
||||
<div class="button">
|
||||
<a href="https://www.munjaon.co.kr">
|
||||
<p>문자온 바로가기 <span>(클릭)</span></p>
|
||||
</a>
|
||||
</div>
|
||||
<div class="price banner_con">
|
||||
<ul>
|
||||
<li>
|
||||
<div class="wrap">
|
||||
<p class="inner_text">최저가 요금<span>(후불제 가능)</span></p>
|
||||
</div>
|
||||
</li>
|
||||
<li>
|
||||
<div class="wrap">
|
||||
<p class="inner_text second_te">편리한 선거문자 시스템</p>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<section>
|
||||
<div class="con">
|
||||
<div class="title">
|
||||
<p class="num">1</p>
|
||||
<p>특장점</p>
|
||||
</div>
|
||||
<div class="text_wrap add_wrap">
|
||||
<div class="text">
|
||||
<p class="te">편리한 20건 선거문자 발송</p>
|
||||
<p class="inner_sub">(자동분류, 전체선택 가능)</p>
|
||||
</div>
|
||||
<div class="text">
|
||||
<p class="te">업계 최저가 요금</p>
|
||||
<p class="inner_sub">(현 요금보다 저렴하게 제공)</p>
|
||||
</div>
|
||||
<div class="text">
|
||||
<p class="te">단문<span class="inner_sub">(SMS)</span>, 장문<span class="inner_sub">(LMS)</span>, 그림문자<span class="inner_sub">(MMS)</span>, 카카오 알림톡, 팩스 발송 기능 제공</p>
|
||||
</div>
|
||||
<div class="text">
|
||||
<p class="te">최신 트렌드 반영 서비스 제공</p>
|
||||
<div class="text_sub">
|
||||
<p>- 주소록 입력 대행(무료)</p>
|
||||
<p>- 예약발송 기능 제공(분 단위)</p>
|
||||
<p>- 문자메시지 지도‧약도 자동 첨부 가능</p>
|
||||
<p>- 그림문자 주문제작 서비스 제공</p>
|
||||
<p>- 다양한 결제수단 제공(신용카드, 휴대폰 결제, 전용계좌, 즉시이체, 간편결제 등)</p>
|
||||
<p>- 무제한 발송량 제공</p>
|
||||
<p>- 특정 공통문구(이름, 일시, 비용 등) 일괄 변경 기능 제공</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="text">
|
||||
<p class="te">기업‧단체‧공공기관 B2B 전용라인 제공</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<section>
|
||||
<div class="con">
|
||||
<div class="title">
|
||||
<p class="num">2</p>
|
||||
<p>이용고객</p>
|
||||
</div>
|
||||
<div class="text_wrap add_wrap">
|
||||
<div class="text">
|
||||
<p class="te">개인<span class="inner_sub">(사업자)</span></p>
|
||||
<div class="text_sub">
|
||||
<p>- 동호회, 동문회, 향우회, 병원, 부동산, 음식점, 마트, 대리점, 숙박업, 전문직 사무실, 소셜커머스 사업자, 교육시설(학원, 학교, 유치원, 어린이집), 스포츠시설(골프장, 피트니스) 등</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="text">
|
||||
<p class="te">기업‧협회‧단체</p>
|
||||
<div class="text_sub">
|
||||
<p>- 기업(대‧중‧소기업), 협회, 조합, 비영리단체, 종교단체(교회, 사찰), 은행, 카드사, 쇼핑몰, 택배사, 보험사, 리서치사 등</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="text">
|
||||
<p class="te">공공</p>
|
||||
<div class="text_sub">
|
||||
<p>- 정부, 지방자치단체, 국회, 지방의회, 법원, 공공기관, 공직유관단체, 도서관, 미술관, 전시관, 공연시설, 영화관 등</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<footer>
|
||||
<div class="title">
|
||||
<img src="/publish/publish_m/img/tel_icon.png" alt="고객센터 아이콘">
|
||||
<p>고객센터</p>
|
||||
</div>
|
||||
<ul>
|
||||
<li>
|
||||
<a href="tel:1551-8011">1551-8011</a>
|
||||
</li>
|
||||
</ul>
|
||||
<p class="iten">주식회사 아이티앤</p>
|
||||
</footer>
|
||||
</div>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
@ -775,7 +775,7 @@
|
||||
</dl>
|
||||
<dl>
|
||||
<dt>채널정보</dt>
|
||||
<dd>채널명(@채널ID)</dd>
|
||||
<dd>@채널ID</dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt>진행상황
|
||||
@ -798,14 +798,16 @@
|
||||
<dd><span class="stcharge">78,100</span>원</dd>
|
||||
<!--<dd><span class="stcharge">-</span>원</dd>--><!-- 예역취소 후 금액은 하이픈 처리-->
|
||||
</dl>
|
||||
<dl class="charge_line">
|
||||
<dt class="charge_title">· 카카오톡</dt>
|
||||
<dd><span class="c_222" style="font-size:16px;">8,100</span>원</dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt class="charge_title">· 대체문자</dt>
|
||||
<dd><span class="c_222" style="font-size:16px;">8,100</span>원</dd>
|
||||
</dl>
|
||||
<div class="charge_line">
|
||||
<dl>
|
||||
<dt class="charge_title">· 카카오톡</dt>
|
||||
<dd><span class="c_222">8,100</span>원</dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt class="charge_title">· 대체문자</dt>
|
||||
<dd><span class="c_222">8,100</span>원</dd>
|
||||
</dl>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@ -821,48 +823,34 @@
|
||||
<div class="res_info_btm1">
|
||||
<dl>
|
||||
<dt>전체건수</dt>
|
||||
<dd><a href="#" data-tooltip="rev_popup04"><span class="c_222_g">300,101</span>건</a></dd>
|
||||
<dd><a href="#" data-tooltip="rev_popup04"><span class="c_222_g">300,001</span>건</a></dd>
|
||||
</dl>
|
||||
</div>
|
||||
<div class="res_info_btm1">
|
||||
<dl>
|
||||
<dt>대기건수</dt>
|
||||
<dd><span class="c_666_g">300,000</span>건(100%)</dd>
|
||||
<dt>성공건수</dt>
|
||||
<dd><span class="c_002c9a_g">300,000</span>건(100%)</dd>
|
||||
</dl>
|
||||
</div>
|
||||
</div>
|
||||
<div class="res_num">
|
||||
<div class="res_info_btm1">
|
||||
<dl>
|
||||
<dt>성공건수(카카오톡)</dt>
|
||||
<dd><span class="c_002c9a_g">0</span>건(0%)</dd>
|
||||
<dt>대기건수</dt>
|
||||
<dd><span class="c_666_g">0</span>건(0%)</dd>
|
||||
</dl>
|
||||
</div>
|
||||
<div class="res_info_btm1">
|
||||
<dl>
|
||||
<dt>실패건수(카카오톡)</dt>
|
||||
<dt>실패건수</dt>
|
||||
<dd><span class="c_e40000_g">1</span>건(100%)</dd>
|
||||
</dl>
|
||||
</div>
|
||||
</div>
|
||||
<div class="res_num">
|
||||
<div class="res_info_btm1">
|
||||
<dl>
|
||||
<dt>성공건수(대체문자)</dt>
|
||||
<dd><span class="c_002c9a_g">0</span>건(0%)</dd>
|
||||
</dl>
|
||||
</div>
|
||||
<div class="res_info_btm1">
|
||||
<dl>
|
||||
<dt>실패건수(대체문자)</dt>
|
||||
<dd><span class="c_e40000_g">1</span>건(100%)</dd>
|
||||
</dl>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<p class="table_bottom_txt">* 전체건수를 클릭하면 받는 사람 상세정보를 확인하실 수 있습니다.</p>
|
||||
</div>
|
||||
</div>
|
||||
<!--// 발송결과-->
|
||||
<!--// 상세결과-->
|
||||
|
||||
</div>
|
||||
<!--// 발송결과 상세 정보 -->
|
||||
@ -891,9 +879,9 @@
|
||||
<img src="/publish/images/content/icon_allimtalk.png" alt="">알림톡 도착
|
||||
</div>
|
||||
<div class="allimtalk_content">
|
||||
<!-- <div class="kakao_image"> -->
|
||||
<!-- <img src="/publish/images/content/kakao_template_img.png" alt=""> -->
|
||||
<!-- </div> -->
|
||||
<div class="kakao_image">
|
||||
<img src="/publish/images/content/kakao_template_img.png" alt="">
|
||||
</div>
|
||||
<p class="emphasis_side_text">강조표기 보조문구 미리보기</p>
|
||||
<p class="emphasis_title_text">타이틀 미리보기</p>
|
||||
<p class="template_text">내용미리보기</p>
|
||||
@ -901,13 +889,6 @@
|
||||
<p class="channel_info_text">채널 추가 안내 메시지 미리보기</p>
|
||||
<button type="button" class="btn_kakao_type">버튼명</button>
|
||||
<button type="button" class="btn_kakao_type">버튼명</button>
|
||||
<!-- <p class="emphasis_side_text">강조표기 보조문구 미리보기</p> -->
|
||||
<!-- <p class="emphasis_title_text">타이틀 미리보기</p> -->
|
||||
<!-- <p class="template_text">내용미리보기</p> -->
|
||||
<!-- <p class="side_info_text">부가정보내용</p> -->
|
||||
<!-- <p class="channel_info_text">채널 추가 안내 메시지 미리보기</p> -->
|
||||
<!-- <button type="button" class="btn_kakao_type">버튼명</button> -->
|
||||
<!-- <button type="button" class="btn_kakao_type">버튼명</button> -->
|
||||
</div>
|
||||
</div>
|
||||
<!-- //텍스트 미리보기 -->
|
||||
@ -923,7 +904,7 @@
|
||||
<div class="phoneIn">
|
||||
<div>
|
||||
<p class="prev_p"><img src="images/search.png"> 문자내용</p>
|
||||
<div class="text_length2 clearfix" style="display:none;">
|
||||
<div class="text_length2 clearfix">
|
||||
<span class="msg_com msg_short">단문</span>
|
||||
<div>
|
||||
<span>글자크기</span>
|
||||
@ -939,19 +920,17 @@
|
||||
<button type="button"><img src="images/content/font_minus.png"></button>
|
||||
</div>
|
||||
</div>
|
||||
<!--<div class="text_length2 clearfix">
|
||||
<div class="text_length2 clearfix" style="display:none;">
|
||||
<span class="msg_com msg_photo">포토</span>
|
||||
<ul class="photo_msg_num">
|
||||
<li onclick="imgClick(0);"><a href="#none">1</a></ li>
|
||||
<li onclick="imgClick(1);"><a href="#none">2</a></ li>
|
||||
<li onclick="imgClick(2);"><a href="#none">3</a></ li>
|
||||
</ul>
|
||||
<div>
|
||||
<span>글자크기</span>
|
||||
<button type="button"><img src="images/content/font_plus.png"></button>
|
||||
<button type="button"><img src="images/content/font_minus.png"></button>
|
||||
</div>
|
||||
</div>-->
|
||||
</div>
|
||||
<!-- 텍스트 미리보기 -->
|
||||
<div class="text_preview">
|
||||
<!--<div class="preiew_img">
|
||||
@ -967,8 +946,7 @@
|
||||
</div>-->
|
||||
<div class="preview_auto">
|
||||
<p class="ad_tit">(광고)</p>
|
||||
<p class="none_txt">내용을 입력해주세요.</p>
|
||||
<p class="realtime"></p>
|
||||
<p class="realtime">대체문자 내용 미리보기</p>
|
||||
<p class="deny_receipt">무료 거부 080-0000-0000</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@ -575,7 +575,7 @@
|
||||
<button type="button" onclick="" class="btnType btnType15"><i class="remove_img"></i>선택삭제</button>
|
||||
</div>
|
||||
<div class="table_btn_right">
|
||||
<button type="button" class="excel_btn btnType"><i class="downroad"></i>엑셀 다운로드</button>
|
||||
<button type="button" class="excel_btn btnType"><i class="downroad"></i>발송결과 리스트</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@ -638,8 +638,6 @@
|
||||
<div class="btn_right">
|
||||
<label for="" class="label">채널선택</label>
|
||||
<select name="" id="" class="selType2">
|
||||
<option value="">채널ID</option>
|
||||
<option value="">채널명</option>
|
||||
<option value="">내용</option>
|
||||
</select>
|
||||
<div class="search">
|
||||
@ -736,7 +734,24 @@
|
||||
<li class="tab"><button type="button">예약</button></li>
|
||||
</ul>
|
||||
<!--// tab button -->
|
||||
|
||||
<!-- 발송화면 개선 : 발송결과 추가-->
|
||||
<div class="tab_btnbox">
|
||||
<button type="button" class="btnType btnType14 check_validity">발송결과<i class="qmMark"></i></button>
|
||||
<div class="info_hover_cont send_hover_cont price_hover">
|
||||
<dl>
|
||||
<dt class="c_222">[<span>대기</span>]</dt>
|
||||
<dd>발송은 성공하였으며, 수신자측 통신사로부터 수신여부를 확인중인 상태 <br>
|
||||
<span>※ 예약발송의 경우 실발송 전까지는 “대기”로 표시</span>
|
||||
</dd>
|
||||
<dt class="c_002c9a">[<span>성공</span>]</dt>
|
||||
<dd>발송 및 수신이 완료된 상태</dd>
|
||||
<dt class="c_e40000">[<span>실패</span>]</dt>
|
||||
<dd class="last">결번, 일시정지, 전화번호 오류 등의 사유로 발송이
|
||||
불가한 상태</dd>
|
||||
</dl>
|
||||
</div>
|
||||
</div>
|
||||
<!--// 발송화면 개선 : 발송결과 추가-->
|
||||
</div>
|
||||
|
||||
<div class="table_cont current">
|
||||
@ -790,13 +805,13 @@
|
||||
<input type="button" class="sort sortBtn" id="sort_msgGroupCnt">
|
||||
</div>
|
||||
</th>
|
||||
<th colspan="3">카카오톡결과</th>
|
||||
<th rowspan="2">대기</th>
|
||||
<th colspan="2">카카오톡결과</th>
|
||||
<th colspan="2">대체문자결과</th>
|
||||
<th rowspan="2">금액(원)</th>
|
||||
<th rowspan="2">진행상황</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>대기</th>
|
||||
<th>성공</th>
|
||||
<th>실패</th>
|
||||
<th>성공</th>
|
||||
@ -820,9 +835,7 @@
|
||||
</div>
|
||||
</td>
|
||||
<td>0</td>
|
||||
<td>
|
||||
<p class="c_666">0</p>
|
||||
</td>
|
||||
<td>0</td>
|
||||
<td>
|
||||
<p class="c_002c9a">0</p>
|
||||
</td>
|
||||
@ -856,9 +869,7 @@
|
||||
</div>
|
||||
</td>
|
||||
<td>0</td>
|
||||
<td>
|
||||
<p class="c_666">0</p>
|
||||
</td>
|
||||
<td>0</td>
|
||||
<td>
|
||||
<p class="c_002c9a">0</p>
|
||||
</td>
|
||||
@ -887,9 +898,7 @@
|
||||
</div>
|
||||
</td>
|
||||
<td>458,002</td>
|
||||
<td>
|
||||
<p class="c_666">1</p>
|
||||
</td>
|
||||
<td>0</td>
|
||||
<td>
|
||||
<p class="c_002c9a">458,000</p>
|
||||
</td>
|
||||
@ -918,9 +927,7 @@
|
||||
</div>
|
||||
</td>
|
||||
<td>458,002</td>
|
||||
<td>
|
||||
<p class="c_666">1</p>
|
||||
</td>
|
||||
<td>0</td>
|
||||
<td>
|
||||
<p class="c_002c9a">458,000</p>
|
||||
</td>
|
||||
@ -938,7 +945,7 @@
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!--// 발송화면 개선 : 카카오톡 테이블 수정 -->
|
||||
|
||||
@ -947,7 +954,7 @@
|
||||
<button type="button" onclick="" class="btnType btnType15"><i class="remove_img"></i>선택삭제</button>
|
||||
</div>
|
||||
<div class="table_btn_right">
|
||||
<button type="button" class="excel_btn btnType"><i class="downroad"></i>엑셀 다운로드</button>
|
||||
<button type="button" class="excel_btn btnType"><i class="downroad"></i>발송결과 리스트</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user