Przeglądaj źródła

Merge branch 'develop' into eskim

eskim 5 lat temu
rodzic
commit
3e166dbd10
23 zmienionych plików z 1131 dodań i 1036 usunięć
  1. 4 2
      style24.admin/src/main/java/com/style24/persistence/domain/Delivery.java
  2. 8 6
      style24.admin/src/main/java/com/style24/persistence/mybatis/shop/TsaDelivery.xml
  3. 526 523
      style24.admin/src/main/webapp/WEB-INF/views/board/NoticeForm.html
  4. 11 12
      style24.admin/src/main/webapp/WEB-INF/views/delivery/BanGoodsRegistForm.html
  5. 8 6
      style24.admin/src/main/webapp/WEB-INF/views/delivery/BangoodsListForm.html
  6. 61 0
      style24.front/src/main/java/com/style24/front/biz/dao/TsfFaqDao.java
  7. 9 36
      style24.front/src/main/java/com/style24/front/biz/dao/TsfNoticeDao.java
  8. 84 0
      style24.front/src/main/java/com/style24/front/biz/service/TsfFaqService.java
  9. 8 29
      style24.front/src/main/java/com/style24/front/biz/service/TsfNoticeService.java
  10. 155 0
      style24.front/src/main/java/com/style24/front/biz/web/TsfCallcenterController.java
  11. 38 0
      style24.front/src/main/java/com/style24/persistence/domain/Faq.java
  12. 11 8
      style24.front/src/main/java/com/style24/persistence/domain/Notice.java
  13. 93 0
      style24.front/src/main/java/com/style24/persistence/mybatis/TsfFaq.xml
  14. 11 207
      style24.front/src/main/java/com/style24/persistence/mybatis/TsfNotice.xml
  15. BIN
      style24.front/target/classes/com/style24/front/biz/dao/TsfFaqDao.class
  16. BIN
      style24.front/target/classes/com/style24/front/biz/dao/TsfNoticeDao.class
  17. BIN
      style24.front/target/classes/com/style24/front/biz/service/TsfFaqService.class
  18. BIN
      style24.front/target/classes/com/style24/front/biz/service/TsfNoticeService.class
  19. BIN
      style24.front/target/classes/com/style24/front/biz/web/TsfCallcenterController.class
  20. BIN
      style24.front/target/classes/com/style24/persistence/domain/Faq.class
  21. BIN
      style24.front/target/classes/com/style24/persistence/domain/Notice.class
  22. 93 0
      style24.front/target/classes/com/style24/persistence/mybatis/TsfFaq.xml
  23. 11 207
      style24.front/target/classes/com/style24/persistence/mybatis/TsfNotice.xml

+ 4 - 2
style24.admin/src/main/java/com/style24/persistence/domain/Delivery.java

@@ -36,7 +36,9 @@ public class Delivery extends TscBaseDomain {
 	private String GoodsStatNm;
 	private String supplyCompCd;
 	private String searchTxt;
-
+	private String colorCd;
+	private String sysImgNm;
+	
 	
 	/* 위로  작성  ('' ) ( '')*/
 	
@@ -156,7 +158,7 @@ public class Delivery extends TscBaseDomain {
 	private Integer chasu;
 	private String extmallNm;
 	private String productId;
-	private String colorCd;
+
 	private String recipTelno;
 	private String recipPhnno;
 	private String recipPostNo;

+ 8 - 6
style24.admin/src/main/java/com/style24/persistence/mybatis/shop/TsaDelivery.xml

@@ -265,10 +265,10 @@
 			, G.BRAND_CD
 			, B.BRAND_KNM
 			, DL.DELV_LOC_NM
-			, GI.IMG_TYPE
-			, GI.IMG_PATH1
+			, (SELECT MAX(SYS_IMG_NM) FROM TB_GOODS_IMG  WHERE GOODS_CD = DBG.GOODS_CD AND COLOR_CD = DBG.COLOR_CD AND DEFAULT_IMG_YN = 'Y' ) AS SYS_IMG_NM
 			, G.GOODS_NM
 			, DBG.GOODS_CD
+			, DBG.COLOR_CD			
 			, DBG.SIZE_CD
 			, FN_GET_CODE_NM('G008', G.GOODS_STAT) AS GOODS_STAT
 			, DBG.DELV_BAN_STDT 
@@ -278,7 +278,6 @@
 		INNER JOIN TB_DELIVERY_LOC DL   ON DBG.DELV_LOC_CD = DL.DELV_LOC_CD
 		INNER JOIN TB_GOODS        G    ON DBG.GOODS_CD = G.GOODS_CD
 		INNER JOIN TB_BRAND        B    ON G.BRAND_CD = B.BRAND_CD
-		LEFT OUTER JOIN TB_GOODS_IMG GI ON G.GOODS_CD = GI.GOODS_CD
 		WHERE 1=1
 		<if test='supplyCompCd != null and supplyCompCd != ""'>
 			AND G.SUPPLY_COMP_CD = #{supplyCompCd}
@@ -314,6 +313,7 @@
 			, UPD_DT = NOW()
 		WHERE DELV_BAN_GOODS_SQ = #{delvBanGoodsSq}
 		  AND GOODS_CD          = #{goodsCd}
+		  AND COLOR_CD          = #{colorCd}
 		  AND SIZE_CD           = #{sizeCd}
 	</update>
 
@@ -323,16 +323,16 @@
 		SELECT 
 		      G.BRAND_CD
 			, B.BRAND_KNM
-			, GI.IMG_PATH1
+			, (SELECT MAX(SYS_IMG_NM) FROM TB_GOODS_IMG  WHERE GOODS_CD = S.GOODS_CD AND COLOR_CD = S.OPT_CD1 AND DEFAULT_IMG_YN = 'Y' ) AS SYS_IMG_NM	
 			, G.GOODS_NM
 			, G.GOODS_CD
+			, S.OPT_CD1 AS COLOR_CD 
 			, S.OPT_CD2 AS SIZE_CD
 			, G.GOODS_STAT
 			, (SELECT CD_NM FROM TB_COMMON_CODE WHERE CD_GB = 'G008' AND CD =G.GOODS_STAT) AS GOODS_STAT_NM
 		FROM  TB_GOODS G
 		INNER JOIN TB_BRAND B  ON G.BRAND_CD = B.BRAND_CD
-		INNER JOIN TB_OPTION S ON G.GOODS_CD = S.GOODS_CD
-		LEFT OUTER JOIN TB_GOODS_IMG GI ON G.GOODS_CD = GI.GOODS_CD		
+		INNER JOIN TB_OPTION S ON G.GOODS_CD = S.GOODS_CD			
 		WHERE 1=1
 		<if test='supplyCompCd != null and supplyCompCd != ""'>
 			AND G.SUPPLY_COMP_CD = #{supplyCompCd}
@@ -370,6 +370,7 @@
 		INSERT INTO TB_DELIVERY_BAN_GOODS (
 			  DELV_LOC_CD
 			, GOODS_CD
+			, COLOR_CD
 			, SIZE_CD
 			, DELV_BAN_STDT
 			, DELV_BAN_EDDT
@@ -382,6 +383,7 @@
 		VALUES (
 			  #{delvLocCd}
 			, #{goodsCd}
+			, #{colorCd}
 			, #{sizeCd}
 			, replace(#{delvBanStdt},'-','')
 			, replace(#{delvBanEddt},'-','')

+ 526 - 523
style24.admin/src/main/webapp/WEB-INF/views/board/NoticeForm.html

@@ -1,523 +1,526 @@
-<!DOCTYPE html>
-<html lang="ko"
-	xmlns:th="http://www.thymeleaf.org">
-<!--
- *******************************************************************************
- * @source  : NoticeForm.html
- * @desc    : 공지사항관리 Page
- *============================================================================
- * STYLE24
- * Copyright(C) 2020 TSIT, All rights reserved.
- *============================================================================
- * VER  DATE         AUTHOR      DESCRIPTION
- * ===  ===========  ==========  =============================================
- * 1.0  2020.10.30   gagamel     최초 작성
- *******************************************************************************
- -->
-	<div id="main">
-		<!-- 메인타이틀 영역 -->
-		<div class="main-title">
-		</div>
-		<!-- //메인타이틀 영역 -->
-		
-		<!-- 메뉴 설명 -->
-		<div class="infoBox menu-desc">
-		</div>
-		<!-- //메뉴 설명 -->
-		
-		<!-- 검색조건 영역 -->
-		<div class="panelStyle">
-			<form id="searchForm" name="searchForm" action="#" th:action="@{'/board/notice/list'}" onsubmit="$('#btnSearch').trigger('click'); return false;">
-				<input type="hidden" name="noticeType" th:value="${noticeType}"/> <!-- 공지유형(10:사이트공지, 20:내부공지) -->
-				
-				<table class="frmStyle" aria-describedby="검색조건">
-					<colgroup>
-						<col width="10%"/>
-						<col width="23%"/>
-						<col width="10%"/>
-						<col width="23%"/>
-						<col width="10%"/>
-						<col width="24%"/>
-					</colgroup>
-					<tr>
-						<th>등록기간</th>
-						<td colspan="5" id="noticeTerms">
-						</td>
-					</tr>
-					<tr>
-						<th th:text="${noticeType == 'G047_10' ? '사이트' : '부서'}">수신자</th>
-						<td>
-							<select name="receiverId">
-								<option value="">[전체]</option>
-								<option th:if="${noticeReceiverList}" th:each="oneData, status : ${noticeReceiverList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
-							</select>
-						</td>
-						<th>공지제목</th>
-						<td>
-							<input name="noteicTitle" type="text" maxlength="200"/>
-						</td>
-						<th>사용여부</th>
-						<td>
-							<select name="useYn">
-								<option value="">[전체]</option>
-								<option value="Y">[Y] Yes</option>
-								<option value="N">[N] No</option>
-							</select>
-						</td>
-					</tr>
-				</table>
-				
-				<ul class="panelBar">
-					<li class="center">
-						<button type="button" class="btn btn-base btn-lg" id="btnSearch">조회</button>
-						<button type="button" class="btn btn-gray btn-lg" onclick="$('#searchForm')[0].reset();">초기화</button>
-					</li>
-				</ul>
-			</form>
-		</div>
-		<!-- 검색조건 영역 -->
-
-		<!-- 리스트 영역 -->
-		<div class="panelStyle">
-			<div id="gridList" style="width: 100%; height: 470px" class="ag-theme-balham"></div>
-		</div>
-		<!-- //리스트 영역 -->
-		
-		<!-- 등록/수정 -->
-		<div class="panelStyle">
-			<form id="detailForm" name="detailForm" action="#" th:action="@{'/board/notice/save'}">
-				<input type="hidden" name="noticeType" th:value="${noticeType}"/> <!-- 공지유형(10:사이트공지, 20:내부공지) -->
-				<input type="hidden" name="noticeStdt"/> <!-- 공지시작일자 -->
-				<input type="hidden" name="noticeEddt"/> <!-- 공지종료일자 -->
-				
-				<table class="frmStyle" aria-describedby="등록/수정 폼">
-					<colgroup>
-						<col style="width:10%;"/>
-						<col style="width:15%;"/>
-						<col style="width:10%;"/>
-						<col style="width:15%;"/>
-						<col style="width:10%;"/>
-						<col style="width:15%;"/>
-						<col style="width:10%;"/>
-						<col style="width:15%;"/>
-					</colgroup>
-					<tr>
-						<th>공지번호</th>
-						<td>
-							<input type="text" class="w100" name="noticeSq" placeholder="자동부여" readonly="readonly"/>
-						</td>
-						<th>긴급공지여부</th>
-						<td>
-							<label class="rdoBtn"><input type="radio" name="urgentYn" value="N" checked="checked">일반</label>
-							<label class="rdoBtn"><input type="radio" name="urgentYn" value="Y">긴급</label>
-						</td>
-						<th>사용여부</th>
-						<td>
-							<input type="hidden" name="useYn"/>
-							<label class="chkBox"><input type="checkbox" name="chkUseYn" checked="checked" value="Y"/>사용</label>
-						</td>
-					</tr>
-					<tr id="trNew">
-						<th>공지기간<i class="required" title="필수"></i></th>
-						<td colspan="5">
-							<input type="text" class="schDate w100" name="noticeStdt1" maxlength="10" th:value="${#calendars.format(#calendars.createNow(), 'yyyy-MM-dd')}"/>
-							~
-							<input type="text" class="schDate w100" name="noticeEddt1" maxlength="10" th:value="${#calendars.format(#calendars.createNow(), 'yyyy-MM-dd')}"/>
-						</td>
-					</tr>
-					<tr id="trDetail" style="display: none;">
-						<th>공지기간<i class="required" title="필수"></i></th>
-						<td>
-							<input type="text" class="schDate w100" name="noticeStdt2" maxlength="10"/>
-							~
-							<input type="text" class="schDate w100" name="noticeEddt2" maxlength="10"/>
-						</td>
-						<th>조회수</th>
-						<td>
-							<input type="text" class="w100 aR" name="readCnt" readonly="readonly"/>
-						</td>
-						<th>등록자/등록일</th>
-						<td>
-							<input type="text" class="w100" name="regNm" readonly="readonly"/>
-							/
-							<input type="text" class="w100" name="regDt" th:value="${#calendars.format(#calendars.createNow(), 'yyyy-MM-dd')}" readonly="readonly"/>
-						</td>
-					</tr>
-					<tr>
-						<th><span th:text="${noticeType == 'G047_10' ? '사이트' : '부서'}">수신자</span><i class="required" title="필수"></i></th>
-						<td colspan="5">
-							<label class="chkBox" th:if="${noticeReceiverList}" th:each="oneData, status : ${noticeReceiverList}">
-								<input type="checkbox" name="receiverIds" th:value="${oneData.cd}" th:text="${oneData.cdNm}"/>
-							</label>
-						</td>
-					</tr>
-					<tr>
-						<th>제목<i class="required" title="필수"></i></th>
-						<td colspan="5">
-							<input type="text" name="noticeTitle" required="required" data-valid-name="제목"/>
-						</td>
-					</tr>
-					<tr>
-						<th>공지내용<i class="required" title="필수"></i></th>
-						<td colspan="5">
-							<textarea class="textareaR4" name="noticeContent" id="noticeContent"></textarea>
-						</td>
-					</tr>
-					<tr>
-						<th>파일첨부</th>
-						<td colspan="5">
-							<div id="registeredFile"></div>
-							<div style="display: block">
-								<select name="fileCnt" id="fileCnt">
-									<th:block th:each="num: ${#numbers.sequence(1,10)}">
-										<option th:value="${num}" th:text="${num}"></option>
-									</th:block>
-								</select>* 파일 개수 선택(10개까지 가능)
-							</div>
-							<th:block th:each="num: ${#numbers.sequence(1,10)}">
-								<div>
-									<div class="uFile w500">
-										<input type="file" th:id="${'file' + num}" th:name="${'file' + num}" class="uFileInput w500"/>
-										<label th:for="${'file' + num}" class="uFileLabel">파일선택</label>
-										<input type="hidden" name="orgFileNms" th:id="${'orgFileNm' + num}"/>
-										<input type="hidden" name="sysFileNms" th:id="${'sysFileNm' + num}"/>
-									</div>
-									<br/>
-								</div>
-							</th:block>
-						</td>
-					</tr>
-				</table>
-			</form>
-			
-			<!-- 버튼 배치 영역 -->
-			<ul class="panelBar">
-				<li class="right">
-					<button type="button" class="btn btn-info btn-lg" id="btnNew">신규</button>
-					<button type="button" class="btn btn-success btn-lg" id="btnSave">저장</button>
-				</li>
-			</ul>
-			<!-- //버튼 배치 영역 -->
-		</div>
-		<!-- 등록/수정 -->
-	</div>
-
-<script type="text/javascript" src="/ux/plugins/summernote/summernote.js?v=2020103001"></script>
-<script type="text/javascript" src="/ux/plugins/gaga/gaga.summernote.js?v=2020103001"></script>
-<script th:inline="javascript">
-/*<![CDATA[*/
-	// 공지사항유형(10:사이트공지, 20:내부공지)
-	let noticeType = [[${noticeType}]];
-
-	let columnDefs = [
-		{headerName: "공지번호", field: "noticeSq", width: 90, cellClass: 'text-center'},
-		{
-			headerName: "긴급공지", field: "urgentYn", width:90, cellClass: 'text-center',
-			cellRenderer: function(params) { return params.value == 'Y' ? '긴급' : '일반'; }
-		},
-// 		{headerName: "사이트", field: "siteNm", width: 200, cellClass: 'text-center'},
-		{
-			headerName: "공지제목", field: "noticeTitle", width: 500,
-			cellRenderer: function(params) { return '<a href="javascript:void(0);">' + params.value + '</a>'; }
-		},
-		{
-			headerName: "파일", field: "fileCnt", width: 50, cellClass: 'text-center',
-			cellRenderer: function(params) { return params.value > 0 ? '<i class="fa fa-folder fa-lg"></i>' : ''; }
-		},
-		{headerName: "공지내용", field: "noticeContent", width: 500, hide: true },
-		{
-			headerName: "공지시작일", field: "noticeStdt", width:120, cellClass: 'text-center',
-			cellRenderer: function(params) { return gagaAgGrid.toDateFormat(params.value); }
-		},
-		{
-			headerName: "공지종료일", field: "noticeEddt", width:120, cellClass: 'text-center',
-			cellRenderer: function(params) { return gagaAgGrid.toDateFormat(params.value); }
-		},
-		{headerName: "조회수", field: "readCnt", width:90, cellClass: 'text-center'},
-		{headerName: "사용여부", field: "useYn", width:90, cellClass: 'text-center'},
-		{headerName: "등록자", field: "regNm", width:90, cellClass: 'text-center'},
-		{
-			headerName: "등록일자", field: "regDt", width:120, cellClass: 'text-center',
-			cellRenderer: function(params) { return gagaAgGrid.toDateFormat(params.value); }
-		}
-	];
-
-	let gridOptions = gagaAgGrid.getGridOptions(columnDefs);
-
-	// Cell click
-	gridOptions.onCellClicked = function(event) {
-		if (event.colDef.field != 'noticeTitle')
-			return;
-		
-		$('#trNew').hide();
-		$('#trDetail').show();
-
-		$('#detailForm input[name=noticeSq]').val(event.data.noticeSq);
-		$('#detailForm input[name=noticeType]').val(event.data.noticeType);
-
-		if (event.data.urgentYn == 'Y') {
-			$('#detailForm input:radio[name=urgentYn]').eq(1).trigger('click');
-		} else {
-			$('#detailForm input:radio[name=urgentYn]').eq(0).trigger('click');
-		}
-
-		if (event.data.useYn == 'Y') {
-			$('#detailForm input:checkbox[name=chkUseYn]').prop('checked', true);
-		} else {
-			$('#detailForm input:checkbox[name=chkUseYn]').prop('checked', false);
-		}
-		
-		$('#detailForm input[name=noticeStdt2]').val(event.data.noticeStdt.toDate("YYYYMMDD").format("YYYY-MM-DD"));
-		$('#detailForm input[name=noticeEddt2]').val(event.data.noticeEddt.toDate("YYYYMMDD").format("YYYY-MM-DD"));
-		$('#detailForm input[name=readCnt]').val(event.data.readCnt);
-		$('#detailForm input[name=regNm]').val(event.data.regNm);
-		$('#detailForm input[name=regDt]').val(event.data.regDt.toDate("YYYYMMDD").format("YYYY-MM-DD"));
-		$('#detailForm input[name=noticeTitle]').val(event.data.noticeTitle);
-
-		// 공지내용. Summernote에 값 세팅
-		gagaSn.setContents('#noticeContent', event.data.noticeContent);
-
-		// 수신자 목록
-		fnGetNoticeReceiverList(event.data.noticeSq);
-
-		// 파일 목록
-		fnGetNoticeFileList(event.data.noticeSq);
-	}
-
-	// 검색
-	$('#btnSearch').on('click', function() {
-		gagaAgGrid.fetch($('#searchForm').prop('action'), gridOptions, '#searchForm');
-	});
-	
-	// 수신자 목록 조회
-	var fnGetNoticeReceiverList = function(noticeSq) {
-		let actionUrl = '/board/notice/receiver/list/' + noticeSq;
-		if (noticeType == 'G047_20') {
-			actionUrl = '/renderer/avail/commonCode/list/G048'; // 부서
-		}
-		
-		$.getJSON(actionUrl
-			, function(result) {
-				// 수신자 체크박스 체크 제거
-				$('#detailForm input:checkbox[name=receiverIds]').prop('checked', false);
-	
-				// 체크박스 개수
-				var chkboxCnt = $('#detailForm input:checkbox[name=receiverIds]').length;
-	
-				// 데이터 개수
-				var dataCnt = result.length;
-	
-				if (dataCnt > 0) {
-					for (var i = 0; i < chkboxCnt; i++) {
-						for (var j = 0; j < dataCnt; j++){
-							var data = result[j].receiverId;
-							if ($('#detailForm input:checkbox[name=receiverIds]').eq(i).val() == data) {
-								$('#detailForm input:checkbox[name=receiverIds]').eq(i).prop('checked', true);
-							}
-						}
-					}
-				}
-			});
-	}
-	
-	// 파일 조회
-	var fnGetNoticeFileList = function(noticeSq) {
-		$.getJSON('/board/notice/file/list/' + noticeSq
-			, function(result) {
-				if (result.length == 0) {
-					$('#registeredFile').html('');
-				} else {
-					$.each(result, function(idx, item) {
-						var tag = '';
-						tag += '<span class="memAdd">';
-						tag += '	<a id="dnFile' + (idx + 1) + '" href="#" onclick="fnDownloadFile(' + (idx + 1) + ', \'' + item.sysFileNm + '\');">' + item.orgFileNm + '</a>\n';
-						tag += '	<button type="button" onclick="fnDeleteFile(this, ' + item.noticeSq + ', ' + item.seq + ', \'' + item.sysFileNm + '\');">삭제</button>\n';
-						tag += '</span>';
-						$('#registeredFile').prepend(tag);
-					});
-				}
-			});
-	}
-	
-	// 파일다운로드
-	var fnDownloadFile = function(idx, fileNm) {
-		$('#dnFile' + idx).attr({
-			href : _uploadDefaultUrl + '/board/' + fileNm,
-			target: '_blank'
-		}).get(0).click();
-	}
-	
-	// 첨부파일 삭제
-	var fnDeleteFile = function(obj, noticeSq, seq, sysFileNm) {
-		mcxDialog.confirm('정말 삭제하시겠습니까?', {
-			cancelBtnText: "취소",
-			sureBtnText: "확인",
-			sureBtnClick: function(){
-				var params = new Object();
-				params.noticeSq = noticeSq;
-				params.seq = seq;
-				params.sysFileNm = sysFileNm;
-
-				var jsonData = JSON.stringify(params);
-				gagajf.ajaxJsonSubmit('/board/notice/file/delete', jsonData, function() {
-					$(obj).parent().remove();
-				});
-			}
-		});
-	}
-
-	// 첨부파일 개수 선택시
-	$("#fileCnt").on("change", function() {
-		for (var i = 1; i <= 10; i++) {
-			$('#file' + i).parent().parent().show();
-		}
-
-		var fileCnt = $(this).val();
-		for (var i = 10; i > fileCnt; i--) {
-			$('#file' + i).parent().parent().hide();
-		}
-	});
-
-	// 파일첨부 선택 시
-	$('#file1').on('change', function() { fnChooseFile(this, 1); });
-	$('#file2').on('change', function() { fnChooseFile(this, 2); });
-	$('#file3').on('change', function() { fnChooseFile(this, 3); });
-	$('#file4').on('change', function() { fnChooseFile(this, 4); });
-	$('#file5').on('change', function() { fnChooseFile(this, 5); });
-	$('#file6').on('change', function() { fnChooseFile(this, 6); });
-	$('#file7').on('change', function() { fnChooseFile(this, 7); });
-	$('#file8').on('change', function() { fnChooseFile(this, 8); });
-	$('#file9').on('change', function() { fnChooseFile(this, 9); });
-	$('#file10').on('change', function() { fnChooseFile(this, 10); });
-
-	var fnChooseFile = function(obj, fileNo) {
-		// multiple 속성이 있으면 files에는 다수의 객체가 할당됨
-		var file = obj.files[0];
-
-		// 파일 업로드
-		gagajf.ajaxFileUpload('/common/file/upload?subDir=/board'
-				, file
-				, function(result) {
-					// 업로드한 파일명 설정
-					$('#orgFileNm' + fileNo).val(result.oldFileName);
-					$('#sysFileNm' + fileNo).val(result.newFileName);
-				}
-		);
-	}
-	
-	// 신규 버튼 클릭
-	$("#btnNew").on("click", function(){
-		$('#detailForm')[0].reset();
-
-		$('#trNew').show();
-		$('#trDetail').hide();
-
-		$('#detailForm input[name=noticeSq]').val('');
-		$('#detailForm input[name=noticeStdt]').val(_today);
-		$('#detailForm input[name=noticeEddt]').val(_today);
-	});
-	
-	// 저장
-	$("#btnSave").on("click", function() {
-		// 날짜 체크
-		if (gagajf.isNull($('#detailForm input[name=noticeSq]').val())) {
-			if (gagajf.isNull($('#detailForm input[name=noticeStdt1]').val())) {
-				mcxDialog.alertC('공지시작일자를 입력해 주세요.', {
-					sureBtnText: "확인",
-					sureBtnClick: function() {
-						$('#detailForm input[name=noticeStdt1]').focus();
-					}
-				});
-				return;
-			}
-
-			if (gagajf.isNull($('#detailForm input[name=noticeEddt1]').val())) {
-				mcxDialog.alertC('공지종료일자를 입력해 주세요.', {
-					sureBtnText: "확인",
-					sureBtnClick: function() {
-						$('#detailForm input[name=noticeEddt1]').focus();
-					}
-				});
-				return;
-			}
-
-			$('#detailForm input[name=noticeStdt]').val($('#detailForm input[name=noticeStdt1]').val());
-			$('#detailForm input[name=noticeEddt]').val($('#detailForm input[name=noticeEddt1]').val());
-		} else {
-			if (gagajf.isNull($('#detailForm input[name=noticeStdt2]').val())) {
-				mcxDialog.alertC('공지시작일자를 입력해 주세요.', {
-					sureBtnText: "확인",
-					sureBtnClick: function() {
-						$('#detailForm input[name=noticeStdt2]').focus();
-					}
-				});
-				return;
-			}
-
-			if (gagajf.isNull($('#detailForm input[name=noticeEddt2]').val())) {
-				mcxDialog.alertC('공지종료일자를 입력해 주세요.', {
-					sureBtnText: "확인",
-					sureBtnClick: function() {
-						$('#detailForm input[name=noticeEddt2]').focus();
-					}
-				});
-				return;
-			}
-
-			$('#detailForm input[name=noticeStdt]').val($('#detailForm input[name=noticeStdt2]').val());
-			$('#detailForm input[name=noticeEddt]').val($('#detailForm input[name=noticeEddt2]').val());
-		}
-
-		var stDate = $('#detailForm input[name=noticeStdt]').val().toDate('YYYY-MM-DD');
-		var edDate = $('#detailForm input[name=noticeEddt]').val().toDate('YYYY-MM-DD');
-
-		if (stDate > edDate) {
-			mcxDialog.alert("공지기간 종료일자는 시작일자 보다 클 수 없습니다.");
-			return;
-		}
-
-		// 수신자 선택
-		if ($('#detailForm input:checkbox[name=receiverIds]').is(":checked") != true) {
-			if (noticeType == 'G047_10') { // 사이트공지
-				mcxDialog.alert("사이트를 선택해 주세요.");
-				return;
-			} else if (noticeType == 'G047_20') { // 내부공지
-				mcxDialog.alert("부서를 선택해 주세요.");
-				return;
-			}
-		}
-
-		// validation
-		if (!gagajf.validation('#detailForm'))
-			return false;
-
-		$('#detailForm input[name=useYn]').val($('#detailForm input:checkbox[name=chkUseYn]').is(":checked") ? 'Y' : 'N');
-
-		mcxDialog.confirm('저장하시겠습니까?', {
-			cancelBtnText: "취소",
-			sureBtnText: "확인",
-			sureBtnClick: function(){
-				var jsonData = JSON.stringify($('#detailForm').serializeObject());
-				gagajf.ajaxJsonSubmit($('#detailForm').prop('action'), jsonData, function() {
-					$('#btnSearch').trigger('click');
-				});
-			}
-		});
-	});
-	
-	$(document).ready(function() {
-		cfnCreateCalendar('#noticeTerms', 'startDt', 'endDt');
-		
-		// Create a agGrid
-		gagaAgGrid.createGrid('gridList', gridOptions);
-		
-		// Create a summernote
-		let snOptions = gagaSn.getToolbarOptions('media');
-		gagaSn.createSummernote(snOptions, '#noticeContent');
-		
-		$("#fileCnt").trigger('change');
-	});
-/*]]>*/
-</script>
-
-</html>
+<!DOCTYPE html>
+<html lang="ko"
+	xmlns:th="http://www.thymeleaf.org">
+<!--
+ *******************************************************************************
+ * @source  : NoticeForm.html
+ * @desc    : 공지사항관리 Page
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2020 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2020.10.30   gagamel     최초 작성
+ *******************************************************************************
+ -->
+	<div id="main">
+		<!-- 메인타이틀 영역 -->
+		<div class="main-title">
+		</div>
+		<!-- //메인타이틀 영역 -->
+		
+		<!-- 메뉴 설명 -->
+		<div class="infoBox menu-desc">
+		</div>
+		<!-- //메뉴 설명 -->
+		
+		<!-- 검색조건 영역 -->
+		<div class="panelStyle">
+			<form id="searchForm" name="searchForm" action="#" th:action="@{'/board/notice/list'}" onsubmit="$('#btnSearch').trigger('click'); return false;">
+				<input type="hidden" name="noticeType" th:value="${noticeType}"/> <!-- 공지유형(10:사이트공지, 20:내부공지) -->
+				
+				<table class="frmStyle" aria-describedby="검색조건">
+					<colgroup>
+						<col width="10%"/>
+						<col width="23%"/>
+						<col width="10%"/>
+						<col width="23%"/>
+						<col width="10%"/>
+						<col width="24%"/>
+					</colgroup>
+					<tr>
+						<th>등록기간</th>
+						<td colspan="5" id="noticeTerms">
+						</td>
+					</tr>
+					<tr>
+						<th th:text="${noticeType == 'G047_10' ? '사이트' : '부서'}">수신자</th>
+						<td>
+							<select name="receiverId">
+								<option value="">[전체]</option>
+								<option th:if="${noticeReceiverList}" th:each="oneData, status : ${noticeReceiverList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
+							</select>
+						</td>
+						<th>공지제목</th>
+						<td>
+							<input name="noteicTitle" type="text" maxlength="200"/>
+						</td>
+						<th>사용여부</th>
+						<td>
+							<select name="useYn">
+								<option value="">[전체]</option>
+								<option value="Y">[Y] Yes</option>
+								<option value="N">[N] No</option>
+							</select>
+						</td>
+					</tr>
+				</table>
+				
+				<ul class="panelBar">
+					<li class="center">
+						<button type="button" class="btn btn-base btn-lg" id="btnSearch">조회</button>
+						<button type="button" class="btn btn-gray btn-lg" onclick="$('#searchForm')[0].reset();">초기화</button>
+					</li>
+				</ul>
+			</form>
+		</div>
+		<!-- 검색조건 영역 -->
+
+		<!-- 리스트 영역 -->
+		<div class="panelStyle">
+			<div id="gridList" style="width: 100%; height: 470px" class="ag-theme-balham"></div>
+		</div>
+		<!-- //리스트 영역 -->
+		
+		<!-- 등록/수정 -->
+		<div class="panelStyle">
+			<form id="detailForm" name="detailForm" action="#" th:action="@{'/board/notice/save'}">
+				<input type="hidden" name="noticeType" th:value="${noticeType}"/> <!-- 공지유형(10:사이트공지, 20:내부공지) -->
+				<input type="hidden" name="noticeStdt"/> <!-- 공지시작일자 -->
+				<input type="hidden" name="noticeEddt"/> <!-- 공지종료일자 -->
+				
+				<table class="frmStyle" aria-describedby="등록/수정 폼">
+					<colgroup>
+						<col style="width:10%;"/>
+						<col style="width:15%;"/>
+						<col style="width:10%;"/>
+						<col style="width:15%;"/>
+						<col style="width:10%;"/>
+						<col style="width:15%;"/>
+						<col style="width:10%;"/>
+						<col style="width:15%;"/>
+					</colgroup>
+					<tr>
+						<th>공지번호</th>
+						<td>
+							<input type="text" class="w100" name="noticeSq" placeholder="자동부여" readonly="readonly"/>
+						</td>
+						<th>긴급공지여부</th>
+						<td>
+							<label class="rdoBtn"><input type="radio" name="urgentYn" value="N" checked="checked">일반</label>
+							<label class="rdoBtn"><input type="radio" name="urgentYn" value="Y">긴급</label>
+						</td>
+						<th>사용여부</th>
+						<td>
+							<input type="hidden" name="useYn"/>
+							<label class="chkBox"><input type="checkbox" name="chkUseYn" checked="checked" value="Y"/>사용</label>
+						</td>
+					</tr>
+					<tr id="trNew">
+						<th>공지기간<i class="required" title="필수"></i></th>
+						<td colspan="5">
+							<input type="text" class="schDate w100" name="noticeStdt1" maxlength="10" th:value="${#calendars.format(#calendars.createNow(), 'yyyy-MM-dd')}"/>
+							~
+							<input type="text" class="schDate w100" name="noticeEddt1" maxlength="10" th:value="${#calendars.format(#calendars.createNow(), 'yyyy-MM-dd')}"/>
+						</td>
+					</tr>
+					<tr id="trDetail" style="display: none;">
+						<th>공지기간<i class="required" title="필수"></i></th>
+						<td>
+							<input type="text" class="schDate w100" name="noticeStdt2" maxlength="10"/>
+							~
+							<input type="text" class="schDate w100" name="noticeEddt2" maxlength="10"/>
+						</td>
+						<th>조회수</th>
+						<td>
+							<input type="text" class="w100 aR" name="readCnt" readonly="readonly"/>
+						</td>
+						<th>등록자/등록일</th>
+						<td>
+							<input type="text" class="w100" name="regNm" readonly="readonly"/>
+							/
+							<input type="text" class="w100" name="regDt" th:value="${#calendars.format(#calendars.createNow(), 'yyyy-MM-dd')}" readonly="readonly"/>
+						</td>
+					</tr>
+					<tr>
+						<th><span th:text="${noticeType == 'G047_10' ? '사이트' : '부서'}">수신자</span><i class="required" title="필수"></i></th>
+						<td colspan="5">
+							<label class="chkBox" th:if="${noticeReceiverList}" th:each="oneData, status : ${noticeReceiverList}">
+								<input type="checkbox" name="receiverIds" th:value="${oneData.cd}" th:text="${oneData.cdNm}"/>
+							</label>
+						</td>
+					</tr>
+					<tr>
+						<th>제목<i class="required" title="필수"></i></th>
+						<td colspan="5">
+							<input type="text" name="noticeTitle" required="required" data-valid-name="제목"/>
+						</td>
+					</tr>
+					<tr>
+						<th>공지내용<i class="required" title="필수"></i></th>
+						<td colspan="5">
+							<textarea class="textareaR4" name="noticeContent" id="noticeContent"></textarea>
+						</td>
+					</tr>
+					<tr>
+						<th>파일첨부</th>
+						<td colspan="5">
+							<div id="registeredFile"></div>
+							<div style="display: block">
+								<select name="fileCnt" id="fileCnt">
+									<th:block th:each="num: ${#numbers.sequence(1,10)}">
+										<option th:value="${num}" th:text="${num}"></option>
+									</th:block>
+								</select>* 파일 개수 선택(10개까지 가능)
+							</div>
+							<th:block th:each="num: ${#numbers.sequence(1,10)}">
+								<div>
+									<div class="uFile w500">
+										<input type="file" th:id="${'file' + num}" th:name="${'file' + num}" class="uFileInput w500"/>
+										<label th:for="${'file' + num}" class="uFileLabel">파일선택</label>
+										<input type="hidden" name="orgFileNms" th:id="${'orgFileNm' + num}"/>
+										<input type="hidden" name="sysFileNms" th:id="${'sysFileNm' + num}"/>
+									</div>
+									<br/>
+								</div>
+							</th:block>
+						</td>
+					</tr>
+				</table>
+			</form>
+			
+			<!-- 버튼 배치 영역 -->
+			<ul class="panelBar">
+				<li class="right">
+					<button type="button" class="btn btn-info btn-lg" id="btnNew">신규</button>
+					<button type="button" class="btn btn-success btn-lg" id="btnSave">저장</button>
+				</li>
+			</ul>
+			<!-- //버튼 배치 영역 -->
+		</div>
+		<!-- 등록/수정 -->
+	</div>
+
+<script type="text/javascript" src="/ux/plugins/summernote/summernote.js?v=2020103001"></script>
+<script type="text/javascript" src="/ux/plugins/gaga/gaga.summernote.js?v=2020103001"></script>
+<script th:inline="javascript">
+/*<![CDATA[*/
+	// 공지사항유형(10:사이트공지, 20:내부공지)
+	let noticeType = [[${noticeType}]];
+
+	let columnDefs = [
+		{headerName: "공지번호", field: "noticeSq", width: 90, cellClass: 'text-center'},
+		{
+			headerName: "긴급공지", field: "urgentYn", width:90, cellClass: 'text-center',
+			cellRenderer: function(params) { return params.value == 'Y' ? '긴급' : '일반'; }
+		},
+// 		{headerName: "사이트", field: "siteNm", width: 200, cellClass: 'text-center'},
+		{
+			headerName: "공지제목", field: "noticeTitle", width: 500,
+			cellRenderer: function(params) { return '<a href="javascript:void(0);">' + params.value + '</a>'; }
+		},
+		{
+			headerName: "파일", field: "fileCnt", width: 50, cellClass: 'text-center',
+			cellRenderer: function(params) { return params.value > 0 ? '<i class="fa fa-folder fa-lg"></i>' : ''; }
+		},
+		{headerName: "공지내용", field: "noticeContent", width: 500, hide: true },
+		{
+			headerName: "공지시작일", field: "noticeStdt", width:120, cellClass: 'text-center',
+			cellRenderer: function(params) { return gagaAgGrid.toDateFormat(params.value); }
+		},
+		{
+			headerName: "공지종료일", field: "noticeEddt", width:120, cellClass: 'text-center',
+			cellRenderer: function(params) { return gagaAgGrid.toDateFormat(params.value); }
+		},
+		{headerName: "조회수", field: "readCnt", width:90, cellClass: 'text-center'},
+		{headerName: "사용여부", field: "useYn", width:90, cellClass: 'text-center'},
+		{headerName: "등록자", field: "regNm", width:90, cellClass: 'text-center'},
+		{
+			headerName: "등록일자", field: "regDt", width:120, cellClass: 'text-center',
+			cellRenderer: function(params) { return gagaAgGrid.toDateFormat(params.value); }
+		}
+	];
+
+	let gridOptions = gagaAgGrid.getGridOptions(columnDefs);
+
+	// Cell click
+	gridOptions.onCellClicked = function(event) {
+		if (event.colDef.field != 'noticeTitle')
+			return;
+		
+		$('#trNew').hide();
+		$('#trDetail').show();
+
+		$('#detailForm input[name=noticeSq]').val(event.data.noticeSq);
+		$('#detailForm input[name=noticeType]').val(event.data.noticeType);
+
+		if (event.data.urgentYn == 'Y') {
+			$('#detailForm input:radio[name=urgentYn]').eq(1).trigger('click');
+		} else {
+			$('#detailForm input:radio[name=urgentYn]').eq(0).trigger('click');
+		}
+
+		if (event.data.useYn == 'Y') {
+			$('#detailForm input:checkbox[name=chkUseYn]').prop('checked', true);
+			$("#detailForm input:checkbox[name=chkUseYn]").parent().addClass('checked');
+		} else {
+			$('#detailForm input:checkbox[name=chkUseYn]').prop('checked', false);
+			$("#detailForm input:checkbox[name=chkUseYn]").parent().removeClass('checked');
+		}
+		
+		$('#detailForm input[name=noticeStdt2]').val(event.data.noticeStdt.toDate("YYYYMMDD").format("YYYY-MM-DD"));
+		$('#detailForm input[name=noticeEddt2]').val(event.data.noticeEddt.toDate("YYYYMMDD").format("YYYY-MM-DD"));
+		$('#detailForm input[name=readCnt]').val(event.data.readCnt);
+		$('#detailForm input[name=regNm]').val(event.data.regNm);
+		$('#detailForm input[name=regDt]').val(event.data.regDt.toDate("YYYYMMDD").format("YYYY-MM-DD"));
+		$('#detailForm input[name=noticeTitle]').val(event.data.noticeTitle);
+
+		// 공지내용. Summernote에 값 세팅
+		gagaSn.setContents('#noticeContent', event.data.noticeContent);
+
+		// 수신자 목록
+		fnGetNoticeReceiverList(event.data.noticeSq);
+
+		// 파일 목록
+		fnGetNoticeFileList(event.data.noticeSq);
+	}
+
+	// 검색
+	$('#btnSearch').on('click', function() {
+		gagaAgGrid.fetch($('#searchForm').prop('action'), gridOptions, '#searchForm');
+	});
+	
+	// 수신자 목록 조회
+	var fnGetNoticeReceiverList = function(noticeSq) {
+		let actionUrl = '/board/notice/receiver/list/' + noticeSq;
+		if (noticeType == 'G047_20') {
+			actionUrl = '/renderer/avail/commonCode/list/G048'; // 부서
+		}
+		
+		$.getJSON(actionUrl
+			, function(result) {
+				// 수신자 체크박스 체크 제거
+				$('#detailForm input:checkbox[name=receiverIds]').prop('checked', false);
+	
+				// 체크박스 개수
+				var chkboxCnt = $('#detailForm input:checkbox[name=receiverIds]').length;
+	
+				// 데이터 개수
+				var dataCnt = result.length;
+	
+				if (dataCnt > 0) {
+					for (var i = 0; i < chkboxCnt; i++) {
+						for (var j = 0; j < dataCnt; j++){
+							var data = result[j].receiverId;
+							if ($('#detailForm input:checkbox[name=receiverIds]').eq(i).val() == data) {
+								$('#detailForm input:checkbox[name=receiverIds]').eq(i).prop('checked', true);
+								$("#detailForm input:checkbox[name=receiverIds]").parent().addClass('checked');
+							}
+						}
+					}
+				}
+			});
+	}
+	
+	// 파일 조회
+	var fnGetNoticeFileList = function(noticeSq) {
+		$.getJSON('/board/notice/file/list/' + noticeSq
+			, function(result) {
+				if (result.length == 0) {
+					$('#registeredFile').html('');
+				} else {
+					$.each(result, function(idx, item) {
+						var tag = '';
+						tag += '<span class="memAdd">';
+						tag += '	<a id="dnFile' + (idx + 1) + '" href="#" onclick="fnDownloadFile(' + (idx + 1) + ', \'' + item.sysFileNm + '\');">' + item.orgFileNm + '</a>\n';
+						tag += '	<button type="button" onclick="fnDeleteFile(this, ' + item.noticeSq + ', ' + item.seq + ', \'' + item.sysFileNm + '\');">삭제</button>\n';
+						tag += '</span>';
+						$('#registeredFile').prepend(tag);
+					});
+				}
+			});
+	}
+	
+	// 파일다운로드
+	var fnDownloadFile = function(idx, fileNm) {
+		$('#dnFile' + idx).attr({
+			href : _uploadDefaultUrl + '/board/' + fileNm,
+			target: '_blank'
+		}).get(0).click();
+	}
+	
+	// 첨부파일 삭제
+	var fnDeleteFile = function(obj, noticeSq, seq, sysFileNm) {
+		mcxDialog.confirm('정말 삭제하시겠습니까?', {
+			cancelBtnText: "취소",
+			sureBtnText: "확인",
+			sureBtnClick: function(){
+				var params = new Object();
+				params.noticeSq = noticeSq;
+				params.seq = seq;
+				params.sysFileNm = sysFileNm;
+
+				var jsonData = JSON.stringify(params);
+				gagajf.ajaxJsonSubmit('/board/notice/file/delete', jsonData, function() {
+					$(obj).parent().remove();
+				});
+			}
+		});
+	}
+
+	// 첨부파일 개수 선택시
+	$("#fileCnt").on("change", function() {
+		for (var i = 1; i <= 10; i++) {
+			$('#file' + i).parent().parent().show();
+		}
+
+		var fileCnt = $(this).val();
+		for (var i = 10; i > fileCnt; i--) {
+			$('#file' + i).parent().parent().hide();
+		}
+	});
+
+	// 파일첨부 선택 시
+	$('#file1').on('change', function() { fnChooseFile(this, 1); });
+	$('#file2').on('change', function() { fnChooseFile(this, 2); });
+	$('#file3').on('change', function() { fnChooseFile(this, 3); });
+	$('#file4').on('change', function() { fnChooseFile(this, 4); });
+	$('#file5').on('change', function() { fnChooseFile(this, 5); });
+	$('#file6').on('change', function() { fnChooseFile(this, 6); });
+	$('#file7').on('change', function() { fnChooseFile(this, 7); });
+	$('#file8').on('change', function() { fnChooseFile(this, 8); });
+	$('#file9').on('change', function() { fnChooseFile(this, 9); });
+	$('#file10').on('change', function() { fnChooseFile(this, 10); });
+
+	var fnChooseFile = function(obj, fileNo) {
+		// multiple 속성이 있으면 files에는 다수의 객체가 할당됨
+		var file = obj.files[0];
+
+		// 파일 업로드
+		gagajf.ajaxFileUpload('/common/file/upload?subDir=/board'
+				, file
+				, function(result) {
+					// 업로드한 파일명 설정
+					$('#orgFileNm' + fileNo).val(result.oldFileName);
+					$('#sysFileNm' + fileNo).val(result.newFileName);
+				}
+		);
+	}
+	
+	// 신규 버튼 클릭
+	$("#btnNew").on("click", function(){
+		$('#detailForm')[0].reset();
+
+		$('#trNew').show();
+		$('#trDetail').hide();
+
+		$('#detailForm input[name=noticeSq]').val('');
+		$('#detailForm input[name=noticeStdt]').val(_today);
+		$('#detailForm input[name=noticeEddt]').val(_today);
+	});
+	
+	// 저장
+	$("#btnSave").on("click", function() {
+		// 날짜 체크
+		if (gagajf.isNull($('#detailForm input[name=noticeSq]').val())) {
+			if (gagajf.isNull($('#detailForm input[name=noticeStdt1]').val())) {
+				mcxDialog.alertC('공지시작일자를 입력해 주세요.', {
+					sureBtnText: "확인",
+					sureBtnClick: function() {
+						$('#detailForm input[name=noticeStdt1]').focus();
+					}
+				});
+				return;
+			}
+
+			if (gagajf.isNull($('#detailForm input[name=noticeEddt1]').val())) {
+				mcxDialog.alertC('공지종료일자를 입력해 주세요.', {
+					sureBtnText: "확인",
+					sureBtnClick: function() {
+						$('#detailForm input[name=noticeEddt1]').focus();
+					}
+				});
+				return;
+			}
+
+			$('#detailForm input[name=noticeStdt]').val($('#detailForm input[name=noticeStdt1]').val());
+			$('#detailForm input[name=noticeEddt]').val($('#detailForm input[name=noticeEddt1]').val());
+		} else {
+			if (gagajf.isNull($('#detailForm input[name=noticeStdt2]').val())) {
+				mcxDialog.alertC('공지시작일자를 입력해 주세요.', {
+					sureBtnText: "확인",
+					sureBtnClick: function() {
+						$('#detailForm input[name=noticeStdt2]').focus();
+					}
+				});
+				return;
+			}
+
+			if (gagajf.isNull($('#detailForm input[name=noticeEddt2]').val())) {
+				mcxDialog.alertC('공지종료일자를 입력해 주세요.', {
+					sureBtnText: "확인",
+					sureBtnClick: function() {
+						$('#detailForm input[name=noticeEddt2]').focus();
+					}
+				});
+				return;
+			}
+
+			$('#detailForm input[name=noticeStdt]').val($('#detailForm input[name=noticeStdt2]').val());
+			$('#detailForm input[name=noticeEddt]').val($('#detailForm input[name=noticeEddt2]').val());
+		}
+
+		var stDate = $('#detailForm input[name=noticeStdt]').val().toDate('YYYY-MM-DD');
+		var edDate = $('#detailForm input[name=noticeEddt]').val().toDate('YYYY-MM-DD');
+
+		if (stDate > edDate) {
+			mcxDialog.alert("공지기간 종료일자는 시작일자 보다 클 수 없습니다.");
+			return;
+		}
+
+		// 수신자 선택
+		if ($('#detailForm input:checkbox[name=receiverIds]').is(":checked") != true) {
+			if (noticeType == 'G047_10') { // 사이트공지
+				mcxDialog.alert("사이트를 선택해 주세요.");
+				return;
+			} else if (noticeType == 'G047_20') { // 내부공지
+				mcxDialog.alert("부서를 선택해 주세요.");
+				return;
+			}
+		}
+
+		// validation
+		if (!gagajf.validation('#detailForm'))
+			return false;
+
+		$('#detailForm input[name=useYn]').val($('#detailForm input:checkbox[name=chkUseYn]').is(":checked") ? 'Y' : 'N');
+
+		mcxDialog.confirm('저장하시겠습니까?', {
+			cancelBtnText: "취소",
+			sureBtnText: "확인",
+			sureBtnClick: function(){
+				var jsonData = JSON.stringify($('#detailForm').serializeObject());
+				gagajf.ajaxJsonSubmit($('#detailForm').prop('action'), jsonData, function() {
+					$('#btnSearch').trigger('click');
+				});
+			}
+		});
+	});
+	
+	$(document).ready(function() {
+		cfnCreateCalendar('#noticeTerms', 'startDt', 'endDt');
+		
+		// Create a agGrid
+		gagaAgGrid.createGrid('gridList', gridOptions);
+		
+		// Create a summernote
+		let snOptions = gagaSn.getToolbarOptions('media');
+		gagaSn.createSummernote(snOptions, '#noticeContent');
+		
+		$("#fileCnt").trigger('change');
+	});
+/*]]>*/
+</script>
+
+</html>

+ 11 - 12
style24.admin/src/main/webapp/WEB-INF/views/delivery/BanGoodsRegistForm.html

@@ -12,6 +12,7 @@
  * VER  DATE         AUTHOR      DESCRIPTION
  * ===  ===========  ==========  ==================================
  * 1.0  2020.11.11   moon        최초 작성
+ * 1.1  2020.11.23   moon        이미지관련 수정 
  *******************************************************************************
  -->
 	<div class="modalPopup" data-width="1200">
@@ -117,18 +118,15 @@
 	var columnBanDefs = [
 		{width: 42, minWidth: 42, cellClass: 'text-center', headerCheckboxSelection: true, checkboxSelection: true, filter: false},
 		{headerName: "브랜드",	field: "brandKnm", width: 150, minWidth: 80, cellClass: 'text-center'},
-		{headerName: "이미지",	field: "imgPath1", width: 130, height: 80, cellClass: 'text-center'
+		{headerName: "이미지",	field: "sysImgNm", width: 130, height: 80, cellClass: 'text-center'
 			,cellRenderer: function(params) {
-				if (params.data.imgType == "A"){
-					return '<img width="60" src="'+ params.value + '" alt=""/>';
-				}else{
-					return '<img width="60" src="'+ params.value + '" alt=""/>';
-				}
+				return '<img width="60" src="'+ _goodsUrl+ "/" +params.value + '" alt=""/>';
 			}
 		},
-		{headerName: "상품명",	field: "goodsNm", width: 330, minWidth: 100},
-		{headerName: "상품코드",	field: "goodsCd", width: 150, minWidth: 100, cellClass: 'text-center'},
-		{headerName: "사이즈",	field: "sizeCd", width: 150, minWidth: 100, cellClass: 'text-center'},
+		{headerName: "상품명",	field: "goodsNm",     width: 330, minWidth: 100},
+		{headerName: "상품코드",	field: "goodsCd",     width: 150, minWidth: 100, cellClass: 'text-center'},
+		{headerName: "컬러",	    field: "colorCd",     width: 100, minWidth: 100, cellClass: 'text-center'},
+		{headerName: "사이즈",	field: "sizeCd",      width: 100, minWidth: 100, cellClass: 'text-center'},
 		{headerName: "상품상태",	field: "goodsStatNm", width: 150, minWidth: 100, cellClass: 'text-center'},
 	];
 
@@ -190,11 +188,12 @@
 	            $.each(gridData, function(idx, item) {
 	                var param = new Object;
 
-	                param.goodsCd = item.goodsCd;
-	                param.sizeCd = item.sizeCd;
+	                param.goodsCd     = item.goodsCd;
+	                param.colorCd     = item.colorCd;
+	                param.sizeCd      = item.sizeCd;
 	                param.delvBanStdt = delvBanStdt;
 	                param.delvBanEddt = delvBanEddt;
-	                param.delvLocCd = delvLocCd;
+	                param.delvLocCd   = delvLocCd;
 
 	                createData.push(param);
 	            });

+ 8 - 6
style24.admin/src/main/webapp/WEB-INF/views/delivery/BangoodsListForm.html

@@ -138,13 +138,11 @@
 		{headerName: "삭제",					field: "delYn",			width: 50,	cellClass: 'text-center'},
 		{headerName: "브랜드",				field: "brandKnm",		width: 150,	cellClass: 'text-center'},
 		{headerName: "출고처명",				field: "delvLocNm",		width: 150,	cellClass: 'text-center'},
-		{headerName: "이미지",				field: "imgPath1",		width: 100,	cellClass: 'text-center', 
+		{headerName: "이미지",				field: "sysImgNm",		width: 100,	cellClass: 'text-center', 
 			cellRenderer: function(params) {
-				if (params.data.imgType == "A"){
-					return '<img width="60" src="'+ params.value + '" alt=""/>';
-				}else{
-					return '<img width="60" src="'+ params.value + '" alt=""/>';
-				}
+
+				return '<img width="60" src="'+ _goodsUrl+ "/" +params.value + '" alt=""/>';
+
 			}
 		},
 		{headerName: "상품명",				field: "goodsNm",		width: 150,	cellClass: 'text-center'},
@@ -159,6 +157,7 @@
 				}
 			}
 		},
+		{headerName: "컬러",		    field: "colorCd",		width: 80,	cellClass: 'text-center'},
 		{headerName: "사이즈",		field: "sizeCd",		width: 80,	cellClass: 'text-center'},
 		{headerName: "상품상태",		field: "goodsStat",		width: 80,	cellClass: 'text-center'},
 		{headerName: "출고금지시작일자",	field: "delvBanStdt",	width: 150,	cellClass: 'text-center', cellRenderer: function (params) { return gagaAgGrid.toDateFormat(params.value); }},
@@ -167,6 +166,8 @@
 	];
 
 	var gridOptions = gagaAgGrid.getGridOptions(columnDefs);
+	gridOptions.rowSelection = 'multiple';
+	
 	//gridOptions.rowHeight = 60;
 	/*************************************************************************
 	*  조회 버튼 클릭 시
@@ -281,6 +282,7 @@
 
 	                param.delvBanGoodsSq = item.delvBanGoodsSq;
 	                param.goodsCd = item.goodsCd;
+	                param.colorCd = item.colorCd;
 	                param.sizeCd = item.sizeCd;
 
 	                createData.push(param);

+ 61 - 0
style24.front/src/main/java/com/style24/front/biz/dao/TsfFaqDao.java

@@ -0,0 +1,61 @@
+package com.style24.front.biz.dao;
+
+import java.util.Collection;
+
+import com.style24.core.support.annotation.ShopDs;
+import com.style24.persistence.domain.Faq;
+
+/**
+ * FAQ Dao
+ * 
+ * @author gagamel
+ * @since 2020. 12. 23
+ */
+@ShopDs
+public interface TsfFaqDao {
+
+	/**
+	 * FAQ 자주 묻는 질문 목록 (10개)
+	 * @param siteCd - 사이트코드
+	 * @return
+	 * @author gagamel
+	 * @since 2020. 12. 23
+	 */
+	Collection<Faq> getFaqLikesList(String siteCd);
+
+	/**
+	 * FAQ 총건수
+	 * @param faq - FAQ 정보
+	 * @return
+	 * @author gagamel
+	 * @since 2020. 12. 23
+	 */
+	int getFaqTotalCount(Faq faq);
+
+	/**
+	 * FAQ 목록
+	 * @param faq - FAQ 정보
+	 * @return
+	 * @author gagamel
+	 * @since 2020. 12. 23
+	 */
+	Collection<Faq> getFaqList(Faq faq);
+
+	/**
+	 * FAQ 조회수 Update
+	 * @param faqSq - FAQ일련번호
+	 * @author gagamel
+	 * @since 2020. 12. 23
+	 */
+	void updateFaqReadCount(Integer faqSq);
+
+	/**
+	 * FAQ 상세
+	 * @param faqSq - FAQ일련번호
+	 * @return
+	 * @author gagamel
+	 * @since 2020. 12. 23
+	 */
+	Faq getFaq(Integer faqSq);
+
+}

+ 9 - 36
style24.front/src/main/java/com/style24/front/biz/dao/TsfNoticeDao.java

@@ -9,7 +9,7 @@ import com.style24.persistence.domain.Notice;
  * 공지사항 Dao
  * 
  * @author gagamel
- * @since 2020. 11. 3
+ * @since 2020. 12. 23
  */
 @ShopDs
 public interface TsfNoticeDao {
@@ -19,7 +19,7 @@ public interface TsfNoticeDao {
 	 * @param notice - 공지사항 정보
 	 * @return 총건수
 	 * @author gagamel
-	 * @date 2020. 11. 3
+	 * @date 2020. 12. 23
 	 */
 	int getNoticeTotalCount(Notice notice);
 
@@ -28,52 +28,25 @@ public interface TsfNoticeDao {
 	 * @param notice - 공지사항 정보
 	 * @return
 	 * @author gagamel
-	 * @date 2020. 11. 3
+	 * @date 2020. 12. 23
 	 */
 	Collection<Notice> getNoticeList(Notice notice);
 
 	/**
-	 * 공지사항 상세
-	 * @param notice - 공지사항 정보
-	 * @return
-	 * @author gagamel
-	 * @date 2020. 11. 3
-	 */
-	Notice getNoticeDetail(Notice notice);
-
-	/**
-	 * 공지사항 이전글
-	 * @param notice - 공지사항 정보
-	 * @return
-	 * @author gagamel
-	 * @date 2020. 11. 3
-	 */
-	Notice getPreviousNotice(Notice notice);
-
-	/**
-	 * 공지사항 다음글
+	 * 공지사항 파일 목록
 	 * @param notice - 공지사항 정보
 	 * @return
 	 * @author gagamel
-	 * @date 2020. 11. 3
+	 * @date 2020. 12. 23
 	 */
-	Notice getNextNotice(Notice notice);
+	Collection<Notice> getNoticeFileList(Notice notice);
 
 	/**
 	 * 공지사항 조회수 Update
-	 * @param notice
+	 * @param noticeSq - 공지사항일련번호
 	 * @author gagamel
-	 * @date 2020. 11. 3
+	 * @date 2020. 12. 23
 	 */
-	void updateNoticeReadCount(Notice notice);
-
-	/**
-	 * 공지사항 파일 목록
-	 * @param notice - 공지사항 정보
-	 * @return
-	 * @author gagamel
-	 * @date 2020. 2. 24
-	 */
-	Collection<Notice> getNoticeFileList(Notice notice);
+	void updateNoticeReadCount(Integer noticeSq);
 
 }

+ 84 - 0
style24.front/src/main/java/com/style24/front/biz/service/TsfFaqService.java

@@ -0,0 +1,84 @@
+package com.style24.front.biz.service;
+
+import java.util.Collection;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import com.style24.front.biz.dao.TsfFaqDao;
+import com.style24.persistence.domain.Faq;
+
+import lombok.extern.slf4j.Slf4j;
+
+/**
+ * FAQ Service
+ * 
+ * @author gagamel
+ * @since 2020. 12. 23
+ */
+@Service
+@Slf4j
+public class TsfFaqService {
+
+	@Autowired
+	private TsfFaqDao faqDao;
+
+	/**
+	 * FAQ 자주 묻는 질문 목록 (10개)
+	 * @param siteCd - 사이트코드
+	 * @return
+	 * @author gagamel
+	 * @since 2020. 12. 23
+	 */
+	public Collection<Faq> getFaqLikesList(String siteCd) {
+		return faqDao.getFaqLikesList(siteCd);
+	}
+
+	/**
+	 * FAQ 총건수
+	 * @param faq - FAQ 정보
+	 * @return
+	 * @author gagamel
+	 * @since 2020. 12. 23
+	 */
+	public int getFaqTotalCount(Faq faq) {
+		return faqDao.getFaqTotalCount(faq);
+	}
+
+	/**
+	 * FAQ 목록
+	 * @param faq - FAQ 정보
+	 * @return
+	 * @author gagamel
+	 * @since 2020. 12. 23
+	 */
+	public Collection<Faq> getFaqList(Faq faq) {
+		return faqDao.getFaqList(faq);
+	}
+
+	/**
+	 * FAQ 조회수 Update
+	 * @param faqSq - FAQ일련번호
+	 * @return
+	 * @author gagamel
+	 * @since 2020. 12. 23
+	 */
+	@Transactional("shopTxnManager")
+	public void updateFaqReadCount(Integer faqSq) {
+		faqDao.updateFaqReadCount(faqSq);
+	}
+
+	/**
+	 * FAQ 상세
+	 * @param faqSq - FAQ일련번호
+	 * @return
+	 * @author gagamel
+	 * @since 2020. 12. 23
+	 */
+	public Faq getFaq(Integer faqSq) {
+		this.updateFaqReadCount(faqSq);
+		return faqDao.getFaq(faqSq);
+	}
+
+}

+ 8 - 29
style24.front/src/main/java/com/style24/front/biz/service/TsfNoticeService.java

@@ -58,45 +58,24 @@ public class TsfNoticeService {
 	}
 
 	/**
-	 * 공지사항 상세
+	 * 공지사항 첨부파일 목록
 	 * @param notice - 공지사항 정보
 	 * @return
 	 * @author gagamel
 	 * @date 2020. 11. 3
 	 */
-	public Notice getNoticeDetail(Notice notice) {
-		// 공지사항 조회건수 증가
-		noticeDao.updateNoticeReadCount(notice);
-
-		// 공지사항 상세 조회
-		Notice noticeDetail = noticeDao.getNoticeDetail(notice);
-
-		// 공지사항 이전글 조회
-		Notice prevNotice = noticeDao.getPreviousNotice(notice);
-		if (prevNotice != null) {
-			noticeDetail.setPrevNoticeSq(prevNotice.getPrevNoticeSq());
-			noticeDetail.setPrevNoticeTitle(prevNotice.getPrevNoticeTitle());
-		}
-
-		// 공지사항 다음글 조회
-		Notice nextNotice = noticeDao.getNextNotice(notice);
-		if (nextNotice != null) {
-			noticeDetail.setNextNoticeSq(nextNotice.getNextNoticeSq());
-			noticeDetail.setNextNoticeTitle(nextNotice.getNextNoticeTitle());
-		}
-
-		return noticeDetail;
+	public Collection<Notice> getNoticeFileList(Notice notice) {
+		return noticeDao.getNoticeFileList(notice);
 	}
 
 	/**
-	 * 공지사항 첨부파일 목록
-	 * @param notice - 공지사항 정보
-	 * @return
+	 * 공지사항 조회수 Update
+	 * @param noticeSq - 공지사항일련번호
 	 * @author gagamel
-	 * @date 2020. 11. 3
+	 * @date 2020. 12. 23
 	 */
-	public Collection<Notice> getNoticeFileList(Notice notice) {
-		return noticeDao.getNoticeFileList(notice);
+	public void updateNoticeReadCount(Integer noticeSq) {
+		noticeDao.updateNoticeReadCount(noticeSq);
 	}
 
 }

+ 155 - 0
style24.front/src/main/java/com/style24/front/biz/web/TsfCallcenterController.java

@@ -0,0 +1,155 @@
+package com.style24.front.biz.web;
+
+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.PathVariable;
+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.ResponseBody;
+import org.springframework.web.servlet.ModelAndView;
+
+import com.style24.core.support.env.TscConstants;
+import com.style24.front.biz.service.TsfFaqService;
+import com.style24.front.biz.service.TsfNoticeService;
+import com.style24.front.support.controller.TsfBaseController;
+import com.style24.persistence.TsfPageRequest;
+import com.style24.persistence.domain.Faq;
+import com.style24.persistence.domain.Notice;
+
+import lombok.extern.slf4j.Slf4j;
+
+import com.gagaframework.web.parameter.GagaMap;
+import com.gagaframework.web.rest.server.GagaResponse;
+
+/**
+ * 고객센터 Controller
+ * 
+ * @author gagamel
+ * @since 2020. 12. 23
+ */
+@Controller
+@RequestMapping("/callcenter")
+@Slf4j
+public class TsfCallcenterController extends TsfBaseController {
+
+	@Autowired
+	private TsfFaqService faqService;
+
+	@Autowired
+	private TsfNoticeService noticeService;
+
+	/**
+	 * FAQ
+	 * @return
+	 * @author gagamel
+	 * @since 2020. 12. 23
+	 */
+	@GetMapping("/faq/form")
+	public ModelAndView faqForm() {
+		ModelAndView mav = new ModelAndView();
+
+		// FAQ TOP 10 목록
+		mav.addObject("faqTop10List", faqService.getFaqLikesList(TscConstants.Site.STYLE24.value()));
+
+		mav.setViewName(super.getDeviceViewName("callcenter/FaqForm"));
+
+		return mav;
+	}
+
+	/**
+	 * FAQ 목록
+	 * @param faq - FAQ 정보
+	 * @return
+	 * @author gagamel
+	 * @since 2020. 12. 23
+	 */
+	@PostMapping("/faq/list")
+	@ResponseBody
+	public GagaMap getFaqList(@RequestBody Faq faq) {
+		faq.setSiteCd(TscConstants.Site.STYLE24.value());
+
+		GagaMap result = new GagaMap();
+
+		TsfPageRequest pageable = new TsfPageRequest((faq.getPageNo() > 0 ? faq.getPageNo() - 1 : 0), faq.getPageSize(), faq.getPageUnit());
+		pageable.setTotalCount(faqService.getFaqTotalCount(faq));
+		faq.setPageable(pageable);
+		log.debug("pageable: {}", pageable);
+
+		result.set("paging", faq);
+		result.set("dataList", faqService.getFaqList(faq));
+
+		return result;
+	}
+
+	/**
+	 * FAQ 조회수 갱신
+	 * @param faqSq - FAQ일련번호
+	 * @return
+	 * @author gagamel
+	 * @since 2020. 12. 23
+	 */
+	@PostMapping("/faq/readcount/update/{faqSq}")
+	@ResponseBody
+	public GagaResponse updateFaqReadCount(@PathVariable Integer faqSq) {
+		faqService.updateFaqReadCount(faqSq);
+		return super.ok();
+	}
+
+	/**
+	 * 공지사항
+	 * @return
+	 * @author gagamel
+	 * @since 2020. 12. 23
+	 */
+	@GetMapping("/notice/form")
+	public ModelAndView noticeForm() {
+		ModelAndView mav = new ModelAndView();
+		mav.setViewName(super.getDeviceViewName("callcenter/NoticeForm"));
+		return mav;
+	}
+
+	/**
+	 * 공지사항 목록
+	 * @param notice - 공지사항 정보
+	 * @return
+	 * @author gagamel
+	 * @since 2020. 12. 23
+	 */
+	@PostMapping("/notice/list")
+	@ResponseBody
+	public GagaMap getNoticeList(@RequestBody Notice notice) {
+		notice.setSiteCd(TscConstants.Site.STYLE24.value());
+
+		GagaMap result = new GagaMap();
+
+		TsfPageRequest pageable = new TsfPageRequest((notice.getPageNo() > 0 ? notice.getPageNo() - 1 : 0), notice.getPageSize(), notice.getPageUnit());
+		pageable.setTotalCount(noticeService.getNoticeTotalCount(notice));
+		notice.setPageable(pageable);
+		log.debug("pageable: {}", pageable);
+
+		result.set("paging", notice);
+		result.set("dataList", noticeService.getNoticeList(notice));
+
+		// 긴급(중요) 공지사항 목록
+		result.set("urgentList", noticeService.getUrgentNoticeList(notice));
+
+		return result;
+	}
+
+	/**
+	 * 공지사항 조회수 갱신
+	 * @param noticeSq - 공지사항일련번호
+	 * @return
+	 * @author gagamel
+	 * @since 2020. 12. 23
+	 */
+	@PostMapping("/notice/readcount/update/{noticeSq}")
+	@ResponseBody
+	public GagaResponse updateNoticeReadCount(@PathVariable Integer noticeSq) {
+		noticeService.updateNoticeReadCount(noticeSq);
+		return super.ok();
+	}
+
+}

+ 38 - 0
style24.front/src/main/java/com/style24/persistence/domain/Faq.java

@@ -0,0 +1,38 @@
+package com.style24.persistence.domain;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.style24.persistence.TscBaseDomain;
+import com.style24.persistence.TsfPageRequest;
+
+import lombok.Data;
+
+/**
+ * FAQ Domain
+ *
+ * @author gagamel
+ * @since 2020. 12. 23
+ */
+@SuppressWarnings("serial")
+@Data
+public class Faq extends TscBaseDomain {
+
+	private Integer faqSq;		// FAQ일련번호
+	private String siteCd;		// 사이트코드
+	private String faqType;		// FAQ유형
+	private String faqTypeNm;	// FAQ유형명
+	private String question;	// 질문
+	private String answer;		// 답변
+	private int readCnt;		// 조회수
+
+	// 검색조건
+	private String searchTxt;	//검색어
+
+	// Pagination
+	@JsonInclude(JsonInclude.Include.NON_EMPTY)
+	private TsfPageRequest pageable;
+
+	private int pageNo = 1;
+	private int pageSize = 10;
+	private int pageUnit = 10;
+
+}

+ 11 - 8
style24.front/src/main/java/com/style24/persistence/domain/Notice.java

@@ -1,6 +1,8 @@
 package com.style24.persistence.domain;
 
+import com.fasterxml.jackson.annotation.JsonInclude;
 import com.style24.persistence.TscBaseDomain;
+import com.style24.persistence.TsfPageRequest;
 
 import lombok.Data;
 
@@ -8,7 +10,7 @@ import lombok.Data;
  * 공지사항 Domain
  * 
  * @author gagamel
- * @since 2020. 10. 30
+ * @since 2020. 12. 23
  */
 @SuppressWarnings("serial")
 @Data
@@ -27,17 +29,18 @@ public class Notice extends TscBaseDomain {
 
 	// 검색용
 	private String siteCd;			// 사이트코드
-	private String searchGb;		// 검색구분(ALL: 전체, TITLE: 제목, CONTENT: 내용)
-	private String searchTxt;		// 검색텍스트
-
-	private Integer prevNoticeSq;	// 이전 공지사항일련번호
-	private String prevNoticeTitle;	// 이전 공지제목
-	private Integer nextNoticeSq;	// 다음 공지사항일련번호
-	private String nextNoticeTitle;	// 다음 공지제목
 
 	// 첨부파일
 	private int seq;				// 일련번호
 	private String orgFileNm;		// 원본파일명
 	private String sysFileNm;		// 시스템파일명
 
+	// Pagination
+	@JsonInclude(JsonInclude.Include.NON_EMPTY)
+	private TsfPageRequest pageable;
+
+	private int pageNo = 1;
+	private int pageSize = 10;
+	private int pageUnit = 10;
+
 }

+ 93 - 0
style24.front/src/main/java/com/style24/persistence/mybatis/TsfFaq.xml

@@ -0,0 +1,93 @@
+<?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.front.biz.dao.TsfFaqDao">
+
+	<!-- Paging -->
+	<sql id="pageSql">
+		LIMIT #{pageable.startRow}, #{pageable.pageSize}
+	</sql>
+	<!--// Paging -->
+	
+	<!-- FAQ 자주 묻는 질문 목록 (10개) -->
+	<select id="getFaqLikesList" parameterType="String" resultType="Faq">
+		/* TsfFaq.getFaqLikesList */
+		SELECT FAQ_SQ   /*FAQ일련번호*/
+		     , SITE_CD  /*사이트코드(공통코드G000)*/
+		     , FAQ_TYPE /*FAQ유형(공통코드G046)*/
+		     , QUESTION /*질문*/
+		     , ANSWER   /*답변*/
+		     , DISP_ORD /*표시순서*/
+		FROM   TB_FAQ
+		WHERE  SITE_CD = #{siteCd}
+		AND    USE_YN = 'Y'
+		ORDER  BY DISP_ORD
+		LIMIT 10
+	</select>
+	
+	<!-- FAQ 총건수 -->
+	<select id="getFaqTotalCount" parameterType="Faq" resultType="int">
+		/* TsfFaq.getFaqTotalCount */
+		SELECT COUNT(*) AS CNT
+		FROM   TB_FAQ
+		WHERE  SITE_CD = #{siteCd}
+		<if test='faqType != null and faqType !=""'>
+		AND    FAQ_TYPE = #{faqType}
+		</if>
+		AND    USE_YN = 'Y'
+		<if test="searchTxt != null and searchTxt !=''">
+		AND    (
+		        LOWER(QUESTION) LIKE CONCAT('%',LOWER(#{searchTxt}),'%')
+		        -- OR
+		        -- LOWER(ANSWER) LIKE CONCAT('%',LOWER(#{searchTxt}),'%')
+		       )
+		</if>
+	</select>
+	
+	<!-- FAQ 목록 -->
+	<select id="getFaqList" parameterType="Faq" resultType="Faq">
+		/* TsfFaq.getFaqList */
+		SELECT FAQ_SQ   /*FAQ일련번호*/
+		     , SITE_CD  /*사이트코드(공통코드G000)*/
+		     , FAQ_TYPE /*FAQ유형(공통코드G046)*/
+		     , QUESTION /*질문*/
+		     , ANSWER   /*답변*/
+		     , DISP_ORD /*표시순서*/
+		FROM   TB_FAQ
+		WHERE  SITE_CD = #{siteCd}
+		<if test='faqType != null and faqType !=""'>
+		AND    FAQ_TYPE = #{faqType}
+		</if>
+		AND    USE_YN = 'Y'
+		<if test="searchTxt != null and searchTxt !=''">
+		AND    (
+		        LOWER(QUESTION) LIKE CONCAT('%',LOWER(#{searchTxt}),'%')
+		        -- OR
+		        -- LOWER(ANSWER) LIKE CONCAT('%',LOWER(#{searchTxt}),'%')
+		       )
+		</if>
+		ORDER  BY REG_DT DESC
+		<include refid="pageSql"></include>
+	</select>
+
+	<!-- FAQ 조회수 Update -->
+	<update id="updateFaqReadCount" parameterType="Integer">
+		/* TsfFaq.updateFaqReadCount */
+		UPDATE TB_FAQ
+		SET    READ_CNT = READ_CNT + 1
+		WHERE  FAQ_SQ = #{faqSq}
+	</update>
+
+	<!-- FAQ 상세 -->
+	<select id="getFaq" parameterType="Integer" resultType="Faq">
+		/* TsfFaq.getFaq */
+		SELECT FAQ_SQ                                         /*FAQ일련번호*/
+		     , FAQ_TYPE                                       /*FAQ유형*/
+		     , FN_GET_CODE_NM('G046',FAQ_TYPE) AS FAQ_TYPE_NM /*FAQ유형명*/
+		     , QUESTION                                       /*질문*/
+		     , ANSWER                                         /*답변*/
+		FROM   TB_FAQ
+		WHERE  FAQ_SQ = #{faqSq}
+		AND    USE_YN = 'Y'
+	</select>
+
+</mapper>

+ 11 - 207
style24.front/src/main/java/com/style24/persistence/mybatis/TsfNotice.xml

@@ -12,35 +12,9 @@
 		/* TsfNotice.getNoticeTotalCount */
 		SELECT COUNT(*)
 		FROM   TB_NOTICE A
-		WHERE  NOTICE_TYPE = #{noticeType}
+		WHERE  NOTICE_TYPE = 'G047_10' /*사이트공지*/
 		AND    USE_YN = 'Y'
-		AND    NOW() BETWEEN NOTICE_STDT AND NOTICE_EDDT
-		<choose>
-		    <when test="urgentYn == null or urgentYn == ''">
-		        <if test="searchTxt != null and searchTxt != ''">
-		            <choose>
-		                <when test="searchGb == 'TITLE'">
-		AND    NOTICE_TITLE LIKE CONCAT('%',TRIM(#{searchTxt}),'%')
-		                </when>
-		                <when test="searchGb == 'CONTENT'">
-		AND    NOTICE_CONTENT LIKE CONCAT('%',TRIM(#{searchTxt}),'%')
-		                </when>
-		                <otherwise>
-		AND    (
-		        NOTICE_TITLE LIKE CONCAT('%',TRIM(#{searchTxt}),'%')
-		        OR
-		        NOTICE_CONTENT LIKE CONCAT('%',TRIM(#{searchTxt}),'%')
-		       )
-		                </otherwise>
-		            </choose>
-		        </if>
-		    </when>
-		    <otherwise>
-		        <if test='urgentYn == "Y"'> <!-- 최상단 공지글인 경우 -->
-		AND    URGENT_YN = 'Y'
-		        </if>
-		    </otherwise>
-		</choose>
+		AND    CURRENT_DATE() BETWEEN NOTICE_STDT AND NOTICE_EDDT
 		AND    EXISTS (SELECT 1
 		               FROM   TB_NOTICE_RECEIVER
 		               WHERE  NOTICE_SQ = A.NOTICE_SQ
@@ -51,44 +25,19 @@
 	<!-- 공지사항 목록 -->
 	<select id="getNoticeList" parameterType="Notice" resultType="Notice">
 		/* TsfNotice.getNoticeList */
-		SELECT NOTICE_SQ                              /*공지사항일련번호*/
-		     , NOTICE_TITLE                           /*공지제목*/
-		     , READ_CNT                               /*조회수*/
-		     , DATE_FORMAT(REG_DT,'%Y%m%d') AS REG_DT /*등록일자*/
+		SELECT NOTICE_SQ                                  /*공지사항일련번호*/
+		     , NOTICE_TITLE                               /*공지제목*/
+		     , NOTICE_CONTENT                             /*공지내용*/
+		     , READ_CNT                                   /*조회수*/
+		     , DATE_FORMAT(REG_DT,'%Y.%m.%d') AS REG_DT   /*등록일자*/
 		     , (SELECT COUNT(1)
 		        FROM   TB_NOTICE_FILE
 		        WHERE  NOTICE_SQ = A.NOTICE_SQ
-		       )                          AS FILE_CNT /*첨부파일건수*/
+		       )                              AS FILE_CNT /*첨부파일건수*/
 		FROM   TB_NOTICE A
-		WHERE  NOTICE_TYPE = #{noticeType}
+		WHERE  NOTICE_TYPE = 'G047_10' /*사이트공지*/
 		AND    USE_YN =  'Y'
-		AND    NOW() BETWEEN NOTICE_STDT AND NOTICE_EDDT
-		<choose>
-		    <when test="urgentYn == null or urgentYn == ''">
-		        <if test="searchTxt != null and searchTxt != ''">
-		            <choose>
-		                <when test="searchGb == 'TITLE'">
-		AND    NOTICE_TITLE LIKE CONCAT('%',TRIM(#{searchTxt}),'%')
-		                </when>
-		                <when test="searchGb == 'CONTENT'">
-		AND    NOTICE_CONTENT LIKE CONCAT('%',TRIM(#{searchTxt}),'%')
-		                </when>
-		                <otherwise>
-		AND    (
-		        NOTICE_TITLE LIKE CONCAT('%',TRIM(#{searchTxt}),'%')
-		        OR
-		        NOTICE_CONTENT LIKE CONCAT('%',TRIM(#{searchTxt}),'%')
-		       )
-		                </otherwise>
-		            </choose>
-		        </if>
-		    </when>
-		    <otherwise>
-		        <if test='urgentYn == "Y"'> <!-- 최상단 공지글인 경우 -->
-		AND    URGENT_YN = 'Y'
-		        </if>
-		    </otherwise>
-		</choose>
+		AND    CURRENT_DATE() BETWEEN NOTICE_STDT AND NOTICE_EDDT
 		AND    EXISTS (SELECT 1
 		               FROM   TB_NOTICE_RECEIVER
 		               WHERE  NOTICE_SQ = A.NOTICE_SQ
@@ -98,151 +47,6 @@
 		<include refid="pageSql"></include>
 	</select>
 
-	<!-- 공지사항 상세 -->
-	<select id="getNoticeDetail" parameterType="Notice" resultType="Notice">
-		/* TsfNotice.getNoticeDetail */
-		SELECT NOTICE_SQ      /*공지사항일련번호*/
-		     , NOTICE_TITLE   /*공지사항제목*/
-		     , NOTICE_CONTENT /*공지사항내용*/
-		     , READ_CNT       /*조회수*/
-		     , REG_DT         /*등록일시*/
-		FROM   (
-		        SELECT NOTICE_SQ
-		             , NOTICE_TITLE
-		             , NOTICE_CONTENT
-		             , READ_CNT
-		             , DATE_FORMAT(REG_DT,'%Y.%m.%d') AS REG_DT
-		        FROM   TB_NOTICE A
-		        WHERE  NOTICE_TYPE = #{noticeType}
-		        AND    USE_YN =  'Y'
-		        AND    NOW() BETWEEN NOTICE_STDT AND NOTICE_EDDT
-		        AND    NOTICE_SQ = #{noticeSq}
-		        <choose>
-		            <when test="urgentYn == null or urgentYn == ''">
-		                <if test="searchTxt != null and searchTxt != ''">
-		                    <choose>
-		                        <when test="searchGb == 'TITLE'">
-		        AND    NOTICE_TITLE LIKE CONCAT('%',TRIM(#{searchTxt}),'%')
-		                        </when>
-		                        <when test="searchGb == 'CONTENT'">
-		        AND    NOTICE_CONTENT LIKE CONCAT('%',TRIM(#{searchTxt}),'%')
-		                        </when>
-		                        <otherwise>
-		        AND    (
-		                NOTICE_TITLE LIKE CONCAT('%',TRIM(#{searchTxt}),'%')
-		                OR
-		                NOTICE_CONTENT LIKE CONCAT('%',TRIM(#{searchTxt}),'%')
-		               )
-		                        </otherwise>
-		                    </choose>
-		                </if>
-		            </when>
-		            <otherwise>
-		                <if test='urgentYn == "Y"'> <!-- 최상단 공지글인 경우 -->
-		        AND    URGENT_YN = 'Y'
-		                </if>
-		            </otherwise>
-		        </choose>
-		        AND    EXISTS (SELECT 1
-		                       FROM   TB_NOTICE_RECEIVER
-		                       WHERE  NOTICE_SQ = A.NOTICE_SQ
-		                       AND    RECEIVER_ID = #{siteCd}
-		                      )
-		       )
-	</select>
-	
-	<!-- 공지사항 이전글 조회 -->
-	<select id="getPreviousNotice" parameterType="Notice" resultType="Notice">
-		/* TsfNotice.getPreviousNotice */
-		SELECT NOTICE_SQ    AS PREV_NOTICE_SQ
-		     , NOTICE_TITLE AS PREV_NOTICE_TITLE
-		FROM   TB_NOTICE
-		WHERE  NOTICE_SQ = (SELECT MAX(NOTICE_SQ)
-		                    FROM   TB_NOTICE N
-		                    WHERE  NOTICE_SQ <![CDATA[<]]> #{noticeSq}
-		                    AND    NOTICE_TYPE = #{noticeType}
-		                    AND    USE_YN = 'Y'
-		                    AND    NOW() BETWEEN NOTICE_STDT AND NOTICE_EDDT
-		                    <choose>
-		                        <when test="urgentYn == null or urgentYn == ''">
-		                            <if test="searchTxt != null and searchTxt != ''">
-		                                <choose>
-		                                    <when test="searchGb == 'TITLE'">
-		                    AND    NOTICE_TITLE LIKE CONCAT('%',TRIM(#{searchTxt}),'%')
-		                                    </when>
-		                                    <when test="searchGb == 'CONTENT'">
-		                    AND    NOTICE_CONTENT LIKE CONCAT('%',TRIM(#{searchTxt}),'%')
-		                                    </when>
-		                                    <otherwise>
-		                    AND    (
-		                            NOTICE_TITLE LIKE CONCAT('%',TRIM(#{searchTxt}),'%')
-		                            OR
-		                            NOTICE_CONTENT LIKE CONCAT('%',TRIM(#{searchTxt}),'%')
-		                           )
-		                                    </otherwise>
-		                                </choose>
-		                            </if>
-		                        </when>
-		                        <otherwise>
-		                            <if test='urgentYn == "Y"'> <!-- 최상단 공지글인 경우 -->
-		                    AND    URGENT_YN = 'Y'
-		                            </if>
-		                        </otherwise>
-		                    </choose>
-		                    AND    EXISTS (SELECT 1
-		                                   FROM   TB_NOTICE_RECEIVER
-		                                   WHERE  NOTICE_SQ = N.NOTICE_SQ
-		                                   AND    RECEIVER_ID = #{siteCd}
-		                                  )
-		                   )
-	</select>
-
-	<!-- 공지사항 다음글 조회 -->
-	<select id="getNextNotice" parameterType="Notice" resultType="Notice">
-		/* TsfNotice.getNextNotice */
-		SELECT NOTICE_SQ    AS NEXT_NOTICE_SQ
-		     , NOTICE_TITLE AS NEXT_NOTICE_TITLE
-		FROM   TB_NOTICE
-		WHERE  NOTICE_SQ = (SELECT MIN(NOTICE_SQ)
-		                    FROM   TB_NOTICE N
-		                    WHERE  NOTICE_SQ <![CDATA[>]]> #{noticeSq}
-		                    AND    NOTICE_TYPE = #{noticeType}
-		                    AND    USE_YN = 'Y'
-		                    AND    NOW() BETWEEN NOTICE_STDT AND NOTICE_EDDT
-		                    <choose>
-		                        <when test="urgentYn == null or urgentYn == ''">
-		                            <if test="searchTxt != null and searchTxt != ''">
-		                                <choose>
-		                                    <when test="searchGb == 'TITLE'">
-		                    AND    NOTICE_TITLE LIKE CONCAT('%',TRIM(#{searchTxt}),'%')
-		                                    </when>
-		                                    <when test="searchGb == 'CONTENT'">
-		                    AND    NOTICE_CONTENT LIKE CONCAT('%',TRIM(#{searchTxt}),'%')
-		                                    </when>
-		                                    <otherwise>
-		                    AND    (
-		                            NOTICE_TITLE LIKE CONCAT('%',TRIM(#{searchTxt}),'%')
-		                            OR
-		                            NOTICE_CONTENT LIKE CONCAT('%',TRIM(#{searchTxt}),'%')
-		                           )
-		                                    </otherwise>
-		                                </choose>
-		                            </if>
-		                        </when>
-		                        <otherwise>
-		                            <if test='urgentYn == "Y"'> <!-- 최상단 공지글인 경우 -->
-		                    AND    URGENT_YN = 'Y'
-		                            </if>
-		                        </otherwise>
-		                    </choose>
-		                    AND    EXISTS (SELECT 1
-		                                   FROM   TB_NOTICE_RECEIVER
-		                                   WHERE  NOTICE_SQ = N.NOTICE_SQ
-		                                   AND    RECEIVER_ID = #{siteCd}
-		                                  )
-		                   )
-	</select>
-
 	<!-- 공지사항 파일 목록 -->
 	<select id="getNoticeFileList" parameterType="Integer" resultType="Notice">
 		/* TsfNotice.getNoticeFileList */
@@ -255,7 +59,7 @@
 	</select>
 	
 	<!-- 공지사항  조회건수 Update -->
-	<update id="updateNoticeReadCount" parameterType="Notice">
+	<update id="updateNoticeReadCount" parameterType="Integer">
 		/* TsfNotice.updateNoticeReadCount */
 		UPDATE TB_NOTICE
 		SET    READ_CNT = READ_CNT + 1

BIN
style24.front/target/classes/com/style24/front/biz/dao/TsfFaqDao.class


BIN
style24.front/target/classes/com/style24/front/biz/dao/TsfNoticeDao.class


BIN
style24.front/target/classes/com/style24/front/biz/service/TsfFaqService.class


BIN
style24.front/target/classes/com/style24/front/biz/service/TsfNoticeService.class


BIN
style24.front/target/classes/com/style24/front/biz/web/TsfCallcenterController.class


BIN
style24.front/target/classes/com/style24/persistence/domain/Faq.class


BIN
style24.front/target/classes/com/style24/persistence/domain/Notice.class


+ 93 - 0
style24.front/target/classes/com/style24/persistence/mybatis/TsfFaq.xml

@@ -0,0 +1,93 @@
+<?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.front.biz.dao.TsfFaqDao">
+
+	<!-- Paging -->
+	<sql id="pageSql">
+		LIMIT #{pageable.startRow}, #{pageable.pageSize}
+	</sql>
+	<!--// Paging -->
+	
+	<!-- FAQ 자주 묻는 질문 목록 (10개) -->
+	<select id="getFaqLikesList" parameterType="String" resultType="Faq">
+		/* TsfFaq.getFaqLikesList */
+		SELECT FAQ_SQ   /*FAQ일련번호*/
+		     , SITE_CD  /*사이트코드(공통코드G000)*/
+		     , FAQ_TYPE /*FAQ유형(공통코드G046)*/
+		     , QUESTION /*질문*/
+		     , ANSWER   /*답변*/
+		     , DISP_ORD /*표시순서*/
+		FROM   TB_FAQ
+		WHERE  SITE_CD = #{siteCd}
+		AND    USE_YN = 'Y'
+		ORDER  BY DISP_ORD
+		LIMIT 10
+	</select>
+	
+	<!-- FAQ 총건수 -->
+	<select id="getFaqTotalCount" parameterType="Faq" resultType="int">
+		/* TsfFaq.getFaqTotalCount */
+		SELECT COUNT(*) AS CNT
+		FROM   TB_FAQ
+		WHERE  SITE_CD = #{siteCd}
+		<if test='faqType != null and faqType !=""'>
+		AND    FAQ_TYPE = #{faqType}
+		</if>
+		AND    USE_YN = 'Y'
+		<if test="searchTxt != null and searchTxt !=''">
+		AND    (
+		        LOWER(QUESTION) LIKE CONCAT('%',LOWER(#{searchTxt}),'%')
+		        -- OR
+		        -- LOWER(ANSWER) LIKE CONCAT('%',LOWER(#{searchTxt}),'%')
+		       )
+		</if>
+	</select>
+	
+	<!-- FAQ 목록 -->
+	<select id="getFaqList" parameterType="Faq" resultType="Faq">
+		/* TsfFaq.getFaqList */
+		SELECT FAQ_SQ   /*FAQ일련번호*/
+		     , SITE_CD  /*사이트코드(공통코드G000)*/
+		     , FAQ_TYPE /*FAQ유형(공통코드G046)*/
+		     , QUESTION /*질문*/
+		     , ANSWER   /*답변*/
+		     , DISP_ORD /*표시순서*/
+		FROM   TB_FAQ
+		WHERE  SITE_CD = #{siteCd}
+		<if test='faqType != null and faqType !=""'>
+		AND    FAQ_TYPE = #{faqType}
+		</if>
+		AND    USE_YN = 'Y'
+		<if test="searchTxt != null and searchTxt !=''">
+		AND    (
+		        LOWER(QUESTION) LIKE CONCAT('%',LOWER(#{searchTxt}),'%')
+		        -- OR
+		        -- LOWER(ANSWER) LIKE CONCAT('%',LOWER(#{searchTxt}),'%')
+		       )
+		</if>
+		ORDER  BY REG_DT DESC
+		<include refid="pageSql"></include>
+	</select>
+
+	<!-- FAQ 조회수 Update -->
+	<update id="updateFaqReadCount" parameterType="Integer">
+		/* TsfFaq.updateFaqReadCount */
+		UPDATE TB_FAQ
+		SET    READ_CNT = READ_CNT + 1
+		WHERE  FAQ_SQ = #{faqSq}
+	</update>
+
+	<!-- FAQ 상세 -->
+	<select id="getFaq" parameterType="Integer" resultType="Faq">
+		/* TsfFaq.getFaq */
+		SELECT FAQ_SQ                                         /*FAQ일련번호*/
+		     , FAQ_TYPE                                       /*FAQ유형*/
+		     , FN_GET_CODE_NM('G046',FAQ_TYPE) AS FAQ_TYPE_NM /*FAQ유형명*/
+		     , QUESTION                                       /*질문*/
+		     , ANSWER                                         /*답변*/
+		FROM   TB_FAQ
+		WHERE  FAQ_SQ = #{faqSq}
+		AND    USE_YN = 'Y'
+	</select>
+
+</mapper>

+ 11 - 207
style24.front/target/classes/com/style24/persistence/mybatis/TsfNotice.xml

@@ -12,35 +12,9 @@
 		/* TsfNotice.getNoticeTotalCount */
 		SELECT COUNT(*)
 		FROM   TB_NOTICE A
-		WHERE  NOTICE_TYPE = #{noticeType}
+		WHERE  NOTICE_TYPE = 'G047_10' /*사이트공지*/
 		AND    USE_YN = 'Y'
-		AND    NOW() BETWEEN NOTICE_STDT AND NOTICE_EDDT
-		<choose>
-		    <when test="urgentYn == null or urgentYn == ''">
-		        <if test="searchTxt != null and searchTxt != ''">
-		            <choose>
-		                <when test="searchGb == 'TITLE'">
-		AND    NOTICE_TITLE LIKE CONCAT('%',TRIM(#{searchTxt}),'%')
-		                </when>
-		                <when test="searchGb == 'CONTENT'">
-		AND    NOTICE_CONTENT LIKE CONCAT('%',TRIM(#{searchTxt}),'%')
-		                </when>
-		                <otherwise>
-		AND    (
-		        NOTICE_TITLE LIKE CONCAT('%',TRIM(#{searchTxt}),'%')
-		        OR
-		        NOTICE_CONTENT LIKE CONCAT('%',TRIM(#{searchTxt}),'%')
-		       )
-		                </otherwise>
-		            </choose>
-		        </if>
-		    </when>
-		    <otherwise>
-		        <if test='urgentYn == "Y"'> <!-- 최상단 공지글인 경우 -->
-		AND    URGENT_YN = 'Y'
-		        </if>
-		    </otherwise>
-		</choose>
+		AND    CURRENT_DATE() BETWEEN NOTICE_STDT AND NOTICE_EDDT
 		AND    EXISTS (SELECT 1
 		               FROM   TB_NOTICE_RECEIVER
 		               WHERE  NOTICE_SQ = A.NOTICE_SQ
@@ -51,44 +25,19 @@
 	<!-- 공지사항 목록 -->
 	<select id="getNoticeList" parameterType="Notice" resultType="Notice">
 		/* TsfNotice.getNoticeList */
-		SELECT NOTICE_SQ                              /*공지사항일련번호*/
-		     , NOTICE_TITLE                           /*공지제목*/
-		     , READ_CNT                               /*조회수*/
-		     , DATE_FORMAT(REG_DT,'%Y%m%d') AS REG_DT /*등록일자*/
+		SELECT NOTICE_SQ                                  /*공지사항일련번호*/
+		     , NOTICE_TITLE                               /*공지제목*/
+		     , NOTICE_CONTENT                             /*공지내용*/
+		     , READ_CNT                                   /*조회수*/
+		     , DATE_FORMAT(REG_DT,'%Y.%m.%d') AS REG_DT   /*등록일자*/
 		     , (SELECT COUNT(1)
 		        FROM   TB_NOTICE_FILE
 		        WHERE  NOTICE_SQ = A.NOTICE_SQ
-		       )                          AS FILE_CNT /*첨부파일건수*/
+		       )                              AS FILE_CNT /*첨부파일건수*/
 		FROM   TB_NOTICE A
-		WHERE  NOTICE_TYPE = #{noticeType}
+		WHERE  NOTICE_TYPE = 'G047_10' /*사이트공지*/
 		AND    USE_YN =  'Y'
-		AND    NOW() BETWEEN NOTICE_STDT AND NOTICE_EDDT
-		<choose>
-		    <when test="urgentYn == null or urgentYn == ''">
-		        <if test="searchTxt != null and searchTxt != ''">
-		            <choose>
-		                <when test="searchGb == 'TITLE'">
-		AND    NOTICE_TITLE LIKE CONCAT('%',TRIM(#{searchTxt}),'%')
-		                </when>
-		                <when test="searchGb == 'CONTENT'">
-		AND    NOTICE_CONTENT LIKE CONCAT('%',TRIM(#{searchTxt}),'%')
-		                </when>
-		                <otherwise>
-		AND    (
-		        NOTICE_TITLE LIKE CONCAT('%',TRIM(#{searchTxt}),'%')
-		        OR
-		        NOTICE_CONTENT LIKE CONCAT('%',TRIM(#{searchTxt}),'%')
-		       )
-		                </otherwise>
-		            </choose>
-		        </if>
-		    </when>
-		    <otherwise>
-		        <if test='urgentYn == "Y"'> <!-- 최상단 공지글인 경우 -->
-		AND    URGENT_YN = 'Y'
-		        </if>
-		    </otherwise>
-		</choose>
+		AND    CURRENT_DATE() BETWEEN NOTICE_STDT AND NOTICE_EDDT
 		AND    EXISTS (SELECT 1
 		               FROM   TB_NOTICE_RECEIVER
 		               WHERE  NOTICE_SQ = A.NOTICE_SQ
@@ -98,151 +47,6 @@
 		<include refid="pageSql"></include>
 	</select>
 
-	<!-- 공지사항 상세 -->
-	<select id="getNoticeDetail" parameterType="Notice" resultType="Notice">
-		/* TsfNotice.getNoticeDetail */
-		SELECT NOTICE_SQ      /*공지사항일련번호*/
-		     , NOTICE_TITLE   /*공지사항제목*/
-		     , NOTICE_CONTENT /*공지사항내용*/
-		     , READ_CNT       /*조회수*/
-		     , REG_DT         /*등록일시*/
-		FROM   (
-		        SELECT NOTICE_SQ
-		             , NOTICE_TITLE
-		             , NOTICE_CONTENT
-		             , READ_CNT
-		             , DATE_FORMAT(REG_DT,'%Y.%m.%d') AS REG_DT
-		        FROM   TB_NOTICE A
-		        WHERE  NOTICE_TYPE = #{noticeType}
-		        AND    USE_YN =  'Y'
-		        AND    NOW() BETWEEN NOTICE_STDT AND NOTICE_EDDT
-		        AND    NOTICE_SQ = #{noticeSq}
-		        <choose>
-		            <when test="urgentYn == null or urgentYn == ''">
-		                <if test="searchTxt != null and searchTxt != ''">
-		                    <choose>
-		                        <when test="searchGb == 'TITLE'">
-		        AND    NOTICE_TITLE LIKE CONCAT('%',TRIM(#{searchTxt}),'%')
-		                        </when>
-		                        <when test="searchGb == 'CONTENT'">
-		        AND    NOTICE_CONTENT LIKE CONCAT('%',TRIM(#{searchTxt}),'%')
-		                        </when>
-		                        <otherwise>
-		        AND    (
-		                NOTICE_TITLE LIKE CONCAT('%',TRIM(#{searchTxt}),'%')
-		                OR
-		                NOTICE_CONTENT LIKE CONCAT('%',TRIM(#{searchTxt}),'%')
-		               )
-		                        </otherwise>
-		                    </choose>
-		                </if>
-		            </when>
-		            <otherwise>
-		                <if test='urgentYn == "Y"'> <!-- 최상단 공지글인 경우 -->
-		        AND    URGENT_YN = 'Y'
-		                </if>
-		            </otherwise>
-		        </choose>
-		        AND    EXISTS (SELECT 1
-		                       FROM   TB_NOTICE_RECEIVER
-		                       WHERE  NOTICE_SQ = A.NOTICE_SQ
-		                       AND    RECEIVER_ID = #{siteCd}
-		                      )
-		       )
-	</select>
-	
-	<!-- 공지사항 이전글 조회 -->
-	<select id="getPreviousNotice" parameterType="Notice" resultType="Notice">
-		/* TsfNotice.getPreviousNotice */
-		SELECT NOTICE_SQ    AS PREV_NOTICE_SQ
-		     , NOTICE_TITLE AS PREV_NOTICE_TITLE
-		FROM   TB_NOTICE
-		WHERE  NOTICE_SQ = (SELECT MAX(NOTICE_SQ)
-		                    FROM   TB_NOTICE N
-		                    WHERE  NOTICE_SQ <![CDATA[<]]> #{noticeSq}
-		                    AND    NOTICE_TYPE = #{noticeType}
-		                    AND    USE_YN = 'Y'
-		                    AND    NOW() BETWEEN NOTICE_STDT AND NOTICE_EDDT
-		                    <choose>
-		                        <when test="urgentYn == null or urgentYn == ''">
-		                            <if test="searchTxt != null and searchTxt != ''">
-		                                <choose>
-		                                    <when test="searchGb == 'TITLE'">
-		                    AND    NOTICE_TITLE LIKE CONCAT('%',TRIM(#{searchTxt}),'%')
-		                                    </when>
-		                                    <when test="searchGb == 'CONTENT'">
-		                    AND    NOTICE_CONTENT LIKE CONCAT('%',TRIM(#{searchTxt}),'%')
-		                                    </when>
-		                                    <otherwise>
-		                    AND    (
-		                            NOTICE_TITLE LIKE CONCAT('%',TRIM(#{searchTxt}),'%')
-		                            OR
-		                            NOTICE_CONTENT LIKE CONCAT('%',TRIM(#{searchTxt}),'%')
-		                           )
-		                                    </otherwise>
-		                                </choose>
-		                            </if>
-		                        </when>
-		                        <otherwise>
-		                            <if test='urgentYn == "Y"'> <!-- 최상단 공지글인 경우 -->
-		                    AND    URGENT_YN = 'Y'
-		                            </if>
-		                        </otherwise>
-		                    </choose>
-		                    AND    EXISTS (SELECT 1
-		                                   FROM   TB_NOTICE_RECEIVER
-		                                   WHERE  NOTICE_SQ = N.NOTICE_SQ
-		                                   AND    RECEIVER_ID = #{siteCd}
-		                                  )
-		                   )
-	</select>
-
-	<!-- 공지사항 다음글 조회 -->
-	<select id="getNextNotice" parameterType="Notice" resultType="Notice">
-		/* TsfNotice.getNextNotice */
-		SELECT NOTICE_SQ    AS NEXT_NOTICE_SQ
-		     , NOTICE_TITLE AS NEXT_NOTICE_TITLE
-		FROM   TB_NOTICE
-		WHERE  NOTICE_SQ = (SELECT MIN(NOTICE_SQ)
-		                    FROM   TB_NOTICE N
-		                    WHERE  NOTICE_SQ <![CDATA[>]]> #{noticeSq}
-		                    AND    NOTICE_TYPE = #{noticeType}
-		                    AND    USE_YN = 'Y'
-		                    AND    NOW() BETWEEN NOTICE_STDT AND NOTICE_EDDT
-		                    <choose>
-		                        <when test="urgentYn == null or urgentYn == ''">
-		                            <if test="searchTxt != null and searchTxt != ''">
-		                                <choose>
-		                                    <when test="searchGb == 'TITLE'">
-		                    AND    NOTICE_TITLE LIKE CONCAT('%',TRIM(#{searchTxt}),'%')
-		                                    </when>
-		                                    <when test="searchGb == 'CONTENT'">
-		                    AND    NOTICE_CONTENT LIKE CONCAT('%',TRIM(#{searchTxt}),'%')
-		                                    </when>
-		                                    <otherwise>
-		                    AND    (
-		                            NOTICE_TITLE LIKE CONCAT('%',TRIM(#{searchTxt}),'%')
-		                            OR
-		                            NOTICE_CONTENT LIKE CONCAT('%',TRIM(#{searchTxt}),'%')
-		                           )
-		                                    </otherwise>
-		                                </choose>
-		                            </if>
-		                        </when>
-		                        <otherwise>
-		                            <if test='urgentYn == "Y"'> <!-- 최상단 공지글인 경우 -->
-		                    AND    URGENT_YN = 'Y'
-		                            </if>
-		                        </otherwise>
-		                    </choose>
-		                    AND    EXISTS (SELECT 1
-		                                   FROM   TB_NOTICE_RECEIVER
-		                                   WHERE  NOTICE_SQ = N.NOTICE_SQ
-		                                   AND    RECEIVER_ID = #{siteCd}
-		                                  )
-		                   )
-	</select>
-
 	<!-- 공지사항 파일 목록 -->
 	<select id="getNoticeFileList" parameterType="Integer" resultType="Notice">
 		/* TsfNotice.getNoticeFileList */
@@ -255,7 +59,7 @@
 	</select>
 	
 	<!-- 공지사항  조회건수 Update -->
-	<update id="updateNoticeReadCount" parameterType="Notice">
+	<update id="updateNoticeReadCount" parameterType="Integer">
 		/* TsfNotice.updateNoticeReadCount */
 		UPDATE TB_NOTICE
 		SET    READ_CNT = READ_CNT + 1