
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);
}
}
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";
}
}
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";
}
}
#상품관리 관리자
/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
$(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('네트워크 오류가 발생하였습니다.');
}
})
})
});
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;
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;
}
}
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;
}
}
package kr.order.dao;
public class OrderDAO {
private static OrderDAO instance = new OrderDAO();
public static OrderDAO getInstance() {
return instance;
}
private OrderDAO() {
}
// 주문 등록
// 관리자 - 전체 주문 개수 / 검색 주문 개수
// 관리자 - 전체 주문 목록 / 검색 주문 목록
// 사용자 - 전제 주문 개수 / 검색 주문 개수
// 사용자 - 전체 주문 목록 / 검색 주문 목록
// 개별 상품 목록
// 주문 삭제(삭제시 재고를 원상복구 시키지 않음, 주문 취소일 때 재고 수량 원상 복구)
// 관리자/사용자 - 주문 상세
// 관리자/사용자 - 배송지 정보 수정하기
// 관리자 - 배송 상태 수정
// 사용자 - 주문 취소
}
아직 미완성된 코드
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;
}
}