• Home
  • About
    • GreenteaPIE photo

      GreenteaPIE

      GreenteaPIE's Development Story.

    • Learn More
    • Email
    • Github
    • Youtube
  • Posts
    • All Posts
    • All Tags
  • Projects

11 - DB Spring 주문내역과 주문취소

21 May 2023

Reading time ~5 minutes

사용한 플랫폼 : Spring, Oracle

1. 나의 주문내역 기능

purchasedList.jsp 추가

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
</head>
<jsp:include page="../header.jsp"></jsp:include>
<body>
	<hr>
	<!-- Page Header Start -->
	<div class="container bg-secondary mb-3" style="max-width: 800px;">
		<div class="d-flex flex-column align-items-center justify-content-center" style="min-height: 300px">
			<h1 class="font-weight-semi-bold text-uppercase mb-3">Purchased List</h1>
			<div class="d-inline-flex">
				<p class="m-0">진행 중인 주문내역</p>
			</div>
		</div>
	</div>
	<!-- Page Header End -->
	<div class="container bg-secondary mb-3" style="max-width: 900px;">
		<form name="frm" action="DBServlet">
			<input type="hidden" value="user_purchased_detail" name="command">
			<table class="table table-bordered text-center mb-0">
				<thead class="bg-secondary text-dark">
					<tr>
						<th>Order Number</th>
						<!-- 					<th>Products</th> -->
						<!-- 					<th>Total Price</th> -->
						<th>Order Date</th>
						<th>Status</th>
					</tr>
				</thead>
				<tbody class="align-middle">
				
				<c:if test="${olist.size()==0}">
								<tr>
									<td class="align-middle" colspan="3">
										<h3>주문내역이 없습니다.</h3>
									</td>
								</tr>
							</c:if>
					<c:set var="prev_orderNumber" value="-1" scope="page" />
					<c:forEach var="olist" items="${olist }">
						<c:choose>
							<c:when test="${prev_orderNumber != olist.ordernumber}">
								<c:set var="prev_orderNumber" value="${olist.ordernumber}" />
								<tr>
									<td class="align-middle"><a href="#">${olist.ordernumber }</a></td>
									<td class="align-middle"><fmt:formatDate value="${olist.indate }" type="date" /></td>
									<td class="align-middle"><c:choose>
											<c:when test='${olist.result  =="1" }'>주문 확인 중</c:when>
											<c:when test='${olist.result  =="2" }'>처리 진행 중</c:when>
											<c:when test='${olist.result  =="3" }'>배송 중</c:when>
											<c:when test='${olist.result  =="4" }'>취소 요청 중</c:when>
											<c:when test='${olist.result  =="5" }'>취소 완료</c:when>
										</c:choose></td>
								</tr>
							</c:when>
						</c:choose>
					</c:forEach>
			</table>
		</form>
		<div class="card-footer border-secondary bg-transparent" align="center">
			<button class="btn btn-block btn-primary my-3 py-3" style="width: 350px;" onclick="location.href='/'">Continue shopping</button>
		</div>
	</div>
	<hr>
</body>
<jsp:include page="../footer.jsp"></jsp:include>
</html>

해당 페이지는 주문 처리 과정과 주문 번호, 주문 일자를 표시한다.

_config.yml

UserController.java 에 추가

	// 나의 주문 내역
	@GetMapping("/myPurchased")
	public String myPuchasedGET(String userid, HttpServletRequest request) throws Exception {

		ArrayList<OrderVO> olist = userService.getMyPurchased(userid);
		request.setAttribute("olist", olist); // order_view table

		return "/user/purchasedList";

	}

UserMapper.java 에 추가

	// 주문내역 리스트
	public ArrayList<OrderVO> getMyPurchased(String userid);

UserService.java 에 추가

	// 주문내역 리스트
	public ArrayList<OrderVO> getMyPurchased(String userid);

UserServiceImpl.java 에 추가

	@Override
	public ArrayList<OrderVO> getMyPurchased(String userid) {
		
		return usermapper.getMyPurchased(userid);
	}

UserMapper.xml 에 추가

	<!-- 내 주문 내역 리스트 -->
	<select id="getMyPurchased" resultType="com.db.model.OrderVO">

		select*from order_view
		where
		userid=#{userid}

	</select>

header.jsp 에 수정

<a href="/user/myPurchased?userid=${user.userid }" class="dropdown-item">나의 주문내역</a>

2. 주문 상세 보기

purchasedList.jsp 에 수정

									<td class="align-middle">
									<a href="/user/myPurchasedDetail?ordernumber=${olist.ordernumber}">${olist.ordernumber }</a>
									</td>

주문번호를 누르면 해당 주문의 상세내역 페이지로 이동시킨다.

purchasedDetail.jsp 추가

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
</head>
<jsp:include page="../header.jsp"></jsp:include>
<body>
	<hr>
	<!-- Page Header Start -->
	<div class="container bg-secondary mb-3" style="max-width: 800px;">
		<div class="d-flex flex-column align-items-center justify-content-center" style="min-height: 300px">
			<h1 class="font-weight-semi-bold text-uppercase mb-3">Purchased List</h1>
			<div class="d-inline-flex">
				<p class="m-0">주문내역 상세 확인</p>
			</div>
		</div>
	</div>
	<input type="hidden" name="userid" value="${user.userid }">
	<!-- Page Header End -->
	<div class="container bg-secondary mb-3" style="max-width: 1000px;">
		<div class="d-flex flex-column align-items-center justify-content-center" style="min-height: 300px">
			<table class="table table-bordered text-center mb-0">
				<thead class="bg-secondary text-dark">
					<c:if test="${not empty olist}">
						<tr>
							<th>주문한 사람</th>
							<td>${olist[0].userid }</td>
						</tr>
						<tr>
							<th>배송받을 사람</th>
							<td>${olist[0].name }</td>
						</tr>
						<tr>
							<th>전화번호</th>
							<td>${olist[0].phone }</td>
						</tr>
						<tr>
							<th>배송지</th>
							<td>${olist[0].address1 }&nbsp;${olist[0].address2 }${olist[0].address3 }</td>
						</tr>
					</c:if>
				</thead>
			</table>
		</div>
	</div>
	<div class="container bg-secondary mb-3" style="max-width: 1000px;">
		<table class="table table-bordered text-center mb-0">
			<thead class="bg-secondary text-dark">
				<tr>
					<th>No.</th>
					<th>Products</th>
					<th>size</th>
					<th>quantity</th>
					<th>Price</th>
					<th>Status</th>
					<th>Order Date</th>
				</tr>
			</thead>
			<tbody class="align-middle">
				<c:forEach var="olist" items="${olist}">
					<c:forEach var="plist" items="${plist }">
						<c:if test="${olist.num eq plist.num }">
							<tr>
								<td class="align-middle">${olist.num}</td>
								<td class="align-middle"><a href='/product/productDetail?num=<c:out value="${plist.num }"/>&pname=${plist.pname}'>${plist.pname}</a></td>
								<td class="align-middle">${olist.psize}</td>
								<td class="align-middle">${olist.quantity }</td>
								<td class="align-middle"><fmt:setLocale value="ko_KR" /> <fmt:formatNumber type="currency" value="${olist.price * olist.quantity }" currencySymbol="₩" /></td>
								<td class="align-middle"><c:choose>
										<c:when test='${olist.result  =="1" }'>주문 확인 중</c:when>
										<c:when test='${olist.result  =="2" }'>처리 진행 중</c:when>
										<c:when test='${olist.result  =="3" }'>배송 중</c:when>
										<c:when test='${olist.result  =="4" }'>취소 요청 중</c:when>
										<c:when test='${olist.result  =="5" }'>취소 완료</c:when>
									</c:choose></td>
								<td class="align-middle"><fmt:formatDate value="${olist.indate}" pattern="yyyy. MM. dd. HH:mm" /></td>
							</tr>
							<c:set var="ordernumber" value="${olist.ordernumber }" />
							<c:set var="result" value="${olist.result }" />
						</c:if>
					</c:forEach>
				</c:forEach>
				<c:set var="totalPrice" value="0" />
				<c:forEach var="olist" items="${olist}">
					<c:forEach var="plist" items="${plist}">
						<c:if test="${olist.num == plist.num}">
							<c:set var="totalPrice" value="${olist.totalprice}" />
						</c:if>
					</c:forEach>
				</c:forEach>
				<tr>
					<th colspan="4">Total Price</th>
					<td colspan="3"><fmt:formatNumber value="${totalPrice}" type="currency" /></td>
				<tr>
		</table>
		<div class="card-footer border-secondary bg-transparent" align="center">
			<button class="btn btn-block btn-primary my-3 py-3" style="width: 350px;" onclick="#">Withdraw Order</button>
			<button class="btn btn-block btn-primary my-3 py-3" style="width: 350px;" onclick="location.href='/user/myPurchased?userid=${user.userid }'">Purchased List</button>
		</div>
	</div>
	<hr>
</body>
<jsp:include page="../footer.jsp"></jsp:include>
</html>

해당 페이지는 결제 시 작성 했던 주문지와 구매한 상품의 정보등을 표시한다.

_config.yml

UserController.java 에 추가

	@Autowired
	ProductService productService;

// 나의 주문 내역 상세 조회
	@GetMapping("/myPurchasedDetail")
	public String myPurchasedDetailGET(int ordernumber, HttpServletRequest request) throws Exception {

		ArrayList<ProductVO> plist = productService.getAllProduct(); // 모든 상품 가져오기
		request.setAttribute("plist", plist);

		ArrayList<OrderVO> olist = userService.getMyPurchasedDetail(ordernumber); //주문번호로 정보 가져오기
		request.setAttribute("olist", olist);

		return "/user/purchasedDetail";
	}

UserMapper.java 에 추가

	// 주문내역 상세조회
	public ArrayList<OrderVO> getMyPurchasedDetail(int ordernumber);

UserService.java 에 추가

	// 주문내역 상세조회
	public ArrayList<OrderVO> getMyPurchasedDetail(int ordernumber);

UserServiceImpl.java 에 추가

	@Override
	public ArrayList<OrderVO> getMyPurchasedDetail(int ordernumber) {
		
		return usermapper.getMyPurchasedDetail(ordernumber);
	}

UserMapper.xml 에 추가

	<!-- 내 주문 내역 상세 조회 -->
	<select id="getMyPurchasedDetail"
		resultType="com.db.model.OrderVO">
		select * from order_view
		where
		orderNumber=#{orderNumber}
	</select>

3. 주문 취소 기능

purchasedDetail.jsp 에 수정

			<button class="btn btn-block btn-primary my-3 py-3" style="width: 350px;" onclick="withdrawOrder('${ordernumber}', '${result}')">Withdraw Order</button>

버튼 클릭 시 비동기로 주문 취소 메소드를 작동 시킨다.

Script 추가

	<script>
		function withdrawOrder(ordernumber, orderResult) {
			if (orderResult === "1") {
				if (confirm("주문을 취소하시겠습니까?")) {
					$.ajax({
						url : `/user/withdrawOrder?ordernumber=${ordernumber}`,
						type : 'GET',
						success : function(data) {
							if (data === "Success") {
								alert("주문이 성공적으로 취소되었습니다.");
								location.reload(); // 주문 상태를 업데이트하기 위해 페이지를 다시 로드합니다.
							} else {
								alert("주문 취소 중 문제가 발생했습니다.");
							}
						},
						error : function(err) {
							alert("주문 취소 요청이 실패했습니다.");
						}
					});
				}
			} else {
				alert("취소 요청할 수 없습니다.");
			}
		}
	</script>

UserController.java 에 추가

	// 주문 취소 요청
	@GetMapping("/withdrawOrder")
	@ResponseBody
	public ResponseEntity<String> withdrawOrderGET(int ordernumber, HttpServletRequest request) {
		System.out.println("취소요청 주문번호" + ordernumber);
		userService.withdrawChangeResult(ordernumber);

		return ResponseEntity.ok("Success");
	}

UserMapper.java 에 추가

	// 주문 취소 result -> 4 으로 변경
	public int withdrawChangeResult(@Param("ordernumber") int ordernumber);

UserService.java 에 추가

	// 주문 취소 result -> 4 으로 변경
	public int withdrawChangeResult(@Param("ordernumber") int ordernumber);

UserServiceImpl.java 에 추가

	@Override
	public int withdrawChangeResult(int ordernumber) {
		
		return usermapper.withdrawChangeResult(ordernumber);
	}

UserMapper.xml 에 추가

	<!-- 주문 취소한 orderdetail result 4로 변경 -->
	<update id="withdrawChangeResult">

		update order_detail set result = 4 where
		ordernumber=#{ordernumber}
	</update>

주문 취소 요청이 완료 되면 아래와 같이 취소 요청 중으로 바뀐다.

_config.yml

프로젝트 주소



projectjavajspOraclecssHTMLBootStrapAPIJQueryJavaScriptSpringFrameWork Share Tweet +1