Skip to content

Commit

Permalink
Merge pull request #139 from in27sung/hyeon
Browse files Browse the repository at this point in the history
쌈뽕한 주문
  • Loading branch information
freehyeon authored Dec 12, 2024
2 parents 9ecfb33 + 1a00a68 commit 548c8a4
Show file tree
Hide file tree
Showing 15 changed files with 2,169 additions and 509 deletions.
125 changes: 78 additions & 47 deletions stockMate/src/main/java/com/stockm8/controller/OrderController.java
Original file line number Diff line number Diff line change
@@ -1,20 +1,28 @@
package com.stockm8.controller;

import java.util.HashMap;
import java.util.List;

import java.util.Map;
import javax.inject.Inject;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.MediaType;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

import com.stockm8.domain.vo.ProductVO;
import com.stockm8.domain.vo.OrderItemVO;
import com.stockm8.domain.vo.OrderVO;
import com.stockm8.domain.vo.StockVO;
import com.stockm8.domain.vo.UserVO;
import com.stockm8.service.OrderService;
import com.stockm8.service.UserService;

@Controller
@RequestMapping(value = "/order/*")
Expand All @@ -24,72 +32,95 @@ public class OrderController {

@Inject
private OrderService orderService;
@Inject
private UserService userService;

/**
* 주문 등록 페이지 표시
* 주문 등록 페이지 표시(GET)
* http://localhost:8088/order/register
* @param model Spring MVC 모델 객체
* @return 주문 등록 페이지의 뷰 이름
*
*/
@RequestMapping(value = "/register", method = RequestMethod.GET)
public String orderRegisterGET(Model model) throws Exception {
public String orderRegisterGET(Model model, HttpServletRequest request) throws Exception {
logger.info("orderRegisterGET() 호출");
return "order/register"; // WEB-INF/views/Order/OrderRegister.jsp를 찾음

// // 세션에서 userId 가져오기
// HttpSession session = request.getSession(false);
// Long userId = (session != null) ? (Long)session.getAttribute("userId") : null;
//
// // userId로 사용자 정보 조회
// UserVO user = userService.getUserById(userId);
// int businessId = user.getBusinessId();

return "order/register";
}

// /**
// * 주문 등록 처리
// */
// @RequestMapping(value = "/register", method = RequestMethod.POST)
// @ResponseBody
// public String OrderRegisterPOST(@RequestBody OrderVO vo) throws Exception {
// logger.info("OrderRegisterPOST() 호출");
// logger.info("주문 정보: {}", vo);
//
// try {
// // 현재 시간 설정
// Timestamp currentTime = new Timestamp(System.currentTimeMillis());
// vo.setCreatedAt(currentTime);
// vo.setUpdatedAt(currentTime);
// vo.setStatus("pending");
//
// // 주문항목들의 시간 설정
// if (vo.getOrderItems() != null) {
// for (OrderItemVO item : vo.getOrderItems()) {
// item.setCreatedAt(currentTime);
// item.setUpdatedAt(currentTime);
// }
// }
//
// // 주문 등록
// oSer.insertOrder(vo);
//
// logger.info("주문등록 성공! 주문번호: {}", vo.getOrderNumber());
// return "success";
//
// } catch (Exception e) {
// logger.error("주문등록 실패: {}", e.getMessage());
// throw e;
// }
// }
/**
* 주문 등록 처리(POST)
* http://localhost:8088/order/register
* @param order 클라이언트에서 전송된 주문 정보
* @return 처리 결과를 담은 Map 객체
* @throws Exception 주문 처리 중 발생하는 예외
*
*/
@RequestMapping(value = "/register",
method = RequestMethod.POST,
produces = MediaType.APPLICATION_JSON_VALUE)
@ResponseBody
public Map<String, String> orderRegisterPOST(@RequestBody OrderVO order) throws Exception {
logger.info("orderRegisterPOST() 호출");
logger.info("주문 정보: " + order);

// 주문에 orderItems가 있는지 확인(유효성 검사)
if (order.getOrderItems() == null || order.getOrderItems().isEmpty()) {
throw new IllegalArgumentException("주문 항목이 누락되었습니다.");
}


// 주문번호 생성 및 설정
String orderNumber = orderService.generateOrderNumber();
order.setOrderNumber(orderNumber);

// 첫 번째 주문 항목 가져오기
OrderItemVO orderItem = order.getOrderItems().get(0);

// 주문 처리
orderService.insertOrder(order);

// 응답 생성
Map<String, String> response = new HashMap<>();
response.put("status", "success");
response.put("message", "주문이 성공적으로 등록되었습니다.");
response.put("orderNumber", orderNumber);

return response;
}

/**
* 전체 제품 목록 조회
* 가용 재고 목록 조회
* http://localhost:8088/order/findAvailableStocks
*/
@RequestMapping(value = "/findAllProducts",
@RequestMapping(value = "/findAvailableStocks",
method = RequestMethod.GET,
produces = MediaType.APPLICATION_JSON_VALUE)
@ResponseBody
public List<ProductVO> findAllProducts() throws Exception {
logger.info("findAllProducts() 호출");
return orderService.findAllProducts();
public List<StockVO> findAvailableStocks() throws Exception {
logger.info("findAvailableStocks() 호출");
return orderService.findAvailableStocks();
}

/**
* 주문번호 생성
* http://localhost:8088/order/generateOrderNumber
*/
@RequestMapping(value = "/generateOrderNumber", method = RequestMethod.GET)
@RequestMapping(value = "/generateOrderNumber",
method = RequestMethod.GET,
produces = MediaType.APPLICATION_JSON_VALUE)
@ResponseBody
public String generateOrderNumber() throws Exception {
logger.info("generateOrderNumber() 호출");
return orderService.generateOrderNumber();
}
}
} //OrderController
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,11 @@ public class OrderItemVO {
private int orderItemId; // 주문 상세 항목 고유 ID
private int orderId; // 주문 ID
private int productId; // 주문 상품 ID
private int warehouseId; // 창고 ID
private int quantity; // 주문 수량
private double unitPrice; // 제품 단가
private double subtotalPrice; // 해당 상품의 총 금액 (quantity * unitPrice)
private Timestamp createdAt; // 주문 생성 날짜
private Timestamp updatedAt; // 주문 수정 날짜
private String remarks; // 특정 상품에 대한 비고 사항
}
private double stotalPrice; // 주문 1건의 전체 총 금액
private Timestamp createdAt; // 생성 시간
private Timestamp updatedAt; // 수정 시간
} //OrderItemVO
14 changes: 9 additions & 5 deletions stockMate/src/main/java/com/stockm8/domain/vo/OrderVO.java
Original file line number Diff line number Diff line change
@@ -1,20 +1,24 @@
package com.stockm8.domain.vo;

import java.sql.Timestamp;
import java.util.List;

import lombok.Data;


@Data
public class OrderVO {

private int orderId; // 주문 고유 ID
private String orderNumber; // 주문 번호
private int warehouseId; // 주문 대상 창고
private int orderId; // 주문 고유 ID
private String orderNumber; // 주문 번호 (예: ORD-YYYYMMDD-001)
private double totalPrice; // 주문 전체 총 금액
private int createdBy; // 주문을 생성한 사용자 ID
private Timestamp createdAt; // 주문 생성 날짜
private Timestamp updatedAt; // 주문 수정 날짜
private String status; // 주문 상태 (pending, confirmed, cancelled)



private List<OrderItemVO> orderItems; // 주문 항목 리스트



}// OrderVO
62 changes: 14 additions & 48 deletions stockMate/src/main/java/com/stockm8/domain/vo/StockVO.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,53 +6,19 @@

@Data
public class StockVO {
private int stockId; // 고유 재고 ID
private int productId; // 상품 ID
private int warehouseId; // 창고 ID
private int businessId; // 사업자 ID

private int totalQuantity; // 창고 내 총 재고 수량
private int reservedQuantity; // 예약된 수량

// availableStock은 totalQuantity - reservedQuantity로 계산
private int availableStock; // 사용 가능한 재고 (totalQuantity - reservedQuantity)

// totalQuantity에 대한 getter
public int getTotalQuantity() {
return totalQuantity;
}

public void setTotalQuantity(int totalQuantity) {
this.totalQuantity = totalQuantity;
updateAvailableStock(); // 값이 변경되면 availableStock을 자동으로 업데이트
}

// reservedQuantity에 대한 getter
public int getReservedQuantity() {
return reservedQuantity;
}

public void setReservedQuantity(int reservedQuantity) {
this.reservedQuantity = reservedQuantity;
updateAvailableStock(); // 값이 변경되면 availableStock을 자동으로 업데이트
}

// availableStock을 계산하는 getter
public int getAvailableStock() {
return availableStock;
}

// availableStock 계산
private void updateAvailableStock() {
this.availableStock = this.totalQuantity - this.reservedQuantity;
}

private Timestamp createdAt; // 재고 등록 시간
private Timestamp updatedAt; // 최근 수정 시간

private String description; // 재고 설명

private String dscription; // 재고 설명
private Boolean isDeleted; // 논리 삭제 여부 (true: 삭제됨, false: 활성)
private int stockId; // 고유 재고 ID
private int productId; // 상품 ID
private int warehouseId; // 창고 ID
private int businessId; // 사업자 ID
private int totalQuantity; // 창고 내 총 재고 수량
private int reservedQuantity; // 예약된 수량
private int availableStock; // 사용 가능한 재고
private Timestamp updatedAt; // 최근 수정 시간
private Timestamp createdAt; // 재고 등록 일자
private String description; // 재고 설명
private boolean isDeleted; // 논리 삭제 여부

private ProductVO product; // 상품 정보 (JOIN 용)
private String warehouseName; // 창고명 (JOIN 용)

}
58 changes: 58 additions & 0 deletions stockMate/src/main/java/com/stockm8/domain/vo/StockVO2.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
package com.stockm8.domain.vo;

import java.sql.Timestamp;

import lombok.Data;

@Data
public class StockVO2 {
private int stockId; // 고유 재고 ID
private int productId; // 상품 ID
private int warehouseId; // 창고 ID
private int businessId; // 사업자 ID

private int totalQuantity; // 창고 내 총 재고 수량
private int reservedQuantity; // 예약된 수량

// availableStock은 totalQuantity - reservedQuantity로 계산
private int availableStock; // 사용 가능한 재고 (totalQuantity - reservedQuantity)

// totalQuantity에 대한 getter
public int getTotalQuantity() {
return totalQuantity;
}

public void setTotalQuantity(int totalQuantity) {
this.totalQuantity = totalQuantity;
updateAvailableStock(); // 값이 변경되면 availableStock을 자동으로 업데이트
}

// reservedQuantity에 대한 getter
public int getReservedQuantity() {
return reservedQuantity;
}

public void setReservedQuantity(int reservedQuantity) {
this.reservedQuantity = reservedQuantity;
updateAvailableStock(); // 값이 변경되면 availableStock을 자동으로 업데이트
}

// availableStock을 계산하는 getter
public int getAvailableStock() {
return availableStock;
}

// availableStock 계산
private void updateAvailableStock() {
this.availableStock = this.totalQuantity - this.reservedQuantity;
}

private Timestamp createdAt; // 재고 등록 시간
private Timestamp updatedAt; // 최근 수정 시간

private String description; // 재고 설명

private String dscription; // 재고 설명
private Boolean isDeleted; // 논리 삭제 여부 (true: 삭제됨, false: 활성)

}
14 changes: 11 additions & 3 deletions stockMate/src/main/java/com/stockm8/persistence/OrderDAO.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import com.stockm8.domain.vo.OrderItemVO;
import com.stockm8.domain.vo.OrderVO;
import com.stockm8.domain.vo.ProductVO;
import com.stockm8.domain.vo.StockVO;


public interface OrderDAO {
Expand All @@ -14,9 +15,16 @@ public interface OrderDAO {
// 주문 항목 등록
public void insertOrderItem(OrderItemVO orderItem) throws Exception;

// 모든 제품 목록 조회
public List<ProductVO> findAllProducts() throws Exception;
// 주문과 주문항목을 한번에 처리
public void insertOrderWithItems(OrderVO order) throws Exception;

// 모든 재고 목록 조회
public List<StockVO> findAvailableStocks() throws Exception;

//주문번호 생성
public String generateOrderNumber() throws Exception;
}


// 재고의 예약 수량을 업데이트.. 이거는 뭐지..>>
public void updateStockReservedQuantity(int stockId, int quantity) throws Exception;
} // OrderDAO
Loading

0 comments on commit 548c8a4

Please sign in to comment.