From da00ed6b8a86719c6d9b5799f32fbe65998fea95 Mon Sep 17 00:00:00 2001 From: "hehihoho3@gmail.com" Date: Thu, 23 Jan 2025 14:57:40 +0900 Subject: [PATCH] =?UTF-8?q?=EB=B0=9C=EC=86=A1=EA=B2=B0=EA=B3=BC=20?= =?UTF-8?q?=EB=A6=AC=EC=8A=A4=ED=8A=B8=20=ED=99=94=EB=A9=B4=20=EC=99=84?= =?UTF-8?q?=EB=A3=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../msgsent/service/MjonMsgDetailSentVO.java | 5 +- .../mjo/msgsent/service/MjonMsgSWFDTO.java | 1 + .../msgsent/service/MjonMsgSentService.java | 5 + .../mjo/msgsent/service/MjonMsgSentVO.java | 8 + .../service/impl/MjonMsgSentServiceImpl.java | 367 ++++++++++- .../msgsent/web/MjonMsgSentController.java | 543 +-------------- .../impl/MjonReservMsgServiceImpl.java | 1 + .../web/MjonReservMsgController.java | 62 +- .../let/uss/umt/service/UserDefaultVO.java | 621 +----------------- .../sqlmap/let/msg/MjonMsgSent_SQL_mysql.xml | 157 ++--- .../jsp/cmm/sym/ccm/EgovCcmCmmnCodeTree.jsp | 3 + .../jsp/web/msgsent/MsgSentAllListAjax.jsp | 186 ++++-- .../jsp/web/msgsent/MsgSentDetailView.jsp | 34 +- .../WEB-INF/jsp/web/msgsent/MsgSentView.jsp | 277 ++++---- .../subcontent/MsgSentView_HA_allSentAjax.jsp | 42 +- 15 files changed, 824 insertions(+), 1488 deletions(-) diff --git a/src/main/java/itn/let/mjo/msgsent/service/MjonMsgDetailSentVO.java b/src/main/java/itn/let/mjo/msgsent/service/MjonMsgDetailSentVO.java index d7c3c032..714bd229 100644 --- a/src/main/java/itn/let/mjo/msgsent/service/MjonMsgDetailSentVO.java +++ b/src/main/java/itn/let/mjo/msgsent/service/MjonMsgDetailSentVO.java @@ -1,15 +1,15 @@ package itn.let.mjo.msgsent.service; -import java.io.Serializable; 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 implements Serializable{ +public class MjonMsgDetailSentVO extends UserDefaultVO{ private static final long serialVersionUID = 1L; @@ -32,6 +32,7 @@ public class MjonMsgDetailSentVO implements Serializable{ private String callTo; private String statusTxt; + private String addrNm; // FileInfo 리스트 필드 추가 diff --git a/src/main/java/itn/let/mjo/msgsent/service/MjonMsgSWFDTO.java b/src/main/java/itn/let/mjo/msgsent/service/MjonMsgSWFDTO.java index ede1b2a6..7cafbab5 100644 --- a/src/main/java/itn/let/mjo/msgsent/service/MjonMsgSWFDTO.java +++ b/src/main/java/itn/let/mjo/msgsent/service/MjonMsgSWFDTO.java @@ -28,5 +28,6 @@ public class MjonMsgSWFDTO implements Serializable { 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 76300d39..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,8 +1,11 @@ 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; @@ -64,5 +67,7 @@ public interface MjonMsgSentService { 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 b9758511..8b1e893d 100644 --- a/src/main/java/itn/let/mjo/msgsent/service/MjonMsgSentVO.java +++ b/src/main/java/itn/let/mjo/msgsent/service/MjonMsgSentVO.java @@ -94,4 +94,12 @@ public class MjonMsgSentVO extends UserDefaultVO{ private String resultWValue; private String resultWFValue; + private String divideYN; // 분할여부 + + private String statusCd; // 진행상태 코드 + + // 결과 리스트 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/MjonMsgSentServiceImpl.java b/src/main/java/itn/let/mjo/msgsent/service/impl/MjonMsgSentServiceImpl.java index 79931fe4..b78666a8 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,17 +1,37 @@ 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.util.ArrayList; +import java.util.Date; import java.util.HashMap; import java.util.List; +import java.util.Locale; import java.util.Map; import java.util.regex.Matcher; import java.util.regex.Pattern; 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.FillPatternType; +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.apache.poi.xssf.usermodel.XSSFFont; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.springframework.stereotype.Service; import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl; @@ -96,41 +116,63 @@ public class MjonMsgSentServiceImpl extends EgovAbstractServiceImpl implements return resultList; } - //발송 관리 전체 발송 리스트 불러오기 + /** + * advc + * 이호영 20250121 + * 발송 관리 전체 발송 리스트 불러오기 + */ public Map selectAllMsgSentList_advc(MjonMsgSentVO mjonMsgSentVO) throws Exception{ Map resultMap = new HashMap(); + System.out.println("mjonMsgSentVO.getSearchConditionSite() :: "+ mjonMsgSentVO.getSearchConditionSite()); + // 목록 List resultList = mjonMsgSentDAO.selectAllMsgSentList_advc(mjonMsgSentVO); - // MsgGroupId만 추출하여 리스트 생성 -// List msgGroupIdList = resultList.stream() -// .map(MjonMsgSentVO::getMsgGroupId) // MsgGroupId 추출 -// .collect(Collectors.toList()); // 리스트로 수집 + // groupID에 대한 결과건수(대기, 성공 실패) 분할건수를 가져옴 + // TODO : 분할여부는 예약일 때만 가져오게 해야되는지 검토 필요 - - resultList.stream().forEach(t->{ - MjonMsgSWFDTO mjonMsgSWFDTO = mjonMsgSentDAO.findBySWF(t.getMsgGroupId()); - t.setResultSValue(String.valueOf(mjonMsgSWFDTO.getResultSValue())); - t.setResultFValue(String.valueOf(mjonMsgSWFDTO.getResultFValue())); - t.setResultWValue(String.valueOf(mjonMsgSWFDTO.getResultWValue())); - - BigDecimal eachPrice = new BigDecimal(t.getEachPrice()); - BigDecimal resultSValue = new BigDecimal(mjonMsgSWFDTO.getResultSValue()); - BigDecimal totalPrice = eachPrice.multiply(resultSValue); - // 소수점 한 자리로 설정 (반올림) - BigDecimal roundedTotalPrice = totalPrice.setScale(1, RoundingMode.HALF_UP); - t.setTotPrice(roundedTotalPrice.toPlainString()); // 결과를 String으로 설정 - }); + resultList = makeDetailFunction(resultList); + // 공통코드 ITN057에 대한 코드화 진행 + /* + * CODE_ID CODE CODE_NM CODE_DC + * ITN057 01 진행중 진행중 + * ITN057 02 완료 완료출해야함 + * ITN057 03 예약대기 예약대기(발송전) 버튼으로 노출해야함 + * ITN057 04 - 예약취소 ( - 으로 노출 ) + * */ + resultList.stream().forEach(t->{ + + String code; + + log.info(" + t.getDiffMin() :: [{}]", t.getDiffMin()); + log.info(" + t.getDiffMin() :: [{}]", t.getDiffMin() > -5); + if ("Y".equals(t.getReserveCYn())) { + code = "04"; // 예약취소 코드 + } else if ( + "Y".equals(t.getReserveYn()) + && "N".equals(t.getReserveCYn()) + && t.getMsgGroupCnt().equals(t.getResultWValue()) + && t.getDiffMin() < -5 // 예약 시간이 5분 이상인 것들만 + ) { + code = "03"; // 예약대기 코드 ( 예약취소 버튼 노출 ) + } else if (t.getMsgGroupCnt().equals(t.getResultSValue()) || t.getMsgGroupCnt().equals(t.getResultFValue())) { + code = "02"; // 완료 코드 + } else { + code = "01"; // 진행중 코드 + } + + + t.setStatusCd(code); + }); // 총 카운트 int totalCnt = mjonMsgSentDAO.countAllMsgSentList(mjonMsgSentVO); -// int totalCnt = 0; resultMap.put("resultList", resultList); resultMap.put("totalCnt", totalCnt); @@ -139,6 +181,7 @@ public class MjonMsgSentServiceImpl extends EgovAbstractServiceImpl implements } + public Map selectAllMsgSentDetailView(MjonMsgDetailSentVO mjonMsgDetailSentVO) throws Exception{ Map resultMap = new HashMap(); @@ -152,7 +195,7 @@ public class MjonMsgSentServiceImpl extends EgovAbstractServiceImpl implements .replaceAll("\\s*무료거부 0808800858", "")); } - if(Integer.parseInt(result.getFileCnt()) > 0) + if(StringUtils.isNotEmpty(result.getFileCnt()) && Integer.parseInt(result.getFileCnt()) > 0) { List fileInfos = getFileInfo(result); @@ -370,4 +413,286 @@ public class MjonMsgSentServiceImpl extends EgovAbstractServiceImpl implements 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; + data[i][1] = vo.getReqdate(); + 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(); + } + } + } + + } + + + private List makeDetailFunction(List resultList) { + resultList.stream().forEach(t->{ + MjonMsgSWFDTO mjonMsgSWFDTO = mjonMsgSentDAO.findBySWF(t.getMsgGroupId()); + t.setResultSValue(String.valueOf(mjonMsgSWFDTO.getResultSValue())); // 성공건수 + t.setResultFValue(String.valueOf(mjonMsgSWFDTO.getResultFValue())); // 실패건수 + t.setResultWValue(String.valueOf(mjonMsgSWFDTO.getResultWValue())); // 대기건수 + t.setDivideYN(mjonMsgSWFDTO.getDivideYN()); + + + // TotPrice : 성공건수에 대한 금액 곱하기 + BigDecimal eachPrice = new BigDecimal(t.getEachPrice()); + 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에 설정 + t.setTotPrice("-"); + } else { + // roundedTotalPrice 값이 0이 아닌 경우 + // 반올림된 BigDecimal 값을 toPlainString()을 사용하여 문자열로 변환 후 totPrice에 설정 + // toPlainString(): 지수 표기법 없이 일반적인 문자열 형태로 반환 + t.setTotPrice(roundedTotalPrice.toPlainString()); + } + }); + return resultList; + } + + } 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 a97916c7..99466ac6 100644 --- a/src/main/java/itn/let/mjo/msgsent/web/MjonMsgSentController.java +++ b/src/main/java/itn/let/mjo/msgsent/web/MjonMsgSentController.java @@ -108,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); @@ -240,18 +135,24 @@ private static final Logger logger = LoggerFactory.getLogger(MjonMsgSentControll } - String startDate = mjonMsgSentVO.getStartDate(); - String endDate = mjonMsgSentVO.getEndDate(); +// log.info(" + mjonMsgSentVO.getSearchStartDate() :: [{}]", mjonMsgSentVO.getSearchStartDate()); +// log.info(" + mjonMsgSentVO.getSearchStartDate() :: [{}]", mjonMsgSentVO.getSearchStartDate()); +// log.info(" + mjonMsgSentVO.getSearchStartDate() :: [{}]", mjonMsgSentVO.getSearchStartDate()); +// log.info(" + mjonMsgSentVO.getSearchStartDate() :: [{}]", mjonMsgSentVO.getSearchStartDate()); +// log.info(" + mjonMsgSentVO.getSearchStartDate() :: [{}]", mjonMsgSentVO.getSearchStartDate()); + String startDate = mjonMsgSentVO.getSearchStartDate(); + String endDate = mjonMsgSentVO.getSearchEndDate(); if(StringUtils.isEmpty(startDate) && StringUtils.isEmpty(endDate)) { - 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()); @@ -300,7 +201,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()); @@ -308,28 +208,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(""); - log.info(" :: mjonMsgSentService.selectDetailMsgSentCntMix :: "); + 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(); - - - H_totalMsgCnt.forEach(t->{ + totalMsgCnt.forEach(t->{ if (Integer.parseInt(t.getFilePath1())>0) { H_smsMsgCnt.add(t); } else if (Integer.parseInt(t.getFilePath2())>0) { @@ -339,21 +235,11 @@ 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)); + model.addAttribute("H_allSentCntVO", this.getResultCntProc(H_smsMsgCnt)); // 전체 단문(SMS) model.addAttribute("H_smsSentCntVO", this.getResultCntProc(H_smsMsgCnt)); // 전체 장문(LMS) @@ -363,33 +249,6 @@ private static final Logger logger = LoggerFactory.getLogger(MjonMsgSentControll - - - // * 홈페이지에서 보낸 데이터 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"; } @@ -445,7 +304,8 @@ private static final Logger logger = LoggerFactory.getLogger(MjonMsgSentControll String pageUrl = ""; try { - + + log.info(" ListView pageIndex :: [{}]", mjonMsgSentVO.getPageIndex()); //로그인 권한정보 불러오기 @@ -460,17 +320,12 @@ private static final Logger logger = LoggerFactory.getLogger(MjonMsgSentControll // } //기본 내림차순 정렬 - if(mjonMsgSentVO.getSearchSortOrd().equals("")) { + if(StringUtils.isEmpty(mjonMsgSentVO.getSearchSortOrd())) { mjonMsgSentVO.setSearchSortOrd("desc"); - mjonMsgSentVO.setSearchSortCnd("regdate"); + mjonMsgSentVO.setSearchSortCnd("B.REQ_DATE"); } - if(mjonMsgSentVO.getListType().equals("")) { - - mjonMsgSentVO.setListType("groupList"); - - } //선택 탭 정보 저장 //mjonResvMsgVO.setSearchMsgType(mjonResvMsgVO.getTabType()); @@ -485,13 +340,13 @@ private static final Logger logger = LoggerFactory.getLogger(MjonMsgSentControll 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()); + if(!DateUtils.dateChkAndValueChk(mjonMsgSentVO.getSearchStartDate(),mjonMsgSentVO.getSearchEndDate(), 3 )) { + mjonMsgSentVO.setSearchStartDate(DateUtils.getDateMonthsAgo(3)); + mjonMsgSentVO.setSearchEndDate(DateUtils.getCurrentDate()); }; - model.addAttribute("startDate", mjonMsgSentVO.getStartDate()); - model.addAttribute("endDate", mjonMsgSentVO.getEndDate()); + model.addAttribute("searchStartDate", mjonMsgSentVO.getSearchStartDate()); + model.addAttribute("searchEndDate", mjonMsgSentVO.getSearchEndDate()); //전체 발송 리스트 불러오기 Map resultMap = mjonMsgSentService.selectAllMsgSentList_advc(mjonMsgSentVO); @@ -507,22 +362,7 @@ private static final Logger logger = LoggerFactory.getLogger(MjonMsgSentControll model.addAttribute("mjonMsgSentVO", mjonMsgSentVO); String stateType = mjonMsgSentVO.getStateType(); - // String pageUrl = "web/msgsent/MsgSentAllListAjax"; - /* - 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"; - - }*/ + } catch (Exception e) { e.printStackTrace(); // TODO: handle exception @@ -1264,320 +1104,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/msg/MjonMsgSent_SQL_mysql.xml b/src/main/resources/egovframework/sqlmap/let/msg/MjonMsgSent_SQL_mysql.xml index bb957cda..5daaacd7 100644 --- a/src/main/resources/egovframework/sqlmap/let/msg/MjonMsgSent_SQL_mysql.xml +++ b/src/main/resources/egovframework/sqlmap/let/msg/MjonMsgSent_SQL_mysql.xml @@ -48,8 +48,8 @@ ,'01','00') AS tab2 , if (A.MSG_TYPE= '6' AND B.MSG_TYPE= '6' AND B.FILE_CNT > '0' ,'01','00') AS tab3 - + AND A.USER_ID = #userId# AND B.USER_ID = #userId# @@ -62,10 +62,6 @@ AND A.MSG_TYPE IN ('4','6') - AND B.RESERVE_C_YN = 'N' - AND B.FILE_CNT = '0' @@ -74,6 +70,16 @@ '0' ]]> + + = DATE_FORMAT(#searchStartDate#, '%Y-%m-%d') + ]]> + + + + ) A0 GROUP BY A0.MSG_GROUP_ID @@ -236,25 +242,6 @@ WHERE (B.DEL_FLAG = 'N' OR B.DEL_FLAG IS NULL) AND A.DEL_FLAG = 'N' AND B.USER_ID = #userId# - AND B.RESERVE_C_YN = 'N' - - - - AND B.MSG_TYPE = '4' - - - AND B.MSG_TYPE = '6' - AND B.FILE_CNT = '0' - - - '0' - ]]> - - AND B.SUBJECT LIKE CONCAT('%', #searchKeyword#, '%') @@ -263,22 +250,37 @@ AND B.CALL_FROM LIKE CONCAT('%', #searchKeyword#, '%') - AND CALL_TO LIKE CONCAT('%', #searchKeyword#, '%') + AND B.SMS_TXT LIKE CONCAT('%', #searchKeyword#, '%') - - AND sendKind = #searchCondition_01# + + AND B.RESERVE_YN = #searchCondition01# + + + + AND B.MSG_TYPE = '4' + + + AND B.MSG_TYPE = '6' + AND B.FILE_CNT = '0' + + + '0' + ]]> + + + + = DATE_FORMAT(#searchStartDate#, '%Y-%m-%d') + ]]> + + + - - = DATE_FORMAT(#startDate#, '%Y-%m-%d') - ]]> - - - - @@ -288,7 +290,11 @@ select SUM(IF(aa.result = 'S', 1, 0)) AS resultSValue, SUM(IF(aa.result = 'W', 1, 0)) AS resultWValue, - SUM(IF(aa.result = 'F', 1, 0)) AS resultFValue + SUM(IF(aa.result = 'F', 1, 0)) AS resultFValue, + CASE + WHEN COUNT(DISTINCT REQ_DATE) > 1 THEN 'Y' + ELSE 'N' + END AS divideYN from ( select @@ -331,6 +337,7 @@ and A.RSLT_DATE is null ) then 'W' else 'F' end as result /* common query */ + , A.REQ_DATE from MJ_MSG_DATA A where @@ -401,8 +408,8 @@ + 코드를 선택하세요 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 a3bb68bb..59a92558 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,22 @@ <%@ 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" %> @@ -118,22 +189,7 @@ function fn_sentDetailView(msgGroupId) { - - - - + @@ -244,7 +311,7 @@ function fn_sentDetailView(msgGroupId) { - + @@ -254,14 +321,14 @@ function fn_sentDetailView(msgGroupId) {
- - - - + + +<%-- --%> +<%-- --%>
- - + +<%-- --%>
@@ -273,3 +340,10 @@ function fn_sentDetailView(msgGroupId) {
+ + +
+ + + + diff --git a/src/main/webapp/WEB-INF/jsp/web/msgsent/MsgSentDetailView.jsp b/src/main/webapp/WEB-INF/jsp/web/msgsent/MsgSentDetailView.jsp index 81beb5a7..5095a7c0 100644 --- a/src/main/webapp/WEB-INF/jsp/web/msgsent/MsgSentDetailView.jsp +++ b/src/main/webapp/WEB-INF/jsp/web/msgsent/MsgSentDetailView.jsp @@ -16,7 +16,7 @@ $(document).ready(function(){ $tbDtailList = new Tabulator("#detailPopup", { height: "255px", width: "20%", - layout: "fitColumns", + layout: "fitDataStretch", // 데이터가 너비에 맞게 늘어나도록 설정 autoColumns: false, headerHozAlign: "center", validationMode: "highlight", @@ -24,6 +24,13 @@ $(document).ready(function(){ clipboardCopySelector: "table", clipboardPasteAction: "insert", // insert, update, replace columns: [ + { + title: "이름", + field: "addrNm", + hozAlign: "center", + headerHozAlign: "center", + width: 140 + }, { title: "휴대폰", field: "phone", @@ -43,12 +50,17 @@ $(document).ready(function(){ fn_getDetailList(); - /* - + $('#goPageBtn').click(function(){ + $("#goList").submit(); + }); + + + + + - */ }); @@ -90,6 +102,7 @@ function fn_setData(data){ data.forEach((row, index) => { resultData.push({ + // addrNm: row.addrNm, // 폰번호 phone: row.callTo, // 폰번호 result: row.statusTxt // 결과 메시지 추가 }); @@ -106,6 +119,17 @@ function fn_setData(data){
+
+ " /> + + + + + + + + +
@@ -290,7 +314,7 @@ function fn_setData(data){
- +
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 b788b73c..5be933e1 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){ @@ -98,7 +118,18 @@ $(document).ready(function(){ }); - +//탭 활성화 처리 함수 +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 +138,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('
내용 발송건수
@@ -154,51 +210,51 @@ function fn_sentDetailView(msgGroupId) {
- - + + - + - + - + <%-- 20240906 추가 발송 대기 상태일 때만 원래 발송시간을 보여주고, 발송이 완료되면 발송 처리 완료 시간(reqDate)을 보여준다. 30분 딜레이 된 건으로 관리자 승인/취소 처리가 완료 되지 않은 건에 대해서 -30분 처리하여 원래 사용자가 보내려던 시간을 표시해줌 --%> -

+

-

+

-

+

- + 장문 - + 그림 @@ -208,34 +264,45 @@ function fn_sentDetailView(msgGroupId) {

-<%-- --%> -<%-- --%> - -

+

-

+

-

+

-

+

- 원 + -

+ + + + + +

+
+
+ +
발송 내역이 없습니다.발송 내역이 없습니다.
LOADING...
'); $(".msgSentAllLoad").load("/web/mjon/msgsent/selectMsgSentListViewAjax.do", sendData ,function(response, status, xhr){ @@ -137,120 +168,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(''); + 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 +258,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 +270,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 +487,7 @@ function fnMsgSFDetailList(msgGroupId, resultType){ } -/* 사용내역서 클릭 시 내역서 새창 팝업 오픈 */ +/* 사용내역서 클릭 시 내역서 새창 팝업 오픈 function fnShowPrintPopup(tabType, type) { //만들려는 팝업의 크기 var popup_wid = '840'; @@ -553,7 +503,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 +694,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,15 +842,19 @@ function subContent(p_content_no){ --%> - + + " /> + " /> " /> - + + +
@@ -917,36 +872,20 @@ function subContent(p_content_no){
기간선택
- + ~ - +
- - - + + +
- <%-- - --%> - - - - - - +
구분, 충전금액, 사용금액, 잔액 등 정보를 제공하는 표