- ์ฃผ๋ฌธ ์ ์ ๋๊ธฐ, ์ฒ๋ฆฌ ์ค, ์๋ฃ ํญ๋ชฉ ๋ค์ ๋ชจ๋ ๋๊ฐ์ ๋ก์ง์ผ๋ก ๊ตฌํํ์๋ค.
- ์ฐจ๋ณ์ ์ด ์๋ค๋ฉด, ์ฃผ๋ฌธ ์ ์ ํ์๋ ์ฃผ๋ฌธ ๋ฒํธ๊ฐ ํ ๋น ๋๋ค๋ ๊ฒ.
- ํ์ฌ ๊ตฌ๋งค์๊ฐ ์์ผ๋ฏ๋ก ๋๋ฏธ๋ฐ์ดํฐ๋ฅผ DB์ ๋ฐ์ํ์ง ์์ ์ํ๋ผ์ ์ฝ๋ ๊ตฌํ๋ง ์ค๋ช ํ๋๋ก ํ๊ฒ ๋ค.
- ์๋ต ๋ฐ๋
์ ๋ค๋ฆญ์ผ๋ก ๊ฐ์ ์ค์ ํด์ค ์ด์ ๋ ์ฒ์์ ์ฃผ๋ฌธ ์ ์ ๋๊ธฐ, ์ ์ ์ค , ์๋ฃ๋ฅผ ๋ชจ๋ ๋ค๋ฅธ ์๋ต ๋ฐ๋๋ก ๋ง๋ค์ด์ ๋ฆฌ์คํธ ํํ์ ์ ๋ค๋ฆญ์ ์ฌ์ฉํ๋ค.
ํ๋ฉด์ ๋ค์๋ณด๋ ์ฃผ๋ฌธ ๋ฒํธ ๋บด๊ณ ๋ ๋ณ๋ก ๋ค๋ฅธ ๊ฐ์ด ์์ด์ ๋ชจ๋ ์๋ต ๋ฐ๋ ํํ๋ฅผ ํต์ผ ์์ผฐ๋ค.
- OrderController.java
์ฃผ๋ฌธ ์ ์ ๋๊ธฐ, ์ ์์ค, ์๋ฃ ๋ ์๋น์ค ํจ์์ ์ํ๊ฐ์ ํตํด์ ์๋ณํ๋ค.
"W" :์ฃผ๋ฌธ ์ ์ ๋๊ธฐ, "P" : ์ฃผ๋ฌธ ์ฒ๋ฆฌ ์ค, "A" : ์ฃผ๋ฌธ ์ฒ๋ฆฌ ์๋ฃ
- OrderService.java
- ์ฌ์ฉ์ ๊ฐ๊ฒ์ ์ฃผ๋ฌธ ์ ๋ณด๋ฅผ ํ์ธํ๊ธฐ ์ํด ์กฐ์ธ์ ์ํ ๊ฐ๊ฒ Idx๋ฅผ ๊ฐ์ ธ์ค๊ณ , ์ฃผ๋ฌธ ๊ธฐ๋ณธ ์ ๋ณด๋ฅผ ๋ชจ๋ ๊ฐ์ ธ์จ๋ค.
public GetOrderListRes getOrdersBySellerIdx(int sellerIdx, String status) throws BaseException { // 1) ์ฌ์ฉ์ ๊ฐ๊ฒ ์กฐํ int storeIdx; try{ storeIdx = storeDao.storeIdxBySellerIdx(sellerIdx); } catch (Exception e) { throw new BaseException(POST_STORES_NOT_REGISTERD); // 2030 : ์ฌ์ฉ์์ ๊ฐ๊ฒ๊ฐ ๋ฑ๋ก๋์ด์์ง ์์ต๋๋ค. } // 2) ์ฃผ๋ฌธ๊ด๋ จ๋ ์ ๋ณด ๋ชจ๋ ๊ฐ์ ธ์ค๊ธฐ (์ ์ ๋๊ธฐ์ค W) // ์ฃผ๋ฌธIdx, ์ฃผ๋ฌธ/ํฝ์ ์๊ฐ, ์์ฒญ์ฌํญ, ์ด ๊ฒฐ์ ๊ธ์ก, ๊ฒฐ์ ์ํ, ๋ฉ๋ด์ด๋ฆ, ์ด ๊ฐ๊ฒฉ List<GetOrderItemRes> getOrdersResList; try { getOrdersResList = orderDao.getOrdersByStoreIdx(storeIdx, status); } catch (Exception e){ throw new BaseException(BaseResponseStatus.RESPONSE_ERROR); // ์ฃผ๋ฌธ ๋๊ธฐ ์กฐํ์ ์คํจํ์์ต๋๋ค. }
- ๊ฐ ์ฃผ๋ฌธ ์ ๋ณด์ ๋ค์ด๊ฐ๋ ๋ด์ฉ์ ํ์ธํด๋ณด๋ฉด(์ผ์ชฝ์ -> ์ค๋ฅธ์ชฝ ์๋)
- ์ฃผ๋ฌธ ์๊ฐ
- ์ฃผ๋ฌธํ ๋ฉ๋ด ์ข ๋ฅ ๊ฐ์
- ์ด ๊ธ์ก
- ๊ฒฐ์ ์ ๋ณด
- ์์ฒญ์ฌํญ์ฌ๋ถ
- ์ฃผ๋ฌธ๋ฒํธ
- ์ฃผ๋ฌธ ๋ฉ๋ด ๋ฐ ๊ฐ์
- ํฝ์ ์์ ์๊ฐ
- ์์ฒญ ๋ด์ฉ
// 3) ์ฃผ๋ฌธ๊ด๋ จ ์ ๋ณด ์กฐํฉํ๊ธฐ HashMap<Integer, GetOrderRes> orderHash = new LinkedHashMap<>(); try{ for(GetOrderItemRes orders : getOrdersResList){ if (!orderHash.containsKey(orders.getOrderIdx())){ GetOrderRes orderInfo = new GetOrderRes( orders.getOrderIdx(), // ์ฃผ๋ฌธ ์๋ณ์ orders.getOrderSequence(), // ์ฃผ๋ฌธ ๋ฒํธ orders.getOrderTime(), // ์ฃผ๋ฌธ ์๊ฐ orders.getPickUpTime(), // ํฝ์ ์๊ฐ orders.getRequest(), // ์์ฒญ ์ฌํญ 1, // ์ฃผ๋ฌธ๋น ๋ฉ๋ด ์ข ๋ฅ ๊ฐ์ 1 ๋ก ์์ orders.getTotalPrice(), // ์ ์ฒด ๊ธ์ก orders.getPayStatus(), // ๊ฒฐ์ ์ํ new ArrayList<>()// ๋ด์ ๋ฉ๋ด ๋ชฉ๋ก ); // ๊ฐ ์ฃผ๋ฌธ์ ๋ํ ๋ฉ๋ด ์ ๋ณด๋ฅผ ํด์๋ก ์ ์ง // ๋ฉ๋ด ๋ชฉ๋ก ๋ฆฌ์คํธ ์ถ๊ฐ orderInfo.getOrderItem().add(new OrderMenuCntPrirce(orders.getMenuName(), orders.getMenuCount(), orders.getDiscountedPrice())); orderHash.put(orders.getOrderIdx(), orderInfo); }else{ // ์ฃผ๋ฌธ ๋ด ๋ฉ๋ด ๊ฐ์ 1 ์ฆ๊ฐ orderHash.get(orders.getOrderIdx()) .setMenuDiverse(orderHash.get(orders.getOrderIdx()).getMenuDiverse() + 1); // ์ด ์ฃผ๋ฌธ ๊ฐ๊ฒฉ ํฉ์ฐ orderHash.get(orders.getOrderIdx()) .setTotalPrice(orderHash.get(orders.getOrderIdx()).getTotalPrice() + orders.getTotalPrice()); // ๋ฉ๋ด ์ด๋ฆ, ๊ฐ์๋ชฉ๋ก ์ถ๊ฐ orderHash.get(orders.getOrderIdx()) .getOrderItem().add(new OrderMenuCntPrirce(orders.getMenuName(), orders.getMenuCount(), orders.getDiscountedPrice())); } } }catch (Exception e){ throw new BaseException(BaseResponseStatus.RESPONSE_ERROR); // ์ฃผ๋ฌธ ๋๊ธฐ ๋ชฉ๋ก์ ์ฒ๋ฆฌํ๋๋ฐ ์คํจํ์์ต๋๋ค. } return new GetOrderListRes<>(storeIdx, new ArrayList<>(orderHash.values())); }
- OrderDao.java
์กฐ์ธ ์์ :
๊ฐ๊ฒ Idx : ๊ฐ๊ฒ์ ๋ค์ด์จ ์ฃผ๋ฌธ ํ์ธ
-> ์ฃผ๋ฌธ ๋ฉ๋ด ๋ชฉ๋ก : ์ฃผ๋ฌธ์ ๋ค์ด์จ ๋ฉ๋ด ๊ธฐ์ค
-> ์ฃผ๋ฌธ Idx : ์ฃผ๋ฌธ ๋จ์๋ก ์ด ์ฃผ๋ฌธ ๊ฐ๊ฒฉ์ด ์ผ๋ง์ธ์ง ์ง๊ณํจ์๋ฅผ ๋ด๊ธฐ์ํจ
-> ์ค๋์ ๋ฉ๋ด Idx : ๊ฐ ๋ฉ๋ด๊ฐ ์ด๋ค ๋จ์ด ๋ฉ๋ด ๊ธฐ์ค์ธ์ง
-> ๋ฉ๋ด : ๋จ์ด๋ฉ๋ด์๋ ๋จ์ ํ ์ธ์จ, ๊ฐ๊ฒฉ, ์๋๋ง ์๊ธฐ๋๋ฌธ์ ๋ฉ๋ด์ ์ด๋ฆ ๋ฑ์ ๊ฐ์ ธ์ค๊ธฐ ์ํจ
-> ๊ตฌ๋งค์ ํํ : ์ด๋ ๊ตฌ๋งค์๊ฐ ์์ฒญํ๋์ง
๋ก ์กฐ์ธํ์๋ค.// ์ ์ฒด ๊ธ์ก์ ์กฐ์ธ์ ํตํด์ ์ง๊ณํจ์๋ฅผ ์ด์ฉํ์ฌ ๊ตฌํ์๋ค. public List<GetOrderItemRes> getOrdersByStoreIdx(int storeIdx, String status){ String OrdersQuery ="SELECT\n" + " *\n" + "FROM(\n" + " SELECT O.orderIdx, O.order_sequence, O.order_time, O.pickup_time,\n" + " O.request, SUM(OL.cnt * TM.price) AS total_price,\n" + " O.payment_status,\n" + " M.menu_name,\n" + " M.price as menu_price,\n" + " TM.discount,\n" + " TM.price as today_menu_price,\n" + " OL.cnt,\n" + " O.status,\n" + " C.customerIdx\n" + " FROM OrderLists OL\n" + " LEFT JOIN Orders O on OL.orderIdx = O.orderIdx\n" + " LEFT JOIN TodayMenu TM on OL.todaymenuIdx = TM.todaymenuIdx\n" + " LEFT JOIN Menu M on TM.menuIdx = M.menuIdx\n" + " LEFT JOIN Customers C on O.customerIdx = C.customerIdx\n" + " WHERE O.storeIdx = ? AND O.status = ?\n" + " GROUP BY O.orderIdx, OL.orderlistIdx) R\n" + " ORDER BY R.order_sequence;"; return this.jdbcTemplate.query(OrdersQuery, (rs, rowNum) -> new GetOrderItemRes( rs.getInt("orderIdx"), rs.getInt("order_sequence") == 0 ? 0 : rs.getInt("order_sequence"), rs.getString("order_time"), rs.getString("pickup_time"), rs.getString("request") == null ? "": rs.getString("request"), rs.getInt("total_price"), rs.getString("payment_status"), rs.getString("menu_name"), rs.getInt("cnt"), rs.getInt("today_menu_price") ), storeIdx, status); }
๊ตฌ๋งค์์ ์ฃผ๋ฌธ ๊ด๋ จ ๋๋ฉ์ธ ํฌ์คํ ๊ณผ ํจ๊ปํ ํ ์คํธ
https://velog.io/@99_insung/%EA%B0%9C%EB%B0%9C%EC%9D%BC%EC%A7%80-34-%EC%9E%A5%EB%B0%94%EA%B5%AC%EB%8B%88-%EB%8F%84%EB%A9%94%EC%9D%B8-%EC%9E%A5%EB%B0%94%EA%B5%AC%EB%8B%88-%EC%A3%BC%EB%AC%B8