diff --git a/src/main/java/itn/com/cmm/util/DateUtils.java b/src/main/java/itn/com/cmm/util/DateUtils.java index 8fad5f13..98def430 100644 --- a/src/main/java/itn/com/cmm/util/DateUtils.java +++ b/src/main/java/itn/com/cmm/util/DateUtils.java @@ -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; + } + + + } diff --git a/src/main/java/itn/com/cmm/util/FileUtil.java b/src/main/java/itn/com/cmm/util/FileUtil.java index 34a52cc1..319c8698 100644 --- a/src/main/java/itn/com/cmm/util/FileUtil.java +++ b/src/main/java/itn/com/cmm/util/FileUtil.java @@ -25,45 +25,44 @@ import org.apache.commons.lang3.StringUtils; */ public final class FileUtil { - /** - * @methodName : downLoad - * @author : 이호영 - * @date : 2023.04.06 - * @description : 파일 다운로드 - * @param response - * @param fileInfo - * @param fileName - * @throws Exception - */ - public static void downLoad(HttpServletResponse response, String fileInfo, String fileNameP) throws Exception { - - - try { - String path = fileInfo; // 경로에 접근할 때 역슬래시('\') 사용 - - File file = new File(path); - - String fileName = ""; - if(StringUtils.isNotEmpty(fileNameP)) - fileName = URLEncoder.encode(fileNameP,"UTF-8").replaceAll("\\+", "%20"); - else - fileName = file.getName(); - - response.setHeader("Content-Disposition", "attachment;filename=" + fileName); // 다운로드 되거나 로컬에 저장되는 용도로 쓰이는지를 알려주는 헤더 - - FileInputStream fileInputStream = new FileInputStream(path); // 파일 읽어오기 - OutputStream out = response.getOutputStream(); - - int read = 0; - byte[] buffer = new byte[1024]; - while ((read = fileInputStream.read(buffer)) != -1) { // 1024바이트씩 계속 읽으면서 outputStream에 저장, -1이 나오면 더이상 읽을 파일이 없음 - out.write(buffer, 0, read); - } - - } catch (Exception e) { - throw new Exception("download error"); - } + /** + * @methodName : downLoad + * @author : 이호영 + * @date : 2023.04.06 + * @description : 파일 다운로드 + * @param response + * @param fileInfo + * @param fileName + * @throws Exception + */ + public static void downLoad(HttpServletResponse response, String fileInfo, String fileNameP) throws Exception { + + + try { + String path = fileInfo; // 경로에 접근할 때 역슬래시('\') 사용 + + File file = new File(path); + + String fileName = ""; + if(StringUtils.isNotEmpty(fileNameP)) + fileName = URLEncoder.encode(fileNameP,"UTF-8").replaceAll("\\+", "%20"); + else + fileName = file.getName(); + + response.setHeader("Content-Disposition", "attachment;filename=" + fileName); // 다운로드 되거나 로컬에 저장되는 용도로 쓰이는지를 알려주는 헤더 + + FileInputStream fileInputStream = new FileInputStream(path); // 파일 읽어오기 + OutputStream out = response.getOutputStream(); + + int read = 0; + byte[] buffer = new byte[1024]; + while ((read = fileInputStream.read(buffer)) != -1) { // 1024바이트씩 계속 읽으면서 outputStream에 저장, -1이 나오면 더이상 읽을 파일이 없음 + out.write(buffer, 0, read); + } + } catch (Exception e) { + throw new Exception("download error"); + } } - - + + } diff --git a/src/main/java/itn/com/cmm/util/MsgSendUtils.java b/src/main/java/itn/com/cmm/util/MsgSendUtils.java index 0fdc18b9..1801fd45 100644 --- a/src/main/java/itn/com/cmm/util/MsgSendUtils.java +++ b/src/main/java/itn/com/cmm/util/MsgSendUtils.java @@ -276,7 +276,6 @@ public final class MsgSendUtils { for (Map.Entry> 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); diff --git a/src/main/java/itn/let/cmm/vo/FileInfoVO.java b/src/main/java/itn/let/cmm/vo/FileInfoVO.java new file mode 100644 index 00000000..8c1b48c3 --- /dev/null +++ b/src/main/java/itn/let/cmm/vo/FileInfoVO.java @@ -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; // 파일 순번 + +} diff --git a/src/main/java/itn/let/kakao/user/sent/web/KakaoSentController.java b/src/main/java/itn/let/kakao/user/sent/web/KakaoSentController.java index 19d95a5e..ec57539a 100644 --- a/src/main/java/itn/let/kakao/user/sent/web/KakaoSentController.java +++ b/src/main/java/itn/let/kakao/user/sent/web/KakaoSentController.java @@ -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"}) diff --git a/src/main/java/itn/let/mjo/addr/service/AddrService.java b/src/main/java/itn/let/mjo/addr/service/AddrService.java index ea1179a2..ad8f1b03 100644 --- a/src/main/java/itn/let/mjo/addr/service/AddrService.java +++ b/src/main/java/itn/let/mjo/addr/service/AddrService.java @@ -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; } diff --git a/src/main/java/itn/let/mjo/addr/service/impl/AddrDAO.java b/src/main/java/itn/let/mjo/addr/service/impl/AddrDAO.java index 7e5a1bd2..d3be405f 100644 --- a/src/main/java/itn/let/mjo/addr/service/impl/AddrDAO.java +++ b/src/main/java/itn/let/mjo/addr/service/impl/AddrDAO.java @@ -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); + } + } diff --git a/src/main/java/itn/let/mjo/addr/service/impl/AddrServiceImpl.java b/src/main/java/itn/let/mjo/addr/service/impl/AddrServiceImpl.java index f1437a01..0fb6d3dc 100644 --- a/src/main/java/itn/let/mjo/addr/service/impl/AddrServiceImpl.java +++ b/src/main/java/itn/let/mjo/addr/service/impl/AddrServiceImpl.java @@ -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 최초 생성 * */ +@Slf4j @Service("AddrService") public class AddrServiceImpl extends EgovAbstractServiceImpl implements AddrService { @@ -644,5 +647,81 @@ 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 addrDataInfo = new ArrayList(); + + 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); + } } diff --git a/src/main/java/itn/let/mjo/addr/web/AddrController.java b/src/main/java/itn/let/mjo/addr/web/AddrController.java index 2f04ae77..dd4f014d 100644 --- a/src/main/java/itn/let/mjo/addr/web/AddrController.java +++ b/src/main/java/itn/let/mjo/addr/web/AddrController.java @@ -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; * * */ +@Slf4j @Controller public class AddrController { @@ -2223,6 +2230,47 @@ public class AddrController { return modelAndView; } + + @RequestMapping(value = {"/web/mjon/addr/insertByAddrGrpDataAndAddrDataAjax.do"}) + public ResponseEntity 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 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) { diff --git a/src/main/java/itn/let/mjo/msg/service/MjonMsgVO.java b/src/main/java/itn/let/mjo/msg/service/MjonMsgVO.java index 809414c0..43589dea 100644 --- a/src/main/java/itn/let/mjo/msg/service/MjonMsgVO.java +++ b/src/main/java/itn/let/mjo/msg/service/MjonMsgVO.java @@ -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: 카카오 알림톡 전송)', diff --git a/src/main/java/itn/let/mjo/msgdata/service/MjonMsgDataVO.java b/src/main/java/itn/let/mjo/msgdata/service/MjonMsgDataVO.java index e4704a72..09d9aa28 100644 --- a/src/main/java/itn/let/mjo/msgdata/service/MjonMsgDataVO.java +++ b/src/main/java/itn/let/mjo/msgdata/service/MjonMsgDataVO.java @@ -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; diff --git a/src/main/java/itn/let/mjo/msgdata/service/impl/MjonMsgDataServiceImpl.java b/src/main/java/itn/let/mjo/msgdata/service/impl/MjonMsgDataServiceImpl.java index a3f1ac0d..8f183fb5 100644 --- a/src/main/java/itn/let/mjo/msgdata/service/impl/MjonMsgDataServiceImpl.java +++ b/src/main/java/itn/let/mjo/msgdata/service/impl/MjonMsgDataServiceImpl.java @@ -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( diff --git a/src/main/java/itn/let/mjo/msgdata/web/MjonMsgDataController.java b/src/main/java/itn/let/mjo/msgdata/web/MjonMsgDataController.java index 79b24d41..d4657e7a 100644 --- a/src/main/java/itn/let/mjo/msgdata/web/MjonMsgDataController.java +++ b/src/main/java/itn/let/mjo/msgdata/web/MjonMsgDataController.java @@ -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 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"}) diff --git a/src/main/java/itn/let/mjo/msgsent/service/MjonMsgDetailSentVO.java b/src/main/java/itn/let/mjo/msgsent/service/MjonMsgDetailSentVO.java new file mode 100644 index 00000000..403de3c8 --- /dev/null +++ b/src/main/java/itn/let/mjo/msgsent/service/MjonMsgDetailSentVO.java @@ -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 fileInfos; +} diff --git a/src/main/java/itn/let/mjo/msgsent/service/MjonMsgSWFDTO.java b/src/main/java/itn/let/mjo/msgsent/service/MjonMsgSWFDTO.java new file mode 100644 index 00000000..7cafbab5 --- /dev/null +++ b/src/main/java/itn/let/mjo/msgsent/service/MjonMsgSWFDTO.java @@ -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; // 분할여부 + +} diff --git a/src/main/java/itn/let/mjo/msgsent/service/MjonMsgSentService.java b/src/main/java/itn/let/mjo/msgsent/service/MjonMsgSentService.java index c0d73343..ca2dbe0f 100644 --- a/src/main/java/itn/let/mjo/msgsent/service/MjonMsgSentService.java +++ b/src/main/java/itn/let/mjo/msgsent/service/MjonMsgSentService.java @@ -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 selectAllMsgSentList(MjonMsgSentVO mjonMsgSentVO) throws Exception; + public Map selectAllMsgSentList_advc(MjonMsgSentVO mjonMsgSentVO) throws Exception; + //발송 관리 전체 발송 리스트 불러오기 => 주소록 조인 제거버전 public List selectAllMsgSentSimpleList(MjonMsgSentVO mjonMsgSentVO) throws Exception; @@ -54,5 +60,14 @@ public interface MjonMsgSentService { //첨부파일 정보 불러오기 public MjonMsgSentVO selectFileInfo(String streFileId) throws Exception; + + public int countAllMsgSentList(MjonMsgSentVO mjonMsgSentVO); + + public Map selectAllMsgSentDetailView(MjonMsgDetailSentVO mjonMsgDetailSentVO) throws Exception; + + public List findByMsgDetailListAjax(MjonMsgDetailSentVO mjonMsgDetailSentVO); + + public void msgSentExcelDownLoad(MjonMsgSentVO mjonMsgSentVO, HttpServletResponse response) throws IOException, Exception; + } diff --git a/src/main/java/itn/let/mjo/msgsent/service/MjonMsgSentVO.java b/src/main/java/itn/let/mjo/msgsent/service/MjonMsgSentVO.java index f7478240..1e412147 100644 --- a/src/main/java/itn/let/mjo/msgsent/service/MjonMsgSentVO.java +++ b/src/main/java/itn/let/mjo/msgsent/service/MjonMsgSentVO.java @@ -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; } diff --git a/src/main/java/itn/let/mjo/msgsent/service/impl/MjonMsgSentDAO.java b/src/main/java/itn/let/mjo/msgsent/service/impl/MjonMsgSentDAO.java index bb43a7f0..7e1e84ae 100644 --- a/src/main/java/itn/let/mjo/msgsent/service/impl/MjonMsgSentDAO.java +++ b/src/main/java/itn/let/mjo/msgsent/service/impl/MjonMsgSentDAO.java @@ -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) list("MjonMsgSentDAO.selectAllMsgSentList",mjonMsgSentVO); } + //발송 관리 전체 발송 리스트 불러오기 + @SuppressWarnings("unchecked") + public List selectAllMsgSentList_advc(MjonMsgSentVO mjonMsgSentVO) throws Exception{ + + return (List) list("MjonMsgSentDAO.selectAllMsgSentList_advc",mjonMsgSentVO); + } + //발송 관리 전체 발송 리스트 불러오기 => 주소록 조인 제거버전 @SuppressWarnings("unchecked") public List selectAllMsgSentSimpleList(MjonMsgSentVO mjonMsgSentVO) throws Exception{ @@ -158,5 +167,28 @@ public class MjonMsgSentDAO extends EgovAbstractDAO { public MjonMsgSentVO selectFileInfo(String streFileId) throws Exception{ 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 findByMsgDetailListAjax(MjonMsgDetailSentVO mjonMsgDetailSentVO) { + + return (List) list("MjonMsgSentDAO.findByMsgDetailListAjax", mjonMsgDetailSentVO); + } + + public List findByReqDateWhereMsgGroupId(String msgGroupId) { + return (List) list("MjonMsgSentDAO.findByReqDateWhereMsgGroupId", msgGroupId); + } } diff --git a/src/main/java/itn/let/mjo/msgsent/service/impl/MjonMsgSentServiceImpl.java b/src/main/java/itn/let/mjo/msgsent/service/impl/MjonMsgSentServiceImpl.java index f142d639..60105a6e 100644 --- a/src/main/java/itn/let/mjo/msgsent/service/impl/MjonMsgSentServiceImpl.java +++ b/src/main/java/itn/let/mjo/msgsent/service/impl/MjonMsgSentServiceImpl.java @@ -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 selectAllMsgSentList_advc(MjonMsgSentVO mjonMsgSentVO) throws Exception{ + + + Map resultMap = new HashMap(); + + // 목록 + List 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 selectAllMsgSentDetailView(MjonMsgDetailSentVO mjonMsgDetailSentVO) throws Exception{ + + Map resultMap = new HashMap(); + + // 목록 + 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 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 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 requestTimes = mjonMsgSentDAO.findByReqDateWhereMsgGroupId(msgGroupId); + + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.S"); + Map timeCountMap = new LinkedHashMap<>(); + + // REQ_DATE 그룹화 (같은 시간대 몇 건인지) + for (String timeStr : requestTimes) { + LocalDateTime time = LocalDateTime.parse(timeStr, formatter); + timeCountMap.put(time, timeCountMap.getOrDefault(time, 0) + 1); + } + + // 가장 첫 번째 시간 & 간격 계산 + List sortedKeys = new ArrayList<>(timeCountMap.keySet()); + if (sortedKeys.size() < 2) { + return "데이터 부족 (분석 불가)"; + } + + int batchSize = timeCountMap.get(sortedKeys.get(0)); // 한 번에 보낸 건수 + int intervalMinutes = sortedKeys.get(1).getMinute() - sortedKeys.get(0).getMinute(); // 시간 간격 계산 +// int batchCount = sortedKeys.size(); // 총 몇 번 보냈는지 + +// return String.format("%,d건씩 %d분 간격 (%d회 발송)", batchSize, intervalMinutes, batchCount); + return String.format("%,d건씩 %d분 간격", batchSize, intervalMinutes); + + } + + private List getFileInfo(MjonMsgDetailSentVO result) throws Exception { + + + List 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 selectAllMsgSentSimpleList(MjonMsgSentVO mjonMsgSentVO) throws Exception{ List resultList = new ArrayList(); @@ -243,4 +472,384 @@ public class MjonMsgSentServiceImpl extends EgovAbstractServiceImpl implements public MjonMsgSentVO selectFileInfo(String streFileId) throws Exception { return mjonMsgSentDAO.selectFileInfo(streFileId); } + + @Override + public List findByMsgDetailListAjax(MjonMsgDetailSentVO mjonMsgDetailSentVO) { + + List 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 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 makeDetailFunction(List 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 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 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; + + } } diff --git a/src/main/java/itn/let/mjo/msgsent/web/MjonMsgSentController.java b/src/main/java/itn/let/mjo/msgsent/web/MjonMsgSentController.java index 89898107..c33fe418 100644 --- a/src/main/java/itn/let/mjo/msgsent/web/MjonMsgSentController.java +++ b/src/main/java/itn/let/mjo/msgsent/web/MjonMsgSentController.java @@ -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 totalMsgCnt = mjonMsgSentService.selectDetailMsgSentCnt(mjonMsgSentVO); - model.addAttribute("totalMsgCnt", totalMsgCnt); - - //단문 성공건, 실패건 불러오기 - mjonMsgSentVO.setMsgType("4"); - List smsMsgCnt = mjonMsgSentService.selectDetailMsgSentCnt(mjonMsgSentVO); - model.addAttribute("smsMsgCnt", smsMsgCnt); - - //장문 성공건, 실패건 불러오기 - mjonMsgSentVO.setMsgType("6"); - mjonMsgSentVO.setFileCnt("0"); - List lmsMsgCnt = mjonMsgSentService.selectDetailMsgSentCnt(mjonMsgSentVO); - model.addAttribute("lmsMsgCnt", lmsMsgCnt); - - //그림문자 성공건, 실패건 불러오기 - mjonMsgSentVO.setMsgType("6"); - mjonMsgSentVO.setFileCnt("1"); - List mmsMsgCnt = mjonMsgSentService.selectDetailMsgSentCnt(mjonMsgSentVO); - model.addAttribute("mmsMsgCnt", mmsMsgCnt); - */ - - /* - //전체 발송 건수 통계 불러오기 - mjonMsgSentVO.setMsgType(""); - List totalMsgCnt = mjonMsgSentService.selectDetailMsgSentCntMix(mjonMsgSentVO); - - System.out.println("start"); - - // H:홈페이지, A:API 로 sms, lms, mms 나누는 영역 - List H_totalMsgCnt = totalMsgCnt.stream().filter(t -> "H".equals(t.getSendKind())).collect(Collectors.toList()); - List H_smsMsgCnt = new ArrayList(); - List H_lmsMsgCnt = new ArrayList(); - List H_mmsMsgCnt = new ArrayList(); - - System.out.println("start"); - - List A_totalMsgCnt = totalMsgCnt.stream().filter(t -> "A".equals(t.getSendKind())).collect(Collectors.toList()); - List A_smsMsgCnt = new ArrayList(); - List A_lmsMsgCnt = new ArrayList(); - List A_mmsMsgCnt = new ArrayList(); - - 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)); - */ - - - - /* - a.mber_nm LIKE CONCAT('%',#searchKeyword#,'%') - - */ - 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,37 +135,67 @@ 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()); 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 resultMap = mjonMsgSentService.selectAllMsgSentDetailView(mjonMsgDetailSentVO); + model.addAttribute("result", resultMap.get("result")); + + return "web/msgsent/MsgSentDetailView"; + } + + // 팩스 금일 발송통계 갱신 + @RequestMapping(value= {"/web/mjon/msgsent/findByMsgDetailListAjax.do"}) + public ResponseEntity findByMsgDetailListAjax(MjonMsgDetailSentVO mjonMsgDetailSentVO) throws Exception { + + + List resultList = mjonMsgSentService.findByMsgDetailListAjax(mjonMsgDetailSentVO); + + + return ResponseEntity.ok().body(new StatusResponse(HttpStatus.OK, "", resultList)); + } /** * 마이페이지 - 이용내역 - ajax @@ -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 totalMsgCnt = mjonMsgSentService.selectDetailMsgSentCntMix(mjonMsgSentVO); + + long endTime = System.nanoTime(); // 종료 시간 측정 + double executionTimeInSeconds = (endTime - startTime) / 1_000_000_000.0; + System.out.println("Execution time: " + executionTimeInSeconds + " seconds"); - System.out.println("start"); // H:홈페이지, A:API 로 sms, lms, mms 나누는 영역 - List H_totalMsgCnt = totalMsgCnt.stream().filter(t -> "H".equals(t.getSendKind())).collect(Collectors.toList()); List H_smsMsgCnt = new ArrayList(); List H_lmsMsgCnt = new ArrayList(); List H_mmsMsgCnt = new ArrayList(); - System.out.println("start"); - - List A_totalMsgCnt = totalMsgCnt.stream().filter(t -> "A".equals(t.getSendKind())).collect(Collectors.toList()); - List A_smsMsgCnt = new ArrayList(); - List A_lmsMsgCnt = new ArrayList(); - List A_mmsMsgCnt = new ArrayList(); - - 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)); - - - - - /* - a.mber_nm LIKE CONCAT('%',#searchKeyword#,'%') - - */ - 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,89 +316,173 @@ 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 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()); - - mjonMsgSentVO.setUserId(userId); - - // 검색 리스트 불러오기 + 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(mjonMsgSentVO.getSearchSortOrd().equals("")) { - - mjonMsgSentVO.setSearchSortOrd("desc"); - mjonMsgSentVO.setSearchSortCnd("regdate"); - } - - if(mjonMsgSentVO.getListType().equals("")) { - - mjonMsgSentVO.setListType("groupList"); - - } - - //선택 탭 정보 저장 - //mjonResvMsgVO.setSearchMsgType(mjonResvMsgVO.getTabType()); - + //기본 내림차순 정렬 + if(mjonMsgSentVO.getSearchSortOrd().equals("")) { + + mjonMsgSentVO.setSearchSortOrd("desc"); + mjonMsgSentVO.setSearchSortCnd("regdate"); + } + + if(mjonMsgSentVO.getListType().equals("")) { + + mjonMsgSentVO.setListType("groupList"); + + } + + //선택 탭 정보 저장 + //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.getStartDate(),mjonMsgSentVO.getEndDate(), 3 )) { mjonMsgSentVO.setStartDate(DateUtils.getDateMonthsAgo(3)); mjonMsgSentVO.setEndDate(DateUtils.getCurrentDate()); }; - - model.addAttribute("startDate", mjonMsgSentVO.getStartDate()); - model.addAttribute("endDate", mjonMsgSentVO.getEndDate()); - //전체 발송 리스트 불러오기 - List resultAllSentList = mjonMsgSentService.selectAllMsgSentList(mjonMsgSentVO); - model.addAttribute("resultAllSentList", resultAllSentList); - model.addAttribute("resultAllSentCnt", resultAllSentList.size()); - - model.addAttribute("searchKeyword", mjonMsgSentVO.getSearchKeyword()); - paginationInfo.setTotalRecordCount( resultAllSentList.size()> 0 ? (Integer.parseInt((resultAllSentList.get(0)).getTotMsgCnt())) : 0); - model.addAttribute("paginationInfo", paginationInfo); - model.addAttribute("totalRecordCount", paginationInfo.getTotalRecordCount()); - - //발송 결과 성공 실패 건수 리스트 불러오기 - List resultMsgSucFailList = new ArrayList(); - - if(resultAllSentList.size() > 0) { - resultMsgSucFailList = mjonMsgSentService.selectAllMsgSentSucFailList(resultAllSentList, mjonMsgSentVO); - } - model.addAttribute("resultMsgSucFailList", resultMsgSucFailList); - - model.addAttribute("mjonMsgSentVO", mjonMsgSentVO); - - String stateType = mjonMsgSentVO.getStateType(); - String pageUrl = "web/msgsent/MsgSentAllListAjax"; - - if(stateType.equals("ready")) { - - pageUrl = "web/msgsent/MsgSentReadyListAjax"; - - }else if(stateType.equals("complete")) { - - pageUrl = "web/msgsent/MsgSentCompleteListAjax"; - - }else if(stateType.equals("fail")) { - - pageUrl = "web/msgsent/MsgSentFailListAjax"; - - } + model.addAttribute("startDate", mjonMsgSentVO.getStartDate()); + model.addAttribute("endDate", mjonMsgSentVO.getEndDate()); + + //전체 발송 리스트 불러오기 + List resultAllSentList = mjonMsgSentService.selectAllMsgSentList(mjonMsgSentVO); + + + model.addAttribute("resultAllSentList", resultAllSentList); + model.addAttribute("resultAllSentCnt", resultAllSentList.size()); + + model.addAttribute("searchKeyword", mjonMsgSentVO.getSearchKeyword()); + paginationInfo.setTotalRecordCount( resultAllSentList.size()> 0 ? (Integer.parseInt((resultAllSentList.get(0)).getTotMsgCnt())) : 0); + model.addAttribute("paginationInfo", paginationInfo); + model.addAttribute("totalRecordCount", paginationInfo.getTotalRecordCount()); + + //발송 결과 성공 실패 건수 리스트 불러오기 + List resultMsgSucFailList = new ArrayList(); + + 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")) { + + pageUrl = "web/msgsent/MsgSentReadyListAjax"; + + }else if(stateType.equals("complete")) { + + pageUrl = "web/msgsent/MsgSentCompleteListAjax"; + + }else if(stateType.equals("fail")) { + + 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; - - 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 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) {} - } + mjonMsgSentService.msgSentExcelDownLoad(mjonMsgSentVO, response); + } diff --git a/src/main/java/itn/let/mjo/reservmsg/service/impl/MjonReservMsgServiceImpl.java b/src/main/java/itn/let/mjo/reservmsg/service/impl/MjonReservMsgServiceImpl.java index 988625d6..4be2baa8 100644 --- a/src/main/java/itn/let/mjo/reservmsg/service/impl/MjonReservMsgServiceImpl.java +++ b/src/main/java/itn/let/mjo/reservmsg/service/impl/MjonReservMsgServiceImpl.java @@ -341,6 +341,7 @@ public class MjonReservMsgServiceImpl extends EgovAbstractServiceImpl implements } } catch (Exception e) { + e.printStackTrace(); System.out.println("++++++++++++++++++++++ 예약문자 취소 deleteReservMsgCancelDataAjax Service Imple Error !!! " + e); } diff --git a/src/main/java/itn/let/mjo/reservmsg/web/MjonReservMsgController.java b/src/main/java/itn/let/mjo/reservmsg/web/MjonReservMsgController.java index c8fa6cd3..462adf29 100644 --- a/src/main/java/itn/let/mjo/reservmsg/web/MjonReservMsgController.java +++ b/src/main/java/itn/let/mjo/reservmsg/web/MjonReservMsgController.java @@ -610,37 +610,43 @@ public class MjonReservMsgController { ModelAndView modelAndView = new ModelAndView(); modelAndView.setViewName("jsonView"); + try { - //로그인 권한정보 불러오기 - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - - if(!userId.equals("")) { - - mjonResvMsgVO.setUserId(userId); - - }else { - - modelAndView.addObject("message", "로그인 후 이용이 가능합니다."); - modelAndView.addObject("result", "fail"); - - return modelAndView; - - } - - // 디비에 문자 내용을 저장해 준다. - int resultSts = mjonReservMsgService.deleteReservMsgCancelDataAjax(mjonResvMsgVO); - - if(resultSts > 0) { + //로그인 권한정보 불러오기 + LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; + String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); + + if(!userId.equals("")) { + + mjonResvMsgVO.setUserId(userId); + + }else { + + modelAndView.addObject("message", "로그인 후 이용이 가능합니다."); + modelAndView.addObject("result", "fail"); + + return modelAndView; + + } + + // 디비에 문자 내용을 저장해 준다. + int resultSts = mjonReservMsgService.deleteReservMsgCancelDataAjax(mjonResvMsgVO); - modelAndView.addObject("message", "예약 발송이 정상적으로 취소 되었습니다."); - modelAndView.addObject("result", "success"); - - }else { - - modelAndView.addObject("message", "예약 발송 취소 처리가 실패 되었습니다. 잠시 후 다시 시도해 주세요."); - modelAndView.addObject("result", "fail"); + if(resultSts > 0) { + + modelAndView.addObject("message", "예약 발송이 정상적으로 취소 되었습니다."); + modelAndView.addObject("result", "success"); + + }else { + + modelAndView.addObject("message", "예약 발송 취소 처리가 실패 되었습니다. 잠시 후 다시 시도해 주세요."); + modelAndView.addObject("result", "fail"); + + } + } catch (Exception e) { + e.printStackTrace(); + // TODO: handle exception } return modelAndView; diff --git a/src/main/java/itn/let/uss/umt/service/UserDefaultVO.java b/src/main/java/itn/let/uss/umt/service/UserDefaultVO.java index a4a8d8c0..3432dcd3 100644 --- a/src/main/java/itn/let/uss/umt/service/UserDefaultVO.java +++ b/src/main/java/itn/let/uss/umt/service/UserDefaultVO.java @@ -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; * * */ +@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; - } - } diff --git a/src/main/resources/egovframework/sqlmap/let/mjo/addr/Addr_SQL_Mysql.xml b/src/main/resources/egovframework/sqlmap/let/mjo/addr/Addr_SQL_Mysql.xml index b43a863a..a20ea414 100644 --- a/src/main/resources/egovframework/sqlmap/let/mjo/addr/Addr_SQL_Mysql.xml +++ b/src/main/resources/egovframework/sqlmap/let/mjo/addr/Addr_SQL_Mysql.xml @@ -933,7 +933,7 @@ - + /* AddrDAO.insertAddrList */ INSERT INTO MJ_ADDR ( @@ -967,7 +967,18 @@ ) - + + + + + DELETE FROM MJ_ADDR + + WHERE MBER_ID = #mberId# + + #addrPhones[]# + + + + /* 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 @@ + + + + + + + + + + + + + + + + + + + + + + + + 코드를 선택하세요 diff --git a/src/main/webapp/WEB-INF/jsp/cmm/uss/umt/EgovGnrlUserSelectUpdt.jsp b/src/main/webapp/WEB-INF/jsp/cmm/uss/umt/EgovGnrlUserSelectUpdt.jsp index e8aa3a6a..9e54b0c9 100644 --- a/src/main/webapp/WEB-INF/jsp/cmm/uss/umt/EgovGnrlUserSelectUpdt.jsp +++ b/src/main/webapp/WEB-INF/jsp/cmm/uss/umt/EgovGnrlUserSelectUpdt.jsp @@ -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(){
- - + +<%-- --%> + ${fnc:setStrToDataFormatter(mjonMsgSentList.regDate, 'MM-dd HH:mm') } +<%-- --%> - @@ -4190,7 +4193,8 @@ function fnInputSmsTxt(){ [예약]
- +<%-- --%> + ${fnc:setStrToDataFormatter(mjonMsgSentList.regDate, 'MM-dd HH:mm') }
- @@ -4367,8 +4371,11 @@ function fnInputSmsTxt(){
- - + +<%-- --%> +<%-- --%> + + ${fnc:setStrToDataFormatter(mjonMsgSentList.regDate, 'MM-dd HH:mm') } - @@ -4400,7 +4407,8 @@ function fnInputSmsTxt(){ [예약]
- + ${fnc:setStrToDataFormatter(mjonMsgSentList.regDate, 'yyyy-MM-dd HH:mm') } +<%-- --%>
- @@ -4586,8 +4594,8 @@ function fnInputSmsTxt(){
- - + + - @@ -4605,7 +4613,7 @@ function fnInputSmsTxt(){ - [스미싱의심] + [스미싱의심] - @@ -4785,6 +4793,10 @@ function fnInputSmsTxt(){ + + + +<%-- ${fnc:setStrToDataFormatter(kakaoResultList.regDate, 'MM-dd HH:mm') } --%> @@ -4925,8 +4937,10 @@ function fnInputSmsTxt(){ - - + + ${fnc:setStrToDataFormatter(kakaoReserveList.regDate, 'MM-dd HH:mm') } +<%-- --%> +<%-- --%> @@ -5073,8 +5087,11 @@ function fnInputSmsTxt(){ - - +<%-- --%> + ${fnc:setStrToDataFormatter(kakaoDelayInfo.regDate, 'MM-dd HH:mm') } +<%-- --%> +<%-- --%> +<%-- --%> - diff --git a/src/main/webapp/WEB-INF/jsp/web/kakao/include/KaKaoAlimtalkTopMenuTap.jsp b/src/main/webapp/WEB-INF/jsp/web/kakao/include/KaKaoAlimtalkTopMenuTap.jsp index 0ab5e87b..d0e25dd8 100644 --- a/src/main/webapp/WEB-INF/jsp/web/kakao/include/KaKaoAlimtalkTopMenuTap.jsp +++ b/src/main/webapp/WEB-INF/jsp/web/kakao/include/KaKaoAlimtalkTopMenuTap.jsp @@ -142,10 +142,10 @@ function cntntBtnInfo(stepInfo){
  • -<%-- --%> - -<%-- --%> + +
  • +
\ No newline at end of file diff --git a/src/main/webapp/WEB-INF/jsp/web/kakao/include/KakaoSentTopMentTap.jsp b/src/main/webapp/WEB-INF/jsp/web/kakao/include/KakaoSentTopMentTap.jsp index 930800d1..0e019972 100644 --- a/src/main/webapp/WEB-INF/jsp/web/kakao/include/KakaoSentTopMentTap.jsp +++ b/src/main/webapp/WEB-INF/jsp/web/kakao/include/KakaoSentTopMentTap.jsp @@ -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){ diff --git a/src/main/webapp/WEB-INF/jsp/web/kakao/sent/KakaoSentView.jsp b/src/main/webapp/WEB-INF/jsp/web/kakao/sent/KakaoSentView.jsp index d3c53069..ea518568 100644 --- a/src/main/webapp/WEB-INF/jsp/web/kakao/sent/KakaoSentView.jsp +++ b/src/main/webapp/WEB-INF/jsp/web/kakao/sent/KakaoSentView.jsp @@ -946,10 +946,10 @@ function infoPop(pageUrl){
  • -<%-- --%> - -<%-- --%> + +
  • +
diff --git a/src/main/webapp/WEB-INF/jsp/web/msgdata/MsgDataSMLView.jsp b/src/main/webapp/WEB-INF/jsp/web/msgdata/MsgDataSMLView.jsp index dc479994..edea90ac 100644 --- a/src/main/webapp/WEB-INF/jsp/web/msgdata/MsgDataSMLView.jsp +++ b/src/main/webapp/WEB-INF/jsp/web/msgdata/MsgDataSMLView.jsp @@ -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 = ''; //제목 사용한 경우 - 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) {
+ +
@@ -4018,9 +4020,9 @@ function getMjMsgSentListAll(pageNo) {
  • - + - +
  • diff --git a/src/main/webapp/WEB-INF/jsp/web/msgdata/MsgDataView.jsp b/src/main/webapp/WEB-INF/jsp/web/msgdata/MsgDataView.jsp index 7f41a177..10737a8c 100644 --- a/src/main/webapp/WEB-INF/jsp/web/msgdata/MsgDataView.jsp +++ b/src/main/webapp/WEB-INF/jsp/web/msgdata/MsgDataView.jsp @@ -123,18 +123,18 @@ $(document).ready(function(){ -
    - -
    - -
      -
    • - -
    • -
    • - -
    • -
    +
    + +
    + +
      +
    • + +
    • +
    • + +
    • +
    diff --git a/src/main/webapp/WEB-INF/jsp/web/msgsent/MsgSentAllListAjax.jsp b/src/main/webapp/WEB-INF/jsp/web/msgsent/MsgSentAllListAjax.jsp index bed33ccc..8cfd15eb 100644 --- a/src/main/webapp/WEB-INF/jsp/web/msgsent/MsgSentAllListAjax.jsp +++ b/src/main/webapp/WEB-INF/jsp/web/msgsent/MsgSentAllListAjax.jsp @@ -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" %>
    - -

    +

    +

    ※ 예약문자 발송취소는 예약 발송시간 기준 5분 전까지만 가능

    - @@ -84,134 +163,100 @@ $(document).ready(function(){
    - + - - - - + - - - - + + + + + - - - - - - - - - + - - - - - - + + + + + + + + + - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - + + + - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - + @@ -462,14 +337,14 @@ $(document).ready(function(){
    - - - - + + +<%-- --%> +<%-- --%>
    - - + +<%-- --%>
    @@ -477,3 +352,12 @@ $(document).ready(function(){ + + + + + + + + + diff --git a/src/main/webapp/WEB-INF/jsp/web/msgsent/MsgSentAllListAjax_advc_backup_20250115.jsp b/src/main/webapp/WEB-INF/jsp/web/msgsent/MsgSentAllListAjax_advc_backup_20250115.jsp new file mode 100644 index 00000000..59faa545 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/web/msgsent/MsgSentAllListAjax_advc_backup_20250115.jsp @@ -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" %> + + + +
    + +

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

    +

    ${result.delayOrgTime}

    -

    +

    ${result.reqDate}

    -

    +

    ${result.reqDate}

    +
    +

    - + 장문 - + 그림 @@ -220,239 +265,69 @@ $(document).ready(function(){

    -

    - - - WEB - - - API - - - - - - -

    -
    - - - - - + + -

    +
    +

    -

    +
    +

    +

    +
    +

    +
    - - - - - - - - - - - - - - - + + - - - - - - - - - - - - - - - + - - -

    정상수신

    + - -

    + + -

    +

    -
    -

    - - - - - - 0 - - -

    + +
    -

    정상수신

    -
    -

    - - - - - - 0 - - -

    -
    -

    수신오류

    -
    -

    - - - - - - 0 - - -

    -
    -

    결과대기

    -
    -

    - - - - - - 0 - - -

    -
    -

    실패/대기

    -
    - - -

    - / -

    -
    - -

    - / -

    -
    -
    -
    -

    - - - - - - 0 - - -

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

    +
    + +

    +
    +
    + +
    + +

    +
    +
    +
    +

    + + + 장문 + + + 그림 + + + 단문 + + +

    +
    +

    + + + WEB + + + API + + + - + + +

    +
    + + + + + + + +

    + + + + + + + + 명 +

    +
    + +

    +
    + +

    +
    +
    +
    + + + +

    +
    + +

    +
    +
    +
    +
    +
    +

    +
    +

    +
    +

    정상수신

    +
    + + +

    +
    + +

    +
    +
    +
    +

    + + + + + + 0 + + +

    +
    +

    정상수신

    +
    +

    + + + + + + 0 + + +

    +
    +

    수신오류

    +
    +

    + + + + + + 0 + + +

    +
    +

    결과대기

    +
    +

    + + + + + + 0 + + +

    +
    +

    실패/대기

    +
    + + +

    + / +

    +
    + +

    + / +

    +
    +
    +
    +

    + + + + + + 0 + + +

    +
    발송 내역이 없습니다.발송 내역이 없습니다.
    +
    +
    +
    + + + + + +
    +
    + + +
    +
    + +
      + +
    +
    diff --git a/src/main/webapp/WEB-INF/jsp/web/msgsent/MsgSentDetailView.jsp b/src/main/webapp/WEB-INF/jsp/web/msgsent/MsgSentDetailView.jsp new file mode 100644 index 00000000..8cfe3e41 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/web/msgsent/MsgSentDetailView.jsp @@ -0,0 +1,1024 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> +<%@ taglib prefix="ec" uri="/WEB-INF/tld/ecnet_tld.tld"%> +<%@ taglib prefix="fnc" uri="/WEB-INF/tld/functions.tld"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%> +<%@ page import="itn.com.cmm.LoginVO" %> +<% pageContext.setAttribute("newLineChar", "\n"); %> + + + + + + +
    + + + + + +
    + +
    +
    +

    발송결과 상세

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

    발송정보

    +

    +
    +
    +
    +
    발송일시
    +
    + ${result.reqDate} +
    +
    + +
    +
    등록일시
    +
    ${result.regDate }
    +
    +
    + +
    +
    제목
    +
    ${result.subject }
    +
    +
    +
    +
    형태
    +
    + ${result.msgType == '4' + ? '단문' + : (result.fileCnt == '0' + ? '장문' + : '그림')} +
    +
    +
    +
    발송건수
    +
    +
    +
    +
    발신번호
    +<%--
    ${result.callFrom }
    --%> +
    ${fnc:formatPhone(result.callFrom) }
    +
    +
    +
    진행상황 + + +
    +
    예약
    + + +
    + +
    + ${result.divideText } + +
    +
    +
    +
    +
    + +
    +
    + + + + 예약취소() + + + + + +

    +
    +
    + + + +
    + +
    +
    +
    +
    +
    발송요금
    +
    + + + + 0 + + + + + + 원 +
    + +
    +
    +
    +
    + + +
    +
    +
    +

    상세결과

    +

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

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

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

    문자내용

    + + +
    + + ${result.msgType == '4' + ? 'SMS' + : (result.fileCnt == '0' + ? 'LMS' + : 'MMS')} + + + + + +
    + +
    +
    + +
    + &fileSn=" alt="발송된 그림문자 미리보기" style="width: 100%"> +
    +
    +
    +
    + +

    (광고)

    +
    +

    + ${fn:replace(result.smsTxt, newLineChar, "
    ")} +

    +

    + +

    무료 거부 080-0000-0000

    +
    +
    +
    + +
    +
    +

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

    +

    +
    + +
    + + +
    + +
    + + +
    +
    + +
    + + + + +
    + +
    + + + +
    + +
    + + + +
    + " /> + + + + + + + + + +
    + + +
    + +
    + + +
    + + + + +
    + diff --git a/src/main/webapp/WEB-INF/jsp/web/msgsent/MsgSentView.jsp b/src/main/webapp/WEB-INF/jsp/web/msgsent/MsgSentView.jsp index d1850d14..457aed8f 100644 --- a/src/main/webapp/WEB-INF/jsp/web/msgsent/MsgSentView.jsp +++ b/src/main/webapp/WEB-INF/jsp/web/msgsent/MsgSentView.jsp @@ -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개월 이전 날짜 구해오기 @@ -55,6 +62,19 @@ $(document).ready(function(){ $(document).on('click', '.sort', function (){ listSortOrd(this); }); + + + // 탭 :: 전체 , 즉시, 예약 + $(document).on('click', '.sendKindBtn', function (){ + + // 클릭된 버튼의 data-info 값을 전달하여 함수 호출 + fn_activateTab($(this).data('info')); + + linkPage(1); + }); + + + //목록 정렬 항목 클릭 function listSortOrd(obj){ @@ -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,13 +143,13 @@ 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('
    LOADING...
    '); $(".msgSentAllLoad").load("/web/mjon/msgsent/selectMsgSentListViewAjax.do", sendData ,function(response, status, xhr){ @@ -137,120 +173,73 @@ 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(); $(".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(); + + alert("삭제되었습니다."); + 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(); - - var form = document.searchForm; - if (form.listType.value == "privateList") { - $("#msgSentDetailPopLoad").load("/web/mjon/msgsent/selectMsgSentDetailData2Ajax.do", sendData ,function(response, status, xhr){ - }); - } - 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; @@ -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 = '' + '' + '' @@ -891,60 +847,51 @@ function subContent(p_content_no){ --%> - + + " /> + " /> + " /> " /> - + + +
    - -
    + + +
    +

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

    +

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

    +

    - 단문문자는 최대 24시간, 장문 및 그림문자는 최대 72시간까지 결과값이 수신되지 않은 경우 실패(비과금) 처리됩니다.

    +
    기간선택
    - + ~ - +
    - - - - - + + +
    - <%-- - --%> - - - - - - +
    + +
    +
      -
    • -
    • -
    • -
    • +
    • +
    • +
    • +
    -
    +
    -
      + -
      +
    // tab button --> + + + +
      +
    • + +
    • +
    • + +
    • +
    • + +
    • +
    + + + + + + +
    + +
    +
    +
    [대기]
    +
    + 발송은 성공하였으며, 수신자측 통신사로부터 수신여부를 확인중인 상태
    + ※ 예약문자의 경우 실발송 전까지는 “대기”로 표시 +
    +
    [성공]
    +
    발송 및 수신이 완료된 상태
    +
    [실패]
    +
    결번, 일시정지, 전화번호 오류 등의 사유로 발송이 + 불가한 상태
    +
    +
    +
    diff --git a/src/main/webapp/WEB-INF/jsp/web/msgsent/subcontent/MsgSentView_HA_allSentAjax.jsp b/src/main/webapp/WEB-INF/jsp/web/msgsent/subcontent/MsgSentView_HA_allSentAjax.jsp index 73127188..45cbaccc 100644 --- a/src/main/webapp/WEB-INF/jsp/web/msgsent/subcontent/MsgSentView_HA_allSentAjax.jsp +++ b/src/main/webapp/WEB-INF/jsp/web/msgsent/subcontent/MsgSentView_HA_allSentAjax.jsp @@ -25,14 +25,14 @@ $(document).ready(function(){ -
    +

    전체

    - +

    -
    -

    WEB

    +
    +<%--

    WEB

    --%>
    대기
    @@ -46,32 +46,15 @@ $(document).ready(function(){
    - -
    -

    API

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

    단문(SMS)

    - +

    -
    -

    WEB

    +
    +<%--

    WEB

    --%>
    대기
    @@ -85,32 +68,15 @@ $(document).ready(function(){
    - -
    -

    API

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

    장문(LMS)

    - +

    -
    -

    WEB

    +
    +<%--

    WEB

    --%>
    대기
    @@ -124,32 +90,15 @@ $(document).ready(function(){
    - -
    -

    API

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

    그림(MMS)

    - +

    -
    -

    WEB

    +
    +<%--

    WEB

    --%>
    대기
    @@ -163,21 +112,4 @@ $(document).ready(function(){
    - -
    -

    API

    -
    -
    대기
    -
    -
    -
    -
    성공
    -
    -
    -
    -
    실패
    -
    -
    -
    -
    \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/jsp/web/user/mberInfoIndex.jsp b/src/main/webapp/WEB-INF/jsp/web/user/mberInfoIndex.jsp index b20ca1fd..4db78d99 100644 --- a/src/main/webapp/WEB-INF/jsp/web/user/mberInfoIndex.jsp +++ b/src/main/webapp/WEB-INF/jsp/web/user/mberInfoIndex.jsp @@ -4,6 +4,8 @@ <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%> <%@ taglib prefix="ec" uri="/WEB-INF/tld/ecnet_tld.tld"%> <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> +<%@ taglib prefix="fnc" uri="/WEB-INF/tld/functions.tld"%> +
    구분, 충전금액, 사용금액, 잔액 등 정보를 제공하는 표