ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [ERMaster] shoppingmall - order
    WEB/ERMaster 2022. 9. 10. 12:36

    Dto

    package com.sam.shop.dto;
    
    import java.sql.Timestamp;
    
    public class OrderVO {
    	private int odseq;
    	private int oseq;
    	private String id;
    	private Timestamp indate;
    	private String mname;
    	private String zip_num;
    	private String address1;
    	private String address2;
    	private String phone;
    	private int pseq;
    	private String pname;
    	private int quantity;
    	private int price2;
    	private String result;
    	
    	public int getOdseq() {
    		return odseq;
    	}
    	public void setOdseq(int odseq) {
    		this.odseq = odseq;
    	}
    	public int getOseq() {
    		return oseq;
    	}
    	public void setOseq(int oseq) {
    		this.oseq = oseq;
    	}
    	public String getId() {
    		return id;
    	}
    	public void setId(String id) {
    		this.id = id;
    	}
    	public Timestamp getIndate() {
    		return indate;
    	}
    	public void setIndate(Timestamp indate) {
    		this.indate = indate;
    	}
    	public String getMname() {
    		return mname;
    	}
    	public void setMname(String mname) {
    		this.mname = mname;
    	}
    	public String getZip_num() {
    		return zip_num;
    	}
    	public void setZip_num(String zip_num) {
    		this.zip_num = zip_num;
    	}
    	public String getAddress1() {
    		return address1;
    	}
    	public void setAddress1(String address1) {
    		this.address1 = address1;
    	}
    	public String getAddress2() {
    		return address2;
    	}
    	public void setAddress2(String address2) {
    		this.address2 = address2;
    	}
    	public String getPhone() {
    		return phone;
    	}
    	public void setPhone(String phone) {
    		this.phone = phone;
    	}
    	public int getPseq() {
    		return pseq;
    	}
    	public void setPseq(int pseq) {
    		this.pseq = pseq;
    	}
    	public String getPname() {
    		return pname;
    	}
    	public void setPname(String pname) {
    		this.pname = pname;
    	}
    	public int getQuantity() {
    		return quantity;
    	}
    	public void setQuantity(int quantity) {
    		this.quantity = quantity;
    	}
    	public int getPrice2() {
    		return price2;
    	}
    	public void setPrice2(int price2) {
    		this.price2 = price2;
    	}
    	public String getResult() {
    		return result;
    	}
    	public void setResult(String result) {
    		this.result = result;
    	}
    }
    

     

    Dao

    package com.sam.shop.dao;
    
    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.util.ArrayList;
    
    import com.sam.shop.dto.CartVO;
    import com.sam.shop.dto.OrderVO;
    import com.sam.shop.util.Dbman;
    
    public class OrderDao {
    	private OrderDao() {}
    	private static OrderDao itc = new OrderDao();
    	public static OrderDao getInstance() { return itc; }
    	
    	Connection con=null;
    	PreparedStatement pstmt=null;
    	ResultSet rs=null;
    }
     
     

     

    장바구니에 담긴 상품 주문하기

    function go_order_insert(){
    	document.formm.action="shop.do?command=orderInsert";
    	document.formm.submit();
    }
    else if(command.equals("orderInsert")) ac=new OrderInsertAction();
    package com.sam.shop.controller.action.mypage;
    
    import java.io.IOException;
    import java.util.ArrayList;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.servlet.http.HttpSession;
    
    import com.sam.shop.controller.action.Action;
    import com.sam.shop.dao.CartDao;
    import com.sam.shop.dao.OrderDao;
    import com.sam.shop.dto.CartVO;
    import com.sam.shop.dto.MemberVO;
    
    public class OrderInsertAction implements Action {
    
    	@Override
    	public void execute(HttpServletRequest request, 
    			HttpServletResponse response) 
    			throws ServletException, IOException {
    		
    		HttpSession session =request.getSession();
    		MemberVO mvo=(MemberVO)session.getAttribute("loginUser");
    		String url=""; 
    		if(mvo==null) {
    			url="shop.do?command=loginForrm";
    		} else {
    		    // 주문자 아이디로 검색한 카트 목록(지금 주문 처리됨)을 
                // 먼저 조회
    			CartDao cdao=CartDao.getInstance();
    			ArrayList<CartVO> list=cdao.selectCart(mvo.getId());
    			
    			// 추출한 list와 주문자의 아이디를 갖고 OrderDao에 가서 
    			// order와 order_detail에 데이터 추가
    			OrderDao odao=OrderDao.getInstance();
    			// 주문 추가 후 추가한 주문의 주문번호를 리턴받음
    			int Oseq=odao.insertOrder(list,mvo.getId());
    			// 방금 주문에 성공한 주문 번호를 갖고 
                // order 리스트로 이동하여
    			// 주문번호로 주문 내역을 다시 조회하고 jsp로 이동함
    			url="shop.do?command=orderList&oseq="+Oseq;
    		}
    		response.sendRedirect(url);
    	}
    }

     

    OrderDao에 insertOrder 생성

    public int insertOrder(ArrayList<CartVO> list, String id) {
    	int oseq=0;
    	con=Dbman.getConnection();
    	// 각 단계별 DB 작업이 끝날 때마다 
        // pstmt.close()로 끊고 다시 시작
    	
    	// 1. 주문번호(시쿼스 자동입력)와 구매자 아이디로 
        //    orders 테이블에 레코드 추가
    	String sql="insert into orders(oseq,id) "
    			+ "values(orders_seq.nextVal,?)";
    	try {
    		pstmt=con.prepareStatement(sql);
    		pstmt.setString(1, id);
    		pstmt.executeUpdate();
    		pstmt.close();
    		
    	// 2. Orders 테이블에 시퀀스로 입력된 
        //    가장 마지막(방금 추가한) 주문 번호 조회
    		sql="select max(oseq) as moseq from orders";
    		pstmt=con.prepareStatement(sql);
    		rs=pstmt.executeQuery();
    		if(rs.next()) oseq=rs.getInt("moseq");
    		pstmt.close();
    		
    	// 3. list의 카트목록들을 Orders에서 얻은 max_oseq와 함께 
        //    order_detail에 추가. 
    	//    반복 실행을 이용하여 카트 목록을 하나씩 꺼내서 
        //    oseq와 함께 order_detail 테이블에 추가.
    		sql="insert into order_detail(odseq,oseq,pseq,quantity) "
    				+ "values(order_detail_seq.nextVal,?,?,?)";
    		for(CartVO cvo:list) {
    			pstmt=con.prepareStatement(sql);
    			pstmt.setInt(1, oseq);
    			pstmt.setInt(2, cvo.getPseq());
    			pstmt.setInt(3, cvo.getQuantity());
    			pstmt.executeUpdate();
    			pstmt.close();
    		}
    		
    	// 4. order_detail에 추가된 카트 내용은  
        //    cart 테이블에서 처리되었으므로  
        //    삭제 또는 result를 2로 변경
    		// sql="delete from cart where cseq=?";
    		sql="update cart set result='2' where cseq=?";
    		for(CartVO cvo:list) {
    			pstmt=con.prepareStatement(sql);
    			pstmt.setInt(1, cvo.getCseq());
    			pstmt.executeUpdate();
    			pstmt.close();
    		}
    	} catch (SQLException e) {e.printStackTrace();
    	} finally {  Dbman.close(con, pstmt, rs);}
    	return oseq;
    }
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <%@ include file="../header.jsp" %>
    <%@ include file="sub_image_menu.jsp" %>
    
    <!-- 방금 주문한 주문 목록만 보이고 
    		같은 화면이 다시 나타나지 않음. 
    		이후 해당내용은 주문내역에서 다른 주문과 함께 볼 수 있음 -->
    <article>
    <form>
    <h2>Order List</h2>
    	<table id="cartList"><!-- 동일한 css 적용을 위한 id 사용 -->
    		<tr><th>상품평</th><th>수 량</th><th>가 격</th>
    				<th>주문일</th><th>삭 제</th></tr>
    		<c:forEach items="${orderList }" var="orderVO">
    			<tr>
    				<td>
    				<a href="shop.do?command=productDetail&pseq=${orderVO.pseq}">
    				<h3>${orderVO.pname }</h3></td>
    				<td>${orderVO.quantity }</td>
    				<td><fmt:formatNumber 
    					value="${orderVO.price2*orderVO.quantity}"
    					type="currency"/></td>
    					<td><fmt:formatDate value="${orderVO.indate}"
    						type="date"/></td>
    				<td>처리 진행 중</td>
    			</tr>
    		</c:forEach>
    		<tr>
    			<th colspan="2">총 액</th>
    			<th colspan="2"><fmt:formatNumber value="${totalPrice }"
    				type="currency"/></th>
    			<th>주문 처리가 완료되었습니다</th>
    		</tr>
    	</table>
    </form>
    </article>
    
    <%@ include file="../footer.jsp" %>

     

     

    mypage에서 주문 내역 보기

    else if(command.equals("mypage")) ac=new MyPageAction(); 
    package com.sam.shop.controller.action.mypage;
    
    import java.io.IOException;
    import java.util.ArrayList;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.servlet.http.HttpSession;
    
    import com.sam.shop.controller.action.Action;
    import com.sam.shop.dao.OrderDao;
    import com.sam.shop.dto.MemberVO;
    import com.sam.shop.dto.OrderVO;
    
    public class MyPageAction implements Action {
    
    	@Override
    	public void execute(HttpServletRequest request, 
    			HttpServletResponse response) 
    			throws ServletException, IOException {
    
    		String url="mypage/mypage.jsp";
    		
    		HttpSession session =request.getSession();
    		MemberVO mvo=(MemberVO)session.getAttribute("loginUser");
    		if(mvo==null) {
    			url="shop.do?command=index";
    		} else {
    			OrderDao odao=OrderDao.getInstance();
    			
    			// mypage.jsp에 최종 전달될 화면에 보여질 리스트 생성
    			ArrayList<OrderVO> finalList=new ArrayList<OrderVO>();
    			// (finalList.get(0).getName() -> "XXXX외 2건")
    // 진행 중인 주문 내역
    // 현재 로그인 한 사용자의 아직 배송안 된 주문내역이 보여짐
    // 예를 들어 한번에 2, 3개의 상품씩 2회에 걸쳐 주문한 상태라면
    // 그리고 그 주문들이 하나도 배송이 안된 상태(배송전)이라면
    // 진행중인 주문 내역은 세줄이 표시됨(주문 건별 표시)
    // 표시 내용은 주문 건별 대표상품의 이름 이용하여 
    // 슬리퍼 포함 3, 겨울용부츠 외 2... 등 총 세줄이 표시됨
    // 그리고 각 행에는 상세보기 버튼이 있어서 클릭하면 
    // 그 주문에 속한 세개의 상품을 볼 수 있음
    
    // 이를 위해서 가장 먼저 필요한 사항은 주문 번호
    // order_view에서 주문자 아이디로 검색하고 
    // result가 1인 주문들을 검색해서 주문번호들을 조회
    // 위의 예를 든 상태라면 주문번호들이 다음과 같음
    // 22 22 22 24 26 26 27 27 27 <- 조회된 주문번호들
    
    // 그러나 정작 우리에게 필요한건 22 24 26 27이므로
    // 조회할 때 distinct 키워드를 써서 조회해 옴
    // select distinct oseq from order_view where id=? and result='1'
    
    			ArrayList<Integer> oseqList
    				=odao.selectOseqOrderIng(mvo.getId());
    // 주문번호들의 리스트, 중복을 없앤 검색
    
    // 주문 번호들로 반복실행을 하면
    // 주문 번호별로 상품을 다시 조회해서 세개의 상품이 있다면 
    // 그들 가격의 총금액을 계산하고 첫번째 상품 저장함.
    // 첫번째 상품의 상품 이름도 대표상품 이름 외 2건이라고 바꿔줌
    // 그 대표상품을 최종화면에 표시될 리스트에 따로 담음.
    
    // 22번 주문의 3개의 상품에서 첫번째 상품의
    // 상품이름을 "상품이름 외 2건"으로 변경.
    // 금액은 3개의 가격을 합산한 금액을 22번 상품의 price2에 저장.
    // 그 변경된 첫번째 상품을 별도의 리스트에 저장함
    			for(Integer oseq:oseqList) {
    				// 주문 번호로 상품 검색 & 리턴
    				ArrayList<OrderVO> orderListByOseq
    					=odao.listOrderByOseq(oseq);
    				// 제네릭형태는 강제형변환 안해도됨
    				
    				// 리턴된 리스트의 첫번째 상품을 꺼냄
    				OrderVO ovo=orderListByOseq.get(0); 
    				
    				// 꺼낸 상품의 이름을 
                    // "'현재 상품의 상품명' 포함 'X'건"이라고 변경함
    				ovo.setPname(ovo.getPname()+" 포함 "
    						+orderListByOseq.size()+"건");
    		
    				// 총 금액 계산
    				int totalPrice=0;
    				for(OrderVO ovo1:orderListByOseq) 
    					totalPrice+=ovo1.getPrice2()*ovo1.getQuantity();
    				
    				// 계산된 총 금액을 꺼낸 상품의 price2에 저장
    				ovo.setPrice2(totalPrice);
    				
    				// 모든 변경을 마친 ovo를 finalList에 담음
    				finalList.add(ovo);
    			}
    			request.setAttribute("orderList", finalList);
    			request.setAttribute("title", "진행 중인 주문 내역");
    		}
    		request.getRequestDispatcher(url).forward(request,response);
    	}
    }
    

     

    OrderDao에 selectOseqOrderIng, listOrderByOseq 생성

    public ArrayList<Integer> selectOseqOrderIng(String id) {
    	ArrayList<Integer> list=new ArrayList<Integer>();
    	
    	String sql="select distinct oseq from order_view "
    			+ "where id=? and result='1' "
    			+ "order by oseq desc";
    	con=Dbman.getConnection();
    	try {
    		pstmt=con.prepareStatement(sql);
    		pstmt.setString(1, id);
    		rs=pstmt.executeQuery();
    		while(rs.next()) {
    			list.add(rs.getInt(1));
    		}
    	} catch (SQLException e) {e.printStackTrace();
    	} finally {  Dbman.close(con, pstmt, rs);}
    	return list;
    }
    
    public ArrayList<OrderVO> listOrderByOseq(int oseq) {
    	ArrayList<OrderVO> list=new ArrayList<OrderVO>();
    	String sql="select*from order_view where oseq=?";
    	con=Dbman.getConnection();
    	try {
    		pstmt=con.prepareStatement(sql);
    		pstmt.setInt(1, oseq);
    		rs=pstmt.executeQuery();
    		while(rs.next()) {
    			OrderVO ovo=new OrderVO();
    			ovo.setOdseq(rs.getInt("odseq"));
    			ovo.setOseq(rs.getInt("oseq"));
    			ovo.setId(rs.getString("id"));
    			ovo.setIndate(rs.getTimestamp("indate"));
    			ovo.setMname(rs.getString("mname"));
    			ovo.setZip_num(rs.getString("zip_num"));
    			ovo.setAddress1(rs.getString("address1"));
    			ovo.setAddress2(rs.getString("address2"));
    			ovo.setPhone(rs.getString("phone"));
    			ovo.setPseq(rs.getInt("pseq"));
    			ovo.setPname(rs.getString("pname"));
    			ovo.setQuantity(rs.getInt("quantity"));
    			ovo.setPrice2(rs.getInt("price2"));
    			ovo.setResult(rs.getString("result"));
    			list.add(ovo);
    		}
    	} catch (SQLException e) {e.printStackTrace();
    	} finally {  Dbman.close(con, pstmt, rs);}
    	return list;
    }
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <%@ include file="../header.jsp" %>
    <%@ include file="sub_image_menu.jsp" %>
    
    <article>
    <h2>${title }</h2>
    <form>
    	<table id="cartList">
    		<tr><th>주문일자</th><th>주문번호</th><th>상품명</th>
    		   		<th>결제 금액</th><th>주문 상세</th><th>처리상태</th></tr>
    		<c:forEach items="${orderList }" var="orderVO">
    			<tr>
    				<td><fmt:formatDate value="${orderVO.indate}"
    					type="date"/></td>
    				<td>${orderVO.oseq }</td><td>${orderVO.pname }</td>
    					<td><fmt:formatNumber value="${orderVO.price2}"
    						type="currency"/></td>
    				<td><a href="shop.do?command=orderDetail&oseq=${orderVO.oseq }">
    					조회</a></td>
    				<td>
    					<c:if test="${orderVO.result=='1' }">미처리</c:if>
    					<c:if test="${orderVO.result=='2' }">완료</c:if>
    				</td>
    			</tr>
    		</c:forEach>
    	</table>
    	<div class="clear"></div>
    	<div id="buttons" style="float:right">
    		<input type="button" value="쇼핑 계속하기" class="cancel"
    			onclick="location.href='shop.do?command=index'"></div>
    </form>
    </article>
    
    <%@ include file="../footer.jsp" %>

     

    주문 내역 상세보기

    else if(command.equals("orderDetail")) ac=new OrderDetailAction(); 
    package com.sam.shop.controller.action.mypage;
    
    import java.io.IOException;
    import java.util.ArrayList;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.servlet.http.HttpSession;
    
    import com.sam.shop.controller.action.Action;
    import com.sam.shop.dao.OrderDao;
    import com.sam.shop.dto.MemberVO;
    import com.sam.shop.dto.OrderVO;
    
    public class OrderDetailAction implements Action {
    
    	@Override
    	public void execute(HttpServletRequest request, 
    			HttpServletResponse response) 
    			throws ServletException, IOException {
    		
    		// 전달된 주문번호 저장
    		int oseq=Integer.parseInt(request.getParameter("oseq"));
    
    		// 로그인 체크
    		HttpSession session =request.getSession();
    		MemberVO loginUser
    			=(MemberVO)session.getAttribute("loginUser");
    		
    		String url="";
    		if(loginUser==null) {
    			url="shop.do?command=index";
    		} else {
    			// 주문번호로 조회한 주문(상품) 리스트 리턴
    			OrderDao odao=OrderDao.getInstance();
    			ArrayList<OrderVO> orderList
    				=odao.listOrderByOseq(oseq);
    			// 리퀘스트에 주문리스트를 담음
    			request.setAttribute("orderList", orderList);
    			//리턴 받은 주문리스트와 첫번째를 이용하여 
    			// orderDetail이란 이름으로 리퀘스트에 담음
    			request.setAttribute("orderDetail", orderList.get(0));
    			
    			int totalPrice=0;
    			for(OrderVO ovo:orderList) 
    				totalPrice+=ovo.getPrice2()*ovo.getQuantity();
    			request.setAttribute("totalPrice", totalPrice);
    			
    			url="mypage/orderDetail.jsp";
    		}
    		// orderDetail.jsp로 이동
    		request.getRequestDispatcher(url).forward(request,response);
    
    	}
    }
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <%@ include file="../header.jsp" %>
    <%@ include file="sub_image_menu.jsp" %>
    
    <article>
    <h2>My Page(주문 상세 정보)</h2>
    	<form>
    	<h3>주문자 정보</h3>
    		<table id="cartList">
    			<tr><th>주문일자</th><th>주문번호</th><th>주문자</th>
    		  			<th>주문 총액</th></tr>
    		   	<tr>
    				<td><fmt:formatDate value="${orderDetail.indate}"
    					type="date"/></td>
    				<td>${orderDetail.oseq }</td>
    				<td>${orderDetail.mname }</td>
    				<td><fmt:formatNumber value="${totalPrice}"
    					type="currency"/></td>
    			</tr>
    		</table>
    	<h3>주문 상품 정보</h3>
    		<table id="cartList">
    			<tr><th>상품명</th><th>상품별 주문번호</th><th>수량</th>
    		   			<th>가격</th><th>처리 상태</th></tr>
    		   <c:forEach items="${orderList }" var="orderVO">
    			<tr>
    				<td>${orderVO.pname }</td>
    				<td>${orderVO.odseq }</td>
    				<td>${orderVO.quantity }</td>
    				<td><fmt:formatNumber 
    					value="${orderVO.price2*orderVO.quantity}"/>
    				<td>
    					<c:choose>
    						<c:when test='${orderVO.result=="1" }'>
    							진행중</c:when>
    						<c:otherwise><span style="color:red">
    							처리완료</span></c:otherwise>
    					</c:choose></td>
    			</c:forEach>
    		</table>
    	</form>
    </article>
    
    <%@ include file="../footer.jsp" %>

     

    즉시 구매

    function go_order(){
    	document.formm.action="shop.do?command=orderInsertOne";
    	document.formm.submit();
    }
    else if(command.equals("orderInsertOne")) ac=new OrderInsertOneAction(); 
    package com.sam.shop.controller.action.mypage;
    
    import java.io.IOException;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.servlet.http.HttpSession;
    
    import com.sam.shop.controller.action.Action;
    import com.sam.shop.dao.OrderDao;
    import com.sam.shop.dto.MemberVO;
    
    public class OrderInsertOneAction implements Action {
    
    	@Override
    	public void execute(HttpServletRequest request, 
    			HttpServletResponse response) 
    			throws ServletException, IOException {
    
    		// 파라미터 저장
    		int pseq=Integer.parseInt(request.getParameter("pseq"));
    		int quantity
    			=Integer.parseInt(request.getParameter("quantity"));
    
    		// 로그인 체크
    		HttpSession session =request.getSession();
    		MemberVO loginUser
    			=(MemberVO)session.getAttribute("loginUser");
    		
    		String url="";
    		int oseq=0;
    		if(loginUser==null) {
    			url="shop.do?command=index";
    		} else {
    			// pseq, quantity, 로그인 한 사람의 id를 이용해서 
    			// orders 테이블과 order_detail테이블에 레코드 추가
    			// 리턴은 추가된 주문번호(oseq)
    			OrderDao odao=OrderDao.getInstance();
    			oseq
    				=odao.insertOrderOne(pseq,quantity,loginUser.getId());
    			url="shop.do?command=orderList&oseq"+oseq;
    		}
    		// 추가된 주문번호를 이용하여 orderList.jsp로 이동
    		request.getRequestDispatcher(url).forward(request, response);
    	}
    }
    

     

    OrderDao에 insertOrderOne 생성

    public int insertOrderOne(int pseq, int quantity, String id) {
    	int oseq=0;
    	con=Dbman.getConnection();
    	String sql="insert into orders(oseq,id) "
    			+ "values(orders_seq.nextVal,?)";
    	try {
    		pstmt=con.prepareStatement(sql);
    		pstmt.setString(1, id);
    		pstmt.executeUpdate();
    		pstmt.close();
    		sql="select max(oseq) as moseq from orders";
    		pstmt=con.prepareStatement(sql);
    		rs=pstmt.executeQuery();
    		if(rs.next()) oseq=rs.getInt("moseq");
    		pstmt.close();
    		sql="insert into order_detail(odseq,oseq,pseq,quantity) "
    				+ "values(order_detail_seq.nextVal,?,?,?)";
    		pstmt=con.prepareStatement(sql);
    		pstmt.setInt(1, oseq);
    		pstmt.setInt(2, pseq);
    		pstmt.setInt(3, quantity);
    		pstmt.executeUpdate();
    	} catch (SQLException e) {e.printStackTrace();
    	} finally {  Dbman.close(con, pstmt, rs);}
    	return oseq;
    }
     

     

    'WEB > ERMaster' 카테고리의 다른 글

    [ERMaster] shoppingmall - admin  (0) 2022.09.10
    [ERMaster] shoppingmall - Q&A, paging  (0) 2022.09.10
    [ERMaster] shoppingmall - cart  (0) 2022.09.10
    [ERMaster] shoppingmall - category  (0) 2022.09.10
    [ERMaster] shoppingmall - find ID, PW  (0) 2022.09.10

    댓글

Designed by Tistory.