Преглед изворни кода

카테고리별 상품관리

bin2107 пре 5 година
родитељ
комит
83f1924b5f

+ 26 - 0
src/main/java/com/style24/persistence/domain/CategoryGoods.java

@@ -15,6 +15,32 @@ import lombok.Data;
 public class CategoryGoods extends TscBaseDomain {
 
 	private Integer cateNo;		// 카테고리번호
+	private Integer selLvl;
+	private String siteCd;
+	private String cateGb;
+	private String cate1No;
+	private String cate2No;
+	private String cate3No;
+	private String cate4No;
+	private String searchGb;
+
+	private int rnum;
+	private String goodsCd;
+	private String goodsTnm;
+	private String goodsNm;
+	private int dispOrd;
+	private String goodsType;
+	private Integer tagPrice;				// tag가
+	private Integer listPrice;				// 정상가
+	private Integer currPrice;				// 현재가
+	private String dcRate;					// 할인율
+	private String goodsStat;
+	private String brandCd;
+	private String supplyGoodsCd;
+	private String styleYear;	//스타일연도
+	private String formalGb;
+
+	private int stockQty;
 
 	// Pagination
 	private TscPageRequest pageable;

+ 88 - 1
src/main/java/com/style24/persistence/mybatis/shop/TsaDsiplay.xml

@@ -979,7 +979,7 @@
 			FROM TB_GOODS G
 			, (SELECT SEARCH_CD, MIN(DISP_ORD) AS TMP_DISP_ORD
 			FROM TB_SEARCH_DATA
-			WHERE REG_ID = #{regId}
+			WHERE REG_NO = #{regNo}
 			GROUP BY SEARCH_CD
 			) D
 			WHERE G.GOODS_CD LIKE D.SEARCH_CD||'%'
@@ -988,4 +988,91 @@
 		</if>
 		WHERE A.GOODS_CD = G.GOODS_CD
 	</select>
+
+	<select id="getCategoryGoodsList" parameterType="CategoryGoods" resultType="CategoryGoods">
+		/* TsaDisplay.getCategoryGoodsList */
+		SELECT Z.*
+		FROM ( SELECT @rownum := @rownum + 1 AS RNUM
+					, A.*
+			   FROM ( SELECT G.GOODS_CD
+						   , G.GOODS_TNM
+						   , G.GOODS_NM
+						   , A.CATE_NO
+						   , A.DISP_ORD
+						   , G.GOODS_TYPE
+						   , G.TAG_PRICE
+						   , G.LIST_PRICE
+						   , G.CURR_PRICE
+						   , G.DC_RATE
+						   , G.GOODS_STAT
+						   , G.BRAND_CD
+						   , A.REG_NO
+						   , A.REG_DT
+						   , G.SUPPLY_GOODS_CD
+						   , G.STYLE_YEAR
+						   , NVL(G.FORMAL_GB,'10') AS FORMAL_GB
+					   FROM ( SELECT A.GOODS_CD
+								   , A.CATE_NO
+								   , A.DISP_ORD
+								   , A.REG_NO
+								   , A.REG_DT
+							   FROM TB_CATE_GOODS A
+							   WHERE 1=1
+								<if test='selLvl == "3"'>
+									AND CATE_NO  = #{cate1No}
+								</if>
+								<if test='selLvl == "4"'>
+									AND CATE_NO  = #{cate2No}
+								</if>
+								<if test='selLvl == "5"'>
+									AND CATE_NO  = #{cate3No}
+								</if>
+								<if test='selLvl == "6"'>
+									AND CATE_NO  = #{cate4No}
+								</if>
+							   AND EXISTS (   SELECT 1
+											   FROM TB_CATE_4SRCH
+											   WHERE 1=1
+												<if test='selLvl == "3"'>
+													AND CATE1_NO  = A.CATE_NO
+												</if>
+												<if test='selLvl != "3"'>
+													AND CATE1_NO  = #{cate1No}
+													<if test='selLvl == "4"'>
+														AND CATE2_NO  = A.CATE_NO
+													</if>
+													<if test='selLvl != "4"'>
+														AND CATE2_NO  = #{cate2No}
+														<if test='selLvl == "5"'>
+															AND CATE3_NO  = A.CATE_NO
+														</if>
+														<if test='selLvl == "6"'>
+															AND CATE3_NO  = #{cate3No}
+															AND CATE4_NO  = A.CATE_NO
+														</if>
+													</if>
+												</if>
+											)
+							   ) A
+						<if test="searchGb == null or searchGb =='BASIC'">
+							, TB_GOODS G
+						</if>
+						<if test="searchGb != null and searchGb =='EXCEL'">
+							, (SELECT G.*
+							, TMP_DISP_ORD
+							FROM TB_GOODS G
+							, (SELECT SEARCH_CD, MIN(DISP_ORD) AS TMP_DISP_ORD
+							FROM TB_SEARCH_DATA
+							WHERE REG_NO = #{regNo}
+							GROUP BY SEARCH_CD
+							) D
+							WHERE G.GOODS_CD LIKE D.SEARCH_CD||'%'
+							OR G.SUPPLY_GOODS_CD LIKE D.SEARCH_CD||'%'
+							) G
+						</if>
+					   JOIN ( SELECT @rownum := 0) R
+					   WHERE A.GOODS_CD = G.GOODS_CD
+					   ORDER BY A.DISP_ORD ASC, G.UPD_DT DESC, G.CURR_PRICE DESC, G.GOODS_CD ASC
+			<include refid="getListPagingCondition_sql"/>
+	</select>
 </mapper>

+ 94 - 102
src/main/webapp/WEB-INF/views/display/CategoryGoodsForm.html

@@ -26,8 +26,9 @@
 	<!-- //메뉴 설명 -->
 
 	<!-- 검색조건 영역 -->
-	<div class="panelStyle">
-		<form id="searchForm" name="searchForm" action="#" th:action="@{'/display/category/list'}" onsubmit="$('#btnSearch').trigger('click'); return false;">
+	<form id="searchForm" name="searchForm" action="#" th:action="@{'/display/category/goods/list'}" onsubmit="$('#btnSearch').trigger('click'); return false;">
+		<div class="panelStyle">
+			<input type="hidden" id="searchGb" name="searchGb" />
 			<table class="frmStyle" aria-describedby="검색조건">
 				<colgroup>
 					<col width="10%"/>
@@ -60,35 +61,71 @@
 					</td>
 				</tr>
 			</table>
-		</form>
-	</div>
+		</div>
 	<!-- 검색조건 영역 -->
 
-	<!-- 리스트 영역 -->
+	<!-- 패널 영역1 -->
 	<div class="panelStyle">
-		<div id="gridList" style="width: 100%; height: 470px" class="ag-theme-balham"></div>
+		<!-- 상단버튼 영역  -->
+		<ul class="panelBar">
+			<li>
+				<span id="goodsSearch" class="btnLeft" style="display:none">
+					<span style="padding:5.5px 15px; background:#d8eafc !important; border-top:1px solid #ddd; border-bottom:0.5px solid #dae0fd; font-weight: bold;">상품코드</span>
+					<input type="text" class="w100" name="goodsCd" id="goodsCd" />
+					<button type="button" class="btn btn-base btn-lg" id="btnSearch">조회</button>
+					<button type="button" class="btn btn-default btn-lg" onclick="cfnDownloadSampleFile('SF003');">엑셀조회 양식 다운로드</button>
+					<button type="button" class="btn btn-base btn-lg" id="btnExcelSearch">엑셀조회</button>
+				</span>
+			</li>
+			<li class="right">
+				검색결과 : <strong><span id="gridRowTotalCount">0</span> 건</strong>&nbsp;
+				쪽번호 <span id="pgNo">0</span>/ <strong id="endPgNo">0</strong>&nbsp;&nbsp;
+				<select id="pageSize" name="pageSize">
+					<option value="50" selected="selected">50개씩 보기</option>
+					<option value="100">100개씩 보기</option>
+					<option value="500">500개씩 보기</option>
+					<option value="1000">1000개씩 보기</option>
+				</select>
+				<input type="hidden" name="pageNo" id="pageNo" value ="1"/>
+			</li>
+		</ul>
+		<!-- 검색결과 영역 -->
+		<!--<div id="gridList" style="width: 100%; height: 700px;" class="ag-theme-balham lh60"></div>-->
+		<div id="gridList" style="width: 100%; height: 570px" class="ag-theme-balham"></div>
+		<ul class="panelBar">
+			<li class="center">
+				<div class="tablePaging" id="categoryGoodsListPagination"></div>
+			</li>
+		</ul>
+		<ul class="panelBar">
+			<li class="aR" id="btnGoodsEdit" style="display:none">
+				<button type="button" class="btn btn-primary btn-lg leafCateBtn" id="btnAddGoods">상품추가</button>
+				<!-- <button type="button" class="btn btn-primary btn-lg" id="btnDispChange">순서변경</button>
+                <button type="button" class="btn btn-primary btn-lg" id="btnSelectTop">선택최상위로</button> -->
+				<button type="button" class="btn btn-danger btn-lg" id="btnSelectDel">선택삭제</button>
+			</li>
+		</ul>
 	</div>
-	<!-- //리스트 영역 -->
 
-	<!-- 등록/수정 -->
-	<div class="panelStyle">
-		<form id="detailForm" name="detailForm" action="#" th:action="@{'/display/category/save'}">
+	<!-- 상품이동/복사 -->
+	<div class="panelStyle" id="addCategory" style="display:none">
+		<form id="saveForm" name="saveForm" action="#" th:action="@{'/display/goods/category/save'}">
 
 		</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>
-				<!--<button type="button" class="btn btn-base btn-lg" id="btnRefresh4Srch" th:if="${sessionInfo.roleCd == 'G001_0000'}">4SRCH 갱신</button>-->
+				<button type="button" class="btn btn-primary btn-lg leafCateBtn" id="btnMoveGoods">상품이동</button>
+				<button type="button" class="btn btn-primary btn-lg leafCateBtn" id="btnCopyGoods">상품복사</button>
 			</li>
 		</ul>
 		<!-- //버튼 배치 영역 -->
 	</div>
-	<!-- 등록/수정 -->
+	<!-- 상품이동/복사 -->
+	</form>
 </div>
-
+<script type="text/javascript" src="/ux/plugins/gaga/gaga.paging.js?v=2019072202"></script>
 <script th:inline="javascript">
 	/*<![CDATA[*/
 	let siteList = gagajf.convertToArray([[${siteList}]]);
@@ -97,80 +134,32 @@
 	let formalGbList = gagajf.convertToArray([[${formalGbList}]]);
 	let conentsLocList = gagajf.convertToArray([[${conentsLocList}]]);
 
-	let columnDefs = [
-		{
-			headerName: "사이트", field: "siteCd", width: 150, cellClass: 'text-center',
-			valueFormatter: function (params) { return gagaAgGrid.lookupValue(siteList, params.value); }
-		},
-		{
-			headerName: "카테고리구분", field: "cateGb", width: 150, cellClass: 'text-center',
-			cellRenderer: function (params) { return gagaAgGrid.lookupValue(cateGbList, params.value); }
-		},
-		{headerName: "카테고리번호", field: "cateNo", width: 150, cellClass: 'text-center'},
-		{
-			headerName: "카테고리명", field: "cateNm", width: 150, cellClass: 'text-center',
-			cellRenderer: function(params) {
-				return '<a href="javascript:void(0);">' + params.value + '</a>';
-			}
-		},
-		{
-			headerName: "카테고리유형", field: "cateType", width: 150, cellClass: 'text-center',
-			cellRenderer: function (params) { return gagaAgGrid.lookupValue(cateTypeList, params.value); }
-		},
-		{headerName: "말단여부", field: "leafYn", width: 80, cellClass: 'text-center'},
-		{headerName: "노출순서", field: "dispOrd", width: 100, cellClass: 'text-center'},
-		{
-			headerName: "정상이월구분", field: "formalGb", width: 150, cellClass: 'text-center',
-			cellRenderer: function (params) { return gagaAgGrid.lookupValue(formalGbList, params.value); }
-		},
-		{
-			headerName: "컨텐츠위치", field: "contentsLoc", width: 200, cellClass: 'text-center',
-			cellRenderer: function (params) { return gagaAgGrid.lookupValue(conentsLocList, params.value); }
-		},
-		{headerName: "노출여부", field: "dispYn", width: 80, cellClass: 'text-center'},
-		{headerName: "사용여부", field: "useYn", width: 80, cellClass: 'text-center'}
+	let columnDefs1 = [
+		{width: 40, minWidth: 40, cellClass: 'text-center', headerCheckboxSelection: true, checkboxSelection: true, filter: false},
+		/*{headerName: 'No', width: 60, cellClass: 'text-center',
+			valueGetter: function(params) { return cfnGridNumner('searchForm',params.node.rowIndex, 'A');}
+		},*/
+		{headerName: "상품코드", field: "goodsCd", width: 150, cellClass: 'text-center'},
+		{headerName: "상품타이틀명", field: "goodsTnm", width: 150, cellClass: 'text-center'},
+		{headerName: "상품명", field: "goodsNm", width: 200, cellClass: 'text-center'},
+		{headerName: "카테고리번호", field: "cateNo", width: 120, cellClass: 'text-center'},
+		{headerName: "표시순서", field: "dispOrd", width: 80, cellClass: 'text-center'},
+		{headerName: "상품타입", field: "goodsType", width: 100, cellClass: 'text-center'},
+		{headerName: "TAG가", field: "tagPrice", width: 80, cellClass: 'text-center'},
+		{headerName: "정상가", field: "listPrice", width: 80, cellClass: 'text-center'},
+		{headerName: "현재판매가", field: "currPrice", width: 80, cellClass: 'text-center'},
+		{headerName: "할인율", field: "dcRate", width: 80, cellClass: 'text-center'},
+		{headerName: "상품상태", field: "goodsStat", width: 80, cellClass: 'text-center'},
+		{headerName: "브랜드코드", field: "brandCd", width: 80, cellClass: 'text-center'},
+		{headerName: "공급업체상품코드", field: "supplyGoodsCd", width: 80, cellClass: 'text-center'},
+		{headerName: "스타일구분", field: "styleYear", width: 80, cellClass: 'text-center'},
+		{headerName: "정상/이월", field: "formalGb", width: 80, cellClass: 'text-center'},
+		{headerName: "등록자", field: "regNo", width: 80, cellClass: 'text-center'},
+		{headerName: "등록일시", field: "regDt", width: 80, cellClass: 'text-center'}
 	];
 
-	let gridOptions = gagaAgGrid.getGridOptions(columnDefs);
-
-	// Cell click
-	gridOptions.onCellClicked = function(event) {
-		if (event.colDef.field != 'cateNm')
-			return;
-
-		$("#btnNew").click();
-		$('#detailForm input[name=siteCd]').val(event.data.siteCd);
-		$('#detailForm input[name=cateNo]').val(event.data.cateNo);
-		$('#detailForm input[name=cateNm]').val(event.data.cateNm);
-		$('#detailForm select[name=cateType]').val(event.data.cateType);
-
-		// 상위카테고리
-		var selLvl = $("#searchForm input[name=selLvl]").val();
-		for (let i = 1; i <= 5; i++) {
-			$("#cateLvl" + i).html($("#selCate" + i).html());
-			$("#cateLvl" + i).val($("#selCate" + i).val());
-			if (i >= selLvl) {
-				$("#cateLvl" + i).hide();
-			} else {
-				$("#cateLvl" + i).show();
-			}
-		}
-		$('#detailForm input[name=selLvl]').val(selLvl);
-
-		$('#detailForm input[name=dispOrd]').val(event.data.dispOrd);
-		$('#detailForm select[name=formalGb]').val(event.data.formalGb);
-		$('#detailForm select[name=contentsLoc]').val(event.data.contentsLoc);
-
-		// 카테고리유형에 따른 컨텐츠위치 설정 변경
-		if (event.data.cateType == 'G031_10') {
-			$('#detailForm select[name=contentsLoc]').prop('disabled', true);
-		} else if (event.data.cateType == 'G031_20') {
-			$('#detailForm select[name=contentsLoc]').prop('disabled', false);
-		}
-
-		$('#detailForm input:radio[name=dispYn]:input[value=' + event.data.dispYn + ']').click();
-		$('#detailForm input:radio[name=useYn]:input[value=' + event.data.useYn + ']').click();
-	}
+	let gridOptions = gagaAgGrid.getGridOptions(columnDefs1);
+	gridOptions.rowSelection = "multiple";
 
 	/**
 	 * 검색폼의 카테고리 선택 시
@@ -179,11 +168,14 @@
 		if (gagajf.isNull(val)) {
 			if (selLvl > 1) {
 				selLvl = selLvl - 1;
+				$("#goodsSearch").show();
+				$("#btnGoodsEdit").show();
 			} else {
 				selLvl = 1;
 			}
 		}
 		$('#searchForm input[name=selLvl]').val(selLvl);
+		$("#searchForm input[name=searchGb]").val("BASIC");
 
 		var data = { siteCd : 'G000_10'
 			, selLvl : selLvl
@@ -192,6 +184,7 @@
 			, cate2No : $('#searchForm select[name=cate2No]').val()
 			, cate3No : $('#searchForm select[name=cate3No]').val()
 			, cate4No : $('#searchForm select[name=cate4No]').val()
+			, searchGb : $("#searchForm input[name=searchGb]").val()
 		};
 
 		var jsonData = JSON.stringify(data);
@@ -215,27 +208,26 @@
 		}
 
 		$("#selCate" + selLvl).append(tag);
-		//$("#btnNew").click();
 
 		// 대카테고리 이상이면 상품 조회해서 그리드
-		if(selLvl > 1){
-			var data = { siteCd : 'G000_10'
-				, selLvl : selLvl
-				, cateGb : $('#searchForm select[name=cateGb]').val()
-				, cate1No : $('#searchForm select[name=cate1No]').val()
-				, cate2No : $('#searchForm select[name=cate2No]').val()
-				, cate3No : $('#searchForm select[name=cate3No]').val()
-				, cate4No : $('#searchForm select[name=cate4No]').val()
-			};
-
-			var jsonData = JSON.stringify(data);
-			gagajf.ajaxJsonSubmit('/display/category/goods/list', jsonData, fnCategoryGoodsListCallBack);
+		if(selLvl > 2){
+			$('#searchForm input[name=selLvl]').val(selLvl);
+			fnCategoryGoodsListSearch();
 		}
 	}
 
-	// 카테고리별 상품 조회하고 데이터 그리드
-	var fnCategoryGoodsListCallBack = function (data){
+	var fnCategoryGoodsListSearch = function(){
+		gagaPaging.init('searchForm', fnSearchCallBack, 'categoryGoodsListPagination', $('#searchForm').find('#pageSize').val());
+		gagaPaging.load(1);
+	}
 
+	var fnSearchCallBack = function(result){
+		$('#searchForm').find('#gridRowTotalCount').html(result.pageing.pageable.totalCount.addComma());
+		$('#searchForm').find('#pageNo').val(result.pageing.pageable.pageNo.addComma());
+		$('#searchForm').find('#pgNo').html(result.pageing.pageable.pageNo.addComma());
+		$('#searchForm').find('#endPgNo').html(result.pageing.pageable.totalPage.addComma());
+		gridOptions.api.setRowData(result.categoryGoodsList);
+		gagaPaging.createPagination(result.pageing.pageable);
 	}
 
 	// 신규