CartVO 내용추가
//회원번호별 총 구매액
//장바구니 목록
public List<CartVO> getListCart(int mem_num) throws Exception{
Connection conn = null;
PreparedStatement pstmt = null;
String sql =null;
List<CartVO> list = null;
ResultSet rs = null;
try {
//커넥션풀로부터 커넥션 할당
conn = DBUtil.getConnection();
//SQL문 작성
sql="SELECT * FROM zcart c JOIN zitem i USING(item_num) "
+ "WHERE mem_num=? ORDER BY c.reg_date DESC ";
//PreparedStatment 객체 생성
pstmt = conn.prepareStatement(sql);
//?에 데이터 바인딩
pstmt.setInt(1, mem_num);
rs = pstmt.executeQuery();
list = new ArrayList<CartVO>();
while(rs.next()) {
CartVO cart = new CartVO();
cart.setCart_num(rs.getInt("cart_num"));
cart.setItem_num(rs.getInt("item_num"));
cart.setOrder_quantity(rs.getInt("order_quantity"));
cart.setMem_num(rs.getInt("mem_num"));
//상품 정보를 담기위해 ItemVO 객체 생성
ItemVO item = new ItemVO();
item.setName(rs.getString("name"));
item.setPrice(rs.getInt("price"));
item.setPhoto1(rs.getString("photo1"));
item.setQuantity(rs.getInt("quantity"));
item.setStatus(rs.getInt("status"));
//ItemVO를 CartVO에 저장
cart.setItemVO(item);
//동일 상품(item_num이 같은 상품)의 총구매 금액 구하기
cart.setSub_total(cart.getOrder_quantity()*item.getPrice()); //setSub_total은 테이블에는 없지만 사용하기위해 VO에 만들어준것
list.add(cart);
}
}catch(Exception e) {
throw new Exception(e);
}finally {
DBUtil.executeClose(rs, pstmt, conn);
}
return list;
}
kr.cart.action = >ListAction
package kr.cart.action;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import kr.cart.dao.CartDAO;
import kr.cart.vo.CartVO;
import kr.controller.Action;
public class ListAction implements Action {
@Override
public String execute(HttpServletRequest request, HttpServletResponse response) throws Exception {
HttpSession session = request.getSession();
Integer user_num = (Integer)session.getAttribute("user_num");
if(user_num == null) {//로그인되지않은경우
return "redirect:/member/loginForm.do";
}
//로그인 된 경우
CartDAO dao = CartDAO.getInstance();
//회원번호별 총구매액
//int all_total = dao.getTotalByMem_num(user_num);
List<CartVO> list = null;
//if(all_total > 0) {
list = dao.getListCart(user_num);
// }
//request.setAttribute("all_total",all_total);
request.setAttribute("list", list);
return "/WEB-INF/views/cart/list.jsp";
}
}
views/cart => list.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>
<meta charset="UTF-8">
<title>장바구니</title>
<link rel="stylesheet" href="${pageContext.request.contextPath}/css/style.css" type="text/css">
<script type="text/javascript" src="${pageContext.request.contextPath}/js/jquery-3.7.1.min.js"></script>
<script type="text/javascript" src="${pageContext.request.contextPath}/js/shop.cart.js"></script>
</head>
<body>
<div class="page-main">
<jsp:include page="/WEB-INF/views/common/header.jsp"/>
<div class="content-main">
<h2>장바구니</h2>
<!-- 간발의차로 상품을 내렸는데 그 사이에 user가 들어와버리면 status가 1일 수 있음 이 문제를 해결하기 위한 방법 -->
<c:if test="${empty list}">
<div class="result-display">
장바구니에 담은 상품이 없습니다.
</div>
</c:if>
<c:if test="${!empty list}">
<form id="cart_order" action="${pageContext.request.contextPath}/order/orderForm.do" method="post">
<table>
<tr>
<th>상품명</th>
<th>수량</th>
<th>상품가격</th>
<th>합계</th>
</tr>
<c:forEach var="cart" items="${list}">
<tr>
<td>
<a href="${pageContext.request.contextPath}/item/detail.do?item_num=${cart.item_num}">
<img src="${pageContext.request.contextPath}/upload/${cart.itemVO.photo1}" width="80">
${cart.itemVO.name}
</a>
</td>
<td class="align-center">
<!-- 상품 판매 가능 여부 표시(1:미표시) 미표시 일경우 --><!-- 재고보다 주문 수량이 많을경우 -->
<c:if test="${cart.itemVO.status==1 or cart.itemVO.quantity < cart.order_quantity}">[판매중지]</c:if>
<!-- 상품 판매 가능 여부 표시(2:표시) 미표시 일경우 --><!-- 재고보다 주문 수량이 적거나 같을경우 -->
<c:if test="${cart.itemVO.status==2 and cart.itemVO.quantity >= cart.order_quantity}">[판매가능]
<input type="number" name="order_quantity" min="1" max="${cart.itemVO.quantity}"
value="${cart.order_quantity}" class="quantity-width">
<br>
<input type="button" value="변경" class="cart-modify"
data-cartnum="${cart.cart_num}"
data-itemnum="${cart.item_num}">
</c:if>
</td>
<td class="align-center">
<fmt:formatNumber value="${cart.itemVO.price}"/>원
</td>
<td class="align-center">
<fmt:formatNumber value="${cart.sub_total}"/>원
<br>
<input type="button" value="삭제" class="cart-del" data-cartnum="${cart.cart_num}">
</td>
</tr>
</c:forEach>
<tr>
<td colspan="3" class="align-right"><b>총구매금액</b></td>
<td class="align-center"><%-- <fmt:formatNumber value="${all_total}"/> --%>원</td>
</tr>
</table>
<div class="align-center">
<input type="submit" value="구매하기">
</div>
</form>
</c:if>
</div>
</div>
</body>
</html>
header.jsp (장바구니 클릭창 만들기) (Mypage 위에 명시)
<li>
<a href="${pageContext.request.contextPath}/cart/list.do">장바구니</a>
</li>
CartDAO 추가
//장바구니 상세
public CartVO getCart(CartVO cart) throws Exception{
Connection conn = null;
PreparedStatement pstmt = null;
String sql =null;
ResultSet rs = null;
CartVO cartSaved = null;
try {
//커넥션풀로부터 커넥션 할당
conn = DBUtil.getConnection();
//SQL문 작성
sql="SELECT * FROM zcart WHERE item_num=? AND mem_num =?";
//PreparedStatment 객체 생성
pstmt = conn.prepareStatement(sql);
//?에 데이터 바인딩
pstmt.setInt(1, cart.getItem_num());
pstmt.setInt(2, cart.getMem_num());
//SQL문 실행
rs = pstmt.executeQuery();
if(rs.next()) {
cartSaved = new CartVO();
cartSaved.setCart_num(rs.getInt("cart_num"));
cartSaved.setItem_num(rs.getInt("item_num"));
cartSaved.setOrder_quantity(rs.getInt("order_quantity"));
}
}catch(Exception e) {
throw new Exception(e);
}finally {
DBUtil.executeClose(rs, pstmt, conn);
}
return cartSaved;
}
//장바구니 수정(개별 상품 수량 수정)
//장바구니 수정(상품번호와 회원번호별 수정)
public void updateCartByItem_num(CartVO cart) throws Exception{
Connection conn = null;
PreparedStatement pstmt = null;
String sql =null;
try {
//커넥션풀로부터 커넥션 할당
conn = DBUtil.getConnection();
//SQL문 작성
sql="UPDATE zcart SET order_quantity=? WHERE item_num=? AND mem_num=?";
//PreparedStatment 객체 생성
pstmt = conn.prepareStatement(sql);
//?에 데이터 바인딩
pstmt.setInt(1, cart.getOrder_quantity());
pstmt.setInt(2, cart.getItem_num());
pstmt.setInt(3, cart.getMem_num());
//SQL문 실행
pstmt.executeUpdate();
}catch(Exception e) {
throw new Exception(e);
}finally {
DBUtil.executeClose(null, pstmt, conn);
}
}
WriteAction 수정
36라인
dao.insertCart(cart);
mapAjax.put("result", "success");
를 if문에 넣어준다.
package kr.cart.action;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.codehaus.jackson.map.ObjectMapper;
import kr.cart.dao.CartDAO;
import kr.cart.vo.CartVO;
import kr.controller.Action;
import kr.item.dao.ItemDAO;
import kr.item.vo.ItemVO;
public class WriteAction implements Action{
@Override
public String execute(HttpServletRequest request, HttpServletResponse response) throws Exception {
Map<String,String> mapAjax = new HashMap<String,String>();
HttpSession session = request.getSession();
Integer user_num = (Integer)session.getAttribute("user_num");
if(user_num == null) {//로그인이 되지 않은 경우
mapAjax.put("result", "logout");
}else {//로그인이 된 경우
//전송된 데이터 인코딩 타입 지정
request.setCharacterEncoding("utf-8");
CartVO cart = new CartVO();
cart.setItem_num(Integer.parseInt(request.getParameter("item_num")));
cart.setOrder_quantity(Integer.parseInt(request.getParameter("order_quantity")));
cart.setMem_num(user_num);
CartDAO dao = CartDAO.getInstance();
CartVO db_cart = dao.getCart(cart);
if(db_cart==null) {//동일 상품이 없을 경우
dao.insertCart(cart);
mapAjax.put("result", "success");
}else {//동일 상품이 있을 경우
//재고수를 구하기 위해서 ItemDAO 호출
ItemDAO itemDAO = ItemDAO.getInstance();
ItemVO item = itemDAO.getItem(db_cart.getItem_num());
//구매수량 합산(기존 장바구니에 저장된 구매수량 + 새로 입력한 구매수량)
int order_quantity = db_cart.getOrder_quantity() + cart.getOrder_quantity();
if(item.getQuantity()<order_quantity) {
//상품 재고 수량보다 장바구니에 담은 구매수량이 더 많음
mapAjax.put("result","overquantity");
}else {
cart.setOrder_quantity(order_quantity);
dao.updateCartByItem_num(cart);
mapAjax.put("result", "success");
}
}
}
//JSON 데이터 생성
ObjectMapper mapper = new ObjectMapper();
String ajaxData = mapper.writeValueAsString(mapAjax);
request.setAttribute("ajaxData",ajaxData);
return "/WEB-INF/views/common/ajax_view.jsp";
}
}
CartDAO 내용 추가
//회원번호별 총 구매액
public int getTotalByMem_num(int mem_num) throws Exception{
Connection conn = null;
PreparedStatement pstmt = null;
String sql =null;
ResultSet rs = null;
int total = 0;
try {
//커넥션풀로부터 커넥션 할당
conn = DBUtil.getConnection();
//SQL문 작성
sql="SELECT SUM(sub_total) FROM (SELECT mem_num,"
+ "order_quantity * price AS sub_total FROM zcart "
+ "JOIN zitem USING(item_num)) WHERE mem_num=?";
//PreparedStatment 객체 생성
pstmt = conn.prepareStatement(sql);
//?에 데이터 바인딩
pstmt.setInt(1, mem_num);
//SQL문 실행
rs = pstmt.executeQuery();
if(rs.next()) { //위에 sql문 작성에서 sum을 썼기 떄문에 행은 무조건 1개만 나온다. 그러므로 if를 쓰고 getInt(1)을 쓴다.
total = rs.getInt(1);
}
}catch(Exception e) {
throw new Exception(e);
}finally {
DBUtil.executeClose(rs, pstmt, conn);
}
return total;
}
ListAction 내용 수정 (주석처리 했던 것들을 풀어준다)
cart/list.jsp 내용수정 (주석처리 했던 것들을 풀어준다)
'쌍용교육(JAVA) > MVC' 카테고리의 다른 글
쌍용교육 -JSP수업 70일차 - ch06_mvcPageMVC(15) (0) | 2024.05.30 |
---|---|
쌍용교육 -JSP수업 69일차 - ch06_mvcPageMVC(14) (0) | 2024.05.29 |
쌍용교육 -JSP수업 67일차 - ch06_mvcPageMVC(12) (0) | 2024.05.27 |
쌍용교육 -JSP수업 66일차 - ch06_mvcPageMVC(11) (0) | 2024.05.24 |
쌍용교육 -JSP수업 65일차 - ch06_mvcPageMVC(10) (0) | 2024.05.23 |