Browse Source

자사몰정산(상품정산, 배송비정산, 정산확정관리, PG입금정산, 상품권정산) 화면 추가

gagamel 5 years ago
parent
commit
8e90f44da3

+ 169 - 0
style24.admin/src/main/java/com/style24/admin/biz/web/TsaSettleController.java

@@ -0,0 +1,169 @@
+package com.style24.admin.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.RequestMapping;
+import org.springframework.web.servlet.ModelAndView;
+
+import com.style24.admin.biz.service.TsaBusinessService;
+import com.style24.admin.biz.service.TsaRendererService;
+import com.style24.admin.support.controller.TsaBaseController;
+import com.style24.admin.support.security.session.TsaSession;
+import com.style24.core.support.message.TscMessageByLocale;
+
+import lombok.extern.slf4j.Slf4j;
+
+/**
+ * 정산 Controller
+ *
+ * @author jaewonHo
+ * @since 2020. 10. 22
+ */
+@Controller
+@RequestMapping("/settle")
+@Slf4j
+public class TsaSettleController extends TsaBaseController {
+
+	@Autowired
+	private TscMessageByLocale message;
+
+	@Autowired
+	private TsaBusinessService businessService;
+
+	@Autowired
+	private TsaRendererService rendererService;
+
+	/**
+	 * 상품정산 화면
+	 * @return
+	 * @author gagamel
+	 * @since 2020. 10. 22
+	 */
+	@GetMapping("/goods/form")
+	public ModelAndView goodsSettleForm() {
+		ModelAndView mav = new ModelAndView();
+
+		// 공급업체
+		mav.addObject("supplyCompList", rendererService.getSupplyCompanyList(TsaSession.getInfo().getSupplyCompCd()));
+
+		// 유통구분
+		mav.addObject("distributionGbList", rendererService.getCommonCodeList("G065"));
+
+		mav.setViewName("settle/GoodsSettleForm");
+
+		return mav;
+	}
+
+	/**
+	 * 배송비정산 화면
+	 * @return
+	 * @author gagamel
+	 * @since 2020. 10. 22
+	 **/
+	@GetMapping("/delivery/fee/form")
+	public ModelAndView deliveryFeeSettleForm() {
+		ModelAndView mav = new ModelAndView();
+
+		// 공급업체
+		mav.addObject("supplyCompList", rendererService.getSupplyCompanyList(TsaSession.getInfo().getSupplyCompCd()));
+
+		// 유통구분
+		mav.addObject("distributionGbList", rendererService.getCommonCodeList("G065"));
+
+		mav.setViewName("settle/DeliveryFeeSettleForm");
+
+		return mav;
+	}
+
+	/**
+	 * 정산확정관리 화면
+	 * @return
+	 * @author gagamel
+	 * @since 2020. 10. 22
+	 */
+	@GetMapping("/confirm/form")
+	public ModelAndView settleConfirmForm() {
+		ModelAndView mav = new ModelAndView();
+
+		// 공급업체
+		mav.addObject("supplyCompList", rendererService.getSupplyCompanyList(TsaSession.getInfo().getSupplyCompCd()));
+
+		// 유통구분
+		mav.addObject("distributionGbList", rendererService.getCommonCodeList("G065"));
+
+		// 은행
+		mav.addObject("bankList", rendererService.getCommonCodeList("G940"));
+
+		mav.setViewName("settle/SettleConfirmForm");
+
+		return mav;
+	}
+
+	/**
+	 * 업체별정산내역 화면
+	 * @return
+	 * @author gagamel
+	 * @since 2020. 10. 22
+	 */
+	@GetMapping("/supply/company/form")
+	public ModelAndView supplyCompanySettleForm() {
+		ModelAndView mav = new ModelAndView();
+
+		// 공급업체
+		mav.addObject("supplyCompList", rendererService.getSupplyCompanyList(TsaSession.getInfo().getSupplyCompCd()));
+
+		mav.setViewName("settle/SupplyCompanySettleForm");
+
+		return mav;
+	}
+
+	/**
+	 * PG입금정산 화면
+	 * @return
+	 * @author gagamel
+	 * @since 2020. 10. 22
+	 */
+	@GetMapping("/pg/deposit/form")
+	public ModelAndView paygateDepositForm() {
+		ModelAndView mav = new ModelAndView();
+
+		// 공급업체
+		mav.addObject("supplyCompList", rendererService.getSupplyCompanyList(TsaSession.getInfo().getSupplyCompCd()));
+
+		// PG구분
+		mav.addObject("pgGbList", rendererService.getCommonCodeList("G015"));
+
+		// 결제수단
+		mav.addObject("payMeansList", rendererService.getCommonCodeList("G014"));
+
+		mav.setViewName("settle/PgDepositSettleForm");
+
+		return mav;
+	}
+
+	/**
+	 * 상품권정산 화면
+	 * @return
+	 * @author gagamel
+	 * @since 2020. 10. 22
+	 */
+	@GetMapping("/giftcard/form")
+	public ModelAndView giftcardForm() {
+		ModelAndView mav = new ModelAndView();
+
+		// 공급업체
+		mav.addObject("supplyCompList", rendererService.getSupplyCompanyList(TsaSession.getInfo().getSupplyCompCd()));
+
+		// PG구분
+		mav.addObject("pgGbList", rendererService.getCommonCodeList("G015"));
+
+		// 결제수단
+		mav.addObject("payMeansList", rendererService.getCommonCodeList("G014"));
+
+		mav.setViewName("settle/GiftcardSettleForm");
+
+		return mav;
+	}
+
+}

+ 146 - 0
style24.admin/src/main/webapp/WEB-INF/views/settle/DeliveryFeeSettleForm.html

@@ -0,0 +1,146 @@
+<!DOCTYPE html>
+<html lang="ko"
+	xmlns:th="http://www.thymeleaf.org">
+<!--
+ *******************************************************************************
+ * @source  : DeliveryFeeSettleForm.html
+ * @desc    : 배송비정산 Page
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2020 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2020.10.26   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="@{'/settle/delivery/fee/list'}" onsubmit="$('#btnSearch').trigger('click'); return false;">
+				<table class="frmStyle" aria-describedby="검색조건">
+					<colgroup>
+						<col style="width:10%;"/>
+						<col style="width:60%;"/>
+						<col style="width:10%;"/>
+						<col/>
+					</colgroup>
+					<tr>
+						<th>출고기간<i class="required" title="필수" aria-hidden="true"></i></th>
+						<td id="terms">
+						</td>
+						<th>유통구분</th>
+						<td>
+							<select name="distributionGb">
+								<option value="">[전체]</option>
+								<option th:if="${distributionGbList}" th:each="oneData, status : ${distributionGbList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
+							</select>
+						</td>
+					</tr>
+					<tr>
+						<th>공급업체/브랜드</th>
+						<td colspan="3">
+							<select name="supplyCompCd">
+								<option value="">[전체]</option>
+								<option th:if="${supplyCompList}" th:each="oneData, status : ${supplyCompList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
+							</select>
+							/
+							<select name="brandCd">
+								<option value="">[전체]</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">
+			<!-- 버튼 배치 영역 -->
+			<ul class="panelBar">
+				<li class="right">
+					<button type="button" class="btn btn-default btn-lg" id="btnExcel">엑셀다운로드</button>
+				</li>
+			</ul>
+			<!-- //버튼 배치 영역 -->
+			
+			<div id="gridList" style="width: 100%; height: 470px" class="ag-theme-balham"></div>
+		</div>
+		<!-- //리스트 영역 -->
+	</div>
+
+<script th:inline="javascript">
+/*<![CDATA[*/
+	let supplyCompList = gagajf.convertToArray([[${supplyCompList}]]);
+	let distributionGbList = gagajf.convertToArray([[${distributionGbList}]]);
+
+	let columnDefs = [
+		{
+			headerName: "출고일자", field: "outgoingDt", width: 100, cellClass: 'text-center',
+			valueGetter: function (params) {
+				return gagaAgGrid.toDateFormat(params.data.outgoingDt);
+			}
+		},
+		{
+			headerName: "공급업체", field: "supplyCompCd", width: 100, cellClass: 'text-center',
+			valueGetter: function (params) {
+				return gagaAgGrid.lookupValue(supplyCompList, params.data.supplyCompCd);
+			}
+		},
+		{
+			headerName: "유통구분", field: "distributionGb", width: 100, cellClass: 'text-center',
+			valueGetter: function (params) {
+				return gagaAgGrid.lookupValue(distributionGbList, params.data.distributionGb);
+			}
+		},
+		{
+			headerName: "배송비구분", field: "delvFeeGb", width: 100, cellClass: 'text-center'/* ,
+			valueGetter: function (params) {
+				return gagaAgGrid.lookupValue(delvFeeGbList, params.data.delvFeeGb);
+			} */
+		},
+		{ headerName: "주문번호", field: "ordNo", width: 100, cellClass: 'text-center' },
+		{ headerName: "배송비", field: "delvFee", width: 100, cellClass: 'text-right' }
+	];
+
+	let gridOptions = gagaAgGrid.getGridOptions(columnDefs);
+
+	// 검색
+	$('#btnSearch').on('click', function() {
+		gagaAgGrid.fetch($('#searchForm').prop('action'), gridOptions, '#searchForm');
+	});
+	
+	// 엑셀다운로드
+	$('#btnExcel').on('click', function() {
+		gagaAgGrid.exportToExcel('배송비정산 목록', gridOptions);
+	});
+	
+	$(document).ready(function() {
+		cfnCreateCalendar('#terms', 'startDt', 'endDt', true, '출고');
+		$('.btnToday').trigger('click');
+		
+		// Create a agGrid
+		gagaAgGrid.createGrid('gridList', gridOptions);
+	});
+/*]]>*/
+</script>
+
+</html>

+ 121 - 0
style24.admin/src/main/webapp/WEB-INF/views/settle/GiftcardSettleForm.html

@@ -0,0 +1,121 @@
+<!DOCTYPE html>
+<html lang="ko"
+	xmlns:th="http://www.thymeleaf.org">
+<!--
+ *******************************************************************************
+ * @source  : GiftcardSettleForm.html
+ * @desc    : 상품권정산 Page
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2020 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2020.10.26   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="@{'/settle/giftcard/list'}" onsubmit="$('#btnSearch').trigger('click'); return false;">
+				<table class="frmStyle" aria-describedby="검색조건">
+					<colgroup>
+						<col style="width:10%;"/>
+						<col style="width:60%;"/>
+						<col style="width:10%;"/>
+						<col/>
+					</colgroup>
+					<tr>
+						<th>기간<i class="required" title="필수" aria-hidden="true"></i></th>
+						<td>
+							<select name="termGb">
+								<option value="REG_DT">등록일</option>
+								<option value="EXPIRE_DT">사용만료일</option>
+								<option value="USE_DT">사용일</option>
+							</select>
+							<span id="terms">
+							</span>
+						</td>
+						<th>유효상품권</th>
+						<td>
+							<select name="availYn">
+								<option value="">[전체]</option>
+								<option value="Y">Yes</option>
+								<option value="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">
+			<!-- 버튼 배치 영역 -->
+			<ul class="panelBar">
+				<li class="right">
+					<button type="button" class="btn btn-default btn-lg" id="btnExcel">엑셀다운로드</button>
+				</li>
+			</ul>
+			<!-- //버튼 배치 영역 -->
+			
+			<div id="gridList" style="width: 100%; height: 470px" class="ag-theme-balham"></div>
+		</div>
+		<!-- //리스트 영역 -->
+	</div>
+
+<script th:inline="javascript">
+/*<![CDATA[*/
+	let columnDefs = [
+		{ headerName: "상품권번호", field: "giftcardNo", width: 100, cellClass: 'text-center' },
+		{ headerName: "등록일", field: "regDt", width: 120, cellClass: 'text-center' },
+		{ headerName: "사용만료일", field: "expireDt", width: 120, cellClass: 'text-center' },
+		{ headerName: "유효여부", field: "availYn", width: 100, cellClass: 'text-center' },
+		{ headerName: "회원ID", field: "custId", width: 100, cellClass: 'text-center' },
+		{ headerName: "상품권금액", field: "giftcardAmt", width: 120, cellClass: 'text-right' },
+		{ headerName: "최초등록금액", field: "firstRegAmt", width: 120, cellClass: 'text-right' },
+		{ headerName: "누적사용금액", field: "totUseAmt", width: 100, cellClass: 'text-right' },
+		{ headerName: "잔액", field: "remainAmt", width: 120, cellClass: 'text-right' }
+	];
+
+	let gridOptions = gagaAgGrid.getGridOptions(columnDefs);
+
+	// 검색
+	$('#btnSearch').on('click', function() {
+		gagaAgGrid.fetch($('#searchForm').prop('action'), gridOptions, '#searchForm');
+	});
+	
+	// 엑셀다운로드
+	$('#btnExcel').on('click', function() {
+		gagaAgGrid.exportToExcel('상품권정산 목록', gridOptions);
+	});
+	
+	$(document).ready(function() {
+		cfnCreateCalendar('#terms', 'startDt', 'endDt', true);
+		$('.btnToday').trigger('click');
+		
+		// Create a agGrid
+		gagaAgGrid.createGrid('gridList', gridOptions);
+	});
+/*]]>*/
+</script>
+
+</html>

+ 163 - 0
style24.admin/src/main/webapp/WEB-INF/views/settle/GoodsSettleForm.html

@@ -0,0 +1,163 @@
+<!DOCTYPE html>
+<html lang="ko"
+	xmlns:th="http://www.thymeleaf.org">
+<!--
+ *******************************************************************************
+ * @source  : GoodsSettleForm.html
+ * @desc    : 상품정산 Page
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2020 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2020.10.22   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="@{'/settle/goods/list'}" onsubmit="$('#btnSearch').trigger('click'); return false;">
+				<table class="frmStyle" aria-describedby="검색조건">
+					<colgroup>
+						<col style="width:10%;"/>
+						<col style="width:60%;"/>
+						<col style="width:10%;"/>
+						<col/>
+					</colgroup>
+					<tr>
+						<th>출고기간<i class="required" title="필수" aria-hidden="true"></i></th>
+						<td id="terms">
+						</td>
+						<th>유통구분</th>
+						<td>
+							<select name="distributionGb">
+								<option value="">[전체]</option>
+								<option th:if="${distributionGbList}" th:each="oneData, status : ${distributionGbList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
+							</select>
+						</td>
+					</tr>
+					<tr>
+						<th>공급업체/브랜드</th>
+						<td colspan="3">
+							<select name="supplyCompCd">
+								<option value="">[전체]</option>
+								<option th:if="${supplyCompList}" th:each="oneData, status : ${supplyCompList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
+							</select>
+							/
+							<select name="brandCd">
+								<option value="">[전체]</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">
+			<!-- 버튼 배치 영역 -->
+			<ul class="panelBar">
+				<li class="right">
+					<button type="button" class="btn btn-default btn-lg" id="btnExcel">엑셀다운로드</button>
+				</li>
+			</ul>
+			<!-- //버튼 배치 영역 -->
+			
+			<div id="gridList" style="width: 100%; height: 470px" class="ag-theme-balham"></div>
+		</div>
+		<!-- //리스트 영역 -->
+	</div>
+
+<script th:inline="javascript">
+/*<![CDATA[*/
+	let supplyCompList = gagajf.convertToArray([[${supplyCompList}]]);
+	let distributionGbList = gagajf.convertToArray([[${distributionGbList}]]);
+
+	let columnDefs = [
+		{ headerName: "주문번호", field: "ordNo", width: 100, cellClass: 'text-center' },
+		{
+			headerName: "공급업체", field: "supplyCompCd", width: 100, cellClass: 'text-center',
+			valueGetter: function (params) {
+				return gagaAgGrid.lookupValue(supplyCompList, params.data.supplyCompCd);
+			}
+		},
+		{
+			headerName: "유통구분", field: "distributionGb", width: 100, cellClass: 'text-center',
+			valueGetter: function (params) {
+				return gagaAgGrid.lookupValue(distributionGbList, params.data.distributionGb);
+			}
+		},
+		{ headerName: "정산주기", field: "usacPeriod", width: 100, cellClass: 'text-center' },
+		{ headerName: "주문일시", field: "ordDt", width: 150, cellClass: 'text-center' },
+		{
+			headerName: "정산구분", field: "usacGb", width: 100, cellClass: 'text-center'/* ,
+			valueGetter: function (params) {
+				return gagaAgGrid.lookupValue(usacGbList, params.data.usacGb);
+			} */
+		},
+		{
+			headerName: "환입구분", field: "prtnGb", width: 100, cellClass: 'text-center'/* ,
+			valueGetter: function (params) {
+				return gagaAgGrid.lookupValue(prtnGbList, params.data.prtnGb);
+			} */
+		},
+		{ headerName: "상품코드", field: "goodsCd", width: 120, cellClass: 'text-center' },
+		{ headerName: "상품명", field: "goodsNm", width: 150, cellClass: 'text-center' },
+		{ headerName: "브랜드", field: "brandEnm", width: 100, cellClass: 'text-center' },
+		{ headerName: "담당MD", field: "mdNm", width: 100, cellClass: 'text-center' },
+		{ headerName: "단품코드", field: "itemCd", width: 120, cellClass: 'text-center' },
+		{ headerName: "사이즈", field: "sizeCd", width: 100, cellClass: 'text-center' },
+		{ headerName: "판매가", field: "currPrice", width: 100, cellClass: 'text-right' },
+		{ headerName: "판매수량", field: "sellQty", width: 100, cellClass: 'text-center' },
+		{ headerName: "판매총액", field: "sellAmt", width: 100, cellClass: 'text-right' },
+		{ headerName: "즉시사용쿠폰금액", field: "duseCpnDcAmt", width: 100, cellClass: 'text-right' },
+		{ headerName: "상품쿠폰사용금액", field: "goodsCpnDcAmt", width: 100, cellClass: 'text-right' },
+		{ headerName: "주문서쿠폰사용금액", field: "cartCpnDcAmt", width: 100, cellClass: 'text-right' },
+		{ headerName: "포인트사용금액", field: "pntDcAmt", width: 100, cellClass: 'text-right' },
+		{ headerName: "다다익선할인금액", field: "multiDcAmt", width: 100, cellClass: 'text-right' },
+		{ headerName: "자사쿠폰분담액", field: "selfCpnDcAmt", width: 100, cellClass: 'text-right' },
+		{ headerName: "입점쿠폰분담액", field: "supplyCompCpnDcAmt", width: 100, cellClass: 'text-right' }
+	];
+
+	let gridOptions = gagaAgGrid.getGridOptions(columnDefs);
+
+	// 검색
+	$('#btnSearch').on('click', function() {
+		gagaAgGrid.fetch($('#searchForm').prop('action'), gridOptions, '#searchForm');
+	});
+	
+	// 엑셀다운로드
+	$('#btnExcel').on('click', function() {
+		gagaAgGrid.exportToExcel('상품정산 목록', gridOptions);
+	});
+	
+	$(document).ready(function() {
+		cfnCreateCalendar('#terms', 'startDt', 'endDt', true, '출고');
+		$('.btnToday').trigger('click');
+		
+		// Create a agGrid
+		gagaAgGrid.createGrid('gridList', gridOptions);
+	});
+/*]]>*/
+</script>
+
+</html>

+ 158 - 0
style24.admin/src/main/webapp/WEB-INF/views/settle/PgDepositSettleForm.html

@@ -0,0 +1,158 @@
+<!DOCTYPE html>
+<html lang="ko"
+	xmlns:th="http://www.thymeleaf.org">
+<!--
+ *******************************************************************************
+ * @source  : PgDepositSettleForm.html
+ * @desc    : PG입금정산 Page
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2020 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2020.10.26   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="@{'/settle/pg/deposit/list'}" onsubmit="$('#btnSearch').trigger('click'); return false;">
+				<table class="frmStyle" aria-describedby="검색조건">
+					<colgroup>
+						<col style="width:10%;"/>
+						<col style="width:60%;"/>
+						<col style="width:10%;"/>
+						<col/>
+					</colgroup>
+					<tr>
+						<th>기간<i class="required" title="필수" aria-hidden="true"></i></th>
+						<td>
+							<select name="termGb">
+								<option value="ORD_DT">주문일자</option>
+								<option value="USAC_DT">정산일자</option>
+							</select>
+							<span id="terms">
+							</span>
+						</td>
+						<th>PG구분</th>
+						<td>
+							<select name="pgGb">
+								<option value="">[전체]</option>
+								<option th:if="${pgGbList}" th:each="oneData, status : ${pgGbList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
+							</select>
+						</td>
+					</tr>
+					<tr>
+						<th>결제수단</th>
+						<td colspan="3">
+							<select name="payMeans">
+								<option value="">[전체]</option>
+								<option th:if="${payMeansList}" th:each="oneData, status : ${payMeansList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></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">
+			<!-- 버튼 배치 영역 -->
+			<ul class="panelBar">
+				<li class="right">
+					<button type="button" class="btn btn-default btn-lg" id="btnExcel">엑셀다운로드</button>
+				</li>
+			</ul>
+			<!-- //버튼 배치 영역 -->
+			
+			<div id="gridList" style="width: 100%; height: 470px" class="ag-theme-balham"></div>
+		</div>
+		<!-- //리스트 영역 -->
+	</div>
+
+<script th:inline="javascript">
+/*<![CDATA[*/
+	let pgGbList = gagajf.convertToArray([[${pgGbList}]]);
+	let payMeansList = gagajf.convertToArray([[${payMeansList}]]);
+
+	let columnDefs = [
+		{
+			headerName: "PG구분", field: "pgGb", width: 100, cellClass: 'text-center',
+			valueGetter: function (params) {
+				return gagaAgGrid.lookupValue(pgGbList, params.data.pgGb);
+			}
+		},
+		{ headerName: "PG상점ID", field: "pgShopId", width: 100, cellClass: 'text-center' },
+		{ headerName: "결제ID", field: "pgTradeNo", width: 150, cellClass: 'text-center' },
+		{
+			headerName: "결제수단", field: "payMeans", width: 100, cellClass: 'text-center',
+			valueGetter: function (params) {
+				return gagaAgGrid.lookupValue(payMeansList, params.data.payMeans);
+			}
+		},
+		{ headerName: "주문번호", field: "ordNo", width: 100, cellClass: 'text-center' },
+		{ headerName: "주문일자", field: "ordDt", width: 100, cellClass: 'text-center' },
+		{ headerName: "주문상태", field: "ordDtlStat", width: 100, cellClass: 'text-center' },
+		{ headerName: "총주문금액", field: "totOrdAmt", width: 120, cellClass: 'text-right' },
+		{ headerName: "총상품금액", field: "totGoodsAmt", width: 120, cellClass: 'text-right' },
+		{ headerName: "배송비", field: "delvFeeAmt", width: 100, cellClass: 'text-right' },
+		{ headerName: "쿠폰할인금액", field: "cpnDcAmt", width: 120, cellClass: 'text-right' },
+		{ headerName: "포인트할인금액", field: "pntDcAmt", width: 120, cellClass: 'text-right' },
+		{ headerName: "상품권", field: "giftCardAmt", width: 120, cellClass: 'text-right' },
+		{ headerName: "결제금액", field: "payAmt", width: 120, cellClass: 'text-right' },
+		{ headerName: "판매/환입", field: "usacGb", width: 100, cellClass: 'text-center' },
+		{ headerName: "결제일", field: "payDt", width: 100, cellClass: 'text-center' },
+		{ headerName: "일치여부", field: "sameYn", width: 100, cellClass: 'text-center' },
+		{ headerName: "불일치사유", field: "notSameRsn", width: 120, cellClass: 'text-center' },
+		{ headerName: "차이금액", field: "diffAmt", width: 120, cellClass: 'text-right' },
+		{ headerName: "PG금액", field: "pgUsacAmt", width: 120, cellClass: 'text-right' },
+		{ headerName: "PG입금일시", field: "pgDepositDt", width: 100, cellClass: 'text-center' },
+		{ headerName: "PG승인상태", field: "pgStat", width: 100, cellClass: 'text-center' },
+		{ headerName: "PG승인상태설명", field: "pgStatDesc", width: 150, cellClass: 'text-center' },
+		{ headerName: "거래형태", field: "pgTradeType", width: 100, cellClass: 'text-center' },
+		{ headerName: "결제수수료", field: "pgFee", width: 100, cellClass: 'text-right' },
+		{ headerName: "정산예정일", field: "pgUsacDt", width: 100, cellClass: 'text-center' }
+	];
+
+	let gridOptions = gagaAgGrid.getGridOptions(columnDefs);
+
+	// 검색
+	$('#btnSearch').on('click', function() {
+		gagaAgGrid.fetch($('#searchForm').prop('action'), gridOptions, '#searchForm');
+	});
+	
+	// 엑셀다운로드
+	$('#btnExcel').on('click', function() {
+		gagaAgGrid.exportToExcel('PG입금정산 목록', gridOptions);
+	});
+	
+	$(document).ready(function() {
+		cfnCreateCalendar('#terms', 'startDt', 'endDt', true);
+		$('.btnToday').trigger('click');
+		
+		// Create a agGrid
+		gagaAgGrid.createGrid('gridList', gridOptions);
+	});
+/*]]>*/
+</script>
+
+</html>

+ 200 - 0
style24.admin/src/main/webapp/WEB-INF/views/settle/SettleConfirmForm.html

@@ -0,0 +1,200 @@
+<!DOCTYPE html>
+<html lang="ko"
+	xmlns:th="http://www.thymeleaf.org">
+<!--
+ *******************************************************************************
+ * @source  : SettleConfirmForm.html
+ * @desc    : 정산확정관리 Page
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2020 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2020.10.26   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="@{'/settle/confirm/list'}" onsubmit="$('#btnSearch').trigger('click'); return false;">
+				<table class="frmStyle" aria-describedby="검색조건">
+					<colgroup>
+						<col style="width:10%;"/>
+						<col style="width:60%;"/>
+						<col style="width:10%;"/>
+						<col/>
+					</colgroup>
+					<tr>
+						<th>출고기간<i class="required" title="필수" aria-hidden="true"></i></th>
+						<td id="terms">
+						</td>
+						<th>유통구분</th>
+						<td>
+							<select name="distributionGb">
+								<option value="">[전체]</option>
+								<option th:if="${distributionGbList}" th:each="oneData, status : ${distributionGbList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
+							</select>
+						</td>
+					</tr>
+					<tr>
+						<th>공급업체/브랜드</th>
+						<td colspan="3">
+							<select name="supplyCompCd">
+								<option value="">[전체]</option>
+								<option th:if="${supplyCompList}" th:each="oneData, status : ${supplyCompList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
+							</select>
+							/
+							<select name="brandCd">
+								<option value="">[전체]</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">
+			<!-- 버튼 배치 영역 -->
+			<ul class="panelBar">
+				<li class="right">
+					<button type="button" class="btn btn-warning btn-lg" id="btnUpload">기타차감 엑셀업로드</button>
+					<button type="button" class="btn btn-default btn-lg" id="btnExcel">세금계산서용 엑셀다운로드</button>
+				</li>
+			</ul>
+			<!-- //버튼 배치 영역 -->
+			
+			<div id="gridList" style="width: 100%; height: 570px" class="ag-theme-balham"></div>
+		</div>
+		<!-- //리스트 영역 -->
+	</div>
+
+<script th:inline="javascript">
+/*<![CDATA[*/
+	let supplyCompList = gagajf.convertToArray([[${supplyCompList}]]);
+	let distributionGbList = gagajf.convertToArray([[${distributionGbList}]]);
+	let bankList = gagajf.convertToArray([[${bankList}]]);
+	
+	let columnDefs = [
+		{width: 40, minWidth: 40, cellClass: 'text-center', headerCheckboxSelection: true, checkboxSelection: true, filter: false},
+		{
+			headerName: "정산확정", field: "confirmYn", width: 100, cellClass: 'text-center',
+			cellRenderer: function(params) {
+				if (params.value == 'Y') {
+					return '<button type="button" class="btn btn-success btn-sm">확정</button>';
+				} else {
+					return '<button type="button" class="btn btn-danger btn-sm">해제</button>';
+				}
+			}
+		},
+		{
+			headerName: "공급업체", field: "supplyCompCd", width: 100, cellClass: 'text-center',
+			valueGetter: function (params) {
+				return gagaAgGrid.lookupValue(supplyCompList, params.data.supplyCompCd);
+			}
+		},
+		{ headerName: "전자계약여부", field: "econtractYn", width: 100, cellClass: 'text-center' },
+		{ headerName: "사업자등록번호", field: "bizNo", width: 120, cellClass: 'text-center' },
+		{ headerName: "정산주기", field: "settleDay", width: 100, cellClass: 'text-center' },
+		{ headerName: "판매수량", field: "sellQty", width: 100, cellClass: 'text-center' },
+		{ headerName: "판매총액", field: "sellAmt", width: 100, cellClass: 'text-right' },
+		{ headerName: "수수료", field: "sellFeeAmt", width: 100, cellClass: 'text-right' },
+		{ headerName: "쿠폰할인금액", field: "cpnDcAmt", width: 100, cellClass: 'text-right' },
+		{ headerName: "자사쿠폰분담액", field: "selfCpnDcAmt", width: 120, cellClass: 'text-right' },
+		{ headerName: "입점쿠폰분담액", field: "supplyCompCpnDcAmt", width: 120, cellClass: 'text-right' },
+		{ headerName: "계산서발행금액", field: "billAmt", width: 120, cellClass: 'text-right' },
+		{ headerName: "공급가액", field: "supplyAmt", width: 100, cellClass: 'text-right' },
+		{ headerName: "세액", field: "taxAmt", width: 100, cellClass: 'text-right' },
+		{ headerName: "배송비", field: "delvFeeAmt", width: 100, cellClass: 'text-right' },
+		{
+			headerName: "기타차감", field: "etcDeductAmt", width: 100, cellClass: 'text-right',
+			editable: true, cellEditor: 'numericCellEditor', cellEditorParams: { maxlength: 12, validType: 'integer' },
+			cellRenderer: function(params) { return gagajf.isNull(params.value) ? 0 : params.value.addComma(); },
+			cellStyle: { color: '#fffff', 'background-color': '#aaaaff' }
+		},
+		{ headerName: "지급금액", field: "giveAmt", width: 100, cellClass: 'text-right' },
+		{
+			headerName: "미수금", field: "receivableAmt", width: 100, cellClass: 'text-right',
+			editable: true, cellEditor: 'numericCellEditor', cellEditorParams: { maxlength: 12, validType: 'integer' },
+			cellRenderer: function(params) { return gagajf.isNull(params.value) ? 0 : params.value.addComma(); },
+			cellStyle: { color: '#fffff', 'background-color': '#aaaaff' }
+		},
+		{ headerName: "총지급금액", field: "totGiveAmt", width: 100, cellClass: 'text-right' },
+		
+		{
+			headerName: "상태", field: "settleStat", width: 100, cellClass: 'text-center',
+			cellRenderer: function (params) {
+				// 전자계약이 안 되어 있으면 "보류"
+				// 전자계약은 되어 있으나 지급금액 < 0 이면 "미수금" 그 외는 "정상"
+				if (params.data.econtractYn == 'N') {
+					return '보류';
+				}
+				
+				if (params.data.giveAmt < 0) {
+					return '미수금';
+				}
+				
+				return '정상';
+			}
+		},
+		{
+			headerName: "은행", field: "bankCd", width: 100, cellClass: 'text-center',
+			valueGetter: function (params) {
+				return gagaAgGrid.lookupValue(bankList, params.data.bankCd);
+			}
+		},
+		{ headerName: "계좌번호", field: "accountNo", width: 150, cellClass: 'text-center' },
+		{ headerName: "예금주명", field: "depositorNm", width: 100, cellClass: 'text-center' },
+		{ headerName: "계산서이메일", field: "billEmail", width: 100, cellClass: 'text-center' }
+	];
+
+	let gridOptions = gagaAgGrid.getGridOptions(columnDefs);
+
+	// 검색
+	$('#btnSearch').on('click', function() {
+		gagaAgGrid.fetch($('#searchForm').prop('action'), gridOptions, '#searchForm');
+	});
+	
+	// 세금계산서용 엑셀다운로드
+	$('#btnExcel').on('click', function() {
+		// DB 처리로 작업해야 함. 항목은 다음과 같음.
+		// 작성일
+		// 품목: "상품판매수수료"로 고정
+		// 공급가액: ROUND(현금거래액 / 1.1)
+		// 세액: 현금거래액 - 공급가액
+		// 현금거래액: ROUND(수수료 - 자사쿠폰분담액). < 0인 경우 0으로 표기
+		// 공급업체 / 사업자등록번호 / 대표자명 / 업태 / 업종 / 주소
+		// 정산담당자 / 정산담당자연락처 / 계산서이메일
+		// 세금계산서발행금액: ROUND(수수료 - 자사쿠폰분담액). < 0인 경우 0으로 표기
+	});
+	
+	$(document).ready(function() {
+		cfnCreateCalendar('#terms', 'startDt', 'endDt', true, '출고');
+		$('.btnToday').trigger('click');
+		
+		// Create a agGrid
+		gagaAgGrid.createGrid('gridList', gridOptions);
+	});
+/*]]>*/
+</script>
+
+</html>