Merge branch 'advc'

This commit is contained in:
hehihoho3@gmail.com 2025-03-04 09:46:18 +09:00
commit 0018554058
41 changed files with 3603 additions and 2262 deletions

View File

@ -3,6 +3,7 @@ package itn.com.cmm.util;
import java.text.ParseException; import java.text.ParseException;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.time.LocalDate; import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit; import java.time.temporal.ChronoUnit;
import java.util.Date; import java.util.Date;
@ -185,4 +186,20 @@ public final class DateUtils {
return isValid; return isValid;
} }
public static String setStrToDataFormatter(String str, String formatter) {
// 입력 문자열을 LocalDateTime으로 변환
DateTimeFormatter inputFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
LocalDateTime dateTime = LocalDateTime.parse(str, inputFormatter);
// 원하는 출력 포맷 적용
DateTimeFormatter outputFormatter = DateTimeFormatter.ofPattern(formatter);
String formattedDate = dateTime.format(outputFormatter);
return formattedDate;
}
} }

View File

@ -59,7 +59,6 @@ public final class FileUtil {
while ((read = fileInputStream.read(buffer)) != -1) { // 1024바이트씩 계속 읽으면서 outputStream에 저장, -1이 나오면 더이상 읽을 파일이 없음 while ((read = fileInputStream.read(buffer)) != -1) { // 1024바이트씩 계속 읽으면서 outputStream에 저장, -1이 나오면 더이상 읽을 파일이 없음
out.write(buffer, 0, read); out.write(buffer, 0, read);
} }
} catch (Exception e) { } catch (Exception e) {
throw new Exception("download error"); throw new Exception("download error");
} }

View File

@ -276,7 +276,6 @@ public final class MsgSendUtils {
for (Map.Entry<String, Function<MjonMsgSendVO, String>> entry : placeholders.entrySet()) { for (Map.Entry<String, Function<MjonMsgSendVO, String>> entry : placeholders.entrySet()) {
String placeholder = entry.getKey(); String placeholder = entry.getKey();
String value = entry.getValue().apply(sendVO); String value = entry.getValue().apply(sendVO);
System.out.println("");
// log.info(" + smsTxtTemp [{}]", smsTxtTemp); // log.info(" + smsTxtTemp [{}]", smsTxtTemp);
// log.info(" + placeholder [{}]", placeholder); // log.info(" + placeholder [{}]", placeholder);
// log.info(" + value [{}]", value); // log.info(" + value [{}]", value);

View File

@ -0,0 +1,32 @@
package itn.let.cmm.vo;
import java.io.Serializable;
import lombok.Getter;
import lombok.Setter;
/**
*
* @author : 이호영
* @fileName : FileInfoVO.java
* @date : 2025.01.17
* @description : 파일 경로에서 파일명만 가져와 ID 가져올때 사용하는 VO
* MjonMsgDetailSentVO 참고
* ===========================================================
* DATE AUTHOR NOTE
* ----------------------------------------------------------- *
* 2025.01.17 이호영 최초 생성
*
*
*
*/
@Getter
@Setter
public class FileInfoVO implements Serializable {
private static final long serialVersionUID = 1L;
private String atchFileId; // 첨부파일 ID
private String fileSn; // 파일 순번
}

View File

@ -498,7 +498,6 @@ public class KakaoSentController {
* 발송관리 엑셀다운로드 기능 - 카카오톡 * 발송관리 엑셀다운로드 기능 - 카카오톡
* @param searchVO * @param searchVO
* @param model * @param model
* @return "/web/mjon/msgsent/msgSentExcelDownLoadAjax.do"
* @throws Exception * @throws Exception
*/ */
@RequestMapping(value= {"/web/mjon/msgsent/kakaoSentExcelDownLoadAjax.do"}) @RequestMapping(value= {"/web/mjon/msgsent/kakaoSentExcelDownLoadAjax.do"})

View File

@ -109,4 +109,8 @@ public interface AddrService {
void deleteAddr_advc(AddrGroupVO addrGroupVO) throws Exception; void deleteAddr_advc(AddrGroupVO addrGroupVO) throws Exception;
int getAddrCount(AddrGroupVO addrGroupVO) throws Exception; int getAddrCount(AddrGroupVO addrGroupVO) throws Exception;
StatusResponse insertByAddrGrpDataAndAddrDataAjax(AddrVO addrVO) throws Exception;
StatusResponse deleteAddrNoDataAjax(AddrVO addrVO) throws Exception;
} }

View File

@ -292,5 +292,9 @@ public class AddrDAO extends EgovAbstractDAO {
return (Integer)select("AddrDAO.getAddrCount", addrVO); return (Integer)select("AddrDAO.getAddrCount", addrVO);
} }
public int deleteAddrPhoneNo(AddrVO addrVO) {
return update("AddrDAO.deleteAddrPhoneNo", addrVO);
}
} }

View File

@ -34,6 +34,8 @@ import itn.let.mjo.addr.service.AddrGroupVO;
import itn.let.mjo.addr.service.AddrService; import itn.let.mjo.addr.service.AddrService;
import itn.let.mjo.addr.service.AddrTransHistVO; import itn.let.mjo.addr.service.AddrTransHistVO;
import itn.let.mjo.addr.service.AddrVO; import itn.let.mjo.addr.service.AddrVO;
import itn.let.mjo.msgsent.service.MjonMsgSentVO;
import lombok.extern.slf4j.Slf4j;
/** /**
* 주소록 관리를 위한 서비스 구현 클래스 * 주소록 관리를 위한 서비스 구현 클래스
@ -49,6 +51,7 @@ import itn.let.mjo.addr.service.AddrVO;
* 2021.04.08 ITN 최초 생성 * 2021.04.08 ITN 최초 생성
* </pre> * </pre>
*/ */
@Slf4j
@Service("AddrService") @Service("AddrService")
public class AddrServiceImpl extends EgovAbstractServiceImpl implements AddrService { public class AddrServiceImpl extends EgovAbstractServiceImpl implements AddrService {
@ -645,4 +648,80 @@ public class AddrServiceImpl extends EgovAbstractServiceImpl implements AddrSer
return aa; return aa;
} }
@Override
public StatusResponse insertByAddrGrpDataAndAddrDataAjax(AddrVO addrVO) throws Exception {
String userId = addrVO.getMberId();
log.info("addrVO.getAddrGrpId() :: [{}]", addrVO.getAddrGrpId());
// 새로운 그룹 생성
if ("NEW".equals(addrVO.getAddrGrpId())) {
AddrGroupVO addrGroupVO = new AddrGroupVO();
addrGroupVO.setMberId(userId);
addrGroupVO.setAddrGrpNm(addrVO.getAddrGrpNm());
addrGroupVO.setFrstRegisterId(userId);
int usedCnt = addrGroupDAO.selectDuplAddrGroupCnt(addrGroupVO);
if(usedCnt > 0) {
return new StatusResponse(HttpStatus.BAD_REQUEST, "이미 등록되어있는 그룹이름입니다.", LocalDateTime.now());
}
int nextOrderNumber = addrGroupDAO.selectMaxOrderNumber(addrGroupVO);
addrGroupVO.setGrpOrder(nextOrderNumber);
String addrGrpIdTemp = addrGroupDAO.insertAddrGroup(addrGroupVO);
addrVO.setAddrGrpId(addrGrpIdTemp);
}
else if ("bookmark".equals(addrVO.getAddrGrpId()))
{// 자주 보내는 그룹
addrVO.setBookmark("Y");
addrVO.setAddrGrpId("0");
}
else
{
addrVO.setBookmark("N");
}
String bookmark = addrVO.getBookmark();
String addrGrpId = addrVO.getAddrGrpId();
List<AddrVO> addrDataInfo = new ArrayList<AddrVO>();
for(String phone : addrVO.getAddrPhones()) {
AddrVO addrTempVO = new AddrVO();
addrTempVO.setAddrPhoneNo(phone);
addrTempVO.setAddrGrpId(addrGrpId);
addrTempVO.setBookmark(bookmark);
addrTempVO.setFrstRegisterId(userId);
addrTempVO.setMberId(userId);
addrDataInfo.add(addrTempVO);
}
int resultCnt = addrDAO.insertAddrList(addrDataInfo);
return new StatusResponse(HttpStatus.OK, "" + resultCnt + "건의 주소록 등록이 완료되었습니다.", addrVO);
}
@Override
public StatusResponse deleteAddrNoDataAjax(AddrVO addrVO) throws Exception {
// AddrPhones
//아이디 저장
//주소록 디비에서 연락처 정보를 delete 시킴
int resultCnt = addrDAO.deleteAddrPhoneNo(addrVO);
return new StatusResponse(HttpStatus.OK, "" + resultCnt + "건의 주소록을 삭제하였습니다.", addrVO);
}
} }

View File

@ -4,6 +4,7 @@ import java.io.BufferedReader;
import java.io.InputStreamReader; import java.io.InputStreamReader;
import java.io.OutputStream; import java.io.OutputStream;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Calendar; import java.util.Calendar;
import java.util.Date; import java.util.Date;
@ -31,10 +32,13 @@ import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow; import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.ui.Model; import org.springframework.ui.Model;
import org.springframework.ui.ModelMap; import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.ResponseBody;
@ -52,12 +56,14 @@ import itn.com.cmm.util.RedirectUrlMaker;
import itn.com.cmm.util.StringUtil; import itn.com.cmm.util.StringUtil;
import itn.com.utl.fcc.service.EgovStringUtil; import itn.com.utl.fcc.service.EgovStringUtil;
import itn.let.fax.addr.service.FaxAddrVO; import itn.let.fax.addr.service.FaxAddrVO;
import itn.let.mail.service.StatusResponse;
import itn.let.mjo.addr.service.AddrGroupService; import itn.let.mjo.addr.service.AddrGroupService;
import itn.let.mjo.addr.service.AddrGroupVO; import itn.let.mjo.addr.service.AddrGroupVO;
import itn.let.mjo.addr.service.AddrService; import itn.let.mjo.addr.service.AddrService;
import itn.let.mjo.addr.service.AddrTransHistVO; import itn.let.mjo.addr.service.AddrTransHistVO;
import itn.let.mjo.addr.service.AddrVO; import itn.let.mjo.addr.service.AddrVO;
import itn.let.mjo.msgdata.service.PhoneVO; import itn.let.mjo.msgdata.service.PhoneVO;
import lombok.extern.slf4j.Slf4j;
/** /**
* 주소록 관한 controller 클래스를 정의한다. * 주소록 관한 controller 클래스를 정의한다.
@ -75,6 +81,7 @@ import itn.let.mjo.msgdata.service.PhoneVO;
* *
* </pre> * </pre>
*/ */
@Slf4j
@Controller @Controller
public class AddrController { public class AddrController {
@ -2224,6 +2231,47 @@ public class AddrController {
} }
@RequestMapping(value = {"/web/mjon/addr/insertByAddrGrpDataAndAddrDataAjax.do"})
public ResponseEntity<StatusResponse> insertByAddrGrpDataAndAddrDataAjax(@RequestBody AddrVO addrVO) throws Exception {
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("jsonView");
//로그인 권한정보 불러오기
LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
if(userId == null) {
if(StringUtils.isEmpty(userId)) return ResponseEntity.ok().body(new StatusResponse(HttpStatus.BAD_REQUEST, "로그인 후 이용해 주세요", LocalDateTime.now()));
}
addrVO.setMberId(userId);
return ResponseEntity.ok().body(addrService.insertByAddrGrpDataAndAddrDataAjax(addrVO));
}
@RequestMapping(value = {"/web/mjon/addr/deleteAddrNoDataAjax.do"})
public ResponseEntity<StatusResponse> deleteAddrNoDataAjax(@RequestBody AddrVO addrVO) throws Exception {
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("jsonView");
//로그인 권한정보 불러오기
LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
if(userId == null) {
if(StringUtils.isEmpty(userId)) return ResponseEntity.ok().body(new StatusResponse(HttpStatus.BAD_REQUEST, "로그인 후 이용해 주세요", LocalDateTime.now()));
}
addrVO.setMberId(userId);
return ResponseEntity.ok().body(addrService.deleteAddrNoDataAjax(addrVO));
}
public boolean getNameRepLenChk(String type, String value) { public boolean getNameRepLenChk(String type, String value) {

View File

@ -34,6 +34,7 @@ public class MjonMsgVO extends ComDefaultVO{
private String[] callToList; // '수신번호리스트', private String[] callToList; // '수신번호리스트',
private String callFrom; // '발신번호 (하이픈 등의 문자를 제외한 12byte이하의 숫자로 입력한다.)', private String callFrom; // '발신번호 (하이픈 등의 문자를 제외한 12byte이하의 숫자로 입력한다.)',
private String subject; // 'MMS용 메시지제목', private String subject; // 'MMS용 메시지제목',
private String subjectChkYn; // 'MMS용 메시지제목',
private String smsTxt; // 'SMS용 메시지본문', private String smsTxt; // 'SMS용 메시지본문',
private String smsTxtArea;//문자 작성 화면 본문 내용 private String smsTxtArea;//문자 작성 화면 본문 내용
private String msgType; // '메시지의 (4: SMS 전송, 5: URL 전송, 6: MMS전송, 7: BARCODE전송, 8: 카카오 알림톡 전송)', private String msgType; // '메시지의 (4: SMS 전송, 5: URL 전송, 6: MMS전송, 7: BARCODE전송, 8: 카카오 알림톡 전송)',

View File

@ -28,6 +28,7 @@ public class MjonMsgDataVO extends UserDefaultVO{
private List msgIdList; private List msgIdList;
private List msgSeqList; private List msgSeqList;
private String subject; private String subject;
private String subjectChkYn;
private String mmsSubject; private String mmsSubject;
private String smsTxt; private String smsTxt;
private String smsLen; private String smsLen;

View File

@ -4150,6 +4150,7 @@ public class MjonMsgDataServiceImpl extends EgovAbstractServiceImpl implements M
instTotalCnt += instCnt; instTotalCnt += instCnt;
this.insertMsgGroupDataTb_advc(instCnt, mjonMsgVO, groupedMsgList); this.insertMsgGroupDataTb_advc(instCnt, mjonMsgVO, groupedMsgList);
log.info(" :: group data insert :: ");
// 금액 포인트 insert // 금액 포인트 insert
priceAndPoint.insertCashAndPoint( priceAndPoint.insertCashAndPoint(

View File

@ -114,8 +114,9 @@ import itn.let.uss.umt.service.EgovUserManageService;
import itn.let.uss.umt.service.MberManageVO; import itn.let.uss.umt.service.MberManageVO;
import itn.let.uss.umt.service.UserManageVO; import itn.let.uss.umt.service.UserManageVO;
import itn.let.utl.sim.service.EgovClntInfo; import itn.let.utl.sim.service.EgovClntInfo;
import lombok.extern.slf4j.Slf4j;
@Slf4j
@Controller @Controller
public class MjonMsgDataController { public class MjonMsgDataController {
@ -816,6 +817,7 @@ public class MjonMsgDataController {
mjonMsgDataVO.setMsgSeqList(tempList); mjonMsgDataVO.setMsgSeqList(tempList);
log.info("===================================================");
List<MjonMsgVO> resultList = mjonMsgDataService.selectReSendMsgDataList(mjonMsgDataVO); List<MjonMsgVO> resultList = mjonMsgDataService.selectReSendMsgDataList(mjonMsgDataVO);
//문자발송 이미지 처리 - 사용하지 않아서 주석처리함. //문자발송 이미지 처리 - 사용하지 않아서 주석처리함.
@ -5961,7 +5963,6 @@ public class MjonMsgDataController {
* 발송관리 엑셀다운로드 기능 * 발송관리 엑셀다운로드 기능
* @param searchVO * @param searchVO
* @param model * @param model
* @return "/web/mjon/msgsent/msgSentExcelDownLoadAjax.do"
* @throws Exception * @throws Exception
*/ */
@RequestMapping(value= {"/web/mjon/msgdata/recieveCallToListExcelDownAjax.do"}) @RequestMapping(value= {"/web/mjon/msgdata/recieveCallToListExcelDownAjax.do"})

View File

@ -0,0 +1,64 @@
package itn.let.mjo.msgsent.service;
import java.util.List;
import itn.let.cmm.vo.FileInfoVO;
import itn.let.uss.umt.service.UserDefaultVO;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class MjonMsgDetailSentVO extends UserDefaultVO{
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 sentDate;
private String filePath1;
private String filePath2;
private String filePath3;
private String callTo;
private String statusTxt;
private String addrNm;
private String resultSValue;
private String resultFValue;
private String resultWValue;
private String successPct;
private String failedPct;
private String waitingPct;
private String statusCd; // 진행상태 코드
private String divideYN;
private String divideText;
private int diffMin;
private String totPrice;
// FileInfo 리스트 필드 추가
private List<FileInfoVO> fileInfos;
}

View File

@ -0,0 +1,33 @@
package itn.let.mjo.msgsent.service;
import java.io.Serializable;
import lombok.Getter;
import lombok.Setter;
/**
*
* @author : 이호영
* @fileName : MjonMsgSWFDTO.java
* @date : 2025.01.16
* @description : 그룹ID로 성공 실패 대기 건수를 구해서 전달해주는 DTO
* ===========================================================
* DATE AUTHOR NOTE
* ----------------------------------------------------------- *
* 2025.01.16 이호영 최초 생성
*
*
*
*/
@Getter
@Setter
public class MjonMsgSWFDTO implements Serializable {
private static final long serialVersionUID = 1L; // 선언
private int resultSValue; // 성공건수
private int resultFValue; // 실패건수
private int resultWValue; // 대기건수
private String divideYN; // 분할여부
}

View File

@ -1,6 +1,10 @@
package itn.let.mjo.msgsent.service; package itn.let.mjo.msgsent.service;
import java.io.IOException;
import java.util.List; import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletResponse;
import itn.let.fax.addr.service.FaxAddrGroupVO; import itn.let.fax.addr.service.FaxAddrGroupVO;
import itn.let.mjo.addr.service.AddrGroupVO; import itn.let.mjo.addr.service.AddrGroupVO;
@ -16,6 +20,8 @@ public interface MjonMsgSentService {
//발송 관리 전체 발송 리스트 불러오기 //발송 관리 전체 발송 리스트 불러오기
public List<MjonMsgSentVO> selectAllMsgSentList(MjonMsgSentVO mjonMsgSentVO) throws Exception; public List<MjonMsgSentVO> selectAllMsgSentList(MjonMsgSentVO mjonMsgSentVO) throws Exception;
public Map<String, Object> selectAllMsgSentList_advc(MjonMsgSentVO mjonMsgSentVO) throws Exception;
//발송 관리 전체 발송 리스트 불러오기 => 주소록 조인 제거버전 //발송 관리 전체 발송 리스트 불러오기 => 주소록 조인 제거버전
public List<MjonMsgSentVO> selectAllMsgSentSimpleList(MjonMsgSentVO mjonMsgSentVO) throws Exception; public List<MjonMsgSentVO> selectAllMsgSentSimpleList(MjonMsgSentVO mjonMsgSentVO) throws Exception;
@ -55,4 +61,13 @@ public interface MjonMsgSentService {
//첨부파일 정보 불러오기 //첨부파일 정보 불러오기
public MjonMsgSentVO selectFileInfo(String streFileId) throws Exception; public MjonMsgSentVO selectFileInfo(String streFileId) throws Exception;
public int countAllMsgSentList(MjonMsgSentVO mjonMsgSentVO);
public Map<String, Object> selectAllMsgSentDetailView(MjonMsgDetailSentVO mjonMsgDetailSentVO) throws Exception;
public List<MjonMsgDetailSentVO> findByMsgDetailListAjax(MjonMsgDetailSentVO mjonMsgDetailSentVO);
public void msgSentExcelDownLoad(MjonMsgSentVO mjonMsgSentVO, HttpServletResponse response) throws IOException, Exception;
} }

View File

@ -4,7 +4,17 @@ import java.util.Date;
import java.util.List; import java.util.List;
import itn.let.uss.umt.service.UserDefaultVO; import itn.let.uss.umt.service.UserDefaultVO;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
@Getter
@Setter
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class MjonMsgSentVO extends UserDefaultVO{ public class MjonMsgSentVO extends UserDefaultVO{
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
@ -16,8 +26,9 @@ public class MjonMsgSentVO extends UserDefaultVO{
private List msgGroupIdList; //문자 그룹아이디 리스트 private List msgGroupIdList; //문자 그룹아이디 리스트
private String smsTxt; //문자 내용 private String smsTxt; //문자 내용
private String subject; //문자 제목 private String subject; //문자 제목
private Date regdate; //문자 등록일자 private String subjectChkYn; //문자 제목
private Date reqdate; //문자 예약 발송 일자 private String regDate; //문자 등록일자
private String reqDate; //문자 예약 발송 일자
private String callFrom; //발신번호 private String callFrom; //발신번호
private String callTo; //수신자 번호 private String callTo; //수신자 번호
private List callToList; //수신자 번호 리스트 private List callToList; //수신자 번호 리스트
@ -86,399 +97,16 @@ public class MjonMsgSentVO extends UserDefaultVO{
private String successCount; private String successCount;
private String resultSValue; private String resultSValue;
private String resultFValue;
private String resultWValue;
private String resultWFValue; private String resultWFValue;
public String getSuccessCount() { private String divideYN; // 분할여부
return successCount;
}
public void setSuccessCount(String successCount) {
this.successCount = successCount;
}
public String getMsgSentType() {
return msgSentType;
}
public void setMsgSentType(String msgSentType) {
this.msgSentType = msgSentType;
}
public String getCallFromComma() {
return callFromComma;
}
public void setCallFromComma(String callFromComma) {
this.callFromComma = callFromComma;
}
public String getCallToComma() {
return callToComma;
}
public void setCallToComma(String callToComma) {
this.callToComma = callToComma;
}
public String getAtchFiles() { private String statusCd; // 진행상태 코드
return atchFiles;
}
public void setAtchFiles(String atchFiles) {
this.atchFiles = atchFiles;
}
public String getMsgId() { // 결과 리스트 select
return msgId; // TIMESTAMPDIFF(minute, DATE_FORMAT(B.REQ_DATE, '%Y-%m-%d %T'), DATE_FORMAT(NOW(), '%Y-%m-%d %T')) as diffMin
} private int diffMin;
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 getSendKind() {
return sendKind;
}
public void setSendKind(String sendKind) {
this.sendKind = sendKind;
}
public String getResultSValue() {
return resultSValue;
}
public void setResultSValue(String resultSValue) {
this.resultSValue = resultSValue;
}
public String getResultWFValue() {
return resultWFValue;
}
public void setResultWFValue(String resultWFValue) {
this.resultWFValue = resultWFValue;
}
public Date getDelayOrgTime() {
return delayOrgTime;
}
public void setDelayOrgTime(Date delayOrgTime) {
this.delayOrgTime = delayOrgTime;
}
} }

View File

@ -9,6 +9,8 @@ import egovframework.rte.psl.dataaccess.EgovAbstractDAO;
import itn.let.fax.addr.service.FaxAddrGroupVO; import itn.let.fax.addr.service.FaxAddrGroupVO;
import itn.let.mjo.addr.service.AddrGroupVO; import itn.let.mjo.addr.service.AddrGroupVO;
import itn.let.mjo.block.service.MjonBlockVO; import itn.let.mjo.block.service.MjonBlockVO;
import itn.let.mjo.msgsent.service.MjonMsgDetailSentVO;
import itn.let.mjo.msgsent.service.MjonMsgSWFDTO;
import itn.let.mjo.msgsent.service.MjonMsgSentVO; import itn.let.mjo.msgsent.service.MjonMsgSentVO;
@Repository("MjonMsgSentDAO") @Repository("MjonMsgSentDAO")
@ -56,6 +58,13 @@ public class MjonMsgSentDAO extends EgovAbstractDAO {
return (List<MjonMsgSentVO>) list("MjonMsgSentDAO.selectAllMsgSentList",mjonMsgSentVO); return (List<MjonMsgSentVO>) list("MjonMsgSentDAO.selectAllMsgSentList",mjonMsgSentVO);
} }
//발송 관리 전체 발송 리스트 불러오기
@SuppressWarnings("unchecked")
public List<MjonMsgSentVO> selectAllMsgSentList_advc(MjonMsgSentVO mjonMsgSentVO) throws Exception{
return (List<MjonMsgSentVO>) list("MjonMsgSentDAO.selectAllMsgSentList_advc",mjonMsgSentVO);
}
//발송 관리 전체 발송 리스트 불러오기 => 주소록 조인 제거버전 //발송 관리 전체 발송 리스트 불러오기 => 주소록 조인 제거버전
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public List<MjonMsgSentVO> selectAllMsgSentSimpleList(MjonMsgSentVO mjonMsgSentVO) throws Exception{ public List<MjonMsgSentVO> selectAllMsgSentSimpleList(MjonMsgSentVO mjonMsgSentVO) throws Exception{
@ -159,4 +168,27 @@ public class MjonMsgSentDAO extends EgovAbstractDAO {
return (MjonMsgSentVO) select("MjonMsgSentDAO.selectFileInfo", streFileId); return (MjonMsgSentVO) select("MjonMsgSentDAO.selectFileInfo", streFileId);
} }
public int countAllMsgSentList(MjonMsgSentVO mjonMsgSentVO) {
return (Integer)select("MjonMsgSentDAO.countAllMsgSentList", mjonMsgSentVO);
}
public MjonMsgSWFDTO findBySWF(String msgGroupId) {
return (MjonMsgSWFDTO) select("MjonMsgSentDAO.findBySWF", msgGroupId);
}
public MjonMsgDetailSentVO selectAllMsgSentDetailView(MjonMsgDetailSentVO mjonMsgDetailSentVO) {
// TODO Auto-generated method stub
return (MjonMsgDetailSentVO) select("MjonMsgSentDAO.selectAllMsgSentDetailView", mjonMsgDetailSentVO);
}
public List<MjonMsgDetailSentVO> findByMsgDetailListAjax(MjonMsgDetailSentVO mjonMsgDetailSentVO) {
return (List<MjonMsgDetailSentVO>) list("MjonMsgSentDAO.findByMsgDetailListAjax", mjonMsgDetailSentVO);
}
public List<String> findByReqDateWhereMsgGroupId(String msgGroupId) {
return (List<String>) list("MjonMsgSentDAO.findByReqDateWhereMsgGroupId", msgGroupId);
}
} }

View File

@ -1,20 +1,51 @@
package itn.let.mjo.msgsent.service.impl; package itn.let.mjo.msgsent.service.impl;
import java.io.OutputStream;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List; import java.util.List;
import java.util.Locale;
import java.util.Map;
import javax.annotation.Resource; import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.io.FilenameUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.ss.usermodel.BorderStyle;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.Font;
import org.apache.poi.ss.usermodel.HorizontalAlignment;
import org.apache.poi.ss.usermodel.IndexedColors;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.VerticalAlignment;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.xssf.streaming.SXSSFWorkbook;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl; import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl;
import egovframework.rte.fdl.idgnr.EgovIdGnrService; import egovframework.rte.fdl.idgnr.EgovIdGnrService;
import itn.com.cmm.util.StringUtil2;
import itn.let.cmm.vo.FileInfoVO;
import itn.let.fax.addr.service.FaxAddrGroupVO; import itn.let.fax.addr.service.FaxAddrGroupVO;
import itn.let.mjo.addr.service.AddrGroupVO; import itn.let.mjo.addr.service.AddrGroupVO;
import itn.let.mjo.block.service.MjonBlockVO; import itn.let.mjo.block.service.MjonBlockVO;
import itn.let.mjo.msgsent.service.MjonMsgDetailSentVO;
import itn.let.mjo.msgsent.service.MjonMsgSWFDTO;
import itn.let.mjo.msgsent.service.MjonMsgSentService; import itn.let.mjo.msgsent.service.MjonMsgSentService;
import itn.let.mjo.msgsent.service.MjonMsgSentVO; import itn.let.mjo.msgsent.service.MjonMsgSentVO;
import lombok.extern.slf4j.Slf4j;
@Slf4j
@Service("MjonMsgSentService") @Service("MjonMsgSentService")
public class MjonMsgSentServiceImpl extends EgovAbstractServiceImpl implements MjonMsgSentService{ public class MjonMsgSentServiceImpl extends EgovAbstractServiceImpl implements MjonMsgSentService{
@ -84,6 +115,204 @@ public class MjonMsgSentServiceImpl extends EgovAbstractServiceImpl implements
return resultList; return resultList;
} }
/**
* advc
* 이호영 20250121
* 발송 관리 전체 발송 리스트 불러오기
*/
public Map<String, Object> selectAllMsgSentList_advc(MjonMsgSentVO mjonMsgSentVO) throws Exception{
Map<String, Object> resultMap = new HashMap<String, Object>();
// 목록
List<MjonMsgSentVO> resultList = mjonMsgSentDAO.selectAllMsgSentList_advc(mjonMsgSentVO);
// groupID에 대한 결과건수(대기, 성공 실패) 분할건수를 가져옴
resultList = makeDetailFunction(resultList);
/*
* 진행상태 코드화
* */
resultList.stream().forEach(t->{
String code = getStatusCode(t);
t.setStatusCd(code);
});
resultList.stream().forEach(t->{
// 내용이 없고 이미지만 있을 경우
// 내용에 "이미지"표시
if("6".equals(t.getMsgType())
&& StringUtils.isEmpty(t.getSmsTxt())
&& !"0".equals(t.getFileCnt())
) {
t.setSmsTxt("이미지");
}
// 예약 취소일 대기건도 0으로 표시
if( t.getReserveCYn().equals(("Y")) ) {
t.setResultSValue("0");
t.setResultFValue("0");
t.setResultWValue("0");
}
});
// 카운트
int totalCnt = mjonMsgSentDAO.countAllMsgSentList(mjonMsgSentVO);
resultMap.put("resultList", resultList);
resultMap.put("totalCnt", totalCnt);
return resultMap;
}
public Map<String, Object> selectAllMsgSentDetailView(MjonMsgDetailSentVO mjonMsgDetailSentVO) throws Exception{
Map<String, Object> resultMap = new HashMap<String, Object>();
// 목록
MjonMsgDetailSentVO resultVO = mjonMsgSentDAO.selectAllMsgSentDetailView(mjonMsgDetailSentVO);
log.info(" + :: [{}]", resultVO.getSmsTxt());
// 성공 대기 실패 발송금액 분할여부
MjonMsgSentVO updatedVO = getDetailFunction(resultVO.getMsgGroupId(), resultVO.getEachPrice());
resultVO.setResultSValue(updatedVO.getResultSValue()); // 성공건수
resultVO.setResultWValue(updatedVO.getResultWValue()); // 대기건수
resultVO.setResultFValue(updatedVO.getResultFValue()); // 실패건수
resultVO.setTotPrice(updatedVO.getTotPrice()); // 발송 금액 (성공건수 * 개별금액)
resultVO.setDivideYN(updatedVO.getDivideYN()); // 분할 여부
// 퍼센트 계산 실행
Map<String, String> returnMap = calculatePercentages(resultVO);
resultVO.setSuccessPct(returnMap.get("successPct"));
resultVO.setWaitingPct(returnMap.get("waitingPct"));
resultVO.setFailedPct(returnMap.get("failedPct"));
// 진행상태 코드화
String statusCode = getStatusCode(MjonMsgSentVO.builder()
.reserveCYn(resultVO.getReserveCYn())
.reserveYn(resultVO.getReserveYn())
.msgGroupCnt(resultVO.getMsgGroupCnt())
.resultSValue(resultVO.getResultSValue())
.resultWValue(resultVO.getResultWValue())
.resultFValue(resultVO.getResultFValue())
.diffMin(resultVO.getDiffMin())
.build());
resultVO.setStatusCd(statusCode);
// 결과 출력
// log.info("성공률: [{}]", returnMap.get("successPct"));
// log.info("대기율: [{}]", returnMap.get("waitingPct"));
// log.info("실패율: [{}]", returnMap.get("failedPct"));
// 광고일떄 (광고) 줄바꿈+무료거부 0808800858 삭제
if("A".equals(resultVO.getMsgKind())) {
resultVO.setSmsTxt(resultVO.getSmsTxt().replace("(광고)", "")
.replaceAll("\\s*무료거부 0808800858", ""));
}
// 그림문자일 경우 그림정보 가져오기
if(StringUtils.isNotEmpty(resultVO.getFileCnt()) && Integer.parseInt(resultVO.getFileCnt()) > 0)
{
List<FileInfoVO> fileInfos = getFileInfo(resultVO);
resultVO.setFileInfos(fileInfos);
}
// 분할문자인 경우
if("Y".equals(resultVO.getDivideYN())) {
String divideText = calculateBatchInfo(resultVO);
resultVO.setDivideText(divideText);
}
resultMap.put("result", resultVO);
return resultMap;
}
private String calculateBatchInfo(MjonMsgDetailSentVO resultVO) {
String msgGroupId = resultVO.getMsgGroupId();
List<String> requestTimes = mjonMsgSentDAO.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);
}
private List<FileInfoVO> getFileInfo(MjonMsgDetailSentVO result) throws Exception {
List<FileInfoVO> fileInfos = new ArrayList<>();
// 파일 경로 필드들을 배열로 관리
String[] filePaths = { result.getFilePath1(), result.getFilePath2(), result.getFilePath3() };
for (String filePath : filePaths) {
if (filePath != null) {
// 파일 ID 추출
// 확장자 제외한 파일명
String fileId = FilenameUtils.getBaseName(filePath);
// 파일 정보 조회
MjonMsgSentVO info = mjonMsgSentDAO.selectFileInfo(fileId);
// FileInfo 객체 생성 추가
FileInfoVO fileInfo = new FileInfoVO();
fileInfo.setAtchFileId(info.getAtchFileId());
fileInfo.setFileSn(info.getFileSn());
fileInfos.add(fileInfo);
}
}
return fileInfos;
}
@Override
public int countAllMsgSentList(MjonMsgSentVO mjonMsgSentVO) {
return mjonMsgSentDAO.countAllMsgSentList(mjonMsgSentVO);
}
//발송 관리 전체 발송 리스트 불러오기 => 주소록 조인 제거버전 //발송 관리 전체 발송 리스트 불러오기 => 주소록 조인 제거버전
public List<MjonMsgSentVO> selectAllMsgSentSimpleList(MjonMsgSentVO mjonMsgSentVO) throws Exception{ public List<MjonMsgSentVO> selectAllMsgSentSimpleList(MjonMsgSentVO mjonMsgSentVO) throws Exception{
List<MjonMsgSentVO> resultList = new ArrayList<MjonMsgSentVO>(); List<MjonMsgSentVO> resultList = new ArrayList<MjonMsgSentVO>();
@ -243,4 +472,384 @@ public class MjonMsgSentServiceImpl extends EgovAbstractServiceImpl implements
public MjonMsgSentVO selectFileInfo(String streFileId) throws Exception { public MjonMsgSentVO selectFileInfo(String streFileId) throws Exception {
return mjonMsgSentDAO.selectFileInfo(streFileId); return mjonMsgSentDAO.selectFileInfo(streFileId);
} }
@Override
public List<MjonMsgDetailSentVO> findByMsgDetailListAjax(MjonMsgDetailSentVO mjonMsgDetailSentVO) {
List<MjonMsgDetailSentVO> list = mjonMsgSentDAO.findByMsgDetailListAjax(mjonMsgDetailSentVO);
list.stream().forEach(t->{
t.setCallTo(StringUtil2.formatPhone(t.getCallTo()));
});
return list;
}
public void msgSentExcelDownLoad(MjonMsgSentVO mjonMsgSentVO, HttpServletResponse response) throws Exception{
mjonMsgSentVO.setRecordCountPerPage(100000);
mjonMsgSentVO.setFirstIndex(0);
if(StringUtils.isEmpty(mjonMsgSentVO.getSearchSortOrd())) {
mjonMsgSentVO.setSearchSortOrd("desc");
mjonMsgSentVO.setSearchSortCnd("B.REQ_DATE");
}
//예약 관리 리스트 불러오기
List<MjonMsgSentVO> resultAllSentList = mjonMsgSentDAO.selectAllMsgSentList_advc(mjonMsgSentVO);
// long startTime = System.nanoTime(); // 시작 시간 측정
resultAllSentList = makeDetailFunction(resultAllSentList);
// long endTime = System.nanoTime(); // 끝난 시간 측정
// double executionTimeInSeconds = (endTime - startTime) / 1_000_000_000.0;
// System.out.println("Execution time: " + executionTimeInSeconds + " seconds");
SXSSFWorkbook workbook = null; // SXSSFWorkbook 변수 선언
try{
// Workbook 생성
workbook = new SXSSFWorkbook();
Sheet sheet = workbook.createSheet("발송 내역");
// 너비 설정
sheet.setColumnWidth(0, 3000); // 번호
sheet.setColumnWidth(1, 4000); // 발송일시
sheet.setColumnWidth(2, 5000); // 구분
sheet.setColumnWidth(3, 3000); // 형태
sheet.setColumnWidth(4, 10000); // 내용
sheet.setColumnWidth(5, 4000); // 발송건수
sheet.setColumnWidth(6, 3000); // 대기
sheet.setColumnWidth(7, 3000); // 성공
sheet.setColumnWidth(8, 3000); // 실패
sheet.setColumnWidth(9, 4000); // 금액
sheet.setColumnWidth(10, 5000); // 진행상황
// 헤더 스타일 설정
CellStyle headerStyle = workbook.createCellStyle();
headerStyle.setAlignment(HorizontalAlignment.CENTER);
headerStyle.setVerticalAlignment(VerticalAlignment.CENTER);
headerStyle.setBorderTop(BorderStyle.THIN);
headerStyle.setBorderBottom(BorderStyle.THIN);
headerStyle.setBorderLeft(BorderStyle.THIN);
headerStyle.setBorderRight(BorderStyle.THIN);
headerStyle.setTopBorderColor(IndexedColors.GREY_25_PERCENT.getIndex());
headerStyle.setBottomBorderColor(IndexedColors.GREY_25_PERCENT.getIndex());
headerStyle.setLeftBorderColor(IndexedColors.GREY_25_PERCENT.getIndex());
headerStyle.setRightBorderColor(IndexedColors.GREY_25_PERCENT.getIndex());
Font font = workbook.createFont();
font.setBold(true); // 글씨체 굵게
font.setFontHeightInPoints((short) 12); // 글씨 크기
headerStyle.setFont(font);
// 데이터 스타일 설정 (가운데 정렬)
CellStyle centerStyle = workbook.createCellStyle();
centerStyle.setAlignment(HorizontalAlignment.CENTER);
centerStyle.setVerticalAlignment(VerticalAlignment.CENTER);
centerStyle.setBorderTop(BorderStyle.THIN);
centerStyle.setBorderBottom(BorderStyle.THIN);
centerStyle.setBorderLeft(BorderStyle.THIN);
centerStyle.setBorderRight(BorderStyle.THIN);
centerStyle.setTopBorderColor(IndexedColors.GREY_25_PERCENT.getIndex());
centerStyle.setBottomBorderColor(IndexedColors.GREY_25_PERCENT.getIndex());
centerStyle.setLeftBorderColor(IndexedColors.GREY_25_PERCENT.getIndex());
centerStyle.setRightBorderColor(IndexedColors.GREY_25_PERCENT.getIndex());
// 번째 헤더 작성 (상단 병합)
Row headerRow = sheet.createRow(0);
// 번호 추가
Cell cell = headerRow.createCell(0);
cell.setCellValue("번호");
cell.setCellStyle(headerStyle);
sheet.addMergedRegion(new CellRangeAddress(0, 1, 0, 0)); // 번호 병합
// 구분 추가
cell = headerRow.createCell(1);
cell.setCellValue("발송일시");
cell.setCellStyle(headerStyle);
sheet.addMergedRegion(new CellRangeAddress(0, 1, 1, 1)); // 구분 병합
cell = headerRow.createCell(2);
cell.setCellValue("구분");
cell.setCellStyle(headerStyle);
sheet.addMergedRegion(new CellRangeAddress(0, 1, 2, 2)); // 발송일시 병합
cell = headerRow.createCell(3);
cell.setCellValue("형태");
cell.setCellStyle(headerStyle);
sheet.addMergedRegion(new CellRangeAddress(0, 1, 3, 3)); // 형태 병합
cell = headerRow.createCell(4);
cell.setCellValue("내용");
cell.setCellStyle(headerStyle);
sheet.addMergedRegion(new CellRangeAddress(0, 1, 4, 4)); // 내용 병합
cell = headerRow.createCell(5);
cell.setCellValue("발송건수");
cell.setCellStyle(headerStyle);
sheet.addMergedRegion(new CellRangeAddress(0, 1, 5, 5)); // 발송건수 병합
cell = headerRow.createCell(6);
cell.setCellValue("결과");
cell.setCellStyle(headerStyle);
sheet.addMergedRegion(new CellRangeAddress(0, 0, 6, 8)); // 결과 병합
cell = headerRow.createCell(9);
cell.setCellValue("금액(원)");
cell.setCellStyle(headerStyle);
sheet.addMergedRegion(new CellRangeAddress(0, 1, 9, 9)); // 금액() 병합
cell = headerRow.createCell(10);
cell.setCellValue("진행상황");
cell.setCellStyle(headerStyle);
sheet.addMergedRegion(new CellRangeAddress(0, 1, 10, 10)); // 진행상황 병합
// 번째 헤더 작성 (결과 하위 )
Row subHeaderRow = sheet.createRow(1);
String[] subHeaders = {"대기", "성공", "실패"};
for (int i = 0; i < subHeaders.length; i++) {
cell = subHeaderRow.createCell(6 + i); // 결과 시작점(6번 )부터 순차적으로 설정
cell.setCellValue(subHeaders[i]);
cell.setCellStyle(headerStyle);
}
// 샘플 데이터 추가
// Object[][] data = {
// {1, "2025-01-23 12:00", "web", "SMS", "테스트 메시지입니다.", 139, 1, 0, 12, "-", "진행중"}
// };
// Object[][] 변환
Object[][] data = new Object[resultAllSentList.size()][11]; // 11은 필드
for (int i = 0; i < resultAllSentList.size(); i++) {
MjonMsgSentVO vo = resultAllSentList.get(i);
data[i][0] = i+1;
data[i][1] = vo.getReqDate();
// SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
// data[i][1] = sdf.format(vo.getReqDate());
// log.info("엑셀에 넣을 데이터: [{}]", data[i][1]);
data[i][2] = "H".equals(vo.getSendKind()) ? "WEB" : "API";
String msgType="단문";
if ("6".equals(vo.getMsgType())) {
msgType = "0".equals(vo.getFileCnt()) ? "장문" : "그림";
}
data[i][3] = msgType;
String reserveTxt = "";
if("Y".equals(vo.getReserveYn())) {reserveTxt="[예약]";}
if("Y".equals(vo.getDivideYN())) {reserveTxt+="[분할]";}
data[i][4] = reserveTxt + (StringUtils.isEmpty(vo.getSmsTxt()) ? "-" : vo.getSmsTxt());
data[i][5] = vo.getMsgGroupCnt();
data[i][6] = vo.getResultWValue();
data[i][7] = vo.getResultSValue();
data[i][8] = vo.getResultFValue();
data[i][9] = vo.getTotPrice();
String statusTxt="진행중";
if ("Y".equals(vo.getReserveCYn())) {
statusTxt = "예약취소"; // 예약취소 코드
// } else if ("Y".equals(vo.getReserveYn()) && vo.getMsgGroupCnt().equals(vo.getResultWValue())) {
// statusTxt = "예약대기"; // 예약대기 코드 ( 예약취소 버튼 노출 )
} else if (vo.getMsgGroupCnt().equals(vo.getResultSValue()) || vo.getMsgGroupCnt().equals(vo.getResultFValue())) {
statusTxt = "완료"; // 완료 코드
}
data[i][10] = statusTxt;
}
int rowNum = 2; // 데이터 시작
for (Object[] rowData : data) {
Row row = sheet.createRow(rowNum++);
for (int col = 0; col < rowData.length; col++) {
cell = row.createCell(col);
// "내용" 열만 제외하고 가운데 정렬
if (col == 4) { // 내용
cell.setCellValue((String) rowData[col]);
} else if (rowData[col] instanceof String) {
cell.setCellValue((String) rowData[col]);
cell.setCellStyle(centerStyle);
} else if (rowData[col] instanceof Integer) {
cell.setCellValue((Integer) rowData[col]);
cell.setCellStyle(centerStyle);
}
}
}
// 파일 다운로드 응답 설정
String fileName ="발송결과_리스트"; // 저장 파일명
SimpleDateFormat mSimpleDateFormat = new SimpleDateFormat ( "yyyyMMdd_HHmmss", Locale.KOREA );
Date currentTime = new Date ();
String mTime = mSimpleDateFormat.format ( currentTime );
fileName = fileName+"("+mTime+")";
response.setHeader("Set-Cookie", "fileDownload=true; path=/");
response.setHeader("Content-Disposition", String.format("attachment; filename=\""+new String((fileName).getBytes("KSC5601"),"8859_1")+".xlsx"));
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
// 파일 출력
workbook.write(response.getOutputStream());
workbook.close();
} catch (Exception e) {
// 에러 처리 로직
response.setHeader("Set-Cookie", "fileDownload=false; path=/");
response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate");
response.setHeader("Content-Type", "text/html; charset=utf-8");
try (OutputStream out = response.getOutputStream()) {
byte[] data = "fail..".getBytes();
out.write(data, 0, data.length);
} catch (Exception ignore) {
ignore.printStackTrace();
}
} finally {
if (workbook != null) {
try {
workbook.dispose(); // SXSSFWorkbook 임시 파일 제거
workbook.close();
} catch (Exception ignore) {
ignore.printStackTrace();
}
}
}
}
/**
* @methodName : makeDetailFunction
* @author : 이호영
* @date : 2025.02.04
* @description : 발송결과 성공건수, 실패건수, 대기건수, 분할발송여부, 발송금액 구하기
* @param resultList
* @return
*/
private List<MjonMsgSentVO> makeDetailFunction(List<MjonMsgSentVO> resultList) {
resultList.stream().forEach(t->{
MjonMsgSentVO updatedVO = getDetailFunction(t.getMsgGroupId(), t.getEachPrice());
t.setResultSValue(updatedVO.getResultSValue());
t.setResultFValue(updatedVO.getResultFValue());
t.setResultWValue(updatedVO.getResultWValue());
t.setDivideYN(updatedVO.getDivideYN());
t.setTotPrice(updatedVO.getTotPrice());
});
return resultList;
}
private MjonMsgSentVO getDetailFunction(String p_msgGroupId, String p_eachPrice) {
MjonMsgSentVO returnVO = new MjonMsgSentVO();
MjonMsgSWFDTO mjonMsgSWFDTO = mjonMsgSentDAO.findBySWF(p_msgGroupId);
returnVO.setResultSValue(String.valueOf(mjonMsgSWFDTO.getResultSValue())); // 성공건수
returnVO.setResultFValue(String.valueOf(mjonMsgSWFDTO.getResultFValue())); // 실패건수
returnVO.setResultWValue(String.valueOf(mjonMsgSWFDTO.getResultWValue())); // 대기건수
returnVO.setDivideYN(mjonMsgSWFDTO.getDivideYN());
// TotPrice : 성공건수에 대한 금액 곱하기
BigDecimal eachPrice = new BigDecimal(p_eachPrice);
BigDecimal resultSValue = new BigDecimal(mjonMsgSWFDTO.getResultSValue());
BigDecimal totalPrice = eachPrice.multiply(resultSValue);
// 소수점 자리로 설정 (반올림)// 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에 설정
returnVO.setTotPrice("-");
} else {
// roundedTotalPrice 값이 0이 아닌 경우
// 반올림된 BigDecimal 값을 toPlainString() 사용하여 문자열로 변환 totPrice에 설정
// toPlainString(): 지수 표기법 없이 일반적인 문자열 형태로 반환
returnVO.setTotPrice(roundedTotalPrice.toPlainString());
}
// log.info(" + returnVO.getTotPrice() :: [{}]", returnVO.getTotPrice());
return returnVO;
}
private Map<String, String> calculatePercentages(MjonMsgDetailSentVO result) {
int total = Integer.parseInt(result.getMsgGroupCnt()); // 전체 건수
int success = Integer.parseInt(result.getResultSValue()); // 성공 건수
int waiting = Integer.parseInt(result.getResultWValue()); // 대기 건수
int failed = Integer.parseInt(result.getResultFValue()); // 실패 건수
// 퍼센트 계산 (0으로 나누는 경우 대비)
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%";
// 결과 맵에 저장
Map<String, String> percentages = new HashMap<>();
percentages.put("successPct", successPct);
percentages.put("waitingPct", waitingPct);
percentages.put("failedPct", failedPct);
return percentages;
}
// 공통코드 ITN057에 대한 코드화 진행
/*
* CODE_ID CODE CODE_NM CODE_DC
* ITN057 01 진행중 진행중
* ITN057 02 완료 완료출해야함
* ITN057 03 예약대기 예약대기(발송전) 버튼으로 노출해야함
* ITN057 04 - 예약취소 ( - 으로 노출 )
* */
private String getStatusCode(MjonMsgSentVO result) {
String returnCode;
if ("Y".equals(result.getReserveCYn())) {
returnCode = "04"; // 예약취소 코드
} else if (
"Y".equals(result.getReserveYn())
&& "N".equals(result.getReserveCYn())
&& result.getMsgGroupCnt().equals(result.getResultWValue())
&& result.getDiffMin() < -5 // 예약 시간이 5분 이상인 것들만
) {
returnCode = "03"; // 예약대기 코드 ( 예약취소 버튼 노출 )
} else if (result.getMsgGroupCnt().equals(result.getResultSValue())
|| result.getMsgGroupCnt().equals(result.getResultFValue())) {
returnCode = "02"; // 완료 코드
} else {
returnCode = "01"; // 진행중 코드
}
return returnCode;
}
} }

View File

@ -5,14 +5,17 @@ import java.text.SimpleDateFormat;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Calendar; import java.util.Calendar;
import java.util.Date; import java.util.Date;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Locale; import java.util.Locale;
import java.util.Map;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import javax.annotation.Resource; import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellStyle; import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.Font; import org.apache.poi.ss.usermodel.Font;
@ -22,6 +25,8 @@ import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.xssf.streaming.SXSSFWorkbook; import org.apache.poi.xssf.streaming.SXSSFWorkbook;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap; import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.ModelAttribute;
@ -38,16 +43,20 @@ import itn.com.cmm.service.EgovFileMngUtil;
import itn.com.cmm.util.DateUtils; import itn.com.cmm.util.DateUtils;
import itn.com.utl.fcc.service.EgovStringUtil; import itn.com.utl.fcc.service.EgovStringUtil;
import itn.let.kakao.user.sent.service.KakaoSentService; import itn.let.kakao.user.sent.service.KakaoSentService;
import itn.let.mail.service.StatusResponse;
import itn.let.mjo.addr.service.AddrGroupService; import itn.let.mjo.addr.service.AddrGroupService;
import itn.let.mjo.addr.service.AddrGroupVO; import itn.let.mjo.addr.service.AddrGroupVO;
import itn.let.mjo.addr.service.AddrService; import itn.let.mjo.addr.service.AddrService;
import itn.let.mjo.addr.service.AddrVO; import itn.let.mjo.addr.service.AddrVO;
import itn.let.mjo.apikey.service.ApiKeyMngService; import itn.let.mjo.apikey.service.ApiKeyMngService;
import itn.let.mjo.apikey.service.ApiKeyVO; import itn.let.mjo.apikey.service.ApiKeyVO;
import itn.let.mjo.msgsent.service.MjonMsgDetailSentVO;
import itn.let.mjo.msgsent.service.MjonMsgSentCntVO; import itn.let.mjo.msgsent.service.MjonMsgSentCntVO;
import itn.let.mjo.msgsent.service.MjonMsgSentService; import itn.let.mjo.msgsent.service.MjonMsgSentService;
import itn.let.mjo.msgsent.service.MjonMsgSentVO; import itn.let.mjo.msgsent.service.MjonMsgSentVO;
import lombok.extern.slf4j.Slf4j;
@Slf4j
@Controller @Controller
public class MjonMsgSentController { public class MjonMsgSentController {
@ -99,115 +108,10 @@ private static final Logger logger = LoggerFactory.getLogger(MjonMsgSentControll
return "redirect:/web/user/login/login.do"; return "redirect:/web/user/login/login.do";
} }
mjonMsgSentVO.setUserId(userId); // mjonMsgSentVO.setUserId(userId);
// ApiKeyVO apiKeyVO = new ApiKeyVO();
/* // apiKeyVO.setMberId(userId);
//전체 발송 건수 통계 불러오기 // model.addAttribute("appMgmt", apiKeyMngService.selectMberApiKeyChk(apiKeyVO) > 0 ? true : false);
mjonMsgSentVO.setMsgType("");
List<MjonMsgSentVO> totalMsgCnt = mjonMsgSentService.selectDetailMsgSentCnt(mjonMsgSentVO);
model.addAttribute("totalMsgCnt", totalMsgCnt);
//단문 성공건, 실패건 불러오기
mjonMsgSentVO.setMsgType("4");
List<MjonMsgSentVO> smsMsgCnt = mjonMsgSentService.selectDetailMsgSentCnt(mjonMsgSentVO);
model.addAttribute("smsMsgCnt", smsMsgCnt);
//장문 성공건, 실패건 불러오기
mjonMsgSentVO.setMsgType("6");
mjonMsgSentVO.setFileCnt("0");
List<MjonMsgSentVO> lmsMsgCnt = mjonMsgSentService.selectDetailMsgSentCnt(mjonMsgSentVO);
model.addAttribute("lmsMsgCnt", lmsMsgCnt);
//그림문자 성공건, 실패건 불러오기
mjonMsgSentVO.setMsgType("6");
mjonMsgSentVO.setFileCnt("1");
List<MjonMsgSentVO> mmsMsgCnt = mjonMsgSentService.selectDetailMsgSentCnt(mjonMsgSentVO);
model.addAttribute("mmsMsgCnt", mmsMsgCnt);
*/
/*
//전체 발송 건수 통계 불러오기
mjonMsgSentVO.setMsgType("");
List<MjonMsgSentVO> totalMsgCnt = mjonMsgSentService.selectDetailMsgSentCntMix(mjonMsgSentVO);
System.out.println("start");
// H:홈페이지, A:API sms, lms, mms 나누는 영역
List<MjonMsgSentVO> H_totalMsgCnt = totalMsgCnt.stream().filter(t -> "H".equals(t.getSendKind())).collect(Collectors.toList());
List<MjonMsgSentVO> H_smsMsgCnt = new ArrayList<MjonMsgSentVO>();
List<MjonMsgSentVO> H_lmsMsgCnt = new ArrayList<MjonMsgSentVO>();
List<MjonMsgSentVO> H_mmsMsgCnt = new ArrayList<MjonMsgSentVO>();
System.out.println("start");
List<MjonMsgSentVO> A_totalMsgCnt = totalMsgCnt.stream().filter(t -> "A".equals(t.getSendKind())).collect(Collectors.toList());
List<MjonMsgSentVO> A_smsMsgCnt = new ArrayList<MjonMsgSentVO>();
List<MjonMsgSentVO> A_lmsMsgCnt = new ArrayList<MjonMsgSentVO>();
List<MjonMsgSentVO> A_mmsMsgCnt = new ArrayList<MjonMsgSentVO>();
System.out.println(" ::H_totalMsgCnt :: "+ H_totalMsgCnt.size());
System.out.println(" ::A_totalMsgCnt :: "+ A_totalMsgCnt.size());
H_totalMsgCnt.forEach(t->{
if (Integer.parseInt(t.getFilePath1())>0) {
H_smsMsgCnt.add(t);
} else if (Integer.parseInt(t.getFilePath2())>0) {
H_lmsMsgCnt.add(t);
} else if (Integer.parseInt(t.getFilePath3())>0) {
H_mmsMsgCnt.add(t);
}
});
A_totalMsgCnt.forEach(t->{
if (Integer.parseInt(t.getFilePath1())>0) {
A_smsMsgCnt.add(t);
} else if (Integer.parseInt(t.getFilePath2())>0) {
A_lmsMsgCnt.add(t);
} else if (Integer.parseInt(t.getFilePath3())>0) {
A_mmsMsgCnt.add(t);
}
});
//* 홈페이지에서 보낸 데이터 LIST
//* SEND_KIND = "H"
// 전체 영역
model.addAttribute("H_allSentCntVO", this.getResultCntProc(H_totalMsgCnt));
// 전체 단문(SMS)
model.addAttribute("H_smsSentCntVO", this.getResultCntProc(H_smsMsgCnt));
// 전체 장문(LMS)
model.addAttribute("H_lmsSentCntVO", this.getResultCntProc(H_lmsMsgCnt));
// 전체 장문(LMS)
model.addAttribute("H_mmsSentCntVO", this.getResultCntProc(H_mmsMsgCnt));
// * 홈페이지에서 보낸 데이터 LIST
//* SEND_KIND = "A"
// 전체 영역
model.addAttribute("A_allSentCntVO", this.getResultCntProc(A_totalMsgCnt));
// 전체 단문(SMS)
model.addAttribute("A_smsSentCntVO", this.getResultCntProc(A_smsMsgCnt));
// 전체 장문(LMS)
model.addAttribute("A_lmsSentCntVO", this.getResultCntProc(A_lmsMsgCnt));
// 전체 장문(LMS)
model.addAttribute("A_mmsSentCntVO", this.getResultCntProc(A_mmsMsgCnt));
*/
/*<isEqual prepend="AND" property="searchCondition" compareValue="2">
a.mber_nm LIKE CONCAT('%',#searchKeyword#,'%')
</isEqual>
*/
ApiKeyVO apiKeyVO = new ApiKeyVO();
apiKeyVO.setMberId(userId);
model.addAttribute("appMgmt", apiKeyMngService.selectMberApiKeyChk(apiKeyVO) > 0 ? true : false);
@ -231,31 +135,24 @@ private static final Logger logger = LoggerFactory.getLogger(MjonMsgSentControll
} }
String startDate = mjonMsgSentVO.getStartDate(); // log.info(" + mjonMsgSentVO.getSearchStartDate() :: [{}]", mjonMsgSentVO.getSearchStartDate());
String endDate = mjonMsgSentVO.getEndDate(); // log.info(" + mjonMsgSentVO.getSearchStartDate() :: [{}]", mjonMsgSentVO.getSearchStartDate());
// log.info(" + mjonMsgSentVO.getSearchStartDate() :: [{}]", mjonMsgSentVO.getSearchStartDate());
// log.info(" + mjonMsgSentVO.getSearchStartDate() :: [{}]", mjonMsgSentVO.getSearchStartDate());
// log.info(" + mjonMsgSentVO.getSearchStartDate() :: [{}]", mjonMsgSentVO.getSearchStartDate());
String startDate = mjonMsgSentVO.getSearchStartDate();
String endDate = mjonMsgSentVO.getSearchEndDate();
if(startDate == null && endDate == null ) { if(StringUtils.isEmpty(startDate)
&& StringUtils.isEmpty(endDate))
{
mjonMsgSentVO.setSearchStartDate(DateUtils.getDateMonthsAgo(3));
// mjonMsgSentVO.setSearchEndDate(DateUtils.getCurrentDate());
// Calendar cal = Calendar.getInstance();
// Date now = new Date();
//
// SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd");
//
// //종료일은 오늘날짜
// cal.setTime(now);
// endDate = format.format(cal.getTime());
//
// //시작일은 전날로 셋팅
// cal.add(Calendar.DATE, -1);
// startDate = format.format(cal.getTime());
mjonMsgSentVO.setStartDate(DateUtils.getDateMonthsAgo(3));
mjonMsgSentVO.setEndDate(DateUtils.getCurrentDate());
} }
log.info("pageIndex :: [{}]", mjonMsgSentVO.getPageIndex());
model.addAttribute("searchKeyword", mjonMsgSentVO.getSearchKeyword()); model.addAttribute("searchKeyword", mjonMsgSentVO.getSearchKeyword());
model.addAttribute("mjonMsgSentVO", mjonMsgSentVO); model.addAttribute("mjonMsgSentVO", mjonMsgSentVO);
model.addAttribute("siteId", mjonMsgSentVO.getSiteId()); model.addAttribute("siteId", mjonMsgSentVO.getSiteId());
@ -263,6 +160,43 @@ private static final Logger logger = LoggerFactory.getLogger(MjonMsgSentControll
return "web/msgsent/MsgSentView"; return "web/msgsent/MsgSentView";
} }
/**
* 발송관리 화면
* @param searchVO
* @param model/web/user/login/login.do
* @return "/web/mjon/msgtxt/selectMsgTxtView.do"
* @throws Exception
*/
@RequestMapping(value= {"/web/mjon/msgsent/msgSentDetailView.do"})
public String selectMsgSentDetailView(@ModelAttribute("searchVO") MjonMsgDetailSentVO mjonMsgDetailSentVO
, 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";
}
Map<String, Object> resultMap = mjonMsgSentService.selectAllMsgSentDetailView(mjonMsgDetailSentVO);
model.addAttribute("result", resultMap.get("result"));
return "web/msgsent/MsgSentDetailView";
}
// 팩스 금일 발송통계 갱신
@RequestMapping(value= {"/web/mjon/msgsent/findByMsgDetailListAjax.do"})
public ResponseEntity<StatusResponse> findByMsgDetailListAjax(MjonMsgDetailSentVO mjonMsgDetailSentVO) throws Exception {
List<MjonMsgDetailSentVO> resultList = mjonMsgSentService.findByMsgDetailListAjax(mjonMsgDetailSentVO);
return ResponseEntity.ok().body(new StatusResponse(HttpStatus.OK, "", resultList));
}
/** /**
* 마이페이지 - 이용내역 - ajax * 마이페이지 - 이용내역 - ajax
* @param mjonMsgVO * @param mjonMsgVO
@ -275,7 +209,6 @@ private static final Logger logger = LoggerFactory.getLogger(MjonMsgSentControll
HttpServletRequest request, HttpServletRequest request,
ModelMap model) throws Exception{ ModelMap model) throws Exception{
System.out.println("MsgSentView_HA_allSentAjax");
LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser(); LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
@ -283,29 +216,24 @@ private static final Logger logger = LoggerFactory.getLogger(MjonMsgSentControll
mjonMsgSentVO.setUserId(userId); mjonMsgSentVO.setUserId(userId);
log.info("+ mjonMsgSentVO.getSearchStartDate() :: [{}]", mjonMsgSentVO.getSearchStartDate());
log.info("+ mjonMsgSentVO.getSearchEndDate() :: [{}]", mjonMsgSentVO.getSearchEndDate());
//전체 발송 건수 통계 불러오기 //전체 발송 건수 통계 불러오기
mjonMsgSentVO.setMsgType(""); mjonMsgSentVO.setMsgType("");
long startTime = System.nanoTime(); // 시작 시간 측정
List<MjonMsgSentVO> totalMsgCnt = mjonMsgSentService.selectDetailMsgSentCntMix(mjonMsgSentVO); List<MjonMsgSentVO> totalMsgCnt = mjonMsgSentService.selectDetailMsgSentCntMix(mjonMsgSentVO);
System.out.println("start"); long endTime = System.nanoTime(); // 종료 시간 측정
double executionTimeInSeconds = (endTime - startTime) / 1_000_000_000.0;
System.out.println("Execution time: " + executionTimeInSeconds + " seconds");
// H:홈페이지, A:API sms, lms, mms 나누는 영역 // H:홈페이지, A:API sms, lms, mms 나누는 영역
List<MjonMsgSentVO> H_totalMsgCnt = totalMsgCnt.stream().filter(t -> "H".equals(t.getSendKind())).collect(Collectors.toList());
List<MjonMsgSentVO> H_smsMsgCnt = new ArrayList<MjonMsgSentVO>(); List<MjonMsgSentVO> H_smsMsgCnt = new ArrayList<MjonMsgSentVO>();
List<MjonMsgSentVO> H_lmsMsgCnt = new ArrayList<MjonMsgSentVO>(); List<MjonMsgSentVO> H_lmsMsgCnt = new ArrayList<MjonMsgSentVO>();
List<MjonMsgSentVO> H_mmsMsgCnt = new ArrayList<MjonMsgSentVO>(); List<MjonMsgSentVO> H_mmsMsgCnt = new ArrayList<MjonMsgSentVO>();
System.out.println("start"); totalMsgCnt.forEach(t->{
List<MjonMsgSentVO> A_totalMsgCnt = totalMsgCnt.stream().filter(t -> "A".equals(t.getSendKind())).collect(Collectors.toList());
List<MjonMsgSentVO> A_smsMsgCnt = new ArrayList<MjonMsgSentVO>();
List<MjonMsgSentVO> A_lmsMsgCnt = new ArrayList<MjonMsgSentVO>();
List<MjonMsgSentVO> A_mmsMsgCnt = new ArrayList<MjonMsgSentVO>();
System.out.println(" ::H_totalMsgCnt :: "+ H_totalMsgCnt.size());
System.out.println(" ::A_totalMsgCnt :: "+ A_totalMsgCnt.size());
H_totalMsgCnt.forEach(t->{
if (Integer.parseInt(t.getFilePath1())>0) { if (Integer.parseInt(t.getFilePath1())>0) {
H_smsMsgCnt.add(t); H_smsMsgCnt.add(t);
} else if (Integer.parseInt(t.getFilePath2())>0) { } else if (Integer.parseInt(t.getFilePath2())>0) {
@ -315,60 +243,24 @@ private static final Logger logger = LoggerFactory.getLogger(MjonMsgSentControll
} }
}); });
A_totalMsgCnt.forEach(t->{
if (Integer.parseInt(t.getFilePath1())>0) {
A_smsMsgCnt.add(t);
} else if (Integer.parseInt(t.getFilePath2())>0) {
A_lmsMsgCnt.add(t);
} else if (Integer.parseInt(t.getFilePath3())>0) {
A_mmsMsgCnt.add(t);
}
});
//* 홈페이지에서 보낸 데이터 LIST //* 홈페이지에서 보낸 데이터 LIST
//* SEND_KIND = "H" //* SEND_KIND = "H"
// 전체 영역 // 전체 영역
model.addAttribute("H_allSentCntVO", this.getResultCntProc(H_totalMsgCnt)); log.info("all");
model.addAttribute("H_allSentCntVO", this.getResultCntProc(totalMsgCnt));
// 전체 단문(SMS) // 전체 단문(SMS)
log.info("sms");
model.addAttribute("H_smsSentCntVO", this.getResultCntProc(H_smsMsgCnt)); model.addAttribute("H_smsSentCntVO", this.getResultCntProc(H_smsMsgCnt));
// 전체 장문(LMS) // 전체 장문(LMS)
log.info("lms");
model.addAttribute("H_lmsSentCntVO", this.getResultCntProc(H_lmsMsgCnt)); model.addAttribute("H_lmsSentCntVO", this.getResultCntProc(H_lmsMsgCnt));
// 전체 장문(LMS) // 전체 그림(MMS)
log.info("mms");
model.addAttribute("H_mmsSentCntVO", this.getResultCntProc(H_mmsMsgCnt)); model.addAttribute("H_mmsSentCntVO", this.getResultCntProc(H_mmsMsgCnt));
// * 홈페이지에서 보낸 데이터 LIST
//* SEND_KIND = "A"
// 전체 영역
model.addAttribute("A_allSentCntVO", this.getResultCntProc(A_totalMsgCnt));
// 전체 단문(SMS)
model.addAttribute("A_smsSentCntVO", this.getResultCntProc(A_smsMsgCnt));
// 전체 장문(LMS)
model.addAttribute("A_lmsSentCntVO", this.getResultCntProc(A_lmsMsgCnt));
// 전체 장문(LMS)
model.addAttribute("A_mmsSentCntVO", this.getResultCntProc(A_mmsMsgCnt));
/*<isEqual prepend="AND" property="searchCondition" compareValue="2">
a.mber_nm LIKE CONCAT('%',#searchKeyword#,'%')
</isEqual>
*/
ApiKeyVO apiKeyVO = new ApiKeyVO();
apiKeyVO.setMberId(userId);
model.addAttribute("appMgmt", apiKeyMngService.selectMberApiKeyChk(apiKeyVO) > 0 ? true : false);
System.out.println("MsgSentView_HA_allSentAjax_end");
return "/web/msgsent/subcontent/MsgSentView_HA_allSentAjax"; return "/web/msgsent/subcontent/MsgSentView_HA_allSentAjax";
} }
@ -395,14 +287,17 @@ private static final Logger logger = LoggerFactory.getLogger(MjonMsgSentControll
cntVO.setWaitCnt(msgCnt.stream() cntVO.setWaitCnt(msgCnt.stream()
.filter(f->"W".equals(f.getMsgResultSts())) .filter(f->"W".equals(f.getMsgResultSts()))
.mapToInt(t -> Integer.parseInt(t.getMsgResultCnt())).sum()); .mapToInt(t -> Integer.parseInt(t.getMsgResultCnt())).sum());
log.info(" :: cntVO.getWaitCnt() :: [{}]", cntVO.getWaitCnt());
// 전체 성공 갯수 // 전체 성공 갯수
cntVO.setSuccCnt(msgCnt.stream() cntVO.setSuccCnt(msgCnt.stream()
.filter(f->"S".equals(f.getMsgResultSts())) .filter(f->"S".equals(f.getMsgResultSts()))
.mapToInt(t -> Integer.parseInt(t.getMsgResultCnt())).sum()); .mapToInt(t -> Integer.parseInt(t.getMsgResultCnt())).sum());
log.info(" :: cntVO.getSuccCnt() :: [{}]", cntVO.getSuccCnt());
// 전체 실패 갯수 // 전체 실패 갯수
cntVO.setFailCnt(msgCnt.stream() cntVO.setFailCnt(msgCnt.stream()
.filter(f->"F".equals(f.getMsgResultSts())) .filter(f->"F".equals(f.getMsgResultSts()))
.mapToInt(t -> Integer.parseInt(t.getMsgResultCnt())).sum()); .mapToInt(t -> Integer.parseInt(t.getMsgResultCnt())).sum());
log.info(" :: cntVO.getFailCnt() :: [{}]", cntVO.getFailCnt());
// 전체 갯수 구하기 // 전체 갯수 구하기
cntVO.setTotCnt(cntVO.getWaitCnt() + cntVO.getSuccCnt() + cntVO.getFailCnt()); cntVO.setTotCnt(cntVO.getWaitCnt() + cntVO.getSuccCnt() + cntVO.getFailCnt());
@ -421,6 +316,83 @@ private static final Logger logger = LoggerFactory.getLogger(MjonMsgSentControll
@RequestMapping(value= {"/web/mjon/msgsent/selectMsgSentListViewAjax.do"}) @RequestMapping(value= {"/web/mjon/msgsent/selectMsgSentListViewAjax.do"})
public String selectMsgSentListViewAjax(@ModelAttribute("searchVO") MjonMsgSentVO mjonMsgSentVO, ModelMap model) throws Exception{ public String selectMsgSentListViewAjax(@ModelAttribute("searchVO") MjonMsgSentVO mjonMsgSentVO, ModelMap model) throws Exception{
String pageUrl = "";
try {
log.info(" ListView pageIndex :: [{}]", mjonMsgSentVO.getPageIndex());
log.info(" ListView pageUnit :: [{}]", mjonMsgSentVO.getPageUnit());
//로그인 권한정보 불러오기
LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
mjonMsgSentVO.setUserId(userId);
// 검색 리스트 불러오기
// if(mjonMsgSentVO.getPageUnit() != 10) {
// mjonMsgSentVO.setPageUnit(mjonMsgSentVO.getPageUnit());
// }
//기본 내림차순 정렬
if(StringUtils.isEmpty(mjonMsgSentVO.getSearchSortOrd())) {
mjonMsgSentVO.setSearchSortOrd("desc");
mjonMsgSentVO.setSearchSortCnd("B.REQ_DATE");
}
//선택 정보 저장
//mjonResvMsgVO.setSearchMsgType(mjonResvMsgVO.getTabType());
/** pageing */
PaginationInfo paginationInfo = new PaginationInfo();
paginationInfo.setCurrentPageNo(mjonMsgSentVO.getPageIndex());
paginationInfo.setRecordCountPerPage(mjonMsgSentVO.getPageUnit());
paginationInfo.setPageSize(mjonMsgSentVO.getPageSize());
mjonMsgSentVO.setFirstIndex(paginationInfo.getFirstRecordIndex());
mjonMsgSentVO.setLastIndex(paginationInfo.getLastRecordIndex());
mjonMsgSentVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());
if(!DateUtils.dateChkAndValueChk(mjonMsgSentVO.getSearchStartDate(),mjonMsgSentVO.getSearchEndDate(), 3 )) {
mjonMsgSentVO.setSearchStartDate(DateUtils.getDateMonthsAgo(3));
mjonMsgSentVO.setSearchEndDate(DateUtils.getCurrentDate());
};
model.addAttribute("searchStartDate", mjonMsgSentVO.getSearchStartDate());
model.addAttribute("searchEndDate", mjonMsgSentVO.getSearchEndDate());
//전체 발송 리스트 불러오기
Map<String, Object> resultMap = mjonMsgSentService.selectAllMsgSentList_advc(mjonMsgSentVO);
model.addAttribute("resultAllSentList", resultMap.get("resultList"));
paginationInfo.setTotalRecordCount((Integer)resultMap.get("totalCnt"));
model.addAttribute("paginationInfo", paginationInfo);
model.addAttribute("totalRecordCount", paginationInfo.getTotalRecordCount());
model.addAttribute("mjonMsgSentVO", mjonMsgSentVO);
String stateType = mjonMsgSentVO.getStateType();
} catch (Exception e) {
e.printStackTrace();
// TODO: handle exception
}
return "web/msgsent/MsgSentAllListAjax";
}
@RequestMapping(value= {"/web/mjon/msgsent/selectMsgSentListViewAjax_backup.do"})
public String selectMsgSentListViewAjax_backup(@ModelAttribute("searchVO") MjonMsgSentVO mjonMsgSentVO, ModelMap model) throws Exception{
//로그인 권한정보 불러오기 //로그인 권한정보 불러오기
LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
@ -470,6 +442,8 @@ private static final Logger logger = LoggerFactory.getLogger(MjonMsgSentControll
//전체 발송 리스트 불러오기 //전체 발송 리스트 불러오기
List<MjonMsgSentVO> resultAllSentList = mjonMsgSentService.selectAllMsgSentList(mjonMsgSentVO); List<MjonMsgSentVO> resultAllSentList = mjonMsgSentService.selectAllMsgSentList(mjonMsgSentVO);
model.addAttribute("resultAllSentList", resultAllSentList); model.addAttribute("resultAllSentList", resultAllSentList);
model.addAttribute("resultAllSentCnt", resultAllSentList.size()); model.addAttribute("resultAllSentCnt", resultAllSentList.size());
@ -482,13 +456,16 @@ private static final Logger logger = LoggerFactory.getLogger(MjonMsgSentControll
List<MjonMsgSentVO> resultMsgSucFailList = new ArrayList<MjonMsgSentVO>(); List<MjonMsgSentVO> resultMsgSucFailList = new ArrayList<MjonMsgSentVO>();
if(resultAllSentList.size() > 0) { if(resultAllSentList.size() > 0) {
System.out.println("=====resultMsgSucFailList=====");
resultMsgSucFailList = mjonMsgSentService.selectAllMsgSentSucFailList(resultAllSentList, mjonMsgSentVO); resultMsgSucFailList = mjonMsgSentService.selectAllMsgSentSucFailList(resultAllSentList, mjonMsgSentVO);
System.out.println("//=====resultMsgSucFailList=====");
} }
model.addAttribute("resultMsgSucFailList", resultMsgSucFailList); model.addAttribute("resultMsgSucFailList", resultMsgSucFailList);
model.addAttribute("mjonMsgSentVO", mjonMsgSentVO); model.addAttribute("mjonMsgSentVO", mjonMsgSentVO);
String stateType = mjonMsgSentVO.getStateType(); String stateType = mjonMsgSentVO.getStateType();
// String pageUrl = "web/msgsent/MsgSentAllListAjax";
String pageUrl = "web/msgsent/MsgSentAllListAjax"; String pageUrl = "web/msgsent/MsgSentAllListAjax";
if(stateType.equals("ready")) { if(stateType.equals("ready")) {
@ -504,6 +481,8 @@ private static final Logger logger = LoggerFactory.getLogger(MjonMsgSentControll
pageUrl = "web/msgsent/MsgSentFailListAjax"; pageUrl = "web/msgsent/MsgSentFailListAjax";
} }
log.info(" :: pageUrl [{}]", pageUrl);
return pageUrl; return pageUrl;
} }
@ -622,6 +601,9 @@ private static final Logger logger = LoggerFactory.getLogger(MjonMsgSentControll
return "web/msgsent/MsgSentDetailPopAjax"; return "web/msgsent/MsgSentDetailPopAjax";
} }
/** /**
* 발송관리 문자 상세보기 내용 * 발송관리 문자 상세보기 내용
* @param searchVO * @param searchVO
@ -1138,320 +1120,9 @@ private static final Logger logger = LoggerFactory.getLogger(MjonMsgSentControll
} }
String stateType = mjonMsgSentVO.getStateType();
String tabType = mjonMsgSentVO.getTabType();
// 메모리에 100개의 행을 유지합니다. 행의 수가 넘으면 디스크에 적습니다. mjonMsgSentService.msgSentExcelDownLoad(mjonMsgSentVO, response);
SXSSFWorkbook wb = new SXSSFWorkbook(100);
String fileName ="발송관리 엑셀 리스트"; // 저장 파일명
String sheetTitle = "문자 발송 내역" ; // 제목
Sheet sheet = wb.createSheet(sheetTitle);
Cell cell = null;
Row row = null;
CellStyle style = wb.createCellStyle();
style.setBorderBottom(CellStyle.BORDER_THIN); //테두리 두껍게
style.setBorderLeft(CellStyle.BORDER_THIN);
style.setBorderRight(CellStyle.BORDER_THIN);
style.setBorderTop(CellStyle.BORDER_THIN);
// 정렬
style.setAlignment(CellStyle.ALIGN_CENTER); //가운데 정렬
style.setVerticalAlignment(CellStyle.VERTICAL_CENTER); //높이 가운데 정렬
Font font = wb.createFont();
font.setBoldweight(Font.BOLDWEIGHT_BOLD); //글씨 bold
String type = "";
String fCnt = "";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
try{
mjonMsgSentVO.setRecordCountPerPage(100000);
mjonMsgSentVO.setFirstIndex(0);
if("".equals(mjonMsgSentVO.getSearchSortCnd())){ //최초조회시 최신것 조회List
mjonMsgSentVO.setSearchSortCnd("regdate");
mjonMsgSentVO.setSearchSortOrd("desc");
}
//예약 관리 리스트 불러오기
List<MjonMsgSentVO> resultAllSentList = mjonMsgSentService.selectAllMsgSentList(mjonMsgSentVO);
{//화면 리스트
row = sheet.createRow(0);
sheet.setColumnWidth(1, 5000); // 발송일시 칼럼의 조절
sheet.setColumnWidth(3, 10000); // 내용 칼럼의 조절
sheet.setColumnWidth(4, 5000); // 받는사람 이름 칼럼의 조절
sheet.setColumnWidth(5, 5000); // 받는사람 연락처 칼럼의 조절
sheet.setColumnWidth(6, 5000); // 발신번호 칼럼의 조절
sheet.setColumnWidth(7, 5000); // 발송상태 칼럼의 조절
sheet.setColumnWidth(8, 5000); // 발송건수 칼럼의 조절
//셀병합 처리
sheet.addMergedRegion(new CellRangeAddress(0,1,0,0)); //번호 세로 셀병합
sheet.addMergedRegion(new CellRangeAddress(0,1,1,1)); //발송일시 세로 셀병합
sheet.addMergedRegion(new CellRangeAddress(0,1,2,2)); //형태 세로 셀병합
sheet.addMergedRegion(new CellRangeAddress(0,1,3,3)); //내용 세로 셀병합
sheet.addMergedRegion(new CellRangeAddress(0,1,4,4)); //받는사람 이름 셀병합
sheet.addMergedRegion(new CellRangeAddress(0,1,5,5)); //받는사람 연락처 셀병합
sheet.addMergedRegion(new CellRangeAddress(0,1,6,6)); //발신번호 세로 셀병합
sheet.addMergedRegion(new CellRangeAddress(0,1,7,7)); //발송상태 세로 셀병합
sheet.addMergedRegion(new CellRangeAddress(0,1,8,8)); //발송건수 세로 셀병합
cell = row.createCell(0);
cell.setCellValue("번호");
cell.setCellStyle(style);
cell = row.createCell(1);
cell.setCellValue("발송일시");
cell.setCellStyle(style);
cell = row.createCell(2);
cell.setCellValue("형태");
cell.setCellStyle(style);
cell = row.createCell(3);
cell.setCellValue("내용");
cell.setCellStyle(style);
cell = row.createCell(4);
cell.setCellValue("수신자");
cell.setCellStyle(style);
cell = row.createCell(5);
cell.setCellValue("수신번호");
cell.setCellStyle(style);
cell = row.createCell(6);
cell.setCellValue("발신번호");
cell.setCellStyle(style);
cell = row.createCell(7);
cell.setCellValue("발송상태");
cell.setCellStyle(style);
cell = row.createCell(8);
cell.setCellValue("발송건수");
cell.setCellStyle(style);
cell = row.createCell(9);
cell.setCellValue("발송결과");
sheet.addMergedRegion(new CellRangeAddress(0,0,9,10)); // 발송결과 건수 가로 셀병합
cell.setCellStyle(style);
cell = row.createCell(10);
cell.setCellStyle(style);
cell = row.createCell(11);
cell.setCellValue("금액");
sheet.addMergedRegion(new CellRangeAddress(0,0,11,12)); // 발송결과 건수 가로 셀병합
cell.setCellStyle(style);
cell = row.createCell(12);
cell.setCellValue("예약취소");
cell.setCellStyle(style);
row = sheet.createRow(1);
cell = row.createCell(0);
cell.setCellStyle(style);
cell = row.createCell(1);
cell.setCellStyle(style);
cell = row.createCell(2);
cell.setCellStyle(style);
cell = row.createCell(3);
cell.setCellStyle(style);
cell = row.createCell(4);
cell.setCellStyle(style);
cell = row.createCell(5);
cell.setCellStyle(style);
cell = row.createCell(6);
cell.setCellStyle(style);
cell = row.createCell(7);
cell.setCellStyle(style);
cell = row.createCell(8);
cell.setCellStyle(style);
cell = row.createCell(9);
cell.setCellValue("성공");
cell.setCellStyle(style);
cell = row.createCell(10);
cell.setCellValue("실패/대기");
cell.setCellStyle(style);
cell = row.createCell(11);
cell.setCellValue("과금");
cell.setCellStyle(style);
cell = row.createCell(12);
cell.setCellValue("비과금");
cell.setCellStyle(style);
}
for(int i=0; i < resultAllSentList.size(); i++) {
String msgType = "단문";
if(resultAllSentList.get(i).getMsgType().equals("6") && resultAllSentList.get(i).getFileCnt().equals("0")) {
msgType = "장문";
}else if(resultAllSentList.get(i).getMsgType().equals("6") && !resultAllSentList.get(i).getFileCnt().equals("0")) {
msgType = "그림";
}
int excelLen = 0;
row = sheet.createRow(i+2);
excelLen = 12;
for(int j=0 ; j <= excelLen ; j++) {
cell = row.createCell(j);
cell.setCellStyle(style);
if(j==0) cell.setCellValue(i+1); //번호
if(j==1) cell.setCellValue(sdf.format((resultAllSentList.get(i)).getReqdate())); //발송일자
if(j==2) {
type = resultAllSentList.get(i).getMsgType();
fCnt = resultAllSentList.get(i).getFileCnt();
if(type.equals("4")) {
cell.setCellValue("단문"); //형태
}else {
if(fCnt.equals("0")) {
cell.setCellValue("장문"); //형태
}else {
cell.setCellValue("그림"); //형태
}
}
}
if(j==3) cell.setCellValue((resultAllSentList.get(i)).getSmsTxt()); //내용
if(j==4) cell.setCellValue((resultAllSentList.get(i)).getAddrNm());
if(j==5) cell.setCellValue((resultAllSentList.get(i)).getCallToComma());
if(j==6) cell.setCellValue((resultAllSentList.get(i)).getCallFromComma()); //발신번호
if(j==7) { //발송상태 처리해주기
String resvCYn = resultAllSentList.get(i).getReserveCYn();
String curState = resultAllSentList.get(i).getCurState();
if(resvCYn.equals("Y")) {
cell.setCellValue("예약 취소"); //발송상태
}else {
if(curState.equals("0")) {
cell.setCellValue("발송 대기"); //발송상태
}else if(curState.equals("1")) {
cell.setCellValue("발송중"); //발송상태
}else if(curState.equals("2")) {
cell.setCellValue("결과 대기"); //발송상태
}else if(curState.equals("3")) {
cell.setCellValue("발송 완료"); //발송상태
}
}
}
if(j==8) cell.setCellValue((resultAllSentList.get(i)).getMsgGroupCnt()); //발송건수
//발송결과 성공, 실패 처리
int resSucCnt = 0;
int resFailCnt = 0;
double resSucPrice = 0;
double resFailPirce = 0;
double eachPrice = Float.parseFloat(resultAllSentList.get(i).getEachPrice());
int resultSValue = 0;
int resultWFValue = 0;
if(resultAllSentList.get(i).getResultSValue() != null) {
resultSValue = Integer.parseInt(resultAllSentList.get(i).getResultSValue());
}else {
resultSValue = 1;
}
if(resultAllSentList.get(i).getResultWFValue() != null) {
resultWFValue = Integer.parseInt(resultAllSentList.get(i).getResultWFValue());
}else {
resultWFValue = 1;
}
if("S".equals(resultAllSentList.get(i).getMsgResult())) {
resSucCnt = resultSValue;
} else {
resFailCnt = resultWFValue;
}
resSucPrice = eachPrice * resSucCnt;
resFailPirce = eachPrice * resFailCnt;
if(j==9) cell.setCellValue(resSucCnt); //발송결과 성공
if(j==10) cell.setCellValue(resFailCnt); //발송결과 실패
if(j==11) cell.setCellValue(resSucPrice); // 과금 금액
if(j==12) cell.setCellValue(resFailPirce); //비과금 금액
}
}
response.setHeader("Set-Cookie", "fileDownload=true; path=/");
SimpleDateFormat mSimpleDateFormat = new SimpleDateFormat ( "yyyyMMdd_HHmmss", Locale.KOREA );
Date currentTime = new Date ();
String mTime = mSimpleDateFormat.format ( currentTime );
fileName = fileName+"("+mTime+")";
response.setHeader("Content-Disposition", String.format("attachment; filename=\""+new String((fileName).getBytes("KSC5601"),"8859_1")+".xlsx"));
wb.write(response.getOutputStream());
}catch(Exception e) {
response.setHeader("Set-Cookie", "fileDownload=false; path=/");
response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate");
response.setHeader("Content-Type","text/html; charset=utf-8");
OutputStream out = null;
try {
out = response.getOutputStream();
byte[] data = new String("fail..").getBytes();
out.write(data, 0, data.length);
} catch(Exception ignore) {
ignore.printStackTrace();
} finally {
if(out != null) try { out.close(); } catch(Exception ignore) {}
}
}finally {
// 디스크 적었던 임시파일을 제거합니다.
wb.dispose();
try { wb.close(); } catch(Exception ignore) {}
}
} }

View File

@ -341,6 +341,7 @@ public class MjonReservMsgServiceImpl extends EgovAbstractServiceImpl implements
} }
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace();
System.out.println("++++++++++++++++++++++ 예약문자 취소 deleteReservMsgCancelDataAjax Service Imple Error !!! " + e); System.out.println("++++++++++++++++++++++ 예약문자 취소 deleteReservMsgCancelDataAjax Service Imple Error !!! " + e);
} }

View File

@ -610,6 +610,7 @@ public class MjonReservMsgController {
ModelAndView modelAndView = new ModelAndView(); ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("jsonView"); modelAndView.setViewName("jsonView");
try {
//로그인 권한정보 불러오기 //로그인 권한정보 불러오기
LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
@ -643,6 +644,11 @@ public class MjonReservMsgController {
} }
} catch (Exception e) {
e.printStackTrace();
// TODO: handle exception
}
return modelAndView; return modelAndView;
} }

View File

@ -4,6 +4,9 @@ import java.io.Serializable;
import org.apache.commons.lang3.builder.ToStringBuilder; import org.apache.commons.lang3.builder.ToStringBuilder;
import lombok.Getter;
import lombok.Setter;
/** /**
* 사용자정보 VO클래스로서일반회원, 기업회원, 업무사용자의 비지니스로직 처리시 기타조건성 항을 구성한다. * 사용자정보 VO클래스로서일반회원, 기업회원, 업무사용자의 비지니스로직 처리시 기타조건성 항을 구성한다.
* @author 공통서비스 개발팀 조재영 * @author 공통서비스 개발팀 조재영
@ -21,6 +24,8 @@ import org.apache.commons.lang3.builder.ToStringBuilder;
* *
* </pre> * </pre>
*/ */
@Getter
@Setter
public class UserDefaultVO implements Serializable { public class UserDefaultVO implements Serializable {
/** /**
@ -34,9 +39,19 @@ public class UserDefaultVO implements Serializable {
/** 검색조건-성별 (0, M, F)*/ /** 검색조건-성별 (0, M, F)*/
private String searchSexdstn = "0"; private String searchSexdstn = "0";
/** 검색조건 */ /**
* 검색조건
* 20250122 이호영
* 개선은 검색조건을 아래 세개만 사용하려고
* */
private String searchCondition ; private String searchCondition ;
private String searchCondition01 ;
private String searchCondition02 ;
/** 검색조건 - 기존 */
// private String searchCondition ;
private String searchCondition_01 ; private String searchCondition_01 ;
private String searchConditionSite ; private String searchConditionSite ;
@ -173,45 +188,6 @@ public class UserDefaultVO implements Serializable {
private String searchDeleteType; private String searchDeleteType;
public String getSearchDeleteType() {
return searchDeleteType;
}
public void setSearchDeleteType(String searchDeleteType) {
this.searchDeleteType = searchDeleteType;
}
public String getSearchHotlineAgentCode() {
return searchHotlineAgentCode;
}
public void setSearchHotlineAgentCode(String searchHotlineAgentCode) {
this.searchHotlineAgentCode = searchHotlineAgentCode;
}
public String getSearchExceptSpamYn() {
return searchExceptSpamYn;
}
public void setSearchExceptSpamYn(String searchExceptSpamYn) {
this.searchExceptSpamYn = searchExceptSpamYn;
}
public String getSearchSmishingYn() {
return searchSmishingYn;
}
public void setSearchSmishingYn(String searchSmishingYn) {
this.searchSmishingYn = searchSmishingYn;
}
public String getSearchDeptPrePayment() {
return searchDeptPrePayment;
}
public void setSearchDeptPrePayment(String searchDeptPrePayment) {
this.searchDeptPrePayment = searchDeptPrePayment;
}
private String searchAdminSmsNoticeYn; private String searchAdminSmsNoticeYn;
@ -224,570 +200,5 @@ public class UserDefaultVO implements Serializable {
private String searchThrDptCategoryCode; //3뎁스(하위카테고리) 검색 private String searchThrDptCategoryCode; //3뎁스(하위카테고리) 검색
public String getEditMode() {
return editMode;
}
public void setEditMode(String editMode) {
this.editMode = editMode;
}
public String getSearchSmsSalePrice() {
return searchSmsSalePrice;
}
public void setSearchSmsSalePrice(String searchSmsSalePrice) {
this.searchSmsSalePrice = searchSmsSalePrice;
}
public String getSearchAdminSmsNoticeYn() {
return searchAdminSmsNoticeYn;
}
public void setSearchAdminSmsNoticeYn(String searchAdminSmsNoticeYn) {
this.searchAdminSmsNoticeYn = searchAdminSmsNoticeYn;
}
public String getSearchDept() {
return searchDept;
}
public void setSearchDept(String searchDept) {
this.searchDept = searchDept;
}
public String getAuthorCode() {
return authorCode;
}
public void setAuthorCode(String authorCode) {
this.authorCode = authorCode;
}
public String getSearchCategoryCode() {
return searchCategoryCode;
}
public void setSearchCategoryCode(String searchCategoryCode) {
this.searchCategoryCode = searchCategoryCode;
}
public String getSearchKeywordFrom() {
return searchKeywordFrom;
}
public void setSearchKeywordFrom(String searchKeywordFrom) {
this.searchKeywordFrom = searchKeywordFrom;
}
public String getSearchKeywordTo() {
return searchKeywordTo;
}
public void setSearchKeywordTo(String searchKeywordTo) {
this.searchKeywordTo = searchKeywordTo;
}
public String getFrstRegistPnttm() {
return frstRegistPnttm;
}
public void setFrstRegistPnttm(String frstRegistPnttm) {
this.frstRegistPnttm = frstRegistPnttm;
}
public String getFrstRegisterId() {
return frstRegisterId;
}
public void setFrstRegisterId(String frstRegisterId) {
this.frstRegisterId = frstRegisterId;
}
public String getLastUpdtPnttm() {
return lastUpdtPnttm;
}
public void setLastUpdtPnttm(String lastUpdtPnttm) {
this.lastUpdtPnttm = lastUpdtPnttm;
}
public String getLastUpdusrId() {
return lastUpdusrId;
}
public void setLastUpdusrId(String lastUpdusrId) {
this.lastUpdusrId = lastUpdusrId;
}
public int getTotCnt() {
return totCnt;
}
public void setTotCnt(int totCnt) {
this.totCnt = totCnt;
}
public String getUserTotailCount() {
return userTotailCount;
}
public void setUserTotailCount(String userTotailCount) {
this.userTotailCount = userTotailCount;
}
public String getUserNewCount() {
return userNewCount;
}
public void setUserNewCount(String userNewCount) {
this.userNewCount = userNewCount;
}
public String getUserDeleteCount() {
return userDeleteCount;
}
public void setUserDeleteCount(String userDeleteCount) {
this.userDeleteCount = userDeleteCount;
}
public String getUserNewBlock() {
return userNewBlock;
}
public void setUserNewBlock(String userNewBlock) {
this.userNewBlock = userNewBlock;
}
public String getSnsSiteId() {
return snsSiteId;
}
public void setSnsSiteId(String snsSiteId) {
this.snsSiteId = snsSiteId;
}
public String getSnsSiteName() {
return snsSiteName;
}
public void setSnsSiteName(String snsSiteName) {
this.snsSiteName = snsSiteName;
}
public String getSnsSite() {
return snsSite;
}
public void setSnsSite(String snsSite) {
this.snsSite = snsSite;
}
public String getSnsId() {
return snsId;
}
public void setSnsId(String snsId) {
this.snsId = snsId;
}
public String getSnsEmail() {
return snsEmail;
}
public void setSnsEmail(String snsEmail) {
this.snsEmail = snsEmail;
}
public static long getSerialversionuid() {
return serialVersionUID;
}
/**
* sbscrbSttus attribute 값을 리턴한다.
* @return String
*/
public String getSbscrbSttus() {
return sbscrbSttus;
}
/**
* sbscrbSttus attribute 값을 설정한다.
* @param sbscrbSttus String
*/
public void setSbscrbSttus(String sbscrbSttus) {
this.sbscrbSttus = sbscrbSttus;
}
/**
* searchCondition attribute 값을 리턴한다.
* @return String
*/
public String getSearchCondition() {
return searchCondition;
}
/**
* searchCondition attribute 값을 설정한다.
* @param searchCondition String
*/
public void setSearchCondition(String searchCondition) {
this.searchCondition = searchCondition;
}
/**
* searchKeyword attribute 값을 리턴한다.
* @return String
*/
public String getSearchKeyword() {
return searchKeyword;
}
/**
* searchKeyword attribute 값을 설정한다.
* @param searchKeyword String
*/
public void setSearchKeyword(String searchKeyword) {
this.searchKeyword = searchKeyword;
}
/**
* searchUseYn attribute 값을 리턴한다.
* @return String
*/
public String getSearchUseYn() {
return searchUseYn;
}
/**
* searchUseYn attribute 값을 설정한다.
* @param searchUseYn String
*/
public void setSearchUseYn(String searchUseYn) {
this.searchUseYn = searchUseYn;
}
/**
* pageIndex attribute 값을 리턴한다.
* @return int
*/
public int getPageIndex() {
return pageIndex;
}
/**
* pageIndex attribute 값을 설정한다.
* @param pageIndex int
*/
public void setPageIndex(int pageIndex) {
this.pageIndex = pageIndex;
}
/**
* pageUnit attribute 값을 리턴한다.
* @return int
*/
public int getPageUnit() {
return pageUnit;
}
/**
* pageUnit attribute 값을 설정한다.
* @param pageUnit int
*/
public void setPageUnit(int pageUnit) {
this.pageUnit = pageUnit;
}
/**
* pageSize attribute 값을 리턴한다.
* @return int
*/
public int getPageSize() {
return pageSize;
}
/**
* pageSize attribute 값을 설정한다.
* @param pageSize int
*/
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
/**
* firstIndex attribute 값을 리턴한다.
* @return int
*/
public int getFirstIndex() {
return firstIndex;
}
/**
* firstIndex attribute 값을 설정한다.
* @param firstIndex int
*/
public void setFirstIndex(int firstIndex) {
this.firstIndex = firstIndex;
}
/**
* lastIndex attribute 값을 리턴한다.
* @return int
*/
public int getLastIndex() {
return lastIndex;
}
/**
* lastIndex attribute 값을 설정한다.
* @param lastIndex int
*/
public void setLastIndex(int lastIndex) {
this.lastIndex = lastIndex;
}
/**
* recordCountPerPage attribute 값을 리턴한다.
* @return int
*/
public int getRecordCountPerPage() {
return recordCountPerPage;
}
/**
* recordCountPerPage attribute 값을 설정한다.
* @param recordCountPerPage int
*/
public void setRecordCountPerPage(int recordCountPerPage) {
this.recordCountPerPage = recordCountPerPage;
}
/*성별조건 검색*/
public String getSearchSexdstn() {
return searchSexdstn;
}
public void setSearchSexdstn(String searchSexdstn) {
this.searchSexdstn = searchSexdstn;
}
/**
* toString 메소드를 대치한다.
*/
public String toString() {
return ToStringBuilder.reflectionToString(this);
}
public String getSiteId() {
return siteId;
}
public void setSiteId(String siteId) {
this.siteId = siteId;
}
public String getSearchConditionSite() {
return searchConditionSite;
}
public void setSearchConditionSite(String searchConditionSite) {
this.searchConditionSite = searchConditionSite;
}
public String getAdminYn() {
return adminYn;
}
public void setAdminYn(String adminYn) {
this.adminYn = adminYn;
}
public String getGnrlUser() {
return gnrlUser;
}
public void setGnrlUser(String gnrlUser) {
this.gnrlUser = gnrlUser;
}
public String getEmplyrSttusCode() {
return emplyrSttusCode;
}
public void setEmplyrSttusCode(String emplyrSttusCode) {
this.emplyrSttusCode = emplyrSttusCode;
}
public String[] getEsntlIdNsttusCode() {
return esntlIdNsttusCode;
}
public void setEsntlIdNsttusCode(String[] esntlIdNsttusCode) {
this.esntlIdNsttusCode = esntlIdNsttusCode;
}
public String getEmplyrId() {
return emplyrId;
}
public void setEmplyrId(String emplyrId) {
this.emplyrId = emplyrId;
}
public String getSearchCondition_01() {
return searchCondition_01;
}
public void setSearchCondition_01(String searchCondition_01) {
this.searchCondition_01 = searchCondition_01;
}
public String getSearchSortCnd() {
return searchSortCnd;
}
public void setSearchSortCnd(String searchSortCnd) {
this.searchSortCnd = searchSortCnd;
}
public String getSearchSortOrd() {
return searchSortOrd;
}
public void setSearchSortOrd(String searchSortOrd) {
this.searchSortOrd = searchSortOrd;
}
public String getNiceFailUrl() {
return niceFailUrl;
}
public void setNiceFailUrl(String niceFailUrl) {
this.niceFailUrl = niceFailUrl;
}
public String getNiceSuccUrl() {
return niceSuccUrl;
}
public void setNiceSuccUrl(String niceSuccUrl) {
this.niceSuccUrl = niceSuccUrl;
}
public boolean isMobile() {
return isMobile;
}
public void setMobile(boolean isMobile) {
this.isMobile = isMobile;
}
public String getNiceMessage() {
return niceMessage;
}
public void setNiceMessage(String niceMessage) {
this.niceMessage = niceMessage;
}
public String getNiceNm() {
return niceNm;
}
public void setNiceNm(String niceNm) {
this.niceNm = niceNm;
}
public String getMblDn() {
return mblDn;
}
public void setMblDn(String mblDn) {
this.mblDn = mblDn;
}
public String getMberSttus() {
return mberSttus;
}
public void setMberSttus(String mberSttus) {
this.mberSttus = mberSttus;
}
public String getSearchStartDate() {
return searchStartDate;
}
public void setSearchStartDate(String searchStartDate) {
this.searchStartDate = searchStartDate;
}
public String getSearchEndDate() {
return searchEndDate;
}
public void setSearchEndDate(String searchEndDate) {
this.searchEndDate = searchEndDate;
}
public String getCandidateYn() {
return candidateYn;
}
public void setCandidateYn(String candidateYn) {
this.candidateYn = candidateYn;
}
public String getSearchBestCategory() {
return searchBestCategory;
}
public void setSearchBestCategory(String searchBestCategory) {
this.searchBestCategory = searchBestCategory;
}
public String getSearchDiv() {
return searchDiv;
}
public void setSearchDiv(String searchDiv) {
this.searchDiv = searchDiv;
}
public String getSearchTwoDptCategoryCode() {
return searchTwoDptCategoryCode;
}
public void setSearchTwoDptCategoryCode(String searchTwoDptCategoryCode) {
this.searchTwoDptCategoryCode = searchTwoDptCategoryCode;
}
public String getSearchThrDptCategoryCode() {
return searchThrDptCategoryCode;
}
public void setSearchThrDptCategoryCode(String searchThrDptCategoryCode) {
this.searchThrDptCategoryCode = searchThrDptCategoryCode;
}
public String getSearchStartDate2() {
return searchStartDate2;
}
public void setSearchStartDate2(String searchStartDate2) {
this.searchStartDate2 = searchStartDate2;
}
public String getSearchEndDate2() {
return searchEndDate2;
}
public void setSearchEndDate2(String searchEndDate2) {
this.searchEndDate2 = searchEndDate2;
}
} }

View File

@ -933,7 +933,7 @@
</select> </select>
<insert id="AddrDAO.insertAddrList" parameterClass="java.util.List"> <update id="AddrDAO.insertAddrList" parameterClass="java.util.List">
/* AddrDAO.insertAddrList */ /* AddrDAO.insertAddrList */
INSERT INTO MJ_ADDR INSERT INTO MJ_ADDR
( (
@ -967,7 +967,18 @@
) )
</iterate> </iterate>
</insert> </update>
<update id="AddrDAO.deleteAddrPhoneNo" parameterClass="addrVO">
DELETE FROM MJ_ADDR
WHERE MBER_ID = #mberId#
<iterate prepend="AND ADDR_PHONE_NO IN" open="(" close=")" conjunction="," property="addrPhones">
#addrPhones[]#
</iterate>
</update>
<!-- 주소록 그룹명 중복확인 --> <!-- 주소록 그룹명 중복확인 -->
<select id="AddrDAO.selectDuplAddrCnt" parameterClass="addrVO" resultClass="int"> <select id="AddrDAO.selectDuplAddrCnt" parameterClass="addrVO" resultClass="int">

View File

@ -2319,7 +2319,8 @@
EVENT_YN, EVENT_YN,
DELAY_YN, DELAY_YN,
AT_DELAY_YN, AT_DELAY_YN,
BIZ_KAKAO_RESEND_ORGNL_TXT BIZ_KAKAO_RESEND_ORGNL_TXT,
SUBJECT_CHK_YN
) )
VALUES VALUES
@ -2345,7 +2346,8 @@
#eventYn#, #eventYn#,
#delayYn#, #delayYn#,
#atDelayYn#, #atDelayYn#,
#kakaoSubMagOrgnlTxt# #kakaoSubMagOrgnlTxt#,
#subjectChkYn#
) )
</insert> </insert>
@ -3307,10 +3309,16 @@
, ( , (
<include refid="MjonMsgSentDAO.selectAgentWithKakaoResultQuery_A"/> <include refid="MjonMsgSentDAO.selectAgentWithKakaoResultQuery_A"/>
) AS RESULT ) AS RESULT
<include refid="MjonMsgSentDAO.selectJoinQuery"/> from
MJ_MSG_DATA A ,
MJ_MSG_GROUP_DATA B
where
A.MSG_GROUP_ID = B.MSG_GROUP_ID
/*and IFNULL(B.DEL_FLAG, 'N') = 'N'*/
/*and A.DEL_FLAG = 'N'*/
AND A.USER_ID = #userId# AND A.USER_ID = #userId#
AND B.USER_ID = #userId# AND B.USER_ID = #userId#
AND B.RESERVE_C_YN = 'N' /*AND B.RESERVE_C_YN = 'N'*/
ORDER BY 1=1 ORDER BY 1=1
, msgGroupId DESC , msgGroupId DESC
, sentDate DESC , sentDate DESC
@ -4021,6 +4029,8 @@
<select id="MjonMsgDataDAO.selectReSendMsgDataList" parameterClass="mjonMsgDataVO" resultClass="mjonMsgVO"> <select id="MjonMsgDataDAO.selectReSendMsgDataList" parameterClass="mjonMsgDataVO" resultClass="mjonMsgVO">
/* MjonMsgDataDAO.selectReSendMsgDataList */
SELECT MSG_ID AS msgId, SELECT MSG_ID AS msgId,
USER_ID AS userId, USER_ID AS userId,
USERDATA AS msgSeq, USERDATA AS msgSeq,
@ -7895,6 +7905,7 @@
SELECT SELECT
CALL_FROM AS callFrom CALL_FROM AS callFrom
, SUBJECT AS subject , SUBJECT AS subject
, SUBJECT_CHK_YN AS subjectChkYn
, SMS_TXT AS smsTxt , SMS_TXT AS smsTxt
,( ,(
SELECT SELECT
@ -7936,6 +7947,7 @@
</select> </select>
<select id="MjonMsgDataDAO.selectMjMsgListByResend" parameterClass="mjonMsgDataVO" resultClass="mjonMsgDataVO"> <select id="MjonMsgDataDAO.selectMjMsgListByResend" parameterClass="mjonMsgDataVO" resultClass="mjonMsgDataVO">
/* MjonMsgDataDAO.selectMjMsgListByResend */
SELECT SELECT
CALL_TO AS callTo CALL_TO AS callTo
FROM MJ_MSG_DATA FROM MJ_MSG_DATA

View File

@ -3,8 +3,10 @@
========= ======= ================================================= ========= ======= =================================================
2021.06.21 우영두 2021.06.21 우영두
--> -->
<!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.com//DTD SQL Map 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-2.dtd">
<sqlMap namespace="Msg"> <sqlMap namespace="Msg">
<typeAlias alias="mjonMsgSWFDTO" type="itn.let.mjo.msgsent.service.MjonMsgSWFDTO"/>
<typeAlias alias="mjonMsgDetailSentVO" type="itn.let.mjo.msgsent.service.MjonMsgDetailSentVO"/>
<typeAlias alias="mjonMsgSentVO" type="itn.let.mjo.msgsent.service.MjonMsgSentVO"/> <typeAlias alias="mjonMsgSentVO" type="itn.let.mjo.msgsent.service.MjonMsgSentVO"/>
<typeAlias alias="mjonMsgVO" type="itn.let.mjo.msg.service.MjonMsgVO"/> <typeAlias alias="mjonMsgVO" type="itn.let.mjo.msg.service.MjonMsgVO"/>
<typeAlias alias="addrGroupVO" type="itn.let.mjo.addr.service.AddrGroupVO"/> <typeAlias alias="addrGroupVO" type="itn.let.mjo.addr.service.AddrGroupVO"/>
@ -46,8 +48,8 @@
,'01','00') AS tab2 ,'01','00') AS tab2
, if (A.MSG_TYPE= '6' AND B.MSG_TYPE= '6' AND B.FILE_CNT > '0' , if (A.MSG_TYPE= '6' AND B.MSG_TYPE= '6' AND B.FILE_CNT > '0'
,'01','00') AS tab3 ,'01','00') AS tab3
<include refid="MjonMsgSentDAO.selectJoinQuery"/> <include refid="MjonMsgSentDAO.selectJoinQuery"/>
AND A.USER_ID = #userId# AND A.USER_ID = #userId#
AND B.USER_ID = #userId# AND B.USER_ID = #userId#
<isNotEmpty property="ntceBgnde"> <isNotEmpty property="ntceBgnde">
@ -60,10 +62,6 @@
<isEmpty property="msgType"> <isEmpty property="msgType">
AND A.MSG_TYPE IN ('4','6') AND A.MSG_TYPE IN ('4','6')
</isEmpty> </isEmpty>
AND B.RESERVE_C_YN = 'N'
<![CDATA[
AND B.REQ_DATE <= DATE_ADD(NOW(), INTERVAL 60 MINUTE)
]]>
<isNotEmpty property="fileCnt"> <isNotEmpty property="fileCnt">
<isEqual property="fileCnt" compareValue="0"> <isEqual property="fileCnt" compareValue="0">
AND B.FILE_CNT = '0' AND B.FILE_CNT = '0'
@ -72,6 +70,16 @@
<![CDATA[ AND B.FILE_CNT > '0' ]]> <![CDATA[ AND B.FILE_CNT > '0' ]]>
</isNotEqual> </isNotEqual>
</isNotEmpty> </isNotEmpty>
<isNotEmpty property="searchStartDate">
<![CDATA[
AND DATE_FORMAT(B.REGDATE, '%Y-%m-%d') >= DATE_FORMAT(#searchStartDate#, '%Y-%m-%d')
]]>
</isNotEmpty>
<isNotEmpty property="searchEndDate">
<![CDATA[
AND DATE_FORMAT(B.REGDATE, '%Y-%m-%d') <= DATE_FORMAT(#searchEndDate#, '%Y-%m-%d')
]]>
</isNotEmpty>
) A0 ) A0
GROUP BY GROUP BY
A0.MSG_GROUP_ID A0.MSG_GROUP_ID
@ -222,6 +230,290 @@
</select> </select>
<!-- 전체 발송결과 조회 (전송사별) 카운트-->
<select id="MjonMsgSentDAO.countAllMsgSentList" parameterClass="mjonMsgSentVO" resultClass="int">
select
COUNT(DISTINCT B.MSG_GROUP_ID) as totalGroupCount
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.USER_ID = #userId#
<isNotEmpty property="searchKeyword">
<isEqual property="searchCondition" compareValue="1" >
AND B.SUBJECT LIKE CONCAT('%', #searchKeyword#, '%')
</isEqual>
<isEqual property="searchCondition" compareValue="2" >
AND B.CALL_FROM LIKE CONCAT('%', #searchKeyword#, '%')
</isEqual>
<isEqual property="searchCondition" compareValue="3" >
AND B.SMS_TXT LIKE CONCAT('%', #searchKeyword#, '%')
</isEqual>
</isNotEmpty>
<isNotEmpty property="searchCondition01">
AND B.RESERVE_YN = #searchCondition01#
</isNotEmpty>
<isNotEmpty property="searchCondition02">
<isEqual property="searchCondition02" compareValue="S">
AND B.MSG_TYPE = '4'
</isEqual>
<isEqual property="searchCondition02" compareValue="L">
AND B.MSG_TYPE = '6'
AND B.FILE_CNT = '0'
</isEqual>
<isEqual property="searchCondition02" compareValue="M">
<![CDATA[
AND B.MSG_TYPE = '6'
AND B.FILE_CNT > '0'
]]>
</isEqual>
</isNotEmpty>
<isNotEmpty property="searchStartDate">
<![CDATA[
AND DATE_FORMAT(REGDATE, '%Y-%m-%d') >= DATE_FORMAT(#searchStartDate#, '%Y-%m-%d')
]]>
</isNotEmpty>
<isNotEmpty property="searchEndDate">
<![CDATA[
AND DATE_FORMAT(REGDATE, '%Y-%m-%d') <= DATE_FORMAT(#searchEndDate#, '%Y-%m-%d')
]]>
</isNotEmpty>
</select>
<!-- 전체 발송결과 조회 (전송사별) 카운트-->
<select id="MjonMsgSentDAO.findBySWF" parameterClass="String" resultClass="mjonMsgSWFDTO">
/* MjonMsgSentDAO.findBySWF */
select
SUM(IF(aa.result = 'S', 1, 0)) AS resultSValue,
SUM(IF(aa.result = 'W', 1, 0)) AS resultWValue,
SUM(IF(aa.result = 'F', 1, 0)) AS resultFValue,
CASE
WHEN COUNT(DISTINCT REQ_DATE) > 1 THEN 'Y'
ELSE 'N'
END AS divideYN
from
(
select
case
when A.AGENT_CODE = '01'
and ( A.RSLT_CODE = '100'
and (A.RSLT_CODE2 = '0')) then 'S'
when A.AGENT_CODE = '02'
and (A.RSLT_CODE = '0') then 'S'
when A.AGENT_CODE = '03'
and (A.RSLT_CODE = '100'
or A.RSLT_CODE = '101'
or A.RSLT_CODE = '110'
or A.RSLT_CODE = '800') then 'S'
when
A.AGENT_CODE = '04'
and (A.RSLT_CODE = '4100'
or A.RSLT_CODE = '6600'
or A.RSLT_CODE = '7000') then 'S'
when
A.AGENT_CODE = '05'
and (A.RSLT_CODE = '1000'
or A.RSLT_CODE = '1001') then 'S'
when
A.AGENT_CODE = '07'
and (A.RSLT_CODE = '6'
or A.RSLT_CODE = '1000') then 'S'
when
A.AGENT_CODE = '08'
and (A.RSLT_CODE = '1000'
or A.RSLT_CODE = '1001') then 'S'
when
A.AGENT_CODE = '09'
and (A.RSLT_CODE = '1000'
or A.RSLT_CODE = '1001') then 'S'
when (
A.RSLT_CODE is null
and A.RSLT_CODE2 is null
and A.SENT_DATE is null
and A.RSLT_DATE is null ) then 'W'
else 'F'
end as result /* common query */
, A.REQ_DATE
from
MJ_MSG_DATA A
where
A.MSG_GROUP_ID = #msgGroupId#
) aa
</select>
<!-- 발송결과 상세 데이터-->
<select id="MjonMsgSentDAO.selectAllMsgSentDetailView" parameterClass="mjonMsgDetailSentVO" resultClass="mjonMsgDetailSentVO">
/* MjonMsgSentDAO.selectAllMsgSentDetailView */
select
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 %H:%i') 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 %H:%i') as reqDate
, DATE_FORMAT(MGD.REGDATE, '%Y-%m-%d %H:%i') 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 %H:%i') 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
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
where
MGD.MSG_GROUP_ID = #msgGroupId#
limit 1
</select>
<!-- 전체 발송결과 조회 (전송사별)-->
<select id="MjonMsgSentDAO.findByMsgDetailListAjax" parameterClass="mjonMsgDetailSentVO" resultClass="mjonMsgDetailSentVO">
/* MjonMsgSentDAO.findByMsgDetailListAjax*/
SELECT
A.USER_ID as userId,
A.CALL_TO as callTo,
case
WHEN A.AGENT_CODE = '01' AND (A.RSLT_CODE = '100' and (A.RSLT_CODE2 = '0')) then '성공'
WHEN A.AGENT_CODE = '02' AND (A.RSLT_CODE = '0') then '성공'
WHEN A.AGENT_CODE = '03' AND (A.RSLT_CODE in ('100', '101', '110', '800')) then '성공'
WHEN A.AGENT_CODE = '04' AND (A.RSLT_CODE in ('4100', '6600', '7000')) then '성공'
WHEN A.AGENT_CODE = '05' AND (A.RSLT_CODE in ('1000', '1001')) then '성공'
WHEN A.AGENT_CODE = '07' AND (A.RSLT_CODE in ('6', '1000')) then '성공'
WHEN A.AGENT_CODE = '08' AND (A.RSLT_CODE in ('1000', '1001')) then '성공'
WHEN A.AGENT_CODE = '09' AND (A.RSLT_CODE in ('1000', '1001')) then '성공'
WHEN (A.RSLT_CODE is null AND A.RSLT_CODE2 IS NULL AND A.SENT_DATE IS NULL AND A.RSLT_DATE IS NULL) then '대기'
ELSE '실패'
END as statusTxt
from
MJ_MSG_DATA A
where
A.MSG_GROUP_ID = #msgGroupId#
</select>
<!-- REQ_DATE 조회-->
<select id="MjonMsgSentDAO.findByReqDateWhereMsgGroupId" parameterClass="String" resultClass="String">
/* MjonMsgSentDAO.findByReqDateWhereMsgGroupId*/
SELECT REQ_DATE FROM MJ_MSG_DATA WHERE MSG_GROUP_ID =#msgGroupId#
</select>
<!-- 전체 발송결과 조회 (전송사별)-->
<select id="MjonMsgSentDAO.selectAllMsgSentList_advc" parameterClass="mjonMsgSentVO" resultClass="mjonMsgSentVO">
/* MjonMsgSentDAO.selectAllMsgSentList_advc */
SELECT
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
, CAST(DATE_FORMAT(B.REGDATE, '%Y-%m-%d %H:%i') AS CHAR) AS regDate
, CAST(DATE_FORMAT(B.REQ_DATE, '%Y-%m-%d %H:%i') AS CHAR) 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
, B.RESERVE_C_YN as reserveCYn
, 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
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.USER_ID = #userId#
<isNotEmpty property="searchKeyword">
<isEqual property="searchCondition" compareValue="2" >
AND B.CALL_FROM LIKE CONCAT('%', #searchKeyword#, '%')
</isEqual>
<isEqual property="searchCondition" compareValue="3" >
AND B.SMS_TXT LIKE CONCAT('%', #searchKeyword#, '%')
</isEqual>
</isNotEmpty>
<isNotEmpty property="searchCondition01">
AND B.RESERVE_YN = #searchCondition01#
</isNotEmpty>
<isNotEmpty property="searchCondition02">
<isEqual property="searchCondition02" compareValue="S">
AND B.MSG_TYPE = '4'
</isEqual>
<isEqual property="searchCondition02" compareValue="L">
AND B.MSG_TYPE = '6'
AND B.FILE_CNT = '0'
</isEqual>
<isEqual property="searchCondition02" compareValue="M">
<![CDATA[
AND B.MSG_TYPE = '6'
AND B.FILE_CNT > '0'
]]>
</isEqual>
</isNotEmpty>
<isNotEmpty property="searchStartDate">
<![CDATA[
AND DATE_FORMAT(B.REGDATE, '%Y-%m-%d') >= DATE_FORMAT(#searchStartDate#, '%Y-%m-%d')
]]>
</isNotEmpty>
<isNotEmpty property="searchEndDate">
<![CDATA[
AND DATE_FORMAT(B.REGDATE, '%Y-%m-%d') <= DATE_FORMAT(#searchEndDate#, '%Y-%m-%d')
]]>
</isNotEmpty>
GROUP BY B.MSG_GROUP_ID
ORDER BY 1=1
<isNotEmpty property="searchSortCnd">
<isEqual property="searchSortCnd" compareValue="curState">
, curState $searchSortOrd$
, orderByrsltCode
</isEqual>
<isNotEqual property="searchSortCnd" compareValue="curState">
,$searchSortCnd$
</isNotEqual>
</isNotEmpty>
<isNotEmpty property="searchSortOrd">
$searchSortOrd$
</isNotEmpty>
LIMIT #recordCountPerPage# OFFSET #firstIndex#
</select>
<!-- 전체 발송결과 조회 (전송사별)--> <!-- 전체 발송결과 조회 (전송사별)-->
<select id="MjonMsgSentDAO.selectAllMsgSentList" parameterClass="mjonMsgSentVO" resultClass="mjonMsgSentVO"> <select id="MjonMsgSentDAO.selectAllMsgSentList" parameterClass="mjonMsgSentVO" resultClass="mjonMsgSentVO">
SELECT SELECT

View File

@ -553,6 +553,9 @@ function fn_save_menuInfo(menuNo) {
<div id="kopost_organization" class="orgCont"></div> <div id="kopost_organization" class="orgCont"></div>
</div> </div>
<div class="tbWrap"> <div class="tbWrap">
<div class="btnWrap">
<input type="button" class="btnType1 bg_456ded main1_save_btn" value="저 장" onClick="fn_save_menuInfo(); return false;">
</div>
<span class="tbTit" id="menuTopNm" >코드를 선택하세요</span> <span class="tbTit" id="menuTopNm" >코드를 선택하세요</span>
<table class="tbType2"> <table class="tbType2">
<colgroup> <colgroup>

View File

@ -22,6 +22,7 @@
<%@ taglib prefix="double-submit" uri="http://www.egovframe.go.kr/tags/double-submit/jsp" %> <%@ taglib prefix="double-submit" uri="http://www.egovframe.go.kr/tags/double-submit/jsp" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ taglib prefix="ec" uri="/WEB-INF/tld/ecnet_tld.tld"%> <%@ taglib prefix="ec" uri="/WEB-INF/tld/ecnet_tld.tld"%>
<%@ taglib prefix="fnc" uri="/WEB-INF/tld/functions.tld"%>
<% pageContext.setAttribute("newLineChar", "\r\n"); %> <% pageContext.setAttribute("newLineChar", "\r\n"); %>
<% pageContext.setAttribute("newLineChar2", "\n"); %> <% pageContext.setAttribute("newLineChar2", "\n"); %>
<% String serverName = request.getServerName(); %> <% String serverName = request.getServerName(); %>
@ -4157,8 +4158,10 @@ function fnInputSmsTxt(){
</td> </td>
<td> <td>
<c:choose> <c:choose>
<c:when test="${not empty mjonMsgSentList.regdate}"> <c:when test="${not empty mjonMsgSentList.regDate}">
<fmt:formatDate value="${mjonMsgSentList.regdate}" pattern="MM-dd HH:mm"/> <%-- <fmt:formatDate value="${mjonMsgSentList.regDate}" pattern="MM-dd HH:mm"/> --%>
${fnc:setStrToDataFormatter(mjonMsgSentList.regDate, 'MM-dd HH:mm') }
<%-- <c:out value="${mjonMsgSentList.regDate}" /> --%>
</c:when> </c:when>
<c:otherwise> <c:otherwise>
- -
@ -4190,7 +4193,8 @@ function fnInputSmsTxt(){
</c:when> </c:when>
<c:when test="${mjonMsgSentList.reserveYn eq 'Y' && mjonMsgSentList.reserveCYn eq 'N'}"> <c:when test="${mjonMsgSentList.reserveYn eq 'Y' && mjonMsgSentList.reserveCYn eq 'N'}">
[예약]<br /> [예약]<br />
<fmt:formatDate value="${mjonMsgSentList.reqdate}" pattern="MM-dd HH:mm"/> <%-- <fmt:formatDate value="${mjonMsgSentList.reqDate}" pattern="MM-dd HH:mm"/> --%>
${fnc:setStrToDataFormatter(mjonMsgSentList.regDate, 'MM-dd HH:mm') }
</c:when> </c:when>
<c:otherwise> <c:otherwise>
- -
@ -4367,8 +4371,11 @@ function fnInputSmsTxt(){
</td> </td>
<td> <td>
<c:choose> <c:choose>
<c:when test="${not empty mjonMsgSentList.regdate}"> <c:when test="${not empty mjonMsgSentList.regDate}">
<fmt:formatDate value="${mjonMsgSentList.regdate}" pattern="MM-dd HH:mm"/> <%-- <fmt:formatDate value="${mjonMsgSentList.regDate}" pattern="MM-dd HH:mm"/> --%>
<%-- <c:out value="${mjonMsgSentList.regDate}" /> --%>
${fnc:setStrToDataFormatter(mjonMsgSentList.regDate, 'MM-dd HH:mm') }
</c:when> </c:when>
<c:otherwise> <c:otherwise>
- -
@ -4400,7 +4407,8 @@ function fnInputSmsTxt(){
</c:when> </c:when>
<c:when test="${mjonMsgSentList.reserveYn eq 'Y' && mjonMsgSentList.reserveCYn eq 'N'}"> <c:when test="${mjonMsgSentList.reserveYn eq 'Y' && mjonMsgSentList.reserveCYn eq 'N'}">
[예약]<br /> [예약]<br />
<fmt:formatDate value="${mjonMsgSentList.reqdate}" pattern="yyyy-MM-dd HH:mm"/> ${fnc:setStrToDataFormatter(mjonMsgSentList.regDate, 'yyyy-MM-dd HH:mm') }
<%-- <fmt:formatDate value="${mjonMsgSentList.reqDate}" pattern="yyyy-MM-dd HH:mm"/> --%>
</c:when> </c:when>
<c:otherwise> <c:otherwise>
- -
@ -4586,8 +4594,8 @@ function fnInputSmsTxt(){
</td> </td>
<td> <td>
<c:choose> <c:choose>
<c:when test="${not empty mjonMsgDelaySentList.regdate}"> <c:when test="${not empty mjonMsgDelaySentList.regDate}">
<fmt:formatDate value="${mjonMsgDelaySentList.regdate}" pattern="yyyy-MM-dd HH:mm"/> <fmt:formatDate value="${mjonMsgDelaySentList.regDate}" pattern="yyyy-MM-dd HH:mm"/>
</c:when> </c:when>
<c:otherwise> <c:otherwise>
- -
@ -4605,7 +4613,7 @@ function fnInputSmsTxt(){
<c:otherwise> <c:otherwise>
<c:choose> <c:choose>
<c:when test="${mjonMsgDelaySentList.delayYn eq 'Y'}"> <c:when test="${mjonMsgDelaySentList.delayYn eq 'Y'}">
[스미싱의심] <fmt:formatDate value="${mjonMsgDelaySentList.reqdate}" pattern="yyyy-MM-dd HH:mm"/> [스미싱의심] <fmt:formatDate value="${mjonMsgDelaySentList.reqDate}" pattern="yyyy-MM-dd HH:mm"/>
</c:when> </c:when>
<c:otherwise> <c:otherwise>
- -
@ -4785,6 +4793,10 @@ function fnInputSmsTxt(){
<td> <td>
<c:choose> <c:choose>
<c:when test="${not empty kakaoResultList.regDate}"> <c:when test="${not empty kakaoResultList.regDate}">
<c:out value="${kakaoResultList.regDate}" />
<%-- ${fnc:setStrToDataFormatter(kakaoResultList.regDate, 'MM-dd HH:mm') } --%>
<fmt:parseDate value="${kakaoResultList.regDate}" var="dateValue" pattern="yyyy-MM-dd HH:mm:ss"/> <fmt:parseDate value="${kakaoResultList.regDate}" var="dateValue" pattern="yyyy-MM-dd HH:mm:ss"/>
<fmt:formatDate value="${dateValue}" pattern="MM-dd HH:mm"/> <fmt:formatDate value="${dateValue}" pattern="MM-dd HH:mm"/>
</c:when> </c:when>
@ -4925,8 +4937,10 @@ function fnInputSmsTxt(){
<td> <td>
<c:choose> <c:choose>
<c:when test="${not empty kakaoReserveList.regDate}"> <c:when test="${not empty kakaoReserveList.regDate}">
<fmt:parseDate value="${kakaoReserveList.regDate}" var="dateValue" pattern="yyyy-MM-dd HH:mm:ss"/> <c:out value="${kakaoReserveList.regDate}" />
<fmt:formatDate value="${dateValue}" pattern="MM-dd HH:mm"/> ${fnc:setStrToDataFormatter(kakaoReserveList.regDate, 'MM-dd HH:mm') }
<%-- <fmt:parseDate value="${kakaoReserveList.regDate}" var="dateValue" pattern="yyyy-MM-dd HH:mm:ss"/> --%>
<%-- <fmt:formatDate value="${dateValue}" pattern="MM-dd HH:mm"/> --%>
</c:when> </c:when>
<c:otherwise> <c:otherwise>
@ -5073,8 +5087,11 @@ function fnInputSmsTxt(){
<td> <td>
<c:choose> <c:choose>
<c:when test="${not empty kakaoDelayInfo.regDate}"> <c:when test="${not empty kakaoDelayInfo.regDate}">
<fmt:parseDate value="${kakaoDelayInfo.regDate}" var="kakaoDelayRegdate" pattern="yyyy-MM-dd HH:mm:ss"/> <%-- <c:out value="${kakaoDelayInfo.regDate}" /> --%>
<fmt:formatDate value="${kakaoDelayRegdate}" pattern="MM-dd HH:mm"/> ${fnc:setStrToDataFormatter(kakaoDelayInfo.regDate, 'MM-dd HH:mm') }
<%-- <fmt:formatDate value="${kakaoDelayRegdate}" pattern="MM-dd HH:mm"/> --%>
<%-- <fmt:parseDate value="${kakaoDelayInfo.regDate}" var="kakaoDelayRegdate" pattern="yyyy-MM-dd HH:mm:ss"/> --%>
<%-- <fmt:formatDate value="${kakaoDelayRegdate}" pattern="MM-dd HH:mm"/> --%>
</c:when> </c:when>
<c:otherwise> <c:otherwise>
- -

View File

@ -142,10 +142,10 @@ function cntntBtnInfo(stepInfo){
<ul class="tabType4"> <ul class="tabType4">
<li id="tabAt" class="tab topTab"><button type="button" onclick="javascript:fnLinkPageTopTab('tabAlim');">알림톡</button></li> <li id="tabAt" class="tab topTab"><button type="button" onclick="javascript:fnLinkPageTopTab('tabAlim');">알림톡</button></li>
<%-- <c:if test="${fn:contains(pageContext.request.requestURL , 'localhost') --%> <c:if test="${pageContext.request.serverName == 'localhost'
<%-- || fn:contains(pageContext.request.requestURL , '119.193.215.98')}"> --%> || pageContext.request.serverName == '119.193.215.98'}">
<!-- <li id="tabFt" class="tab topTab"><button type="button" onclick="javascript:fnLinkPageTopTab('tabFriend');">친구톡</button></li> --> <li id="tabFt" class="tab topTab"><button type="button" onclick="javascript:fnLinkPageTopTab('tabFriend');">친구톡</button></li>
<%-- </c:if> --%> </c:if>
<li id="tabConf" class="tab topTab"><button type="button" onclick="javascript:fnLinkPageTopTab('tabConf');">카카오톡 설정</button></li> <li id="tabConf" class="tab topTab"><button type="button" onclick="javascript:fnLinkPageTopTab('tabConf');">카카오톡 설정</button></li>
<li id="tabIntro" class="tab topTab"><button type="button" onclick="javascript:fnLinkPageTopTab('tabAlimtalkIntrd');">알림톡 소개</button></li> <li id="tabIntro" class="tab topTab"><button type="button" onclick="javascript:fnLinkPageTopTab('tabAlimtalkIntrd');">알림톡 소개</button></li>
</ul> </ul>

View File

@ -25,16 +25,23 @@ function initMenuTab(){
console.log('uri:', uri); console.log('uri:', uri);
if(uri.includes('selectMsgSentView')){ // URI 키워드와 해당 탭 ID를 매핑
$('.topTab').removeClass("active"); const tabMapping = [
$("#smsTab").addClass("active"); { keyword: 'selectMsgSentView', tabId: '#smsTab' }, // 'selectMsgSentView' 키워드를 '#smsTab'으로 매핑
}else if(uri.includes('selectKakaoSentView')){ { keyword: 'selectKakaoSentView', tabId: '#kakaoTab' }, // 'selectKakaoSentView' 키워드를 '#kakaoTab'으로 매핑
$('.topTab').removeClass("active"); { keyword: 'faxSendList', tabId: '#faxTab' } // 'faxSendList' 키워드를 '#faxTab'으로 매핑
$("#kakaoTab").addClass("active"); ];
}else if(uri.includes('faxSendList')){
$('.topTab').removeClass("active"); // URI에 특정 키워드가 포함되어 있는지 확인하여 활성 탭 정보를 찾음
$("#faxTab").addClass("active"); const activeTab = tabMapping.find(mapping => uri.includes(mapping.keyword)); // 'uri'에 키워드가 포함된 첫 번째 매핑을 검색
// 매칭된 탭이 있으면 UI를 업데이트하여 해당 탭을 활성화
if (activeTab) {
$('.topTab').removeClass("active"); // 모든 탭에서 "active" 클래스 제거
$(activeTab.tabId).addClass("active"); // 매핑된 탭 ID에 "active" 클래스 추가
} }
} }
function fnLinkPageTab(tabInfo){ function fnLinkPageTab(tabInfo){

View File

@ -946,10 +946,10 @@ function infoPop(pageUrl){
<ul class="list_tab"> <ul class="list_tab">
<li class="tab active"><button type="button" onclick="fnTabLoad('',0); return false;">전체</button></li> <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> <li class="tab"><button type="button" onclick="fnTabLoad('at', 1); return false;">알림톡</button></li>
<%-- <c:if test="${fn:contains(pageContext.request.requestURL , 'localhost') --%> <c:if test="${pageContext.request.serverName == 'localhost'
<%-- || fn:contains(pageContext.request.requestURL , '119.193.215.98')}"> --%> || pageContext.request.serverName == '119.193.215.98'}">
<!-- <li class="tab"><button type="button" onclick="fnTabLoad('ft', 2); return false;">친구톡</button></li> --> <li class="tab"><button type="button" onclick="fnTabLoad('ft', 2); return false;">친구톡</button></li>
<%-- </c:if> --%> </c:if>
</ul><!--// tab button --> </ul><!--// tab button -->
</div> </div>
<!-- 예약관리 > 전체 --> <!-- 예약관리 > 전체 -->

View File

@ -19,7 +19,7 @@
$(document).ready(function(){ $(document).ready(function(){
console.log("12111111111111"); console.log(": MsgDataSMLView :");
// console.log(' + $(#tabDision).val() : ',$('#tabDision').val()) // console.log(' + $(#tabDision).val() : ',$('#tabDision').val())
// if($('#tabDision').val() == 'tab02'){ // if($('#tabDision').val() == 'tab02'){
@ -3397,7 +3397,7 @@ function fnTestSend(){
} }
//제목 사용한 경우 //제목 사용한 경우
if($("input[name=title_status]:checked").val() == 'Y') { if($("input[name=subjectChkYn]:checked").val() == 'Y') {
form.mmsSubject.value = msgForm.mmsSubject.value; form.mmsSubject.value = msgForm.mmsSubject.value;
} else { } else {
form.mmsSubject.value = ""; //초기화 form.mmsSubject.value = ""; //초기화
@ -3411,7 +3411,7 @@ function fnTestSend(){
form.eachPrice.value = '<c:out value="${longPrice}" />'; form.eachPrice.value = '<c:out value="${longPrice}" />';
//제목 사용한 경우 //제목 사용한 경우
if($("input[name=title_status]:checked").val() == 'Y') { if($("input[name=subjectChkYn]:checked").val() == 'Y') {
form.mmsSubject.value = msgForm.mmsSubject.value; form.mmsSubject.value = msgForm.mmsSubject.value;
} else { } else {
form.mmsSubject.value = ""; //초기화 form.mmsSubject.value = ""; //초기화
@ -3964,6 +3964,8 @@ function getMjMsgSentListAll(pageNo) {
</c:otherwise> </c:otherwise>
</c:choose> </c:choose>
</h2> </h2>
<!-- /web/mjon/msgdata/selectMsgDataSMLViewAjax.do -->
<!-- MsgDataSMLView.jsp -->
<button type="button" class="button info" onclick="infoPop('selectMsgDataView1');">사용안내</button> <button type="button" class="button info" onclick="infoPop('selectMsgDataView1');">사용안내</button>
</div> </div>
<div class="send_general"> <div class="send_general">
@ -4018,9 +4020,9 @@ function getMjMsgSentListAll(pageNo) {
<td> <td>
<ul class="title_wrap"> <ul class="title_wrap">
<li> <li>
<input id="title_y" type="radio"name="title_status" value="Y" onchange="titleStatus(this);"> <input id="title_y" type="radio"name="subjectChkYn" value="Y" onchange="titleStatus(this);">
<label for="title_y">사용</label> <label for="title_y">사용</label>
<input id="title_n" type="radio" name="title_status" value="N" onchange="titleStatus(this);" checked="checked"> <input id="title_n" type="radio" name="subjectChkYn" value="N" onchange="titleStatus(this);" checked="checked">
<label for="title_n">사용안함</label> <label for="title_n">사용안함</label>
</li> </li>
<li class="textbox"> <li class="textbox">

View File

@ -3,19 +3,23 @@
<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> <%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> <%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ taglib prefix="ec" uri="/WEB-INF/tld/ecnet_tld.tld"%>
<%@ page import="itn.com.cmm.LoginVO" %> <%@ page import="itn.com.cmm.LoginVO" %>
<script src="/publish/js/content.js"></script> <script src="/publish/js/content.js"></script>
<script src="/publish/js/popupLayer.js"></script> <script src="/publish/js/popupLayer.js"></script>
<script type="text/javascript"> <script type="text/javascript">
/* 문자 발송결과 리스트 advc*/
$(document).ready(function(){ $(document).ready(function(){
var startDate = '${startDate}'; // var searchStartDate = '${searchStartDate}';
var endDate = '${endDate}'; // console.log('searchStartDate : ', searchStartDate);
// var searchEndDate = '${searchEndDate}';
// console.log('searchEndDate : ', searchEndDate);
// DatePicker 값 수정 // // DatePicker 값 수정
var startDatePicker = $('#startDate').pickadate('picker'); // var startDatePicker = $('#searchStartDate').pickadate('picker');
startDatePicker.set('select', startDate, { format: 'yyyy/mm/dd' }); // startDatePicker.set('select', searchStartDate, { format: 'yyyy/mm/dd' });
startDatePicker = $('#endDate').pickadate('picker'); // startDatePicker = $('#searchEndDate').pickadate('picker');
startDatePicker.set('select', endDate, { format: 'yyyy/mm/dd' }); // startDatePicker.set('select', searchEndDate, { format: 'yyyy/mm/dd' });
/* 목록 정렬 항목 아이콘 표시 */ /* 목록 정렬 항목 아이콘 표시 */
@ -58,21 +62,96 @@ $(document).ready(function(){
} }
}); });
if($("#tdType").val() == "groupList"){ });
$('td[name="listTd"]').attr("rowspan", "2")
}else{
$('tr[name="listTr"]').remove(); function fn_sentDetailView(msgGroupId) {
$('td[name="listSucc"]').remove(); // msgGroupId 값을 form에 설정
$("#searchForm #msgGroupId").val(msgGroupId);
// form을 해당 URL로 제출
$("#searchForm").attr("action", "/web/mjon/msgsent/msgSentDetailView.do");
$("#searchForm").submit();
}
// function fnReservCancel(msgGroupId, agentCode, msgType){
function fnReservCancel(msgGroupId){
var form = document.resCancelForm;
var loginVO = '${LoginVO}';
form.msgGroupId.value = msgGroupId;
// form.agentCode.value = agentCode;
// form.msgType.value = msgType;
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;
}
// var smsCnt = returnData.resultSts;
alert("예약 발송이 정상적으로 취소 되었습니다.");
//예약 관리 리스트 다시 불러오기
linkPage(1);
//현황도 갱신 필요하여 새로고침으로 변경
// 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');
} }
}); });
}
}
</script> </script>
<div class="list_info"> <div class="list_info">
<input type="hidden" id="tdType" value="${mjonMsgSentVO.listType}"> <p>총 <span class="c_e40000" id="testId"><c:out value="${totalRecordCount}"/></span>건</p>
<p>총 <span class="c_e40000"><c:out value="${totalRecordCount}"/></span>건</p>
<div> <div>
<p class="cf_text c_e40000">※ 예약문자 발송취소는 예약 발송시간 기준 5분 전까지만 가능</p>
<label for="pageUnit" class="label">줄보기 선택</label> <label for="pageUnit" class="label">줄보기 선택</label>
<select id="pageUnit" name="pageUnit" class="selType2"> <select id="pageUnitS" class="selType2">
<option value="10" <c:if test="${paginationInfo.recordCountPerPage == '10'}">selected</c:if> >10개보기</option> <option value="10" <c:if test="${paginationInfo.recordCountPerPage == '10'}">selected</c:if> >10개보기</option>
<option value="20" <c:if test="${paginationInfo.recordCountPerPage == '20'}">selected</c:if> >20개보기</option> <option value="20" <c:if test="${paginationInfo.recordCountPerPage == '20'}">selected</c:if> >20개보기</option>
<option value="30" <c:if test="${paginationInfo.recordCountPerPage == '30'}">selected</c:if> >30개보기</option> <option value="30" <c:if test="${paginationInfo.recordCountPerPage == '30'}">selected</c:if> >30개보기</option>
@ -84,134 +163,100 @@ $(document).ready(function(){
<div class="tb_wrap"> <div class="tb_wrap">
<table class="tType4"> <table class="tType4">
<colgroup> <colgroup>
<col style="width: 40px;"> <col style="width: 45px;">
<col style="width: 12%;"> <col style="width: 12%;">
<col style="width: 8%;"> <col style="width: 8%;">
<col style="width: 90px;"> <col style="width: auto;">
<col style="width: 10%;">
<col style="width: 15%;">
<col style="width: 12%;">
<col style="width: 8%;"> <col style="width: 8%;">
<c:if test="${mjonMsgSentVO.listType eq 'groupList'}"> <col style="width: 6%;">
<col style="width: 8%;"> <col style="width: 6%;">
<col style="width: 8%;"> <col style="width: 6%;">
</c:if> <col style="width: 6%;">
<col style="width: 11%;">
</colgroup> </colgroup>
<thead> <thead>
<tr> <tr>
<th> <th rowspan="2">
<label for="allCheck" class="label">전체 선택</label> <label for="allCheck" class="label">전체 선택</label>
<input type="checkbox" id="allCheck" name="allCheck"> <input type="checkbox" id="allCheck" name="allCheck">
</th> </th>
<th>발송일시 <th rowspan="2">발송일시
<div class="sort_wrap"> <div class="sort_wrap">
<input type="button" class="sort sortBtn" id="sort_reqdate"> <input type="button" class="sort sortBtn" id="sort_reqdate">
</div> </div>
</th> </th>
<th>형태 <th rowspan="2">형태
<div class="sort_wrap"> <div class="sort_wrap">
<input type="button" class="sort sortBtn" id="sort_orderByCode"> <input type="button" class="sort sortBtn" id="sort_orderByCode">
</div> </div>
</th> </th>
<th>발송방식 <th rowspan="2">내용</th>
<div class="sort_wrap"> <th rowspan="2">
<input type="button" class="sort sortBtn" id="sort_sendKind">
</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>
<c:if test="${mjonMsgSentVO.listType eq 'groupList'}">
<th>
발송건수 발송건수
<div class="sort_wrap"> <div class="sort_wrap">
<input type="button" class="sort sortBtn" id="sort_msgGroupCnt"> <input type="button" class="sort sortBtn" id="sort_msgGroupCnt">
</div> </div>
</th> </th>
</c:if> <th colspan="3">결과</th>
<th>결과</th> <th rowspan="2">금액(원)</th>
<c:if test="${mjonMsgSentVO.listType eq 'groupList'}"> <th rowspan="2">진행상황</th>
<th>건수</th> <!-- <th>금액</th> -->
</c:if> </tr>
<th>금액</th> <tr>
<th>대기</th>
<th>성공</th>
<th>실패</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
<c:choose> <c:choose>
<c:when test="${not empty resultAllSentList}"> <c:when test="${not empty resultAllSentList}">
<c:forEach var="resultAllSentList" items="${resultAllSentList}" varStatus="status"> <c:forEach var="result" items="${resultAllSentList}" varStatus="status">
<c:set var="replaceCnt" value="0" />
<c:set var="electionCnt" value="0" />
<c:set var="advertisementCnt" value="0" />
<c:if test="${fn:indexOf(resultAllSentList.smsTxt,'[*이름*]') != -1 || fn:indexOf(resultAllSentList.smsTxt,'[*1*]') != -1 || fn:indexOf(resultAllSentList.smsTxt,'[*2*]') != -1 || fn:indexOf(resultAllSentList.smsTxt,'[*3*]') != -1 || fn:indexOf(resultAllSentList.smsTxt,'[*4*]') != -1}">
<c:set var="replaceCnt" value="1" />
</c:if>
<c:if test="${fn:indexOf(resultAllSentList.smsTxt,'(선거운동정보)') == 0}">
<c:set var="electionCnt" value="1" />
</c:if>
<c:if test="${fn:indexOf(resultAllSentList.smsTxt,'(광고)') == 0}">
<c:set var="advertisementCnt" value="1" />
</c:if>
<tr> <tr>
<td name="listTd"> <td>
<label for="msgSentDel${status.count}" class="label">선택</label> <label for="msgSentDel${status.count}" class="label">선택</label>
<c:choose> <c:choose>
<c:when test="${resultAllSentList.curState == '0'}"> <c:when test="${result.statusCd eq '03' or result.statusCd eq '01'}">
<input type="checkbox" id="msgSentDel${status.count}" name="msgSentDel" value="${resultAllSentList.msgGroupId}" disabled> <input type="checkbox" disabled>
</c:when> </c:when>
<c:otherwise> <c:otherwise>
<c:choose> <input type="checkbox" id="msgSentDel${status.count}" name="msgSentDel" value="${result.msgGroupId}">
<c:when test="${mjonMsgSentVO.listType == 'groupList'}">
<input type="checkbox" id="msgSentDel${status.count}" name="msgSentDel" value="${resultAllSentList.msgGroupId}">
</c:when>
<c:otherwise>
<input type="checkbox" id="msgSentDel${status.count}" name="msgSentDel" value="${resultAllSentList.msgSeq}">
</c:otherwise>
</c:choose>
</c:otherwise> </c:otherwise>
</c:choose> </c:choose>
</td> </td>
<td name="listTd"> <td>
<c:choose> <c:choose>
<c:when test="${resultAllSentList.delayYn eq 'Y' && resultAllSentList.delayCompleteYn eq 'N'}"> <c:when test="${result.delayYn eq 'Y' && result.delayCompleteYn eq 'N'}">
<c:choose> <c:choose>
<c:when test="${resultAllSentList.curState eq '0'}"> <c:when test="${result.curState eq '0'}">
<%-- <%--
20240906 추가 20240906 추가
발송 대기 상태일 때만 원래 발송시간을 보여주고, 발송이 완료되면 발송 처리 완료 시간(reqDate)을 보여준다. 발송 대기 상태일 때만 원래 발송시간을 보여주고, 발송이 완료되면 발송 처리 완료 시간(reqDate)을 보여준다.
30분 딜레이 된 건으로 관리자 승인/취소 처리가 완료 되지 않은 건에 대해서 -30분 처리하여 원래 사용자가 보내려던 시간을 표시해줌 30분 딜레이 된 건으로 관리자 승인/취소 처리가 완료 되지 않은 건에 대해서 -30분 처리하여 원래 사용자가 보내려던 시간을 표시해줌
--%> --%>
<p><fmt:formatDate pattern = "yyyy-MM-dd HH:mm" value = "${resultAllSentList.delayOrgTime}" /></p> <p>${result.delayOrgTime}</p>
</c:when> </c:when>
<c:otherwise> <c:otherwise>
<p><fmt:formatDate pattern = "yyyy-MM-dd HH:mm" value = "${resultAllSentList.reqdate}" /></p> <p>${result.reqDate}</p>
</c:otherwise> </c:otherwise>
</c:choose> </c:choose>
</c:when> </c:when>
<c:otherwise> <c:otherwise>
<p><fmt:formatDate pattern = "yyyy-MM-dd HH:mm" value = "${resultAllSentList.reqdate}" /></p> <p>${result.reqDate}</p>
</c:otherwise> </c:otherwise>
</c:choose> </c:choose>
</td> </td>
<td name="listTd"> <td>
<p> <p>
<c:choose> <c:choose>
<c:when test="${resultAllSentList.msgType eq '6' && resultAllSentList.fileCnt eq 0 }"> <c:when test="${result.msgType eq '6' && result.fileCnt eq 0 }">
장문 장문
</c:when> </c:when>
<c:when test="${resultAllSentList.msgType eq '6' && resultAllSentList.fileCnt ne 0 }"> <c:when test="${result.msgType eq '6' && result.fileCnt ne 0 }">
그림 그림
</c:when> </c:when>
<c:otherwise> <c:otherwise>
@ -220,239 +265,69 @@ $(document).ready(function(){
</c:choose> </c:choose>
</p> </p>
</td> </td>
<td name="listTd"> <td class="result_cont">
<p> <div class="icon_wrap">
<c:if test="${result.reserveYn eq 'Y'}">
<span class="re">예약</span>
<!-- 예약일때만 분할이 있음 -->
<c:if test="${result.divideYN eq 'Y'}">
<span class="di">분할</span>
</c:if>
</c:if>
<a href="#none" onclick="fn_sentDetailView('${result.msgGroupId}')">
<c:choose> <c:choose>
<c:when test="${resultAllSentList.sendKind eq 'H' }"> <c:when test="${result.subjectChkYn eq 'Y' }">
WEB <c:out value="${result.subject }" />
</c:when>
<c:when test="${resultAllSentList.sendKind eq 'A'}">
API
</c:when> </c:when>
<c:otherwise> <c:otherwise>
- <c:out value="${result.smsTxt}" />
</c:otherwise> </c:otherwise>
</c:choose> </c:choose>
</p> </a>
</div>
</td> </td>
<td name="listTd"> <td>
<button class="btnType btnType20" data-tooltip="rev_popup01" onClick="javascript:fnRevDetailPop('${resultAllSentList.msgGroupId}','${resultAllSentList.msgId}','${resultAllSentList.fileCnt}'); return false;">상세보기</button> <p><fmt:formatNumber value="${result.msgGroupCnt}" type="number" groupingUsed="true" /> </p>
<button class="btnType btnType20" onClick="javascript:fnMjMsgReSendAll('${resultAllSentList.msgGroupId}','${replaceCnt}','${electionCnt}','${advertisementCnt}'); return false;">재전송</button>
</td> </td>
<td name="listTd"> <td>
<p><fmt:formatNumber value="${result.resultWValue}" type="number" groupingUsed="true" /> </p>
</td>
<td>
<p class="c_002c9a"><fmt:formatNumber value="${result.resultSValue}" type="number" groupingUsed="true" /> </p>
</td>
<td>
<p class="c_e40000"><fmt:formatNumber value="${result.resultFValue}" type="number" groupingUsed="true" /> </p>
</td>
<td>
<c:choose> <c:choose>
<c:when test="${mjonMsgSentVO.listType == 'groupList'}"> <c:when test="${result.totPrice eq '-' }">
<c:choose> <c:out value="${result.totPrice }" />
<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:when>
<c:otherwise> <c:otherwise>
<c:out value="${resultAllSentList.callToComma}"/> <fmt:formatNumber value="${result.totPrice }" type="number" groupingUsed="true" minFractionDigits="0" maxFractionDigits="1" />
</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>
</c:when>
<c:otherwise>
<c:choose>
<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>
</c:otherwise> </c:otherwise>
</c:choose> </c:choose>
</td> </td>
<td name="listTd"> <td>
<p><c:out value="${resultAllSentList.callFromComma}"/></p>
</td>
<c:if test="${mjonMsgSentVO.listType eq 'groupList'}">
<td name="listTd">
<p><c:out value="${resultAllSentList.msgGroupCnt}"/></p>
</td>
</c:if>
<!-- 발송 성공/실패 listType에 따른 전송건별(groupList), 개인별 리스트 처리-->
<c:set var="succ" value="0"/> <!-- 정상수신-->
<c:set var="fail" value="0"/> <!-- 수신실패-->
<c:set var="wait" value="0"/> <!-- 결과대기-->
<c:set var="succPrice" value="0"/> <!-- 정상수신 가격-->
<c:set var="failPrice" value="0"/> <!-- 수신실패 가격-->
<c:set var="waitPrice" value="0"/> <!-- 결과대기 가격-->
<c:set var="msgResultSts" value=""/><!-- 결과상태 확인 -->
<c:forEach var="resultMsgSFList" items="${resultMsgSucFailList}" varStatus="status">
<c:choose> <c:choose>
<c:when test="${mjonMsgSentVO.listType == 'groupList'}"> <c:when test="${result.statusCd ne '03' }">
<c:if test="${resultAllSentList.msgGroupId == resultMsgSFList.msgGroupId}"> <ec:code codeId="ITN057" code="${result.statusCd }" />
<c:if test="${resultMsgSFList.msgResultSts == 'S'}">
<c:set var="succ" value="${resultMsgSFList.msgResultCnt}"/>
<c:set var="succPrice" value="${resultMsgSFList.eachPrice * succ}"/>
</c:if>
<c:if test="${resultMsgSFList.msgResultSts == 'F'}">
<c:set var="fail" value="${resultMsgSFList.msgResultCnt}"/>
<c:set var="failPrice" value="${resultMsgSFList.eachPrice * fail}"/>
</c:if>
<c:if test="${resultMsgSFList.msgResultSts == 'W'}">
<c:set var="wait" value="${resultMsgSFList.msgResultCnt}"/>
<c:set var="waitPrice" value="${resultMsgSFList.eachPrice * wait}"/>
</c:if>
</c:if>
</c:when> </c:when>
<c:otherwise> <c:otherwise>
<c:if test="${resultAllSentList.msgGroupId == resultMsgSFList.msgGroupId && resultAllSentList.msgSeq == resultMsgSFList.msgSeq}"> <p><button class="btnType btnType20" onClick="javascript:fnReservCancel('${result.msgGroupId}'); return false;">예약취소</button></p>
<c:set var="msgResultSts" value="${resultMsgSFList.msgResultSts}"/>
<c:if test="${resultMsgSFList.msgResultSts == 'S'}">
<c:set var="succ" value="${resultMsgSFList.msgResultCnt}"/>
<c:set var="succPrice" value="${resultMsgSFList.eachPrice * succ}"/>
</c:if>
<c:if test="${resultMsgSFList.msgResultSts == 'F'}">
<c:set var="fail" value="${resultMsgSFList.msgResultCnt}"/>
<c:set var="failPrice" value="${resultMsgSFList.eachPrice * fail}"/>
</c:if>
<c:if test="${resultMsgSFList.msgResultSts == 'W'}">
<c:set var="wait" value="${resultMsgSFList.msgResultCnt}"/>
<c:set var="waitPrice" value="${resultMsgSFList.eachPrice * wait}"/>
</c:if>
</c:if>
</c:otherwise> </c:otherwise>
</c:choose> </c:choose>
</c:forEach>
<td name="listSucc"> <!-- -->
<p class="fwRg c_002c9a">정상수신</p>
</td>
<td name="listSucc">
<c:choose>
<c:when test="${mjonMsgSentVO.listType == 'groupList' && succ > 0}">
<p class="fwRg c_002c9a" onclick="javascript:fnMsgSFDetailList('${resultAllSentList.msgGroupId}', 'S'); return false;" style="cursor:pointer;"><fmt:formatNumber value="${succ}" pattern="#,###.#"/></p>
</c:when>
<c:otherwise>
<p class="fwRg c_002c9a"><fmt:formatNumber value="${succ}" pattern="#,###.#"/></p>
</c:otherwise>
</c:choose>
</td>
<!-- 과금/비과금 -->
<td name="listSucc">
<p class="fwRg c_002c9a">
<c:choose>
<c:when test="${succPrice > 0}">
<fmt:formatNumber value="${succPrice}" pattern="#,###.#"/>
</c:when>
<c:otherwise>
0
</c:otherwise>
</c:choose>
</p>
</td> </td>
<c:if test="${mjonMsgSentVO.listType != 'groupList'}">
<c:if test="${msgResultSts == 'S'}">
<td>
<p class="fwRg c_002c9a">정상수신</p>
</td>
<!-- 과금/비과금 -->
<td>
<p class="fwRg c_002c9a">
<c:choose>
<c:when test="${succPrice > 0}">
<fmt:formatNumber value="${succPrice}" pattern="#,###.#"/>
</c:when>
<c:otherwise>
0
</c:otherwise>
</c:choose>
</p>
</td>
</c:if>
<c:if test="${msgResultSts == 'F'}">
<td>
<p class="fwRg c_e40000">수신오류</p>
</td>
<!-- 과금/비과금 -->
<td>
<p class="fwRg c_e40000">
<c:choose>
<c:when test="${failPrice > 0}">
<fmt:formatNumber value="${failPrice}" pattern="#,###.#"/>
</c:when>
<c:otherwise>
0
</c:otherwise>
</c:choose>
</p>
</td>
</c:if>
<c:if test="${msgResultSts == 'W'}">
<td>
<p class="fwRg c_e40000">결과대기</p>
</td>
<!-- 과금/비과금 -->
<td>
<p class="fwRg c_e40000">
<c:choose>
<c:when test="${waitPrice > 0}">
<fmt:formatNumber value="${waitPrice}" pattern="#,###.#"/>
</c:when>
<c:otherwise>
0
</c:otherwise>
</c:choose>
</p>
</td>
</c:if>
</c:if>
</tr>
<tr name="listTr">
<td>
<p class="c_222">실패/대기</p>
</td>
<td>
<c:choose>
<c:when test="${mjonMsgSentVO.listType == 'groupList' && (fail+wait) > 0}">
<p class="c_222" onclick="javascript:fnMsgSFDetailList('${resultAllSentList.msgGroupId}', 'F'); return false;" style="cursor:pointer;">
<fmt:formatNumber value="${fail}" pattern="#,###"/> / <fmt:formatNumber value="${wait}" pattern="#,###"/>
</p>
</c:when>
<c:otherwise>
<p class="c_222">
<fmt:formatNumber value="${fail}" pattern="#,###"/> / <fmt:formatNumber value="${wait}" pattern="#,###"/>
</p>
</c:otherwise>
</c:choose>
</td>
<td>
<p class="c_222">
<c:choose>
<c:when test="${(failPrice+waitPrice) > 0}">
<fmt:formatNumber value="${(failPrice+waitPrice)}" pattern="#,###.#"/>
</c:when>
<c:otherwise>
0
</c:otherwise>
</c:choose>
</p>
</td>
</tr> </tr>
</c:forEach> </c:forEach>
</c:when> </c:when>
<c:otherwise> <c:otherwise>
<tr> <tr>
<c:if test="${mjonMsgSentVO.listType eq 'groupList'}"> <td colspan="10">발송 내역이 없습니다.</td>
<td colspan="11">발송 내역이 없습니다.</td>
</c:if>
<c:if test="${mjonMsgSentVO.listType ne 'groupList'}">
<td colspan="9">발송 내역이 없습니다.</td>
</c:if>
</tr> </tr>
</c:otherwise> </c:otherwise>
</c:choose> </c:choose>
@ -462,14 +337,14 @@ $(document).ready(function(){
<div class="table_btn clearfix"> <div class="table_btn clearfix">
<div class="table_btn_left"> <div class="table_btn_left">
<!-- 2022.07.04 발송결과 화면에 리스트 선택삭제 기능 제거(카운팅 및 금액 합산 오류 관련) --> <!-- 2022.07.04 발송결과 화면에 리스트 선택삭제 기능 제거(카운팅 및 금액 합산 오류 관련) -->
<!-- <button type="button" class="btnType btnType15" onClick="javascript:fnDelete(); return false;"><i class="remove_img"></i>선택삭제</button> --> <button type="button" class="btnType btnType15" onClick="javascript:fnDelete(); return false;"><i class="remove_img"></i>선택삭제</button>
<button type="button" data-tooltip="rev_popup02" class="btnType btnType15"><i class="add_img"></i>그룹등록</button> <!-- <button type="button" data-tooltip="rev_popup02" class="btnType btnType15"><i class="add_img"></i>그룹등록</button> -->
<button type="button" class="btnType btnType15" onClick="javascript:fnDeleteAddrNo('${mjonMsgSentVO.listType}'); return false;"><i class="remove_img"></i>주소록에서 번호 삭제</button> <%-- <button type="button" class="btnType btnType15" onClick="javascript:fnDeleteAddrNo('${mjonMsgSentVO.listType}'); return false;"><i class="remove_img"></i>주소록에서 번호 삭제</button> --%>
<button type="button" class="btnType btnType15" onClick="javascript:fnAddBlockNo('${mjonMsgSentVO.listType}'); return false;"></i>수신거부번호 등록</button> <%-- <button type="button" class="btnType btnType15" onClick="javascript:fnAddBlockNo('${mjonMsgSentVO.listType}'); return false;"></i>수신거부번호 등록</button> --%>
</div> </div>
<div class="table_btn_right"> <div class="table_btn_right">
<button type="button" class="excel_btn btnType" onClick="javascript:fnExcelDownLoad('all','${mjonMsgSentVO.tabType}'); return false;"><i class="downroad"></i>엑셀 다운로드</button> <button type="button" class="excel_btn btnType" onClick="javascript:fnExcelDownLoad(); return false;"><i class="downroad"></i>발송결과 리스트</button>
<button type="button" class="print_btn btnType" onClick="javascript:fnShowPrintPopup('all','${mjonMsgSentVO.tabType}'); return false;"><i class="print_img"></i>발송결과 출력하기</button> <%-- <button type="button" class="print_btn btnType" onClick="javascript:fnShowPrintPopup('all','${mjonMsgSentVO.tabType}'); return false;"><i class="print_img"></i>발송결과 출력하기</button> --%>
</div> </div>
</div> </div>
<c:if test="${!empty resultAllSentList}"> <c:if test="${!empty resultAllSentList}">
@ -477,3 +352,12 @@ $(document).ready(function(){
<ui:pagination paginationInfo = "${paginationInfo}" type="imageWeb" jsFunction="linkPage" /> <ui:pagination paginationInfo = "${paginationInfo}" type="imageWeb" jsFunction="linkPage" />
</ul> </ul>
</c:if> </c:if>
<form name="detailForm" id="detailForm" method="post">
<input type="hidden" name="msgGroupId" id="msgGroupId" value=""/>
</form>
<form id="resCancelForm" name="resCancelForm" method="post">
<input type="hidden" id="msgGroupId" name="msgGroupId" value=""/>
</form>

View File

@ -0,0 +1,479 @@
<%@ 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 startDate = '${startDate}';
var endDate = '${endDate}';
// DatePicker 값 수정
var startDatePicker = $('#startDate').pickadate('picker');
startDatePicker.set('select', startDate, { format: 'yyyy/mm/dd' });
startDatePicker = $('#endDate').pickadate('picker');
startDatePicker.set('select', endDate, { format: 'yyyy/mm/dd' });
/* 목록 정렬 항목 아이콘 표시 */
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"){
$('.listTd').attr("rowspan", "2")
}else{
$('.listTr').remove();
$('.listSucc').remove();
}
});
</script>
<div class="list_info">
<input type="hidden" id="tdType" value="${mjonMsgSentVO.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>
<option value="100" <c:if test="${paginationInfo.recordCountPerPage == '100'}">selected</c:if> >100개보기</option>
</select>
</div>
</div>
<!-- 받는사람(전송건별) - 전체 -->
<div class="tb_wrap">
<table class="tType4">
<colgroup>
<col style="width: 40px;">
<col style="width: 12%;">
<col style="width: 8%;">
<col style="width: 90px;">
<col style="width: 10%;">
<col style="width: 15%;">
<col style="width: 12%;">
<col style="width: 8%;">
<c:if test="${mjonMsgSentVO.listType eq 'groupList'}">
<col style="width: 8%;">
<col style="width: 8%;">
</c:if>
</colgroup>
<thead>
<tr>
<th>
<label for="allCheck" class="label">전체 선택</label>
<input type="checkbox" id="allCheck" name="allCheck">
</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_orderByCode">
</div>
</th>
<th>발송방식
<div class="sort_wrap">
<input type="button" class="sort sortBtn" id="sort_sendKind">
</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>
<c:if test="${mjonMsgSentVO.listType eq 'groupList'}">
<th>
발송건수
<div class="sort_wrap">
<input type="button" class="sort sortBtn" id="sort_msgGroupCnt">
</div>
</th>
</c:if>
<th>결과</th>
<c:if test="${mjonMsgSentVO.listType eq 'groupList'}">
<th>건수</th>
</c:if>
<th>금액</th>
</tr>
</thead>
<tbody>
<c:choose>
<c:when test="${not empty resultAllSentList}">
<c:forEach var="resultAllSentList" items="${resultAllSentList}" varStatus="status">
<c:set var="replaceCnt" value="0" />
<c:set var="electionCnt" value="0" />
<c:set var="advertisementCnt" value="0" />
<c:if test="${fn:indexOf(resultAllSentList.smsTxt,'[*이름*]') != -1 || fn:indexOf(resultAllSentList.smsTxt,'[*1*]') != -1 || fn:indexOf(resultAllSentList.smsTxt,'[*2*]') != -1 || fn:indexOf(resultAllSentList.smsTxt,'[*3*]') != -1 || fn:indexOf(resultAllSentList.smsTxt,'[*4*]') != -1}">
<c:set var="replaceCnt" value="1" />
</c:if>
<c:if test="${fn:indexOf(resultAllSentList.smsTxt,'(선거운동정보)') == 0}">
<c:set var="electionCnt" value="1" />
</c:if>
<c:if test="${fn:indexOf(resultAllSentList.smsTxt,'(광고)') == 0}">
<c:set var="advertisementCnt" value="1" />
</c:if>
<tr>
<td class="listTd">
<label for="msgSentDel${status.count}" class="label">선택</label>
<c:choose>
<c:when test="${resultAllSentList.curState == '0'}">
<input type="checkbox" id="msgSentDel${status.count}" name="msgSentDel" value="${resultAllSentList.msgGroupId}" disabled>
</c:when>
<c:otherwise>
<c:choose>
<c:when test="${mjonMsgSentVO.listType == 'groupList'}">
<input type="checkbox" id="msgSentDel${status.count}" name="msgSentDel" value="${resultAllSentList.msgGroupId}">
</c:when>
<c:otherwise>
<input type="checkbox" id="msgSentDel${status.count}" name="msgSentDel" value="${resultAllSentList.msgSeq}">
</c:otherwise>
</c:choose>
</c:otherwise>
</c:choose>
</td>
<td class="listTd">
<c:choose>
<c:when test="${resultAllSentList.delayYn eq 'Y' && resultAllSentList.delayCompleteYn 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.delayOrgTime}" /></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 class="listTd">
<p>
<c:choose>
<c:when test="${resultAllSentList.msgType eq '6' && resultAllSentList.fileCnt eq 0 }">
장문
</c:when>
<c:when test="${resultAllSentList.msgType eq '6' && resultAllSentList.fileCnt ne 0 }">
그림
</c:when>
<c:otherwise>
단문
</c:otherwise>
</c:choose>
</p>
</td>
<td class="listTd">
<p>
<c:choose>
<c:when test="${resultAllSentList.sendKind eq 'H' }">
WEB
</c:when>
<c:when test="${resultAllSentList.sendKind eq 'A'}">
API
</c:when>
<c:otherwise>
-
</c:otherwise>
</c:choose>
</p>
</td>
<td class="listTd">
<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:fnMjMsgReSendAll('${resultAllSentList.msgGroupId}','${replaceCnt}','${electionCnt}','${advertisementCnt}'); return false;">재전송</button>
</td>
<td class="listTd">
<c:choose>
<c:when test="${mjonMsgSentVO.listType == 'groupList'}">
<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>
</c:when>
<c:otherwise>
<c:choose>
<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>
</c:otherwise>
</c:choose>
</td>
<td class="listTd">
<p><c:out value="${resultAllSentList.callFromComma}"/></p>
</td>
<c:if test="${mjonMsgSentVO.listType eq 'groupList'}">
<td class="listTd">
<p><c:out value="${resultAllSentList.msgGroupCnt}"/></p>
</td>
</c:if>
<!-- 발송 성공/실패 listType에 따른 전송건별(groupList), 개인별 리스트 처리-->
<c:set var="succ" value="0"/> <!-- 정상수신-->
<c:set var="fail" value="0"/> <!-- 수신실패-->
<c:set var="wait" value="0"/> <!-- 결과대기-->
<c:set var="succPrice" value="0"/> <!-- 정상수신 가격-->
<c:set var="failPrice" value="0"/> <!-- 수신실패 가격-->
<c:set var="waitPrice" value="0"/> <!-- 결과대기 가격-->
<c:set var="msgResultSts" value=""/><!-- 결과상태 확인 -->
<c:forEach var="resultMsgSFList" items="${resultMsgSucFailList}" varStatus="status">
<c:choose>
<c:when test="${mjonMsgSentVO.listType == 'groupList'}">
<c:if test="${resultAllSentList.msgGroupId == resultMsgSFList.msgGroupId}">
<c:if test="${resultMsgSFList.msgResultSts == 'S'}">
<c:set var="succ" value="${resultMsgSFList.msgResultCnt}"/>
<c:set var="succPrice" value="${resultMsgSFList.eachPrice * succ}"/>
</c:if>
<c:if test="${resultMsgSFList.msgResultSts == 'F'}">
<c:set var="fail" value="${resultMsgSFList.msgResultCnt}"/>
<c:set var="failPrice" value="${resultMsgSFList.eachPrice * fail}"/>
</c:if>
<c:if test="${resultMsgSFList.msgResultSts == 'W'}">
<c:set var="wait" value="${resultMsgSFList.msgResultCnt}"/>
<c:set var="waitPrice" value="${resultMsgSFList.eachPrice * wait}"/>
</c:if>
</c:if>
</c:when>
<c:otherwise>
<c:if test="${resultAllSentList.msgGroupId == resultMsgSFList.msgGroupId && resultAllSentList.msgSeq == resultMsgSFList.msgSeq}">
<c:set var="msgResultSts" value="${resultMsgSFList.msgResultSts}"/>
<c:if test="${resultMsgSFList.msgResultSts == 'S'}">
<c:set var="succ" value="${resultMsgSFList.msgResultCnt}"/>
<c:set var="succPrice" value="${resultMsgSFList.eachPrice * succ}"/>
</c:if>
<c:if test="${resultMsgSFList.msgResultSts == 'F'}">
<c:set var="fail" value="${resultMsgSFList.msgResultCnt}"/>
<c:set var="failPrice" value="${resultMsgSFList.eachPrice * fail}"/>
</c:if>
<c:if test="${resultMsgSFList.msgResultSts == 'W'}">
<c:set var="wait" value="${resultMsgSFList.msgResultCnt}"/>
<c:set var="waitPrice" value="${resultMsgSFList.eachPrice * wait}"/>
</c:if>
</c:if>
</c:otherwise>
</c:choose>
</c:forEach>
<td class="listSucc">
<p class="fwRg c_002c9a">정상수신</p>
</td>
<td class="listSucc">
<c:choose>
<c:when test="${mjonMsgSentVO.listType == 'groupList' && succ > 0}">
<p class="fwRg c_002c9a" onclick="javascript:fnMsgSFDetailList('${resultAllSentList.msgGroupId}', 'S'); return false;" style="cursor:pointer;"><fmt:formatNumber value="${succ}" pattern="#,###.#"/></p>
</c:when>
<c:otherwise>
<p class="fwRg c_002c9a"><fmt:formatNumber value="${succ}" pattern="#,###.#"/></p>
</c:otherwise>
</c:choose>
</td>
<!-- 과금/비과금 -->
<td class="listSucc">
<p class="fwRg c_002c9a">
<c:choose>
<c:when test="${succPrice > 0}">
<fmt:formatNumber value="${succPrice}" pattern="#,###.#"/>
</c:when>
<c:otherwise>
0
</c:otherwise>
</c:choose>
</p>
</td>
<c:if test="${mjonMsgSentVO.listType != 'groupList'}">
<c:if test="${msgResultSts == 'S'}">
<td>
<p class="fwRg c_002c9a">정상수신</p>
</td>
<!-- 과금/비과금 -->
<td>
<p class="fwRg c_002c9a">
<c:choose>
<c:when test="${succPrice > 0}">
<fmt:formatNumber value="${succPrice}" pattern="#,###.#"/>
</c:when>
<c:otherwise>
0
</c:otherwise>
</c:choose>
</p>
</td>
</c:if>
<c:if test="${msgResultSts == 'F'}">
<td>
<p class="fwRg c_e40000">수신오류</p>
</td>
<!-- 과금/비과금 -->
<td>
<p class="fwRg c_e40000">
<c:choose>
<c:when test="${failPrice > 0}">
<fmt:formatNumber value="${failPrice}" pattern="#,###.#"/>
</c:when>
<c:otherwise>
0
</c:otherwise>
</c:choose>
</p>
</td>
</c:if>
<c:if test="${msgResultSts == 'W'}">
<td>
<p class="fwRg c_e40000">결과대기</p>
</td>
<!-- 과금/비과금 -->
<td>
<p class="fwRg c_e40000">
<c:choose>
<c:when test="${waitPrice > 0}">
<fmt:formatNumber value="${waitPrice}" pattern="#,###.#"/>
</c:when>
<c:otherwise>
0
</c:otherwise>
</c:choose>
</p>
</td>
</c:if>
</c:if>
</tr>
<tr class="listTr">
<td>
<p class="c_222">실패/대기</p>
</td>
<td>
<c:choose>
<c:when test="${mjonMsgSentVO.listType == 'groupList' && (fail+wait) > 0}">
<p class="c_222" onclick="javascript:fnMsgSFDetailList('${resultAllSentList.msgGroupId}', 'F'); return false;" style="cursor:pointer;">
<fmt:formatNumber value="${fail}" pattern="#,###"/> / <fmt:formatNumber value="${wait}" pattern="#,###"/>
</p>
</c:when>
<c:otherwise>
<p class="c_222">
<fmt:formatNumber value="${fail}" pattern="#,###"/> / <fmt:formatNumber value="${wait}" pattern="#,###"/>
</p>
</c:otherwise>
</c:choose>
</td>
<td>
<p class="c_222">
<c:choose>
<c:when test="${(failPrice+waitPrice) > 0}">
<fmt:formatNumber value="${(failPrice+waitPrice)}" pattern="#,###.#"/>
</c:when>
<c:otherwise>
0
</c:otherwise>
</c:choose>
</p>
</td>
</tr>
</c:forEach>
</c:when>
<c:otherwise>
<tr>
<c:if test="${mjonMsgSentVO.listType eq 'groupList'}">
<td colspan="11">발송 내역이 없습니다.</td>
</c:if>
<c:if test="${mjonMsgSentVO.listType ne 'groupList'}">
<td colspan="9">발송 내역이 없습니다.</td>
</c:if>
</tr>
</c:otherwise>
</c:choose>
</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('${mjonMsgSentVO.listType}'); return false;"><i class="remove_img"></i>주소록에서 번호 삭제</button>
<button type="button" class="btnType btnType15" onClick="javascript:fnAddBlockNo('${mjonMsgSentVO.listType}'); return false;"></i>수신거부번호 등록</button>
</div>
<div class="table_btn_right">
<button type="button" class="excel_btn btnType" onClick="javascript:fnExcelDownLoad('all','${mjonMsgSentVO.tabType}'); return false;"><i class="downroad"></i>엑셀 다운로드</button>
<button type="button" class="print_btn btnType" onClick="javascript:fnShowPrintPopup('all','${mjonMsgSentVO.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>

File diff suppressed because it is too large Load Diff

View File

@ -15,7 +15,12 @@ var thisfuledtlday = ""; //당원 마지막일
$(document).ready(function(){ $(document).ready(function(){
//초기 전체 리스트 페이지 보여주기 //초기 전체 리스트 페이지 보여주기
linkPage(1); linkPage($('#searchForm #pageIndex').val());
fn_activateTab($('#searchForm #searchCondition01').val())
fn_setActiveTab($('#searchForm #searchCondition02').val())
var date = new Date() ; var date = new Date() ;
//이전달 첫날/마지막날 조회 //이전달 첫날/마지막날 조회
@ -28,12 +33,14 @@ $(document).ready(function(){
lastfuledday = lastfulstday + "/"+ new Date(date.getFullYear(), date.getMonth(), 0).getDate()+"" ; lastfuledday = lastfulstday + "/"+ new Date(date.getFullYear(), date.getMonth(), 0).getDate()+"" ;
lastfulstday += "/01" ; lastfulstday += "/01" ;
} }
console.log('lastfulstday: ', lastfulstday);
//당월 첫날/마지막날 조회 //당월 첫날/마지막날 조회
thisfulstlday = date.getFullYear() + "/" ; thisfulstlday = date.getFullYear() + "/" ;
thisfulstlday += date.getMonth()+1 < 10 ? "0"+ (date.getMonth()+1) : date.getMonth()+1+"" ; thisfulstlday += date.getMonth()+1 < 10 ? "0"+ (date.getMonth()+1) : date.getMonth()+1+"" ;
thisfuledtlday = thisfulstlday + "/"+ new Date(date.getFullYear(), date.getMonth()+1, 0).getDate()+""; thisfuledtlday = thisfulstlday + "/"+ new Date(date.getFullYear(), date.getMonth()+1, 0).getDate()+"";
thisfulstlday += "/01" ; thisfulstlday += "/01" ;
console.log('thisfulstlday: ', thisfulstlday);
//3개월 이전 날짜 구해오기 //3개월 이전 날짜 구해오기
@ -56,6 +63,19 @@ $(document).ready(function(){
listSortOrd(this); listSortOrd(this);
}); });
// 탭 :: 전체 , 즉시, 예약
$(document).on('click', '.sendKindBtn', function (){
// 클릭된 버튼의 data-info 값을 전달하여 함수 호출
fn_activateTab($(this).data('info'));
linkPage(1);
});
//목록 정렬 항목 클릭 //목록 정렬 항목 클릭
function listSortOrd(obj){ function listSortOrd(obj){
var sortOrd = $(obj).attr("sortOrd"); var sortOrd = $(obj).attr("sortOrd");
@ -87,7 +107,8 @@ $(document).ready(function(){
}); });
$(document).on('change','#pageUnit', function(){ $(document).on('change','#pageUnitS', function(){
setPageUnit($(this).val());
linkPage(1); linkPage(1);
@ -97,8 +118,23 @@ $(document).ready(function(){
}); });
function setPageUnit(val){
$('#pageUnit').val(val);
}
//탭 활성화 처리 함수
function fn_activateTab(tabInfo) {
// 1. data-info 값을 가진 버튼 요소 찾기
var $button = $('.sendKindBtn[data-info="' + tabInfo + '"]');
// 2. 해당 버튼이 속한 탭 활성화 처리
$button.closest('ul').find('.tab').removeClass('active');
$button.closest('.tab').addClass('active');
// 3. hidden input 요소에 값 설정
$('#searchCondition01').val(tabInfo);
}
//캘린더에 날짜 입력해 주기 //캘린더에 날짜 입력해 주기
@ -107,12 +143,12 @@ function setCalVal(val,targetObj){
} }
//검색 버튼 실행 //페이지 이동 실행
function linkPage(pageNo){ function linkPage(pageNo){
var form = document.searchForm; var form = document.searchForm;
var stateType = form.stateType.value;
form.pageIndex.value = pageNo; form.pageIndex.value = pageNo;
console.log('form : ', form);
var sendData = $(document.searchForm).serializeArray(); var sendData = $(document.searchForm).serializeArray();
$(".msgSentAllLoad").html('<div class="list_info"><table class="tType4"><tbody><tr><td colspan="12">LOADING...</td></tr></tbody></table></div>'); $(".msgSentAllLoad").html('<div class="list_info"><table class="tType4"><tbody><tr><td colspan="12">LOADING...</td></tr></tbody></table></div>');
@ -137,11 +173,16 @@ function fnDelete(){
} }
}); });
if(msgId.length > 0){ console.log('msgId : ', msgId);
if(msgId.length < 1){
alert("삭제할 문자를 선택해 주세요.");
return false;
}
//22.04.25 구글 독스 alert 기준으로 이지우가 수정 //22.04.25 구글 독스 alert 기준으로 이지우가 수정
/* if(confirm("선택한 발송문자를 삭제하시겠습니까? 삭제된 문자는 복구가 불가능 합니다.")) */ /* if(confirm("선택한 발송문자를 삭제하시겠습니까? 삭제된 문자는 복구가 불가능 합니다.")) */
if(confirm("선택한 목록을 삭제하시겠습니까?")){ if(confirm("선택한 목록을 삭제하시겠습니까?\n삭제한 목록은 복구가 불가합니다.")){
document.searchForm.msgGroupIdList.value = msgId; document.searchForm.msgGroupIdList.value = msgId;
var sendData = $(document.searchForm).serializeArray(); var sendData = $(document.searchForm).serializeArray();
@ -149,109 +190,57 @@ function fnDelete(){
$(".msgSentAllLoad").load("/web/mjon/msgsent/deleteMsgSentDataAjax.do", sendData ,function(response, status, xhr){ $(".msgSentAllLoad").load("/web/mjon/msgsent/deleteMsgSentDataAjax.do", sendData ,function(response, status, xhr){
}); });
// var form = document.searchForm; alert("삭제되었습니다.");
// form.action="/web/mjon/msgsent/selectMsgSentView.do";
// form.submit();
}
}else{
alert("삭제할 문자를 선택해 주세요.");
return false;
}
}
//상세보기 버튼 실행
function fnRevDetailPop(msgGroupId, msgId, fileCnt){
document.resPopForm.msgGroupId.value = msgGroupId;
document.resPopForm.msgId.value = msgId;
var sendData = $(document.resPopForm).serializeArray();
var form = document.searchForm; var form = document.searchForm;
if (form.listType.value == "privateList") { form.action="/web/mjon/msgsent/selectMsgSentView.do";
$("#msgSentDetailPopLoad").load("/web/mjon/msgsent/selectMsgSentDetailData2Ajax.do", sendData ,function(response, status, xhr){ form.submit();
});
} }
else {
$("#msgSentDetailPopLoad").load("/web/mjon/msgsent/selectMsgSentDetailDataAjax.do", sendData ,function(response, status, xhr){
});
}
}
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 == 'all'){
form.stateType.value = "all";
$(".tab_depth1").show();
}else if(pageType == 'ready'){
form.stateType.value = "ready";
$(".tab_depth1").show();
}else if(pageType == 'complete'){
form.stateType.value = "complete";
$(".tab_depth1").show();
}else if(pageType == 'fail'){
form.listType.value = "privateList";
form.stateType.value = "fail";
$(".tab_depth1").hide();
}
/* if(pageType == 'fail'){//발송실패의 경우 모두 개인별 건수를 보여준다.
form.listType.value = 'privateList';
} */
linkPage(1);
} }
// 전체/단문/장문/그림 탭 선택 처리 // 전체/단문/장문/그림 탭 선택 처리
function fnTabLoad(tabType, tabNum){ function fnTabLoad(tabType){
//즉시, 예약 탭은 전체로 바꿔야함
fn_activateTab('');
setPageUnit('10');
var form = document.searchForm; var form = document.searchForm;
form.tabType.value = tabType;
//해당 탭의 전체 리스트 내역으로 불러오기
fnListLoad('all', '0');
var n=tabNum+1;
// 탭 선택 CSS 처리 // 탭 선택 CSS 처리
var $tab = $(".list_tab_wrap2 li:nth-child("+n+")"); fn_setActiveTab(tabType);
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");
linkPage(1);
} }
//fnTabLoad 함수에 대한 탭 선택 CSS 처리 함수
function fn_setActiveTab(tabType) {
var $tabs = $(".list_tab_wrap2 li"); // 전체 탭 리스트
$tabs.removeClass("active").find("button").removeAttr("title"); // 모든 탭 초기화
// tabType에 해당하는 탭 찾기
$tabs.each(function() {
var buttonText = $(this).find("button").text();
if ((tabType === '' && buttonText === "전체") ||
(tabType === 'S' && buttonText === "단문(SMS)") ||
(tabType === 'L' && buttonText === "장문(LMS)") ||
(tabType === 'M' && buttonText === "그림(MMS)")) {
$(this).addClass("active").find("button").attr("title", "선택됨");
}
});
$('#searchCondition02').val(tabType);
}
function fnSearch(pageNo){ function fnSearch(pageNo){
/* if(!fn_G_cmndataValueChk("startDate", "endDate", 3)){ /* if(!fn_G_cmndataValueChk("searchStartDate", "searchEndDate", 3)){
return; return;
}; */ }; */
fn_activateTab('')
fn_setActiveTab('')
console.log('fnSearch') console.log('fnSearch')
var form = document.searchForm; var form = document.searchForm;
form.pageIndex.value = pageNo ; form.pageIndex.value = pageNo ;
@ -274,27 +263,8 @@ function prevMonth(month) {
function fnExcelDownLoad(pageType, tabType){ function fnExcelDownLoad(pageType, tabType){
var form = document.searchForm; var form = document.searchForm;
var loginVO = '${LoginVO}';
form.stateType.value = pageType;
form.tabType.value = tabType;
if(loginVO == "" || loginVO == null){
alert("로그인 후 이용이 가능합니다.");
return false;
}
// 기간검색 유효성 검사 // 기간검색 유효성 검사
if ($("#startDate").val() == "" || $("#endDate").val() == "") {
alert("기간 설정을 먼저해주세요. 최근 3개월까지만 다운로드 가능합니다.")
return false;
}
else {
if ($("#startDate").val() < prevMonth(3)) {
alert("최근 3개월까지만 다운로드 가능합니다.")
return false;
}
}
if(confirm("엑셀 다운로드를 하시겠습니까?")){ if(confirm("엑셀 다운로드를 하시겠습니까?")){
@ -305,21 +275,6 @@ function fnExcelDownLoad(pageType, tabType){
} }
$(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){ function fnDeleteAddrNo(listType){
@ -537,7 +492,7 @@ function fnMsgSFDetailList(msgGroupId, resultType){
} }
/* 사용내역서 클릭 시 내역서 새창 팝업 오픈 */ /* 사용내역서 클릭 시 내역서 새창 팝업 오픈
function fnShowPrintPopup(tabType, type) { function fnShowPrintPopup(tabType, type) {
//만들려는 팝업의 크기 //만들려는 팝업의 크기
var popup_wid = '840'; var popup_wid = '840';
@ -553,7 +508,7 @@ function fnShowPrintPopup(tabType, type) {
$("#searchForm").attr({"action":"/web/mjon/msgsent/printMsgSentDataAjax.do", "method":"post"}).submit(); $("#searchForm").attr({"action":"/web/mjon/msgsent/printMsgSentDataAjax.do", "method":"post"}).submit();
} }
*/
function addrGroupDuplCnt() { function addrGroupDuplCnt() {
document.searchForm.addrGrpNm.value = $('#grpNm').val(); document.searchForm.addrGrpNm.value = $('#grpNm').val();
@ -744,9 +699,10 @@ function fnMjMsgReSendAll(msgGroupId, replaceCnt, electionCnt, advertisementCnt)
} }
//발송결과 - 대기/성공/실패 //발송결과 - 대기/성공/실패
function subContent(p_content_no){ function subContent(){
var sendData = $(document.listForm).serializeArray(); var sendData = $(document.searchForm).serializeArray();
console.log('sendData :: ', sendData);
var v_html_pre = '<table>' var v_html_pre = '<table>'
+ '<caption>구분, 충전금액, 사용금액, 잔액 등 정보를 제공하는 표</caption>' + '<caption>구분, 충전금액, 사용금액, 잔액 등 정보를 제공하는 표</caption>'
+ '<colgroup>' + '<colgroup>'
@ -891,60 +847,51 @@ function subContent(p_content_no){
</div> </div>
</div>--%> </div>--%>
<form id="searchForm" name="searchForm" method="post"> <form id="searchForm" name="searchForm" method="post">
<input type="hidden" id="pageIndex" name="pageIndex" value="1"/> <!-- <input type="hidden" id="pageIndex" name="pageIndex" value="1"/> -->
<input type="hidden" id="pageIndex" name="pageIndex" value="<c:out value="${searchVO.pageIndex}" />" />
<input type="hidden" id="pageUnit" name="pageUnit" value="<c:out value="${searchVO.pageUnit}" />" />
<input type="hidden" id="msgGroupIdList" name="msgGroupIdList" value=""/> <input type="hidden" id="msgGroupIdList" name="msgGroupIdList" value=""/>
<input type="hidden" id="msgGroupId" name="msgGroupId" value=""/>
<input type="hidden" name="searchSortCnd" value="<c:out value="${searchVO.searchSortCnd}" />" /> <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="searchSortOrd" value="<c:out value="${searchVO.searchSortOrd}" />" />
<input type="hidden" id="tabType" name="tabType" value="all"/><!-- 탭 종류 --> <input type="hidden" id="tabType" name="tabType" value="all"/><!-- 탭 종류 -->
<input type="hidden" id="stateType" name="stateType" value="all"/><!-- 발송상태 종류 --> <input type="hidden" id="stateType" name="stateType" value="all"/><!-- 발송상태 종류 -->
<input type="hidden" id="listType" name="listType" value="groupList"/><!-- 리스트 종류 --> <input type="hidden" id="listType" name="listType" value="groupList"/><!-- 리스트 종류 -->
<input type="hidden" id="addrGrpNm" name="addrGrpNm" value=""/><!-- 주소록 그룹 이름 --> <input type="hidden" id="addrGrpNm" name="addrGrpNm" value=""/><!-- 주소록 그룹 이름 -->
<input type="hidden" id="mberId" name="mberId" value="${LoginVO.id}"/><!-- 주소록 그룹 이름 --> <input type="hidden" id="mberId" name="mberId" value="${LoginVO.id}"/>
<input type="hidden" id="searchCondition01" name="searchCondition01" value="${searchVO.searchCondition01}"/>
<input type="hidden" id="searchCondition02" name="searchCondition02" value="${searchVO.searchCondition02}"/>
<div class="rev_content" id="tab5_1"> <div class="rev_content" id="tab5_1">
<!-- 페이지 로딩 속도를 위해서 ajax 로딩처리 -->
<div class="rev_admin" id ="revAdmin"> <!-- 발송결과 개선 : 문구추가 -->
<div class="titBox_result">
<p>- 최대 3개월간의 발송내역만 확인하실 수 있습니다.</p>
<p>- 전송내역이 필요한 경우 기간 내에 다운로드하여 주시기 바랍니다.</p>
<p>- 단문문자는 최대 24시간, 장문 및 그림문자는 최대 72시간까지 결과값이 수신되지 않은 경우 실패(비과금) 처리됩니다.</p>
</div> </div>
<!--// 발송결과 개선 : 문구추가 -->
<div class="excel_middle"> <div class="excel_middle">
<div class="select_btnWrap clearfix"> <div class="select_btnWrap clearfix">
<div class="btn_left"> <div class="btn_left">
<span class="cal_label">기간선택</span> <span class="cal_label">기간선택</span>
<div class="calendar_wrap"> <div class="calendar_wrap">
<input type="text" class="startDate inp calendar" title="검색 시작일" id="startDate" name="startDate" value="<c:out value='${mjonMsgSentVO.startDate}'/>" data-datecontrol="true"> <input type="text" class="searchStartDate inp calendar" title="검색 시작일" id="searchStartDate" name="searchStartDate" value="<c:out value='${mjonMsgSentVO.searchStartDate}'/>" data-datecontrol="true">
<span class="dateEtc">~</span> <span class="dateEtc">~</span>
<input type="text" class="endDate inp calendar" title="검색 종료일" id="endDate" name="endDate" value="<c:out value='${mjonMsgSentVO.endDate}'/>" data-datecontrol="true"> <input type="text" class="searchEndDate inp calendar" title="검색 종료일" id="searchEndDate" name="searchEndDate" value="<c:out value='${mjonMsgSentVO.searchEndDate}'/>" data-datecontrol="true">
</div> </div>
<!-- <button type="button">전월</button> <button type="button" onclick="setCalVal(lastfulstday,'searchStartDate');setCalVal( lastfuledday,'searchEndDate'); return false;" class="btnType btnType19">전월</button>
<button type="button">당월</button> --> <button type="button" onclick="setCalVal(thisfulstlday,'searchStartDate');setCalVal( thisfuledtlday,'searchEndDate'); return false;" class="btnType btnType19">당월</button>
<button type="button" onclick="setCalVal(lastfulstday,'startDate');setCalVal( lastfuledday,'endDate'); return false;" class="btnType btnType19">전월</button> <button type="button" onclick="fn_G_getPrevMonth('searchStartDate', 3);fn_G_getCurrDate('searchEndDate'); return false;" class="btnType btnType19">3개월</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="fn_G_getPrevMonth('startDate', 3);fn_G_getCurrDate('endDate'); return false;" class="btnType btnType19">3개월</button>
<button type="button" class="btnType6" onClick="javascript:fnSearch(1); return false;">조회</button> <button type="button" class="btnType6" onClick="javascript:fnSearch(1); return false;">조회</button>
</div> </div>
<div class="btn_right"> <div class="btn_right">
<%-- <label for="searchMsgType" class="label">문자형태 선택 == ${mjonMsgSentVO.searchMsgType}</label> <label for="searchCondition" class="label">검색 조건: ${mjonMsgSentVO.searchCondition == '2' ? '발신번호' : '문자내용'}</label>
<select name="searchMsgType" id="searchMsgType" class="selType2">
<option value="">전체</option>
<option value="S" <c:if test="${mjonMsgSentVO.searchMsgType == 'S'}">selected</c:if> >단문</option>
<option value="L" <c:if test="${mjonMsgSentVO.searchMsgType == 'L'}">selected</c:if> >장문</option>
<option value="M" <c:if test="${mjonMsgSentVO.searchMsgType == 'M'}">selected</c:if> >그림</option>
</select> --%>
<c:if test="${appMgmt }">
<label for="searchCondition_01" class="label">발신방식 == ${mjonMsgSentVO.searchCondition}</label>
<select name="searchCondition_01" id="searchCondition_01" class="selType2 select_all_btn">
<option value="" <c:if test="${empty mjonMsgSentVO.searchCondition_01 }">selected</c:if> >발송방식 전체</option>
<option value="H" <c:if test="${mjonMsgSentVO.searchCondition_01 == 'H'}">selected</c:if> >WEB</option>
<option value="A" <c:if test="${mjonMsgSentVO.searchCondition_01 == 'A'}">selected</c:if> >API</option>
</select>
</c:if>
<label for="searchCondition" class="label">발신번호 선택 == ${mjonMsgSentVO.searchCondition}</label>
<select name="searchCondition" id="searchCondition" class="selType2 select_btn"> <select name="searchCondition" id="searchCondition" class="selType2 select_btn">
<option value="2" <c:if test="${mjonMsgSentVO.searchCondition == '2'}">selected</c:if> >발신번호</option> <option value="2" <c:if test="${mjonMsgSentVO.searchCondition == '2'}">selected</c:if> >발신번호</option>
<option value="3" <c:if test="${mjonMsgSentVO.searchCondition == '3'}">selected</c:if> >수신번호</option> <option value="3" <c:if test="${mjonMsgSentVO.searchCondition == '3'}">selected</c:if> >문자내용</option>
</select> </select>
<div class="search"> <div class="search">
<label for="id" class="label"></label> <label for="id" class="label"></label>
@ -954,33 +901,73 @@ function subContent(p_content_no){
</div> </div>
</div> </div>
</div> </div>
<!-- 페이지 로딩 속도를 위해서 ajax 로딩처리 -->
<div class="rev_admin" id ="revAdmin">
</div>
<div class="list_tab_wrap2 type4"> <div class="list_tab_wrap2 type4">
<!-- tab button --> <!-- tab button -->
<ul class="list_tab"> <ul class="list_tab">
<li class="tab active"><button type="button" onclick="fnTabLoad('',0); return false;">전체</button></li> <li class="tab active"><button type="button" onclick="fnTabLoad(''); return false;">전체</button></li>
<li class="tab"><button type="button" onclick="fnTabLoad('S',1); return false;">단문(SMS)</button></li> <li class="tab"><button type="button" onclick="fnTabLoad('S'); return false;">단문(SMS)</button></li>
<li class="tab"><button type="button" onclick="fnTabLoad('L',2); return false;">장문(LMS)</button></li> <li class="tab"><button type="button" onclick="fnTabLoad('L'); return false;">장문(LMS)</button></li>
<li class="tab"><button type="button" onclick="fnTabLoad('M',3); return false;">그림(MMS)</button></li> <li class="tab"><button type="button" onclick="fnTabLoad('M'); return false;">그림(MMS)</button></li>
</ul><!--// tab button --> </ul><!--// tab button -->
</div> </div>
<!-- 예약관리 > 전체 --> <!-- 예약관리 > 전체 -->
<div class="price_history_cont current" id="listTab_2"> <div class="price_history_cont current price_wrap" id="listTab_2">
<!-- tab button --> <!-- tab button -->
<div class="table_tab_wrap"> <div class="table_tab_wrap">
<ul> <!--<ul>
<li class="tab active"> <li class="tab active">
<button type="button" onclick="fnListLoad('all','0'); return false;">전체</button></li> <button type="button" onclick="fnListLoad('all','0'); return false;">전체</button></li>
<li class="tab"><button type="button" onclick="fnListLoad('ready','1'); return false;">결과대기</button></li> <li class="tab"><button type="button" onclick="fnListLoad('ready','1'); return false;">결과대기</button></li>
<li class="tab"><button type="button" onclick="fnListLoad('complete','2'); return false;">정상수신</button></li> <li class="tab"><button type="button" onclick="fnListLoad('complete','2'); return false;">정상수신</button></li>
<li class="tab"><button type="button" onclick="fnListLoad('fail','3'); return false;">수신오류</button></li> <li class="tab"><button type="button" onclick="fnListLoad('fail','3'); return false;">수신오류</button></li>
</ul><!--// tab button --> </ul>// tab button -->
<div class="tab_depth1">
<!-- tab button -->
<ul>
<li class="tab ${empty searchVO.searchCondition_01 ? 'active' : ''}">
<button type="button" class="sendKindBtn" data-info="">전체</button>
</li>
<li class="tab ${searchVO.searchCondition_01 == '0' ? 'active' : ''}">
<button type="button" class="sendKindBtn" data-info="N">즉시</button>
</li>
<li class="tab ${searchVO.searchCondition_01 == '1' ? 'active' : ''}">
<button type="button" class="sendKindBtn" data-info="Y">예약</button>
</li>
</ul>
<!--// tab button -->
<!-- <div class="tab_depth1">
<a href="#none" class="on msgGgoupList">받는사람(전송건별)</a> <a href="#none" class="on msgGgoupList">받는사람(전송건별)</a>
<a href="#none" style="display: none;"></a> <a href="#none" style="display: none;"></a>
<a href="#none" class="msgPrivateList">받는사람(개인별)</a> <a href="#none" class="msgPrivateList">받는사람(개인별)</a>
<div class="on_active">받는사람(전송건별)</div> <div class="on_active">받는사람(전송건별)</div>
</div> -->
<!-- 발송화면 개선 : 발송결과 추가-->
<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>
<!--// 발송화면 개선 : 발송결과 추가-->
</div>
<!-- 발송관리 리스트 --> <!-- 발송관리 리스트 -->
<div class="table_cont current msgSentAllLoad" id="tableCont_1"> <div class="table_cont current msgSentAllLoad" id="tableCont_1">
</div><!-- //전체 종료 --> </div><!-- //전체 종료 -->

View File

@ -28,11 +28,11 @@ $(document).ready(function(){
<div class="rev_admin_in"> <div class="rev_admin_in">
<div class="rev_admin_top clearfix"> <div class="rev_admin_top clearfix">
<p>전체</p> <p>전체</p>
<c:set var="allTotal" value="${H_allSentCntVO.totCnt + A_allSentCntVO.totCnt }" /> <c:set var="allTotal" value="${H_allSentCntVO.totCnt}" />
<p><span><fmt:formatNumber value="${allTotal }" pattern="#,###"/></span> 건</p> <p><span><fmt:formatNumber value="${allTotal }" pattern="#,###"/></span> 건</p>
</div> </div>
<div class="rev_admin_btm admin_btm"> <div class="rev_admin_btm">
<P class="title_top">WEB<span class="title_num"><fmt:formatNumber value="${H_allSentCntVO.totCnt}" pattern="#,###"/><span>건</span></span></P> <%-- <P class="title_top">WEB<span class="title_num"><fmt:formatNumber value="${H_allSentCntVO.totCnt}" pattern="#,###"/><span>건</span></span></P> --%>
<dl> <dl>
<dt>대기</dt> <dt>대기</dt>
<dd><span class="c_002c9a"><fmt:formatNumber value="${H_allSentCntVO.waitCnt}" pattern="#,###"/></span>건</dd> <dd><span class="c_002c9a"><fmt:formatNumber value="${H_allSentCntVO.waitCnt}" pattern="#,###"/></span>건</dd>
@ -46,32 +46,15 @@ $(document).ready(function(){
<dd><span class="c_e40000"><fmt:formatNumber value="${H_allSentCntVO.failCnt}" pattern="#,###"/></span>건</dd> <dd><span class="c_e40000"><fmt:formatNumber value="${H_allSentCntVO.failCnt}" pattern="#,###"/></span>건</dd>
</dl> </dl>
</div> </div>
<c:if test="${appMgmt }">
<div class="rev_admin_btm admin_btm admin_btm_api">
<P class="title_top">API<span class="title_num"><fmt:formatNumber value="${A_allSentCntVO.totCnt}" pattern="#,###"/><span>건</span></span></P>
<dl>
<dt>대기</dt>
<dd><span class="c_002c9a"><fmt:formatNumber value="${A_allSentCntVO.waitCnt}" pattern="#,###"/></span>건</dd>
</dl>
<dl>
<dt>성공</dt>
<dd><span class="c_002c9a"><fmt:formatNumber value="${A_allSentCntVO.succCnt}" pattern="#,###"/></span>건</dd>
</dl>
<dl>
<dt>실패</dt>
<dd><span class="c_e40000"><fmt:formatNumber value="${A_allSentCntVO.failCnt}" pattern="#,###"/></span>건</dd>
</dl>
</div>
</c:if>
</div> </div>
<div class="rev_admin_in"> <div class="rev_admin_in">
<div class="rev_admin_top clearfix"> <div class="rev_admin_top clearfix">
<p>단문(SMS)</p> <p>단문(SMS)</p>
<c:set var="smsTotal" value="${H_smsSentCntVO.totCnt + A_smsSentCntVO.totCnt }" /> <c:set var="smsTotal" value="${H_smsSentCntVO.totCnt }" />
<p><span><fmt:formatNumber value="${smsTotal }" pattern="#,###"/></span> 건</p> <p><span><fmt:formatNumber value="${smsTotal }" pattern="#,###"/></span> 건</p>
</div> </div>
<div class="rev_admin_btm admin_btm"> <div class="rev_admin_btm">
<P class="title_top">WEB<span class="title_num"><fmt:formatNumber value="${H_smsSentCntVO.totCnt}" pattern="#,###"/><span>건</span></span></P> <%-- <P class="title_top">WEB<span class="title_num"><fmt:formatNumber value="${H_smsSentCntVO.totCnt}" pattern="#,###"/><span>건</span></span></P> --%>
<dl> <dl>
<dt>대기</dt> <dt>대기</dt>
<dd><span class="c_002c9a"><fmt:formatNumber value="${H_smsSentCntVO.waitCnt}" pattern="#,###"/></span>건</dd> <dd><span class="c_002c9a"><fmt:formatNumber value="${H_smsSentCntVO.waitCnt}" pattern="#,###"/></span>건</dd>
@ -85,32 +68,15 @@ $(document).ready(function(){
<dd><span class="c_e40000"><fmt:formatNumber value="${H_smsSentCntVO.failCnt}" pattern="#,###"/></span>건</dd> <dd><span class="c_e40000"><fmt:formatNumber value="${H_smsSentCntVO.failCnt}" pattern="#,###"/></span>건</dd>
</dl> </dl>
</div> </div>
<c:if test="${appMgmt }">
<div class="rev_admin_btm admin_btm admin_btm_api">
<P class="title_top">API<span class="title_num"><fmt:formatNumber value="${A_smsSentCntVO.totCnt}" pattern="#,###"/><span>건</span></span></P>
<dl>
<dt>대기</dt>
<dd><span class="c_002c9a"><fmt:formatNumber value="${A_smsSentCntVO.waitCnt}" pattern="#,###"/></span>건</dd>
</dl>
<dl>
<dt>성공</dt>
<dd><span class="c_002c9a"><fmt:formatNumber value="${A_smsSentCntVO.succCnt}" pattern="#,###"/></span>건</dd>
</dl>
<dl>
<dt>실패</dt>
<dd><span class="c_e40000"><fmt:formatNumber value="${A_smsSentCntVO.failCnt}" pattern="#,###"/></span>건</dd>
</dl>
</div>
</c:if>
</div> </div>
<div class="rev_admin_in"> <div class="rev_admin_in">
<div class="rev_admin_top clearfix"> <div class="rev_admin_top clearfix">
<p>장문(LMS)</p> <p>장문(LMS)</p>
<c:set var="lmsTotal" value="${H_lmsSentCntVO.totCnt + A_lmsSentCntVO.totCnt }" /> <c:set var="lmsTotal" value="${H_lmsSentCntVO.totCnt }" />
<p><span><fmt:formatNumber value="${lmsTotal }" pattern="#,###"/></span> 건</p> <p><span><fmt:formatNumber value="${lmsTotal }" pattern="#,###"/></span> 건</p>
</div> </div>
<div class="rev_admin_btm admin_btm"> <div class="rev_admin_btm">
<P class="title_top">WEB<span class="title_num"><fmt:formatNumber value="${H_lmsSentCntVO.totCnt}" pattern="#,###"/><span>건</span></span></P> <%-- <P class="title_top">WEB<span class="title_num"><fmt:formatNumber value="${H_lmsSentCntVO.totCnt}" pattern="#,###"/><span>건</span></span></P> --%>
<dl> <dl>
<dt>대기</dt> <dt>대기</dt>
<dd><span class="c_002c9a"><fmt:formatNumber value="${H_lmsSentCntVO.waitCnt}" pattern="#,###"/></span>건</dd> <dd><span class="c_002c9a"><fmt:formatNumber value="${H_lmsSentCntVO.waitCnt}" pattern="#,###"/></span>건</dd>
@ -124,32 +90,15 @@ $(document).ready(function(){
<dd><span class="c_e40000"><fmt:formatNumber value="${H_lmsSentCntVO.failCnt}" pattern="#,###"/></span>건</dd> <dd><span class="c_e40000"><fmt:formatNumber value="${H_lmsSentCntVO.failCnt}" pattern="#,###"/></span>건</dd>
</dl> </dl>
</div> </div>
<c:if test="${appMgmt }">
<div class="rev_admin_btm admin_btm admin_btm_api">
<P class="title_top">API<span class="title_num"><fmt:formatNumber value="${A_lmsSentCntVO.totCnt}" pattern="#,###"/><span>건</span></span></P>
<dl>
<dt>대기</dt>
<dd><span class="c_002c9a"><fmt:formatNumber value="${A_lmsSentCntVO.waitCnt}" pattern="#,###"/></span>건</dd>
</dl>
<dl>
<dt>성공</dt>
<dd><span class="c_002c9a"><fmt:formatNumber value="${A_lmsSentCntVO.succCnt}" pattern="#,###"/></span>건</dd>
</dl>
<dl>
<dt>실패</dt>
<dd><span class="c_e40000"><fmt:formatNumber value="${A_lmsSentCntVO.failCnt}" pattern="#,###"/></span>건</dd>
</dl>
</div>
</c:if>
</div> </div>
<div class="rev_admin_in"> <div class="rev_admin_in">
<div class="rev_admin_top clearfix"> <div class="rev_admin_top clearfix">
<p>그림(MMS)</p> <p>그림(MMS)</p>
<c:set var="mmsTotal" value="${H_mmsSentCntVO.totCnt + A_mmsSentCntVO.totCnt }" /> <c:set var="mmsTotal" value="${H_mmsSentCntVO.totCnt }" />
<p><span><fmt:formatNumber value="${mmsTotal }" pattern="#,###"/></span> 건</p> <p><span><fmt:formatNumber value="${mmsTotal }" pattern="#,###"/></span> 건</p>
</div> </div>
<div class="rev_admin_btm admin_btm"> <div class="rev_admin_btm">
<P class="title_top">WEB<span class="title_num"><fmt:formatNumber value="${H_mmsSentCntVO.totCnt}" pattern="#,###"/><span>건</span></span></P> <%-- <P class="title_top">WEB<span class="title_num"><fmt:formatNumber value="${H_mmsSentCntVO.totCnt}" pattern="#,###"/><span>건</span></span></P> --%>
<dl> <dl>
<dt>대기</dt> <dt>대기</dt>
<dd><span class="c_002c9a"><fmt:formatNumber value="${H_mmsSentCntVO.waitCnt}" pattern="#,###"/></span>건</dd> <dd><span class="c_002c9a"><fmt:formatNumber value="${H_mmsSentCntVO.waitCnt}" pattern="#,###"/></span>건</dd>
@ -163,21 +112,4 @@ $(document).ready(function(){
<dd><span class="c_e40000"><fmt:formatNumber value="${H_mmsSentCntVO.failCnt}" pattern="#,###"/></span>건</dd> <dd><span class="c_e40000"><fmt:formatNumber value="${H_mmsSentCntVO.failCnt}" pattern="#,###"/></span>건</dd>
</dl> </dl>
</div> </div>
<c:if test="${appMgmt }">
<div class="rev_admin_btm admin_btm admin_btm_api">
<P class="title_top">API<span class="title_num"><fmt:formatNumber value="${A_mmsSentCntVO.totCnt}" pattern="#,###"/><span>건</span></span></P>
<dl>
<dt>대기</dt>
<dd><span class="c_002c9a"><fmt:formatNumber value="${A_mmsSentCntVO.waitCnt}" pattern="#,###"/></span>건</dd>
</dl>
<dl>
<dt>성공</dt>
<dd><span class="c_002c9a"><fmt:formatNumber value="${A_mmsSentCntVO.succCnt}" pattern="#,###"/></span>건</dd>
</dl>
<dl>
<dt>실패</dt>
<dd><span class="c_e40000"><fmt:formatNumber value="${A_mmsSentCntVO.failCnt}" pattern="#,###"/></span>건</dd>
</dl>
</div>
</c:if>
</div> </div>

View File

@ -4,6 +4,8 @@
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%> <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
<%@ taglib prefix="ec" uri="/WEB-INF/tld/ecnet_tld.tld"%> <%@ taglib prefix="ec" uri="/WEB-INF/tld/ecnet_tld.tld"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> <%@ 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 src="https://t1.daumcdn.net/mapjsapi/bundle/postcode/prod/postcode.v2.js"></script>
<script language=javascript> <script language=javascript>
@ -845,8 +847,9 @@ function callTo() {
</td> </td>
<td> <td>
<c:choose> <c:choose>
<c:when test="${not empty resultSentMsg.regdate}"> <c:when test="${not empty resultSentMsg.regDate}">
<fmt:formatDate value="${resultSentMsg.regdate}" pattern="yyyy-MM-dd HH:mm:ss"/> <%-- <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:when>
<c:otherwise> <c:otherwise>
- -

View File

@ -0,0 +1,31 @@
<?xml version="1.0" encoding="UTF-8"?>
<taglib xmlns="http://java.sun.com/xml/ns/j2ee"
version="2.1">
<display-name>Custom Functions</display-name>
<tlib-version>1.0</tlib-version>
<short-name>custom-funcs</short-name>
<!-- PhoneFormatUtil 클래스의 함수 -->
<function>
<name>formatPhone</name> <!-- JSP에서 호출할 함수명 -->
<function-class>itn.com.cmm.util.StringUtil2</function-class> <!-- 해당 함수를 포함하는 Java 클래스 -->
<function-signature>java.lang.String formatPhone(java.lang.String)</function-signature> <!-- 함수의 반환 타입 및 매개변수 타입 (메서드 시그니처) -->
</function>
<function>
<name>setStrToDataFormatter</name>
<function-class>itn.com.cmm.util.DateUtils</function-class>
<function-signature>java.lang.String setStrToDataFormatter(java.lang.String, java.lang.String)</function-signature>
</function>
<!-- 예시) function 추가 - StringUtil 클래스의 함수 -->
<!--
<function>
<name>toUpper</name>
<function-class>com.example.utils.StringUtil</function-class>
<function-signature>java.lang.String toUpperCase(java.lang.String)</function-signature>
</function>
-->
</taglib>

View File

@ -13,6 +13,7 @@
// 문자 그룹정보 => 재전송용 // 문자 그룹정보 => 재전송용
function getMjMsgGroupInfoByResend() { function getMjMsgGroupInfoByResend() {
console.log('재전송 시 싱행되는 function');
$.ajax({ $.ajax({
type: "POST", type: "POST",
url: "/web/mjon/msgdata/selectMjMsgGroupInfoByResendAjax.do", url: "/web/mjon/msgdata/selectMjMsgGroupInfoByResendAjax.do",
@ -33,6 +34,7 @@ function getMjMsgGroupInfoByResend() {
var smsTxt = msgData.smsTxt; var smsTxt = msgData.smsTxt;
var subject = msgData.subject; var subject = msgData.subject;
var subjectChkYn = msgData.subjectChkYn;
var fileId = ""; var fileId = "";
var filePath = ""; var filePath = "";
var len = fileData.length; var len = fileData.length;
@ -56,12 +58,14 @@ function getMjMsgGroupInfoByResend() {
console.log('msgData : ', msgData); console.log('msgData : ', msgData);
console.log('msgData : ', msgData); console.log('msgData : ', msgData);
// 문자제목 // 문자제목
if (msgData.subject != null && msgData.subject != "") { if (subject != null && subject != "") {
if(subjectChkYn == 'Y'){
$('.msg_title').addClass('active'); $('.msg_title').addClass('active');
$("input:radio[name='title_status']:radio[value='Y']").prop('checked', true); // 선택하기 $("input:radio[name='subjectChkYn']:radio[value='Y']").prop('checked', true); // 선택하기
$('.textbox').show(); $('.textbox').show();
$("#mmsSubject").val(subject); $("#mmsSubject").val(subject);
} }
}
// 문자내용 // 문자내용
if (smsTxt.indexOf("(광고)") == 0) { if (smsTxt.indexOf("(광고)") == 0) {
@ -1280,10 +1284,8 @@ function sendMsgAjax_advc(){
dataType: 'json', dataType: 'json',
success: function (data) { success: function (data) {
console.log('data : ', data);
var status = data.status; var status = data.status;
if("OK" == status){ if("OK" == status){ // 성공
var smsCnt = Number(data.object.resultSts); var smsCnt = Number(data.object.resultSts);
var blockCnt = Number(data.object.resultBlockSts); var blockCnt = Number(data.object.resultBlockSts);
@ -1309,19 +1311,19 @@ function sendMsgAjax_advc(){
} }
}else if("BAD_REQUEST" == status){ }else if("BAD_REQUEST" == status){ // 오류
alert(data.message); alert(data.message);
return false; return false;
}else if("UNAUTHORIZED" == status){ }else if("UNAUTHORIZED" == status){ // 정지 회원 처리
alert(data.message); alert(data.message);
//문자발송 URL Move //문자발송 URL Move
goMsgUrlMove(); goMsgUrlMove();
return false; return false;
}else if("NO_CONTENT" == status){ }else if("NO_CONTENT" == status){ // 발송로직에서 이미지 처리 오류 시 처리
$('.pop_msg_fails').css({'display':'block','opacity':'1','left':'50%','top':'50%','transform':'translate(-50%,-50%)'}); $('.pop_msg_fails').css({'display':'block','opacity':'1','left':'50%','top':'50%','transform':'translate(-50%,-50%)'});
$('.pop_msg_fails .msg_text').html(returnData.message); $('.pop_msg_fails .msg_text').html(returnData.message);
@ -1363,7 +1365,7 @@ function validateForm(form) {
} }
if (form.title_status.value === 'N') { if (form.subjectChkYn.value === 'N') {
form.mmsSubject.value = ""; form.mmsSubject.value = "";
} else if (getSpacialStringChk(form.mmsSubject.value)) { } else if (getSpacialStringChk(form.mmsSubject.value)) {
alert("문자 제목에는 치환문자(엑셀 내 *이름*, *1*, *2*, *3*, *4* 등)를 사용하실 수 없습니다."); alert("문자 제목에는 치환문자(엑셀 내 *이름*, *1*, *2*, *3*, *4* 등)를 사용하실 수 없습니다.");
@ -1371,7 +1373,7 @@ function validateForm(form) {
} }
//문자제목에 이모지가 있는지 체크 //문자제목에 이모지가 있는지 체크
var titleStatusYn = $("input[name='title_status']:checked").val(); var titleStatusYn = $("input[name='subjectChkYn']:checked").val();
if(titleStatusYn == 'Y') { if(titleStatusYn == 'Y') {
if(!emojiCheck(form.mmsSubject.value)) return false; if(!emojiCheck(form.mmsSubject.value)) return false;
} }
@ -1710,15 +1712,15 @@ function msgSpamClose(obj){
function msgResultLink(){ function msgResultLink(){
var reserYn = $("input[name=reserYn]:checked").val(); // 예약 발송 여부 확인 var reserYn = $("input[name=reserYn]:checked").val(); // 예약 발송 여부 확인
if(reserYn == 'Y'){ /*if(reserYn == 'Y'){
location.href="/web/mjon/reservmsg/selectReservMsgView.do"; location.href="/web/mjon/reservmsg/selectReservMsgView.do";
}else{ }else{*/
location.href="/web/mjon/msgsent/selectMsgSentView.do"; location.href="/web/mjon/msgsent/selectMsgSentView.do";
} /*}*/
} }