Merge branch 'advc'
This commit is contained in:
commit
0018554058
@ -3,6 +3,7 @@ package itn.com.cmm.util;
|
||||
import java.text.ParseException;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.time.LocalDate;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.time.temporal.ChronoUnit;
|
||||
import java.util.Date;
|
||||
@ -185,4 +186,20 @@ public final class DateUtils {
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
@ -59,7 +59,6 @@ public final class FileUtil {
|
||||
while ((read = fileInputStream.read(buffer)) != -1) { // 1024바이트씩 계속 읽으면서 outputStream에 저장, -1이 나오면 더이상 읽을 파일이 없음
|
||||
out.write(buffer, 0, read);
|
||||
}
|
||||
|
||||
} catch (Exception e) {
|
||||
throw new Exception("download error");
|
||||
}
|
||||
|
||||
@ -276,7 +276,6 @@ public final class MsgSendUtils {
|
||||
for (Map.Entry<String, Function<MjonMsgSendVO, String>> entry : placeholders.entrySet()) {
|
||||
String placeholder = entry.getKey();
|
||||
String value = entry.getValue().apply(sendVO);
|
||||
System.out.println("");
|
||||
// log.info(" + smsTxtTemp [{}]", smsTxtTemp);
|
||||
// log.info(" + placeholder [{}]", placeholder);
|
||||
// log.info(" + value [{}]", value);
|
||||
|
||||
32
src/main/java/itn/let/cmm/vo/FileInfoVO.java
Normal file
32
src/main/java/itn/let/cmm/vo/FileInfoVO.java
Normal 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; // 파일 순번
|
||||
|
||||
}
|
||||
@ -498,7 +498,6 @@ public class KakaoSentController {
|
||||
* 발송관리 엑셀다운로드 기능 - 카카오톡
|
||||
* @param searchVO
|
||||
* @param model
|
||||
* @return "/web/mjon/msgsent/msgSentExcelDownLoadAjax.do"
|
||||
* @throws Exception
|
||||
*/
|
||||
@RequestMapping(value= {"/web/mjon/msgsent/kakaoSentExcelDownLoadAjax.do"})
|
||||
|
||||
@ -109,4 +109,8 @@ public interface AddrService {
|
||||
void deleteAddr_advc(AddrGroupVO addrGroupVO) throws Exception;
|
||||
|
||||
int getAddrCount(AddrGroupVO addrGroupVO) throws Exception;
|
||||
|
||||
StatusResponse insertByAddrGrpDataAndAddrDataAjax(AddrVO addrVO) throws Exception;
|
||||
|
||||
StatusResponse deleteAddrNoDataAjax(AddrVO addrVO) throws Exception;
|
||||
}
|
||||
|
||||
@ -292,5 +292,9 @@ public class AddrDAO extends EgovAbstractDAO {
|
||||
return (Integer)select("AddrDAO.getAddrCount", addrVO);
|
||||
}
|
||||
|
||||
public int deleteAddrPhoneNo(AddrVO addrVO) {
|
||||
return update("AddrDAO.deleteAddrPhoneNo", addrVO);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@ -34,6 +34,8 @@ import itn.let.mjo.addr.service.AddrGroupVO;
|
||||
import itn.let.mjo.addr.service.AddrService;
|
||||
import itn.let.mjo.addr.service.AddrTransHistVO;
|
||||
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 최초 생성
|
||||
* </pre>
|
||||
*/
|
||||
@Slf4j
|
||||
@Service("AddrService")
|
||||
public class AddrServiceImpl extends EgovAbstractServiceImpl implements AddrService {
|
||||
|
||||
@ -645,4 +648,80 @@ public class AddrServiceImpl extends EgovAbstractServiceImpl implements AddrSer
|
||||
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);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -4,6 +4,7 @@ import java.io.BufferedReader;
|
||||
import java.io.InputStreamReader;
|
||||
import java.io.OutputStream;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Calendar;
|
||||
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.XSSFSheet;
|
||||
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.ui.Model;
|
||||
import org.springframework.ui.ModelMap;
|
||||
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.RequestParam;
|
||||
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.utl.fcc.service.EgovStringUtil;
|
||||
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.AddrGroupVO;
|
||||
import itn.let.mjo.addr.service.AddrService;
|
||||
import itn.let.mjo.addr.service.AddrTransHistVO;
|
||||
import itn.let.mjo.addr.service.AddrVO;
|
||||
import itn.let.mjo.msgdata.service.PhoneVO;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
/**
|
||||
* 주소록 관한 controller 클래스를 정의한다.
|
||||
@ -75,6 +81,7 @@ import itn.let.mjo.msgdata.service.PhoneVO;
|
||||
*
|
||||
* </pre>
|
||||
*/
|
||||
@Slf4j
|
||||
@Controller
|
||||
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) {
|
||||
|
||||
|
||||
@ -34,6 +34,7 @@ public class MjonMsgVO extends ComDefaultVO{
|
||||
private String[] callToList; // '수신번호리스트',
|
||||
private String callFrom; // '발신번호 (하이픈 등의 문자를 제외한 12byte이하의 숫자로 입력한다.)',
|
||||
private String subject; // 'MMS용 메시지제목',
|
||||
private String subjectChkYn; // 'MMS용 메시지제목',
|
||||
private String smsTxt; // 'SMS용 메시지본문',
|
||||
private String smsTxtArea;//문자 작성 화면 본문 내용
|
||||
private String msgType; // '메시지의 (4: SMS 전송, 5: URL 전송, 6: MMS전송, 7: BARCODE전송, 8: 카카오 알림톡 전송)',
|
||||
|
||||
@ -28,6 +28,7 @@ public class MjonMsgDataVO extends UserDefaultVO{
|
||||
private List msgIdList;
|
||||
private List msgSeqList;
|
||||
private String subject;
|
||||
private String subjectChkYn;
|
||||
private String mmsSubject;
|
||||
private String smsTxt;
|
||||
private String smsLen;
|
||||
|
||||
@ -4150,6 +4150,7 @@ public class MjonMsgDataServiceImpl extends EgovAbstractServiceImpl implements M
|
||||
|
||||
instTotalCnt += instCnt;
|
||||
this.insertMsgGroupDataTb_advc(instCnt, mjonMsgVO, groupedMsgList);
|
||||
log.info(" :: group data insert :: ");
|
||||
|
||||
// 금액 및 포인트 insert
|
||||
priceAndPoint.insertCashAndPoint(
|
||||
|
||||
@ -114,8 +114,9 @@ import itn.let.uss.umt.service.EgovUserManageService;
|
||||
import itn.let.uss.umt.service.MberManageVO;
|
||||
import itn.let.uss.umt.service.UserManageVO;
|
||||
import itn.let.utl.sim.service.EgovClntInfo;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
|
||||
@Slf4j
|
||||
@Controller
|
||||
public class MjonMsgDataController {
|
||||
|
||||
@ -816,6 +817,7 @@ public class MjonMsgDataController {
|
||||
|
||||
mjonMsgDataVO.setMsgSeqList(tempList);
|
||||
|
||||
log.info("===================================================");
|
||||
List<MjonMsgVO> resultList = mjonMsgDataService.selectReSendMsgDataList(mjonMsgDataVO);
|
||||
|
||||
//문자발송 이미지 처리 - 사용하지 않아서 주석처리함.
|
||||
@ -5961,7 +5963,6 @@ public class MjonMsgDataController {
|
||||
* 발송관리 엑셀다운로드 기능
|
||||
* @param searchVO
|
||||
* @param model
|
||||
* @return "/web/mjon/msgsent/msgSentExcelDownLoadAjax.do"
|
||||
* @throws Exception
|
||||
*/
|
||||
@RequestMapping(value= {"/web/mjon/msgdata/recieveCallToListExcelDownAjax.do"})
|
||||
|
||||
@ -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;
|
||||
}
|
||||
33
src/main/java/itn/let/mjo/msgsent/service/MjonMsgSWFDTO.java
Normal file
33
src/main/java/itn/let/mjo/msgsent/service/MjonMsgSWFDTO.java
Normal 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; // 분할여부
|
||||
|
||||
}
|
||||
@ -1,6 +1,10 @@
|
||||
package itn.let.mjo.msgsent.service;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
|
||||
import itn.let.fax.addr.service.FaxAddrGroupVO;
|
||||
import itn.let.mjo.addr.service.AddrGroupVO;
|
||||
@ -16,6 +20,8 @@ public interface MjonMsgSentService {
|
||||
//발송 관리 전체 발송 리스트 불러오기
|
||||
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;
|
||||
|
||||
@ -55,4 +61,13 @@ public interface MjonMsgSentService {
|
||||
//첨부파일 정보 불러오기
|
||||
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;
|
||||
|
||||
|
||||
}
|
||||
|
||||
@ -4,7 +4,17 @@ import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
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{
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
@ -16,8 +26,9 @@ public class MjonMsgSentVO extends UserDefaultVO{
|
||||
private List msgGroupIdList; //문자 그룹아이디 리스트
|
||||
private String smsTxt; //문자 내용
|
||||
private String subject; //문자 제목
|
||||
private Date regdate; //문자 등록일자
|
||||
private Date reqdate; //문자 예약 발송 일자
|
||||
private String subjectChkYn; //문자 제목
|
||||
private String regDate; //문자 등록일자
|
||||
private String reqDate; //문자 예약 발송 일자
|
||||
private String callFrom; //발신번호
|
||||
private String callTo; //수신자 번호
|
||||
private List callToList; //수신자 번호 리스트
|
||||
@ -86,399 +97,16 @@ public class MjonMsgSentVO extends UserDefaultVO{
|
||||
private String successCount;
|
||||
|
||||
private String resultSValue;
|
||||
private String resultFValue;
|
||||
private String resultWValue;
|
||||
private String resultWFValue;
|
||||
|
||||
public String getSuccessCount() {
|
||||
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;
|
||||
}
|
||||
private String divideYN; // 분할여부
|
||||
|
||||
public String getAtchFiles() {
|
||||
return atchFiles;
|
||||
}
|
||||
public void setAtchFiles(String atchFiles) {
|
||||
this.atchFiles = atchFiles;
|
||||
}
|
||||
private String statusCd; // 진행상태 코드
|
||||
|
||||
public String getMsgId() {
|
||||
return msgId;
|
||||
}
|
||||
public void setMsgId(String msgId) {
|
||||
this.msgId = msgId;
|
||||
}
|
||||
public int getSuccessCnt() {
|
||||
return successCnt;
|
||||
}
|
||||
public void setSuccessCnt(int successCnt) {
|
||||
this.successCnt = successCnt;
|
||||
}
|
||||
public String getMsgTypeName() {
|
||||
return msgTypeName;
|
||||
}
|
||||
public void setMsgTypeName(String msgTypeName) {
|
||||
this.msgTypeName = msgTypeName;
|
||||
}
|
||||
public int getOrderByCode() {
|
||||
return orderByCode;
|
||||
}
|
||||
public void setOrderByCode(int orderByCode) {
|
||||
this.orderByCode = orderByCode;
|
||||
}
|
||||
public String getAtchFileId() {
|
||||
return atchFileId;
|
||||
}
|
||||
public void setAtchFileId(String atchFileId) {
|
||||
this.atchFileId = atchFileId;
|
||||
}
|
||||
public String getFileSn() {
|
||||
return fileSn;
|
||||
}
|
||||
public void setFileSn(String fileSn) {
|
||||
this.fileSn = fileSn;
|
||||
}
|
||||
public String getUserId() {
|
||||
return userId;
|
||||
}
|
||||
public void setUserId(String userId) {
|
||||
this.userId = userId;
|
||||
}
|
||||
public String getAddrNm() {
|
||||
return addrNm;
|
||||
}
|
||||
public void setAddrNm(String addrNm) {
|
||||
this.addrNm = addrNm;
|
||||
}
|
||||
public String getMsgSeq() {
|
||||
return msgSeq;
|
||||
}
|
||||
public void setMsgSeq(String msgSeq) {
|
||||
this.msgSeq = msgSeq;
|
||||
}
|
||||
public String getMsgGroupId() {
|
||||
return msgGroupId;
|
||||
}
|
||||
public void setMsgGroupId(String msgGroupId) {
|
||||
this.msgGroupId = msgGroupId;
|
||||
}
|
||||
public List getMsgGroupIdList() {
|
||||
return msgGroupIdList;
|
||||
}
|
||||
public void setMsgGroupIdList(List msgGroupIdList) {
|
||||
this.msgGroupIdList = msgGroupIdList;
|
||||
}
|
||||
public String getSmsTxt() {
|
||||
return smsTxt;
|
||||
}
|
||||
public void setSmsTxt(String smsTxt) {
|
||||
this.smsTxt = smsTxt;
|
||||
}
|
||||
public String getSubject() {
|
||||
return subject;
|
||||
}
|
||||
public void setSubject(String subject) {
|
||||
this.subject = subject;
|
||||
}
|
||||
public Date getRegdate() {
|
||||
return regdate;
|
||||
}
|
||||
public void setRegdate(Date regdate) {
|
||||
this.regdate = regdate;
|
||||
}
|
||||
public Date getReqdate() {
|
||||
return reqdate;
|
||||
}
|
||||
public void setReqdate(Date reqdate) {
|
||||
this.reqdate = reqdate;
|
||||
}
|
||||
public String getCallFrom() {
|
||||
return callFrom;
|
||||
}
|
||||
public void setCallFrom(String callFrom) {
|
||||
this.callFrom = callFrom;
|
||||
}
|
||||
public String getCallTo() {
|
||||
return callTo;
|
||||
}
|
||||
public void setCallTo(String callTo) {
|
||||
this.callTo = callTo;
|
||||
}
|
||||
public List getCallToList() {
|
||||
return callToList;
|
||||
}
|
||||
public void setCallToList(List callToList) {
|
||||
this.callToList = callToList;
|
||||
}
|
||||
public String getTotPrice() {
|
||||
return totPrice;
|
||||
}
|
||||
public void setTotPrice(String totPrice) {
|
||||
this.totPrice = totPrice;
|
||||
}
|
||||
public String getEachPrice() {
|
||||
return eachPrice;
|
||||
}
|
||||
public void setEachPrice(String eachPrice) {
|
||||
this.eachPrice = eachPrice;
|
||||
}
|
||||
public String getDelFlag() {
|
||||
return delFlag;
|
||||
}
|
||||
public void setDelFlag(String delFlag) {
|
||||
this.delFlag = delFlag;
|
||||
}
|
||||
public String getTotMsgPrice() {
|
||||
return totMsgPrice;
|
||||
}
|
||||
public void setTotMsgPrice(String totMsgPrice) {
|
||||
this.totMsgPrice = totMsgPrice;
|
||||
}
|
||||
public String getRsltCode() {
|
||||
return rsltCode;
|
||||
}
|
||||
public void setRsltCode(String rsltCode) {
|
||||
this.rsltCode = rsltCode;
|
||||
}
|
||||
public String getRsltCode2() {
|
||||
return rsltCode2;
|
||||
}
|
||||
public void setRsltCode2(String rsltCode2) {
|
||||
this.rsltCode2 = rsltCode2;
|
||||
}
|
||||
public String getMsgType() {
|
||||
return msgType;
|
||||
}
|
||||
public void setMsgType(String msgType) {
|
||||
this.msgType = msgType;
|
||||
}
|
||||
public String getMsgGroupCnt() {
|
||||
return msgGroupCnt;
|
||||
}
|
||||
public void setMsgGroupCnt(String msgGroupCnt) {
|
||||
this.msgGroupCnt = msgGroupCnt;
|
||||
}
|
||||
public String getFileCnt() {
|
||||
return fileCnt;
|
||||
}
|
||||
public void setFileCnt(String fileCnt) {
|
||||
this.fileCnt = fileCnt;
|
||||
}
|
||||
public String getTotMsgCnt() {
|
||||
return totMsgCnt;
|
||||
}
|
||||
public void setTotMsgCnt(String totMsgCnt) {
|
||||
this.totMsgCnt = totMsgCnt;
|
||||
}
|
||||
public String getCurState() {
|
||||
return curState;
|
||||
}
|
||||
public void setCurState(String curState) {
|
||||
this.curState = curState;
|
||||
}
|
||||
public String getReserveYn() {
|
||||
return reserveYn;
|
||||
}
|
||||
public void setReserveYn(String reserveYn) {
|
||||
this.reserveYn = reserveYn;
|
||||
}
|
||||
public String getReserveCYn() {
|
||||
return reserveCYn;
|
||||
}
|
||||
public void setReserveCYn(String reserveCYn) {
|
||||
this.reserveCYn = reserveCYn;
|
||||
}
|
||||
public String getFilePath1() {
|
||||
return filePath1;
|
||||
}
|
||||
public void setFilePath1(String filePath1) {
|
||||
this.filePath1 = filePath1;
|
||||
}
|
||||
public String getFilePath2() {
|
||||
return filePath2;
|
||||
}
|
||||
public void setFilePath2(String filePath2) {
|
||||
this.filePath2 = filePath2;
|
||||
}
|
||||
public String getFilePath3() {
|
||||
return filePath3;
|
||||
}
|
||||
public void setFilePath3(String filePath3) {
|
||||
this.filePath3 = filePath3;
|
||||
}
|
||||
public Date getSentDate() {
|
||||
return sentDate;
|
||||
}
|
||||
public void setSentDate(Date sentDate) {
|
||||
this.sentDate = sentDate;
|
||||
}
|
||||
public String getAgentCode() {
|
||||
return agentCode;
|
||||
}
|
||||
public void setAgentCode(String agentCode) {
|
||||
this.agentCode = agentCode;
|
||||
}
|
||||
public String getUserData() {
|
||||
return userData;
|
||||
}
|
||||
public void setUserData(String userData) {
|
||||
this.userData = userData;
|
||||
}
|
||||
public List getUserDataList() {
|
||||
return userDataList;
|
||||
}
|
||||
public void setUserDataList(List userDataList) {
|
||||
this.userDataList = userDataList;
|
||||
}
|
||||
public Date getCancelDate() {
|
||||
return cancelDate;
|
||||
}
|
||||
public void setCancelDate(Date cancelDate) {
|
||||
this.cancelDate = cancelDate;
|
||||
}
|
||||
public String getStartDate() {
|
||||
return startDate;
|
||||
}
|
||||
public void setStartDate(String startDate) {
|
||||
this.startDate = startDate;
|
||||
}
|
||||
public String getEndDate() {
|
||||
return endDate;
|
||||
}
|
||||
public void setEndDate(String endDate) {
|
||||
this.endDate = endDate;
|
||||
}
|
||||
public String getSearchMsgType() {
|
||||
return searchMsgType;
|
||||
}
|
||||
public void setSearchMsgType(String searchMsgType) {
|
||||
this.searchMsgType = searchMsgType;
|
||||
}
|
||||
public String getTabType() {
|
||||
return tabType;
|
||||
}
|
||||
public void setTabType(String tabType) {
|
||||
this.tabType = tabType;
|
||||
}
|
||||
public String getStateType() {
|
||||
return stateType;
|
||||
}
|
||||
public void setStateType(String stateType) {
|
||||
this.stateType = stateType;
|
||||
}
|
||||
public String getListType() {
|
||||
return listType;
|
||||
}
|
||||
public void setListType(String listType) {
|
||||
this.listType = listType;
|
||||
}
|
||||
public String getResultType() {
|
||||
return resultType;
|
||||
}
|
||||
public void setResultType(String resultType) {
|
||||
this.resultType = resultType;
|
||||
}
|
||||
public String getMsgResultCnt() {
|
||||
return msgResultCnt;
|
||||
}
|
||||
public void setMsgResultCnt(String msgResultCnt) {
|
||||
this.msgResultCnt = msgResultCnt;
|
||||
}
|
||||
public String getMsgResultSts() {
|
||||
return msgResultSts;
|
||||
}
|
||||
public void setMsgResultSts(String msgResultSts) {
|
||||
this.msgResultSts = msgResultSts;
|
||||
}
|
||||
public String getAddrGrpNm() {
|
||||
return addrGrpNm;
|
||||
}
|
||||
public void setAddrGrpNm(String addrGrpNm) {
|
||||
this.addrGrpNm = addrGrpNm;
|
||||
}
|
||||
public int getOrderByrsltCode() {
|
||||
return orderByrsltCode;
|
||||
}
|
||||
public void setOrderByrsltCode(int orderByrsltCode) {
|
||||
this.orderByrsltCode = orderByrsltCode;
|
||||
}
|
||||
public String getMsgResult() {
|
||||
return msgResult;
|
||||
}
|
||||
public void setMsgResult(String msgResult) {
|
||||
this.msgResult = msgResult;
|
||||
}
|
||||
public String getNtceBgnde() {
|
||||
return ntceBgnde;
|
||||
}
|
||||
public void setNtceBgnde(String ntceBgnde) {
|
||||
this.ntceBgnde = ntceBgnde;
|
||||
}
|
||||
public String getNtceEndde() {
|
||||
return ntceEndde;
|
||||
}
|
||||
public void setNtceEndde(String ntceEndde) {
|
||||
this.ntceEndde = ntceEndde;
|
||||
}
|
||||
public String getMsgKind() {
|
||||
return msgKind;
|
||||
}
|
||||
public void setMsgKind(String msgKind) {
|
||||
this.msgKind = msgKind;
|
||||
}
|
||||
public String getDelayYn() {
|
||||
return delayYn;
|
||||
}
|
||||
public void setDelayYn(String delayYn) {
|
||||
this.delayYn = delayYn;
|
||||
}
|
||||
public String getDelayCompleteYn() {
|
||||
return delayCompleteYn;
|
||||
}
|
||||
public void setDelayCompleteYn(String delayCompleteYn) {
|
||||
this.delayCompleteYn = delayCompleteYn;
|
||||
}
|
||||
public String 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;
|
||||
}
|
||||
// 결과 리스트 select 할 떄
|
||||
// TIMESTAMPDIFF(minute, DATE_FORMAT(B.REQ_DATE, '%Y-%m-%d %T'), DATE_FORMAT(NOW(), '%Y-%m-%d %T')) as diffMin
|
||||
private int diffMin;
|
||||
|
||||
}
|
||||
|
||||
@ -9,6 +9,8 @@ import egovframework.rte.psl.dataaccess.EgovAbstractDAO;
|
||||
import itn.let.fax.addr.service.FaxAddrGroupVO;
|
||||
import itn.let.mjo.addr.service.AddrGroupVO;
|
||||
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;
|
||||
|
||||
@Repository("MjonMsgSentDAO")
|
||||
@ -56,6 +58,13 @@ public class MjonMsgSentDAO extends EgovAbstractDAO {
|
||||
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")
|
||||
public List<MjonMsgSentVO> selectAllMsgSentSimpleList(MjonMsgSentVO mjonMsgSentVO) throws Exception{
|
||||
@ -159,4 +168,27 @@ public class MjonMsgSentDAO extends EgovAbstractDAO {
|
||||
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);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -1,20 +1,51 @@
|
||||
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.Date;
|
||||
import java.util.HashMap;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
import java.util.Map;
|
||||
|
||||
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 egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl;
|
||||
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.mjo.addr.service.AddrGroupVO;
|
||||
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.MjonMsgSentVO;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
@Slf4j
|
||||
@Service("MjonMsgSentService")
|
||||
public class MjonMsgSentServiceImpl extends EgovAbstractServiceImpl implements MjonMsgSentService{
|
||||
|
||||
@ -84,6 +115,204 @@ public class MjonMsgSentServiceImpl extends EgovAbstractServiceImpl implements
|
||||
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{
|
||||
List<MjonMsgSentVO> resultList = new ArrayList<MjonMsgSentVO>();
|
||||
@ -243,4 +472,384 @@ public class MjonMsgSentServiceImpl extends EgovAbstractServiceImpl implements
|
||||
public MjonMsgSentVO selectFileInfo(String streFileId) throws Exception {
|
||||
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;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@ -5,14 +5,17 @@ import java.text.SimpleDateFormat;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Calendar;
|
||||
import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.apache.poi.ss.usermodel.Cell;
|
||||
import org.apache.poi.ss.usermodel.CellStyle;
|
||||
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.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.stereotype.Controller;
|
||||
import org.springframework.ui.ModelMap;
|
||||
import org.springframework.web.bind.annotation.ModelAttribute;
|
||||
@ -38,16 +43,20 @@ import itn.com.cmm.service.EgovFileMngUtil;
|
||||
import itn.com.cmm.util.DateUtils;
|
||||
import itn.com.utl.fcc.service.EgovStringUtil;
|
||||
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.AddrGroupVO;
|
||||
import itn.let.mjo.addr.service.AddrService;
|
||||
import itn.let.mjo.addr.service.AddrVO;
|
||||
import itn.let.mjo.apikey.service.ApiKeyMngService;
|
||||
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.MjonMsgSentService;
|
||||
import itn.let.mjo.msgsent.service.MjonMsgSentVO;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
@Slf4j
|
||||
@Controller
|
||||
public class MjonMsgSentController {
|
||||
|
||||
@ -99,115 +108,10 @@ private static final Logger logger = LoggerFactory.getLogger(MjonMsgSentControll
|
||||
return "redirect:/web/user/login/login.do";
|
||||
}
|
||||
|
||||
mjonMsgSentVO.setUserId(userId);
|
||||
|
||||
/*
|
||||
//전체 발송 건수 통계 불러오기
|
||||
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);
|
||||
// mjonMsgSentVO.setUserId(userId);
|
||||
// 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();
|
||||
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());
|
||||
// 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))
|
||||
{
|
||||
|
||||
|
||||
//
|
||||
// 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());
|
||||
mjonMsgSentVO.setSearchStartDate(DateUtils.getDateMonthsAgo(3));
|
||||
mjonMsgSentVO.setSearchEndDate(DateUtils.getCurrentDate());
|
||||
|
||||
}
|
||||
|
||||
log.info("pageIndex :: [{}]", mjonMsgSentVO.getPageIndex());
|
||||
model.addAttribute("searchKeyword", mjonMsgSentVO.getSearchKeyword());
|
||||
model.addAttribute("mjonMsgSentVO", mjonMsgSentVO);
|
||||
model.addAttribute("siteId", mjonMsgSentVO.getSiteId());
|
||||
@ -263,6 +160,43 @@ private static final Logger logger = LoggerFactory.getLogger(MjonMsgSentControll
|
||||
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
|
||||
* @param mjonMsgVO
|
||||
@ -275,7 +209,6 @@ private static final Logger logger = LoggerFactory.getLogger(MjonMsgSentControll
|
||||
HttpServletRequest request,
|
||||
ModelMap model) throws Exception{
|
||||
|
||||
System.out.println("MsgSentView_HA_allSentAjax");
|
||||
|
||||
LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
|
||||
String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
|
||||
@ -283,29 +216,24 @@ private static final Logger logger = LoggerFactory.getLogger(MjonMsgSentControll
|
||||
|
||||
mjonMsgSentVO.setUserId(userId);
|
||||
|
||||
log.info("+ mjonMsgSentVO.getSearchStartDate() :: [{}]", mjonMsgSentVO.getSearchStartDate());
|
||||
log.info("+ mjonMsgSentVO.getSearchEndDate() :: [{}]", mjonMsgSentVO.getSearchEndDate());
|
||||
//전체 발송 건수 통계 불러오기
|
||||
mjonMsgSentVO.setMsgType("");
|
||||
long startTime = System.nanoTime(); // 시작 시간 측정
|
||||
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 나누는 영역
|
||||
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->{
|
||||
totalMsgCnt.forEach(t->{
|
||||
if (Integer.parseInt(t.getFilePath1())>0) {
|
||||
H_smsMsgCnt.add(t);
|
||||
} 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
|
||||
//* SEND_KIND = "H"
|
||||
|
||||
// 전체 영역
|
||||
model.addAttribute("H_allSentCntVO", this.getResultCntProc(H_totalMsgCnt));
|
||||
log.info("all");
|
||||
model.addAttribute("H_allSentCntVO", this.getResultCntProc(totalMsgCnt));
|
||||
// 전체 단문(SMS)
|
||||
log.info("sms");
|
||||
model.addAttribute("H_smsSentCntVO", this.getResultCntProc(H_smsMsgCnt));
|
||||
// 전체 장문(LMS)
|
||||
log.info("lms");
|
||||
model.addAttribute("H_lmsSentCntVO", this.getResultCntProc(H_lmsMsgCnt));
|
||||
// 전체 장문(LMS)
|
||||
// 전체 그림(MMS)
|
||||
log.info("mms");
|
||||
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";
|
||||
}
|
||||
|
||||
@ -395,14 +287,17 @@ private static final Logger logger = LoggerFactory.getLogger(MjonMsgSentControll
|
||||
cntVO.setWaitCnt(msgCnt.stream()
|
||||
.filter(f->"W".equals(f.getMsgResultSts()))
|
||||
.mapToInt(t -> Integer.parseInt(t.getMsgResultCnt())).sum());
|
||||
log.info(" :: cntVO.getWaitCnt() :: [{}]", cntVO.getWaitCnt());
|
||||
// 전체 성공 갯수
|
||||
cntVO.setSuccCnt(msgCnt.stream()
|
||||
.filter(f->"S".equals(f.getMsgResultSts()))
|
||||
.mapToInt(t -> Integer.parseInt(t.getMsgResultCnt())).sum());
|
||||
log.info(" :: cntVO.getSuccCnt() :: [{}]", cntVO.getSuccCnt());
|
||||
// 전체 실패 갯수
|
||||
cntVO.setFailCnt(msgCnt.stream()
|
||||
.filter(f->"F".equals(f.getMsgResultSts()))
|
||||
.mapToInt(t -> Integer.parseInt(t.getMsgResultCnt())).sum());
|
||||
log.info(" :: cntVO.getFailCnt() :: [{}]", 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"})
|
||||
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;
|
||||
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);
|
||||
|
||||
|
||||
model.addAttribute("resultAllSentList", resultAllSentList);
|
||||
model.addAttribute("resultAllSentCnt", resultAllSentList.size());
|
||||
|
||||
@ -482,13 +456,16 @@ private static final Logger logger = LoggerFactory.getLogger(MjonMsgSentControll
|
||||
List<MjonMsgSentVO> resultMsgSucFailList = new ArrayList<MjonMsgSentVO>();
|
||||
|
||||
if(resultAllSentList.size() > 0) {
|
||||
System.out.println("=====resultMsgSucFailList=====");
|
||||
resultMsgSucFailList = mjonMsgSentService.selectAllMsgSentSucFailList(resultAllSentList, mjonMsgSentVO);
|
||||
System.out.println("//=====resultMsgSucFailList=====");
|
||||
}
|
||||
model.addAttribute("resultMsgSucFailList", resultMsgSucFailList);
|
||||
|
||||
model.addAttribute("mjonMsgSentVO", mjonMsgSentVO);
|
||||
|
||||
String stateType = mjonMsgSentVO.getStateType();
|
||||
// String pageUrl = "web/msgsent/MsgSentAllListAjax";
|
||||
String pageUrl = "web/msgsent/MsgSentAllListAjax";
|
||||
|
||||
if(stateType.equals("ready")) {
|
||||
@ -504,6 +481,8 @@ private static final Logger logger = LoggerFactory.getLogger(MjonMsgSentControll
|
||||
pageUrl = "web/msgsent/MsgSentFailListAjax";
|
||||
|
||||
}
|
||||
|
||||
log.info(" :: pageUrl [{}]", pageUrl);
|
||||
return pageUrl;
|
||||
}
|
||||
|
||||
@ -622,6 +601,9 @@ private static final Logger logger = LoggerFactory.getLogger(MjonMsgSentControll
|
||||
return "web/msgsent/MsgSentDetailPopAjax";
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 발송관리 문자 상세보기 내용
|
||||
* @param searchVO
|
||||
@ -1138,320 +1120,9 @@ private static final Logger logger = LoggerFactory.getLogger(MjonMsgSentControll
|
||||
|
||||
}
|
||||
|
||||
String stateType = mjonMsgSentVO.getStateType();
|
||||
String tabType = mjonMsgSentVO.getTabType();
|
||||
|
||||
// 메모리에 100개의 행을 유지합니다. 행의 수가 넘으면 디스크에 적습니다.
|
||||
SXSSFWorkbook wb = new SXSSFWorkbook(100);
|
||||
String fileName ="발송관리 엑셀 리스트"; // 저장 파일명
|
||||
String sheetTitle = "문자 발송 내역" ; // 셀 제목
|
||||
Sheet sheet = wb.createSheet(sheetTitle);
|
||||
Cell cell = null;
|
||||
Row row = null;
|
||||
mjonMsgSentService.msgSentExcelDownLoad(mjonMsgSentVO, response);
|
||||
|
||||
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) {}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@ -341,6 +341,7 @@ public class MjonReservMsgServiceImpl extends EgovAbstractServiceImpl implements
|
||||
}
|
||||
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
System.out.println("++++++++++++++++++++++ 예약문자 취소 deleteReservMsgCancelDataAjax Service Imple Error !!! " + e);
|
||||
}
|
||||
|
||||
|
||||
@ -610,6 +610,7 @@ public class MjonReservMsgController {
|
||||
|
||||
ModelAndView modelAndView = new ModelAndView();
|
||||
modelAndView.setViewName("jsonView");
|
||||
try {
|
||||
|
||||
//로그인 권한정보 불러오기
|
||||
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;
|
||||
|
||||
}
|
||||
|
||||
@ -4,6 +4,9 @@ import java.io.Serializable;
|
||||
|
||||
import org.apache.commons.lang3.builder.ToStringBuilder;
|
||||
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
/**
|
||||
* 사용자정보 VO클래스로서일반회원, 기업회원, 업무사용자의 비지니스로직 처리시 기타조건성 항을 구성한다.
|
||||
* @author 공통서비스 개발팀 조재영
|
||||
@ -21,6 +24,8 @@ import org.apache.commons.lang3.builder.ToStringBuilder;
|
||||
*
|
||||
* </pre>
|
||||
*/
|
||||
@Getter
|
||||
@Setter
|
||||
public class UserDefaultVO implements Serializable {
|
||||
|
||||
/**
|
||||
@ -34,9 +39,19 @@ public class UserDefaultVO implements Serializable {
|
||||
/** 검색조건-성별 (0, M, F)*/
|
||||
private String searchSexdstn = "0";
|
||||
|
||||
/** 검색조건 */
|
||||
/**
|
||||
* 검색조건
|
||||
* 20250122 이호영
|
||||
* 개선은 검색조건을 아래 세개만 사용하려고 함
|
||||
* */
|
||||
private String searchCondition ;
|
||||
private String searchCondition01 ;
|
||||
private String searchCondition02 ;
|
||||
|
||||
|
||||
|
||||
/** 검색조건 - 기존 */
|
||||
// private String searchCondition ;
|
||||
private String searchCondition_01 ;
|
||||
|
||||
private String searchConditionSite ;
|
||||
@ -173,45 +188,6 @@ public class UserDefaultVO implements Serializable {
|
||||
|
||||
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;
|
||||
|
||||
@ -224,570 +200,5 @@ public class UserDefaultVO implements Serializable {
|
||||
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;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@ -933,7 +933,7 @@
|
||||
|
||||
</select>
|
||||
|
||||
<insert id="AddrDAO.insertAddrList" parameterClass="java.util.List">
|
||||
<update id="AddrDAO.insertAddrList" parameterClass="java.util.List">
|
||||
/* AddrDAO.insertAddrList */
|
||||
INSERT INTO MJ_ADDR
|
||||
(
|
||||
@ -967,7 +967,18 @@
|
||||
)
|
||||
</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">
|
||||
|
||||
@ -2319,7 +2319,8 @@
|
||||
EVENT_YN,
|
||||
DELAY_YN,
|
||||
AT_DELAY_YN,
|
||||
BIZ_KAKAO_RESEND_ORGNL_TXT
|
||||
BIZ_KAKAO_RESEND_ORGNL_TXT,
|
||||
SUBJECT_CHK_YN
|
||||
)
|
||||
VALUES
|
||||
|
||||
@ -2345,7 +2346,8 @@
|
||||
#eventYn#,
|
||||
#delayYn#,
|
||||
#atDelayYn#,
|
||||
#kakaoSubMagOrgnlTxt#
|
||||
#kakaoSubMagOrgnlTxt#,
|
||||
#subjectChkYn#
|
||||
)
|
||||
</insert>
|
||||
|
||||
@ -3307,10 +3309,16 @@
|
||||
, (
|
||||
<include refid="MjonMsgSentDAO.selectAgentWithKakaoResultQuery_A"/>
|
||||
) 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 B.USER_ID = #userId#
|
||||
AND B.RESERVE_C_YN = 'N'
|
||||
/*AND B.RESERVE_C_YN = 'N'*/
|
||||
ORDER BY 1=1
|
||||
, msgGroupId DESC
|
||||
, sentDate DESC
|
||||
@ -4021,6 +4029,8 @@
|
||||
|
||||
<select id="MjonMsgDataDAO.selectReSendMsgDataList" parameterClass="mjonMsgDataVO" resultClass="mjonMsgVO">
|
||||
|
||||
/* MjonMsgDataDAO.selectReSendMsgDataList */
|
||||
|
||||
SELECT MSG_ID AS msgId,
|
||||
USER_ID AS userId,
|
||||
USERDATA AS msgSeq,
|
||||
@ -7895,6 +7905,7 @@
|
||||
SELECT
|
||||
CALL_FROM AS callFrom
|
||||
, SUBJECT AS subject
|
||||
, SUBJECT_CHK_YN AS subjectChkYn
|
||||
, SMS_TXT AS smsTxt
|
||||
,(
|
||||
SELECT
|
||||
@ -7936,6 +7947,7 @@
|
||||
</select>
|
||||
|
||||
<select id="MjonMsgDataDAO.selectMjMsgListByResend" parameterClass="mjonMsgDataVO" resultClass="mjonMsgDataVO">
|
||||
/* MjonMsgDataDAO.selectMjMsgListByResend */
|
||||
SELECT
|
||||
CALL_TO AS callTo
|
||||
FROM MJ_MSG_DATA
|
||||
|
||||
@ -3,8 +3,10 @@
|
||||
========= ======= =================================================
|
||||
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">
|
||||
<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="mjonMsgVO" type="itn.let.mjo.msg.service.MjonMsgVO"/>
|
||||
<typeAlias alias="addrGroupVO" type="itn.let.mjo.addr.service.AddrGroupVO"/>
|
||||
@ -46,8 +48,8 @@
|
||||
,'01','00') AS tab2
|
||||
, if (A.MSG_TYPE= '6' AND B.MSG_TYPE= '6' AND B.FILE_CNT > '0'
|
||||
,'01','00') AS tab3
|
||||
|
||||
<include refid="MjonMsgSentDAO.selectJoinQuery"/>
|
||||
|
||||
AND A.USER_ID = #userId#
|
||||
AND B.USER_ID = #userId#
|
||||
<isNotEmpty property="ntceBgnde">
|
||||
@ -60,10 +62,6 @@
|
||||
<isEmpty property="msgType">
|
||||
AND A.MSG_TYPE IN ('4','6')
|
||||
</isEmpty>
|
||||
AND B.RESERVE_C_YN = 'N'
|
||||
<![CDATA[
|
||||
AND B.REQ_DATE <= DATE_ADD(NOW(), INTERVAL 60 MINUTE)
|
||||
]]>
|
||||
<isNotEmpty property="fileCnt">
|
||||
<isEqual property="fileCnt" compareValue="0">
|
||||
AND B.FILE_CNT = '0'
|
||||
@ -72,6 +70,16 @@
|
||||
<![CDATA[ AND B.FILE_CNT > '0' ]]>
|
||||
</isNotEqual>
|
||||
</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
|
||||
GROUP BY
|
||||
A0.MSG_GROUP_ID
|
||||
@ -222,6 +230,290 @@
|
||||
|
||||
</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
|
||||
|
||||
@ -553,6 +553,9 @@ function fn_save_menuInfo(menuNo) {
|
||||
<div id="kopost_organization" class="orgCont"></div>
|
||||
</div>
|
||||
<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>
|
||||
<table class="tbType2">
|
||||
<colgroup>
|
||||
|
||||
@ -22,6 +22,7 @@
|
||||
<%@ 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="ec" uri="/WEB-INF/tld/ecnet_tld.tld"%>
|
||||
<%@ taglib prefix="fnc" uri="/WEB-INF/tld/functions.tld"%>
|
||||
<% pageContext.setAttribute("newLineChar", "\r\n"); %>
|
||||
<% pageContext.setAttribute("newLineChar2", "\n"); %>
|
||||
<% String serverName = request.getServerName(); %>
|
||||
@ -4157,8 +4158,10 @@ function fnInputSmsTxt(){
|
||||
</td>
|
||||
<td>
|
||||
<c:choose>
|
||||
<c:when test="${not empty mjonMsgSentList.regdate}">
|
||||
<fmt:formatDate value="${mjonMsgSentList.regdate}" pattern="MM-dd HH:mm"/>
|
||||
<c:when test="${not empty mjonMsgSentList.regDate}">
|
||||
<%-- <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:otherwise>
|
||||
-
|
||||
@ -4190,7 +4193,8 @@ function fnInputSmsTxt(){
|
||||
</c:when>
|
||||
<c:when test="${mjonMsgSentList.reserveYn eq 'Y' && mjonMsgSentList.reserveCYn eq 'N'}">
|
||||
[예약]<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:otherwise>
|
||||
-
|
||||
@ -4367,8 +4371,11 @@ function fnInputSmsTxt(){
|
||||
</td>
|
||||
<td>
|
||||
<c:choose>
|
||||
<c:when test="${not empty mjonMsgSentList.regdate}">
|
||||
<fmt:formatDate value="${mjonMsgSentList.regdate}" pattern="MM-dd HH:mm"/>
|
||||
<c:when test="${not empty mjonMsgSentList.regDate}">
|
||||
<%-- <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:otherwise>
|
||||
-
|
||||
@ -4400,7 +4407,8 @@ function fnInputSmsTxt(){
|
||||
</c:when>
|
||||
<c:when test="${mjonMsgSentList.reserveYn eq 'Y' && mjonMsgSentList.reserveCYn eq 'N'}">
|
||||
[예약]<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:otherwise>
|
||||
-
|
||||
@ -4586,8 +4594,8 @@ function fnInputSmsTxt(){
|
||||
</td>
|
||||
<td>
|
||||
<c:choose>
|
||||
<c:when test="${not empty mjonMsgDelaySentList.regdate}">
|
||||
<fmt:formatDate value="${mjonMsgDelaySentList.regdate}" pattern="yyyy-MM-dd HH:mm"/>
|
||||
<c:when test="${not empty mjonMsgDelaySentList.regDate}">
|
||||
<fmt:formatDate value="${mjonMsgDelaySentList.regDate}" pattern="yyyy-MM-dd HH:mm"/>
|
||||
</c:when>
|
||||
<c:otherwise>
|
||||
-
|
||||
@ -4605,7 +4613,7 @@ function fnInputSmsTxt(){
|
||||
<c:otherwise>
|
||||
<c:choose>
|
||||
<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:otherwise>
|
||||
-
|
||||
@ -4785,6 +4793,10 @@ function fnInputSmsTxt(){
|
||||
<td>
|
||||
<c:choose>
|
||||
<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:formatDate value="${dateValue}" pattern="MM-dd HH:mm"/>
|
||||
</c:when>
|
||||
@ -4925,8 +4937,10 @@ function fnInputSmsTxt(){
|
||||
<td>
|
||||
<c:choose>
|
||||
<c:when test="${not empty kakaoReserveList.regDate}">
|
||||
<fmt:parseDate value="${kakaoReserveList.regDate}" var="dateValue" pattern="yyyy-MM-dd HH:mm:ss"/>
|
||||
<fmt:formatDate value="${dateValue}" pattern="MM-dd HH:mm"/>
|
||||
<c:out value="${kakaoReserveList.regDate}" />
|
||||
${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:otherwise>
|
||||
@ -5073,8 +5087,11 @@ function fnInputSmsTxt(){
|
||||
<td>
|
||||
<c:choose>
|
||||
<c:when test="${not empty kakaoDelayInfo.regDate}">
|
||||
<fmt:parseDate value="${kakaoDelayInfo.regDate}" var="kakaoDelayRegdate" pattern="yyyy-MM-dd HH:mm:ss"/>
|
||||
<fmt:formatDate value="${kakaoDelayRegdate}" pattern="MM-dd HH:mm"/>
|
||||
<%-- <c:out value="${kakaoDelayInfo.regDate}" /> --%>
|
||||
${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:otherwise>
|
||||
-
|
||||
|
||||
@ -142,10 +142,10 @@ function cntntBtnInfo(stepInfo){
|
||||
|
||||
<ul class="tabType4">
|
||||
<li id="tabAt" class="tab topTab"><button type="button" onclick="javascript:fnLinkPageTopTab('tabAlim');">알림톡</button></li>
|
||||
<%-- <c:if test="${fn:contains(pageContext.request.requestURL , 'localhost') --%>
|
||||
<%-- || fn:contains(pageContext.request.requestURL , '119.193.215.98')}"> --%>
|
||||
<!-- <li id="tabFt" class="tab topTab"><button type="button" onclick="javascript:fnLinkPageTopTab('tabFriend');">친구톡</button></li> -->
|
||||
<%-- </c:if> --%>
|
||||
<c:if test="${pageContext.request.serverName == 'localhost'
|
||||
|| pageContext.request.serverName == '119.193.215.98'}">
|
||||
<li id="tabFt" class="tab topTab"><button type="button" onclick="javascript:fnLinkPageTopTab('tabFriend');">친구톡</button></li>
|
||||
</c:if>
|
||||
<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>
|
||||
</ul>
|
||||
@ -25,16 +25,23 @@ function initMenuTab(){
|
||||
console.log('uri:', uri);
|
||||
|
||||
|
||||
if(uri.includes('selectMsgSentView')){
|
||||
$('.topTab').removeClass("active");
|
||||
$("#smsTab").addClass("active");
|
||||
}else if(uri.includes('selectKakaoSentView')){
|
||||
$('.topTab').removeClass("active");
|
||||
$("#kakaoTab").addClass("active");
|
||||
}else if(uri.includes('faxSendList')){
|
||||
$('.topTab').removeClass("active");
|
||||
$("#faxTab").addClass("active");
|
||||
// URI 키워드와 해당 탭 ID를 매핑
|
||||
const tabMapping = [
|
||||
{ keyword: 'selectMsgSentView', tabId: '#smsTab' }, // 'selectMsgSentView' 키워드를 '#smsTab'으로 매핑
|
||||
{ keyword: 'selectKakaoSentView', tabId: '#kakaoTab' }, // 'selectKakaoSentView' 키워드를 '#kakaoTab'으로 매핑
|
||||
{ keyword: 'faxSendList', tabId: '#faxTab' } // 'faxSendList' 키워드를 '#faxTab'으로 매핑
|
||||
];
|
||||
|
||||
// URI에 특정 키워드가 포함되어 있는지 확인하여 활성 탭 정보를 찾음
|
||||
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){
|
||||
|
||||
@ -946,10 +946,10 @@ function infoPop(pageUrl){
|
||||
<ul class="list_tab">
|
||||
<li class="tab active"><button type="button" onclick="fnTabLoad('',0); return false;">전체</button></li>
|
||||
<li class="tab"><button type="button" onclick="fnTabLoad('at', 1); return false;">알림톡</button></li>
|
||||
<%-- <c:if test="${fn:contains(pageContext.request.requestURL , 'localhost') --%>
|
||||
<%-- || fn:contains(pageContext.request.requestURL , '119.193.215.98')}"> --%>
|
||||
<!-- <li class="tab"><button type="button" onclick="fnTabLoad('ft', 2); return false;">친구톡</button></li> -->
|
||||
<%-- </c:if> --%>
|
||||
<c:if test="${pageContext.request.serverName == 'localhost'
|
||||
|| pageContext.request.serverName == '119.193.215.98'}">
|
||||
<li class="tab"><button type="button" onclick="fnTabLoad('ft', 2); return false;">친구톡</button></li>
|
||||
</c:if>
|
||||
</ul><!--// tab button -->
|
||||
</div>
|
||||
<!-- 예약관리 > 전체 -->
|
||||
|
||||
@ -19,7 +19,7 @@
|
||||
$(document).ready(function(){
|
||||
|
||||
|
||||
console.log("12111111111111");
|
||||
console.log(": MsgDataSMLView :");
|
||||
|
||||
// console.log(' + $(#tabDision).val() : ',$('#tabDision').val())
|
||||
// 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;
|
||||
} else {
|
||||
form.mmsSubject.value = ""; //초기화
|
||||
@ -3411,7 +3411,7 @@ function fnTestSend(){
|
||||
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;
|
||||
} else {
|
||||
form.mmsSubject.value = ""; //초기화
|
||||
@ -3964,6 +3964,8 @@ function getMjMsgSentListAll(pageNo) {
|
||||
</c:otherwise>
|
||||
</c:choose>
|
||||
</h2>
|
||||
<!-- /web/mjon/msgdata/selectMsgDataSMLViewAjax.do -->
|
||||
<!-- MsgDataSMLView.jsp -->
|
||||
<button type="button" class="button info" onclick="infoPop('selectMsgDataView1');">사용안내</button>
|
||||
</div>
|
||||
<div class="send_general">
|
||||
@ -4018,9 +4020,9 @@ function getMjMsgSentListAll(pageNo) {
|
||||
<td>
|
||||
<ul class="title_wrap">
|
||||
<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>
|
||||
<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>
|
||||
</li>
|
||||
<li class="textbox">
|
||||
|
||||
@ -3,19 +3,23 @@
|
||||
<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%>
|
||||
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
|
||||
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
|
||||
<%@ taglib prefix="ec" uri="/WEB-INF/tld/ecnet_tld.tld"%>
|
||||
<%@ page import="itn.com.cmm.LoginVO" %>
|
||||
<script src="/publish/js/content.js"></script>
|
||||
<script src="/publish/js/popupLayer.js"></script>
|
||||
<script type="text/javascript">
|
||||
/* 문자 발송결과 리스트 advc*/
|
||||
$(document).ready(function(){
|
||||
var startDate = '${startDate}';
|
||||
var endDate = '${endDate}';
|
||||
// var searchStartDate = '${searchStartDate}';
|
||||
// console.log('searchStartDate : ', searchStartDate);
|
||||
// var searchEndDate = '${searchEndDate}';
|
||||
// console.log('searchEndDate : ', searchEndDate);
|
||||
|
||||
// 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' });
|
||||
// // DatePicker 값 수정
|
||||
// var startDatePicker = $('#searchStartDate').pickadate('picker');
|
||||
// startDatePicker.set('select', searchStartDate, { format: 'yyyy/mm/dd' });
|
||||
// startDatePicker = $('#searchEndDate').pickadate('picker');
|
||||
// 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();
|
||||
$('td[name="listSucc"]').remove();
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
function fn_sentDetailView(msgGroupId) {
|
||||
// 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>
|
||||
<div class="list_info">
|
||||
<input type="hidden" id="tdType" value="${mjonMsgSentVO.listType}">
|
||||
<p>총 <span class="c_e40000"><c:out value="${totalRecordCount}"/></span>건</p>
|
||||
<p>총 <span class="c_e40000" id="testId"><c:out value="${totalRecordCount}"/></span>건</p>
|
||||
<div>
|
||||
<p class="cf_text c_e40000">※ 예약문자 발송취소는 예약 발송시간 기준 5분 전까지만 가능</p>
|
||||
<label for="pageUnit" class="label">줄보기 선택</label>
|
||||
<select id="pageUnit" name="pageUnit" class="selType2">
|
||||
<select id="pageUnitS" 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>
|
||||
@ -84,134 +163,100 @@ $(document).ready(function(){
|
||||
<div class="tb_wrap">
|
||||
<table class="tType4">
|
||||
<colgroup>
|
||||
<col style="width: 40px;">
|
||||
<col style="width: 45px;">
|
||||
<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: auto;">
|
||||
<col style="width: 8%;">
|
||||
<c:if test="${mjonMsgSentVO.listType eq 'groupList'}">
|
||||
<col style="width: 8%;">
|
||||
<col style="width: 8%;">
|
||||
</c:if>
|
||||
<col style="width: 6%;">
|
||||
<col style="width: 6%;">
|
||||
<col style="width: 6%;">
|
||||
<col style="width: 6%;">
|
||||
<col style="width: 11%;">
|
||||
</colgroup>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>
|
||||
<th rowspan="2">
|
||||
<label for="allCheck" class="label">전체 선택</label>
|
||||
<input type="checkbox" id="allCheck" name="allCheck">
|
||||
</th>
|
||||
<th>발송일시
|
||||
<th rowspan="2">발송일시
|
||||
<div class="sort_wrap">
|
||||
<input type="button" class="sort sortBtn" id="sort_reqdate">
|
||||
</div>
|
||||
</th>
|
||||
<th>형태
|
||||
<th rowspan="2">형태
|
||||
<div class="sort_wrap">
|
||||
<input type="button" class="sort sortBtn" id="sort_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>
|
||||
<th rowspan="2">내용</th>
|
||||
<th rowspan="2">
|
||||
발송건수
|
||||
<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>
|
||||
<th colspan="3">결과</th>
|
||||
<th rowspan="2">금액(원)</th>
|
||||
<th rowspan="2">진행상황</th>
|
||||
<!-- <th>금액</th> -->
|
||||
</tr>
|
||||
<tr>
|
||||
<th>대기</th>
|
||||
<th>성공</th>
|
||||
<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>
|
||||
<c:forEach var="result" items="${resultAllSentList}" varStatus="status">
|
||||
<tr>
|
||||
<td name="listTd">
|
||||
<td>
|
||||
<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 test="${result.statusCd eq '03' or result.statusCd eq '01'}">
|
||||
<input type="checkbox" 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>
|
||||
<input type="checkbox" id="msgSentDel${status.count}" name="msgSentDel" value="${result.msgGroupId}">
|
||||
</c:otherwise>
|
||||
</c:choose>
|
||||
|
||||
</td>
|
||||
<td name="listTd">
|
||||
<td>
|
||||
<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:when test="${resultAllSentList.curState eq '0'}">
|
||||
<c:when test="${result.curState eq '0'}">
|
||||
<%--
|
||||
20240906 추가
|
||||
발송 대기 상태일 때만 원래 발송시간을 보여주고, 발송이 완료되면 발송 처리 완료 시간(reqDate)을 보여준다.
|
||||
30분 딜레이 된 건으로 관리자 승인/취소 처리가 완료 되지 않은 건에 대해서 -30분 처리하여 원래 사용자가 보내려던 시간을 표시해줌
|
||||
--%>
|
||||
<p><fmt:formatDate pattern = "yyyy-MM-dd HH:mm" value = "${resultAllSentList.delayOrgTime}" /></p>
|
||||
<p>${result.delayOrgTime}</p>
|
||||
</c:when>
|
||||
<c:otherwise>
|
||||
<p><fmt:formatDate pattern = "yyyy-MM-dd HH:mm" value = "${resultAllSentList.reqdate}" /></p>
|
||||
<p>${result.reqDate}</p>
|
||||
</c:otherwise>
|
||||
</c:choose>
|
||||
|
||||
</c:when>
|
||||
<c:otherwise>
|
||||
<p><fmt:formatDate pattern = "yyyy-MM-dd HH:mm" value = "${resultAllSentList.reqdate}" /></p>
|
||||
<p>${result.reqDate}</p>
|
||||
|
||||
</c:otherwise>
|
||||
</c:choose>
|
||||
</td>
|
||||
<td name="listTd">
|
||||
<td>
|
||||
<p>
|
||||
<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 test="${resultAllSentList.msgType eq '6' && resultAllSentList.fileCnt ne 0 }">
|
||||
<c:when test="${result.msgType eq '6' && result.fileCnt ne 0 }">
|
||||
그림
|
||||
</c:when>
|
||||
<c:otherwise>
|
||||
@ -220,239 +265,69 @@ $(document).ready(function(){
|
||||
</c:choose>
|
||||
</p>
|
||||
</td>
|
||||
<td name="listTd">
|
||||
<p>
|
||||
<td class="result_cont">
|
||||
<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:when test="${resultAllSentList.sendKind eq 'H' }">
|
||||
WEB
|
||||
</c:when>
|
||||
<c:when test="${resultAllSentList.sendKind eq 'A'}">
|
||||
API
|
||||
<c:when test="${result.subjectChkYn eq 'Y' }">
|
||||
<c:out value="${result.subject }" />
|
||||
</c:when>
|
||||
<c:otherwise>
|
||||
-
|
||||
<c:out value="${result.smsTxt}" />
|
||||
</c:otherwise>
|
||||
</c:choose>
|
||||
</p>
|
||||
</a>
|
||||
</div>
|
||||
</td>
|
||||
<td name="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>
|
||||
<p><fmt:formatNumber value="${result.msgGroupCnt}" type="number" groupingUsed="true" /> </p>
|
||||
</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: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 test="${result.totPrice eq '-' }">
|
||||
<c:out value="${result.totPrice }" />
|
||||
</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>
|
||||
<fmt:formatNumber value="${result.totPrice }" type="number" groupingUsed="true" minFractionDigits="0" maxFractionDigits="1" />
|
||||
</c:otherwise>
|
||||
</c:choose>
|
||||
</td>
|
||||
<td name="listTd">
|
||||
<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">
|
||||
<td>
|
||||
<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 test="${result.statusCd ne '03' }">
|
||||
<ec:code codeId="ITN057" code="${result.statusCd }" />
|
||||
</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>
|
||||
<p><button class="btnType btnType20" onClick="javascript:fnReservCancel('${result.msgGroupId}'); return false;">예약취소</button></p>
|
||||
</c:otherwise>
|
||||
</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>
|
||||
|
||||
<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>
|
||||
</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>
|
||||
<td colspan="10">발송 내역이 없습니다.</td>
|
||||
</tr>
|
||||
</c:otherwise>
|
||||
</c:choose>
|
||||
@ -462,14 +337,14 @@ $(document).ready(function(){
|
||||
<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>
|
||||
<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>
|
||||
<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> --%>
|
||||
</div>
|
||||
</div>
|
||||
<c:if test="${!empty resultAllSentList}">
|
||||
@ -477,3 +352,12 @@ $(document).ready(function(){
|
||||
<ui:pagination paginationInfo = "${paginationInfo}" type="imageWeb" jsFunction="linkPage" />
|
||||
</ul>
|
||||
</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>
|
||||
|
||||
@ -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>
|
||||
1024
src/main/webapp/WEB-INF/jsp/web/msgsent/MsgSentDetailView.jsp
Normal file
1024
src/main/webapp/WEB-INF/jsp/web/msgsent/MsgSentDetailView.jsp
Normal file
File diff suppressed because it is too large
Load Diff
@ -15,7 +15,12 @@ var thisfuledtlday = ""; //당원 마지막일
|
||||
$(document).ready(function(){
|
||||
|
||||
//초기 전체 리스트 페이지 보여주기
|
||||
linkPage(1);
|
||||
linkPage($('#searchForm #pageIndex').val());
|
||||
|
||||
|
||||
fn_activateTab($('#searchForm #searchCondition01').val())
|
||||
fn_setActiveTab($('#searchForm #searchCondition02').val())
|
||||
|
||||
|
||||
var date = new Date() ;
|
||||
//이전달 첫날/마지막날 조회
|
||||
@ -28,12 +33,14 @@ $(document).ready(function(){
|
||||
lastfuledday = lastfulstday + "/"+ new Date(date.getFullYear(), date.getMonth(), 0).getDate()+"" ;
|
||||
lastfulstday += "/01" ;
|
||||
}
|
||||
console.log('lastfulstday: ', lastfulstday);
|
||||
|
||||
//당월 첫날/마지막날 조회
|
||||
thisfulstlday = date.getFullYear() + "/" ;
|
||||
thisfulstlday += date.getMonth()+1 < 10 ? "0"+ (date.getMonth()+1) : date.getMonth()+1+"" ;
|
||||
thisfuledtlday = thisfulstlday + "/"+ new Date(date.getFullYear(), date.getMonth()+1, 0).getDate()+"";
|
||||
thisfulstlday += "/01" ;
|
||||
console.log('thisfulstlday: ', thisfulstlday);
|
||||
|
||||
//3개월 이전 날짜 구해오기
|
||||
|
||||
@ -56,6 +63,19 @@ $(document).ready(function(){
|
||||
listSortOrd(this);
|
||||
});
|
||||
|
||||
|
||||
// 탭 :: 전체 , 즉시, 예약
|
||||
$(document).on('click', '.sendKindBtn', function (){
|
||||
|
||||
// 클릭된 버튼의 data-info 값을 전달하여 함수 호출
|
||||
fn_activateTab($(this).data('info'));
|
||||
|
||||
linkPage(1);
|
||||
});
|
||||
|
||||
|
||||
|
||||
|
||||
//목록 정렬 항목 클릭
|
||||
function listSortOrd(obj){
|
||||
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);
|
||||
|
||||
@ -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){
|
||||
|
||||
var form = document.searchForm;
|
||||
var stateType = form.stateType.value;
|
||||
form.pageIndex.value = pageNo;
|
||||
console.log('form : ', form);
|
||||
|
||||
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>');
|
||||
@ -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 기준으로 이지우가 수정
|
||||
/* if(confirm("선택한 발송문자를 삭제하시겠습니까? 삭제된 문자는 복구가 불가능 합니다.")) */
|
||||
if(confirm("선택한 목록을 삭제하시겠습니까?")){
|
||||
if(confirm("선택한 목록을 삭제하시겠습니까?\n삭제한 목록은 복구가 불가합니다.")){
|
||||
|
||||
document.searchForm.msgGroupIdList.value = msgId;
|
||||
var sendData = $(document.searchForm).serializeArray();
|
||||
@ -149,109 +190,57 @@ function fnDelete(){
|
||||
$(".msgSentAllLoad").load("/web/mjon/msgsent/deleteMsgSentDataAjax.do", sendData ,function(response, status, xhr){
|
||||
});
|
||||
|
||||
// var form = document.searchForm;
|
||||
// form.action="/web/mjon/msgsent/selectMsgSentView.do";
|
||||
// form.submit();
|
||||
}
|
||||
|
||||
}else{
|
||||
|
||||
alert("삭제할 문자를 선택해 주세요.");
|
||||
return false;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//상세보기 버튼 실행
|
||||
function fnRevDetailPop(msgGroupId, msgId, fileCnt){
|
||||
document.resPopForm.msgGroupId.value = msgGroupId;
|
||||
document.resPopForm.msgId.value = msgId;
|
||||
var sendData = $(document.resPopForm).serializeArray();
|
||||
|
||||
alert("삭제되었습니다.");
|
||||
var form = document.searchForm;
|
||||
if (form.listType.value == "privateList") {
|
||||
$("#msgSentDetailPopLoad").load("/web/mjon/msgsent/selectMsgSentDetailData2Ajax.do", sendData ,function(response, status, xhr){
|
||||
});
|
||||
form.action="/web/mjon/msgsent/selectMsgSentView.do";
|
||||
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;
|
||||
|
||||
form.tabType.value = tabType;
|
||||
|
||||
//해당 탭의 전체 리스트 내역으로 불러오기
|
||||
fnListLoad('all', '0');
|
||||
var n=tabNum+1;
|
||||
|
||||
//탭 선택 CSS 처리
|
||||
var $tab = $(".list_tab_wrap2 li:nth-child("+n+")");
|
||||
var $tabPrev = $(".list_tab_wrap2 li:nth-child("+n+")").prev("li")
|
||||
$tab.addClass("active");
|
||||
$tab.find("button").attr("title", "선택됨");
|
||||
$tab.siblings("li.tab").removeClass("active");
|
||||
$tab.siblings("li.tab").find("button").removeAttr("title");
|
||||
|
||||
$tab.siblings("li:not(li:last-child)").find("button").css("border-right","1px solid #e5e5e5");
|
||||
$tabPrev.find("button").css("border-right","0");
|
||||
// 탭 선택 CSS 처리
|
||||
fn_setActiveTab(tabType);
|
||||
|
||||
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){
|
||||
/* if(!fn_G_cmndataValueChk("startDate", "endDate", 3)){
|
||||
/* if(!fn_G_cmndataValueChk("searchStartDate", "searchEndDate", 3)){
|
||||
return;
|
||||
}; */
|
||||
|
||||
fn_activateTab('')
|
||||
fn_setActiveTab('')
|
||||
|
||||
console.log('fnSearch')
|
||||
var form = document.searchForm;
|
||||
form.pageIndex.value = pageNo ;
|
||||
@ -274,27 +263,8 @@ function prevMonth(month) {
|
||||
function fnExcelDownLoad(pageType, tabType){
|
||||
|
||||
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("엑셀 다운로드를 하시겠습니까?")){
|
||||
|
||||
@ -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){
|
||||
@ -537,7 +492,7 @@ function fnMsgSFDetailList(msgGroupId, resultType){
|
||||
}
|
||||
|
||||
|
||||
/* 사용내역서 클릭 시 내역서 새창 팝업 오픈 */
|
||||
/* 사용내역서 클릭 시 내역서 새창 팝업 오픈
|
||||
function fnShowPrintPopup(tabType, type) {
|
||||
//만들려는 팝업의 크기
|
||||
var popup_wid = '840';
|
||||
@ -553,7 +508,7 @@ function fnShowPrintPopup(tabType, type) {
|
||||
$("#searchForm").attr({"action":"/web/mjon/msgsent/printMsgSentDataAjax.do", "method":"post"}).submit();
|
||||
|
||||
}
|
||||
|
||||
*/
|
||||
function addrGroupDuplCnt() {
|
||||
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>'
|
||||
+ '<caption>구분, 충전금액, 사용금액, 잔액 등 정보를 제공하는 표</caption>'
|
||||
+ '<colgroup>'
|
||||
@ -891,60 +847,51 @@ function subContent(p_content_no){
|
||||
</div>
|
||||
</div>--%>
|
||||
<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="msgGroupId" name="msgGroupId" value=""/>
|
||||
<input type="hidden" name="searchSortCnd" value="<c:out value="${searchVO.searchSortCnd}" />" />
|
||||
<input type="hidden" name="searchSortOrd" value="<c:out value="${searchVO.searchSortOrd}" />" />
|
||||
<input type="hidden" id="tabType" name="tabType" value="all"/><!-- 탭 종류 -->
|
||||
<input type="hidden" id="stateType" name="stateType" value="all"/><!-- 발송상태 종류 -->
|
||||
<input type="hidden" id="listType" name="listType" value="groupList"/><!-- 리스트 종류 -->
|
||||
<input type="hidden" id="addrGrpNm" name="addrGrpNm" value=""/><!-- 주소록 그룹 이름 -->
|
||||
<input type="hidden" id="mberId" name="mberId" value="${LoginVO.id}"/><!-- 주소록 그룹 이름 -->
|
||||
<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">
|
||||
<!-- 페이지 로딩 속도를 위해서 ajax 로딩처리 -->
|
||||
<div class="rev_admin" id ="revAdmin">
|
||||
|
||||
<!-- 발송결과 개선 : 문구추가 -->
|
||||
<div class="titBox_result">
|
||||
<p>- 최대 3개월간의 발송내역만 확인하실 수 있습니다.</p>
|
||||
<p>- 전송내역이 필요한 경우 기간 내에 다운로드하여 주시기 바랍니다.</p>
|
||||
<p>- 단문문자는 최대 24시간, 장문 및 그림문자는 최대 72시간까지 결과값이 수신되지 않은 경우 실패(비과금) 처리됩니다.</p>
|
||||
</div>
|
||||
<!--// 발송결과 개선 : 문구추가 -->
|
||||
|
||||
<div class="excel_middle">
|
||||
<div class="select_btnWrap clearfix">
|
||||
<div class="btn_left">
|
||||
<span class="cal_label">기간선택</span>
|
||||
<div class="calendar_wrap">
|
||||
<input type="text" class="startDate inp calendar" title="검색 시작일" id="startDate" name="startDate" value="<c:out value='${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>
|
||||
<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>
|
||||
<!-- <button type="button">전월</button>
|
||||
<button type="button">당월</button> -->
|
||||
<button type="button" onclick="setCalVal(lastfulstday,'startDate');setCalVal( lastfuledday,'endDate'); return false;" class="btnType btnType19">전월</button>
|
||||
<button type="button" onclick="setCalVal(thisfulstlday,'startDate');setCalVal( thisfuledtlday,'endDate'); return false;" class="btnType btnType19">당월</button>
|
||||
<!-- <button type="button">3개월</button> -->
|
||||
<button type="button" onclick="fn_G_getPrevMonth('startDate', 3);fn_G_getCurrDate('endDate'); return false;" class="btnType btnType19">3개월</button>
|
||||
<button type="button" onclick="setCalVal(lastfulstday,'searchStartDate');setCalVal( lastfuledday,'searchEndDate'); return false;" class="btnType btnType19">전월</button>
|
||||
<button type="button" onclick="setCalVal(thisfulstlday,'searchStartDate');setCalVal( thisfuledtlday,'searchEndDate'); 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" class="btnType6" onClick="javascript:fnSearch(1); return false;">조회</button>
|
||||
</div>
|
||||
<div class="btn_right">
|
||||
<%-- <label for="searchMsgType" class="label">문자형태 선택 == ${mjonMsgSentVO.searchMsgType}</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>
|
||||
<label for="searchCondition" class="label">검색 조건: ${mjonMsgSentVO.searchCondition == '2' ? '발신번호' : '문자내용'}</label>
|
||||
<select name="searchCondition" id="searchCondition" class="selType2 select_btn">
|
||||
<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>
|
||||
<div class="search">
|
||||
<label for="id" class="label"></label>
|
||||
@ -954,33 +901,73 @@ function subContent(p_content_no){
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- 페이지 로딩 속도를 위해서 ajax 로딩처리 -->
|
||||
<div class="rev_admin" id ="revAdmin">
|
||||
</div>
|
||||
<div class="list_tab_wrap2 type4">
|
||||
<!-- tab button -->
|
||||
<ul class="list_tab">
|
||||
<li class="tab active"><button type="button" onclick="fnTabLoad('',0); return false;">전체</button></li>
|
||||
<li class="tab"><button type="button" onclick="fnTabLoad('S',1); 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('M',3); return false;">그림(MMS)</button></li>
|
||||
<li class="tab active"><button type="button" onclick="fnTabLoad(''); return false;">전체</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'); return false;">장문(LMS)</button></li>
|
||||
<li class="tab"><button type="button" onclick="fnTabLoad('M'); return false;">그림(MMS)</button></li>
|
||||
</ul><!--// tab button -->
|
||||
</div>
|
||||
<!-- 예약관리 > 전체 -->
|
||||
<div class="price_history_cont current" id="listTab_2">
|
||||
<div class="price_history_cont current price_wrap" id="listTab_2">
|
||||
<!-- tab button -->
|
||||
<div class="table_tab_wrap">
|
||||
<ul>
|
||||
<!--<ul>
|
||||
<li class="tab active">
|
||||
<button type="button" onclick="fnListLoad('all','0'); return false;">전체</button></li>
|
||||
<li class="tab"><button type="button" onclick="fnListLoad('ready','1'); return false;">결과대기</button></li>
|
||||
<li class="tab"><button type="button" onclick="fnListLoad('complete','2'); return false;">정상수신</button></li>
|
||||
<li class="tab"><button type="button" onclick="fnListLoad('fail','3'); return false;">수신오류</button></li>
|
||||
</ul><!--// tab button -->
|
||||
<div class="tab_depth1">
|
||||
</ul>// tab button -->
|
||||
|
||||
|
||||
<!-- 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" style="display: none;"></a>
|
||||
<a href="#none" class="msgPrivateList">받는사람(개인별)</a>
|
||||
<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 class="table_cont current msgSentAllLoad" id="tableCont_1">
|
||||
</div><!-- //전체 종료 -->
|
||||
|
||||
@ -25,14 +25,14 @@ $(document).ready(function(){
|
||||
|
||||
</script>
|
||||
|
||||
<div class="rev_admin_in">
|
||||
<div class="rev_admin_in">
|
||||
<div class="rev_admin_top clearfix">
|
||||
<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>
|
||||
</div>
|
||||
<div class="rev_admin_btm admin_btm">
|
||||
<P class="title_top">WEB<span class="title_num"><fmt:formatNumber value="${H_allSentCntVO.totCnt}" pattern="#,###"/><span>건</span></span></P>
|
||||
<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> --%>
|
||||
<dl>
|
||||
<dt>대기</dt>
|
||||
<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>
|
||||
</dl>
|
||||
</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 class="rev_admin_in">
|
||||
<div class="rev_admin_top clearfix">
|
||||
<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>
|
||||
</div>
|
||||
<div class="rev_admin_btm admin_btm">
|
||||
<P class="title_top">WEB<span class="title_num"><fmt:formatNumber value="${H_smsSentCntVO.totCnt}" pattern="#,###"/><span>건</span></span></P>
|
||||
<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> --%>
|
||||
<dl>
|
||||
<dt>대기</dt>
|
||||
<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>
|
||||
</dl>
|
||||
</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 class="rev_admin_in">
|
||||
<div class="rev_admin_top clearfix">
|
||||
<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>
|
||||
</div>
|
||||
<div class="rev_admin_btm admin_btm">
|
||||
<P class="title_top">WEB<span class="title_num"><fmt:formatNumber value="${H_lmsSentCntVO.totCnt}" pattern="#,###"/><span>건</span></span></P>
|
||||
<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> --%>
|
||||
<dl>
|
||||
<dt>대기</dt>
|
||||
<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>
|
||||
</dl>
|
||||
</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 class="rev_admin_in">
|
||||
<div class="rev_admin_top clearfix">
|
||||
<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>
|
||||
</div>
|
||||
<div class="rev_admin_btm admin_btm">
|
||||
<P class="title_top">WEB<span class="title_num"><fmt:formatNumber value="${H_mmsSentCntVO.totCnt}" pattern="#,###"/><span>건</span></span></P>
|
||||
<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> --%>
|
||||
<dl>
|
||||
<dt>대기</dt>
|
||||
<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>
|
||||
</dl>
|
||||
</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>
|
||||
@ -4,6 +4,8 @@
|
||||
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
|
||||
<%@ taglib prefix="ec" uri="/WEB-INF/tld/ecnet_tld.tld"%>
|
||||
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
|
||||
<%@ taglib prefix="fnc" uri="/WEB-INF/tld/functions.tld"%>
|
||||
|
||||
|
||||
<script src="https://t1.daumcdn.net/mapjsapi/bundle/postcode/prod/postcode.v2.js"></script>
|
||||
<script language=javascript>
|
||||
@ -845,8 +847,9 @@ function callTo() {
|
||||
</td>
|
||||
<td>
|
||||
<c:choose>
|
||||
<c:when test="${not empty resultSentMsg.regdate}">
|
||||
<fmt:formatDate value="${resultSentMsg.regdate}" pattern="yyyy-MM-dd HH:mm:ss"/>
|
||||
<c:when test="${not empty resultSentMsg.regDate}">
|
||||
<%-- <fmt:formatDate value="${resultSentMsg.regDate}" pattern="yyyy-MM-dd HH:mm:ss"/> --%>
|
||||
${fnc:setStrToDataFormatter(resultSentMsg.regDate, 'yyyy-MM-dd HH:mm:ss') }
|
||||
</c:when>
|
||||
<c:otherwise>
|
||||
-
|
||||
|
||||
31
src/main/webapp/WEB-INF/tld/functions.tld
Normal file
31
src/main/webapp/WEB-INF/tld/functions.tld
Normal 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>
|
||||
@ -13,6 +13,7 @@
|
||||
|
||||
// 문자 그룹정보 => 재전송용
|
||||
function getMjMsgGroupInfoByResend() {
|
||||
console.log('재전송 시 싱행되는 function');
|
||||
$.ajax({
|
||||
type: "POST",
|
||||
url: "/web/mjon/msgdata/selectMjMsgGroupInfoByResendAjax.do",
|
||||
@ -33,6 +34,7 @@ function getMjMsgGroupInfoByResend() {
|
||||
|
||||
var smsTxt = msgData.smsTxt;
|
||||
var subject = msgData.subject;
|
||||
var subjectChkYn = msgData.subjectChkYn;
|
||||
var fileId = "";
|
||||
var filePath = "";
|
||||
var len = fileData.length;
|
||||
@ -56,12 +58,14 @@ function getMjMsgGroupInfoByResend() {
|
||||
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');
|
||||
$("input:radio[name='title_status']:radio[value='Y']").prop('checked', true); // 선택하기
|
||||
$("input:radio[name='subjectChkYn']:radio[value='Y']").prop('checked', true); // 선택하기
|
||||
$('.textbox').show();
|
||||
$("#mmsSubject").val(subject);
|
||||
}
|
||||
}
|
||||
|
||||
// 문자내용
|
||||
if (smsTxt.indexOf("(광고)") == 0) {
|
||||
@ -1280,10 +1284,8 @@ function sendMsgAjax_advc(){
|
||||
dataType: 'json',
|
||||
success: function (data) {
|
||||
|
||||
console.log('data : ', data);
|
||||
|
||||
var status = data.status;
|
||||
if("OK" == status){
|
||||
if("OK" == status){ // 성공
|
||||
|
||||
var smsCnt = Number(data.object.resultSts);
|
||||
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);
|
||||
return false;
|
||||
|
||||
}else if("UNAUTHORIZED" == status){
|
||||
}else if("UNAUTHORIZED" == status){ // 정지 회원 처리
|
||||
|
||||
alert(data.message);
|
||||
//문자발송 URL Move
|
||||
goMsgUrlMove();
|
||||
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 .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 = "";
|
||||
} else if (getSpacialStringChk(form.mmsSubject.value)) {
|
||||
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(!emojiCheck(form.mmsSubject.value)) return false;
|
||||
}
|
||||
@ -1710,15 +1712,15 @@ function msgSpamClose(obj){
|
||||
|
||||
function msgResultLink(){
|
||||
var reserYn = $("input[name=reserYn]:checked").val(); // 예약 발송 여부 확인
|
||||
if(reserYn == 'Y'){
|
||||
/*if(reserYn == 'Y'){
|
||||
|
||||
location.href="/web/mjon/reservmsg/selectReservMsgView.do";
|
||||
|
||||
}else{
|
||||
}else{*/
|
||||
|
||||
location.href="/web/mjon/msgsent/selectMsgSentView.do";
|
||||
|
||||
}
|
||||
/*}*/
|
||||
|
||||
}
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user