Przeglądaj źródła

Merge remote-tracking branch 'origin/jsh77b' into order

# Conflicts:
#	src/main/java/com/style24/front/biz/web/TsfOrderController.java
#	src/main/java/com/style24/front/biz/web/TsfPgController.java
card007 5 lat temu
rodzic
commit
5a5ac00d00

+ 10 - 0
src/main/java/com/style24/front/biz/dao/TsfOrderDao.java

@@ -98,4 +98,14 @@ public interface TsfOrderDao {
 	 */
 	int getCustFirstOrderCount(Coupon coupon);
 	
+	/**
+	 * 회원보유쿠폰체크
+	 * 
+	 * @param order
+	 * @return int
+	 * @author jsh77b
+	 * @since 2021.03.12
+	 */
+	int getCheckCustCpnSq(Order order);
+	
 }

+ 124 - 0
src/main/java/com/style24/front/biz/service/TsfOrderService.java

@@ -21,6 +21,7 @@ import com.style24.core.support.env.TscConstants;
 import com.style24.front.biz.dao.TsfOrderDao;
 import com.style24.front.support.security.session.TsfSession;
 import com.style24.persistence.domain.Coupon;
+import com.style24.persistence.domain.GoodsStock;
 import com.style24.persistence.domain.KakaoPay;
 import com.style24.persistence.domain.NaverPay;
 import com.style24.persistence.domain.Order;
@@ -52,6 +53,9 @@ public class TsfOrderService {
 	
 	@Autowired
 	private TscNaverPayService coreNaverPayService;
+	
+	@Autowired
+	private TsfGoodsService goodsService;
 
 	/**
 	 * 마이페이지 주문 정보 조회
@@ -389,4 +393,124 @@ public class TsfOrderService {
 	 */
 	public int getCustFirstOrderCount(Coupon coupon) { return orderDao.getCustFirstOrderCount(coupon); }
 	
+	
+	
+	/**
+	 * 주문정보유효성체크
+	 * @param Order
+	 * @return Order
+	 * @author jsh77b
+	 * @since 2021. 03. 09
+	 */
+	public void orderValidationCheck(Order order) {
+		// 1. 주문상세체크
+		Collection<Order> orderDetailList = order.getOrderDetailList();
+		
+		String goodsCd		= "";
+		String goodsType	= "";
+		String itemCd 		= "";
+		String optCd 		= "";
+		int goodsQty		= 0;
+		int custCpnSq		= 0;
+		int usPntAmt		= 0;
+		int usGfcdAmt		= 0;
+		
+		for (Order orderDetail : orderDetailList) {
+			
+			// 2.1 상품 재고 확인
+			GoodsStock checkParam = new GoodsStock();
+			
+			for (int i=0 ; i<orderDetail.getItemCdArr().length ; i++) {
+				goodsCd 	= orderDetail.getGoodsCd();
+				goodsType	= orderDetail.getGoodsType();
+				itemCd 		= orderDetail.getItemCdArr()[i];
+				optCd 		= orderDetail.getOptCdArr()[i];
+				goodsQty	= orderDetail.getGoodsQty();
+								
+				checkParam.setGoodsCd(goodsCd);
+				checkParam.setItemCd(itemCd);
+				checkParam.setOptCd(optCd); 
+				checkParam.setGoodsQty(goodsQty);
+				checkParam.setGoodsType(goodsType);
+				String stockResult = goodsService.getCheckStock(checkParam);
+				
+				if (!"SUCCESS".equals(stockResult)) {
+					throw new IllegalArgumentException(stockResult);
+				}
+			}
+			
+			// 2.2 보유 상품쿠폰체크
+			custCpnSq = orderDetail.getGoodsCpnSq();
+			if (custCpnSq > 0) {
+				orderDetail.setCustCpnSq(custCpnSq);
+				orderDetail.setCustNo(order.getCustNo());
+				if (orderDao.getCheckCustCpnSq(orderDetail) < 1) {
+					throw new IllegalArgumentException("보유하신 상품쿠폰이 존재하지 않습니다.");
+				}
+			}
+			
+			// 2.3 보유 장바구니쿠폰체크
+			custCpnSq = orderDetail.getCartCpnSq();
+			if (custCpnSq > 0) {
+				orderDetail.setCustCpnSq(custCpnSq);
+				orderDetail.setCustNo(order.getCustNo());
+				if (orderDao.getCheckCustCpnSq(orderDetail) < 1) {
+					throw new IllegalArgumentException("보유하신 장바구니쿠폰이 존재하지 않습니다.");
+				}
+			}
+			
+			// 2.4 사용포인트금액등록(구매사용포인트)
+			usPntAmt = usPntAmt + orderDetail.getPntDcAmt();
+			
+			// 2.5 상품권사용금액등록
+			usGfcdAmt = usGfcdAmt + orderDetail.getGfcdUseAmt();
+		}
+		
+		// 2.6 사용포인트금액등록(사은품사용포인트)
+		int usePoint = 0;
+		if (order.getFreegiftUsePointArr().length > 0) {
+			for (int i=0 ; i<order.getFreegiftUsePointArr().length ; i++) {
+				usePoint = Integer.parseInt(order.getFreegiftUsePointArr()[i]);
+				if (usePoint > 0) {
+					usPntAmt = usPntAmt + usePoint;
+				}
+			}
+		}
+		
+		// 3. 보유포인트금액 > 포인트사용금액 체크
+		int rmPntAmt = coreOrderDao.getCustPointInfo(order);
+		if (rmPntAmt < usPntAmt) {
+			throw new IllegalArgumentException("보유하신 포인트 금액이 부족합니다.");
+		}
+		
+		// 4. 보유상품권금액 > 상품권사용금액 체크
+		int rmGfcdAmt = coreOrderDao.getGiftcardInfo(order);
+		if (rmGfcdAmt < usGfcdAmt) {
+			throw new IllegalArgumentException("보유하신 상품권 금액이 부족합니다.");
+		}
+		
+		// 5. 장바구니 보유쿠폰 체크 (배송목록체크)
+		Collection<Order> delvFeeCdList = order.getDelvFeeCdList();
+		for (Order delvFeeCd : delvFeeCdList) {
+			if (delvFeeCd.getDelvCpnSq() > 0) {
+				custCpnSq = delvFeeCd.getDelvCpnSq();
+				if (custCpnSq > 0) {
+					delvFeeCd.setCustCpnSq(custCpnSq);
+					delvFeeCd.setCustNo(order.getCustNo());
+					if (orderDao.getCheckCustCpnSq(delvFeeCd) < 1) {
+						throw new IllegalArgumentException("보유하신 배송비쿠폰이 존재하지 않습니다.");
+					}
+				}
+			}
+		}
+		
+
+		// TODO 5. 사은품채고체크
+		
+	}
+	
+	
+	
+	
+	
 }

+ 86 - 257
src/main/java/com/style24/front/biz/web/TsfOrderController.java

@@ -58,12 +58,6 @@ public class TsfOrderController extends TsfBaseController {
 	@Autowired
 	private TsfCartService cartService;
 
-	@Autowired
-	private TscKakaoPayService kakaoPayService;
-
-	@Autowired
-	private TscNaverPayService naverPayService;
-
 	@Autowired
 	private Environment env;
 	
@@ -469,7 +463,79 @@ public class TsfOrderController extends TsfBaseController {
 	}
 
 	/**
-	 * PG 결과 처리 메서드
+	 * 주문 데이터 생성
+	 *
+	 * @param
+	 * @return
+	 * @author xodud1202
+	 * @since 2021. 03. 04
+	 */
+	@PostMapping("/create/preOrder")
+	@ResponseBody
+	public ModelAndView createOrder(@RequestBody Order order) {
+		ModelAndView mav = new ModelAndView();
+		
+		// TODO 주문 시작 데이터 처리 
+		// 2021.03.09 주문데이타 등록 
+		// 1. 로그인체크 후 custNo 설정
+		if (TsfSession.isLogin()) {
+			order.setCustNo(TsfSession.getInfo().getCustNo());
+		} else {
+			order.setCustNo(0);
+		}
+		
+		order.setFrontGb(TsfSession.getFrontGb());
+		
+		// TODO
+		// 2. 주문정보유효성체크
+		orderService.orderValidationCheck(order);
+		
+		// 3. 주문기본정보등록(주문접수)
+		coreOrderService.createPreOrder(order);
+		
+		log.info("order.getPgGb()              ::: {}", order.getPgGb());
+		log.info("order.getPayMeans()          ::: {}", order.getPayMeans());
+		log.info("order.getOrdNo()             ::: {}", order.getOrdNo());
+		log.info("order.getGoodsNm()           ::: {}", order.getGoodsNm());
+		log.info("order.getOrdGoodsQty()       ::: {}", order.getOrdGoodsQty());
+		log.info("order.getPayAmt()            ::: {}", order.getPayAmt());
+		log.info("order.getOrdNm()             ::: {}", order.getOrdNm());
+		log.info("order.getOrdPhnno()          ::: {}", order.getOrdPhnno());
+		log.info("order.getCustNo()            ::: {}", order.getCustNo());
+		log.info("order.getFreegiftValArr()    ::: {}", order.getFreegiftValArr());
+		log.info("order.getFreegiftValArr()    ::: {}", order.getFreegiftValArr());
+		log.info("order.getFreegiftSqArr()     ::: {}", order.getFreegiftSqArr());
+		
+		for(int i = 0 ; i < order.getFreegiftGoodsArr().length ; i++) {
+			log.info("order.getFreegiftGoodsArr()  ::: {}", order.getFreegiftGoodsArr()[i]);
+		}
+
+		// TODO PG 데이터 세팅 처리 (order)
+		// 필수 데이터
+		// pgGb = 결제타입, payMeans = 결제수단, ordNo = 주문번호, goodsNm = 상품명, payAmt = 실결제금액, ordNm = 주문자명, ordPhnno = 휴대폰번호, custNo = 고객번호
+		// 선택 데이터
+		// ordEmail = 주문자메일, ordTelno = 전화번호
+		
+		/* 
+		=== 카카오페이 & 네이버페이 파라메터 ===
+		ordNo = 주문번호
+		custNo = 고객번호
+		goodsNm = 상품명
+		ordGoodsQty = 주문상품수량
+		payAmt = 결제금액
+		======================
+		*/
+
+		Payment payment = orderService.setPgDataInfo(order);
+		mav.addObject("payment"				, payment);
+		mav.addObject("orderDetailList"		, order.getOrderDetailList());
+		mav.setViewName(super.getDeviceViewName("pg/kcpOrder"));
+
+		return mav;
+	}
+	
+	/**
+	 * 결제 PG 요청 완료
 	 *
 	 * @param
 	 * @return
@@ -482,27 +548,29 @@ public class TsfOrderController extends TsfBaseController {
 		
 		ModelAndView mav = new ModelAndView();
 		
+		Order order = new Order();
+		
 		// 1. 로그인체크 후 custNo 설정
 		if (TsfSession.isLogin()) {
 			param.setCustNo(TsfSession.getInfo().getCustNo()); // 고객번호등록
+			order.setCustNo(TsfSession.getInfo().getCustNo());
 		} else {
 			param.setCustNo(0);
+			order.setCustNo(0);
 		}
 		
 		param.setUpdNo(param.getCustNo());
 		
-		// 7. 결재정보등록(TB_PAYMENT)
+		// 2. 결재정보등록(TB_PAYMENT)
 		param = orderService.orderPgPayResult(param, request, response);
 		
-		log.info("param.getOrdNo() ::: {}", param.getOrdNo());
+		order.setOrdNo(param.getOrdNo());
+		order.setSellGb("10");
+		order.setPgGb(param.getPgGb());
+		order.setPayMeans(param.getPayMeans());
 		
-		// TODO 주문정보 업데이트
-		// 1. 주문상태업데이트
-		// 2. 재고처리
-		// 3. 포인트사용처리
-		// 4. 예정포인트적립처리
-		// 5. 쿠폰사용처리
-		// 6. 상품권사용처리
+		// TODO 3. 주문정보 업데이트
+		coreOrderService.updateOrderInfo(order);
 
 		mav.addObject("payment", param);
 
@@ -575,10 +643,8 @@ public class TsfOrderController extends TsfBaseController {
 		log.info("order.getOrdNo() ::: {}", order.getOrdNo());
 		
 		// TODO 주문정보조회
-
-		//mav.addObject("payment", order);
-
-		mav.setViewName(super.getDeviceViewName("pg/kcpOrder"));
+		mav.addObject("payment", order);
+		mav.setViewName(super.getDeviceViewName("order/OrderComplete"));
 		return mav;
 	}
 
@@ -693,243 +759,6 @@ public class TsfOrderController extends TsfBaseController {
 		
 		return mav;
 	}
-	
-	/**
-	 * 주문페이지 (백업)
-	 *
-	 * @param
-	 * @return
-	 * @author jsh77b
-	 * @since 2021. 02. 02
-	 */
-	@SuppressWarnings({ "unchecked", "null" })
-	@RequestMapping(value = "/form20210304")
-	public ModelAndView orderForm20210304(Order order) {
-		ModelAndView mav = new ModelAndView();
-		
-		// TODO
-		// 1.비회주문, 회원 주문 판단 로직,  고객정보 세션 판단
-		// 세션고객정보가 존재하면 회원주문 없으면 비회원 주문
-		
-		// 임시 jsessionId
-		String jsessionId 	= "aaec62cc-5f91-47bb-ba65-ebc9a61385cf";
-		Boolean noMember 	= true;
-
-		// TODO 로그인체크 로직 추가
-		// 1.0 회원, 비회원 여부 판단
-		if (TsfSession.getInfo().getCustNo() == null) {
-			order.setJsessionId(jsessionId);
-		} else {
-			noMember = false;
-			order.setCustNo(TsfSession.getInfo().getCustNo()); // 고객번호등록
-		}
-		
-		// TODO
-		// 1.1 카트시퀀스가 없을때 처리 장바구니로 이동 
-		if (order.getCartSqArr() == null) {
-			mav.setViewName("redirect:/order/noMember");		// 비회원주문서화면
-			return mav;
-		}
-		
-		Order custemerInfo = new Order();
-		Order deliveryAddrInfo = new Order();
-
-		// TODO 로그인체크 로직 추가
-		if (noMember) {
-			// 1.1 주문고객 정보조회
-			custemerInfo.setCustNm(order.getCustNm());
-			custemerInfo.setCellPhnno(order.getCellPhnno());
-			custemerInfo.setEmail(order.getEmail());
-			
-			// 1.2 배송지 정보조회 (기본배송지)
-			deliveryAddrInfo.setDelvAddrNm(order.getCustNm());
-			deliveryAddrInfo.setRecipZipcode(order.getRecipZipcode());
-			deliveryAddrInfo.setRecipBaseAddr(order.getRecipBaseAddr());
-			deliveryAddrInfo.setRecipDtlAddr(order.getRecipDtlAddr());
-			deliveryAddrInfo.setDelvMemo("직접받고 부재시 문 앞");
-		} else {
-			// 1.1 주문고객 정보조회
-			custemerInfo = coreOrderService.getCustemerInfo(order);
-			
-			// 1.2 배송지 정보조회 (기본배송지)
-			deliveryAddrInfo = coreOrderService.getDeliveryAddrInfo(order);
-			
-			if (deliveryAddrInfo == null) {
-				deliveryAddrInfo = new Order();
-				deliveryAddrInfo.setDelvAddrNm(custemerInfo.getCustNm());
-				deliveryAddrInfo.setRecipZipcode("");
-				deliveryAddrInfo.setRecipBaseAddr("");
-				deliveryAddrInfo.setRecipDtlAddr("");
-				deliveryAddrInfo.setDelvMemo("직접받고 부재시 문 앞");
-			}
-		}
-
-		// TODO 임시 장바구니
-		// 2. 장바구니시퀀스 배열 등록 (장바구니 상품 정보 조회)		
-		// 2.1 배송단위별 상품 목록 조회 (장바구니)
-		Collection<Order> tmtbGoodsApplyList = cartService.getMoreBetterAmtList(order);
-		
-		// 2.1.0 상품금액, 선포인트, 다다익선할인금액
-		GagaMap goodsDcAmtMap = coreOrderService.getGoodsDcAmt(tmtbGoodsApplyList);
-		
-		// 2.2 배송단위별 장바구니 상품 건수 조회 (장바구니상품)
-		GagaMap delvOrderMap = coreOrderService.getCartDelvGoodsCntList(tmtbGoodsApplyList, order);
-
-		// 3. 할인구간정보조회
-		// 3.2 상품쿠폰, 장바구니쿠폰 목록 조회
-		GagaMap goodsCartCpnMap = coreOrderService.getGoodsCartCpnApplyGoodsList(order);
-		
-		Collection<Order> goodsCpnList 	= (Collection<Order>) goodsCartCpnMap.get("goodsCpnList");
-		Collection<Order> cartCpnList 	= (Collection<Order>) goodsCartCpnMap.get("cartCpnList");
-		
-		// 3.2.1 상품기준 ---> 상품쿠폰 적용된 상품 목록
-		Collection<Order> goodsApplyCpnList = coreOrderService.getGoodsCpnApplyList(tmtbGoodsApplyList, goodsCpnList);
-		
-		// 3.2.2 장바구니쿠폰기준 ---> 상품목록
-		cartCpnList = coreOrderService.getCartCpnApplyList(tmtbGoodsApplyList, cartCpnList);
-		
-		// 3.3 배송비쿠폰목록 조회
-		Collection<Order> delvCpnList = coreOrderService.getDelvCpnList(order);
-		
-		Collection<Order> delvFeeCdList = (Collection<Order>) delvOrderMap.get("delvFeeCdList");
-		
-		// 3.3.1 배소업체기준 ---> 배송비쿠폰
-		delvCpnList = coreOrderService.getDelvCpnApplyList(delvFeeCdList, delvCpnList);
-		
-		// 3.4 고객 보유 포인트 정보 조회
-		int rmPntAmt = coreOrderService.getCustPointInfo(order);
-		
-		// 3.5 고객 보유 상품권 정보 조회
-		int rmGfcdAmt = coreOrderService.getGiftcardInfo(order);
-		
-		// 4. 사은품 정보
-		// 4.1 장바구니상품 사음품 적용 정보 조회
-		GagaMap  resultMap = coreFreegiftService.getOrderFreegift(order);
-
-		// 101. 상품정보
-		mav.addObject("cartGoodsList"					, tmtbGoodsApplyList);						// 장바구니상품목록 (즉시할인쿠폰적용)
-		mav.addObject("delvTotCnt" 						, delvOrderMap.get("delvTotCnt"));			// 총상품건수
-		mav.addObject("delvFeeTotCnt"					, delvOrderMap.get("delvFeeTotCnt"));		// 총배송타입건수
-		mav.addObject("wmsCnt" 							, delvOrderMap.get("wmsCnt"));				// 자사상품건수
-		mav.addObject("resCnt" 							, delvOrderMap.get("resCnt"));				// 자사예약상품건수
-		mav.addObject("delvCnt" 						, delvOrderMap.get("delvCnt"));				// 입점업체상품건수
-		
-		mav.addObject("shotCartList" 					, delvOrderMap.get("shotCartList"));		// 자사총알배송상품목록
-		mav.addObject("wmsCartList" 					, delvOrderMap.get("wmsCartList"));			// 자사일반배송상품목록
-		mav.addObject("delvCartList" 					, delvOrderMap.get("delvCartList"));		// 입점업체상품목록
-		mav.addObject("resCartList" 					, delvOrderMap.get("resCartList"));			// 자사예약배송상품목록
-		mav.addObject("delvAllCartList" 				, delvOrderMap.get("delvAllCartList"));		// 전체배송목록
-		mav.addObject("sumDelvFee" 						, delvOrderMap.get("sumDelvFee"));			// 배송비합계
-		
-		// 102. 고객정보
-		mav.addObject("custemerInfo"					, custemerInfo);							// 고객정보
-		mav.addObject("deliveryAddrInfo"				, deliveryAddrInfo);						// 배송지정보
-		mav.addObject("shotDelvYn" 						, order.getShotDelvYn());					// 장바구니 총알배송여부
-		
-		// 103. 할인정보
-		mav.addObject("tmtbGoodsApplyList"				, tmtbGoodsApplyList);						// 다다익선상품 적용목록
-		mav.addObject("goodsApplyCpnList"				, goodsApplyCpnList);						// 상품적용쿠폰
-		mav.addObject("cartCpnList"						, cartCpnList);								// 장바구니쿠폰목록
-		mav.addObject("delvCpnList"						, delvCpnList);								// 배송비쿠폰목록
-		
-		mav.addObject("orgGoodsSumAmt"					, goodsDcAmtMap.get("orgGoodsSumAmt"));		// 상품금액합계
-		mav.addObject("cpn1DcSumAmt"					, goodsDcAmtMap.get("cpn1DcSumAmt"));		// 즉시할인금액합계
-		mav.addObject("tmtbDcSumAmt"					, goodsDcAmtMap.get("tmtbDcSumAmt"));		// 다다익선할인금액합계
-		mav.addObject("prePntDcAmt"						, goodsDcAmtMap.get("prePntDcAmt"));		// 선포인트사용가능금액
-
-		mav.addObject("rmPntAmt"						, rmPntAmt);								// 고객포인트정보
-		mav.addObject("rmGfcdAmt"						, rmGfcdAmt);								// 고객상품권정보
-		mav.addObject("savePntSumAmt"					, goodsDcAmtMap.get("savePntSumAmt"));		// 적립예정포인트합계
-		
-		// 104. 사은품정보
-		mav.addObject("freegiftGoodsList"				, resultMap.get("freegiftGoodsList"));		// 사은품상품정보 목록
-		mav.addObject("freegiftList"					, resultMap.get("freegiftList"));			// 사은품정보 목록
-		
-		mav.setViewName(super.getDeviceViewName("order/OrderForm"));
-		
-		return mav;
-	}
-	
-	
-
-	/**
-	 * 주문 데이터 생성
-	 *
-	 * @param
-	 * @return
-	 * @author xodud1202
-	 * @since 2021. 03. 04
-	 */
-	@PostMapping("/create/preOrder")
-	@ResponseBody
-	public ModelAndView createOrder(@RequestBody Order order) {
-		ModelAndView mav = new ModelAndView();
-		
-		// TODO 주문 시작 데이터 처리 
-		// 2021.03.09 주문데이타 등록 
-		// 1. 로그인체크 후 custNo 설정
-		if (TsfSession.isLogin()) {
-			order.setCustNo(TsfSession.getInfo().getCustNo());
-		} else {
-			order.setCustNo(0);
-		}
-		
-		order.setFrontGb(TsfSession.getFrontGb());
-		
-		// TODO
-		// 2. 주문정보 유효성체크 (
-		// 2.1 보유쿠폰체크
-		// 2.2 보유포인트체크
-		// 2.3 상품재고체크
-		// 2.4 보유상품권체크
-		// 2.5 사은품채고체크
-		
-		// 3. 주문기본정보등록
-		//coreOrderService.createPreOrder(order);
-		
-		log.info("order.getPgGb()              ::: {}", order.getPgGb());
-		log.info("order.getPayMeans()          ::: {}", order.getPayMeans());
-		log.info("order.getOrdNo()             ::: {}", order.getOrdNo());
-		log.info("order.getGoodsNm()           ::: {}", order.getGoodsNm());
-		log.info("order.getOrdGoodsQty()       ::: {}", order.getOrdGoodsQty());
-		log.info("order.getPayAmt()            ::: {}", order.getPayAmt());
-		log.info("order.getOrdNm()             ::: {}", order.getOrdNm());
-		log.info("order.getOrdPhnno()          ::: {}", order.getOrdPhnno());
-		log.info("order.getCustNo()            ::: {}", order.getCustNo());
-		log.info("order.getFreegiftValArr()    ::: {}", order.getFreegiftValArr());
-		log.info("order.getFreegiftValArr()    ::: {}", order.getFreegiftValArr());
-		log.info("order.getFreegiftSqArr()     ::: {}", order.getFreegiftSqArr());
-		/*for(int i = 0 ; i < order.getFreegiftGoodsArr().length ; i++) {
-			log.info("order.getFreegiftGoodsArr()  ::: {}", order.getFreegiftGoodsArr()[i]);
-		}*/
-
-		// TODO PG 데이터 세팅 처리 (order)
-		// 필수 데이터
-		// pgGb = 결제타입, payMeans = 결제수단, ordNo = 주문번호, goodsNm = 상품명, payAmt = 실결제금액, ordNm = 주문자명, ordPhnno = 휴대폰번호, custNo = 고객번호
-		// 선택 데이터
-		// ordEmail = 주문자메일, ordTelno = 전화번호
-		
-		/* 
-		=== 카카오페이 & 네이버페이 파라메터 ===
-		ordNo = 주문번호
-		custNo = 고객번호
-		goodsNm = 상품명
-		ordGoodsQty = 주문상품수량
-		payAmt = 결제금액
-		======================
-		*/
-
-		Payment payment = orderService.setPgDataInfo(order);
-
-		mav.addObject("payment", payment);
-		mav.addObject("orderDetailList", order.getOrderDetailList());
-		//model.addAttribute("payment", payment);
-
-		mav.setViewName(super.getDeviceViewName("pg/kcpOrder"));
-
-		return mav;
-		//return super.getDeviceViewName("pg/kcpOrder");
-	}
 
 	/**
 	 * 카카오페이 결제 요청 처리

+ 12 - 1
src/main/java/com/style24/front/biz/web/TsfPgController.java

@@ -10,9 +10,10 @@ import org.springframework.core.env.Environment;
 import org.springframework.stereotype.Controller;
 import org.springframework.ui.Model;
 import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.ResponseBody;
 import org.springframework.web.servlet.ModelAndView;
 
+import com.style24.core.biz.service.TscOrderService;
+import com.style24.persistence.domain.Order;
 import com.style24.persistence.domain.Payment;
 
 import kr.co.kcp.net.connection.ConnectionKCP;
@@ -25,6 +26,9 @@ import lombok.extern.slf4j.Slf4j;
 @RequestMapping("/pg")
 @Slf4j
 public class TsfPgController {
+	
+	@Autowired
+	private TscOrderService coreOrderService;
 
 	@Autowired
 	private Environment env;
@@ -58,6 +62,13 @@ public class TsfPgController {
 			log.info("CHECK op_cd		::::: {}", request.getParameter("op_cd")		);	// 13이 오면 입금이 잘못된 경우로 취소 노티가 온다고함. 13이 아닌 경우에만 진행해야할듯함.
 			log.info("CHECK cash_a_no	::::: {}", request.getParameter("cash_a_no")	);	// 현금영수증 승인번호
 			log.info("CHECK cash_no		::::: {}", request.getParameter("cash_no")	);	// 현금영수증 거래번호
+			
+			// TODO 2021.03.15 jsh77b 무통장입금 결제완료 처리
+			Order order = new Order();
+			order.setOrdNo(Integer.parseInt(request.getParameter("order_no")));
+			order.setCustNo(0);
+			coreOrderService.updateOrderInfoVBank(order);
+			
 		} catch(Exception e) {
 			result = "9999";		// 실패. return 하지 말것.
 		}

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

@@ -357,11 +357,22 @@
 	
 	<!-- 고객 특정기간 구매 건수 -->
 	<select id="getCustFirstOrderCount" parameterType="Coupon" resultType="int">
-		/* TscOrder.getCustFirstOrderCount */
+		/* TsfOrder.getCustFirstOrderCount */
 		SELECT COUNT(*) 
 		FROM TB_ORDER
 		WHERE CUST_NO = #{custNo}
 		AND ORD_DT BETWEEN CONCAT(#{buyStdt}, '000000') and CONCAT(#{buyEddt}, '235959')
 	</select>
 	
+	<!-- 보유쿠폰체크 -->
+	<select id="getCheckCustCpnSq" parameterType="Order" resultType="int">
+		/* TsfOrder.getCustCpnSqCheck */
+		SELECT COUNT(1)
+		FROM   TB_CUST_COUPON
+		WHERE  1=1
+		AND    CUST_CPN_SQ = #{custCpnSq}
+		AND    CUST_NO = #{custNo}
+		AND    USED_DT IS NULL
+	</select>
+	
 </mapper>

+ 67 - 22
src/main/webapp/WEB-INF/views/web/order/OrderFormWeb.html

@@ -34,7 +34,7 @@
 <form id="payForm" name="payForm">
 
 	<!-- 주문고객정보 -->
-	<table border="1" style="font-size:10px; text-align:center; margin-top:20px; display:none;" name="orderInfo">
+	<table border="1" style="font-size:10px; text-align:center; margin-top:20px; display:none;" name="orderInfo" id="orderInfo">
 		<tbody>
 			<tr style="height:30px;">
 				<th>custNm</th>
@@ -78,10 +78,17 @@
 	</table>
 
 	<!-- 주문상세금액 -->
-	<table border="1" style="font-size:10px; text-align:center; margin-top:20px; display:none;" name="orderDetailInfo">
+	<table border="1" style="font-size:10px; text-align:center; margin-top:20px; display:none;" name="orderDetailInfo" id="orderDetailInfo">
 		<tr style="height:30px;">
 			<th>cartSq</th>
 			<th style="display:none">goodsNm</th>
+			<th>goodsCd</th>
+			<th>goodsType</th>
+			<th>itemCd</th>
+			<th>optCd</th>
+			<th style="display:none">optCd1</th>
+			<th style="display:none">optCd2</th>
+			<th style="display:none">itemQtyr</th>
 			<th>orgCurrPrice</th>
 			<th>cpn1DcSq</th>
 			<th>cpn1DcAmt</th>
@@ -113,6 +120,13 @@
 					<tr style="height:30px;">
 						<td class="cartSq" 			th:text="${goods.cartSq}"></td>
 						<td class="goodsNm" 		th:text="${goods.goodsNm}" style="display:none"></td>
+						<td class="goodsCd"			th:text="${goods.goodsCd}"></td>
+						<td class="goodsType"		th:text="${goods.goodsType}"></td>
+						<td class="itemCd"			th:text="${goods.itemCd}"></td>
+						<td class="optCd"			th:text="${goods.optCd}"></td>
+						<td class="optCd1"			th:text="${goods.optCd1}" style="display:none"></td>
+						<td class="optCd2"			th:text="${goods.optCd2}" style="display:none"></td>
+						<td class="itemQtyr"		th:text="${goods.itemQtyr}" style="display:none"></td>
 						<td class="orgCurrPrice" 	th:text="${goods.orgCurrPrice}"></td>
 						<td class="cpn1CpnSq" 		th:text="${goods.cpn1CpnSq}"></td>
 						<td class="cpn1DcAmt" 		th:text="${goods.orgCurrPrice} - ${goods.currPrice}"></td>
@@ -156,7 +170,7 @@
 	</table>
 
 	<!-- 배송단위목록 -->
-	<table border="1" style="font-size:10px; text-align:center;  margin-top:20px; display:none;" name="delvFeeCdInfo">
+	<table border="1" style="font-size:10px; text-align:center;  margin-top:20px; display:none;" name="delvFeeCdInfo" id="delvFeeCdInfo">
 		<tr style="height:30px;">
 			<th>supplyCompCd</th>
 			<th>delvFeeCd</th>
@@ -176,7 +190,7 @@
 	</table>
 
 	<!-- 주문금액합계 -->
-	<table border="1" style="font-size:10px; text-align:center;  margin-top:20px; display:none;" name="orderSumAmtInfo">
+	<table border="1" style="font-size:10px; text-align:center;  margin-top:20px; display:none;" name="orderSumAmtInfo" id="orderSumAmtInfo">
 		<tr style="height:30px;">
 			<th>orgGoodsSumAmt</th>
 			<th>delvSumAmt</th>
@@ -421,6 +435,8 @@ var cpnApplyTemp		= false;
 var jsonObj 			= {};
 var jsonData			= null;
 
+var pgGb				= "";  
+
 // 컨텐츠 호출
 $(document).ready( function() {
 	
@@ -448,7 +464,7 @@ $(document).ready( function() {
 	custemerInfoSet(jsonData);
 	
 	// 999. 개발화면정보설정
-	var devTemp = true;
+	var devTemp = false;
 	var arr = []
 	arr[0] = "orderInfo";
 	arr[1] = "freegiftInfo";
@@ -489,9 +505,9 @@ var custemerInfoSet = function(jsonData) {
 				$("#custemerInfo").html(result);
 
 				// 고객정보설정
-				$(".custNm").text($("input[name='custNm'").val());
-				$(".email").text($("input[name='email'").val());
-				$(".cellPhnno").text($("input[name='cellPhnno'").val());
+				$(".custNm").text($("input[name='custNm']").val());
+				$(".email").text($("input[name='email']").val());
+				$(".cellPhnno").text($("input[name='cellPhnno']").val());
 			}
 			// 1.2 배송정보로드
 			deliveryAddrInfoSet(jsonData);
@@ -518,12 +534,12 @@ var deliveryAddrInfoSet = function(jsonData) {
 				$("#deliveryAddrInfo").html(result);
 				
 				// 배송정보설정
-				$(".recipZipcode").text($("input[name='recipZipcode'").val());
-				$(".recipBaseAddr").text($("input[name='recipBaseAddr'").val());
-				$(".recipDtlAddr").text($("input[name='recipDtlAddr'").val());
-				$(".delvMemo").text($("input[name='delvMemo'").val());
-				$(".foreignBuyYn").text($("input[name='foreignBuyYn'").val());
-				$(".orderMadeYn").text($("input[name='orderMadeYn'").val());
+				$(".recipZipcode").text($("input[name='recipZipcode']").val());
+				$(".recipBaseAddr").text($("input[name='recipBaseAddr']").val());
+				$(".recipDtlAddr").text($("input[name='recipDtlAddr']").val());
+				$(".delvMemo").text($("input[name='delvMemo']").val());
+				$(".foreignBuyYn").text($("input[name='foreignBuyYn']").val());
+				$(".orderMadeYn").text($("input[name='orderMadeYn']").val());
 			}
 			
 			// 1.3 총알배송가능 지역, 총알배송 가능 시간 체크(초기로드정보)
@@ -701,13 +717,23 @@ var paymentInfoSet = function(jsonData) {
 					// 사은품정보
 					var freegiftValArr 		= $(".freegiftValArr").text().split(",");
 					var prePntDcAmtYn		= $("input[name='rdi-beforpoint']:checked").val();
+					var paynormal			= $("input[name='rdi-paynormal']:checked").val();
 					var orderDetailList		= [];
 					var delvFeeCdList		= [];
 					var ordGoodsQty			= 0;
 					var goodsNm				= "";
+					
+					if (paynormal == null || paynormal == '') {
+						alert("결제수단을 선택해 주세요.");
+						return false;
+					}
+					
+					var paynormalArr		= paynormal.split("|");
+					var pgGb				= paynormalArr[0];
+					var payMeans			= paynormalArr[1];
 
 					// 주문상세데이타 생성
-					$(".cartSq").each(function(){
+					$("#orderDetailInfo .cartSq").each(function(){
 						var orderDetailData = {
 							"cartSq"			: $(this).text()
 							,"currPrice"		: $(this).parent().find(".orgCurrPrice").text()
@@ -733,6 +759,11 @@ var paymentInfoSet = function(jsonData) {
 							,"foreignBuyYn"		: $(this).parent().find(".foreignYn").text()
 							,"makeGoodsYn"		: $(this).parent().find(".orderMadeYn").text()
 							,"delvFeeCd"		: $(this).parent().find(".delvFeeCd").text()
+							,"goodsCd"			: $(this).parent().find(".goodsCd").text()
+							,"itemCdArr"		: $(this).parent().find(".itemCd").text().split(",")
+							,"optCdArr"			: $(this).parent().find(".optCd").text().split(",")
+							,"itemQtyArr"		: $(this).parent().find(".itemQtyr").text().split(",")
+							,"goodsType"		: $(this).parent().find(".goodsType").text()
 						}
 						
 						// 상품수
@@ -742,7 +773,7 @@ var paymentInfoSet = function(jsonData) {
 					});
 					
 					// 주문배송업체정보 생성
-					$(".delvFeeCd").each(function(){
+					$("#delvFeeCdInfo .delvFeeCd").each(function(){
 						var delvFeeCdData = {
 							"delvFeeCd"			: $(this).text()
 							,"supplyCompCd"		: $(this).parent().find(".supplyCompCd").text()
@@ -769,8 +800,8 @@ var paymentInfoSet = function(jsonData) {
 						,"delvFeeCdList"		: delvFeeCdList
 						,"shotDelvYn"			: shotDelvYn
 						,"entryNo"				: $("input[name='entryNo']").val()
-						,"pgGb"					: "KCP"
-						,"payMeans"				: "G014_30"
+						,"pgGb"					: pgGb
+						,"payMeans"				: payMeans // 네이버페이, 카카오페이
 						,"payAmt"				: $(".realOrdSumAmt").text()
 						,"ordNm"				: $(".custNm").text()
 						,"ordPhnno"				: $(".cellPhnno").text()
@@ -779,6 +810,7 @@ var paymentInfoSet = function(jsonData) {
 						,"freegiftValArr"		: $(".freegiftValArr").text().split(",")
 						,"freegiftSqArr"		: $(".freegiftSqArr").text().split(",")
 						,"freegiftGoodsArr"		: $(".freegiftGoodsArr").text().split(",")
+						,"freegiftUsePointArr"	: $(".freegiftUsePointArr").text().split(",")
 					};
 					
 					var orderData = JSON.stringify(orderData);
@@ -797,9 +829,16 @@ var paymentInfoSet = function(jsonData) {
 						success 	: function(result) {
 							// 결재정보로드
 							$("#order_info").html(result);
-							jsf__pay(document.order_info);
-							//fnKakaoPaymentReady();
-							//fnNaverPaymentReady();
+							
+							var pgGb = $("#order_info input[name=pgGb]").val();
+							
+							if (pgGb == "NAVFER") {
+								fnNaverPaymentReady();
+							} else if (pgGb == "KAKAO") {
+								fnKakaoPaymentReady();
+							} else if (pgGb == "KCP") {
+								jsf__pay(document.order_info);
+							}
 						}
 					});
 				});
@@ -1387,7 +1426,13 @@ var custCpnSumAmtCal = function() {
 	});
 	
 	// 쿠폰영역
-	$(".maxdisc_amount").text("(-" + cpnDcSumAmt.addComma() + "원)"); // 쿠폰할인금액합계
+	if (cpnDcSumAmt > 0) {
+		$(".maxdisc_amount").text("(-" + cpnDcSumAmt.addComma() + "원)"); // 쿠폰할인금액합계	
+	} else {
+		$(".maxdisc_amount").text(cpnDcSumAmt.addComma() + "원)"); // 쿠폰할인금액합계
+	}
+	
+	
 	$("#cpnApplyCnt").text(cpnApplyCnt + "장");
 	
 	// 상품목록영역

+ 10 - 7
src/main/webapp/WEB-INF/views/web/order/OrderPaymentInfoWeb.html

@@ -144,23 +144,23 @@
 				<div class="paymethod_box" style="display: none;">
 					<ul class="sel_method">
 						<li>
-							<input type="radio" name="rdi-paynormal" id="rdi-paynormal1" value=""> 
+							<input type="radio" name="rdi-paynormal" id="rdi-paynormal1" value="KCP|G014_30"> 
 							<label for="rdi-paynormal1"><span>신용카드</span></label>
 						</li>
 						<li>
-							<input type="radio" name="rdi-paynormal" id="rdi-paynormal2" value=""> 
+							<input type="radio" name="rdi-paynormal" id="rdi-paynormal2" value="KCP|G014_10"> 
 							<label for="rdi-paynormal2"><span>실시간계좌이체</span></label>
 						</li>
 						<li>
-							<input type="radio" name="rdi-paynormal" id="rdi-paynormal3" value=""> 
+							<input type="radio" name="rdi-paynormal" id="rdi-paynormal3" value="KCP|G014_20"> 
 							<label for="rdi-paynormal3"><span>무통장입금</span></label>
 						</li>
 						<li>
-							<input type="radio" name="rdi-paynormal" id="rdi-paynormal4" value=""> 
+							<input type="radio" name="rdi-paynormal" id="rdi-paynormal4" value="KCP|G014_60"> 
 							<label for="rdi-paynormal4"><span>휴대폰 결제</span></label>
 						</li>
 						<li>
-							<input type="radio" name="rdi-paynormal" id="rdi-paynormal5" value=""> 
+							<input type="radio" name="rdi-paynormal" id="rdi-paynormal5" value="KAKAO|G014_99"> 
 							<label for="rdi-paynormal5">
 								<span>
 									<em class="sr-only">카카오페이 결제</em>
@@ -169,7 +169,7 @@
 							</label>
 						</li>
 						<li>
-							<input type="radio" name="rdi-paynormal" id="rdi-paynormal6" value=""> 
+							<input type="radio" name="rdi-paynormal" id="rdi-paynormal6" value="NAVER|G014_99"> 
 							<label for="rdi-paynormal6">
 								<span>
 									<em class="sr-only">네이버페이 결제</em>
@@ -178,7 +178,7 @@
 							</label>
 						</li>
 						<li>
-							<input type="radio" name="rdi-paynormal" id="rdi-paynormal7" value=""> 
+							<input type="radio" name="rdi-paynormal" id="rdi-paynormal7" value="PAYCO|G014_30"> 
 							<label for="rdi-paynormal7">
 								<span>
 									<em class="sr-only">페이코 결제</em>
@@ -276,6 +276,9 @@ $(document).ready( function() {
 	if (dispYn == "Y") {
 		$("#paymentInfo .fold_head").addClass("on");
 		$("#paymentInfo .fold_cont").css("display", "block");
+		$("#rdi-paymethod-normal").attr("checked", "checked");
+		$(".radio_blk").eq(1).addClass("on");
+		$(".radio_blk").eq(1).find(".paymethod_box").show();
 	}
 });
 </script>