Ver Fonte

이태영 - 20210526 네이버페이 주문형 개발 중

xodud lee há 5 anos atrás
pai
commit
98a18d7c3c

+ 7 - 11
src/main/java/com/style24/front/biz/service/TsfOrderService.java

@@ -1805,22 +1805,18 @@ public class TsfOrderService {
 					sb.append("\t\t<option>\n");
 
 					// 상품 옵션 전체 정보 조회
-					Collection<GoodsStock> optList = goodsDao.getGoodsOptionInfoList(opt);
+					List<GoodsStock> optList = (ArrayList<GoodsStock>) goodsDao.getGoodsOptionInfoList(opt);
 
 					String[] colorNmList = new String[optList.size()];
-					String[] colorList = new String[optList.size()];
 					String[] sizeList = new String[optList.size()];
 					int count = 0;
 
 					// 중복제거
 					for(GoodsStock optInfo : optList) {
-						colorNmList[count] = optInfo.getColorNm();
-						colorList[count] = optInfo.getOptCd1();
-						sizeList[count] = optInfo.getOptCd2();
-						count++;
+						colorNmList[count] = optInfo.getOptCd1() + "/" + optInfo.getColorNm();
+						sizeList[count++] = optInfo.getOptCd2();
 					}
 					colorNmList = new HashSet<String>(Arrays.asList(colorNmList)).toArray(new String[0]);
-					colorList = new HashSet<String>(Arrays.asList(colorList)).toArray(new String[0]);
 					sizeList = new HashSet<String>(Arrays.asList(sizeList)).toArray(new String[0]);
 
 					if("Y".equals(goods.getSelfGoodsYn())) {
@@ -1829,11 +1825,11 @@ public class TsfOrderService {
 						sb.append("\t\t\t<optionItem>\n");
 						sb.append("\t\t\t\t<type>SELECT</type>\n");
 						sb.append("\t\t\t\t<name>색상</name>\n");
-						int j = 0;
-						for (String color : colorList) {
+						for (String color : colorNmList) {
+							String[] optCd1Info = color.split("/");
 							sb.append("\t\t\t\t<value>\n");
-							sb.append("\t\t\t\t\t<id>").append(color).append("</id>\n");
-							sb.append("\t\t\t\t\t<text>").append(colorNmList[j++]).append("</text>\n");
+							sb.append("\t\t\t\t\t<id>").append(optCd1Info[0]).append("</id>\n");
+							sb.append("\t\t\t\t\t<text>").append(optCd1Info[1]).append("</text>\n");
 							sb.append("\t\t\t\t</value>\n");
 						}
 						sb.append("\t\t\t</optionItem>\n");

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

@@ -225,7 +225,7 @@
 		     , CASE WHEN VS.DISP_YN = 'Y' AND VS.SOLDOUT_YN = 'N' THEN VS.CURR_STOCK_QTY ELSE 0 END AS STOCK_QTY
 		FROM   VW_STOCK VS
 		WHERE  VS.GOODS_CD = #{goodsCd}
-		ORDER  BY VS.DISP_ORD
+		ORDER  BY VS.OPT_CD
 	</select>
 	
 	<!-- 핫딜 상품 조회 -->

+ 106 - 0
src/main/webapp/WEB-INF/views/web/goods/GoodsDealDetailFormWeb.html

@@ -20,6 +20,7 @@
 <th:block layout:fragment="content">
 <script src="/ux/pc/js/ion.rangeSlider.min.js"></script>
 <script src="https://developers.kakao.com/sdk/js/kakao.min.js"></script>
+<form id="nPayForm" name="nPayForm"></form>
 <div id="container" class="container pd deal" th:with="imgGoodsUrl=${@environment.getProperty('upload.goods.view')}, uxImgUrl=${@environment.getProperty('domain.uximage')}, imgUrl=${@environment.getProperty('upload.image.view')}">
 	<div class="wrap">
 		<!-- 상품 대표설명 -->
@@ -250,6 +251,111 @@
 								</th:block>
 								</div>
 							</div>
+
+							<div style="margin-top:10px;">
+								<th:block th:with="buttonKey=${@environment.getProperty('naverPay.button.key')}">
+									<script type="text/javascript" src="https://pay.naver.com/customer/js/naverPayButton.js" charset="UTF-8"></script>
+									<script type="text/javascript" >
+										/*버튼설정*/
+										naver.NaverPayButton.apply({
+											BUTTON_KEY              : "[[${buttonKey}]]",       // 네이버페이에서 제공받은 버튼 인증 키 입력
+											TYPE                    : "C",                      // 버튼 모음 종류 설정
+											COLOR                   : 1,                        // 버튼 모음의 색 설정
+											COUNT                   : 1,                        // 버튼 개수 설정. 구매하기 버튼만 있으면(장바구니 페이지) 1, 찜하기 버튼도 있으면(상품 상세 페이지) 2를 입력.
+											ENABLE                  : "Y",                      // 품절 등의 이유로 버튼 모음을 비활성화할 때에는 "N" 입력
+											BUY_BUTTON_HANDLER      : buy_nc,                   // 구매하기 버튼 이벤트 Handler 함수 등록, 품절인 경우 not_buy_nc 함수 사용
+											"":""
+										});
+
+										/*네이버구매하기*/
+										function buy_nc(url) {
+											// 자사 일반 상품 정보
+											let compsList = [];
+
+											$("#cartForm .result_item input[name=cea]").each(function() {
+												let dealGoodsCd = "[[${goodsInfo.goodsCd}]]";
+												let goodsType = "[[${goodsInfo.goodsType}]]";
+												let goodsCd = $(this).parent().find("input[name=coption]").attr("goodscd");
+												let optCd = $(this).attr("optcd");
+												let goodsQty = $(this).val();
+
+												if (!goodsCd) {
+													mcxDialog.alert("상품정보가 존재하지 않습니다. 새로고침 후 다시 시도해주세요.");
+													return false;
+												}
+
+												if (!goodsQty || goodsQty < 1) {
+													mcxDialog.alert("구매 수량을 확인해주세요.");      /*수량*/
+													return false;
+												}
+
+												if (!optCd) {
+													mcxDialog.alert("상품 옵션을 확인 할 수 없습니다. 새로고침 후 다시 시도해주세요.");   /*옵션*/
+													return false;
+												}
+
+												var obj = new Object();
+												obj.cartGb = "N";
+												obj.goodsType = goodsType;
+												obj.goodsCd = goodsCd;
+												obj.optCd = optCd;
+												obj.goodsQty = goodsQty;
+												obj.dealGoodsCd = $("#cartForm  input[name=goodsCd]").val();
+												obj.afLinkCd =$("#cartForm  input[name=afLinkCd]").val();
+												obj.ithrCd =$("#cartForm  input[name=ithrCd]").val();
+												obj.contentsLoc =$("#cartForm  input[name=contentsLoc]").val();
+												obj.planDtlSq = $("#cartForm  input[name=planDtlSq]").val();
+												compsList.push(obj);
+											});
+
+											// 장바구니담기
+											cfnAddCart(compsList);
+
+											return false;
+										}
+
+										function buy_nc_req(cartSqArr) {
+											let data = {  cartSqArr : cartSqArr
+												, backUrl : location.href
+												, goodsUrl : _PAGE_GOODS_DETAIL
+											};
+											let jsonData = JSON.stringify(data);
+
+											$.ajax( {
+												type		: "POST",
+												url 		: "/pg/nPayReq",
+												dataType 	: 'json',
+												data		: jsonData,
+												beforeSend : function(xhr, settings) {
+													xhr.setRequestHeader("AJAX"			, "true");
+													xhr.setRequestHeader('Accept'		, 'application/json');
+													xhr.setRequestHeader('Content-Type'	, 'application/json');
+												},
+												error: function(xhr, status, error) {
+													mcxDialog.alert(status + '; ' + error);
+												},
+												success : function(result) {
+													if (result.state == "sucess") {
+														window.open('about:blank', 'popupView');
+														document.nPayForm.target = 'popupView';
+														document.nPayForm.action = result.npayOrderUrl + "/" + result.orderKey + "/" + result.resultNo;
+														document.nPayForm.submit();
+													} else {
+														mcxDialog.alert(result.message);
+													}
+												}
+											});
+										}
+
+										<!-- 구매불가 -->
+										function not_buy_nc() {
+											mcxDialog.alert("죄송합니다. 네이버페이로 구매가 불가한 상품입니다.");
+											return false;
+										}
+										//]]>
+									</script>
+								</th:block>
+							</div>
 						</div>
 					</div>
 					</form>

+ 0 - 2
src/main/webapp/WEB-INF/views/web/goods/GoodsDetailFormWeb.html

@@ -431,8 +431,6 @@
 												// 장바구니담기
 												cfnAddCart(compsList);
 											} else {
-												// TODO 세트상품 추가 예정
-												//alert("개발 중");
 												let itemCds = [];
 												let optCds = [];
 												$("#cartForm .area_desc .option_box .opt_set_select .item_opt2 .list>li").each(function() {