Project/펫팔(반려 동물 용품 판매 사이트)

세미 프로젝트 - ProductOrderDto에 orderDetailDto 추가?

개발하는 구름이 2023. 7. 1. 00:23
package com.petpal.dto;

import java.sql.Date;
import java.util.List;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data @NoArgsConstructor @AllArgsConstructor @Builder 
public class ProductOrderDto {
	//주문(ProductOrder) 필드
	private int orderNo; // 주문번호 
	private String memberId; // 아이디
	private Date orderDate; // 주문날짜
	private String receiverName; // 수취인 이름 (기본값: 빈 문자열)
	private String receiverTel; // 수취인 전화번호
	private String receiverBasicAddr; //수취인 기본주소
	private String receiverPost; // 수취인 우편번호
	private String receiverDetailAddr; // 수취인 상세주소
	
//	추가 컬럼 2023-04-01
	private int totalPrice; // 주문 총 가격
	
	
	
	public List<OrderDetailDto> orderDetailDto ; // OrderDetailDto 를 list로 담았음.
	
}

처음에는 orderDetailDto를  productOrderDto에 넣지 않았다. 하지만 orderdetaildto에 있는 필드가 필요해지고, 

한 주문에 여러 개의 상품을 포함할 수 있기 때문에 list에 OrderDetailDto를 담았다..

 

따라서 주문 시, 한 번에 여러 개의 상품을 주문할 수 있으므로 각 상품의 상세 정보를 담는 OrderDetailDto를 리스트로 관리하기 위해 List<OrderDetailDto>필드를 추가 했다. 이를 통해 한 주문에 대한 모든 상품의 정보를 하나의 ProductOrderDto 객체에 담을 수 있고, 불러올 수 있다.

 

아래는 controller에 주문 정보 등록 메서드다.

//2.주문정보 등록
	@PostMapping("/order")
	public String insert(@ModelAttribute ProductOrderDto productOrderDto,HttpSession session,RedirectAttributes attr) {
		String memberId = (String) session.getAttribute("memberId");
		
		//주문번호(시퀀스) = 주문테이블에서의 주문번호와 주문상세테이블에서의 주문번호는 동일해야한다.(같은 시퀀스부여)-등록할때만 시퀀스!
		
		int orderNo = orderDao.sequence();
		
		//주문정보 등록
		productOrderDto.setMemberId(memberId);
		productOrderDto.setOrderNo(orderNo);
		
		orderDao.insert(productOrderDto);

		
		//주문상세정보 등록(주문번호,아이디는 가져오고, 상품번호,수량,가격은 jsp에서 등록한다.
			
		for(OrderDetailDto orderDetailDto : productOrderDto.orderDetailDto) { //값:리스트
			orderDetailDto.setMemberId(memberId);
			orderDetailDto.setOrderNo(orderNo);
			orderDao.insert2(orderDetailDto);
		}
		
		attr.addAttribute("orderNo",orderNo); //redirect로 보낼때 쓰는 코드(RedirectAttributes),orderFinish로 보냄
		

//		//주문완료 후 상품 수량 수정
		for(OrderDetailDto orderDetailDto : productOrderDto.orderDetailDto) {
			int productCount = orderDetailDto.getProductCount();
			int productNo = orderDetailDto.getProductNo();
			productDao.update(productCount, productNo);
		}

		//주문완료 후 장바구니 상품 삭제
		cartDao.orderCartDelete(memberId);

		return "redirect:orderFinish";
	}