// 1. 주문 데이터 준비
productOrderSubmitService.prepareOrderDTO(orderDTO, amount, userDetails);
기능 설명
prepareOrderDTO호출:
OrderDTO.totalQuantity에amount.getQuantity()를 설정OrderDTO.uid에userDetails.getUsername()를 설정- 수령지 주소(
receiverAddr1,receiverAddr2)를 합쳐OrderDTO.orderAddr에 저장
// 2. 주문 저장
int orderNo = productOrderSubmitService.registerOrder(orderDTO);
기능 설명
registerOrder호출:
OrderDTO.uid를 이용해User조회- 조회된 사용자 정보로
orderDTO.orderSender(보내는 사람 이름) 및orderDTO.senderHp(보내는 사람 연락처) 설정- 카드 번호(임시)
"1234 4567 7894 1234"를orderDTO.paymentContent에 설정OrderDTO를Order엔티티로 매핑 후 저장- 저장된 주문의
orderNo반환
// 3. 상세 주문 저장
productOrderSubmitService.registerOrderItem(orderNo, cartNos, itemPointList, session);
기능 설명
registerOrderItem호출:
orderNo로OrderDTO조회cartNos가 있으면 장바구니 주문, 없으면 “바로 주문” 모드로 분기- 각
cartNo또는 세션의CartDTO를 이용해Cart/Product엔티티 구성OrderItem엔티티에 옵션, 수량, 단가, 할인율, 적립 포인트(itemPointList) 등 설정OrderItem을 DB에 저장
// 4. 바로 주문 처리
if (cartNos == null) {
CartDTO cartDTO = (CartDTO) session.getAttribute("cartDTO");
cartNos = Collections.singletonList(cartDTO.getCartNo());
}
기능 설명
cartNos == null체크: “바로 주문” 모드인 경우
- 세션에서
CartDTO객체 꺼내기cartNos를 해당CartDTO.cartNo하나짜리 리스트로 생성
// 5. 재고, 판매량 갱신
productOrderSubmitService.changeSoldAndStock(cartNos);
기능 설명
changeSoldAndStock호출:
- 각
cartNo에 해당하는Cart엔티티 조회- 연결된
Product엔티티의prodSold를 장바구니 수량만큼 증가prodStock에서 동일 수량만큼 차감(재고 부족 시 예외 발생)- 변경된
Product엔티티를 저장
// 6. 쿠폰 사용 처리
productOrderSubmitService.changeState(issueNo);
기능 설명
changeState호출:
- 파라미터
issueNo가null또는0L이면 아무 작업도 하지 않음- 해당
CouponIssue엔티티 조회- 있으면
state를"사용"으로 변경,usedDate를 현재 날짜로 설정- 변경된
CouponIssue엔티티를 저장
// 7. 포인트 차감
productOrderSubmitService.changePoint(usedPoint, userDetails, orderNo);