쌍용교육(JAVA)/MVC

쌍용교육 -JSP수업 74일차 - ch06_mvcPageMVC(19)

구 승 2024. 6. 5. 10:49

AdminDetailAction

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.controller.Action;
import kr.order.dao.OrderDAO;
import kr.order.vo.OrderDetailVO;
import kr.order.vo.OrderVO;

public class AdminDetailAction 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";
		}
		
		Integer user_auth = (Integer)session.getAttribute("user_auth");
		if(user_auth !=9) {//관리자로 로그인하지 않은 경우
			return "/WEB-INF/views/common/notice.jsp";
		}
		
		//관리자로 로그인 된 경우
		int order_num = Integer.parseInt(request.getParameter("order_num"));
		OrderDAO dao = OrderDAO.getInstance();
		//주문정보 반환
		OrderVO order = dao.getOrder(order_num);
		if(order.getMem_num()!=user_num) {
			//구매자 회원번호와 로그인한 회원번호가 불일치할 경우
			return "/WEB-INF/views/common/notice.jsp";
		}
		//주문한 개별상품정보 반환
		List<OrderDetailVO> detailList = dao.getListOrderDetail(order_num);
		
		request.setAttribute("order", order);
		request.setAttribute("detailList", detailList);
		return "/WEB-INF/views/order/admin_detail.jsp";
		
	}

}

admin_detail.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">
</head>
<body>
	<div class="page-main">
		<jsp:include page="/WEB-INF/views/common/header.jsp" />
		<div class="content-main">
			<h2>구매상세(관리자전용)</h2>
			<table>
				<tr>
					<th>상품명</th>
					<th>수량</th>
					<th>상품가격</th>
					<th>합계</th>
				</tr>
				<c:forEach var="detail" items="${detailList}">
					<tr>
						<td>${detail.item_name}</td>
						<td class="align-center">
							<fmt:formatNumber value="${detail.order_quantity}" />
						</td>
						<td class="align-center">
						<fmt:formatNumber value="${detail.item_price}" />원</td>
						<td class="align-center">
						<fmt:formatNumber value="${detail.item_total}" />원 <br> 
						</td>
					</tr>
				</c:forEach>
				<tr>
					<td colspan="3" class="align-right"><b>총구매금액</b></td>
					<td class="align-center">
					<fmt:formatNumber value="${order.order_total}" />원
					</td>
				</tr>
			</table>
	
				<ul id="delivery_info">
					<li>
						<span>받는 사람</span>${order.receive_name}
						
					</li>
					<li>
						<span>우편번호</span>${order.receive_post}
					</li>
					<li>
						<span>주소</span>${order.receive_address1} ${order.receive_address2}
					</li>
					<li>
						<span>전화번호</span>${order.receive_phone} 
					<li>
						<span>남기실 말씀</span>${order.notice} 
					</li>
					<li>
						<span>결제수단</span>
						<c:if test="${order.payment==1}">통장입금</c:if>
						<c:if test="${order.payment==2}">카드결제</c:if>
					</li>
					<li>
						<span>배송상태</span>
						<c:if test="${order.status==1}">배송대기</c:if>
						<c:if test="${order.status==2}">배송준비중</c:if>
						<c:if test="${order.status==3}">배송중</c:if>
						<c:if test="${order.status==4}">배송완료</c:if>
						<c:if test="${order.status==5}">주문취소</c:if>
						
					</li>
					<li class="align-center">
						<c:if test="${order.status==1}">
						<input type="button" value="배송지정보수정" onclick="location.href='modifyForm.do?order_num=${order.order_num}'">
						</c:if>
						<c:if test="${order.status!=5}">
						<input type="button" value="배송상태수정" onclick="location.href='modifyStatusForm.do?order_num=${order.order_num}'">
						</c:if>
						<c:if test="${order.status==4 or order.status ==5}">
						<input type="button" value="삭제" onclick="location.href='deleteOrder.do?order_num=${order.order_num}'">
						</c:if>
						<input type="button" value="주문목록" onclick="location.href='adminList.do'">
						<input type="button" value="MY페이지" onclick="location.href='${pageContext.request.contextPath}/member/myPage.do'">
					</li>
				</ul>
		</div>
	</div>
	
</body>
</html>

OrderDAO 추가

//관리자 - 배송상태 수정
	public void updateOrderStatus(OrderVO order) 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=?,modify_date=SYSDATE "
	       		+ "WHERE order_num=?";
	       pstmt=conn.prepareStatement(sql);
	       pstmt.setInt(1, order.getStatus());
	       pstmt.setInt(2, order.getOrder_num());
	       pstmt.executeUpdate();
	       
	       //주문 취소일 경우만 상품개수 조정
	       if(order.getStatus() == 5) {
	    	   //주문번호에 해당하는 상품정보 구하기
	    	   List<OrderDetailVO> detailList = getListOrderDetail(order.getOrder_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();
	    		   }
	    		   
	    	   }//end of for
	    	   pstmt2.executeBatch();
	       }//end of if
	       
	       //모든 SQL문 성공하면 commit
	       conn.commit();
	    }catch(Exception e) {
	    	//SQL문이 하나라도 오류가 발생하면 rollback
	    	conn.rollback();
	       throw new Exception(e);
	    }finally {
	       DBUtil.executeClose(null, pstmt2, conn);
	    }
	}

AdminModifyStatusFormAction

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 AdminModifyStatusFormAction 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";
		}
		
		Integer user_auth = (Integer)session.getAttribute("user_auth");
		if(user_auth !=9) {//관리자로 로그인하지 않은 경우
			return "/WEB-INF/views/common/notice.jsp";
		}
		
		//관리자로 로그인 된 경우
		int order_num = Integer.parseInt(request.getParameter("order_num"));
		OrderDAO dao = OrderDAO.getInstance();
		//주문정보 반환
		OrderVO order = dao.getOrder(order_num);
		
		request.setAttribute("order", order);
		return "/WEB-INF/views/order/admin_modifyStatusForm.jsp";
		
	}

}

admin_modifyStatusForm.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>배송상태 변경(관리자 전용)</title>
<link rel="stylesheet"
	href="${pageContext.request.contextPath}/css/style.css" type="text/css">

</head>
<body>
<div class ="page-main">
	<jsp:include page="/WEB-INF/views/common/header.jsp"/>
	<div class="content-main">
		<h2>배송상태 변경(관리자 전용)</h2>
		<form action="modifyStatus.do" method="post" id="status_modify">
		<input type="hidden" name="order_num" value="${order.order_num}">
		<ul>
			<li>
				<label>배송상태</label>
				<c:if test="${order.status !=5}">
				<input type="radio" name="status" id="status1" value="1"
				<c:if test="${order.status==1}">checked</c:if>>배송대기
				<input type="radio" name="status" id="status2" value="2"
				<c:if test="${order.status==2}">checked</c:if>>배송준비중
				<input type="radio" name="status" id="status3" value="3"
				<c:if test="${order.status==3}">checked</c:if>>배송중
				<input type="radio" name="status" id="status4" value="4"
				<c:if test="${order.status==4}">checked</c:if>>배송완료
				</c:if>
				<input type="radio" name="status" id="status5" value="5"
				<c:if test="${order.status==5}">checked</c:if>>주문취소
			</li>
		</ul>
		<div class="align-center">
			<c:if test="${order.status !=5}">
			<input type="submit" value="수정">
			</c:if>
			<input type="button" value="주문상세" onclick="location.href='adminDetail.do?order_num=${order.order_num}'">
		</div>
		</form>
	</div>

</div>
</body>
</html>

AdminModifyStatusAction

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 AdminModifyStatusAction 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";
		}
		
		Integer user_auth = (Integer)session.getAttribute("user_auth");
		if(user_auth !=9) {//관리자로 로그인하지 않은 경우
			return "/WEB-INF/views/common/notice.jsp";
		}
		//관리자로 로그인 된 경우
		request.setCharacterEncoding("utf-8");
		
		OrderVO order = new OrderVO();
		order.setStatus(Integer.parseInt(request.getParameter("status")));
		order.setOrder_num(Integer.parseInt(request.getParameter("order_num")));
	
		
		OrderDAO dao = OrderDAO.getInstance();
		//주문정보 반환
		OrderVO db_order = dao.getOrder(order.getOrder_num());
		
		//사용자가 배송상태를 5로 변경했을 경우
		if(db_order.getStatus()==5) {
			request.setAttribute("notice_msg","사용자가 배송상태를 주문 취소로 변경해서 관리자가 배송상태 수정 불가");
			request.setAttribute("notice_url",request.getContextPath()
					+"/order/adminDetail.do?order_num="+order.getOrder_num());
			return "/WEB-INF/views/common/alert_view.jsp";
		}
		//관리자 배송상태 변경
		dao.updateOrderStatus(order);
		request.setAttribute("notice_msg","정상적으로 수정되었습니다.");
		request.setAttribute("notice_url",request.getContextPath()
				+"/order/adminDetail.do?order_num="+order.getOrder_num());
		request.setAttribute("order", order);
		return "/WEB-INF/views/common/alert_view.jsp";
		
	}

}

AdminModifyFormAction

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 AdminModifyFormAction 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";
		}
		
		Integer user_auth = (Integer)session.getAttribute("user_auth");
		if(user_auth!=9) {//관리자로 로그인하지 않은 경우
			return "/WEB-INF/views/common/notice.jsp";
		}
		
		//관리자로 로그인한 경우
		
		int order_num = Integer.parseInt(
				  request.getParameter("order_num"));
		OrderDAO dao = OrderDAO.getInstance();
		//주문정보 호출
		OrderVO order = dao.getOrder(order_num);
		
		request.setAttribute("order", order);
		
		return "/WEB-INF/views/order/admin_modifyForm.jsp";
	}

}