Dorothy_YANG
With Dorothy
Dorothy_YANG
전체 방문자
오늘
어제
  • 분류 전체보기 (279)
    • Hi, I'm Dorothy 🕵️‍♂️ (21)
      • Slowly but Surely (18)
      • IT certifications (3)
    • 🤯TIL (80)
      • HTML & CSS (2)
      • Javascript & jQuery (13)
      • React (13)
      • C언어 (1)
      • JAVA (22)
      • Python (2)
      • Oracle SQL (10)
      • My SQL (5)
      • Spring (12)
    • 💻Programmers (17)
    • 🏫 Open API_JAVA (101)
    • 🌎 Project (10)
      • Shopping (10)
    • 💥 Error (24)
    • ⚙ Setting (23)

블로그 메뉴

  • 홈
  • 방명록

공지사항

인기 글

태그

  • 비쥬얼스튜디오코드
  • 파이썬온라인
  • 이것이자바다
  • sql기간
  • 기간설정
  • 독학후기
  • 코딩앙마
  • 연습문제
  • SQLD합격후기
  • oracle
  • HTML
  • AllArgsConstructor
  • googlecolaboratory
  • 시작일종료일
  • java
  • 오류해결
  • spring
  • SQLD합격
  • colaboratory
  • 기간쿼리
  • CSS
  • 서버등록
  • 콜라보레이토리
  • Javascript
  • Eclipse
  • 창초기화
  • Database
  • 백준
  • 노마드코더
  • SQL

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Dorothy_YANG

With Dorothy

[89일차] 주문하기 / 주문자 정보 & 배송지 정보 폼 / 카카오페이 결제
🏫 Open API_JAVA

[89일차] 주문하기 / 주문자 정보 & 배송지 정보 폼 / 카카오페이 결제

2022. 12. 1. 15:00
728x90

20221129(화)

  • 목차
    - 주문하기
    - 주문자 정보 & 배송지 정보 폼 추가
    - 위 정보와 같음 체크 시
    - 카카오페이 결제

< 주문하기 >

** 먼저 장바구니 목록에서 주문하기 클릭 시 이어지도록 연결

0. sql

-- 6 - 1. 주문 테이블
CREATE TABLE ORDER_TBL(
   ODR_CODE             NUMBER                        CONSTRAINT PK_ORDER_CODE PRIMARY KEY,
   MEM_ID               VARCHAR2(15)                  NOT NULL,
   ODR_NAME             VARCHAR2(30)                  NOT NULL,
   ODR_ZIPCODE          CHAR(5)                       NOT NULL,
   ODR_ADDR             VARCHAR2(50)                  NOT NULL,
   ODR_ADDR_D           VARCHAR2(50)                  NOT NULL,
   ODR_PHONE            VARCHAR2(20)                  NOT NULL,
   ODR_TOTAL_PRICE      NUMBER                        NOT NULL,
   ODR_STATUS           VARCHAR2(30)                  NOT NULL,
   PAYMENT_STATUS       VARCHAR2(30)                  NOT NULL,
   ODR_DATE             DATE DEFAULT SYSDATE          NOT NULL
);   
COMMIT;

--6 - 2. 주문 상세 테이블
CREATE TABLE ORDER_DETAIL_TBL(
   ODR_CODE           NUMBER                        NOT NULL,
   PDT_NUM            NUMBER                        NOT NULL,
   ODR_AMOUNT         NUMBER                        NOT NULL,
   ODR_PRICE          NUMBER                        NOT NULL,
   PRIMARY KEY (ODR_CODE, PDT_NUM) 
);

-- 주문번호
CREATE SEQUENCE SEQ_ORD_CODE;

 

1. OrderVO 생성


2. Order 컨트롤러


3. Order 매퍼  

     - Cart 매퍼 내용을 가져와서 사용(Order 매퍼 생략)

4. Order 서비스


5. Order 컨트롤러


6. views > order > orderList.jsp 생성

- 필요한 부분만 남기고 나머진 날리기

 

7. orderListInfo.jsp

- cartlist.jsp 파일에서 복붙

 

 

ex) 실행화면

 


< 주문자 정보 & 배송지 정보 폼 추가 >

  • orderListInfo.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>

<!doctype html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    <meta name="description" content="">
    <meta name="author" content="Mark Otto, Jacob Thornton, and Bootstrap contributors">
    <meta name="generator" content="Hugo 0.101.0">
    <title>Pricing example · Bootstrap v4.6</title>

    <link rel="canonical" href="https://getbootstrap.com/docs/4.6/examples/pricing/">

    <%@include file="/WEB-INF/views/include/common.jsp" %>

    <!-- Favicons -->
<link rel="apple-touch-icon" href="/docs/4.6/assets/img/favicons/apple-touch-icon.png" sizes="180x180">
<link rel="icon" href="/docs/4.6/assets/img/favicons/favicon-32x32.png" sizes="32x32" type="image/png">
<link rel="icon" href="/docs/4.6/assets/img/favicons/favicon-16x16.png" sizes="16x16" type="image/png">
<link rel="manifest" href="/docs/4.6/assets/img/favicons/manifest.json">
<link rel="mask-icon" href="/docs/4.6/assets/img/favicons/safari-pinned-tab.svg" color="#563d7c">
<link rel="icon" href="/docs/4.6/assets/img/favicons/favicon.ico">
<meta name="msapplication-config" content="/docs/4.6/assets/img/favicons/browserconfig.xml">
<meta name="theme-color" content="#563d7c">

    <style>
      .bd-placeholder-img {
        font-size: 1.125rem;
        text-anchor: middle;
        -webkit-user-select: none;
        -moz-user-select: none;
        -ms-user-select: none;
        user-select: none;
      }

      @media (min-width: 768px) {
        .bd-placeholder-img-lg {
          font-size: 3.5rem;
        }
      }
    </style>
   <script>
      let msg = '${msg}';
      if(msg != '') {
        alert(msg);
      }

    </script>
    
  </head>
  <body>
    
<%@include file="/WEB-INF/views/include/header.jsp" %>
<%@include file="/WEB-INF/views/include/categoryMenu.jsp" %>

<div class="pricing-header px-3 py-3 pt-md-5 pb-md-4 mx-auto text-center">
  <h1 class="display-4">${cate_name }</h1>
</div>

<div class="container">
  
  <div class="row">
     <div class="col-md-12">
        <div class="box">
         <div class="box-header">
            <h3 class="box-title">주문 목록</h3>
         </div>

         <div class="box-body no-padding">
            <table class="table table-striped" id="cartlist">
            <tbody><tr>
               <th style="width: 20%">이미지</th>
               <th style="width: 15%">상품정보</th>
               <th style="width: 15%">판매가</th>
               <th style="width: 10%">수량</th>
               <th style="width: 10%">적립금</th>
               <th style="width: 10%">배송구분</th>
               <th style="width: 10%">배송비</th>
               <th style="width: 10%">합계</th>
               
               </tr>
            <c:forEach items="${orderList }" var="orderListVO">
            <c:set var="unit_price" value="${orderListVO.sales_price }" />
            <tr>
               <td><img src="/order/displayFile?folderName=${orderListVO.pdt_img_folder }&fileName=s_${orderListVO.pdt_img}"></td>
               <td>${orderListVO.pdt_name }</td>
               <td>₩<span class="pdt_price"><fmt:formatNumber type="currency" pattern="#,###" value="${orderListVO.pdt_price }" /></span></td>
               <td>
                  <input type="text" name="cart_amount" value="${orderListVO.cart_amount }" style="width:50px;"><br>
                  
               </td>
               <td>포인트</td>
               <td>기본배송</td>
               <td>무료</td>
               <td>₩<span class="sales_price"><fmt:formatNumber type="currency" pattern="#,###" value="${orderListVO.sales_price }" />
               </span></td>
               
            </tr>
            <c:set var="sum_price" value="${sum_price +  unit_price}"></c:set>
            </c:forEach>
            </tbody>
            <tfoot>
                  <tr>
                  <c:if test="${empty  orderList}">
                  <td colspan="10" style="text-align: center">주문내역이 없습니다.</td>
                  </c:if>
                  <c:if test="${!empty  orderList}">
                  <td colspan="10" style="text-align: right">총금액: ₩<span id="sum_price"><fmt:formatNumber type="currency" pattern="#,###" value="${sum_price }" /></span></td>
                  </c:if>
                  </tr>
                  </tfoot>
            
            </table>
            <div>
               <form id="orderForm" action="" method="post">
                    <h5>주문자정보</h5>
                    <hr>
                    <div class="form-group row">
                      <label for="mem_name" class="col-sm-2 col-form-label">이름</label>
                      <div class="col-sm-10">
                        <input type="text" class="form-control" id="s_mem_name" value="${sessionScope.loginStatus.mem_name }"  readonly>
                      </div>
                    </div>
                    <div class="form-group row">
                      <label for="mem_email" class="col-sm-2 col-form-label">전자우편</label>
                      <div class="col-sm-10">
                        <input type="text" class="form-control" id="s_mem_email" value="${sessionScope.loginStatus.mem_email }" readonly>
                      </div>
                    </div>
                    <div class="form-group row">
                      <label for="mem_phone" class="col-sm-2 col-form-label">휴대폰 번호</label>
                      <div class="col-sm-10">
                        <input type="text" class="form-control" id="s_mem_phone" value="${sessionScope.loginStatus.mem_phone }" readonly>
                        <input type="hidden" class="form-control" id="s_mem_zipcode" value="${sessionScope.loginStatus.mem_zipcode }">
                        <input type="hidden" class="form-control" id="s_mem_addr" value="${sessionScope.loginStatus.mem_addr }">
                        <input type="hidden" class="form-control" id="s_mem_addr_d" value="${sessionScope.loginStatus.mem_addr_d }">
                      </div>
                    </div>
                    <input type="checkbox" id="same"><label for="same">위 정보와 같음</label>
                    <h5>배송 정보</h5>
                    <hr>
                    <div class="form-group row">
                      <label for="mem_name" class="col-sm-2 col-form-label">이름</label>
                      <div class="col-sm-10">
                        <input type="text" class="form-control" id="mem_name" name="odr_name">
                      </div>
                    </div>
                    <div class="form-group row">
                      <label for="mem_phone" class="col-sm-2 col-form-label">휴대폰 번호</label>
                      <div class="col-sm-10">
                        <input type="text" class="form-control" id="mem_phone" name="odr_phone">
                      </div>
                    </div>
                    <div class="form-group row">
                      <label for="mem_phone" class="col-sm-2 col-form-label">배송지 선택</label>
                      <div class="col-sm-10">
                        <div class="form-check form-check-inline">
                       <input class="form-check-input" type="radio" name="receiveAddr" id="receiveAddr1" value="1" checked>
                       <label class="form-check-label" for="inlineRadio1">자택</label>
                     </div>
                    <div class="form-check form-check-inline">
                       <input class="form-check-input" type="radio" name="receiveAddr" id="receiveAddr2" value="2">
                       <label class="form-check-label" for="inlineRadio2">타지역</label>
                    </div>
                      </div>
                    </div>
                    
                    <div class="form-group row">
                      <label for="sample2_postcode" class="col-sm-2 col-form-label">우편번호</label>
                      <div class="col-sm-10">
                        <input type="text" class="form-control" id="sample2_postcode" name="odr_zipcode" value="${sessionScope.loginStatus.mem_zipcode }">
                        <input type="button" onclick="sample2_execDaumPostcode()" value="우편번호 찾기">
                      </div>
                    </div>
                    <div class="form-group row">
                      <label for="sample2_address" class="col-sm-2 col-form-label">주소</label>
                      <div class="col-sm-10">
                        <input type="text" class="form-control" id="sample2_address" name="odr_addr" value="${sessionScope.loginStatus.mem_addr }">
                      </div>
                    </div>
                    <div class="form-group row">
                      <label for="sample2_detailAddress" class="col-sm-2 col-form-label">상세주소</label>
                      <div class="col-sm-10">
                        <input type="text" class="form-control" id="sample2_detailAddress" name="odr_addr_d" value="${sessionScope.loginStatus.mem_addr_d }">
                        <input type="hidden" id="sample2_extraAddress" placeholder="참고항목">
                      </div>
                    </div>
                    <div class="form-group row">
                      <label for="mem_phone" class="col-sm-2 col-form-label">배송지 메세지(100자 이내)</label>
                      <div class="col-sm-10">
                        <textarea name="odr_message" class="form-control" rows="5"></textarea>
                        <input type="hidden" name="odr_total_price" value="${sum }">
                      </div>
                    </div>
                    <div class="form-group">
                      <label for="pay_method">결제방법</label>
                      <select name="pay_method" id="pay_method" class="form-control" >
                        <option value="">결제방법을 선택하세요</option>
                        <option value="무통장입금">무통장입금</option>
                        <option value="카카오페이">카카오페이</option>
                        <option value="휴대폰">휴대폰</option>
                        <option value="신용카드">신용카드</option>
                      </select>
                      <select name="bank" id="bank" class="form-control" >
                        <option value="">입금은행을 선택하세요</option>
                        <option value="00000000000000">국민은행(00000000000000)</option>
                        <option value="11111111111111">하나은행(11111111111111)</option>
                        <option value="22222222222222">신한은행(22222222222222)</option>
                        <option value="33333333333333">우리은행(33333333333333)</option>
                      </select>
                      <input type="hidden" name="pay_nobank" id="pay_nobank" value="">
                      <input type="hidden" name="pay_nobank_price" id="pay_nobank_price" value="${sum }">
                    </div>
                    <div class="form-group row">
                      <label for="mem_name" class="col-sm-2 col-form-label">입금자명</label>
                      <div class="col-sm-10">
                        <input type="text" class="form-control" id="pay_nobank_user" name="pay_nobank_user">
                      </div>
                    </div>
                    
                </form>
                </div>
         </div>
		 <div class="box-footer text-center">
   				<button type="button" id="btnOrder" class="btn btn-primary">주문하기</button>
   				<input type="image" src="/image/payment_icon_yellow_medium.png" id="kakao_pay" class="btn btn-link" disabled>
   				<button type="button" id="btnCancel" class="btn btn-primary">주문취소</button>
   		</div>

      </div>
     
     </div>
  </div>

  <%@include file="/WEB-INF/views/include/footer.jsp" %>
</div>

  <script>

    $(document).ready(function(){

      //사용자정의함수
      // 콤마제거하기. 연산할 때 사용
      $.withoutCommas = function(x) {

        return x.toString().replace(",", "");
      }

      //3자리마다 콤마찍기. 표시할 때 사용.
      $.numberWithCommas = function(x) {
        return x.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',');
      }


    }); // ready() 끝

    //sum_price가격 변경
    
    function fn_sum_price() {
        
      let sum_price = 0;
      $("table#cartlist span.sales_price").each(function(index, item){
        sum_price += parseInt($.withoutCommas($(item).text()));  
      });
      
      $("span#sum_price").text($.numberWithCommas(sum_price)); 
    }
    
  </script>  
  </body>
</html>

 

 

ex) 실행화면

 

 

 


< 위 정보와 같음 체크 시 >

orderListInfo.jsp 코드추가

 

코드 추가


< 카카오페이 결제 >

  • kakaopay 관련 참고 사이트
    https://developers.kakao.com/
 

Kakao Developers

카카오 API를 활용하여 다양한 어플리케이션을 개발해보세요. 카카오 로그인, 메시지 보내기, 친구 API, 인공지능 API 등을 제공합니다.

developers.kakao.com

 

728x90
저작자표시 (새창열림)

'🏫 Open API_JAVA' 카테고리의 다른 글

[91일차] 카카오페이 연결 / 상품 목록에서 바로구매 진행하기  (0) 2022.12.01
[90일차] 카카오페이 결제시스템 적용 / 카카오페이 클릭 후 작업 / 결제승인요청 / 주문하기 기능 안에서 일어나는 작업  (0) 2022.12.01
[87일차] 장바구니 담기 / 장바구니 목록  (0) 2022.11.27
[86일차 - 2] 삭제 이벤트 처리 / nav에 링크연결 / admin 계정 생성 / 상품 메인페이지 만들기 / 카테고리 목록 만들기  (0) 2022.11.27
[86일차 - 1] 관리자_상품 수정 (페이지, 정보 읽어오기, 수정하기)  (0) 2022.11.24
    '🏫 Open API_JAVA' 카테고리의 다른 글
    • [91일차] 카카오페이 연결 / 상품 목록에서 바로구매 진행하기
    • [90일차] 카카오페이 결제시스템 적용 / 카카오페이 클릭 후 작업 / 결제승인요청 / 주문하기 기능 안에서 일어나는 작업
    • [87일차] 장바구니 담기 / 장바구니 목록
    • [86일차 - 2] 삭제 이벤트 처리 / nav에 링크연결 / admin 계정 생성 / 상품 메인페이지 만들기 / 카테고리 목록 만들기
    Dorothy_YANG
    Dorothy_YANG
    Slowly but Surely, 비전공 문과생의 개발공부

    티스토리툴바