From 9e56bc1ee00be98322b74769ad71cfff7f66ec37 Mon Sep 17 00:00:00 2001 From: "hehihoho3@gmail.com" Date: Fri, 17 Jan 2025 18:25:28 +0900 Subject: [PATCH] =?UTF-8?q?=EB=B0=9C=EC=86=A1=EA=B2=B0=EA=B3=BC=20?= =?UTF-8?q?=ED=8E=98=EC=9D=B4=EC=A7=80=20=EA=B0=9C=EC=84=A0=EC=A4=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/itn/com/cmm/util/FileUtil.java | 79 ++- .../msgsent/service/MjonMsgDetailSentVO.java | 39 ++ .../msgsent/service/MjonMsgSentService.java | 4 + .../msgsent/service/impl/MjonMsgSentDAO.java | 11 + .../service/impl/MjonMsgSentServiceImpl.java | 73 ++- .../msgsent/web/MjonMsgSentController.java | 36 ++ .../sqlmap/let/msg/MjonMsgSent_SQL_mysql.xml | 59 +++ .../jsp/web/msgsent/MsgSentAllListAjax.jsp | 44 +- .../jsp/web/msgsent/MsgSentDetailView.jsp | 463 ++++++++++++++++++ 9 files changed, 752 insertions(+), 56 deletions(-) create mode 100644 src/main/java/itn/let/mjo/msgsent/service/MjonMsgDetailSentVO.java create mode 100644 src/main/webapp/WEB-INF/jsp/web/msgsent/MsgSentDetailView.jsp 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/let/mjo/msgsent/service/MjonMsgDetailSentVO.java b/src/main/java/itn/let/mjo/msgsent/service/MjonMsgDetailSentVO.java new file mode 100644 index 00000000..d7c3c032 --- /dev/null +++ b/src/main/java/itn/let/mjo/msgsent/service/MjonMsgDetailSentVO.java @@ -0,0 +1,39 @@ +package itn.let.mjo.msgsent.service; + +import java.io.Serializable; +import java.util.List; + +import itn.let.cmm.vo.FileInfoVO; +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class MjonMsgDetailSentVO implements Serializable{ + + private static final long serialVersionUID = 1L; + + + private String msgGroupId; + private String reqDate; + private String msgGroupCnt; + private String reserveYn; + private String callFrom; + private String userId; + private String smsTxt; + private String subject; + private String msgType; + private String fileCnt; + private String msgKind; + private String sentDate; + private String filePath1; + private String filePath2; + private String filePath3; + + private String callTo; + private String statusTxt; + + + // FileInfo 리스트 필드 추가 + private List fileInfos; +} 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 09eff10f..76300d39 100644 --- a/src/main/java/itn/let/mjo/msgsent/service/MjonMsgSentService.java +++ b/src/main/java/itn/let/mjo/msgsent/service/MjonMsgSentService.java @@ -60,5 +60,9 @@ public interface MjonMsgSentService { public int countAllMsgSentList(MjonMsgSentVO mjonMsgSentVO); + public Map selectAllMsgSentDetailView(MjonMsgDetailSentVO mjonMsgDetailSentVO) throws Exception; + + public List findByMsgDetailListAjax(MjonMsgDetailSentVO mjonMsgDetailSentVO); + } 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 e749d110..724d74d0 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,7 @@ 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; @@ -175,5 +176,15 @@ public class MjonMsgSentDAO extends EgovAbstractDAO { 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); + } } 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 a8945faa..79931fe4 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 @@ -6,17 +6,21 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.stream.Collectors; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import javax.annotation.Resource; +import org.apache.commons.io.FilenameUtils; import org.springframework.stereotype.Service; import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl; import egovframework.rte.fdl.idgnr.EgovIdGnrService; +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; @@ -133,7 +137,66 @@ public class MjonMsgSentServiceImpl extends EgovAbstractServiceImpl implements return resultMap; } + + public Map selectAllMsgSentDetailView(MjonMsgDetailSentVO mjonMsgDetailSentVO) throws Exception{ + + Map resultMap = new HashMap(); + + // 목록 + MjonMsgDetailSentVO result = mjonMsgSentDAO.selectAllMsgSentDetailView(mjonMsgDetailSentVO); + + // 광고일떄 (광고)와 줄바꿈+무료거부 0808800858 삭제 + if("A".equals(result.getMsgKind())) { + result.setSmsTxt(result.getSmsTxt().replace("(광고)", "") + .replaceAll("\\s*무료거부 0808800858", "")); + } + + if(Integer.parseInt(result.getFileCnt()) > 0) + { + + List fileInfos = getFileInfo(result); + result.setFileInfos(fileInfos); + } + + + + + resultMap.put("result", result); + + return resultMap; + } + + + 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) { @@ -299,4 +362,12 @@ 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); + + return list; + } } 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 b4fed593..a97916c7 100644 --- a/src/main/java/itn/let/mjo/msgsent/web/MjonMsgSentController.java +++ b/src/main/java/itn/let/mjo/msgsent/web/MjonMsgSentController.java @@ -25,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; @@ -41,12 +43,14 @@ 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; @@ -254,6 +258,35 @@ private static final Logger logger = LoggerFactory.getLogger(MjonMsgSentControll return "web/msgsent/MsgSentView"; } + + + /** + * 발송관리 화면 + * @param searchVO + * @param model + * @return "/web/mjon/msgtxt/selectMsgTxtView.do" + * @throws Exception + */ + @RequestMapping(value= {"/web/mjon/msgsent/msgSentDetailView.do"}) + public String selectMsgSentDetailView(@ModelAttribute("searchVO") MjonMsgDetailSentVO mjonMsgDetailSentVO, + RedirectAttributes redirectAttributes, ModelMap model) throws Exception{ + + 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 @@ -712,6 +745,9 @@ private static final Logger logger = LoggerFactory.getLogger(MjonMsgSentControll return "web/msgsent/MsgSentDetailPopAjax"; } + + + /** * 발송관리 문자 상세보기 내용 * @param searchVO 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 9dbd1628..bb957cda 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 @@ -6,6 +6,7 @@ + @@ -283,6 +284,7 @@ + /* MjonMsgSentDAO.selectAllMsgSentDetailView */ + select + MGD.MSG_GROUP_ID as msgGroupId + , MGD.MSG_GROUP_CNT as msgGroupCnt + , MGD.RESERVE_YN as reserveYn + , MGD.CALL_FROM as callFrom + , MGD.USER_ID as userId + , MGD.SMS_TXT as smsTxt + , MGD.SUBJECT as subject + , MGD.REQ_DATE as reqdate + , MGD.MSG_TYPE as msgType + , MGD.MSG_KIND as msgKind + , MD.SENT_DATE as sentDate + , MD.FILE_CNT as fileCnt + , MD.FILE_PATH1 as filePath1 + , MD.FILE_PATH2 as filePath2 + , MD.FILE_PATH3 as filePath3 + from + MJ_MSG_GROUP_DATA MGD + inner join MJ_MSG_DATA MD on + MGD.MSG_GROUP_ID = MD.MSG_GROUP_ID + and MGD.USER_ID = MD.USER_ID + where + MGD.MSG_GROUP_ID = #msgGroupId# + limit 1 + + + + + + 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 c251a4d9..201b5126 100644 --- a/src/main/webapp/WEB-INF/jsp/web/msgsent/MsgSentAllListAjax.jsp +++ b/src/main/webapp/WEB-INF/jsp/web/msgsent/MsgSentAllListAjax.jsp @@ -60,6 +60,19 @@ $(document).ready(function(){ }); + +function fn_sentDetailView(msgGroupId) { + // msgGroupId 값을 form에 설정 + $("#detailForm #msgGroupId").val(msgGroupId); + + // form을 해당 URL로 제출 + $("#detailForm").attr("action", "/web/mjon/msgsent/msgSentDetailView.do"); + $("#detailForm").submit(); +} + + + +

@@ -86,7 +99,6 @@ $(document).ready(function(){ - @@ -127,16 +139,15 @@ $(document).ready(function(){
- 결과 - 금액 - 예약관리 + 결과 + 금액(원) + 진행상황 대기 성공 실패 - 예약 @@ -196,10 +207,10 @@ $(document).ready(function(){

- -<%-- --%> - - ... +<%-- --%> + + + @@ -209,18 +220,17 @@ $(document).ready(function(){

-

+

-

- - -

0

+

원 - - + +

+ @@ -253,3 +263,7 @@ $(document).ready(function(){ + +
+ +
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..18528c77 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/web/msgsent/MsgSentDetailView.jsp @@ -0,0 +1,463 @@ +<%@ 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" %> + + + + +
+ + +
+ +
+
+

발송결과 상세

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

발송정보

+

+
+
+
+
발송일시
+
2024-07-18 15:25
+
+
+
형태
+
그림
+
+
+
발송건수
+
100
+
+
+
발신번호
+
010-1234-5678
+
+
+
예약관리
+ +
+ +
+
+
+
+
발송요금
+
100
+ +
+
+
+
+ + +
+
+
+

상세결과

+

+
+
+
+
+
전체건수
+
101건(100%)
+
+
+
+
+
성공건수
+
100건(100%)
+
+
+
+
+
+
+
대기건수
+
0건(0%)
+
+
+
+
+
실패건수
+
1건(100%)
+
+
+
+
+
+ + +
+
+ + +
+
+

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

+
+
+
+ + + +
+
+
+
+

미리보기

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

(광고)

+
+

+

+ +

무료 거부 080-0000-0000

+
+
+
+ +
+
+

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

+

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