2021. 12. 17. 17:58ㆍ스프링부트
header.jsp 메뉴부분의 매장관리를 삭제하고 url을 수정합니다

주문접수 페이지 메서드를 추가합니다
@IsMyStore @GetMapping("/admin/management/order/{id}") public String order(@PathVariable long id) { return "admin/order"; }
주문접수 페이지로 이동합니다

주문접수 페이지에서 주문목록을 불러올 메서드를 추가합니다
@IsMyStore @GetMapping("/admin/management/orderList") public ResponseEntity<Map<String, Object>> orderList(long storeId, String list, int page) { System.out.println(storeId); System.out.println(list); System.out.println("page = " + page); List<OrderList> orderList = adminService.order(storeId, list, page); Map<String, Object> map = new HashMap<>(); List<List<Cart>> menuList = new ArrayList<>(); System.out.println(orderList); if(orderList.size() != 0 && orderList.get(0).getFoodInfo() != null) { for (int i=0;i<orderList.size();i++) { menuList.add(FoodInfoFromJson.foodInfoFromJson(orderList.get(i).getFoodInfo())); } } map.put("orderList", orderList); map.put("cartList", menuList); return new ResponseEntity<Map<String, Object>>(map, HttpStatus.OK); }
가게id, 출력하고 싶은 목록(접수 대기중 목록, 처리 중 목록), 페이지를 받아서 주문목록을 SELECT 합니다
주문목록에 담긴 JSON형태의 메뉴 정보를 uil패키지에 만들었던 메서드로 객체로 변환후 리스트에 담습니다
AdminServiceImp
@Override public List<OrderList> order(long storeId, String list, int page) { Page p = new Page(page); Map<String, Object> map = new HashMap<>(); map.put("storeId", storeId); map.put("list", list); map.put("firstList", p.getFirstList()); map.put("lastList", p.getLastList()); return adminDAO.order(map); }
AdminDAOImp
@Override public List<OrderList> order(Map<String, Object> map) { return sql.selectList("admin.orderList", map); }
AdminMapper
<select id="orderList" resultType="OrderList"> WITH T_ORDER AS ( SELECT * FROM ( SELECT * FROM BM_ORDER_USER UNION ALL SELECT * FROM BM_ORDER_NON_USER) WHERE STORE_ID = #{storeId } ), T_DETAIL AS ( SELECT ORDER_NUM, LISTAGG(FOOD_INFO, '/') FOOD_INFO FROM BM_ORDER_DETAIL_USER N GROUP BY ORDER_NUM UNION ALL SELECT ORDER_NUM, LISTAGG(FOOD_INFO, '/') FOOD_INFO FROM BM_ORDER_DETAIL_NON_USER N GROUP BY ORDER_NUM ) SELECT COUNT1 ,COUNT2 ,O.* ,D.FOOD_INFO ,S.STORE_NAME ,S.DELEVERY_TIP FROM ( SELECT #{storeId } AS STORE_ID ,A.COUNT COUNT1 ,B.COUNT COUNT2 FROM (SELECT COUNT(*) COUNT FROM T_ORDER WHERE DELEVERY_STATUS = '주문접수 대기 중') A, (SELECT COUNT(*) COUNT FROM T_ORDER WHERE DELEVERY_STATUS LIKE '배달 준비 중%') B ) ORDER_COUNT LEFT JOIN (SELECT * FROM (SELECT ROWNUM RN, T.* FROM ( SELECT * FROM T_ORDER WHERE DELEVERY_STATUS LIKE '${list }%' ORDER BY ORDER_DATE) T ) WHERE RN BETWEEN #{firstList } AND #{lastList } )O ON ORDER_COUNT.STORE_ID = O.STORE_ID LEFT JOIN T_DETAIL D ON O.ORDER_NUM = D.ORDER_NUM LEFT JOIN BM_STORE S ON O.STORE_ID = S.ID ORDER BY ORDER_DATE </select>
주문대기 목록 수, 배달준비 목록 수, 가게정보, 주문정보를 한번에 가져오려다 보니 코드가 지저분해진거 같습니다
WITH T_ORDER AS ( SELECT * FROM ( SELECT * FROM BM_ORDER_USER UNION ALL SELECT * FROM BM_ORDER_NON_USER) WHERE STORE_ID = #{storeId } ),
T_DETAIL AS ( SELECT ORDER_NUM, LISTAGG(FOOD_INFO, '/') FOOD_INFO FROM BM_ORDER_DETAIL_USER N GROUP BY ORDER_NUM UNION ALL SELECT ORDER_NUM, LISTAGG(FOOD_INFO, '/') FOOD_INFO FROM BM_ORDER_DETAIL_NON_USER N GROUP BY ORDER_NUM )
DETAIL테이블의 메뉴정보를 LISTAGG를 사용해 하나의 컬럼으로 변환후 UNION ALL하고 T_DETAIL에 저장합니다
( SELECT #{storeId } AS STORE_ID ,A.COUNT COUNT1 ,B.COUNT COUNT2 FROM (SELECT COUNT(*) COUNT FROM T_ORDER WHERE DELEVERY_STATUS = '주문접수 대기 중') A, (SELECT COUNT(*) COUNT FROM T_ORDER WHERE DELEVERY_STATUS LIKE '배달 준비 중%') B ) ORDER_COUNT
위에서 저장한 T_ORDER에서 전체 접수 대기 수와 배달 준비 수를 구하고 파라미터로 넘어온 STOREID를 같이 출력합니다
(SELECT * FROM (SELECT ROWNUM RN, T.* FROM ( SELECT * FROM T_ORDER WHERE DELEVERY_STATUS LIKE '${list }%' ORDER BY ORDER_DATE) T ) WHERE RN BETWEEN #{firstList } AND #{lastList } )O
페이징을 위해 ROWNUM을 구하고 한번더 SELECT로 감쌌습니다

주문접수 처리를 하기 위해 컨트롤러에 메서드를 추가합니다
@PatchMapping("/admin/management/orderAccept") public ResponseEntity<String> orderAccept(String orderNum, int time, long userId) { // userId == 0 비회원 adminService.orderAccept(orderNum, time, userId); return new ResponseEntity<>(HttpStatus.OK); }
주문번호와 배달시간, 주문자ID만 받아서 UPDATE하는 간단한 메서드입니다
AdminServiceImp
@Override public void orderAccept(String orderNum, int time,long userId) { adminDAO.orderAccept(orderNum, time,userId); }
AdminDAOImp
@Override public void orderAccept(String orderNum, int time, long userId) { Map<String, Object> map = new HashMap<>(); map.put("orderNum", orderNum); map.put("time", time); map.put("userId", userId); sql.update("admin.orderAccept", map); }
AdminMapper
<update id="orderAccept"> <if test="userId == 0"> UPDATE BM_ORDER_NON_USER SET </if> <if test="userId != 0"> UPDATE BM_ORDER_USER SET </if> DELEVERY_STATUS = '배달 준비 중(약 ${time}분 후에 도착)' WHERE ORDER_NUM = #{orderNum } </update>


주문 거부 메서드를 추가합니다
@PatchMapping("/admin/management/orderCancle") public ResponseEntity<String> orderCancle(OrderCancle orderCancle) { adminService.orderCancle(orderCancle); return new ResponseEntity<>(HttpStatus.OK); }
주문거부 정보를 담을 dto를 추가합니다
OrderCancle
@Getter @Setter @ToString public class OrderCancle { private String OrderNum; private String cancleReason; private long userId; private int totaloPrice; private int usedPoint; private int deleveryTip; private String impUid; // 아임포트 결제번호 }
결제 api 사용시 필요한 정보를 미리 추가하였습니다
service와 dao를 추가합니다
AdminServiceImp
@Override public void orderCancle(OrderCancle orderCancle) { adminDAO.orderCancle(orderCancle); }
AdminDAOImp
@Override public void orderCancle(OrderCancle orderCancle) { sql.update("admin.orderCancle", orderCancle); }
AdminMapper
<update id="orderCancle"> <if test="userId == 0"> UPDATE BM_ORDER_NON_USER SET </if> <if test="userId != 0"> UPDATE BM_ORDER_USER SET </if> DELEVERY_STATUS = '주문 취소(${cancleReason })' WHERE ORDER_NUM = #{orderNum } </update>

주문 완료 메서드를 추가합니다
@PatchMapping("/admin/management/orderComplete") public ResponseEntity<String> orderComplete(String orderNum, long userId) { // userId == 0 비회원 adminService.orderComplete(orderNum, userId); return new ResponseEntity<>(HttpStatus.OK); }
AdminServiceImp
@Override public void orderComplete(String orderNum, long userId) { Map<String, Object> map = new HashMap<>(); map.put("orderNum", orderNum); map.put("userId", userId); adminDAO.orderComplete(map); }
AdminDAOImp
@Override public void orderComplete(Map<String, Object> map) { sql.update("admin.orderComplete", map); }
AdminMapper
<update id="orderComplete"> <if test="userId == 0"> UPDATE BM_ORDER_NON_USER SET </if> <if test="userId != 0"> UPDATE BM_ORDER_USER SET </if> DELEVERY_STATUS = '배달 완료' WHERE ORDER_NUM = #{orderNum } </update>

adminOrder.js의 아래 메서드는 필요없으니 삭제합니다

'스프링부트' 카테고리의 다른 글
스프링부트+jsp로 배달사이트 만들기-32 매출 관리 (0) | 2021.12.20 |
---|---|
스프링부트+jsp로 배달사이트 만들기-31 웹소켓으로 실시간 주문받기 (0) | 2021.12.17 |
스프링부트+jsp로 배달사이트 만들기-29 관리자페이지(메뉴 삭제,수정, 답장하기) (0) | 2021.12.17 |
스프링부트+jsp로 배달사이트 만들기-28 관리자페이지(가게 정보 수정, 메뉴 추가) (0) | 2021.12.17 |
스프링부트+jsp로 배달사이트 만들기-27 관리자 가게상세/AOP (1) | 2021.12.17 |