--- src/main/java/itn/com/cmm/util/FileUtil.java
+++ src/main/java/itn/com/cmm/util/FileUtil.java
... | ... | @@ -25,45 +25,44 @@ |
| 25 | 25 |
*/ |
| 26 | 26 |
public final class FileUtil {
|
| 27 | 27 |
|
| 28 |
- /** |
|
| 29 |
- * @methodName : downLoad |
|
| 30 |
- * @author : 이호영 |
|
| 31 |
- * @date : 2023.04.06 |
|
| 32 |
- * @description : 파일 다운로드 |
|
| 33 |
- * @param response |
|
| 34 |
- * @param fileInfo |
|
| 35 |
- * @param fileName |
|
| 36 |
- * @throws Exception |
|
| 37 |
- */ |
|
| 38 |
- public static void downLoad(HttpServletResponse response, String fileInfo, String fileNameP) throws Exception {
|
|
| 39 |
- |
|
| 40 |
- |
|
| 41 |
- try {
|
|
| 42 |
- String path = fileInfo; // 경로에 접근할 때 역슬래시('\') 사용
|
|
| 43 |
- |
|
| 44 |
- File file = new File(path); |
|
| 45 |
- |
|
| 46 |
- String fileName = ""; |
|
| 47 |
- if(StringUtils.isNotEmpty(fileNameP)) |
|
| 48 |
- fileName = URLEncoder.encode(fileNameP,"UTF-8").replaceAll("\\+", "%20");
|
|
| 49 |
- else |
|
| 50 |
- fileName = file.getName(); |
|
| 51 |
- |
|
| 52 |
- response.setHeader("Content-Disposition", "attachment;filename=" + fileName); // 다운로드 되거나 로컬에 저장되는 용도로 쓰이는지를 알려주는 헤더
|
|
| 53 |
- |
|
| 54 |
- FileInputStream fileInputStream = new FileInputStream(path); // 파일 읽어오기 |
|
| 55 |
- OutputStream out = response.getOutputStream(); |
|
| 56 |
- |
|
| 57 |
- int read = 0; |
|
| 58 |
- byte[] buffer = new byte[1024]; |
|
| 59 |
- while ((read = fileInputStream.read(buffer)) != -1) { // 1024바이트씩 계속 읽으면서 outputStream에 저장, -1이 나오면 더이상 읽을 파일이 없음
|
|
| 60 |
- out.write(buffer, 0, read); |
|
| 61 |
- } |
|
| 62 |
- |
|
| 63 |
- } catch (Exception e) {
|
|
| 64 |
- throw new Exception("download error");
|
|
| 65 |
- } |
|
| 28 |
+ /** |
|
| 29 |
+ * @methodName : downLoad |
|
| 30 |
+ * @author : 이호영 |
|
| 31 |
+ * @date : 2023.04.06 |
|
| 32 |
+ * @description : 파일 다운로드 |
|
| 33 |
+ * @param response |
|
| 34 |
+ * @param fileInfo |
|
| 35 |
+ * @param fileName |
|
| 36 |
+ * @throws Exception |
|
| 37 |
+ */ |
|
| 38 |
+ public static void downLoad(HttpServletResponse response, String fileInfo, String fileNameP) throws Exception {
|
|
| 39 |
+ |
|
| 40 |
+ |
|
| 41 |
+ try {
|
|
| 42 |
+ String path = fileInfo; // 경로에 접근할 때 역슬래시('\') 사용
|
|
| 43 |
+ |
|
| 44 |
+ File file = new File(path); |
|
| 45 |
+ |
|
| 46 |
+ String fileName = ""; |
|
| 47 |
+ if(StringUtils.isNotEmpty(fileNameP)) |
|
| 48 |
+ fileName = URLEncoder.encode(fileNameP,"UTF-8").replaceAll("\\+", "%20");
|
|
| 49 |
+ else |
|
| 50 |
+ fileName = file.getName(); |
|
| 51 |
+ |
|
| 52 |
+ response.setHeader("Content-Disposition", "attachment;filename=" + fileName); // 다운로드 되거나 로컬에 저장되는 용도로 쓰이는지를 알려주는 헤더
|
|
| 53 |
+ |
|
| 54 |
+ FileInputStream fileInputStream = new FileInputStream(path); // 파일 읽어오기 |
|
| 55 |
+ OutputStream out = response.getOutputStream(); |
|
| 56 |
+ |
|
| 57 |
+ int read = 0; |
|
| 58 |
+ byte[] buffer = new byte[1024]; |
|
| 59 |
+ while ((read = fileInputStream.read(buffer)) != -1) { // 1024바이트씩 계속 읽으면서 outputStream에 저장, -1이 나오면 더이상 읽을 파일이 없음
|
|
| 60 |
+ out.write(buffer, 0, read); |
|
| 61 |
+ } |
|
| 62 |
+ } catch (Exception e) {
|
|
| 63 |
+ throw new Exception("download error");
|
|
| 64 |
+ } |
|
| 66 | 65 |
} |
| 67 |
- |
|
| 68 |
- |
|
| 66 |
+ |
|
| 67 |
+ |
|
| 69 | 68 |
} |
+++ src/main/java/itn/let/mjo/msgsent/service/MjonMsgDetailSentVO.java
... | ... | @@ -0,0 +1,39 @@ |
| 1 | +package itn.let.mjo.msgsent.service; | |
| 2 | + | |
| 3 | +import java.io.Serializable; | |
| 4 | +import java.util.List; | |
| 5 | + | |
| 6 | +import itn.let.cmm.vo.FileInfoVO; | |
| 7 | +import lombok.Getter; | |
| 8 | +import lombok.Setter; | |
| 9 | + | |
| 10 | +@Getter | |
| 11 | +@Setter | |
| 12 | +public class MjonMsgDetailSentVO implements Serializable{ | |
| 13 | + | |
| 14 | + private static final long serialVersionUID = 1L; | |
| 15 | + | |
| 16 | + | |
| 17 | + private String msgGroupId; | |
| 18 | + private String reqDate; | |
| 19 | + private String msgGroupCnt; | |
| 20 | + private String reserveYn; | |
| 21 | + private String callFrom; | |
| 22 | + private String userId; | |
| 23 | + private String smsTxt; | |
| 24 | + private String subject; | |
| 25 | + private String msgType; | |
| 26 | + private String fileCnt; | |
| 27 | + private String msgKind; | |
| 28 | + private String sentDate; | |
| 29 | + private String filePath1; | |
| 30 | + private String filePath2; | |
| 31 | + private String filePath3; | |
| 32 | + | |
| 33 | + private String callTo; | |
| 34 | + private String statusTxt; | |
| 35 | + | |
| 36 | + | |
| 37 | + // FileInfo 리스트 필드 추가 | |
| 38 | + private List<FileInfoVO> fileInfos; | |
| 39 | +} |
--- src/main/java/itn/let/mjo/msgsent/service/MjonMsgSentService.java
+++ src/main/java/itn/let/mjo/msgsent/service/MjonMsgSentService.java
... | ... | @@ -60,5 +60,9 @@ |
| 60 | 60 |
|
| 61 | 61 |
public int countAllMsgSentList(MjonMsgSentVO mjonMsgSentVO); |
| 62 | 62 |
|
| 63 |
+ public Map<String, Object> selectAllMsgSentDetailView(MjonMsgDetailSentVO mjonMsgDetailSentVO) throws Exception; |
|
| 64 |
+ |
|
| 65 |
+ public List<MjonMsgDetailSentVO> findByMsgDetailListAjax(MjonMsgDetailSentVO mjonMsgDetailSentVO); |
|
| 66 |
+ |
|
| 63 | 67 |
|
| 64 | 68 |
} |
--- src/main/java/itn/let/mjo/msgsent/service/impl/MjonMsgSentDAO.java
+++ src/main/java/itn/let/mjo/msgsent/service/impl/MjonMsgSentDAO.java
... | ... | @@ -9,6 +9,7 @@ |
| 9 | 9 |
import itn.let.fax.addr.service.FaxAddrGroupVO; |
| 10 | 10 |
import itn.let.mjo.addr.service.AddrGroupVO; |
| 11 | 11 |
import itn.let.mjo.block.service.MjonBlockVO; |
| 12 |
+import itn.let.mjo.msgsent.service.MjonMsgDetailSentVO; |
|
| 12 | 13 |
import itn.let.mjo.msgsent.service.MjonMsgSWFDTO; |
| 13 | 14 |
import itn.let.mjo.msgsent.service.MjonMsgSentVO; |
| 14 | 15 |
|
... | ... | @@ -175,5 +176,15 @@ |
| 175 | 176 |
|
| 176 | 177 |
return (MjonMsgSWFDTO) select("MjonMsgSentDAO.findBySWF", msgGroupId);
|
| 177 | 178 |
} |
| 179 |
+ |
|
| 180 |
+ public MjonMsgDetailSentVO selectAllMsgSentDetailView(MjonMsgDetailSentVO mjonMsgDetailSentVO) {
|
|
| 181 |
+ // TODO Auto-generated method stub |
|
| 182 |
+ return (MjonMsgDetailSentVO) select("MjonMsgSentDAO.selectAllMsgSentDetailView", mjonMsgDetailSentVO);
|
|
| 183 |
+ } |
|
| 184 |
+ |
|
| 185 |
+ public List<MjonMsgDetailSentVO> findByMsgDetailListAjax(MjonMsgDetailSentVO mjonMsgDetailSentVO) {
|
|
| 186 |
+ |
|
| 187 |
+ return (List<MjonMsgDetailSentVO>) list("MjonMsgSentDAO.findByMsgDetailListAjax", mjonMsgDetailSentVO);
|
|
| 188 |
+ } |
|
| 178 | 189 |
|
| 179 | 190 |
} |
--- src/main/java/itn/let/mjo/msgsent/service/impl/MjonMsgSentServiceImpl.java
+++ src/main/java/itn/let/mjo/msgsent/service/impl/MjonMsgSentServiceImpl.java
... | ... | @@ -6,17 +6,21 @@ |
| 6 | 6 |
import java.util.HashMap; |
| 7 | 7 |
import java.util.List; |
| 8 | 8 |
import java.util.Map; |
| 9 |
-import java.util.stream.Collectors; |
|
| 9 |
+import java.util.regex.Matcher; |
|
| 10 |
+import java.util.regex.Pattern; |
|
| 10 | 11 |
|
| 11 | 12 |
import javax.annotation.Resource; |
| 12 | 13 |
|
| 14 |
+import org.apache.commons.io.FilenameUtils; |
|
| 13 | 15 |
import org.springframework.stereotype.Service; |
| 14 | 16 |
|
| 15 | 17 |
import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl; |
| 16 | 18 |
import egovframework.rte.fdl.idgnr.EgovIdGnrService; |
| 19 |
+import itn.let.cmm.vo.FileInfoVO; |
|
| 17 | 20 |
import itn.let.fax.addr.service.FaxAddrGroupVO; |
| 18 | 21 |
import itn.let.mjo.addr.service.AddrGroupVO; |
| 19 | 22 |
import itn.let.mjo.block.service.MjonBlockVO; |
| 23 |
+import itn.let.mjo.msgsent.service.MjonMsgDetailSentVO; |
|
| 20 | 24 |
import itn.let.mjo.msgsent.service.MjonMsgSWFDTO; |
| 21 | 25 |
import itn.let.mjo.msgsent.service.MjonMsgSentService; |
| 22 | 26 |
import itn.let.mjo.msgsent.service.MjonMsgSentVO; |
... | ... | @@ -133,7 +137,66 @@ |
| 133 | 137 |
|
| 134 | 138 |
return resultMap; |
| 135 | 139 |
} |
| 140 |
+ |
|
| 136 | 141 |
|
| 142 |
+ public Map<String, Object> selectAllMsgSentDetailView(MjonMsgDetailSentVO mjonMsgDetailSentVO) throws Exception{
|
|
| 143 |
+ |
|
| 144 |
+ Map<String, Object> resultMap = new HashMap<String, Object>(); |
|
| 145 |
+ |
|
| 146 |
+ // 목록 |
|
| 147 |
+ MjonMsgDetailSentVO result = mjonMsgSentDAO.selectAllMsgSentDetailView(mjonMsgDetailSentVO); |
|
| 148 |
+ |
|
| 149 |
+ // 광고일떄 (광고)와 줄바꿈+무료거부 0808800858 삭제 |
|
| 150 |
+ if("A".equals(result.getMsgKind())) {
|
|
| 151 |
+ result.setSmsTxt(result.getSmsTxt().replace("(광고)", "")
|
|
| 152 |
+ .replaceAll("\\s*무료거부 0808800858", ""));
|
|
| 153 |
+ } |
|
| 154 |
+ |
|
| 155 |
+ if(Integer.parseInt(result.getFileCnt()) > 0) |
|
| 156 |
+ {
|
|
| 157 |
+ |
|
| 158 |
+ List<FileInfoVO> fileInfos = getFileInfo(result); |
|
| 159 |
+ result.setFileInfos(fileInfos); |
|
| 160 |
+ } |
|
| 161 |
+ |
|
| 162 |
+ |
|
| 163 |
+ |
|
| 164 |
+ |
|
| 165 |
+ resultMap.put("result", result);
|
|
| 166 |
+ |
|
| 167 |
+ return resultMap; |
|
| 168 |
+ } |
|
| 169 |
+ |
|
| 170 |
+ |
|
| 171 |
+ private List<FileInfoVO> getFileInfo(MjonMsgDetailSentVO result) throws Exception {
|
|
| 172 |
+ |
|
| 173 |
+ |
|
| 174 |
+ List<FileInfoVO> fileInfos = new ArrayList<>(); |
|
| 175 |
+ |
|
| 176 |
+ // 파일 경로 필드들을 배열로 관리 |
|
| 177 |
+ String[] filePaths = { result.getFilePath1(), result.getFilePath2(), result.getFilePath3() };
|
|
| 178 |
+ |
|
| 179 |
+ for (String filePath : filePaths) {
|
|
| 180 |
+ if (filePath != null) {
|
|
| 181 |
+ // 파일 ID 추출 |
|
| 182 |
+ |
|
| 183 |
+ // 확장자 제외한 파일명 |
|
| 184 |
+ String fileId = FilenameUtils.getBaseName(filePath); |
|
| 185 |
+ |
|
| 186 |
+ // 파일 정보 조회 |
|
| 187 |
+ MjonMsgSentVO info = mjonMsgSentDAO.selectFileInfo(fileId); |
|
| 188 |
+ |
|
| 189 |
+ // FileInfo 객체 생성 및 추가 |
|
| 190 |
+ FileInfoVO fileInfo = new FileInfoVO(); |
|
| 191 |
+ fileInfo.setAtchFileId(info.getAtchFileId()); |
|
| 192 |
+ fileInfo.setFileSn(info.getFileSn()); |
|
| 193 |
+ |
|
| 194 |
+ fileInfos.add(fileInfo); |
|
| 195 |
+ } |
|
| 196 |
+ } |
|
| 197 |
+ return fileInfos; |
|
| 198 |
+ |
|
| 199 |
+ } |
|
| 137 | 200 |
|
| 138 | 201 |
@Override |
| 139 | 202 |
public int countAllMsgSentList(MjonMsgSentVO mjonMsgSentVO) {
|
... | ... | @@ -299,4 +362,12 @@ |
| 299 | 362 |
public MjonMsgSentVO selectFileInfo(String streFileId) throws Exception {
|
| 300 | 363 |
return mjonMsgSentDAO.selectFileInfo(streFileId); |
| 301 | 364 |
} |
| 365 |
+ |
|
| 366 |
+ @Override |
|
| 367 |
+ public List<MjonMsgDetailSentVO> findByMsgDetailListAjax(MjonMsgDetailSentVO mjonMsgDetailSentVO) {
|
|
| 368 |
+ |
|
| 369 |
+ List<MjonMsgDetailSentVO> list = mjonMsgSentDAO.findByMsgDetailListAjax(mjonMsgDetailSentVO); |
|
| 370 |
+ |
|
| 371 |
+ return list; |
|
| 372 |
+ } |
|
| 302 | 373 |
} |
--- src/main/java/itn/let/mjo/msgsent/web/MjonMsgSentController.java
+++ src/main/java/itn/let/mjo/msgsent/web/MjonMsgSentController.java
... | ... | @@ -25,6 +25,8 @@ |
| 25 | 25 |
import org.apache.poi.xssf.streaming.SXSSFWorkbook; |
| 26 | 26 |
import org.slf4j.Logger; |
| 27 | 27 |
import org.slf4j.LoggerFactory; |
| 28 |
+import org.springframework.http.HttpStatus; |
|
| 29 |
+import org.springframework.http.ResponseEntity; |
|
| 28 | 30 |
import org.springframework.stereotype.Controller; |
| 29 | 31 |
import org.springframework.ui.ModelMap; |
| 30 | 32 |
import org.springframework.web.bind.annotation.ModelAttribute; |
... | ... | @@ -41,12 +43,14 @@ |
| 41 | 43 |
import itn.com.cmm.util.DateUtils; |
| 42 | 44 |
import itn.com.utl.fcc.service.EgovStringUtil; |
| 43 | 45 |
import itn.let.kakao.user.sent.service.KakaoSentService; |
| 46 |
+import itn.let.mail.service.StatusResponse; |
|
| 44 | 47 |
import itn.let.mjo.addr.service.AddrGroupService; |
| 45 | 48 |
import itn.let.mjo.addr.service.AddrGroupVO; |
| 46 | 49 |
import itn.let.mjo.addr.service.AddrService; |
| 47 | 50 |
import itn.let.mjo.addr.service.AddrVO; |
| 48 | 51 |
import itn.let.mjo.apikey.service.ApiKeyMngService; |
| 49 | 52 |
import itn.let.mjo.apikey.service.ApiKeyVO; |
| 53 |
+import itn.let.mjo.msgsent.service.MjonMsgDetailSentVO; |
|
| 50 | 54 |
import itn.let.mjo.msgsent.service.MjonMsgSentCntVO; |
| 51 | 55 |
import itn.let.mjo.msgsent.service.MjonMsgSentService; |
| 52 | 56 |
import itn.let.mjo.msgsent.service.MjonMsgSentVO; |
... | ... | @@ -254,6 +258,35 @@ |
| 254 | 258 |
|
| 255 | 259 |
return "web/msgsent/MsgSentView"; |
| 256 | 260 |
} |
| 261 |
+ |
|
| 262 |
+ |
|
| 263 |
+ /** |
|
| 264 |
+ * 발송관리 화면 |
|
| 265 |
+ * @param searchVO |
|
| 266 |
+ * @param model |
|
| 267 |
+ * @return "/web/mjon/msgtxt/selectMsgTxtView.do" |
|
| 268 |
+ * @throws Exception |
|
| 269 |
+ */ |
|
| 270 |
+ @RequestMapping(value= {"/web/mjon/msgsent/msgSentDetailView.do"})
|
|
| 271 |
+ public String selectMsgSentDetailView(@ModelAttribute("searchVO") MjonMsgDetailSentVO mjonMsgDetailSentVO,
|
|
| 272 |
+ RedirectAttributes redirectAttributes, ModelMap model) throws Exception{
|
|
| 273 |
+ |
|
| 274 |
+ Map<String, Object> resultMap = mjonMsgSentService.selectAllMsgSentDetailView(mjonMsgDetailSentVO); |
|
| 275 |
+ model.addAttribute("result", resultMap.get("result"));
|
|
| 276 |
+ |
|
| 277 |
+ return "web/msgsent/MsgSentDetailView"; |
|
| 278 |
+ } |
|
| 279 |
+ |
|
| 280 |
+ // 팩스 금일 발송통계 갱신 |
|
| 281 |
+ @RequestMapping(value= {"/web/mjon/msgsent/findByMsgDetailListAjax.do"})
|
|
| 282 |
+ public ResponseEntity<StatusResponse> findByMsgDetailListAjax(MjonMsgDetailSentVO mjonMsgDetailSentVO) throws Exception {
|
|
| 283 |
+ |
|
| 284 |
+ |
|
| 285 |
+ List<MjonMsgDetailSentVO> resultList = mjonMsgSentService.findByMsgDetailListAjax(mjonMsgDetailSentVO); |
|
| 286 |
+ |
|
| 287 |
+ |
|
| 288 |
+ return ResponseEntity.ok().body(new StatusResponse(HttpStatus.OK, "", resultList)); |
|
| 289 |
+ } |
|
| 257 | 290 |
|
| 258 | 291 |
/** |
| 259 | 292 |
* 마이페이지 - 이용내역 - ajax |
... | ... | @@ -712,6 +745,9 @@ |
| 712 | 745 |
return "web/msgsent/MsgSentDetailPopAjax"; |
| 713 | 746 |
} |
| 714 | 747 |
|
| 748 |
+ |
|
| 749 |
+ |
|
| 750 |
+ |
|
| 715 | 751 |
/** |
| 716 | 752 |
* 발송관리 문자 상세보기 내용 |
| 717 | 753 |
* @param searchVO |
--- src/main/resources/egovframework/sqlmap/let/msg/MjonMsgSent_SQL_mysql.xml
+++ src/main/resources/egovframework/sqlmap/let/msg/MjonMsgSent_SQL_mysql.xml
... | ... | @@ -6,6 +6,7 @@ |
| 6 | 6 |
<!DOCTYPE sqlMap PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-2.dtd"> |
| 7 | 7 |
<sqlMap namespace="Msg"> |
| 8 | 8 |
<typeAlias alias="mjonMsgSWFDTO" type="itn.let.mjo.msgsent.service.MjonMsgSWFDTO"/> |
| 9 |
+ <typeAlias alias="mjonMsgDetailSentVO" type="itn.let.mjo.msgsent.service.MjonMsgDetailSentVO"/> |
|
| 9 | 10 |
<typeAlias alias="mjonMsgSentVO" type="itn.let.mjo.msgsent.service.MjonMsgSentVO"/> |
| 10 | 11 |
<typeAlias alias="mjonMsgVO" type="itn.let.mjo.msg.service.MjonMsgVO"/> |
| 11 | 12 |
<typeAlias alias="addrGroupVO" type="itn.let.mjo.addr.service.AddrGroupVO"/> |
... | ... | @@ -283,6 +284,7 @@ |
| 283 | 284 |
|
| 284 | 285 |
<!-- 전체 발송결과 조회 (전송사별) 카운트--> |
| 285 | 286 |
<select id="MjonMsgSentDAO.findBySWF" parameterClass="String" resultClass="mjonMsgSWFDTO"> |
| 287 |
+ /* MjonMsgSentDAO.findBySWF */ |
|
| 286 | 288 |
select |
| 287 | 289 |
SUM(IF(aa.result = 'S', 1, 0)) AS resultSValue, |
| 288 | 290 |
SUM(IF(aa.result = 'W', 1, 0)) AS resultWValue, |
... | ... | @@ -338,6 +340,63 @@ |
| 338 | 340 |
|
| 339 | 341 |
|
| 340 | 342 |
|
| 343 |
+ <!-- 발송결과 상세 데이터--> |
|
| 344 |
+ <select id="MjonMsgSentDAO.selectAllMsgSentDetailView" parameterClass="mjonMsgDetailSentVO" resultClass="mjonMsgDetailSentVO"> |
|
| 345 |
+ /* MjonMsgSentDAO.selectAllMsgSentDetailView */ |
|
| 346 |
+ select |
|
| 347 |
+ MGD.MSG_GROUP_ID as msgGroupId |
|
| 348 |
+ , MGD.MSG_GROUP_CNT as msgGroupCnt |
|
| 349 |
+ , MGD.RESERVE_YN as reserveYn |
|
| 350 |
+ , MGD.CALL_FROM as callFrom |
|
| 351 |
+ , MGD.USER_ID as userId |
|
| 352 |
+ , MGD.SMS_TXT as smsTxt |
|
| 353 |
+ , MGD.SUBJECT as subject |
|
| 354 |
+ , MGD.REQ_DATE as reqdate |
|
| 355 |
+ , MGD.MSG_TYPE as msgType |
|
| 356 |
+ , MGD.MSG_KIND as msgKind |
|
| 357 |
+ , MD.SENT_DATE as sentDate |
|
| 358 |
+ , MD.FILE_CNT as fileCnt |
|
| 359 |
+ , MD.FILE_PATH1 as filePath1 |
|
| 360 |
+ , MD.FILE_PATH2 as filePath2 |
|
| 361 |
+ , MD.FILE_PATH3 as filePath3 |
|
| 362 |
+ from |
|
| 363 |
+ MJ_MSG_GROUP_DATA MGD |
|
| 364 |
+ inner join MJ_MSG_DATA MD on |
|
| 365 |
+ MGD.MSG_GROUP_ID = MD.MSG_GROUP_ID |
|
| 366 |
+ and MGD.USER_ID = MD.USER_ID |
|
| 367 |
+ where |
|
| 368 |
+ MGD.MSG_GROUP_ID = #msgGroupId# |
|
| 369 |
+ limit 1 |
|
| 370 |
+ |
|
| 371 |
+ </select> |
|
| 372 |
+ |
|
| 373 |
+ |
|
| 374 |
+ <!-- 전체 발송결과 조회 (전송사별)--> |
|
| 375 |
+ <select id="MjonMsgSentDAO.findByMsgDetailListAjax" parameterClass="mjonMsgDetailSentVO" resultClass="mjonMsgDetailSentVO"> |
|
| 376 |
+ /* MjonMsgSentDAO.findByMsgDetailListAjax*/ |
|
| 377 |
+ |
|
| 378 |
+ SELECT |
|
| 379 |
+ A.USER_ID as userId, |
|
| 380 |
+ A.CALL_TO as callTo, |
|
| 381 |
+ case |
|
| 382 |
+ WHEN A.AGENT_CODE = '01' AND (A.RSLT_CODE = '100' and (A.RSLT_CODE2 = '0')) then '성공' |
|
| 383 |
+ WHEN A.AGENT_CODE = '02' AND (A.RSLT_CODE = '0') then '성공' |
|
| 384 |
+ WHEN A.AGENT_CODE = '03' AND (A.RSLT_CODE in ('100', '101', '110', '800')) then '성공'
|
|
| 385 |
+ WHEN A.AGENT_CODE = '04' AND (A.RSLT_CODE in ('4100', '6600', '7000')) then '성공'
|
|
| 386 |
+ WHEN A.AGENT_CODE = '05' AND (A.RSLT_CODE in ('1000', '1001')) then '성공'
|
|
| 387 |
+ WHEN A.AGENT_CODE = '07' AND (A.RSLT_CODE in ('6', '1000')) then '성공'
|
|
| 388 |
+ WHEN A.AGENT_CODE = '08' AND (A.RSLT_CODE in ('1000', '1001')) then '성공'
|
|
| 389 |
+ WHEN A.AGENT_CODE = '09' AND (A.RSLT_CODE in ('1000', '1001')) then '성공'
|
|
| 390 |
+ WHEN (A.RSLT_CODE is null AND A.RSLT_CODE2 IS NULL AND A.SENT_DATE IS NULL AND A.RSLT_DATE IS NULL) then '대기' |
|
| 391 |
+ ELSE '실패' |
|
| 392 |
+ END as statusTxt |
|
| 393 |
+ from |
|
| 394 |
+ MJ_MSG_DATA A |
|
| 395 |
+ where |
|
| 396 |
+ A.MSG_GROUP_ID = #msgGroupId# |
|
| 397 |
+ |
|
| 398 |
+ |
|
| 399 |
+ </select> |
|
| 341 | 400 |
|
| 342 | 401 |
|
| 343 | 402 |
<!-- 전체 발송결과 조회 (전송사별)--> |
--- src/main/webapp/WEB-INF/jsp/web/msgsent/MsgSentAllListAjax.jsp
+++ src/main/webapp/WEB-INF/jsp/web/msgsent/MsgSentAllListAjax.jsp
... | ... | @@ -60,6 +60,19 @@ |
| 60 | 60 |
|
| 61 | 61 |
}); |
| 62 | 62 |
|
| 63 |
+ |
|
| 64 |
+function fn_sentDetailView(msgGroupId) {
|
|
| 65 |
+ // msgGroupId 값을 form에 설정 |
|
| 66 |
+ $("#detailForm #msgGroupId").val(msgGroupId);
|
|
| 67 |
+ |
|
| 68 |
+ // form을 해당 URL로 제출 |
|
| 69 |
+ $("#detailForm").attr("action", "/web/mjon/msgsent/msgSentDetailView.do");
|
|
| 70 |
+ $("#detailForm").submit();
|
|
| 71 |
+} |
|
| 72 |
+ |
|
| 73 |
+ |
|
| 74 |
+ |
|
| 75 |
+ |
|
| 63 | 76 |
</script> |
| 64 | 77 |
<div class="list_info"> |
| 65 | 78 |
<p>총 <span class="c_e40000" id="testId"><c:out value="${totalRecordCount}"/></span>건</p>
|
... | ... | @@ -82,7 +95,6 @@ |
| 82 | 95 |
<col style="width: 8%;"> |
| 83 | 96 |
<col style="width: auto;"> |
| 84 | 97 |
<col style="width: 8%;"> |
| 85 |
- <col style="width: 6%;"> |
|
| 86 | 98 |
<col style="width: 6%;"> |
| 87 | 99 |
<col style="width: 6%;"> |
| 88 | 100 |
<col style="width: 6%;"> |
... | ... | @@ -127,16 +139,15 @@ |
| 127 | 139 |
<input type="button" class="sort sortBtn" id="sort_msgGroupCnt"> |
| 128 | 140 |
</div> |
| 129 | 141 |
</th> |
| 130 |
- <th colspan="4">결과</th> |
|
| 131 |
- <th rowspan="2">금액</th> |
|
| 132 |
- <th rowspan="2">예약관리</th> |
|
| 142 |
+ <th colspan="3">결과</th> |
|
| 143 |
+ <th rowspan="2">금액(원)</th> |
|
| 144 |
+ <th rowspan="2">진행상황</th> |
|
| 133 | 145 |
<!-- <th>금액</th> --> |
| 134 | 146 |
</tr> |
| 135 | 147 |
<tr> |
| 136 | 148 |
<th>대기</th> |
| 137 | 149 |
<th>성공</th> |
| 138 | 150 |
<th>실패</th> |
| 139 |
- <th>예약</th> |
|
| 140 | 151 |
</tr> |
| 141 | 152 |
</thead> |
| 142 | 153 |
<tbody> |
... | ... | @@ -196,10 +207,10 @@ |
| 196 | 207 |
</p> |
| 197 | 208 |
</td> |
| 198 | 209 |
<td class="result_cont" title="${resultAllSentList.smsTxt}">
|
| 199 |
- <a href="#none" data-tooltip="rev_popup01" onClick="javascript:fnRevDetailPop('${resultAllSentList.msgGroupId}','${resultAllSentList.msgId}','${resultAllSentList.fileCnt}'); return false;">
|
|
| 200 |
-<%-- <button class="btnType btnType20" data-tooltip="rev_popup01" onClick="javascript:fnRevDetailPop('${resultAllSentList.msgGroupId}','${resultAllSentList.msgId}','${resultAllSentList.fileCnt}'); return false;">상세보기</button> --%>
|
|
| 201 |
- <c:out value="${fn:substring(resultAllSentList.smsTxt, 0, 20)}" />
|
|
| 202 |
- <c:if test="${fn:length(resultAllSentList.smsTxt) > 20}">...</c:if>
|
|
| 210 |
+<%-- <a href="#none" data-tooltip="rev_popup01" onClick="javascript:fnRevDetailPop('${resultAllSentList.msgGroupId}','${resultAllSentList.msgId}','${resultAllSentList.fileCnt}'); return false;"> --%>
|
|
| 211 |
+ <button class="btnType btnType20" data-tooltip="rev_popup01" onClick="javascript:fnRevDetailPop('${resultAllSentList.msgGroupId}','${resultAllSentList.msgId}','${resultAllSentList.fileCnt}'); return false;">상세보기</button>
|
|
| 212 |
+ <a href="#none"onclick="fn_sentDetailView('${resultAllSentList.msgGroupId}')">
|
|
| 213 |
+ <c:out value="${resultAllSentList.smsTxt}" />
|
|
| 203 | 214 |
</a> |
| 204 | 215 |
</td> |
| 205 | 216 |
<td> |
... | ... | @@ -209,18 +220,17 @@ |
| 209 | 220 |
<p><c:out value="${resultAllSentList.resultWValue}"/> </p>
|
| 210 | 221 |
</td> |
| 211 | 222 |
<td> |
| 212 |
- <p><c:out value="${resultAllSentList.resultSValue}"/> </p>
|
|
| 223 |
+ <p class="c_002c9a"><c:out value="${resultAllSentList.resultSValue}"/> </p>
|
|
| 213 | 224 |
</td> |
| 214 | 225 |
<td> |
| 215 |
- <p><c:out value="${resultAllSentList.resultFValue}"/> </p>
|
|
| 216 |
- </td> |
|
| 217 |
- <td> |
|
| 218 |
- <p class="c_222">0</p> |
|
| 226 |
+ <p class="c_e40000"><c:out value="${resultAllSentList.resultFValue}"/> </p>
|
|
| 219 | 227 |
</td> |
| 220 | 228 |
<td> |
| 221 | 229 |
<c:out value="${resultAllSentList.totPrice}"/>원
|
| 222 | 230 |
</td> |
| 223 |
- <td>-</td> |
|
| 231 |
+ <td> |
|
| 232 |
+ <p><button class="btnType btnType20">예약취소</button></p> |
|
| 233 |
+ </td> |
|
| 224 | 234 |
|
| 225 | 235 |
|
| 226 | 236 |
</tr> |
... | ... | @@ -253,3 +263,7 @@ |
| 253 | 263 |
<ui:pagination paginationInfo = "${paginationInfo}" type="imageWeb" jsFunction="linkPage" />
|
| 254 | 264 |
</ul> |
| 255 | 265 |
</c:if> |
| 266 |
+ |
|
| 267 |
+ <form name="detailForm" id="detailForm" method="post"> |
|
| 268 |
+ <input type="hidden" name="msgGroupId" id="msgGroupId" value=""/> |
|
| 269 |
+ </form> |
+++ src/main/webapp/WEB-INF/jsp/web/msgsent/MsgSentDetailView.jsp
... | ... | @@ -0,0 +1,463 @@ |
| 1 | +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> | |
| 2 | +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> | |
| 3 | +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> | |
| 4 | +<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> | |
| 5 | +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> | |
| 6 | +<%@ page import="itn.com.cmm.LoginVO" %> | |
| 7 | + | |
| 8 | + | |
| 9 | +<style> | |
| 10 | + /* #detailPopup { | |
| 11 | + min-width: 400px; | |
| 12 | + width: 50%; | |
| 13 | + margin: 0 auto; | |
| 14 | + } */ | |
| 15 | + | |
| 16 | + /* Tabulator 헤더 높이 조정 */ | |
| 17 | + .tabulator .tabulator-header { | |
| 18 | + height: 36px !important; /* 원하는 높이로 설정 */ | |
| 19 | + line-height: 25px; /* 텍스트 정렬을 위해 줄 간격 맞추기 */ | |
| 20 | + background-color: #ededed; | |
| 21 | + } | |
| 22 | + .tabulator .tabulator-col { | |
| 23 | + vertical-align: middle; /* 텍스트를 중앙에 정렬 */ | |
| 24 | + } | |
| 25 | + | |
| 26 | + /* Tabulator 헤더 폰트 크기 조정 */ | |
| 27 | + .tabulator .tabulator-header .tabulator-col { | |
| 28 | + font-size: 15px; /* 원하는 폰트 크기로 설정 */ | |
| 29 | + font-weight: bold; /* 텍스트를 굵게 설정 (옵션) */ | |
| 30 | + text-align: center; /* 텍스트 정렬 */ | |
| 31 | + } | |
| 32 | +</style> | |
| 33 | +<script type="text/javascript"> | |
| 34 | + | |
| 35 | +var $tbDtailList = null; //에러 팝업 영역 | |
| 36 | +$(document).ready(function(){ | |
| 37 | + | |
| 38 | + | |
| 39 | + //Tabulator AJAX Data Loading | |
| 40 | + $tbDtailList = new Tabulator("#detailPopup", { | |
| 41 | + height: "255px", | |
| 42 | + width: "20%", | |
| 43 | + layout: "fitColumns", | |
| 44 | + autoColumns: false, | |
| 45 | + headerHozAlign: "center", | |
| 46 | + validationMode: "highlight", | |
| 47 | + clipboard: false, | |
| 48 | + clipboardCopySelector: "table", | |
| 49 | + clipboardPasteAction: "insert", // insert, update, replace | |
| 50 | + columns: [ | |
| 51 | + { | |
| 52 | + title: "휴대폰", | |
| 53 | + field: "phone", | |
| 54 | + hozAlign: "center", | |
| 55 | + headerHozAlign: "center", | |
| 56 | + width: 200, | |
| 57 | + headerFormatter: () => "<div style='font-size: 18px; font-weight: bold;'>휴대폰</div>" | |
| 58 | + }, | |
| 59 | + { | |
| 60 | + title: "상세결과", | |
| 61 | + field: "result", | |
| 62 | + hozAlign: "center", | |
| 63 | + headerHozAlign: "center", | |
| 64 | + width: 180, | |
| 65 | + headerFormatter: () => "<div style='font-size: 18px; font-weight: bold;'>상세결과</div>" | |
| 66 | + } | |
| 67 | + ] | |
| 68 | + }); | |
| 69 | + | |
| 70 | + fn_getDetailList(); | |
| 71 | + | |
| 72 | + /* | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + */ | |
| 78 | + | |
| 79 | +}); | |
| 80 | + | |
| 81 | +/** | |
| 82 | + * @Discription : 상세결과 팝업 내용 가져오는 로직 | |
| 83 | + */ | |
| 84 | +function fn_getDetailList(){ | |
| 85 | + | |
| 86 | + var params = { | |
| 87 | + "msgGroupId" : $('#msgGroupId').val() | |
| 88 | + } | |
| 89 | + | |
| 90 | + $.ajax({ | |
| 91 | + type: "POST", | |
| 92 | + url: "/web/mjon/msgsent/findByMsgDetailListAjax.do", | |
| 93 | + data: params, | |
| 94 | + dataType:'json', | |
| 95 | + async: true, | |
| 96 | + success: function (returnData) { | |
| 97 | + console.log('returnData : ', returnData); | |
| 98 | + if(returnData.status == 'OK'){ | |
| 99 | + fn_setData(returnData.object); | |
| 100 | + | |
| 101 | + } | |
| 102 | + }, | |
| 103 | + error: function (e) { alert("오류가 발생하였습니다."); console.log("ERROR : ", e); } | |
| 104 | + }); | |
| 105 | +} | |
| 106 | + | |
| 107 | + | |
| 108 | +function fn_setData(data){ | |
| 109 | + console.log('data : ', data); | |
| 110 | + | |
| 111 | + | |
| 112 | + // $tbDtailList.clearData(); | |
| 113 | + | |
| 114 | + const resultData = []; // 오류 데이터를 저장할 배열 | |
| 115 | + | |
| 116 | + data.forEach((row, index) => { | |
| 117 | + | |
| 118 | + resultData.push({ | |
| 119 | + phone: row.callTo, // 폰번호 | |
| 120 | + result: row.statusTxt // 결과 메시지 추가 | |
| 121 | + }); | |
| 122 | + }); | |
| 123 | + | |
| 124 | + | |
| 125 | + // 오류 및 중복 데이터를 한 번에 추가 | |
| 126 | + $tbDtailList.setData(resultData); | |
| 127 | + | |
| 128 | + | |
| 129 | +}; | |
| 130 | + | |
| 131 | + | |
| 132 | + | |
| 133 | +</script> | |
| 134 | +<div class="inner"> | |
| 135 | + <input id="msgGroupId" name="msgGroupId" type="hidden" value="${result.msgGroupId}"/> | |
| 136 | + <!-- send top --> | |
| 137 | + <div class="send_top"> | |
| 138 | + <!-- 결제관리 - 요금 사용내역 --> | |
| 139 | + <div class="rev_admin_cont serv_content current"> | |
| 140 | + <div class="heading"> | |
| 141 | + <h2>발송결과 상세</h2> | |
| 142 | + <button type="button" class="button junk" data-tooltip="popupJunk" style="right:0;">통신사 스팸규격안내</button> | |
| 143 | + </div> | |
| 144 | + | |
| 145 | + <!-- 발송결과 상세 및 미리보기--> | |
| 146 | + <div class="send_general"> | |
| 147 | + <!-- 발송결과 상세 정보 --> | |
| 148 | + <div class="resultcont_left"> | |
| 149 | + <!--발송정보--> | |
| 150 | + <div class="res_info"> | |
| 151 | + <div class="res_info_in"> | |
| 152 | + <div class="res_info_top clearfix"> | |
| 153 | + <p>발송정보</p> | |
| 154 | + <p><button type="button" class="btnType btnType3">재전송</button></p> | |
| 155 | + </div> | |
| 156 | + <div class="res_info_btm"> | |
| 157 | + <dl> | |
| 158 | + <dt>발송일시</dt> | |
| 159 | + <dd>2024-07-18 15:25</dd> | |
| 160 | + </dl> | |
| 161 | + <dl> | |
| 162 | + <dt>형태</dt> | |
| 163 | + <dd>그림</dd> | |
| 164 | + </dl> | |
| 165 | + <dl> | |
| 166 | + <dt>발송건수</dt> | |
| 167 | + <dd><span class="c_222">100</span>건</dd> | |
| 168 | + </dl> | |
| 169 | + <dl> | |
| 170 | + <dt>발신번호</dt> | |
| 171 | + <dd>010-1234-5678</dd> | |
| 172 | + </dl> | |
| 173 | + <dl> | |
| 174 | + <dt>예약관리</dt> | |
| 175 | + <!--<dd>-</dd>--><!-- 예약건이 아닌 경우는 하이픈 처리--> | |
| 176 | + <dd><button class="btnType btnType25">예약취소</button></dd> | |
| 177 | + <!--<dd>예약취소 2024-07-16 15:07</dd>--><!-- 예역취소 후 버튼 대신 취소 일시 노출 --> | |
| 178 | + </dl> | |
| 179 | + </div> | |
| 180 | + <div class="res_info_btm"> | |
| 181 | + <dl> | |
| 182 | + <dt class="btm_charge">발송요금</dt> | |
| 183 | + <dd><span class="stcharge">100</span>원</dd> | |
| 184 | + <!--<dd><span class="stcharge">-</span>원</dd>--><!-- 예역취소 후 금액은 하이픈 처리--> | |
| 185 | + </dl> | |
| 186 | + </div> | |
| 187 | + </div> | |
| 188 | + </div> | |
| 189 | + <!--// 발송정보--> | |
| 190 | + <!--상세결과--> | |
| 191 | + <div class="res_info"> | |
| 192 | + <div class="res_info_in"> | |
| 193 | + <div class="res_info_top clearfix" style="padding:0 0 10px 0;"> | |
| 194 | + <p>상세결과</p> | |
| 195 | + <p><button type="button" class="refresh_btn btnType"><i class="refresh_img"></i>새로고침</button></p> | |
| 196 | + </div> | |
| 197 | + <div class="res_num"> | |
| 198 | + <div class="res_info_btm1"> | |
| 199 | + <dl> | |
| 200 | + <dt>전체건수</dt> | |
| 201 | + <dd><a href="#" data-tooltip="rev_popup04"><span class="c_222_g">101</span>건(100%)</a></dd> | |
| 202 | + </dl> | |
| 203 | + </div> | |
| 204 | + <div class="res_info_btm1"> | |
| 205 | + <dl> | |
| 206 | + <dt>성공건수</dt> | |
| 207 | + <dd><span class="c_002c9a_g">100</span>건(100%)</dd> | |
| 208 | + </dl> | |
| 209 | + </div> | |
| 210 | + </div> | |
| 211 | + <div class="res_num"> | |
| 212 | + <div class="res_info_btm1"> | |
| 213 | + <dl> | |
| 214 | + <dt>대기건수</dt> | |
| 215 | + <dd><span class="c_666_g">0</span>건(0%)</dd> | |
| 216 | + </dl> | |
| 217 | + </div> | |
| 218 | + <div class="res_info_btm1"> | |
| 219 | + <dl> | |
| 220 | + <dt>실패건수</dt> | |
| 221 | + <dd><span class="c_e40000_g">1</span>건(100%)</dd> | |
| 222 | + </dl> | |
| 223 | + </div> | |
| 224 | + </div> | |
| 225 | + </div> | |
| 226 | + </div> | |
| 227 | + <!--// 발송결과--> | |
| 228 | + | |
| 229 | + <div class="table_btn clearfix"> | |
| 230 | + <div class="table_btn_left"> | |
| 231 | + <button type="button" data-tooltip="rev_popup02" class="btnType btnType14"><i class="add_img"></i>주소록 등록</button> | |
| 232 | + <button type="button" class="excel_btn btnType"><i class="downroad"></i>엑셀 다운로드</button> | |
| 233 | + </div> | |
| 234 | + <div class="table_btn_right"> | |
| 235 | + <p class="table_btn_right_txt">* 전체 건수를 클릭하면 받는 사람 상세정보를 확인하실 수 있습니다.</p> | |
| 236 | + </div> | |
| 237 | + </div> | |
| 238 | + </div> | |
| 239 | + <!--// 발송결과 상세 정보 --> | |
| 240 | + | |
| 241 | + <!-- 발송결과 미리보기 --> | |
| 242 | + <div class="resultcont_right"> | |
| 243 | + <div class="phone"> | |
| 244 | + <div class="phoneIn"> | |
| 245 | + <div> | |
| 246 | + <p class="prev_p"><img src="/publish/images/search.png">미리보기</p> | |
| 247 | + <div class="text_length2 clearfix" style="display:none;"> | |
| 248 | + <span class="msg_com msg_short">단문</span> | |
| 249 | + <div> | |
| 250 | + <span>글자크기</span> | |
| 251 | + <button type="button"><img src="/publish/images/content/font_plus.png"></button> | |
| 252 | + <button type="button"><img src="/publish/images/content/font_minus.png"></button> | |
| 253 | + </div> | |
| 254 | + </div> | |
| 255 | + <div class="text_length2 clearfix" style="display:none;"> | |
| 256 | + <span class="msg_com msg_long">장문</span> | |
| 257 | + <div> | |
| 258 | + <span>글자크기</span> | |
| 259 | + <button type="button"><img src="/publish/images/content/font_plus.png"></button> | |
| 260 | + <button type="button"><img src="/publish/images/content/font_minus.png"></button> | |
| 261 | + </div> | |
| 262 | + </div> | |
| 263 | + <div class="text_length2 clearfix"> | |
| 264 | + <span class="msg_com ${result.msgType == '4' | |
| 265 | + ? 'msg_short' | |
| 266 | + : (result.fileCnt == '0' | |
| 267 | + ? 'msg_long' | |
| 268 | + : 'msg_photo')}"> | |
| 269 | + ${result.msgType == '4' | |
| 270 | + ? 'SMS' | |
| 271 | + : (result.fileCnt == '0' | |
| 272 | + ? 'LMS' | |
| 273 | + : 'MMS')} | |
| 274 | + </span> | |
| 275 | + | |
| 276 | +<!-- <span class="msg_com msg_photo">포토</span> --> | |
| 277 | + <!-- <ul class="photo_msg_num"> | |
| 278 | + <li onclick="imgClick(0);"><a href="#none">1</a></ li> | |
| 279 | + <li onclick="imgClick(1);"><a href="#none">2</a></ li> | |
| 280 | + <li onclick="imgClick(2);"><a href="#none">3</a></ li> | |
| 281 | + </ul> --> | |
| 282 | + <!-- <div> | |
| 283 | + <span>글자크기</span> | |
| 284 | + <button type="button"><img src="/publish/images/content/font_plus.png"></button> | |
| 285 | + <button type="button"><img src="/publish/images/content/font_minus.png"></button> | |
| 286 | + </div> --> | |
| 287 | + </div> | |
| 288 | + <!-- 텍스트 미리보기 --> | |
| 289 | + <div class="text_preview"> | |
| 290 | + <div class="preiew_img"> | |
| 291 | + <c:forEach var="fileInfo" items="${result.fileInfos}"> | |
| 292 | + <div class="img_box"> | |
| 293 | + <img src="<c:url value='/cmm/fms/getImage2.do'/>?atchFileId=<c:out value="${fileInfo.atchFileId}"/>&fileSn=<c:out value="${fileInfo.fileSn}"/>" alt="발송된 그림문자 미리보기" style="width: 100%"> | |
| 294 | + </div> | |
| 295 | + </c:forEach> | |
| 296 | + </div> | |
| 297 | + <div class="preview_auto"> | |
| 298 | + <c:if test="${result.msgKind eq 'A' }" > | |
| 299 | + <p class="ad_tit">(광고)</p> | |
| 300 | + </c:if> | |
| 301 | + <p class="none_txt"><c:out value="${result.smsTxt }" /></p> | |
| 302 | + <p class="realtime"></p> | |
| 303 | + <c:if test="${result.msgKind eq 'A' }" > | |
| 304 | + <p class="deny_receipt">무료 거부 080-0000-0000</p> | |
| 305 | + </c:if> | |
| 306 | + </div> | |
| 307 | + </div> | |
| 308 | + <!-- //텍스트 미리보기 --> | |
| 309 | + </div> | |
| 310 | + </div> | |
| 311 | + <p class="addText">※ 단말기 설정에 따라 다르게 보일 수 있습니다<p> | |
| 312 | + </div> | |
| 313 | + </div> | |
| 314 | + <!--// 발송결과 미리보기 --> | |
| 315 | + </div> | |
| 316 | + <!--// 발송결과 상세 및 미리보기--> | |
| 317 | + <!-- 목록--> | |
| 318 | + <div class="btn_list_type1"> | |
| 319 | + <button class="btnType btnType17">목록</button> | |
| 320 | + </div> | |
| 321 | + <!--// 목록--> | |
| 322 | + | |
| 323 | + </div> | |
| 324 | + </div> | |
| 325 | + <!--// send top --> | |
| 326 | +</div> | |
| 327 | + | |
| 328 | + | |
| 329 | + | |
| 330 | + <!-- 발송대상리스트 팝업 --> | |
| 331 | + <div class="tooltip-wrap"> | |
| 332 | + <div class="popup-com ad_layer rev_popup04" tabindex="0" data-tooltip-con="rev_popup04" data-focus="rev_popup04" data-focus-prev="rev_popup04-close" style="width:595px;"> | |
| 333 | + <div class="popup_heading"> | |
| 334 | + <p>발송대상 리스트</p> | |
| 335 | + <button type="button" class="tooltip-close" data-focus="rev_popup04-close"><img src="/publish/images/content/layerPopup_close.png" alt="팝업 닫기"></button> | |
| 336 | + </div> | |
| 337 | + <div class="layer_in"> | |
| 338 | + | |
| 339 | + <div class="gorup_join_cont" style="margin:-15px 0 0 0;"> | |
| 340 | + <div class="group_input"> | |
| 341 | + <div class="input_left">발신번호</div> | |
| 342 | + <div class="input_right type1"><c:out value="${result.callFrom }" /></div> | |
| 343 | + </div> | |
| 344 | + </div> | |
| 345 | + | |
| 346 | + <div class="popup_search_type1"> | |
| 347 | + <label for="" class="label">검색종류 선택</label> | |
| 348 | + <select id="" class="selType2 select_btn"> | |
| 349 | + <option value="1">수신번호</option> | |
| 350 | + <option value="2">이름</option> | |
| 351 | + <option value="3">상세결과</option> | |
| 352 | + </select> | |
| 353 | + <label for="" class="label">검색어입력</label> | |
| 354 | + <input type="text" class="send_text" id="" name="" value="" placeholder="3자 이상 입력하세요." onfocus="this.placeholder=''" onblur="this.placeholder='3자 이상 입력하세요.'"> | |
| 355 | + <button type="button" class="btnType btnType2" style="width:63px; margin:0;">검색</button> | |
| 356 | + </div> | |
| 357 | + | |
| 358 | + <div class="tb_wrap" id="detailPopup" style="min-height:200px;"> | |
| 359 | + <%-- <table class="tType4"> | |
| 360 | + <colgroup> | |
| 361 | + <col style="width: 30%;"> | |
| 362 | + <col style="width: 40%;"> | |
| 363 | + <col style="width: 30%;"> | |
| 364 | + </colgroup> | |
| 365 | + <thead> | |
| 366 | + <tr> | |
| 367 | + <th>이름 | |
| 368 | + <div class="sort_wrap"> | |
| 369 | + <input type="button" class="sort sortBtn"> | |
| 370 | + </div> | |
| 371 | + </th> | |
| 372 | + <th>수신번호 | |
| 373 | + <div class="sort_wrap"> | |
| 374 | + <input type="button" class="sort sortBtn"> | |
| 375 | + </div> | |
| 376 | + </th> | |
| 377 | + <th>상세결과 | |
| 378 | + <div class="sort_wrap"> | |
| 379 | + <input type="button" class="sort sortBtn"> | |
| 380 | + </div> | |
| 381 | + </th> | |
| 382 | + </tr> | |
| 383 | + </thead> | |
| 384 | + <tbody> | |
| 385 | + <tr> | |
| 386 | + <td>홍길동</td> | |
| 387 | + <td>010-1234-5678</td> | |
| 388 | + <td>성공</td> | |
| 389 | + </tr> | |
| 390 | + <tr> | |
| 391 | + <td>홍길동</td> | |
| 392 | + <td>010-1234-5678</td> | |
| 393 | + <td>성공</td> | |
| 394 | + </tr> | |
| 395 | + <tr> | |
| 396 | + <td>홍길동</td> | |
| 397 | + <td>010-1234-5678</td> | |
| 398 | + <td>성공</td> | |
| 399 | + </tr> | |
| 400 | + <tr> | |
| 401 | + <td>홍길동</td> | |
| 402 | + <td>010-1234-5678</td> | |
| 403 | + <td>성공</td> | |
| 404 | + </tr> | |
| 405 | + <tr> | |
| 406 | + <td>홍길동</td> | |
| 407 | + <td>010-1234-5678</td> | |
| 408 | + <td>성공</td> | |
| 409 | + </tr> | |
| 410 | + <tr> | |
| 411 | + <td>홍길동</td> | |
| 412 | + <td>010-1234-5678</td> | |
| 413 | + <td>성공</td> | |
| 414 | + </tr> | |
| 415 | + <tr> | |
| 416 | + <td>홍길동</td> | |
| 417 | + <td>010-1234-5678</td> | |
| 418 | + <td>성공</td> | |
| 419 | + </tr> | |
| 420 | + </tbody> | |
| 421 | + </table> | |
| 422 | + --%> | |
| 423 | + </div> | |
| 424 | + | |
| 425 | + <div class="table_btn clearfix"> | |
| 426 | + <div class="table_btn_left"></div> | |
| 427 | + <div class="table_btn_right"> | |
| 428 | + <button type="button" data-tooltip="rev_popup02" class="btnType btnType14"><i class="add_img"></i>주소록 등록</button> | |
| 429 | + <button type="button" class="excel_btn btnType"><i class="downroad"></i>엑셀 다운로드</button> | |
| 430 | + </div> | |
| 431 | + </div> | |
| 432 | + <!-- | |
| 433 | + pagination | |
| 434 | + <ul class="pagination"> | |
| 435 | + <li class="page_first"><button><img src="/publish/images/content/page_first.png" | |
| 436 | + alt=""></button></li> | |
| 437 | + <li class="page_prev"><button><img src="/publish/images/content/page_prev.png" | |
| 438 | + alt=""></button></li> | |
| 439 | + <li class="on"><button>1</button></li> | |
| 440 | + <li><button>2</button></li> | |
| 441 | + <li><button>3</button></li> | |
| 442 | + <li><button>4</button></li> | |
| 443 | + <li><button>5</button></li> | |
| 444 | + <li><button>6</button></li> | |
| 445 | + <li><button>7</button></li> | |
| 446 | + <li><button>8</button></li> | |
| 447 | + <li><button>9</button></li> | |
| 448 | + <li><button>10</button></li> | |
| 449 | + <li class="page_next"><button><img src="/publish/images/content/page_next.png" | |
| 450 | + alt=""></button></li> | |
| 451 | + <li class="page_last"><button><img src="/publish/images/content/page_last.png" | |
| 452 | + alt=""></button></li> | |
| 453 | + </ul>pagination | |
| 454 | + --> | |
| 455 | + </div> | |
| 456 | + <div class="popup_btn_wrap2" style="margin: -40px auto 30px auto;"> | |
| 457 | + <button type="button" class="tooltip-close" data-focus="adr_popup01-close" data-focus-next="popup02">닫기</button> | |
| 458 | + </div> | |
| 459 | + | |
| 460 | + </div> | |
| 461 | + </div> | |
| 462 | + <!-- //발송대상 리스트 안내 팝업 --> | |
| 463 | + |
Add a comment
Delete comment
Once you delete this comment, you won't be able to recover it. Are you sure you want to delete this comment?