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";
}