Selaa lähdekoodia

Merge remote-tracking branch '112.172.147.34/style' into ST24PRJ-7(제휴몰검색기능)

jsh77b 4 vuotta sitten
vanhempi
commit
b2a1a16bc6

+ 41 - 0
src/main/java/com/style24/admin/biz/dao/TsaSmsSendDao.java

@@ -0,0 +1,41 @@
+package com.style24.admin.biz.dao;
+
+import java.util.Collection;
+ 
+import com.style24.persistence.domain.SmsSend; 
+import com.style24.core.support.annotation.ShopDs;
+import org.springframework.stereotype.Repository;
+
+/**
+ * 발송이력조회 Dao
+ * 
+ * @author smlee
+ * @since 2020. 11. 16
+ */
+@ShopDs
+@Repository
+public interface TsaSmsSendDao {
+
+
+	
+	/**
+	 * 발송이력 목록
+	 * 
+	 * @param withdraw
+	 * @return Collection<SmsSend>
+	 * @author smlee
+	 * @since 2021. 11. 16
+	 */
+	Collection<SmsSend> getSmsSendList(SmsSend smsSend);
+	
+	/**
+	 * 발송이력 상세
+	 * 
+	 * @param SmsSend
+	 * @return SmsSend
+	 * @author smlee
+	 * @since 2021. 11. 25
+	 */
+	SmsSend getSmsSendDetail(SmsSend smsSend);
+	
+}

+ 116 - 0
src/main/java/com/style24/admin/biz/service/TsaSmsSendService.java

@@ -0,0 +1,116 @@
+package com.style24.admin.biz.service;
+import com.gagaframework.web.parameter.GagaMap;
+import com.style24.admin.biz.dao.TsaSmsSendDao;
+import com.style24.admin.support.security.session.TsaSession;
+import com.style24.core.biz.service.TscCustomerService;
+import com.style24.core.support.env.TscConstants;
+import com.style24.persistence.domain.CustContactHst;
+import com.style24.persistence.domain.Customer;
+import com.style24.persistence.domain.SsgDirectMessage;
+import com.style24.persistence.domain.Withdraw;
+import com.vdurmont.emoji.EmojiParser;
+import com.style24.persistence.domain.SmsSend;
+
+import java.util.ArrayList;
+import java.util.Collection;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+ 
+
+import lombok.extern.slf4j.Slf4j; 
+/**
+ * sms/kakao 발송목록 조회 
+ *
+ * @author smlee
+ * @since 2021. 11. 16
+ */
+@Service
+@Slf4j
+public class TsaSmsSendService {
+
+	@Autowired
+	private TsaSmsSendDao SmsSendDao;
+
+
+	
+	/**
+	 * Sms 발송조회
+	 *
+	 * @param smsSend
+	 * @return
+	 * @author smlee
+	 * @since 2021. 11. 16
+	 */
+	public Collection<SmsSend> getSmsSendList(SmsSend smsSend) {
+		Collection<SmsSend> result = new ArrayList<>();
+		
+		String SearchFullMonth = smsSend.getSearchYear()+smsSend.getSearchMonth();
+		//1.  카카오 
+		if(smsSend.getSendTypeKko() != null && smsSend.getSendTypeKko().equals("kko"))
+		{
+			SetSmsSendParameter(smsSend,"style24_msg.ssg_send_log_kko_"+SearchFullMonth, "kko","알림톡","FKKOSUBJECT", "FTEMPLATEKEY"); 			
+			for (SmsSend data : SmsSendDao.getSmsSendList(smsSend)) { 
+				result.add(data);
+			}
+
+		}		
+
+		//2. lms  
+		if(smsSend.getSendTypeLms() != null && smsSend.getSendTypeLms().equals("lms"))
+		{
+			SetSmsSendParameter(smsSend,"style24_msg.ssg_send_log_mms_"+SearchFullMonth, "lms","LMS/MMS","FSUBJECT", "''");  			
+			for (SmsSend data : SmsSendDao.getSmsSendList(smsSend)) { 
+				result.add(data);
+			}
+		}		
+
+		//3. sms  
+		if(smsSend.getSendTypeSms() != null && smsSend.getSendTypeSms().equals("sms"))
+		{
+			SetSmsSendParameter(smsSend,"style24_msg.ssg_send_log_sms_"+SearchFullMonth, "sms","SMS","FMESSAGE", "''");   
+			for (SmsSend data : SmsSendDao.getSmsSendList(smsSend)) { 
+				result.add(data);
+			}
+		}	 
+		return result;
+	}
+	/**
+	 * Sms 발송조회- 상세
+	 *
+	 * @param smsSend
+	 * @return
+	 * @author smlee
+	 * @since 2021. 11. 16
+	 */
+	public SmsSend getSmsSendDetail(String sendType, Integer fseq, String searchMonth){
+		SmsSend smsSend = new SmsSend();
+		smsSend.setFseq(fseq);
+		switch (sendType)
+		{
+		case "kko":		
+			SetSmsSendParameter(smsSend,"style24_msg.ssg_send_log_kko_"+searchMonth, sendType,"알림톡","FKKOSUBJECT", "FTEMPLATEKEY"); 	
+		  break;
+		case "lms":		
+			SetSmsSendParameter(smsSend,"style24_msg.ssg_send_log_mms_"+searchMonth, sendType,"LMS/MMS","FSUBJECT", "''");  			
+		  break;
+		case "sms":		
+			SetSmsSendParameter(smsSend,"style24_msg.ssg_send_log_sms_"+searchMonth, sendType,"SMS","FMESSAGE", "''");   
+		  break;
+		
+		}
+		return SmsSendDao.getSmsSendDetail(smsSend);
+		
+	}
+	
+	private SmsSend SetSmsSendParameter(SmsSend smsSend, String tableName, String sendType, String sendTypeNm, String subject, String templateKey)
+	{
+		smsSend.setSendTypeTable(tableName);
+		smsSend.setSendType(sendType); 
+		smsSend.setSendTypeNm(sendTypeNm); 
+		smsSend.setSendTypeSubject(subject); 
+		smsSend.setSendTypeTemplateKey(templateKey); 
+		return smsSend;
+	}
+	
+}

+ 98 - 0
src/main/java/com/style24/admin/biz/web/TsaSmsSendController.java

@@ -0,0 +1,98 @@
+package com.style24.admin.biz.web;
+
+import java.util.Collection;
+
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.servlet.ModelAndView;
+
+import com.gagaframework.web.parameter.GagaMap;
+import com.gagaframework.web.rest.server.GagaResponse;
+import com.style24.admin.biz.service.TsaSmsSendService; 
+import com.style24.admin.support.controller.TsaBaseController;
+import com.style24.admin.support.security.session.TsaSession; 
+import com.style24.core.support.session.TscSession;
+import com.style24.persistence.domain.SmsSend;
+
+import lombok.extern.slf4j.Slf4j;
+
+
+/**
+ * 자동문자발송이력 Controller
+ * 
+ * @author smlee
+ * @since 2021. 11. 16
+ */
+@Controller
+@RequestMapping("/sms")
+@Slf4j
+public class TsaSmsSendController extends TsaBaseController {
+
+
+	@Autowired
+	private TsaSmsSendService smsSendService;
+
+	/**
+	 * 문자발송이력 목록 화면
+	 * 
+	 * @return
+	 * @throws Exception
+	 * @author moon
+	 * @since 2020. 11. 16
+	 */
+	@RequestMapping(value = "/send/list/form")
+	public ModelAndView smsSendForm() throws Exception {
+		ModelAndView mav = new ModelAndView();
+ 
+		mav.setViewName("sms/SmsSendListForm");
+
+		return mav;
+	}
+
+	/**
+	 * 문자발송이력 목록
+	 * 
+	 * @param  SmsSend
+	 * @return Collection<SmsSend>
+	 * @author smlee
+	 * @since 2020. 11. 16
+	 */
+	@PostMapping("/send/list")
+	@ResponseBody
+	public  Collection<SmsSend> getSmsSendList(@RequestBody SmsSend smsSend) {
+		 
+		TscSession.setAttribute("maskingYn", TsaSession.getInfo().getMaskingYn());
+		 
+		
+		return smsSendService.getSmsSendList(smsSend);
+	}
+	
+	/**
+	 * 문자발송이력 상세 화면
+	 * 
+	 * @param sendtype
+	 * @return 문자발송이력 상세 화면
+	 * @throws Exception
+	 * @author smlee
+	 * @since 2021. 11. 25
+	 */
+	@GetMapping("/send/detail/form")
+	@ResponseBody
+	public ModelAndView refundDetailForm(@RequestParam(value = "sendType") String sendtype, @RequestParam(value = "fseq") Integer fseq, @RequestParam(value = "searchmonth") String searchmonth) {
+		ModelAndView mav = new ModelAndView();
+ 
+	    mav.addObject("smsSendInfo", smsSendService.getSmsSendDetail(sendtype, fseq,searchmonth));
+	 
+
+		mav.setViewName("sms/SmsSendDetailForm");
+
+		return mav;
+	}
+}

+ 71 - 0
src/main/java/com/style24/persistence/domain/SmsSend.java

@@ -0,0 +1,71 @@
+package com.style24.persistence.domain;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.style24.core.support.session.TscSession;
+import com.style24.core.support.util.MaskingUtils;
+import com.style24.persistence.TscBaseDomain;
+import com.style24.persistence.TscPageRequest;
+
+import lombok.Data;
+/**
+ * sms Domain
+ * 
+ * @author smlee
+ * @since 2021. 11. 16
+ */
+@SuppressWarnings("serial")
+@Data
+public class SmsSend extends TscBaseDomain {
+ 
+	
+	private int fseq;
+	private String orderNm; //주문자 
+	private String custNm;  //회원명
+	private String fdesTine;//수신번호 
+	private String fcallBack; //발신번호  
+	private String sendType ; // 발송유형 
+	private String sendTypeNm ; // 발송유형 이름
+	private String frsltStat; //발송결과 
+	private String frsltDate; //발송시간 
+	private String searchYear;					// 조회 년도 
+	private String searchMonth;					// 조회 월 
+	
+	
+	private String fsendDate; //발송요청시간 
+	private String custId; //아이디 
+	private String fsubject;//제목
+	private String fmessage;//내용
+    private String sender; //발송자
+    private String ftemplateKey; //템플릿코드 
+    
+    private String callBack1; // 자사(1544-5336) 
+    private String callBack2; // 제휴(1644-5390)
+    
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+	private String[] multiCallbackGb;	// 발신번호구분
+    
+ 
+	
+    public String sendTypeSms;
+    public String sendTypeLms;
+    public String sendTypeKko;
+    
+    public String sendTypeTable;
+    public String sendTypeSubject;
+    public String sendTypeTemplateKey;
+    
+    private String frsltStatSuccess;
+    private String frsltStatFail;
+	
+    
+    //Masking
+    
+    public String getMaskingcustNm() {
+		return TscSession.getAttribute("maskingYn").equals("Y") ? MaskingUtils.name(this.custNm) : this.custNm;
+
+	}
+
+	public String getMaskingFdestine() {
+		return TscSession.getAttribute("maskingYn").equals("Y") ? MaskingUtils.phoneNo(this.fdesTine) : this.fdesTine;
+	}
+	
+}

+ 71 - 0
src/main/java/com/style24/persistence/mybatis/shop/TsaSmsSend.xml

@@ -0,0 +1,71 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.style24.admin.biz.dao.TsaSmsSendDao">
+
+	
+	<!-- 발송정보 목록 -->
+	<select id="getSmsSendList" parameterType="SmsSend" resultType="SmsSend">
+	 /* TsaSmsSend.getSmsSendList */ 
+		SELECT A.*, ROW_NUMBER() OVER(ORDER BY  A.FSENDDATE asc) RNUM     
+		  FROM (
+			 SELECT #{sendType} AS SendType,
+				    #{sendTypeNm} AS SendTypeNm,
+					FSEQ, 
+			        FCALLBACK,
+			        FSENDDATE,
+			        FRSLTSTAT,
+			        DATE_ADD(FRSLTDATE, INTERVAL 9 HOUR ) as FRSLTDATE,
+			        FUSERID,
+			        FDESTINE,
+			        ${sendTypeSubject}  AS FSUBJECT,
+			        FMESSAGE,
+        			 FUSERID        AS Sender,
+					${sendTypeTemplateKey} AS FTEMPLATEKEY 
+	        FROM ${sendTypeTable}
+	         WHERE 1=1 	     
+   	         <if test="fdesTine !=null and fdesTine !='' ">
+		    	 AND FDESTINE = #{fdesTine}
+			 </if>
+        	   <if test="multiCallbackGb != null">
+					/* 발신번호 */
+					<foreach collection="multiCallbackGb" item="item" index="index"  open="AND FCALLBACK IN (" close=")" separator=",">#{item}</foreach>
+				</if>
+			 <choose>
+				<when test='frsltStatSuccess != null and frsltStatSuccess != "" and frsltStatFail != null and frsltStatFail != ""'>
+					AND 1=1
+				</when>
+				<when test='frsltStatSuccess != null and frsltStatSuccess != ""'>
+					AND frsltstat = '06'
+				</when>
+				<when test='frsltStatFail != null and frsltStatFail != ""'>
+					AND frsltstat <![CDATA[<>]]> '06'
+				</when>
+			</choose>		
+			    	         
+			  ) A 
+	</select>	
+	
+ 
+		<!-- 발송정보 목록 -->
+	<select id="getSmsSendDetail" parameterType="SmsSend" resultType="SmsSend">
+	 /* TsaSmsSend.getSmsSendDetail */ 
+	 
+			 SELECT #{sendType} AS SendType,
+				    #{sendTypeNm} AS SendTypeNm,
+					FSEQ, 
+			        FCALLBACK,
+			        FSENDDATE,
+			        FRSLTSTAT,
+			        DATE_ADD(FRSLTDATE, INTERVAL 9 HOUR ) as FRSLTDATE,
+			        FUSERID,
+			        FDESTINE,
+			        ${sendTypeSubject}  AS FSUBJECT,
+			        FMESSAGE,
+        			FUSERID      AS Sender,
+					${sendTypeTemplateKey} AS FTEMPLATEKEY 
+	        FROM ${sendTypeTable}
+	         WHERE 1=1 	      
+	         AND fseq = #{fseq}
+	</select>
+		
+</mapper>

+ 25 - 0
src/main/webapp/WEB-INF/views/common/layout/popup.html

@@ -0,0 +1,25 @@
+<!DOCTYPE html>
+<html lang="ko"
+	xmlns:th="http://www.thymeleaf.org"
+	xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout">
+
+<head th:replace="~{common/fragments/header :: header}"></head>
+
+<body>
+
+<th:block th:replace="~{common/fragments/variables :: variables}"></th:block>
+
+<div id="wrapper" class="color-pastel">
+	<th:block layout:fragment="content"></th:block>
+</div>
+
+<script th:inline="javascript">
+/*<![CDATA[*/
+	$(document).ready(function() {
+		
+	});
+/*]]>*/
+</script>
+
+</body>
+</html>

+ 4 - 2
src/main/webapp/WEB-INF/views/customer/OneToOneQnaDetailForm.html

@@ -14,7 +14,7 @@
  * 1.0  2020.12.24   gagamel     최초 작성
  *******************************************************************************
  -->
-<div class="modalPopup" data-width="1200" data-height="900" id="popupOneToOneQnaDetail">
+<div class="modelessPopup draggable" data-width="1200" data-height="900" id="popupOneToOneQnaDetail">
 	<div class="panelStyle">
 		<!-- TITLE -->
 		<div class="panelTitle">
@@ -127,7 +127,7 @@
 								<span id="dpLocAnsContent">0</span>/4,000Byte
 							</th>
 							<td>
-								<textarea class="textareaR4" style="resize: none;" name="ansContent" th:text="*{ansContent}" onkeyup="cfnGetTextLength(this, 4000, $('#dpLocAnsContent'));" required="required" data-valid-name="답변 내용"></textarea>
+								<textarea class="textareaR15" style="resize: none;" name="ansContent" th:text="*{ansContent}" onkeyup="cfnGetTextLength(this, 4000, $('#dpLocAnsContent'));" required="required" data-valid-name="답변 내용"></textarea>
 							</td>
 						</tr>
 					</tbody>
@@ -471,6 +471,8 @@
 		fnSearchOneToOneCustomerHistory();
 		
 		fnShowOrHideOneToOneQnaButton([[${counselInfo.ansStat}]]);
+		
+		$('#popupOneToOneQnaDetail .modelessPopup').draggable({'cancel':'.panelContent'});
 	});
 /*]]>*/
 </script>

+ 3 - 3
src/main/webapp/WEB-INF/views/customer/OneToOneQnaForm.html

@@ -14,7 +14,7 @@
  * 1.0  2020.12.24   gagamel     최초 작성
  *******************************************************************************
  -->
-	<div id="main">
+<div id="main">
 	<form id="searchForm" name="searchForm" action="#" th:action="@{'/customer/onetoone/qna/list'}" onsubmit="$('#btnSearch').trigger('click'); return false;">
 		<!-- 메인타이틀 영역 -->
 		<div class="main-title">
@@ -132,8 +132,8 @@
 			</ul>
 		</div>
 		<!-- //리스트 영역 -->
-		</form>
-	</div>
+	</form>
+</div>
 
 <script type="text/javascript" src="/ux/plugins/gaga/gaga.paging.js"></script>
 <script th:inline="javascript">

+ 99 - 0
src/main/webapp/WEB-INF/views/sms/SmsSendDetailForm.html

@@ -0,0 +1,99 @@
+<!DOCTYPE html>
+<html lang="ko"
+	xmlns:th="http://www.thymeleaf.org">
+<!--
+ *******************************************************************************
+ * @source  : SmsSendDetail.html
+ * @desc    : SMS발송 상세 팝업 Page
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2020 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.11.24   smlee     최초 작성
+ *******************************************************************************
+ -->
+<div class="modalPopup" data-width="1200" id="popupSmsSend">
+	<div class="panelStyle"  style="max-height:750px;overflow-y:scroll;">
+		<!-- TITLE -->
+		<div class="panelTitle">
+			<h2>발송상세내역</h2>
+			<button type="button" class="close" onclick="uifnPopupClose('popupSmsSend');"><em class="fa fa-times"></em></button>
+		</div>
+		<!-- //TITLE -->	 
+		
+		<div class="panelContent"> 
+				
+				<table class="frmStyle" aria-describedby="상세폼">
+					<colgroup>
+						<col style="width:30%;"/>
+						<col style="width:70%;"/> 
+						<col/>
+					</colgroup>
+					<tbody>
+						<tr>
+							<th>발송유형</th>
+							   <td th:text="${smsSendInfo.sendTypeNm}">
+							   
+							   </td>					 
+						</tr>
+						<tr>
+							<th>휴대폰번호</th>
+							 <td th:text="${smsSendInfo.maskingFdestine}">
+							 </td>
+						</tr>
+						<tr>
+							<th>제목</th>
+							 <td th:text="${smsSendInfo.fsubject}">
+							 
+							 </td>
+						</tr>
+						<tr>
+							<th>내용</th>
+							<td> <dd th:utext="*{#strings.replace(smsSendInfo.fmessage, T(System).getProperty('line.separator'), '&lt;br /&gt;')}"></dd> 
+							 </td>
+						</tr>
+						<tr>
+							<th>발신번호</th>
+							
+							 <td th:text="${smsSendInfo.fcallBack}">
+							 </td>
+						</tr>
+						<tr>
+							<th>발송시간</th>
+							
+							 <td th:text="${smsSendInfo.fsendDate}">
+							 </td>
+						</tr>
+						<tr>
+							<th>발송결과</th>
+							
+							 <td th:text="*{smsSendInfo.frsltStat =='06'? '성공('+smsSendInfo.frsltDate+')': '실패'}">
+							 </td>
+						</tr>
+						<tr>
+							<th>발송자</th>
+							
+							 <td th:text="*{smsSendInfo.sender =='99999'? '배치':'' }">
+							 </td>
+						</tr>
+					</tbody>
+				</table> 
+		</div>
+		<!-- //CONTENT -->	
+	</div>
+</div>
+
+<script th:inline="javascript">
+/*<![CDATA[*/	
+	
+	$(document).ready(function() {
+		// Create a summernote
+		//let snOptions = gagaSn.getToolbarOptions();
+		//gagaSn.createSummernote(snOptions, '#answer');
+	});
+/*]]>*/
+</script>
+
+</html>

+ 207 - 0
src/main/webapp/WEB-INF/views/sms/SmsSendListForm.html

@@ -0,0 +1,207 @@
+<!DOCTYPE html>
+<html lang="ko"
+	xmlns:th="http://www.thymeleaf.org">
+<!--
+ *******************************************************************************
+ * @source  : SmsSendListForm.html
+ * @desc    : sms발송목록확인 화면 Page
+ *=============================================================
+ * STYLE24
+ * Copyright(C) 2020 TSIT, All rights reserved.
+ *=============================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  ==================================
+ * 1.0  2021.11.16   smlee        최초 작성
+ *******************************************************************************
+ -->
+	<div id="main">
+		<!-- 메인타이틀 영역 -->
+		<div class="main-title">문자발송이력
+		</div>
+		<!-- //메인타이틀 영역 -->
+		
+		<!-- 메뉴 설명 -->
+		<div class="infoBox menu-desc">
+		</div>
+		<!-- //메뉴 설명 -->
+		
+		<form id="searchForm" name="searchForm" action="#" th:action="@{'/sms/send/list'}" onsubmit="fnSearch(); return false;" >
+		<div class="panelStyle">
+			<!-- TITLE -->
+			<div class="panelTitle">
+				<h3><i class="fa fa-info-circle"></i>아래 검색조건 중 <font color="red">구분</font>은 꼭 입력해 주세요.</h3>
+				<span class="panelControl">
+					<i class="fa fa-chevron-up"></i>
+				</span>
+			</div>
+			<!-- //TITLE -->
+			<div class="panelContent">
+
+				
+					<table class="frmStyle">
+						<colgroup>
+							<col style="width:12%" />
+							<col style="width:38%" />
+							<col style="width:12%" />
+							<col style="width:38" /> 
+						</colgroup>
+						<tbody> 
+							<tr>
+								<th class="dashR">휴대폰번호</th>
+								<td class="dashR">
+									<input type="text" id="fdesTine" name="fdesTine" class="w200" />
+								</td>
+								<th>발신번호</th>
+								<td> 
+	                            <label class="chkBox checked"><input type="checkbox" name="multiCallbackGb" value="1544-5336" checked="checked"/>자사(1544-5336)</label>
+	                            <label class="chkBox checked"><input type="checkbox" name="multiCallbackGb" value="16445-390" checked="checked"/>제휴(1644-5390)</label>
+					  		   </td>				    
+								 
+							</tr>
+							<tr>
+								<th>발송유형</th>
+								<td >
+								 <label class="chkBox checked"><input type="checkbox" name="sendTypeSms" value="sms" checked="checked"/>SMS</label>
+	                             <label class="chkBox checked"><input type="checkbox" name="sendTypeLms" value="lms" checked="checked"/>LMS/MMS</label>
+	                             <label class="chkBox checked"><input type="checkbox" name="sendTypeKko" value="kko" checked="checked"/>알림톡</label>                             
+									 
+								</td>
+								<th>발송결과</th>
+								<td>
+									
+	                             <label class="chkBox checked"><input type="checkbox" name="frsltStatSuccess" value="06" checked="checked"/>성공</label>
+	                             <label class="chkBox checked"><input type="checkbox" name="frsltStatFail" value="other" checked="checked"/>실패</label>  
+								</td>
+								 							
+							</tr>
+							<tr>
+							<th class="dashR">기간</th>
+							<td colspan="3">
+						  	<select id="searchYear" name="searchYear"></select>						  	
+						  	<select id="searchMonth" name="searchMonth"></select>
+						 </td>
+						</tr>
+						</tbody>
+					</table>
+	
+					<ul class="panelBar">
+						<li class="center">
+						<button type="button" class="btn btn-base btn-lg btn-lg" id="btnSearch">조회</button>
+						<button type="button" class="btn btn-gray btn-lg" onclick="$('#searchForm')[0].reset(); fnInitCalendar();">초기화</button>
+						<button type="button" id="btnExcel" class="btn btn-info btn-lg">엑셀다운로드</button>
+						</li>
+					</ul>
+			</div>
+		</div>
+		<!-- 리스트 영역 -->
+		<div class="panelStyle">			
+			<div id="gridList" style="width:100%; height: 570px;" class="ag-theme-balham"></div>
+		</div>
+		</form>
+	</div>
+
+<script th:inline="javascript">
+/*<![CDATA[*/
+	// specify the columns
+	// var extmallList =  gagajf.convertToArray([[${extmallList}]]);
+	
+	var columnDefs = [
+		{headerName: "발송유형",       field: "sendTypeNm", 			width: 100, cellClass: 'text-center'}, 
+		{headerName: "발송번호", 	     field: "fcallBack", 		width: 100, cellClass: 'text-center'},
+		{headerName: "발송요청시간", 	 field: "fsendDate", 	   sort:"asc", width: 200, cellClass: 'text-center'},
+		{headerName: "발송결과", 	     field: "frsltStat",		width: 200, cellClass: 'text-center',
+			cellRenderer: function (params) {
+				return params.value=="06"? "성공"+ "("+params.data.frsltDate + ")" : "실패";
+			} 			
+		},
+		{headerName: "휴대폰번호",      field: "maskingFdestine",	  width: 120, cellClass: 'text-center'},
+		{headerName: "제목",          field: "fsubject",		      width: 250, cellClass: 'text-left',
+			cellRenderer: function (params) {
+				return "<a href=\"javascript:void(0);\" onclick=\"detailPopup('"+params.data.sendType+"','" + params.data.fseq + "');\">" + params.value + "</a>";
+			} 			},
+		{headerName: "발송자",         field: "sender",		      width: 120, cellClass: 'text-center',
+				cellRenderer: function (params) {
+					return params.value=="99999"? "배치": " ";
+				} 			},
+		{headerName: "템플릿코드",      field: "ftemplateKey",		  width: 120, cellClass: 'text-center'}
+
+	];
+
+	// Get GridOptions
+	var gridOptions  = gagaAgGrid.getGridOptions(columnDefs);
+
+	// Grid editable
+	//withDrawGridOptions.defaultColDef.editable = false;
+
+
+	/*************************************************************************
+	*  init
+	**************************************************************************/	
+	$(document).ready(function() {
+		// 공통 달력 생성
+         cfnDateYearSetting('searchYear', 2);
+         cfnDateMonthSetting('searchMonth');		
+		// Create a agGrid
+		gagaAgGrid.createGrid('gridList', gridOptions);
+
+	});
+	
+
+	/*************************************************************************
+	*  조회 버튼 클릭 시
+	**************************************************************************/
+	$('#btnSearch').on('click', function() { 
+		fnSearch();
+	});
+
+	/*************************************************************************
+	*  조회 
+	**************************************************************************/	
+	var fnSearch = function() {   
+
+		const $fdesTine = $('#searchForm input[name=fdesTine]');	// 검색핸드폰번호
+		var searchMonth = $("#searchYear option:selected").val()+$("#searchMonth option:selected").val()+'01'; //searchmonth	
+		 
+		if (gagajf.isNull($fdesTine.val())) {
+			mcxDialog.alert('휴대폰번호를 입력해주세요');
+			return;       
+		} 
+		
+        if(searchMonth <"20210901")       	{
+			mcxDialog.alert('2021-09-01 이후로만 조회가능합니다.');
+			return;        	
+       	}
+		
+		gagaAgGrid.fetch($('#searchForm').prop('action'), gridOptions, '#searchForm');	    
+	};
+
+ 
+	 
+	$('#searchForm input[name=fdesTine]').on('input keyup keydown paste change', function () {
+		cfnCellPhonnHypen(this);
+	});
+	
+
+	/*************************************************************************
+	*  상세 화면
+	**************************************************************************/		
+	var detailPopup = function(sendType, fseq) {
+		if (fseq == 0) return;
+		var searchMonth = $("#searchYear option:selected").val()+$("#searchMonth option:selected").val(); //searchmonth		
+		var actionUrl = "/sms/send/detail/form?sendType=" + sendType + '&fseq=' + fseq +'&searchmonth=' +searchMonth;
+		cfnOpenModalPopup(actionUrl, "popupSmsSendDetail");
+	}
+
+	/*************************************************************************
+	* 엑셀다운로드 
+	**************************************************************************/		
+	// 엑셀다운로드
+	$('#btnExcel').on('click', function() {
+		gagaAgGrid.exportToExcel('일자별주문 목록', gridOptions);
+	});
+
+	
+	
+/*]]>*/
+</script>
+</html>

+ 1 - 0
src/main/webapp/ux/css/admin.ui.css

@@ -28,6 +28,7 @@ textarea {overflow:auto; resize:vertical; width:100%; margin:4px 0; vertical-ali
 .textareaR2 {min-height:60px; line-height:26px;}
 .textareaR3 {min-height:96px; line-height:26px;}
 .textareaR4 {min-height:134px; line-height:26px;}
+.textareaR15 {min-height:400px; line-height:26px;}
 .byteChk {line-height:20px; padding-left:20px; display:inline-block; vertical-align:middle;}
 select {margin:0 3px 1px 0; padding:3px 10px 3px 3px; color:inherit; border-radius:1px; vertical-align:middle;}
 select, input[type=text], input[type=file], input[type=date], input[type=password], textarea {border:1px solid #dbdbdb;}

+ 16 - 6
src/main/webapp/ux/js/admin.common.js

@@ -627,15 +627,25 @@ var cfnGetTextLength = function(obj, maxLen, dpLoc) {
 var cfnDateYearSetting = function(elemetId,targetYear) {
 	var currentYear = (new Date()).getFullYear();
 	var optionHtml = "";
-
-	optionHtml += '<option value="">[전체]</option>';
-	for (var year = currentYear-targetYear; year <= currentYear+targetYear; year++) {
-		optionHtml += '<option value="'+year+'">'+year+'년'+'</option>\n';
+ 
+	for (var year = currentYear-targetYear; year <= currentYear+targetYear; year++) {		
+		var SelectedText = year == currentYear? 'selected':' ';
+		optionHtml += '<option value="'+year+'"  '+SelectedText+' >'+year+'년'+'</option>\n';
+	}
+	$('#'+elemetId).append(optionHtml);
+};
+ 
+
+var cfnDateMonthSetting = function(elemetId) {
+	var currentMonth = (new Date()).getMonth()+1;  
+	var optionHtml = ""; 
+	for (var month = 1; month <= 12; month++) {
+		var fullMonth = month<10 ? "0"+month: month; 
+		var SelectedText = month == currentMonth? 'selected':' ';
+		optionHtml += '<option value="'+fullMonth+'" '+SelectedText+' >'+month+'월'+'</option>\n'; 
 	}
 	$('#'+elemetId).append(optionHtml);
 };
-
-
 
 /**
  * @type   : function