TIL 0529

먼지·2024년 5월 30일

Today I Learned

목록 보기
69/89
post-thumbnail

DAO

장바구니 수정 - 개발 상품 수량

	public void updateCart(CartVO cart) throws Exception{
		Connection conn = null;
		PreparedStatement pstmt = null;
		String sql = null;
		try {
			conn = DBUtil.getConnection();
			sql="UPDATE zcart SET order_quantity=? WHERE cart_num=?";
			pstmt = conn.prepareStatement(sql);
			pstmt.setInt(1, cart.getOrder_quantity());
			pstmt.setInt(2, cart.getCart_num());
			pstmt.executeUpdate();
		} catch (Exception e) {
			throw new Exception(e);
		} finally {
			DBUtil.executeClose(null, pstmt, conn);
		}
		
	}

장바구니 삭제

	public void deleteCart(int cart_num) throws Exception{
		Connection conn = null;
		PreparedStatement pstmt = null;
		String sql = null;
		try {
			conn = DBUtil.getConnection();
			sql="DELETE FROM zcart WHERE cart_num=?";
			pstmt = conn.prepareStatement(sql);
			pstmt.setInt(1, cart_num);
			pstmt.executeUpdate();
		} catch (Exception e) {
			throw new Exception(e);
		} finally {
			DBUtil.executeClose(null, pstmt, conn);
		}
		
	}

Action

Delete Cart Action

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.controller.Action;

public class DeleteCartAction 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");
			
			CartDAO dao = CartDAO.getInstance();
			dao.deleteCart(Integer.parseInt(request.getParameter("cart_num")));
			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";
	}

}

ModifyCart Action

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 ModifyCartAction 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");
			
			int item_num=Integer.parseInt(request.getParameter("item_num"));
			int order_quantity = Integer.parseInt(request.getParameter("order_quantity"));
			
			ItemDAO itemDAO = ItemDAO.getInstance();
			ItemVO item = itemDAO.getItem(item_num);
			
			if(item.getStatus() == 1) {
				// 상품 미표시
				mapAjax.put("result","noSale");
			} else if (item.getQuantity() < order_quantity) {
				// 상품의 재고보다 장바구니의 구매 수량이 더 많은 경우
				mapAjax.put("result", "overQuantity");
			} else {
				// 표시 상품이면서 재고가 부족하지 않은 경우 - 구매가 가능함
				CartVO cart = new CartVO();
				cart.setCart_num(Integer.parseInt(request.getParameter("cart_num")));
				cart.setOrder_quantity(order_quantity);
				
				CartDAO cartDAO = CartDAO.getInstance();
				// 구매 수량을 변경한다
				cartDAO.updateCart(cart);
				
				mapAjax.put("result", "success");
			}
		}
		
		ObjectMapper mapper = new ObjectMapper();
		String ajaxData = mapper.writeValueAsString(mapAjax);
		
		request.setAttribute("ajaxData", ajaxData);
		
		return "/WEB-INF/views/common/ajax_view.jsp";
		
	}

}

Properties

Shop Properties

#상품관리 관리자
/item/adminWriteForm.do=kr.item.action.AdminWriteFormAction
/item/adminWrite.do=kr.item.action.AdminWriteAction
#상품관리 사용자
/item/detail.do=kr.item.action.UserDetailAction
#장바구니
/cart/write.do=kr.cart.action.WriteAction
/cart/list.do=kr.cart.action.ListAction
/cart/deleteCart.do=kr.cart.action.DeleteCartAction
/cart/modifyCart.do=kr.cart.action.ModifyCartAction
/cart/deleteCart.do=kr.cart.action.DeleteCartAction

JS

Shop Cart JS

$(function(){
	/*
	==================
	장바구니 상품 삭제
	==================
	*/
	$('.cart-del').on('click', function(){
		// 서버와 통신
		$.ajax({
			url:'deleteCart.do',
			type:'post',
			data:{cart_num:$(this).attr('data-cartnum')},
			dataType:'json',
			success:function(param){
				if(param.result == 'logout'){
					alert('로그인 후 사용 가능합니다.');
				}
				else if(param.result=='success'){
					alert('선택한 상품 삭제가 완료되었습니다.');					
					location.href='list.do';
				}
				else{
					alert('장바구니 상품을 삭제하는데 오류가 발생하였습니다.');
				}
			},
			error:function(){
				alert('네트워크 오류가 발생하였습니다.');
			}
		})
	})
	
	/*
	============================
	장바구니 상품 주문 수량 변경
	============================
	*/
	/* 변경 버튼의 부모(변경버튼, 수량 변경 창 포함)를 불러와서 수량에 접근하기*/
	$('.cart-modify').on('click',function(){
		/* 버튼에서 부모로 올라가서 input의 이름이 order_quantity인 값을 가져온다*/
		const input_quantity = $(this).parent().find('input[name="order_quantity"]')
		if(input_quantity.val() == ''){
			alert('수량을 입력하세요');
			input_quantity.focus();
			return;
		}
		/* val -> 바뀐 값*/
		if(input_quantity.val() < 1){
			alert('상품의 최소 수량은 1입니다.');	
			// 태그에 명시한 원래 value값을 읽어옴 attr(value) -> 원래 준 값
			input_quantity.val(input_quantity.attr('value'));
		}
		
		// 서버와 통신
		$.ajax({
			url:'modifyCart.do',
			type:'post',
			data:{cart_num:$(this).attr('data-cartnum'),item_num:$(this).attr('data-itemnum'), order_quantity:input_quantity.val()},
			dataType:'json',
			success:function(param){
				if(param.result == 'logout'){
					alert('로그인 후 사용해주세요.');
				} 
				else if(param.result == 'noSale'){
					alert('판매 중지된 상품입니다.');
				} 
				else if(param.result == 'overQuantity'){
					alert('상품의 재고가 부족합니다. 다시 입력해주세요.');
					input_quantity.val(input_quantity.attr('value'));
				} 
				else if (param.result == 'success'){
					alert('상품 수량이 변경되었습니다.');
					location.href='list.do';
				} else {
					alert('수량 변경 중 오류가 발생하였습니다.');
				}
			},
			error:function(){
				alert('네트워크 오류가 발생하였습니다.');
			}
		})
	})
	
});

Table

주문 테이블

create table zorder(
order_num number not null,
order_total number(9) not null,
payment number(1) not null, -- 결제 방식
status number(1) default 1 not null,  -- 배송 상태(1: 배송 준비 중)
receive_name varchar2(30) not null,
receive_post varchar2(5) not null,
receive_address1 varchar2(90) not null,
receive_address2 varchar2(90) not null,
receive_phone varchar2(15) not null,
notice varchar2(4000),
reg_date date default sysdate not null,
modify_date date,
mem_num number not null,
constraint zorder_pk primary key (order_num),
constraint zorder_fk foreign key (mem_num) references zmember(mem_num)
);
create sequence zorder_seq;

주문 상세 테이블

create table zorder_detail(
detail_num number not null,
item_num number not null,
item_name varchar2(30) not null,
item_price number(9) not null,
item_total number(9) not null,
order_quantity number(7) not null,
order_num number not null,
constraint zorder_detail_pk primary key(detail_num),
constraint zorder_detail_fk foreign key(order_num) references zorder(order_num)
);
create sequence zorder_detail_seq;

VO

Order VO

package kr.order.vo;

import java.sql.Date;

public class OrderVO {
	private int order_num;
	private int order_total;			// 총 구매 금액
	private int payment;				// 지불 방법
	private int status;					// 배송 상태
	private String receive_name;
	private String receive_post;
	private String receive_address1;
	private String receive_address2;
	private String receive_phone;
	private String notice;
	private Date reg_date;
	private Date modify_date;
	private int mem_num;
	
	// 상품 세부에 있는 정보를 가져와서 보여주기
	private String id;
	private String item_name;		// 상품명
	public int getOrder_num() {
		return order_num;
	}
	public void setOrder_num(int order_num) {
		this.order_num = order_num;
	}
	public int getOrder_total() {
		return order_total;
	}
	public void setOrder_total(int order_total) {
		this.order_total = order_total;
	}
	public int getPayment() {
		return payment;
	}
	public void setPayment(int payment) {
		this.payment = payment;
	}
	public int getStatus() {
		return status;
	}
	public void setStatus(int status) {
		this.status = status;
	}
	public String getReceive_name() {
		return receive_name;
	}
	public void setReceive_name(String receive_name) {
		this.receive_name = receive_name;
	}
	public String getReceive_post() {
		return receive_post;
	}
	public void setReceive_post(String receive_post) {
		this.receive_post = receive_post;
	}
	public String getReceive_address1() {
		return receive_address1;
	}
	public void setReceive_address1(String receive_address1) {
		this.receive_address1 = receive_address1;
	}
	public String getReceive_address2() {
		return receive_address2;
	}
	public void setReceive_address2(String receive_address2) {
		this.receive_address2 = receive_address2;
	}
	public String getReceive_phone() {
		return receive_phone;
	}
	public void setReceive_phone(String receive_phone) {
		this.receive_phone = receive_phone;
	}
	public String getNotice() {
		return notice;
	}
	public void setNotice(String notice) {
		this.notice = notice;
	}
	public Date getReg_date() {
		return reg_date;
	}
	public void setReg_date(Date reg_date) {
		this.reg_date = reg_date;
	}
	public Date getModify_date() {
		return modify_date;
	}
	public void setModify_date(Date modify_date) {
		this.modify_date = modify_date;
	}
	public int getMem_num() {
		return mem_num;
	}
	public void setMem_num(int mem_num) {
		this.mem_num = mem_num;
	}
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getItem_name() {
		return item_name;
	}
	public void setItem_name(String item_name) {
		this.item_name = item_name;
	}
	
}

Order Detail VO

package kr.order.vo;

public class OrderDetailVO {
	private int detail_num;
	private int item_num;
	private String item_name;
	private int item_price;
	private int item_total;				// 동일 상품의 총 주문 금액
	private int order_quantity;
	private int order_num;
	public int getDetail_num() {
		return detail_num;
	}
	public void setDetail_num(int detail_num) {
		this.detail_num = detail_num;
	}
	public int getItem_num() {
		return item_num;
	}
	public void setItem_num(int item_num) {
		this.item_num = item_num;
	}
	public String getItem_name() {
		return item_name;
	}
	public void setItem_name(String item_name) {
		this.item_name = item_name;
	}
	public int getItem_price() {
		return item_price;
	}
	public void setItem_price(int item_price) {
		this.item_price = item_price;
	}
	public int getItem_total() {
		return item_total;
	}
	public void setItem_total(int item_total) {
		this.item_total = item_total;
	}
	public int getOrder_quantity() {
		return order_quantity;
	}
	public void setOrder_quantity(int order_quantity) {
		this.order_quantity = order_quantity;
	}
	public int getOrder_num() {
		return order_num;
	}
	public void setOrder_num(int order_num) {
		this.order_num = order_num;
	}
	
	
}

DAO

Order

package kr.order.dao;

public class OrderDAO {
	private static OrderDAO instance = new OrderDAO();

	public static OrderDAO getInstance() {
		return instance;
	}

	private OrderDAO() {
	}
	
	// 주문 등록
	// 관리자 - 전체 주문 개수 / 검색 주문 개수
	// 관리자 - 전체 주문 목록 / 검색 주문 목록
	// 사용자 - 전제 주문 개수 /  검색 주문 개수
	// 사용자 - 전체 주문 목록 / 검색 주문 목록
	// 개별 상품 목록
	// 주문 삭제(삭제시 재고를 원상복구 시키지 않음, 주문 취소일 때 재고 수량 원상 복구)
	// 관리자/사용자 - 주문 상세
	// 관리자/사용자 - 배송지 정보 수정하기
	// 관리자 - 배송 상태 수정
	// 사용자 - 주문 취소
	
	
}

Action

UserOrderForm Action

아직 미완성된 코드

package kr.order.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;
import kr.item.dao.ItemDAO;

public class UserOrderFormAction 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";
		}
		// 로그인이 된 경우
		//POST 방식의 접근만 허용한다
		if(request.getMethod().toUpperCase().equals("GET")) {
			return "/WEB-INF/views/common/notice.jsp";
		}
		
		CartDAO dao = CartDAO.getInstance();
		int all_total = dao.getTotalByMem_num(user_num); // 주문 금액을 장바구니에서 가져온다
		if(all_total <= 0) {
			request.setAttribute("notice_msg", "정상적인 주문이 아니거나 상품의 수량이 부족합니다.");
			request.setAttribute("notice_url", request.getContextPath()+"/item/itemList.do");
			return "/WEB-INF/views/common/alert_view.jsp";
		}
		
		// 장바구니에 담겨있는 상품 정보 호출
		List<CartVO> cartList = dao.getListCart(user_num);
		
		// 판매 중지가 된 상품이 있다면 구매할 수 없다고 알려주고, 해당 상품을 장바구니에서 삭제시켜야 함
		ItemDAO itemDAO = ItemDAO.getInstance();
		for(CartVO cart : cartList) {
			
		}
		
		return null;
		
	}
	

}
profile
Lucky Things🍀

0개의 댓글