Skip to content
This repository has been archived by the owner on Aug 13, 2022. It is now read-only.

[#45] 주문기능 제작 #46

Merged
merged 28 commits into from
Jan 16, 2020
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
f782b3b
장바구니 기능 구현
Nov 28, 2019
6cb06dd
cart index delete 기능 구현 및 Test code 작성
Nov 29, 2019
54f8112
- Redis tranasaction 적용
Dec 2, 2019
7cafad5
장바구니 로직 추가
Dec 3, 2019
fe79388
- OrderDTO 생성
binaryyoung Dec 3, 2019
454c57c
- 캐싱하기 적합한 DTO를 사용하도록 변경
Dec 3, 2019
82905b6
빈 테스트코드 추가(Test ERROR)
Dec 3, 2019
489e028
OrderDTO에 @JsonFormat 추가
binaryyoung Dec 4, 2019
15d2f50
리뷰 반영
Dec 4, 2019
0989bc5
사용하지 않는 menuService 제거
Dec 9, 2019
9db3122
DTO를 Inner Class로 분리
Dec 9, 2019
e6cbc9b
가상 결제 구현
Dec 9, 2019
691a57e
사용하지 않는 코드 제거
Dec 10, 2019
b9d20d0
주문 로직 개발
Dec 11, 2019
a437709
계산서 발행 로직 작성 및 리뷰 일부 반영
Dec 13, 2019
792dc36
거리 계산로직 추가
Dec 13, 2019
4341748
배달료 계산 로직 추가
Dec 13, 2019
a280675
insert문을 벌크 insert로 진행하도록 변경
Dec 17, 2019
85a5f6e
주문 기능 제작
Dec 17, 2019
0d394c2
계산서 발행 시 메뉴, 메뉴 옵션에 의해 다수의 SELECT 쿼리가 질의되는 문제 해결
Dec 18, 2019
224158e
자신의 주문 정보 조회 기능 추가
Dec 18, 2019
4dc041c
OrderDTO 불변객체로 변경
Dec 19, 2019
1ddf344
유효성 검사 추가 및 변경
Dec 19, 2019
aeea70a
OrderDTO 수정으로 인한 버그 수정
Dec 19, 2019
a2f8bc4
리뷰 반영
Dec 23, 2019
cff527d
가상 결제 시스템 브랜치와 병합
Dec 24, 2019
8e1b0c3
가상 결제 진행 개발
Dec 24, 2019
a1732c1
Merge branch 'develop' into feature/20
yyy9942 Jan 16, 2020
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 33 additions & 1 deletion src/main/java/com/delfood/controller/OrderController.java
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ public long getItemsBill(HttpSession session, @RequestBody List<OrderItemDTO> it
* @param orderId 주문번호
* @return
*/
@GetMapping("{orderId}")
@GetMapping("orderBill/{orderId}")
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

orders/{orderId}/bills가 낫지 않을까요?

@MemberLoginCheck
public OrderBillDTO orderInfo(@PathVariable("orderId") Long orderId) {
return orderService.getPreOrderBill(orderId);
Expand All @@ -67,11 +67,43 @@ public OrderResponse order(HttpSession session, @RequestBody OrderRequest reques
request.getTotalPrice());
}

/**
* 아이템 리스트들을 상세하게 계산서로 발행한다.
* @param session 사용자의 세션
* @param items 주문하기 전 아이템들
* @return
*/
@GetMapping("bill")
public ItemsBillDTO getBill(HttpSession session, @RequestBody List<OrderItemDTO> items) {
return orderService.getBill(SessionUtil.getLoginMemberId(session), items);
}

/**
* 회원 주문내역을 모두 조회한다.
* 추후 페이징 추가 해야한다.
* @author jun
* @param session 사용자의 세션
* @return
*/
@GetMapping
@MemberLoginCheck
public List<OrderDTO> myOrders(HttpSession session) {
return orderService.getMemberOrder(SessionUtil.getLoginMemberId(session));
}

/**
* 주문 번호를 기반으로 주문 상세내역을 조회한다.
* 추후 해당 회원의 주문인지 확인하는 로직을 작성해야한다.
* @param session 사용자의 세션
* @param orderId 주문 아이디
* @return
*/
@GetMapping("{orderId}")
@MemberLoginCheck
public OrderDTO getOrder(HttpSession session, @PathVariable Long orderId) {
return orderService.getOrder(orderId);
}

// request
@Getter
private static class OrderRequest {
Expand Down
4 changes: 4 additions & 0 deletions src/main/java/com/delfood/dto/OrderDTO.java
Original file line number Diff line number Diff line change
Expand Up @@ -49,5 +49,9 @@ public enum OrderStatus {
@NonNull
private Long deliveryCost;

private Long shopId;

private String shopName;

List<OrderItemDTO> items;
}
2 changes: 2 additions & 0 deletions src/main/java/com/delfood/dto/OrderItemDTO.java
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@
public class OrderItemDTO {
private String id;
private Long menuId;
private String menuName;
private Long menuPrice;
private Long orderId;
private Long count;
private List<OrderItemOptionDTO> options;
Expand Down
2 changes: 2 additions & 0 deletions src/main/java/com/delfood/dto/OrderItemOptionDTO.java
Original file line number Diff line number Diff line change
Expand Up @@ -12,5 +12,7 @@
public class OrderItemOptionDTO {
private String id;
private Long optionId;
private String optionName;
private Long optionPrice;
private String orderItemId;
}
2 changes: 2 additions & 0 deletions src/main/java/com/delfood/mapper/OrderMapper.java
Original file line number Diff line number Diff line change
Expand Up @@ -25,4 +25,6 @@ public interface OrderMapper {
long findItemsPrice(List<OrderItemDTO> items);

List<MenuInfo> findItemsBill(List<OrderItemDTO> items);

List<OrderDTO> findByMemberId(String memberId);
}
21 changes: 21 additions & 0 deletions src/main/java/com/delfood/service/OrderService.java
Original file line number Diff line number Diff line change
Expand Up @@ -190,6 +190,7 @@ public long totalPrice(String memberId, List<OrderItemDTO> items) {

/**
* 두 주소 사이 거리(Meter 단위)를 조회한다.
* @author jun
* @param startAddressCode 시작 주소
* @param endAddressCode 도착 주소
* @return
Expand All @@ -207,5 +208,25 @@ public OrderBillDTO getPreOrderBill(Long orderId) {
return orderMapper.findOrderBill(orderId);
}

/**
* 고객의 주문 내역을 확인한다.
* @author jun
* @param memberId 고객아이디
* @return
*/
public List<OrderDTO> getMemberOrder(String memberId) {
return orderMapper.findByMemberId(memberId);
}

/**
* 주문 번호를 기반으로 주문 상세를 조회한다.
* @author jun
* @param orderId 주문 아이디
* @return
*/
public OrderDTO getOrder(Long orderId) {
return orderMapper.findById(orderId);
}


}
118 changes: 80 additions & 38 deletions src/main/resources/mybatis/mapper/orders.xml
Original file line number Diff line number Diff line change
Expand Up @@ -2,32 +2,33 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.delfood.mapper.OrderMapper">
<resultMap type="com.delfood.dto.OrderDTO" id="orderDTO">
<id property="id" column="id"/>
<result property="startTime" column="start_time"/>
<result property="orderStatus" column="order_status"/>
<result property="exArrivalTime" column="ex_arrival_time"/>
<result property="arrivalTime" column="arrival_time"/>
<result property="riderId" column="rider_id"/>
<result property="addressCode" column="address_code"/>
<result property="addressDetail" column="address_detail"/>
<result property="memberId" column="member_id"/>
<result property="deliveryCost" column="delivery_cost"/>
<collection property="items" select="findItemByOrderId" column="id" ofType="orderItemDTO"></collection>
</resultMap>

<resultMap type="com.delfood.dto.OrderItemDTO" id="orderItemDTO">
<id property="id" column="id"/>
<result property="menuId" column="menu_id"/>
<result property="orderId" column="order_id"/>
<result property="count" column="count"/>
<collection property="options" select="findItemOptionByItemId" column="id" ofType="orderItemOptionDTO"></collection>
<id property="id" column="orderId"/>
<result property="startTime" column="orderStartTime"/>
<result property="orderStatus" column="orderStatus"/>
<result property="exArrivalTime" column="orderExArrivalTime"/>
<result property="arrivalTime" column="orderArrivalTime"/>
<result property="riderId" column="orderRiderId"/>
<result property="addressCode" column="orderAddressCode"/>
<result property="addressDetail" column="orderAddressDetail"/>
<result property="memberId" column="memberId"/>
<result property="deliveryCost" column="deliveryCost"/>
<result property="shopId" column="shopId"/>
<result property="shopName" column="shopName"/>
<collection property="items" ofType="com.delfood.dto.OrderItemDTO">
<id property="id" column="itemId"/>
<result property="menuId" column="menuId"/>
<result property="menuName" column="menuName"/>
<result property="menuPrice" column="menuPrice"/>
<result property="count" column="itemCount"/>
<collection property="options" ofType="com.delfood.dto.OrderItemOptionDTO">
<id property="id" column="itemOptionId"/>
<result property="optionId" column="optionId"/>
<result property="optionName" column="optionName"/>
<result property="optionPrice" column="optionPrice"/>
</collection>
</collection>
</resultMap>

<resultMap type="com.delfood.dto.OrderItemOptionDTO" id="orderItemOptionDTO">
<result property="id" column="id"/>
<result property="optionId" column="option_id"/>
<result property="orderItemId" column="order_item_id"/>
</resultMap>

<select id="findAddressInfoByAddressCode" resultType="com.delfood.dto.AddressDTO">
SELECT A.town_code townCode,
Expand Down Expand Up @@ -83,27 +84,68 @@
</insert>

<select id="findById" resultMap="orderDTO">
SELECT id, start_time, order_status, ex_arrival_time, arrival_time, rider_id, address_code, address_detail,
member_id, delivery_cost
FROM ORDERS
WHERE id = #{id}
SELECT odr.id orderId,
odr.start_time orderStartTime,
odr.order_status orderStatus,
odr.ex_arrival_time orderExArrivalTime,
odr.arrival_time orderArrivalTime,
odr.rider_id orderRiderId,
odr.address_code orderAddressCode,
odr.address_detail orderAddressDetail,
odr.member_id memberId,
odr.delivery_cost deliveryCost,
shop.id shopId,
shop.name shopName,
item.id itemId,
menu.name menuName,
menu.price menuPrice,
item.count itemCount,
item_opt.id itemOptionId,
opt.id optionId,
opt.name optionName,
opt.price optionPrice
FROM ORDERS odr LEFT OUTER JOIN ORDERS_ITEM item ON (odr.id = item.order_id)
LEFT OUTER JOIN ORDERS_ITEM_OPTION item_opt ON (item.id = item_opt.order_item_id)
INNER JOIN MENU menu ON (menu.id = item.menu_id)
LEFT OUTER JOIN OPTION opt ON (opt.menu_id = menu.id)
INNER JOIN SHOP shop ON (odr.shop_id = shop.id)
WHERE odr.id = #{id}
</select>

<select id="findItemByOrderId" resultMap="orderItemDTO">
SELECT id, menu_id, order_id, count
FROM ORDERS_ITEM
WHERE order_id = #{orderId}
<select id="findByMemberId" resultMap="orderDTO">
SELECT odr.id orderId,
odr.start_time orderStartTime,
odr.order_status orderStatus,
odr.ex_arrival_time orderExArrivalTime,
odr.arrival_time orderArrivalTime,
odr.rider_id orderRiderId,
odr.address_code orderAddressCode,
odr.address_detail orderAddressDetail,
odr.member_id memberId,
odr.delivery_cost deliveryCost,
shop.id shopId,
shop.name shopName,
item.id itemId,
menu.name menuName,
menu.price menuPrice,
item.count itemCount,
item_opt.id itemOptionId,
opt.id optionId,
opt.name optionName,
opt.price optionPrice
FROM ORDERS odr LEFT OUTER JOIN ORDERS_ITEM item ON (odr.id = item.order_id)
LEFT OUTER JOIN ORDERS_ITEM_OPTION item_opt ON (item.id = item_opt.order_item_id)
INNER JOIN MENU menu ON (menu.id = item.menu_id)
LEFT OUTER JOIN OPTION opt ON (opt.menu_id = menu.id)
INNER JOIN SHOP shop ON (odr.shop_id = shop.id)
INNER JOIN MEMBER member ON (odr.member_id = member.id)
WHERE member.id = #{memberId}
</select>

<select id="findItemOptionByItemId" resultType="orderItemOptionDTO">
SELECT id, option_id, order_item_id
FROM ORDERS_ITEM_OPTION
WHERE order_item_id = #{orderItemId}
</select>

<resultMap type="com.delfood.dto.OrderBillDTO" id="preOrderBill">
<id property="orderId" column="orderId"/>
<result property="startTime" column="startTime"/>
<result property="startTime" column="orderStartTime"/>
<result property="orderStatus" column="orderStatus"/>
<result property="memberId" column="memberId"/>
<result property="deliveryCost" column="deliveryCost"/>
Expand Down