- ๋จ์ ์ฌ์ฉ์๊ฐ ์ฃผ๋ฌธ ์์ฒญ์ ํ๊ณ ๊ฒฐ์ ๊ฐ ๋ฐ์ํ๋ ๊ฒ์ด ์๋๋ผ, ํ๋งค์๊ฐ ์ฃผ๋ฌธ ์ ์๋ฅผ ํด์ผ ๊ฒฐ์ ๊ฐ ๊ฐ๋ฅํ๋๋ก ๋ก์ง์ ๊ตฌํํ๊ธฐ๋ก ํ์๋ค.
- ๊ตฌ๋งค ๊ด๋ จ ํฌ์คํ ..
- ์์ฒญ ๋ฐ๋
์กฐํ์์ ๋ฏธ๋ฆฌ ์๋ต์ ํฌํจํ๋ orderIdx ๋ฅผ ํ๋ก ํธ์์ ์ ์งํ์ฌ, ์ ์/ ์ทจ์๋ฅผ ํ๋ ์ฃผ๋ฌธ์ ๋ํ ์๋ณ์ ๋ฐ๋ก ํ ์ ์๋๋ก ํ์๊ณ , ์ด๋ฅผ ์์ฒญ ๋ฐ๋์ ๋ด๋๋ก ํ์๋ค.
- OrderController.java
์ฃผ๋ฌธ ์ ์ ๋๊ธฐ ํ๋ฉด์ ๋์์๋ ์ฃผ๋ฌธ ์ ์/์ทจ์ํ๊ธฐ ๋ฒํผ ํด๋ฆญ์ ์์ฒญ๋๋ API์ด๋ค.
"P" :์ฃผ๋ฌธ ์ ์, "D" : ์ฃผ๋ฌธ ์ทจ์
- OrderService.java
- ์ฌ๋ฐ๋ฅธ ์์ฒญ์ ๋ณด๋๋์ง ๊ฒ์ฌํ๊ธฐ
- ์ ์/์ทจ์ ๋ง๊ณ ๋ค๋ฅธ ์ํ์ ๊ฐ์ ๋ณด๋๋๊ฐ?
- ์ด๋ฏธ ์ฒ๋ฆฌ๋ ์ํ์ ์ฃผ๋ฌธ ์ธ๊ฐ??
@Transactional(rollbackFor = BaseException.class) public PatchReceRes patchRecBySellerIdx(int sellerIdx, PatchReceReq patchReceReq) throws BaseException{ // 0) int storeIdx; try { storeIdx = storeDao.storeIdxBySellerIdx(sellerIdx); } catch (Exception e){ throw new BaseException(POST_STORES_NOT_REGISTERD); // ์กด์ฌํ์ง ์์ ๊ฐ๊ฒ์ ๋๋ค. } // 1) ์ฌ๋ฐ๋ฅธ ์ ์/์กฐํ ์์ฒญ ์ธ์ง if (!patchReceReq.getStatus().equals("P") && !patchReceReq.getStatus().equals("D")) throw new BaseException(DATABASE_ERROR); // ์ฌ๋ฐ๋ฅด์ง ์์ ์ฃผ๋ฌธ ์ ์/์ทจ์ ์์ฒญ์ ๋๋ค. // 2) ์กฐํํด์ ์ํ๊ฐ ๋๊ธฐ ์ํ์ธ์ง ํ์ธ String status; try{ status = orderDao.checkOrderStatus(patchReceReq.getOrderIdx()); }catch (Exception e){ throw new BaseException(DATABASE_ERROR); // ์ฃผ๋ฌธ ์ ๋ณด๊ฐ ์ณ๋ฐ๋ฅด์ง ์์ต๋๋ค. } if(!"W".equals(status)){ throw new BaseException(DATABASE_ERROR); // ์ด๋ฏธ ์ฒ๋ฆฌ ๋๊ฑฐ๋, ์ฒ๋ฆฌ ๋์ง ์์ ์ฃผ๋ฌธ์ ๋๋ค. }
- ์ฃผ๋ฌธ ์ ์ ์ค๋น
- ์ค๋ ์ ์ํ ๊ฐ๊ฒ์ ์ฃผ๋ฌธ ์ค, ์กฐํ๋ฅผ ํ์ ๋ ์ฃผ๋ฌธ ๋ฒํธ๊ฐ ํ ๋น๋ ํ์ด ์๋ค๋ฉด ์ฃผ๋ฌธ ๋ฒํธ ์์ from 1
- ์ค๋ ์ ์ํ ๊ฐ๊ฒ์ ์ฃผ๋ฌธ ์ค, ์กฐํ๋ฅผ ํ์ ๋ ์ฃผ๋ฌธ ๋ฒํธ๊ฐ ํ ๋น๋ ํ์ด ์๋ค๋ฉด ๋ง์ง๋ง ์ฃผ๋ถ ๋ฒํธ๋ก๋ถํฐ +1
// 4) ์ฃผ๋ฌธ๋ฒํธ ํ์ธ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); String date = sdf.format(new Date()); int orderSequence; try{ orderSequence = orderDao.getOrderSequence(storeIdx, date); orderSequence += 1; }catch (IncorrectResultSizeDataAccessException error) { // ์ฟผ๋ฆฌ๋ฌธ์ ํด๋นํ๋ ๊ฒฐ๊ณผ๊ฐ ์๊ฑฐ๋ 2๊ฐ ์ด์์ผ ๋ orderSequence = 1; }catch (Exception e){ throw new BaseException(DATABASE_ERROR);// ๋ฐ์ดํฐ๋ฅผ ์ ๋ฐ์ดํธ ํ๋๋ฐ ์ค๋ฅ๊ฐ ์์ }
- ์ฃผ๋ฌธ ์ ์ ๋ฐ ์ทจ์ ์ฟผ๋ฆฌ ๋ ๋ฆฌ๊ธฐ
- ๊ฒฐ์ ๊ด๋ จ ์ ๋ณด๋ PortOne API๋ฅผ ์ด์ฉํ๊ธฐ๋ก ํ๋๋ฐ ์ฌ์ ์ ๋ฑ๋ก์ฆ ์ด์ ๋๋ฌธ์ ๊ฒฐ์ ๊ตฌํ์ ์ค์ ๋ก ํ์ง ๋ชปํ๋ค..
- ์ฃผ๋ฌธ ์ ์์ ์ทจ์์ ๋ํ ์ต์ข ์ฟผ๋ฆฌ๋ฅผ ๋ ๋ฆฌ๋ ๋ก์ง
// 5) ์ฃผ๋ฌธ ์ ์ ํน์ ์ทจ์ // ******************** ์ฌ๊ธฐ์ ๊ตฌ๋งค์ ๋ณด ๋ฐ์ ์์ผ์ ์ฒ๋ฆฌํด์ผํจ ******************** int updated = 0; try{ if (patchReceReq.getStatus().equals("D")) updated = orderDao.orderDenied(storeIdx, patchReceReq.getOrderIdx(), patchReceReq.getStatus()); else if (patchReceReq.getStatus().equals("P")) updated = orderDao.orderAccepted(storeIdx, patchReceReq.getOrderIdx(), patchReceReq.getStatus(), orderSequence); }catch (Exception e){ //System.out.println("1: "+ e); throw new BaseException(DATABASE_ERROR);// ๋ฐ์ดํฐ๋ฅผ ์ ๋ฐ์ดํธ ํ๋๋ฐ ์ค๋ฅ๊ฐ ์์ } if(updated == 1){ return new PatchReceRes(storeIdx, orderSequence); }else{ //System.out.println("2: "); throw new BaseException(DATABASE_ERROR); } }
- OrderDao.java
// ํ์ฌ orderIdx์ status ๊ฐ์ ํ์ธํด์ค๋ค. public String checkOrderStatus(int orderIdx) { String query = "SELECT status FROM Orders WHERE orderIdx = ?"; return this.jdbcTemplate.queryForObject(query, String.class, orderIdx); }
// ๊ฐ๊ฒ์ ์ฃผ๋ฌธ ์ค ๋ ์ง๊ฐ ์ค๋ ๋ฒ์ ์์ด๊ณ , // ์ํ๊ฐ ์ฃผ๋ฌธ ์ ์ ์ค/ ์๋ฃ ๋ ๋ฐ์ดํฐ ์ค์ ๋ง์ง๋ง ์ฃผ๋ฌธ์ ์ฃผ๋ฌธ ๋ฒํธ๋ฅผ ์กฐํ public int getOrderSequence(int storeIdx, String date) { String query = "SELECT\n" + " orderIdx,\n" + " order_sequence\n" + "FROM Orders\n" + "WHERE storeIdx = ?\n" + " AND DATE_FORMAT(order_time, '%Y-%m-%d') = ?\n" + " AND (status = 'P' OR status = 'A')\n" + "ORDER BY order_sequence DESC LIMIT 1"; Object[] params = new Object[]{storeIdx, date}; return this.jdbcTemplate.queryForObject(query, (rs, rowNum) -> rs.getInt("order_sequence"), params); }
// ์ฃผ๋ฌธ ๊ฑฐ์ ์ฟผ๋ฆฌ(์ํ๊ฐ ๋ณ๊ฒฝ) public int orderDenied(int storeIdx, int orderIdx, String status){ String updateQuery = "UPDATE Orders SET " + "status = ? " + "WHERE storeIdx = ? AND orderIdx = ?"; return jdbcTemplate.update(updateQuery, status, storeIdx, orderIdx); }
// ์ฃผ๋ฌธ ์ ์ ์ฟผ๋ฆฌ(์ฃผ๋ฌธ ๋ฒํธ ํ ๋น ๋ฐ ์ํ๊ฐ ๋ณ๊ฒฝ) public int orderAccepted(int storeIdx, int orderIdx, String status, int orderSequence){ String updateQuery = "UPDATE Orders SET " + "status = ?, " + "order_sequence = ? " + "WHERE storeIdx = ? AND orderIdx = ?"; return jdbcTemplate.update(updateQuery, status, orderSequence, storeIdx, orderIdx); }
ํ ์คํธ๋ ๋์ค์ ๊ตฌ๋งค์์ ์ฃผ๋ฌธ ๊ด๋ จ ๋๋ฉ์ธ ํฌ์คํ ์ ์์ฑํ๋ฉด ๋งํฌ๋ฅผ ๊ฑธ๊ฒ ๋ค.
- ๋๋ฉ์ธ ๋ก์ง ์, ์ ์ ํ ํฝ์ ์์ ์๊ฐ์ ์๋์ด ์์ ์์์ ๋ฐ์๊ฐ๋ฉด ์ฌ์ฅ๋์ด ํฝ์ ์๋ฃ ๋ฒํผ์ ๋๋ฅด๋๋ก ๊ธฐ๋ฅ์ ๊ตฌํํ๊ธฐ๋ก ํ์๋ค.
- ์์ฒญ ๋ฐ๋
- OrderContoller.java
- OrderService.java
- ์ฃผ๋ฌธ์ ์ํ๊ฐ์ด ์ฒ๋ฆฌ์ค์ธ ์ฃผ๋ฌธ์ด ์๋๋ผ๋ฉด ํฝ์ ์๋ฃ๊ฐ ๋ถ๊ฐ๋ฅํจ.
- ์ฃผ๋ฌธ ์ํ ํ์ธ ํ ํฝ์ ์๋ฃ๋ก ์ฒ๋ฆฌ
@Transactional(rollbackFor = BaseException.class) public PatchPickupRes pickupOrder(int sellerIdx, PatchPickupReq patchPickupReq) throws BaseException { //1) ์ฌ์ฉ์ ๊ฐ๊ฒ ์กฐํ int storeIdx; try { storeIdx = storeDao.storeIdxBySellerIdx(sellerIdx); } catch (Exception e) { throw new BaseException(DATABASE_ERROR); } // 2) ํด๋น ์ฃผ๋ฌธ์ ์ํ๊ฐ์ ์กฐํ String status; try { status = orderDao.checkOrderStatus(patchPickupReq.getOrderIdx()); } catch (Exception e) { throw new BaseException(DATABASE_ERROR); // ํด๋น ์ฃผ๋ฌธ์๋ํ ์ํ๊ฐ์ ์ฐพ์ ์ ์์ต๋๋ค. } if (!"P".equals(status)) {// string์ผ๋ก status๋ฅผ๊ฐ์ ธ์์ผ..... //"P" != "status" ์ด๋ ๊ฒ ํ๋ฉด ๊ฒฐ๊ณผ๊ฐํญ์ ์ฐธ์ด ๋์จ๋ค ์คํจ throw new BaseException(DATABASE_ERROR); // ํด๋น ์ฃผ๋ฌธ์ด ๋๊ธฐ/์ทจ์/์๋ฃ๋ ์์ ์ ๋๋ค. } // ์ฃผ๋ฌธ ์ํ ํ์ธ ํ ์ ๋ฐ์ดํธ ์ธ๋ถํ ํ์ int resultCount; try { resultCount = orderDao.orderPickupUpdate(patchPickupReq.getOrderIdx()); } catch (BaseException e) { throw new BaseException(DATABASE_ERROR); } if (resultCount == 1) return new PatchPickupRes(storeIdx); else throw new BaseException(DATABASE_ERROR); }
- OrderDao.java
public String checkOrderStatus(int orderIdx) { String query = "SELECT status FROM Orders WHERE orderIdx = ?"; return this.jdbcTemplate.queryForObject(query, String.class, orderIdx); }// ํ์ฌ orderIdx์ status ๊ฐ์ ํ์ธํด์ค๋ค.
public int orderPickupUpdate(int orderIdx) throws BaseException { String updatequery = "UPDATE Orders " + " SET status = 'A' \n " + "WHERE " + " orderIdx = ? AND" + " status = 'P'"; return jdbcTemplate.update(updatequery, orderIdx); }
ํ ์คํธ๋ ๋์ค์ ๊ตฌ๋งค์์ ์ฃผ๋ฌธ ๊ด๋ จ ๋๋ฉ์ธ ํฌ์คํ ์ ์์ฑํ๋ฉด ๋งํฌ๋ฅผ ๊ฑธ๊ฒ ๋ค.
- ์ฃผ๋ฌธ์ ๊ฒ ๋ชจ์ต์ด์๋ ์์ธ ์ ๋ณด๋ฅผ ๊ฐ๋จํ ํํํ๋ก ํํํ๋๋ฐ ๊ฐ์ ์กฐํํ๊ธฐ์ํ API
- ์์ฒญ ๋ฐ๋ : orderIdx ํ๋ ๋ค์ด๊ฐ ์๋ค.
- ์๋ต ๋ฐ๋
- OrderController.java
- OrderService.java
์ฃผ๋ฌธํ๊ฐ ๋ฐํ๋๋ ์ฃผ๋ฌธ์ธ์ง ์๋ณํ๊ณ , ์ฃผ๋ฌธ ์ ๋ณด๋ฅผ ์กฐํํ ํ, ์ฃผ๋ฌธ์ ํฌํจ๋ ๋ฉ๋ด๋ ํฌํจํ์ฌ ์๋ต๋ฐ๋์ ๋ฃ์ด์ค ๋ฐ์ดํฐ๋ฅผ ์ค๋นpublic GetBillRes getBillsByOrderIdx(int sellerIdx, GetBillReq getBillReq) throws BaseException { //1. ๊ฐ๊ฒ์ ์กด์ฌ ์ฌ๋ถ int storeIdx; try { storeIdx = storeDao.storeIdxBySellerIdx(sellerIdx); } catch (Exception e) { throw new BaseException(BaseResponseStatus.POST_STORES_NOT_REGISTERD); //๊ฐ๊ฒ๊ฐ ๋ฑ๋ก๋์ด ์์ง ์๋ค. } // 2. ์ํ๊ฐ W,D์ธ ๊ฒฝ์ฐ์๋ ์ฃผ๋ฌธํ๊ฐ ์กด์ฌํ์ง ์๋๋ค. (์ฃผ๋ฌธ ์ ์์ฒ๋ฆฌ๊ฐ ๋ ์ฃผ๋ฌธํ) String status; try{ status = orderDao.checkOrderStatus(getBillReq.getOrderIdx()); }catch (Exception e){ throw new BaseException(BaseResponseStatus.DATABASE_ERROR); //ํ์ฌ ์ํ๊ฐ ์กด์ฌํ์ง ์๋ ๊ฒฝ์ฐ์ด๋ค. } if ((!status.equals("P") || !status.equals("W")) && status.equals("D")){ throw new BaseException(BaseResponseStatus.DATABASE_ERROR); // ํ์ฌ ์ณ๋ฐ๋ฅด์ง ์์ ์ํ์ด๋ค. } // 3. ์ฃผ๋ฌธ ์ ๋ณด ์กฐํํ๊ธฐ GetBillRes orderBills; try{ orderBills = orderDao.getOrderBills(storeIdx, getBillReq.getOrderIdx()); }catch (Exception e){ throw new BaseException(BaseResponseStatus.DATABASE_ERROR); } // 4. ์ฃผ๋ฌธ์ ํฌํจ๋ ๋ฉ๋ด ์ ๋ณด ์กฐํํ๊ธฐ try{ orderBills.setOrderItem(orderDao.getOrderMenus(getBillReq.getOrderIdx())); return orderBills; }catch (Exception e){ throw new BaseException(BaseResponseStatus.DATABASE_ERROR); } }
- OrderDao.java
// ์ฃผ๋ฌธ ๊ธฐ๋ณธ์ ๋ณด public GetBillRes getOrderBills(int storeIdx, int orderIdx) { String query = "SELECT\n" + " O.orderIdx, DATE_FORMAT(O.order_time, '%Y-%m-%d') AS orderDate,\n" + " O.payment_status, DATE_FORMAT(O.pickup_time, '%H:%i') AS pickUpTime,\n" + " O.order_sequence, \n" + " O.request\n" + "FROM Orders O\n" + "WHERE O.orderIdx = ?\n"; return this.jdbcTemplate.queryForObject(query, (rs, rowNum) -> new GetBillRes( storeIdx, rs.getInt("orderIdx"), rs.getString("orderDate"), rs.getString("payment_status"), rs.getString("pickUpTime"), rs.getInt("order_sequence"),//0, // ์ฃผ๋ฌธ ๋ฒํธ rs.getString("request"), null ),orderIdx); }
/// ์กฐ์ธ์ ํตํ ์ฃผ๋ฌธ์ ํฌํจ๋ ๋ฉ๋ด ์กฐํ public List<OrderMenuCnt> getOrderMenus(int orderIdx){ String query = "SELECT M.menu_name, OL.cnt\n" + "FROM Orders O\n" + "LEFT JOIN OrderLists OL 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" + "WHERE O.orderIdx = ?\n" + "ORDER BY O.orderIdx;"; //join ํ ๋ ํฐ ๊ฒ์์ ์์ ๊ฒ์ผ๋ก joinํ๊ธฐ return this.jdbcTemplate.query(query, (rs, rowNum) -> new OrderMenuCnt( rs.getString("menu_name"), rs.getInt("cnt") ), orderIdx); }
ํ ์คํธ๋ ๋์ค์ ๊ตฌ๋งค์์ ์ฃผ๋ฌธ ๊ด๋ จ ๋๋ฉ์ธ ํฌ์คํ ์ ์์ฑํ๋ฉด ๋งํฌ๋ฅผ ๊ฑธ๊ฒ ๋ค.
๋ฐฐ์น ์ค์ผ์ค๋ฌ๋ก ๋์ค์ ๋งค์ถ์ ์ ๋ฆฌํ๊ณ ๋น์ผ ๋ฐ์ํ ์ฃผ๋ฌธ์ ์ด๊ธฐํํ๋ ์๋ํ ๊ธฐ๋ฅ์ ์ถ๊ฐํด์ผํ๋๋ฐ, ๊ฐ๊ฒ์ ๋งค์ถ์ ์ง๋ ์ฃผ๋ฌธ์ด๋ผ๋ ๋ฒ์ฃผ์์ ๋ค์ด์ผํ๊ธฐ ๋๋ฌธ์ ๋ฐฐ์น ์ค์ผ์ค๋ฌ๋ฅผ ์ฌ์ฉํ์ ๋ ์๋ณํ ์ํ๊ฐ์ ์ถ๊ฐํด์ผํ๋ค...