ソースを参照

Merge remote-tracking branch 'origin/xodud1202' into develop

xodud1202 5 年 前
コミット
40c2e4c4f1

+ 22 - 0
src/main/java/com/style24/front/biz/dao/TsfOrderChangeDao.java

@@ -3,7 +3,9 @@ package com.style24.front.biz.dao;
 import java.util.Collection;
 
 import com.style24.core.support.annotation.ShopDs;
+import com.style24.persistence.domain.GiftCard;
 import com.style24.persistence.domain.Order;
+import com.style24.persistence.domain.Point;
 
 /**
  * 주문 변경 Dao
@@ -24,4 +26,24 @@ public interface TsfOrderChangeDao {
 	 */
 	Collection<Order> getCancelListForMypage(Order order);
 
+	/**
+	 * 사용 상품권 정보 조회
+	 *
+	 * @param Order
+	 * @return Collection<GiftCard>
+	 * @author card007
+	 * @since 2021. 03. 02
+	 */
+	Collection<GiftCard> getUsedGiftcardInfo(Order order);
+
+	/**
+	 * 사용 포인트 정보 조회
+	 *
+	 * @param Order
+	 * @return Collection<Point>
+	 * @author card007
+	 * @since 2021. 03. 02
+	 */
+	Collection<Point> getUsedPointInfo(Order order);
+
 }

+ 26 - 0
src/main/java/com/style24/front/biz/service/TsfOrderChangeService.java

@@ -15,7 +15,9 @@ import com.gagaframework.web.parameter.GagaMap;
 import com.style24.core.support.env.TscConstants;
 import com.style24.front.biz.dao.TsfOrderChangeDao;
 import com.style24.front.biz.dao.TsfOrderDao;
+import com.style24.persistence.domain.GiftCard;
 import com.style24.persistence.domain.Order;
+import com.style24.persistence.domain.Point;
 
 import lombok.extern.slf4j.Slf4j;
 
@@ -72,4 +74,28 @@ public class TsfOrderChangeService {
 		return map;
 	}
 
+	/**
+	 * 사용 상품권 정보 조회
+	 *
+	 * @param Order
+	 * @return Collection<GiftCard>
+	 * @author card007
+	 * @since 2021. 03. 02
+	 */
+	public Collection<GiftCard> getUsedGiftcardInfo(Order order) {
+		return orderChangeDao.getUsedGiftcardInfo(order);
+	}
+
+	/**
+	 * 사용 포인트 정보 조회
+	 *
+	 * @param Order
+	 * @return Collection<Point>
+	 * @author card007
+	 * @since 2021. 03. 02
+	 */
+	public Collection<Point> getUsedPointInfo(Order order) {
+		return orderChangeDao.getUsedPointInfo(order);
+	}
+
 }

+ 7 - 10
src/main/java/com/style24/front/biz/web/TsfMypageController.java

@@ -463,18 +463,15 @@ public class TsfMypageController extends TsfBaseController {
 		mav.addObject("customerInfo", customer);
 
 
-		// // 주문목록 조회
-		// Collection<GagaMap> orderList = orderService.getOrderListForMypage(order);
-		//
-		// if (orderList.size() == 0) {
-		// 	mav.setViewName("redirect:/mypage/order/list/form");
-		// 	return mav;
-		// }
-		//
-		// mav.addObject("orderList", orderList);
-		
+		// 반품 가능 리스트 조회
 		mav.addObject("returnList", orderChangeService.getCancelListForMypage(order));
 
+		// 사용 상품권 정보 조회
+		mav.addObject("usedGiftCardInfo", orderChangeService.getUsedGiftcardInfo(order));
+
+		// 사용 포인트 정보 조회
+		mav.addObject("usedPointInfo", orderChangeService.getUsedPointInfo(order));
+
 		// 주문 결제정보 조회
 		mav.addObject("paymentInfo", orderService.getPaymentInfoForMypage(order));
 

+ 0 - 44
src/main/java/com/style24/persistence/domain/Coupon.java

@@ -1,44 +0,0 @@
-package com.style24.persistence.domain;
-
-import com.fasterxml.jackson.annotation.JsonFormat;
-import com.style24.persistence.TscBaseDomain;
-
-import lombok.Data;
-
-/**
- * 장바구니
- *
- * @author xodud1202
- * @since 2021.01.22
- */
-@SuppressWarnings("serial")
-@Data
-public class Coupon extends TscBaseDomain {
-	// 쿠폰 정보
-	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
-	private int[] cartSqArr;		// 장바구니 일련번호 배열
-	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
-	private int[] currPrices;		// 상품가격 배열
-	private int cpnId;				// 쿠폰번호
-	private int custNo;				// 회원번호
-	private String custGb;			// 회원구분
-	private String custGrade;		// 회원등급
-	private int availDays;			// 쿠폰 다운로드 후 유효기간일
-	private int rdCpnId;			// 랜덤쿠폰번호
-	private int dcAmt;				// 할인적용금액
-	private int dcVal;				// 할인금액/율
-	private String useYn;			// 쿠폰 사용 여부
-	private String cpnNm;			// 쿠폰명
-	private String rdCpnNm;			// 시리얼쿠폰 키
-	private String usedDt;			// 쿠폰 사용완료 일자
-	private String result;			// 결과
-	private String pdGb;			// 기간/일수 구분 (P : 기간, D : 일수)
-	private String availStdt;		// 쿠폰 유효일
-	private String availEddt;		// 쿠폰 유효일
-	private String endAlimYn;		// 쿠폰 종료 알림 여부
-	private String frontGb;			// 화면 구분
-	private String availYn;			// 지급 받은 쿠폰 사용 가능 유무
-	private String dcWay;			// 할인금액/율 구분
-	private String cpnDesc;			// 쿠폰설명
-	private int downloadCnt;		// 다운로드수
-}

+ 19 - 4
src/main/java/com/style24/persistence/mybatis/shop/TsfCart.xml

@@ -531,6 +531,10 @@
 					 , IFNULL(O.ADD_PRICE, 0) AS OPT_ADD_PRICE
 					 , BR.BRAND_ENM
 		             , BR.BRAND_KNM
+		             , CT.CUST_GRADE
+					 , CASE WHEN GOG.CUST_GRADE IS NOT NULL AND GOG.CUST_GRADE = IFNULL(CT.CUST_GRADE, '') THEN GOG.CUST_GRADE
+							WHEN GOG.CUST_GRADE IS NOT NULL THEN 'NO'
+							ELSE CT.CUST_GRADE END AS ORDER_GRADE
 					 , (SELECT SUPPLY_COMP_NM FROM TB_SUPPLY_COMPANY WHERE SUPPLY_COMP_CD = G.SUPPLY_COMP_CD) AS SUPPLY_COMP_NM
 					 , (SELECT GOODS_NM FROM TB_GOODS WHERE GOODS_CD = CD.ITEM_CD) AS ITEM_NM
 					 , CASE WHEN G.SELF_GOODS_YN = 'Y' THEN 'WMS'
@@ -602,12 +606,16 @@
 									   ) A
 								GROUP  BY  A.CART_SQ
 					   ) STOCK
-				ON	 C.CART_SQ = STOCK.CART_SQ
+				ON	   C.CART_SQ = STOCK.CART_SQ
+				LEFT   OUTER JOIN TB_CUSTOMER CT
+				ON     C.CUST_NO = CT.CUST_NO
+				LEFT   OUTER JOIN TB_GOODS_ORDER_GRADE GOG
+				ON     G.GOODS_CD = GOG.GOODS_CD
 				WHERE  G.SELF_MALL_YN = 'Y'
-				AND	G.GOODS_STAT = 'G008_90'
+				AND    G.GOODS_STAT = 'G008_90'
 				<if test="custNo == 0">
-				AND	C.CUST_NO = 0
-				AND	C.JSESSION_ID = #{jsessionId}
+				AND    C.CUST_NO = 0
+				AND    C.JSESSION_ID = #{jsessionId}
 				</if>
 				<if test="custNo != 0">
 				AND	C.CUST_NO = #{custNo}
@@ -619,6 +627,13 @@
 					</foreach>
 				</if>
 				ORDER BY G.SUPPLY_COMP_CD ) Z
+		WHERE  1=1
+		<if test="custNo != 0">
+		AND    Z.ORDER_GRADE = Z.CUST_GRADE
+		</if>
+		<if test="custNo == 0">
+		AND    Z.ORDER_GRADE IS NULL
+		</if>
 		GROUP  BY Z.CART_SQ
 			 , Z.GOODS_CD
 			 , Z.GOODS_QTY

+ 49 - 2
src/main/java/com/style24/persistence/mybatis/shop/TsfOrderChange.xml

@@ -17,7 +17,7 @@
 
 	<!-- 마이페이지 취소/반품 목록 조회 -->
 	<select id="getCancelListForMypage" parameterType="Order" resultType="Order">
-		/* TscOrder.getCancelListForMypage */
+		/* TscOrderChange.getCancelListForMypage */
 		SELECT O.ORD_NO
 		     , DATE_FORMAT(O.ORD_DT, '%Y.%m.%d')				AS ORD_DT
 		     , OD.ORD_DTL_NO
@@ -57,6 +57,7 @@
 		     , CASE WHEN OCD.ORD_REQ_CHG_QTY IS NULL THEN 0
 					ELSE OCD.ORD_REQ_CHG_QTY * ODI.ITEM_QTY
 				END												AS ORD_REQ_CHG_QTY
+		     , OD.ORD_QTY - OD.CNCL_RTN_QTY - IF(OCD.ORD_REQ_CHG_QTY IS NULL, 0, OCD.ORD_REQ_CHG_QTY * ODI.ITEM_QTY) AS ORD_CAN_CHG_QTY
 		     , OD.SAVE_PNT_AMT
 		     , OD.SHIP_COMP_CD
 		     , OD.GIFT_PACK_YN
@@ -166,5 +167,51 @@
 		</where>
 		 ORDER BY OD.ORD_DTL_NO
 	</select>
-
+	
+	<!-- 사용 상품권 정보 조회 -->
+	<select id="getUsedGiftcardInfo" parameterType="Order" resultType="GiftCard">
+		/* TscOrderChange.getUsedGiftcardInfo */
+		SELECT CGH.ORD_NO
+			 , CGH.ORD_DTL_NO
+			 , SUM(CGH.GFCD_AMT) AS GFCD_AMT
+		  FROM TB_CUST_GIFTCARD_HST CGH
+		 INNER JOIN TB_CUST_GIFTCARD CG
+		    ON CG.CUST_GFCD_SQ = CGH.CUST_GFCD_SQ
+		 WHERE CGH.CUST_NO = #{custNo}
+		   AND CGH.ORD_NO = #{ordNo}
+		<if test="ordDtlNoArr != null">
+		   AND CGH.ORD_DTL_NO IN
+			<foreach collection="ordDtlNoArr" item="item" index="index"  open="(" close=")" separator=",">
+				#{item}
+			</foreach>
+		</if>
+		   AND OCCUR_GB = 'G074_12'
+		   AND NOW() BETWEEN CG.USE_ST_DATE AND CG.USE_EXP_DATE
+		 GROUP BY CGH.ORD_NO, CGH.ORD_DTL_NO
+		 ORDER BY CGH.ORD_NO, CGH.ORD_DTL_NO
+	</select>
+	
+	<!-- 사용 포인트 정보 조회 -->
+	<select id="getUsedPointInfo" parameterType="Order" resultType="Point">
+		/* TscOrderChange.getUsedPointInfo */
+		SELECT CPH.ORD_NO
+			 , CPH.ORD_DTL_NO
+			 , SUM(CPH.PNT_AMT) AS PNT_AMT
+		  FROM TB_CUST_POINT_HST CPH
+		  INNER JOIN TB_CUST_POINT CP
+		  ON CP.CUST_PNT_SQ = CPH.CUST_PNT_SQ
+		 WHERE CPH.CUST_NO = #{custNo}
+		   AND CPH.ORD_NO = #{ordNo}
+		<if test="ordDtlNoArr != null">
+		   AND CPH.ORD_DTL_NO IN
+			<foreach collection="ordDtlNoArr" item="item" index="index"  open="(" close=")" separator=",">
+				#{item}
+			</foreach>
+		</if>
+		   AND CPH.OCCUR_GB = 'G069_10'
+		   AND CP.EXP_BE_DT <![CDATA[>]]> NOW()
+		   AND CP.EXP_CMP_DT IS NULL
+		 GROUP BY CPH.ORD_NO, CPH.ORD_DTL_NO
+		 ORDER BY CPH.ORD_NO, CPH.ORD_DTL_NO
+	</select>
 </mapper>

+ 14 - 6
src/main/resources/config/application-locd.yml

@@ -56,9 +56,17 @@ download.path: /WIDE/workspace/files/data
 
 # PG
 pg:
-    nicepay:
-        merchantId: nictest00m
-        merchantKey: 33F49GnCMS1mFYlGXisbUDzVf2ATWCl9k3R++d5hDd3Frmuos/XLx8XhXpe+LDYAbpGKZYSwtlyyLOtS/8aD7A==
-        log.path: /WIDE/workspace/logs/wivis
-        account.cert.url: https://webapi.nicepay.co.kr/api/checkBankAccountAPI.jsp
-        vbank.refund.url: https://webapi.nicepay.co.kr/v2/api/merchant/vbank_refund.jsp
+    kcp:
+        log.dir: D:\\WIDE\\workspace\\webapps\\style24\\STYLE24\\style24.front\\src\\main\\webapp\\logs
+        gw:
+            url: testpaygw.kcp.co.kr
+            port: 8090
+        js.url: https://testpay.kcp.co.kr/plugin/payplus_web.jsp
+        server: false
+        site:
+            cd: T0007
+            key: 4Ho4YsuOZlLXUZUdOxM1Q7X__
+            name: KCP TEST SHOP
+        log.level: 3
+        module.type: 01
+        tx.mode: 0

+ 56 - 0
src/main/resources/config/application-tsit.yml

@@ -0,0 +1,56 @@
+spring:
+    profiles:
+        active: tsit
+    cache.type: redis
+    redis:
+        lettuce:
+            pool:
+                max-active: 10
+                max-idle: 10
+                min-idle: 2
+        host: localhost
+        port: 6379
+        password:
+
+# SSL Server
+has-ssl: false
+
+logging:
+    config: classpath:log/logback-tsit.xml
+
+domain:
+    admin: //tdadmin.style24.com
+    front: //tdfront.style24.com
+    style24: //tdfront.style24.com
+    image: //tdimage.style24.com
+    cdnimage: //tdimage.style24.com
+    uximage: //tdimage.style24.com
+
+upload:
+    default:
+        target.path: /TSIT/servers/files/data
+        max.size: 10
+        allow.extension: jpg|gif|jpeg|png|bmp|txt|doc|docx|ppt|pptx|xls|xlsx|hwp|pdf
+        view: //tdimage.style24.com
+    goods:
+        target.path: /TSIT/servers/files/data/goods
+        max.size: 10
+        allow.extension: jpg|gif|jpeg|png
+        view: //tdimage.style24.com/Upload/ProductImage
+    image:
+        target.path: /TSIT/servers/files/data
+        max.size: 10
+        allow.extension: jpg|gif|jpeg|png
+        view: //tdimage.style24.com
+    excel:
+        target.path: /TSIT/servers/files/data/excel
+        max.size: 10
+        allow.extension: xls|xlsx
+        view: //tdimage.style24.com/excel
+    sample:
+        target.path: /WIDE/workspace/files/data
+        max.size: 10
+        allow.extension: txt|doc|docx|ppt|pptx|xls|xlsx|hwp|pdf
+        view: //tdimage.style24.com/sample
+
+download.path: /TSIT/servers/files/data

+ 25 - 0
src/main/resources/log/logback-tsit.xml

@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<configuration scan="true">
+	<property name="LOG_HOME" value="/TSIT/servers/logs/style24/front"/>
+	<property name="LOG_LEVEL" value="INFO"/>
+	
+	<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
+		<encoder>
+			<charset>utf-8</charset>
+			<pattern>[%d] [%thread] %-5level %logger{32} : %msg%n</pattern>
+		</encoder>
+	</appender>
+	
+	<logger name="org.springframework" level="ERROR"/>
+
+	<!-- SQL문과 해당 SQL을 실행시키는데 수행된 시간 정보(milliseconds)를 포함한다. -->
+	<logger name="jdbc.sqltiming" level="INFO" additivity="false">
+		<appender-ref ref="CONSOLE"/>
+	</logger>
+
+	<root level="${LOG_LEVEL}">
+		<appender-ref ref="CONSOLE"/>
+	</root>
+
+</configuration>

BIN
src/main/webapp/WEB-INF/lib/ConnectionKCP.jar


BIN
src/main/webapp/WEB-INF/lib/jPpcliE.jar


+ 16 - 0
src/main/webapp/WEB-INF/views/web/cart/cartListAjaxFormWeb.html

@@ -389,6 +389,11 @@
 <div class="modal fade od_pop opt_modify_pop" id="optModifyPop" tabindex="-1" role="dialog" aria-labelledby="optModifyLabel" aria-hidden="true"></div>
 <!-- //옵션변경 팝업 -->
 
+
+<!-- KCP PG TEST -->
+<form name="order_info" method="post" action="pp_cli_hub.jsp" >
+</form>
+
 <script th:inline="javascript">
 	let sumRealPayAmt = [[${order.sumRealPayAmt + order.totDelvFee}]];
 	let totDcAmt = [[${order.totDcAmt}]];
@@ -455,6 +460,17 @@
 		compsList.push(temp);
 
 		cfnAddCart(compsList); */
+
+
+		$.ajax( {
+			type: "POST",
+			url : '/kcp/test',
+			contentType: 'application/json',
+			dataType : 'json',
+			success : function(result) {
+				alert(result.message);
+			}
+		});
 	});
 
 	function notApplyTmtbAreaList() {

+ 63 - 9
src/main/webapp/WEB-INF/views/web/mypage/MypageReturnFormWeb.html

@@ -87,11 +87,11 @@
 												<div class="form_field">
 													<div class="select_custom type1">
 														<div class="combo">
-															<input type="hidden" name="chgQty" value="0" th:attr="ordDtlNo=${return.ordDtlNo}"/>
+															<input type="hidden" name="chgQty" value="0" th:attr="ordDtlNo=${return.ordDtlNo}, ordCanChgQty=${return.ordCanChgQty}"/>
 															<div class="select">선택</div>
 															<ul class="list" style="width:100px; margin:0 auto">
 																<li class="selected" value="0">선택</li>
-																<li th:if="${return.ordQty > 0}" th:each="num : ${#numbers.sequence(1,return.ordQty)}" th:value="${num}" th:text="${num}" onclick="fnChangeQty(this);"></li>
+																<li th:if="${return.ordCanChgQty > 0}" th:each="num : ${#numbers.sequence(1,return.ordCanChgQty)}" th:value="${num}" th:text="${num}" onclick="fnChangeQty(this);"></li>
 															</ul>
 														</div>
 													</div>
@@ -316,6 +316,10 @@
 <script src="/ux/plugins/gaga/gaga.paging.js"></script>
 <script th:inline="javascript">
 	let returnList = [[${returnList.returnList}]];
+	let usedGiftCardInfo = [[${usedGiftCardInfo}]];
+	let usedPointInfo = [[${usedPointInfo}]];
+	let refundPoint = 0;
+	let refundGiftCard = 0;
 
 	$(document).ready(function() {
 		// 마이페이지 LNB 설정
@@ -350,13 +354,19 @@
 			// 반품 수량 설정
 			let chgQtyArr = [];
 			let ordDtlNoArr = [];
+			let ordCanChgQtyArr = [];
 			$.each($('input[name=chgQty]'), function(idx, item) {
 				let chgQty = $(item).val();
 				let ordDtlNo = $(item).attr('ordDtlNo');
+				let ordCanChgQty = $(item).attr('ordCanChgQty');
 
 				chgQtyArr.push(Number(chgQty));
 				ordDtlNoArr.push(Number(ordDtlNo));
+				ordCanChgQtyArr.push(Number(ordCanChgQty));
 			});
+			
+			let refundPoint = fnCalculatePoint(chgQtyArr, ordDtlNoArr, ordCanChgQtyArr);
+			let refundGiftCard = fnCalculateGiftCard(chgQtyArr, ordDtlNoArr, ordCanChgQtyArr);
 
 			$.each(returnList, function(idx, item) {
 				let index = ordDtlNoArr.indexOf(item.ordDtlNo);
@@ -368,13 +378,22 @@
 			let jsonData = JSON.stringify(returnRequestList);
 			
 			gagajf.ajaxJsonSubmit(url, jsonData, function(result) {
-				$('#returnAmt').text(result.spanRefundAmt.addComma());			// 환불예정금액
-				$('#goodsCancelAmt').text(result.spanRealCnclRtnAmt.addComma());	// 상품취소금액
-				$('#deliveryFee').text(result.spanTotDeliveryFee.addComma());		// 배송비
-				$('#deductDcAmt').text((result.spanGoodsCpnDcAmt + result.spanCartCpnDcAmt + result.spanTmtbDcAmt).addComma());		// 할인금액 차감(쿠폰+다다익선)
-				$('#refundPayAmt').text(result.spanRealCnclRtnAmt);		// 결제금액 환불
-				$('#refundPoint').text(result.spanPntDcAmt);		// 포인트 환불
-				$('#refundGiftCard').text(result.spanGfcdUseAmt);	// 상품권 환불
+				let returnAmt = result.spanRefundAmt;													// 환불예정금액
+				let goodsCancelAmt = result.spanCnclRtnAmt;												// 상품취소금액
+				let deliveryFee = result.sumDeliveryFee + result.spanTotDeliveryFee;					// 배송비
+				let deductDcAmt = result.spanCpnDcAmt + result.spanTmtbDcAmt + result.spanPrePntDcAmt;	// 할인금액 차감(쿠폰+다다익선+선포인트)
+				let refundPayAmt = result.spanRealCnclRtnAmt + result.sumDeliveryFee;					// 결제금액 환불
+				//let refundPoint = result.spanPntDcAmt;													// 포인트 환불
+				//let refundGiftCard = result.spanGfcdUseAmt;												// 상품권 환불
+
+				// 금액 설정
+				$('#returnAmt').text(returnAmt.addComma());
+				$('#goodsCancelAmt').text(goodsCancelAmt.addComma());
+				$('#deliveryFee').text(deliveryFee.addComma());
+				$('#deductDcAmt').text(deductDcAmt.addComma());
+				$('#refundPayAmt').text(refundPayAmt.addComma());
+				$('#refundPoint').text(refundPoint.addComma());
+				$('#refundGiftCard').text(refundGiftCard.addComma());
 				console.log(result);
 			})
 		}
@@ -386,10 +405,45 @@
 		// 반품 사유 변경 처리
 	}
 	
+	// 반품 방식 선택 이벤트
 	var fnChangeWdGb = function() {
 		let wdGb = $('input[name=wdGb]:radio:checked').val();
 		console.log(wdGb);
 	}
+
+	// 환불 포인트 계산
+	var fnCalculatePoint = function(chgQtyArr, ordDtlNoArr, ordCanChgQtyArr) {
+		let refundAmt = 0;
+
+		$.each(usedPointInfo, function(idx, item) {
+			let index = ordDtlNoArr.indexOf(item.ordDtlNo);
+			let chgQty = chgQtyArr[index];
+			let ordCanChgQty = ordCanChgQtyArr[index];
+			
+			if (chgQty = ordCanChgQty) {
+				refundAmt += item.pntAmt;
+			} else {
+				refundAmt += item.pntAmt * (chgQty / ordCanChgQty);
+			}
+		});
+	}
+	
+	// 환불 상품권 계산
+	var fnCalculateGiftCard = function(chgQtyArr, ordDtlNoArr, ordCanChgQtyArr) {
+		let refundAmt = 0;
+		
+		$.each(usedGiftCardInfo, function(idx, item) {
+			let index = ordDtlNoArr.indexOf(item.ordDtlNo);
+			let chgQty = chgQtyArr[index];
+			let ordCanChgQty = ordCanChgQtyArr[index];
+			
+			if (chgQty = ordCanChgQty) {
+				refundAmt += item.gfcdAmt;
+			} else {
+				refundAmt += item.pntAmt * (chgQty / ordCanChgQty);
+			}
+		});
+	}
 </script>
 
 </th:block>

+ 85 - 5
src/main/webapp/WEB-INF/views/web/order/OrderFormWeb.html

@@ -23,6 +23,62 @@
 <script type="text/javascript" src="/ux/pc/js/slick.min.js"></script>
 <script type="text/javascript" src="/ux/pc/js/jquery-ui.js"></script>
 
+<!-- xodud1202 -->
+	<script type="text/javascript">
+		/****************************************************************/
+		/* m_Completepayment  설명                                      */
+		/****************************************************************/
+		/* 인증완료시 재귀 함수                                         */
+		/* 해당 함수명은 절대 변경하면 안됩니다.                        */
+		/* 해당 함수의 위치는 payplus.js 보다먼저 선언되어여 합니다.    */
+		/* Web 방식의 경우 리턴 값이 form 으로 넘어옴                   */
+		/****************************************************************/
+		function m_Completepayment( FormOrJson, closeEvent )
+		{
+			var frm = document.order_info;
+
+			/********************************************************************/
+			/* FormOrJson은 가맹점 임의 활용 금지                               */
+			/* frm 값에 FormOrJson 값이 설정 됨 frm 값으로 활용 하셔야 됩니다.  */
+			/* FormOrJson 값을 활용 하시려면 기술지원팀으로 문의바랍니다.       */
+			/********************************************************************/
+			GetField( frm, FormOrJson );
+
+
+			if( frm.res_cd.value == "0000" )
+			{
+				alert("결제 승인 요청 전,\n\n반드시 결제창에서 고객님이 결제 인증 완료 후\n\n리턴 받은 ordr_chk 와 업체 측 주문정보를\n\n다시 한번 검증 후 결제 승인 요청하시기 바랍니다."); //업체 연동 시 필수 확인 사항.
+				/*
+					가맹점 리턴값 처리 영역
+				*/
+				frm.submit();
+			} else {
+				alert( "[" + frm.res_cd.value + "] " + frm.res_msg.value );
+				closeEvent();
+			}
+		}
+	</script>
+
+	<script type="text/javascript" th:src="${@environment.getProperty('pg.kcp.js.url')}"></script>
+
+	<script type="text/javascript">
+		/* 표준웹 실행 */
+		function jsf__pay( form )
+		{
+			try {
+				KCP_Pay_Execute( form );
+			} catch (e) {
+				/* IE 에서 결제 정상종료시 throw로 스크립트 종료 */
+			}
+		}
+	</script>
+
+	<form name="order_info" method="post" action="pp_cli_hub.jsp" >
+
+	</form>
+
+<!-- // xodud1202 -->
+
 <!--  container -->
 <form id="payForm" name="payForm">
 	<input type="hidden" name="delvMemo" th:value="${deliveryAddrInfo.delvMemo}">
@@ -448,12 +504,13 @@
 																								<input type="hidden" name="cpnType" value="delvCpn"/>
 																								<input type="hidden" name="custCpnSq" value="0"/>
 																								<input type="hidden" name="cpnDcAmt" value="0"/>
+																								<input type="hidden" name="delvFeeCd" value="0"/>
 																								
 																								<div class="select" value="0">선택없음</div>
 																								<ul class="list">
 																									<li value="0">선택없음</li>
 																									<th:block th:each="delvCpn, k : ${delvCpnList}">
-																										<li th:value="${delvCpn.custCpnSq}" th:data="${delvCpn.cpnDcAmt}" th:text="${delvCpn.cpnNm}"></li>
+																										<li th:value="${delvCpn.custCpnSq}" th:data="${delvCpn.cpnDcAmt}" th:delvfeecd="${delvCpn.delvFeeCd}" th:text="${delvCpn.cpnNm}"></li>
 																									</th:block>
 																								</ul>
 																							</div>
@@ -914,7 +971,7 @@
 										</div>
 										<div>
 											<dt>다다익선할인금액</dt>
-											<dd><span class="disc_amount" id="tmtbDcSumAmt" th:text="|${#numbers.formatInteger(tmtbDcSumAmt, 1, 'COMMA')}원|"></span></dd>
+											<dd><span class="disc_amount" id="tmtbDcSumAmt" th:text="|-${#numbers.formatInteger(tmtbDcSumAmt, 1, 'COMMA')}원|"></span></dd>
 										</div>
 										<div>
 											<dt>쿠폰할인금액</dt>
@@ -1183,6 +1240,7 @@ $(document).ready( function() {
 	var resCnt 				= [[${resCnt}]];				// 자사 예약 배송건수
 	var delvCnt 			= [[${delvCnt}]];				// 입전 일반 배송건수
 	var shotDelvYn			= [[${shotDelvYn}]];			// 총알배송여부
+	var sumDelvFee			= [[${sumDelvFee}]];			// 배송비합계
 	
 	// 할인관련정보 변수선언
 	var freegiftList		= [[${freegiftList}]];			// 사은품 프로모션 목록
@@ -1382,7 +1440,7 @@ $(document).ready( function() {
 			
 			var cpnCartSq 	= obj.parent().parent().find("input[name='cpnCartSq']").val();
 			
-			// 장바구니시퀀스 체크
+			// 장바구니상품시퀀스 체크
 			$("input[name='cartSq']").each(function(){
 				if (cpnCartSq == $(this).val()) {
 					$(this).parent().find("input[name='goodsCpnSq']").val(obj.prop("value"));		// 상품쿠폰시퀀스
@@ -1478,7 +1536,14 @@ $(document).ready( function() {
 		}
 		// 배송비쿠폰적용
 		else if (cpnType == "delvCpn") {
+			// 적용된 할인금액 text 설정 
+			var dcAmtStr = "- " + parseInt(obj.attr("data")).addComma() + " 원 할인적용";
+			obj.parent().parent().parent().parent().parent().find(".cp_amount").text(dcAmtStr);
 			
+			var cpnCartSq 	= obj.parent().parent().find("input[name='cpnCartSq']").val();
+			
+			obj.parent().parent().find("input[name='cpnDcAmt']").val(obj.attr("data"));
+			obj.parent().parent().find("input[name='delvFeeCd']").val(obj.attr("delvfeecd"));
 		}
 		
 		// select box 쿠폰 적용 (공통적용)
@@ -1522,8 +1587,20 @@ $(document).ready( function() {
 			}
 		});
 		
-		$(".maxdisc_amount").text("(-" + cpnDcSumAmt.addComma() + "원)");
+		// 쿠폰영역
+		$(".maxdisc_amount").text("(-" + cpnDcSumAmt.addComma() + "원)"); // 쿠폰할인금액합계
 		$("#cpnApplyCnt").text(cpnApplyCnt + "장");
+		
+		// 상품목록영역
+		$("#couponDcSumAmt").text("-" + cpnDcSumAmt.addComma() + "원"); // 쿠폰할인금액합계
+		// 배송비할인적용
+		$("input[name='cpnType']").each(function(){
+			if ($(this).val() == "delvCpn") {
+				sumDelvFee = parseInt(sumDelvFee) - parseInt($(this).parent().find("input[name='cpnDcAmt']").val()); 
+				// 최종배송비
+				$("#delvSumAmt").text(sumDelvFee.addComma() + "원");
+			}
+		});
 	};
 	
 	// 쿠폰 선택없음 기능 구현
@@ -1554,7 +1631,10 @@ $(document).ready( function() {
 		}
 		// 배송비쿠폰적용
 		else if (cpnType == "delvCpn") {
-			
+			// 장바구니쿠폰 시퀀스 0, 장바구니할인금액 0
+			$("input[name='cartSq']").each(function(){
+				$(this).parent().find("input[name='delvFeeCd']").val("0");
+			});
 		}
 		
 		obj.parent().parent().find("input[name='custCpnSq']").val("0");

+ 106 - 0
src/main/webapp/WEB-INF/views/web/pg/kcpOrder.html

@@ -0,0 +1,106 @@
+<html lang="ko"
+	  xmlns:th="http://www.thymeleaf.org">
+<script type="text/javascript">
+	/****************************************************************/
+	/* m_Completepayment  설명                                      */
+	/****************************************************************/
+	/* 인증완료시 재귀 함수                                         */
+	/* 해당 함수명은 절대 변경하면 안됩니다.                        */
+	/* 해당 함수의 위치는 payplus.js 보다먼저 선언되어여 합니다.    */
+	/* Web 방식의 경우 리턴 값이 form 으로 넘어옴                   */
+	/****************************************************************/
+	function m_Completepayment( FormOrJson, closeEvent )
+	{
+		var frm = document.order_info;
+
+		/********************************************************************/
+		/* FormOrJson은 가맹점 임의 활용 금지                               */
+		/* frm 값에 FormOrJson 값이 설정 됨 frm 값으로 활용 하셔야 됩니다.  */
+		/* FormOrJson 값을 활용 하시려면 기술지원팀으로 문의바랍니다.       */
+		/********************************************************************/
+		GetField( frm, FormOrJson );
+
+
+		if( frm.res_cd.value == "0000" )
+		{
+			alert("결제 승인 요청 전,\n\n반드시 결제창에서 고객님이 결제 인증 완료 후\n\n리턴 받은 ordr_chk 와 업체 측 주문정보를\n\n다시 한번 검증 후 결제 승인 요청하시기 바랍니다."); //업체 연동 시 필수 확인 사항.
+			/*
+				가맹점 리턴값 처리 영역
+			*/
+
+			frm.submit();
+		}
+		else
+		{
+			alert( "[" + frm.res_cd.value + "] " + frm.res_msg.value );
+
+			closeEvent();
+		}
+	}
+</script>
+
+<script type="text/javascript" th:src="${@environment.getProperty('pg.kcp.js.url')}"></script>
+
+<script type="text/javascript">
+	/* 표준웹 실행 */
+	function jsf__pay( form )
+	{
+		try
+		{
+			KCP_Pay_Execute( form );
+		}
+		catch (e)
+		{
+			/* IE 에서 결제 정상종료시 throw로 스크립트 종료 */
+		}
+	}
+</script>
+
+<!-- 선택, 상점이름(영문으로 작성권장) -->
+<input type="hidden" name="site_name" th:value="${@environment.getProperty('pg.kcp.site.name')}" />
+<!-- 필수, 상점코드 -->
+<input type="hidden" name="site_cd" th:value="${@environment.getProperty('pg.kcp.site.cd')}" />
+
+<input type="hidden" name="req_tx" value="pay" />				<!-- 필수, 요청의 종류를 구분하는 변수 결제요청페이지의 경우 ‘pay’로 설정 -->
+<input type="hidden" name="ordr_idxx" value="100" />			<!-- 필수, 상점 관리 주문번호 (유니크한 값 설정 권장) -->
+<input type="hidden" name="pay_method" value="100000000000" />	<!-- 필수, 결제수단코드(신용카드 : 100000000000, 계좌이체 : 010000000000, 가상계좌 : 001000000000, 포인트 : 000100000000, 휴대폰 : 000010000000, 상품권 : 000000001000, ARS : 000000000010) -->
+<input type="hidden" name="good_name" value="TEST NAME" />		<!-- 필수, 상품명 -->
+<input type="hidden" name="good_mny" value="2000" />			<!-- 필수, 주문요청금액 (※ 화폐단위가 ‘USD’ 일 경우, Cent까지 설정 ex ) $10.55 일 경우 콤마를 뺀 1055, $100 일 경우 10000로 설정 -->
+<input type="hidden" name="buyr_name" value="LTY" />			<!-- 필수, 주문자 이름 -->
+<input type="hidden" name="buyr_mail" value="test@test.com" />	<!-- 선택, 주문자 이메일 -->
+<input type="hidden" name="buyr_tel1" value="" />				<!-- 선택, 주문자 전화번호 -->
+<input type="hidden" name="buyr_tel2" value="01071114489" />	<!-- 필수, 주문자 휴대폰번호 -->
+<input type="hidden" name="currency" value="WON" />				<!-- 필수, 원화 : WON / 달러 : USD -->
+<input type="hidden" name="shop_user_id" value="xodud1202" />	<!-- 필수, 쇼핑몰회원ID 기관에 따라 RM 조치를 위해 쇼핑몰 관리 ID를 필수로 요청 -->
+
+<input type="hidden" name="quotaopt"        value="12"/>		<!-- 최대 할부 개월 수(0 ~ 18까지 설정 가능) -->
+
+<!--
+      ※ 필 수
+          필수 항목 : 표준웹에서 값을 설정하는 부분으로 반드시 포함되어야 합니다
+          값을 설정하지 마십시오
+-->
+<input type="hidden" name="res_cd"          value=""/>
+<input type="hidden" name="res_msg"         value=""/>
+<input type="hidden" name="enc_info"        value=""/>
+<input type="hidden" name="enc_data"        value=""/>
+<input type="hidden" name="ret_pay_method"  value=""/>
+<input type="hidden" name="tran_cd"         value=""/>
+<input type="hidden" name="use_pay_method"  value=""/>
+
+<!-- 주문정보 검증 관련 정보 : 표준웹 에서 설정하는 정보입니다 -->
+<input type="hidden" name="ordr_chk"        value=""/>
+
+<!--  현금영수증 관련 정보 : 표준웹 에서 설정하는 정보입니다 -->
+<input type="hidden" name="cash_yn"         value=""/>
+<input type="hidden" name="cash_tr_code"    value=""/>
+<input type="hidden" name="cash_id_info"    value=""/>
+
+<!-- 2012년 8월 18일 전자상거래법 개정 관련 설정 부분 -->
+<!-- 제공 기간 설정 0:일회성 1:기간설정(ex 1:2012010120120131)  -->
+<input type="hidden" name="good_expr" value="0">
+
+<!-- 표준웹 설정 정보입니다(변경 불가) -->
+<input type="hidden" name="module_type" th:value="${@environment.getProperty('pg.kcp.module.type')}" />
+
+</html>