TIL 0603

먼지·2024년 6월 6일

Today I Learned

목록 보기
72/89
post-thumbnail

DAO

배송지 정보 수정

//관리자/사용자 - 배송지정보 수정
	public void updateOrder(OrderVO order)throws Exception{
		Connection conn = null;
		PreparedStatement pstmt = null;
		String sql = null;
		try {
			//커넥션풀로부터 커넥션 할당
			conn = DBUtil.getConnection();
			//SQL문 작성
			sql = "UPDATE zorder SET receive_name=?,receive_post=?,"
				+ "receive_address1=?,receive_address2=?,receive_phone=?,"
				+ "notice=?,modify_date=SYSDATE WHERE order_num=?";
			//PreparedStatement 객체 생성
			pstmt = conn.prepareStatement(sql);
			//?에 데이터 바인딩
			pstmt.setString(1, order.getReceive_name());
			pstmt.setString(2, order.getReceive_post());
			pstmt.setString(3, order.getReceive_address1());
			pstmt.setString(4, order.getReceive_address2());
			pstmt.setString(5, order.getReceive_phone());
			pstmt.setString(6, order.getNotice());
			pstmt.setInt(7, order.getOrder_num());
			//SQL문 실행
			pstmt.executeUpdate();
		}catch(Exception e) {
			throw new Exception(e);
		}finally {
			DBUtil.executeClose(null, pstmt, conn);
		}
	}

주문 취소 - 사용자

	//사용자 - 주문 취소
	public void updateOrderCancel(int order_num)
	                                    throws Exception{
		Connection conn = null;
		PreparedStatement pstmt = null;
		PreparedStatement pstmt2 = null;
		String sql = null;
		try {
			//커넥션풀로부터 커넥션 할당
			conn = DBUtil.getConnection();
			//오토 커밋 해제
			conn.setAutoCommit(false);
			//SQL문 작성
			sql = "UPDATE zorder SET status=5,modify_date=SYSDATE "
				+ "WHERE order_num=?";
			pstmt = conn.prepareStatement(sql);
			pstmt.setInt(1, order_num);
			pstmt.executeUpdate();
			
			//주문번호에 해당하는 상품정보 구하기
			List<OrderDetailVO> detailList = 
					            getListOrderDetail(order_num);
			//주문 취소로 주문상품의 재고수 환원
			sql = "UPDATE zitem SET quantity=quantity + ? WHERE item_num=?";
			pstmt2 = conn.prepareStatement(sql);
			for(int i=0;i<detailList.size();i++) {
				OrderDetailVO detail = detailList.get(i);
				pstmt2.setInt(1, detail.getOrder_quantity());
				pstmt2.setInt(2, detail.getItem_num());
				pstmt2.addBatch();
				
				if(i%1000==0) {
					pstmt2.executeBatch();
				}
			}
			pstmt2.executeBatch();
			
			//모든 SQL문이 성공하면 커밋
			conn.commit();
		}catch(Exception e) {
			//SQL문이 하나라도 실패하면 롤백
			conn.rollback();
			throw new Exception(e);
		}finally {
			DBUtil.executeClose(null, pstmt2, null);
			DBUtil.executeClose(null, pstmt, conn);
		}
	}
}

Action

User Modify Action

package kr.order.action;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import kr.controller.Action;
import kr.order.dao.OrderDAO;
import kr.order.vo.OrderVO;

public class UserModifyAction 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";
		}
		
		//전송된 데이터 인코딩 타입 지정
		request.setCharacterEncoding("utf-8");
		
		int order_num = Integer.parseInt(
				  request.getParameter("order_num"));
		OrderDAO dao = OrderDAO.getInstance();
		//주문정보 호출
		OrderVO db_order = dao.getOrder(order_num);
		if(db_order.getMem_num() != user_num) {
			//구매자 회원번호와 로그인한 회원번호가 불일치할 경우
			return "/WEB-INF/views/common/notice.jsp";
		}
		
		//배송지 수정전 배송상태를 한번 더 체크함
		if(db_order.getStatus()>1) {
			//배송준비중 이상으로 관리자가 변경한 상품을 주문자가 변경할 수 없음
			request.setAttribute("notice_msg", 
					"배송상태가 변경되어 주문자가 주문정보 변경 불가");
			request.setAttribute("notice_url", 
			     request.getContextPath()+"/order/orderList.do");
			return "/WEB-INF/views/common/alert_view.jsp";
		}
		
		OrderVO order = new OrderVO();
		order.setOrder_num(order_num);
		order.setReceive_name(request.getParameter("receive_name"));
		order.setReceive_post(request.getParameter("receive_post"));
		order.setReceive_address1(request.getParameter("receive_address1"));
		order.setReceive_address2(request.getParameter("receive_address2"));
		order.setReceive_phone(request.getParameter("receive_phone"));
		order.setNotice(request.getParameter("notice"));
		
		//배송지정보 수정
		dao.updateOrder(order);
		
		request.setAttribute("notice_msg", 
				               "정상적으로 수정되었습니다.");
		request.setAttribute("notice_url", 
				request.getContextPath()
				    +"/order/orderDetail.do?order_num="+order_num);
		
		return "/WEB-INF/views/common/alert_view.jsp";
	}

}

Properties

Shop

/order/orderModify.do=kr.order.action.UserModifyAction
profile
Lucky Things🍀

0개의 댓글