jsh77b 5 лет назад
Родитель
Сommit
c996a52730

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

@@ -118,4 +118,14 @@ public interface TsfOrderDao {
 	 */
 	int getCheckCustCpnSq(Order order);
 	
+	/**
+	 * 사은품 수량 및 사용여부 체크
+	 * 
+	 * @param order
+	 * @return int
+	 * @author jsh77b
+	 * @since 2021.04.13
+	 */
+	int getCheckFreegiftVal(Order order);
+	
 }

+ 19 - 5
src/main/java/com/style24/front/biz/service/TsfCartService.java

@@ -78,7 +78,15 @@ public class TsfCartService {
 			goodsType = params.iterator().next().getCartCompsList().iterator().next().getGoodsType();
 			cartGb    = params.iterator().next().getCartCompsList().iterator().next().getCartGb();
 		}
-
+		
+		// 2021.04.13 jsh77b 주문서에서 유효성 체크를 위해서 추가
+		String checkGb = "";
+		if (params.iterator().next().getCheckGb() == null) {
+			checkGb = "C";
+		} else {
+			checkGb = params.iterator().next().getCheckGb();
+		}
+		
 		// 장바구니 상품 및 재고 가능 여부 체크
 		if(TscConstants.GoodsType.SET.value().equals(goodsType)) {
 			for (Cart goodsParams : params) {
@@ -136,8 +144,11 @@ public class TsfCartService {
 						}
 					}
 				}
-
-				saveSetTypeCartInfo(params, cartSqList);
+				
+				// 2021.04.13 jsh77b 주문서에서 유효성 체크를 위해서 추가
+				if ("C".equals(checkGb)) {
+					saveSetTypeCartInfo(params, cartSqList);
+				}
 			}
 		} else {
 			for (Cart param : params) {
@@ -194,8 +205,11 @@ public class TsfCartService {
 					}
 				}
 			}
-
-			saveNormalDealCartInfo(params, cartSqList);
+			
+			// 2021.04.13 jsh77b 주문서에서 유효성 체크를 위해서 추가
+			if ("C".equals(checkGb)) {
+				saveNormalDealCartInfo(params, cartSqList);
+			}
 		}
 
 		result.put("cartSqList", cartSqList);

+ 65 - 52
src/main/java/com/style24/front/biz/service/TsfOrderService.java

@@ -20,6 +20,7 @@ import com.style24.core.biz.service.TscNaverPayService;
 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.Cart;
 import com.style24.persistence.domain.Coupon;
 import com.style24.persistence.domain.GoodsStock;
 import com.style24.persistence.domain.KakaoPay;
@@ -56,6 +57,9 @@ public class TsfOrderService {
 	
 	@Autowired
 	private TsfGoodsService goodsService;
+	
+	@Autowired
+	private TsfCartService cartService;
 
 	/**
 	 * 마이페이지 주문 정보 조회
@@ -454,51 +458,71 @@ public class TsfOrderService {
 	 * @author jsh77b
 	 * @since 2021. 03. 09
 	 */
-	public void orderValidationCheck(Order order) {
+	public String 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;
 		
+		String resultStr	= "SUCCESS";
+		
 		for (Order orderDetail : orderDetailList) {
 			
-			// 2.1 상품 재고 확인
-			GoodsStock checkParam = new GoodsStock();
+			// TODO
+			// 2.1 상품 재고 확인 (상품정보유효성체크)
+			Collection<Cart> params = new ArrayList<Cart>();
+			Cart cart = new Cart();
+			cart.setGoodsCd(orderDetail.getGoodsCd());
+			cart.setGoodsType(orderDetail.getGoodsType());
+			cart.setGoodsQty(orderDetail.getGoodsQty());
+			cart.setCheckGb("O");
 			
-			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);
+			// 세트상품
+			if ("G056_S".equals(orderDetail.getGoodsType())) {
+				
+				Collection<Cart> cartCompsList = new ArrayList<Cart>();
 				
-				// TODO 2021.03.29 재고체크 
-				//String stockResult = goodsService.getCheckStock(checkParam);
-				//if (!"SUCCESS".equals(stockResult)) {
-					//throw new IllegalArgumentException(stockResult);
-				//}
+				// 세트상품일때 구성상품정보 추가 
+				for (int i=0 ; i<orderDetail.getItemCdArr().length ; i++) {
+					Cart itemCart = new Cart();
+					itemCart.setGoodsCd(orderDetail.getGoodsCd());
+					itemCart.setGoodsType(orderDetail.getGoodsType());
+					itemCart.setItemCd(orderDetail.getItemCdArr()[i]);
+					itemCart.setOptCd(orderDetail.getOptCdArr()[i]);
+					itemCart.setGoodsQty(orderDetail.getGoodsQty());
+					itemCart.setCartGb("O");
+					cartCompsList.add(itemCart);
+				}
+				// 구성상품정보추가
+				cart.setCartCompsList(cartCompsList);
+			}
+			else {
+				cart.setItemCd(orderDetail.getItemCdArr()[0]);
+				cart.setOptCd(orderDetail.getOptCdArr()[0]);
+				cart.setGoodsQty(orderDetail.getGoodsQty());
+				cart.setCartGb("O");
 			}
+						
+			// 유효성체크 목록 담기 1개 기준 체크
+			params.add(cart);
 			
+			GagaMap resultMap = cartService.saveCartInfo(params);
+			
+			if (!"SUCCESS".equals(resultMap.get("message").toString())) {
+				resultStr = resultMap.get("message").toString();
+				return resultStr;
+			}
+
 			// 2.2 보유 상품쿠폰체크
 			custCpnSq = orderDetail.getGoodsCpnSq();
 			if (custCpnSq > 0) {
 				orderDetail.setCustCpnSq(custCpnSq);
 				orderDetail.setCustNo(order.getCustNo());
 				if (orderDao.getCheckCustCpnSq(orderDetail) < 1) {
-					throw new IllegalArgumentException("보유하신 상품쿠폰이 존재하지 않습니다.");
+					resultStr = "보유하신 상품쿠폰이 존재하지 않습니다.";
+					return resultStr;
 				}
 			}
 			
@@ -508,7 +532,8 @@ public class TsfOrderService {
 				orderDetail.setCustCpnSq(custCpnSq);
 				orderDetail.setCustNo(order.getCustNo());
 				if (orderDao.getCheckCustCpnSq(orderDetail) < 1) {
-					throw new IllegalArgumentException("보유하신 장바구니쿠폰이 존재하지 않습니다.");
+					resultStr = "보유하신 장바구니쿠폰이 존재하지 않습니다.";
+					return resultStr;
 				}
 			}
 			
@@ -535,13 +560,15 @@ public class TsfOrderService {
 		// 3. 보유포인트금액 > 포인트사용금액 체크
 		int rmPntAmt = coreOrderDao.getCustPointInfo(order);
 		if (rmPntAmt < usPntAmt) {
-			throw new IllegalArgumentException("보유하신 포인트 금액이 부족합니다.");
+			resultStr = "보유하신 포인트 금액이 부족합니다.";
+			return resultStr;
 		}
 		
 		// 4. 보유상품권금액 > 상품권사용금액 체크
 		int rmGfcdAmt = coreOrderDao.getGiftcardInfo(order);
 		if (rmGfcdAmt < usGfcdAmt) {
-			throw new IllegalArgumentException("보유하신 상품권 금액이 부족합니다.");
+			resultStr = "보유하신 상품권 금액이 부족합니다.";
+			return resultStr;
 		}
 		
 		// 5. 장바구니 보유쿠폰 체크 (배송목록체크)
@@ -553,36 +580,22 @@ public class TsfOrderService {
 					delvFeeCd.setCustCpnSq(custCpnSq);
 					delvFeeCd.setCustNo(order.getCustNo());
 					if (orderDao.getCheckCustCpnSq(delvFeeCd) < 1) {
-						throw new IllegalArgumentException("보유하신 배송비쿠폰이 존재하지 않습니다.");
+						resultStr = "보유하신 배송비쿠폰이 존재하지 않습니다.";
+						return resultStr;
 					}
 				}
 			}
 		}
 		
-
 		// TODO 5. 사은품채고체크
+		int rtnCnt = orderDao.getCheckFreegiftVal(order);
+		if (rtnCnt > 0) {
+			resultStr = "선택하신 사은품의 재고가 부족 합니다.";
+			return resultStr;
+		}
+		
+		return resultStr;
 		
 	}
 	
-	// public ModelAndView getOrderList(Order order) {
-	// 	ModelAndView mav = new ModelAndView();
-	// 	// 페이징 처리 및 주문정보 조회
-	// 	List<Integer> ordNoList = new ArrayList<>();
-	//
-	// 	for (Order tmpOrder : this.getPagingOrdNoList(order)) {
-	// 		ordNoList.add(tmpOrder.getOrdNo());
-	// 	}
-	//
-	// 	if (ordNoList.size() > 0) {
-	// 		order.setOrdNoList(ordNoList.stream().mapToInt(Integer::intValue).toArray());
-	// 	}
-	//
-	// 	mav.addObject("orderList", this.getOrderListForMypage(order));
-	// 	mav.addObject("orderInfo", order);
-	//
-	// 	mav.setViewName(super.getDeviceViewName("mypage/MypageOrderList"));
-	// }
-	
-	
-	
 }

+ 22 - 8
src/main/java/com/style24/front/biz/web/TsfOrderController.java

@@ -73,7 +73,8 @@ public class TsfOrderController extends TsfBaseController {
 	 * @since 2021. 02. 02
 	 */
 	@RequestMapping(value = "/noMember")
-	public ModelAndView orderNoMember(Order order, RedirectAttributes redirectAttributes) {
+	public ModelAndView orderNoMember(Order order, @RequestParam(value = "sEncData", required = false) String sEncData
+			, @RequestParam(value = "authMethod", required = false) String authMethod) {
 		ModelAndView mav = new ModelAndView();
 		
 		// 비회원 주문시 로직 정리
@@ -81,14 +82,17 @@ public class TsfOrderController extends TsfBaseController {
 		// @ WEB 의 경우에는 입력한 고객정보와 인증받은 고객정보가 다른경우 고객정보 업데이트
 		// @ MOBILE 인 경우에는 본인인증 후 주문서 이동
 		
-		// 1. 카트시퀀스가 정보가 없을때 처리 장바구니로 이동 
+		// 1. 카트시퀀스가 정보가 없을때 처리 장바구니로 이동
 		if (order.getCartSqArr() == null) {
 			mav.setViewName("redirect:/cart/list/form");						// 장바구니화면이동
 			return mav;
 		}
 		
-		mav.addObject("order" 	, order);										// 주문정보
-		mav.addObject("isLogin"	, TsfSession.isLogin());						// 로그인여부
+		mav.addObject("order" 			, order);								// 주문정보
+		mav.addObject("isLogin"			, TsfSession.isLogin());				// 로그인여부
+		mav.addObject("sEncData"		, sEncData);
+		mav.addObject("authMethod"		, authMethod);
+		
 		mav.setViewName(super.getDeviceViewName("order/OrderNoMember"));		// 비회원주문서화면
 
 		return mav;
@@ -630,8 +634,7 @@ public class TsfOrderController extends TsfBaseController {
 	@ResponseBody
 	public ModelAndView createOrder(@RequestBody Order order) {
 		ModelAndView mav = new ModelAndView();
-		
-		// TODO 주문 시작 데이터 처리 
+		 
 		// 2021.03.09 주문데이타 등록 
 		// 1. 로그인체크 후 custNo 설정
 		if (TsfSession.isLogin()) {
@@ -644,7 +647,14 @@ public class TsfOrderController extends TsfBaseController {
 		
 		// TODO
 		// 2. 주문정보유효성체크
-		orderService.orderValidationCheck(order);
+		String resultStr = orderService.orderValidationCheck(order);
+		
+		// 유효성체크 실패
+		if (!"SUCCESS".equals(resultStr)) {
+			mav.addObject("message", resultStr);
+			mav.setViewName(super.getDeviceViewName("order/OrderEmpty"));
+			return mav;
+		}
 		
 		// 3. 주문기본정보등록(주문접수)
 		coreOrderService.createPreOrder(order);
@@ -660,7 +670,6 @@ public class TsfOrderController extends TsfBaseController {
 		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());
 		log.info("order.getSexGb()             ::: {}", order.getSexGb());
 		log.info("order.getBirthYmd()          ::: {}", order.getBirthYmd());
@@ -687,6 +696,7 @@ public class TsfOrderController extends TsfBaseController {
 		Payment payment = orderService.setPgDataInfo(order);
 		mav.addObject("payment"				, payment);
 		mav.addObject("orderDetailList"		, order.getOrderDetailList());
+		mav.addObject("message"				, resultStr);
 		mav.setViewName(super.getDeviceViewName("pg/kcpOrder"));
 
 		return mav;
@@ -797,6 +807,10 @@ public class TsfOrderController extends TsfBaseController {
 		mav.addObject("isLogin"				, TsfSession.isLogin());				// 로그인여부
 		mav.addObject("delvAddrSq"			, resultMap.get("delvAddrSq"));			// 배송지번호
 		
+		// TODO 주문정보 알림톡전송
+		
+		
+		
 		// TODO 주문정보조회
 		mav.setViewName(super.getDeviceViewName("order/OrderComplete"));
 		return mav;

+ 2 - 0
src/main/java/com/style24/persistence/domain/Cart.java

@@ -91,4 +91,6 @@ public class Cart extends TscBaseDomain {
 
 	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
 	private Cart[] cartGoodsList;		// 장바구니 단품코드
+	
+	private String checkGb; 		// 2021.04.13 jsh77b 추가 장바구니화면 체크 C, 주문서화면 체크 O
 }

+ 25 - 0
src/main/java/com/style24/persistence/mybatis/shop/TsfOrder.xml

@@ -466,4 +466,29 @@
 		AND    USED_DT IS NULL
 	</select>
 	
+	<!-- 사은품 수량 및 사용여부 체크 -->
+	<select id="getCheckFreegiftVal" parameterType="Order" resultType="int">
+		/* TsfOrder.getCheckFreegiftVal */
+		SELECT SUM(CNT) CNT
+		FROM (
+		    SELECT COUNT(1) AS CNT
+		    FROM   TB_FREEGIFT_VAL FV
+		    WHERE  1=1
+		    AND    FV.FREEGIFT_VAL_SQ IN
+		<foreach collection="freegiftValArr" item="item" index="index"  open="(" close=")" separator=",">
+			#{item}
+		</foreach> 
+		    AND    FV.ITEM_QTY <![CDATA[>=]]> FV.LEFT_QTY
+		    UNION  ALL
+		    SELECT COUNT(1) AS CNT
+		    FROM   TB_FREEGIFT_VAL FV
+		    WHERE  1=1
+		    AND    FV.FREEGIFT_VAL_SQ IN
+		<foreach collection="freegiftValArr" item="item" index="index"  open="(" close=")" separator=",">
+			#{item}
+		</foreach> 
+		    AND    FV.DEL_YN = 'Y'
+		) A
+	</select>
+	
 </mapper>

+ 22 - 0
src/main/webapp/WEB-INF/views/mob/order/OrderEmptyMob.html

@@ -0,0 +1,22 @@
+<!DOCTYPE html>
+<html lang="ko" xmlns:th="http://www.thymeleaf.org">
+<!--
+ *******************************************************************************
+ * @source  : OrderEmptyMob.html
+ * @desc    : 주문/결제 Page
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2020 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.02.01   jsh77b     최초 작성
+ *******************************************************************************
+ -->
+<body>
+<script th:inline="javascript">
+var message	= [[${message}]];
+alert(message);
+</script>
+</body>
+</html>

+ 18 - 11
src/main/webapp/WEB-INF/views/mob/order/OrderFormMob.html

@@ -996,17 +996,24 @@ var paymentInfoSet = function() {
 							gagajf.showProgressbar(true);
 						},
 						success 	: function(result) {
-							// 결재정보로드
-							$("#order_info").html(result);
-							
-							var pgGb = $("#order_info input[name=pgGb]").val();
-							
-							if (pgGb == "NAVER") {
-								fnNaverPaymentReady();
-							} else if (pgGb == "KAKAO") {
-								fnKakaoPaymentReady();
-							} else if (pgGb == "KCP" || pgGb == "PAYCO") {
-								jsf__pay(document.order_info);
+							// 유효성체크 통과
+							if (result.message == "SUCCESS") {
+								// 결재정보로드
+								$("#order_info").html(result);
+								
+								var pgGb = $("#order_info input[name=pgGb]").val();
+								
+								if (pgGb == "NAVER") {
+									fnNaverPaymentReady();
+								} else if (pgGb == "KAKAO") {
+									fnKakaoPaymentReady();
+								} else if (pgGb == "KCP" || pgGb == "PAYCO") {
+									jsf__pay(document.order_info);
+								}
+								return;
+							} else {
+								alert(result.message);
+								return false;
 							}
 						}
 					});

+ 25 - 3
src/main/webapp/WEB-INF/views/mob/order/OrderNoMemberMob.html

@@ -50,16 +50,25 @@
 					<div class="form_field">
 						<label class="input_label sr-only">이름(주문자명)</label>
 						<div class="input_wrap"> 
-							<input type="text" class="form_control" name="custNm" placeholder="이름(주문자명)" >
+							<input type="text" class="form_control" name="custNm" placeholder="이름(주문자명)" readonly>
 						</div>
 					</div>
 					
+					<!-- 휴대폰 인증 입력 전 -->
 					<div class="form_field">
 						<label class="input_label sr-only">휴대폰 번호</label>
 						<div class="input_wrap"> 
-							<input type="text" class="form_control" name="cellPhnno" placeholder="휴대폰 번호" onfocus="this.blur();" readonly="readonly">
+							<input type="text" class="form_control" name="cellPhnno" placeholder="휴대폰 인증을 해주세요" readonly>
+							<button type="button" class="btn btn_dark btn_hp_certi beforeAuth" id="btnCellPhoneCertify">
+								<span>본인인증</span>
+							</button>
+							<button type="button" class="btn btn_dark btn_hp_certi afterAuth">
+									<span>인증완료</span>
+							</button>
 						</div>
 					</div>
+					<!-- //휴대폰 인증 입력 전 -->
+					
 					<div class="form_field">
 						<label class="input_label sr-only">이메일주소</label>
 						<div class="input_wrap"> 
@@ -121,10 +130,18 @@
 
 
 <script th:inline="javascript">
+var cartSqArr 		= [[${order.cartSqArr}]];
+const sEncData 		= [[${sEncData}]];   //인증 후 해당 페이지로 리다이렉트함
+const authMethod 	= [[${authMethod}]]; //인증 후 해당 페이지로 리다이렉트함
+
 // 컨텐츠 호출
 $(document).ready( function() {
 	// 1. 타이틀설정
 	$("#htopTitle").text("비회원 주문하기");
+	
+	if (!gagajf.isNull(sEncData)) {
+		fnNiceCallBack(sEncData, authMethod);
+	}
 });
 	
 // 주문하기버튼
@@ -181,8 +198,13 @@ $("#btn_order").on("click", function() {
 	$("#orderForm").submit();
 });
 
+// 휴대폰 인증
+$('#btnCellPhoneCertify').on('click', function () {
+	cfnOpenCellphoneCertify("/order/noMember?cartSqArr="+cartSqArr);
+});
+
 // 나이스 본인인증 후 콜백
-var fnNiceCallBack = function(encData) {
+var fnNiceCallBack = function(encData, authMethod) {
 	if (!gagajf.isNull(encData)) {
 		let custInfo 		= {};
 		custInfo.encData 	= encData;

+ 22 - 0
src/main/webapp/WEB-INF/views/web/order/OrderEmptyWeb.html

@@ -0,0 +1,22 @@
+<!DOCTYPE html>
+<html lang="ko" xmlns:th="http://www.thymeleaf.org">
+<!--
+ *******************************************************************************
+ * @source  : OrderEmptyWeb.html
+ * @desc    : 주문/결제 Page
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2020 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.02.01   jsh77b     최초 작성
+ *******************************************************************************
+ -->
+<body>
+<script th:inline="javascript">
+var message	= [[${message}]];
+alert(message);
+</script>
+</body>
+</html>

+ 3 - 0
src/main/webapp/WEB-INF/views/web/order/OrderFormWeb.html

@@ -1015,6 +1015,8 @@ var paymentInfoSet = function() {
 							,"goodsCd"			: $(this).parent().find(".goodsCd").text()
 							,"itemCdArr"		: $(this).parent().find(".itemCd").text().split(",")
 							,"optCdArr"			: $(this).parent().find(".optCd").text().split(",")
+							,"optCd1Arr"		: $(this).parent().find(".optCd1").text().split(",")
+							,"optCd2Arr"		: $(this).parent().find(".optCd2").text().split(",")
 							,"itemQtyArr"		: $(this).parent().find(".itemQtyr").text().split(",")
 							,"goodsType"		: $(this).parent().find(".goodsType").text()
 							,"entryNo"			: entryNo
@@ -1093,6 +1095,7 @@ var paymentInfoSet = function() {
 							} else if (pgGb == "KCP" || pgGb == "PAYCO") {
 								jsf__pay(document.order_info);
 							}
+							return;
 						}
 					});
 				});