-
[ERMaster] shoppingmall - orderWEB/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