--> -->

JSP

 

 

주문 처리를 위한 DAO 를 만들기 위해서 주문 정보를 담을 VO를 만든다.

DTO (VO)

OrderVO

public class OrderVO {
	  private int odseq;
      private int oseq;
      private String id;
      private Timestamp indate;
      private int pseq;
      private int quantity;
      private String mname;
      private String zip_num;
      private String address;
      private String phone;
      private String pname;
      private int price2;
      
   setter, getter

 

주문 처리 등록을 위해 CartVO 자바빈 클래스에 oseq 주문번호를 추가한다.

CartVO

public class CartVO {
    
	private int odseq; //주문 상세 번호
	private int oseq;  //주문번호
	private int cseq;  //장바구니 번호
	private String id;  //회원아이디
	private int pseq;  //상품번호
	private String mname;  //회원이름
	private String pname; //상품이름
	private int quantity; //수량
	private int price2; //가격
	private String image;
	private Timestamp indate;

setter, getter

 

 

 

주문 처리의 테이블 내용은 다음과 같다.

SQL

-- 주문 테이블 명 tbl_orders

create table tbl_orders(

   oseq number PRIMARY KEY,		 -- 주문번호
   id varchar2(20) 	, 			-- 주문자 아이디 , tbl_member 테이블의 기본키의 id컬럼
   indate date default sysdate		-- 주문일			  
)TABLESPACE macaronics ;  

-- tbl_orders 시퀀스 생성
create SEQUENCE orders_seq 
 START WITH 1
 INCREMENT BY 1
 NOMAXVALUE 
 NOCYCLE ; 
 


 
-- tbl_orders 외래키 제약 조건 추가 
alter table TBL_ORDERS 
add CONSTRAINT TBL_ORDERS_id_fk FOREIGN KEY (id)
REFERENCES tbl_member(id) on DELETE CASCADE ;



-- 주문 상세 테이블 생성
create table tbl_order_detail(
	
	odseq number PRIMARY KEY , -- 주문 상세번호  order_detail_seq 시퀀스 객체로 자동 일련 번호 부여
	oseq number ,			--  FK 주문번호 tbl_orders 테이블의 기본 키인 oseq 컬럼
	pseq number ,			--  FK 상품번호 tbl_product 테이블릐 기본 키인 pseq 컬럼
	quantity number,		-- 주문수량
	result char(1) 	DEFAULT  1  -- 처립여부 1: 미처리 2 : 처리
)TABLESPACE macaronics ;  


-- 주문 상세 테이블 시퀀스 생성
create SEQUENCE order_detail_seq
START WITH 1
INCREMENT by 1
NOMAXVALUE 
NOCACHE 
NOCYCLE;


-- TBL_ORDER_DETAIL oseq 외래키 제약 조건 추가 
alter table TBL_ORDER_DETAIL
add CONSTRAINT tbl_order_detail_oseq_FK FOREIGN key(oseq)
REFERENCES tbl_orders(oseq) on DELETE CASCADE ;


-- TBL_ORDER_DETAIL pseq 외래키 제약 조건 추가 
alter table TBL_ORDER_DETAIL
add CONSTRAINT tbl_order_detail_pseq_FK FOREIGN key(pseq)
REFERENCES tbl_product  (pseq) on DELETE CASCADE ;

 

 

주문 테이블을 엑세스하는 DAO 클래스 만들기

DAO

주문 등록에 순서는 다음과 같이 개발진행한다.

1. tbl_orders 등록하기

2. 등록된 oseq 가져오기

3. 주문 상세 tbl_order_detail 테이블에 개별 주문 상품 등록 하기

OrderDAO

package net.macaronics.web.dao;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.ibatis.session.SqlSession;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

import config.MybatisService;
import net.macaronics.web.dto.CartVO;
import net.macaronics.web.dto.OrderVO;

public class OrderDAO {
	
	private static OrderDAO instance;
	private Logger logger =LogManager.getLogger(OrderDAO.class);
	private SqlSession sqlSession;	
	
	private OrderDAO() {

	}

	public static OrderDAO getInstance() {
		if (instance == null) {
			instance = new OrderDAO();
		}
		return instance;
	}

	
	//주문 tbl_orders 테이블에 등록
	public int insertOrder(List<CartVO> cartList, String id){
		int maxOseq=0;
		try{
		
			sqlSession =MybatisService.getFactory().openSession();
			
			//1. tbl_orders 등록하기
			sqlSession.insert("order.insertOrder", id); 
			sqlSession.commit();
			
			//2. 등록된 oseq 가져오기
			maxOseq=sqlSession.selectOne("order.selectMaxOseq");
			logger.info("maxOseq -----------------{}  " ,  maxOseq);
			
			//3. 주문 상세 tbl_order_detail 테이블에 개별 주문 상품 등록 하기
			for(CartVO cartVO : cartList){
				//주문 테이블의 maxOseq 번호를 자바빈에 저장하기
				cartVO.setOseq(maxOseq);
				insertOrderDetail(cartVO);
			}

		}catch(Exception e){
			e.printStackTrace();
		}finally{
			MybatisService.sessionClose(sqlSession);
		}
		return maxOseq;
	}
	
	
	// 주문 상세 tbl_order_detail 테이블에 개별 주문 상품 등록
	public void insertOrderDetail(CartVO cartVO){
		try{
			logger.info("insertOrderDetail  ------- {}" , cartVO.toString());
			sqlSession=MybatisService.getFactory().openSession();
			sqlSession.insert("order.insertOrderDetail", cartVO);
		}catch(Exception e){
			e.printStackTrace();
		}finally{
			sqlSession.commit();
			MybatisService.sessionClose(sqlSession);
		}
	}
	
	
	//주문 목록 불러오기
	public List<OrderVO> listOrderById(String id, String result, int oseq){
		List<OrderVO> orderList=new ArrayList<>();
		try{
			sqlSession =MybatisService.getFactory().openSession();
			Map<String, Object> map =new HashMap<>();
			map.put("id", id);
			map.put("result", result);
			map.put("oseq", oseq);
			orderList=sqlSession.selectList("order.listOrderById" , map);
		}catch(Exception e){
			e.printStackTrace();
		}finally{
			MybatisService.sessionClose(sqlSession);
		}
		return orderList;
	}
	
	
	//현재 진행중인 주문처리 목록 상세 보기를 위한 tbl_orders 테이블의 주문번호 불러오기 
	public List<Integer> selectSeqOrdering(String id){
		List<Integer> oseqList=new ArrayList<>();
		try{
		
			sqlSession=MybatisService.getFactory().openSession();
			oseqList=sqlSession.selectList("order.selectSeqOrdering", id);
			
		}catch(Exception e){
			e.printStackTrace();
		}finally{
			MybatisService.sessionClose(sqlSession);
		}
		return oseqList;
	}
	
	
	
}













 

 

 

 

주문 처리를 위한 액션 클래스

Action

 

OrderInsertAction

package net.macaronics.web.controll;

import java.io.IOException;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import net.macaronics.web.controll.action.Action;
import net.macaronics.web.dao.CartDAO;
import net.macaronics.web.dao.OrderDAO;
import net.macaronics.web.dto.CartVO;
import net.macaronics.web.dto.MemberVO;

public class OrderInsertAction implements Action {

	@Override
	public void execute(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String url = "MacaronicsServlet?command=order_list&oseq=";
		
		HttpSession session =request.getSession();
		MemberVO loginUser=(MemberVO)session.getAttribute("loginUser");
		if(loginUser==null){
			url = "MacaronicsServlet?command=login_form";			
		}else{
			CartDAO cartDAO =CartDAO.getInstance();
			//장바구니에 담긴 목록을 가져온다.
			List<CartVO> cartList=cartDAO.listCart(loginUser.getId());
			
			OrderDAO orderDAO =OrderDAO.getInstance();
			
			//주문 상품으로 등록한다. 반환 값으로 현재 등록한 주문번호를 가져온다.
			int maxOseq=orderDAO.insertOrder(cartList, loginUser.getId());
		
			
			//장바구니 비우기
			for(CartVO cart: cartList){
				cartDAO.deleteCart(cart.getCseq(), loginUser.getId());
			}
			url +=maxOseq;	
		}
		
		response.sendRedirect(url);
	}

	
	
	
}


 

 

OrderListAction

package net.macaronics.web.controll;

import java.io.IOException;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import net.macaronics.web.controll.action.Action;
import net.macaronics.web.dao.CartDAO;
import net.macaronics.web.dao.OrderDAO;
import net.macaronics.web.dto.CartVO;
import net.macaronics.web.dto.MemberVO;
import net.macaronics.web.dto.OrderVO;

public class OrderListAction implements Action{

	//주문 처리후 바로 보여주는 주문 목록 페이지
	@Override
	public void execute(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String url ="mypage/orderList.jsp";
		
		HttpSession session =request.getSession();
		MemberVO loginUser =(MemberVO)session.getAttribute("loginUser");
		
		if(loginUser ==null){
			url="MacaronicsServlet?command=login_form";
		}else{
			OrderDAO orderDAO =OrderDAO.getInstance();
			int oseq=Integer.parseInt(request.getParameter("oseq"));
			
			// 미처리 항목 1을 넣는다.
			List<OrderVO> orderList =orderDAO.listOrderById(loginUser.getId(), "1", oseq);
			
			int orderTotalPrice =0;
			for(OrderVO orderVO : orderList){
				orderTotalPrice +=orderVO.getPrice2()*orderVO.getQuantity();
			}
			
			request.setAttribute("orderList", orderList);
			request.setAttribute("orderTotalPrice", orderTotalPrice);
		}
		request.getRequestDispatcher(url).forward(request, response);	
	}

	
	
	
	
}






 

 

 

View

주문 내역 리스트 출력 

orderList.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>  
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>   
<!DOCTYPE html>
<html>
<head>
<jsp:include page="../include/Header.jsp" />  
 </head> 
<body>
<jsp:include page="../include/HeaderMenu.jsp" />


  <!-- catg header banner section -->
  <section id="aa-catg-head-banner">
   <img src="/dailyShop/img/slider/4.jpg" alt="fashion img" height="300" style="margin-left: auto; margin-right: auto; display: block;">
   <div class="aa-catg-head-banner-area">
     <div class="container">
     </div>
   </div>
  </section>
  <!-- / catg header banner section -->


  <!-- product category -->
  <section id="aa-product-category">
    <div class="container">
      <div class="row">
        <div class="col-lg-9 col-md-9 col-sm-8 col-md-push-3">
          <div class="aa-product-catg-content">
          
            <div class="aa-product-catg-body">
              <div class="table-responsive">
              <table class="table table-striped">
              	 <tr class="danger">
              	   <th>상품명</th>
              	   <th>수량</th>
              	   <th>가격</th>
              	   <th>주문일</th>
              	   <th>진행상태</th>
              	 </tr>
              	 <tr>
              	   <c:forEach items="${orderList}" var="orderVO">
              	   	 <tr>
              	   	  <td>${orderVO.pname}</td>
              	   	  <td>${orderVO.quantity }</td>
              	   	  <td><fmt:formatNumber type="currency"  value="${orderVO.price2*orderVO.quantity }"/></td>
              	   	  <td><fmt:formatDate value="${orderVO.indate }" type="date" /></td>
              	   	  <td>처리 진행 중</td>
              	   	 </tr>
              	   </c:forEach>
              	 </tr>
              	            
              </table>
              </div>
                
            </div>
            
            <div class="text-center">
            	<input type="button" value="쇼핑 계속하기" class="btn btn-primary"
            	 onclick="location.href='MacaronicsServlet?command=index'" >
            </div>

          </div>
        </div>
        
        
        <div class="col-lg-3 col-md-3 col-sm-4 col-md-pull-9">
          <aside class="aa-sidebar">
            <!-- single sidebar -->
            <div class="aa-sidebar-widget">
              <h3>Category</h3>
              <ul class="aa-catg-nav">      
             <li><a href="MacaronicsServlet?command=category&kind=1">남성운동화</a></li>
              <li><a href="MacaronicsServlet?command=category&kind=2">여성운동화</a></li>
              <li><a href="MacaronicsServlet?command=category&kind=3">남성구두</a></li>
              <li><a href="MacaronicsServlet?command=category&kind=4">여성구두</a></li>
              <li><a href="MacaronicsServlet?command=category&kind=5">On Sale</a></li>
           
              </ul>
            </div>
       
           
          </aside>
                
        </div>
       
      </div>
    </div>
  </section>
  <!-- / product category -->






<jsp:include page="../include/Footer.jsp" />



 

 

 

 

 

 

제작 : macaronics.net - Developer  Jun Ho Choi

소스 :  https://github.com/braverokmc79/jsp_sin

 

${request.getContextPath() } 처리를 안한 부분이 있으므로 

루트 설정( http://macaronics.net/index.php/m01/jsp/view/1352)    및 server.xml  에서 DB 컨넥션 설정은 필수 설정이다.

 

 

 

 

about author

PHRASE

Level 60  라이트

매에는 장사 없다 , 매로 때리는 데에는 끝까지 버티어 낼 수가 없는 법이다.

댓글 ( 0)

댓글 남기기

작성