From 50ea49ee1a32677dd45921daf481de9860d40222 Mon Sep 17 00:00:00 2001 From: freehyeon Date: Wed, 18 Dec 2024 12:31:37 +0900 Subject: [PATCH 1/2] =?UTF-8?q?=EC=88=98=EC=A3=BC,=20=EB=B0=9C=EC=A3=BC=20?= =?UTF-8?q?=EA=B0=80=EC=9A=A9=EC=9E=AC=EA=B3=A0=20=EA=B4=80=EB=A0=A8=20?= =?UTF-8?q?=EC=BD=94=EB=93=9C=20=EC=88=98=EC=A0=95=20=EB=B0=8F=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../stockm8/controller/OrderController.java | 2 +- .../com/stockm8/service/OrderService.java | 7 ++-- .../com/stockm8/service/OrderServiceImpl.java | 14 +++++-- .../webapp/WEB-INF/views/order/register.jsp | 41 +++++++++++++------ 4 files changed, 44 insertions(+), 20 deletions(-) diff --git a/stockMate/src/main/java/com/stockm8/controller/OrderController.java b/stockMate/src/main/java/com/stockm8/controller/OrderController.java index ff0d3cc..f16b986 100644 --- a/stockMate/src/main/java/com/stockm8/controller/OrderController.java +++ b/stockMate/src/main/java/com/stockm8/controller/OrderController.java @@ -96,7 +96,7 @@ public Map orderRegisterPOST(@RequestBody OrderVO order, HttpSer for (OrderItemVO item : order.getOrderItems()) { if (order.getOrderType() == OrderType.INBOUND) { // 수주의 경우 가용 재고 체크 - if (!orderService.checkAvailableStock(item)) { + if (!orderService.checkAvailableStock(item,order.getOrderType())) { throw new IllegalArgumentException( String.format("재고 부족 - StockId: %d, 요청수량: %d", item.getStockId(), item.getQuantity()) diff --git a/stockMate/src/main/java/com/stockm8/service/OrderService.java b/stockMate/src/main/java/com/stockm8/service/OrderService.java index 2a33f14..85038b9 100644 --- a/stockMate/src/main/java/com/stockm8/service/OrderService.java +++ b/stockMate/src/main/java/com/stockm8/service/OrderService.java @@ -6,7 +6,8 @@ import com.stockm8.domain.vo.OrderItemVO; import com.stockm8.domain.vo.OrderVO; import com.stockm8.domain.vo.ProductVO; -import com.stockm8.domain.vo.StockVO; +import com.stockm8.domain.vo.StockVO; +import com.stockm8.domain.vo.OrderVO.OrderType; public interface OrderService { @@ -31,8 +32,8 @@ public interface OrderService { // 주문 상세 항목 목록 조회 public List getOrderItemsByOrderId(int orderId) throws Exception; - // 가용 재고 체크 미사용 - public boolean checkAvailableStock(OrderItemVO item) throws Exception; + // 가용 재고 체크 + public boolean checkAvailableStock(OrderItemVO item, OrderType orderType) throws Exception; // 전체 주문 개수 조회 (페이징 계산) public int getTotalOrderCount(int businessId); diff --git a/stockMate/src/main/java/com/stockm8/service/OrderServiceImpl.java b/stockMate/src/main/java/com/stockm8/service/OrderServiceImpl.java index a32a36a..572922a 100644 --- a/stockMate/src/main/java/com/stockm8/service/OrderServiceImpl.java +++ b/stockMate/src/main/java/com/stockm8/service/OrderServiceImpl.java @@ -67,6 +67,9 @@ private void processOrderByType(OrderVO order) throws Exception { // 수주(출고) 처리 for (OrderItemVO item : order.getOrderItems()) { // 재고 감소 + if (!checkAvailableStock(item, OrderType.OUTBOUND)) { + throw new Exception("수주 처리 중 오류: 가용 재고가 부족합니다."); + } updateStockQuantity(item.getStockId(), item.getQuantity()); // 수주(출고)일 때는 예약수량을 양수로 처리해야 함 (+) } @@ -134,9 +137,14 @@ public List getOrderItemsByOrderId(int orderId) throws Exception { // 가용재고 체크 @Override - public boolean checkAvailableStock(OrderItemVO item) throws Exception { - StockVO stock = odao.getStockById(item.getStockId()); - return stock != null && stock.getAvailableStock() >= item.getQuantity(); + public boolean checkAvailableStock(OrderItemVO item, OrderType orderType) throws Exception { + // 발주(INBOUND)인 경우 체크하지 않음 + if (orderType == OrderType.INBOUND) { + return true; + } + // 수주(OUTBOUND)인 경우만 재고 체크 + StockVO stock = odao.getStockById(item.getStockId()); + return stock != null && stock.getAvailableStock() >= item.getQuantity(); } // 전체 주문 개수 조회 (페이징 계산) diff --git a/stockMate/src/main/webapp/WEB-INF/views/order/register.jsp b/stockMate/src/main/webapp/WEB-INF/views/order/register.jsp index fb86f42..d55e0ac 100644 --- a/stockMate/src/main/webapp/WEB-INF/views/order/register.jsp +++ b/stockMate/src/main/webapp/WEB-INF/views/order/register.jsp @@ -28,12 +28,12 @@
수주 - -
@@ -479,7 +479,7 @@ // 주문 수량 최대값 설정(가용 재고량으로 설정) const quantityInput = card.find('.order-quantity'); quantityInput.attr('max', stock.availableStock); // HTML input의 max 속성 설정 - validateQuantity(quantityInput); // 현재 입력된 수량의 유효성 검사 실행 + (quantityInput); // 현재 입력된 수량의 유효성 검사 실행 closeModal(); } @@ -488,6 +488,8 @@ function validateQuantity(input) { // 현재 수량 입력이 속한 카드 요소 찾기 const card = input.closest('.stock-info-card'); + // 주문 유형 가져오기 + const orderType = $('input[name="orderType"]:checked').val(); // 입력된 수량과 가용 재고를 정수로 변환 (값이 없으면 0으로 설정) const quantity = parseInt(input.val()) || 0; // 입력된 주문 수량 반환실패 시 null 대신 0 값 들어감 const available = parseInt(card.find('.available-stock').val()) || 0; // 가용 재고량 @@ -496,7 +498,7 @@ if (quantity < 1) { // 최소 주문 수량(1개) 미만인 경우 alert('주문 수량은 1 이상이어야 합니다.'); input.val(1); // 수량을 1로 재설정 - } else if (quantity > available) { // 가용 재고보다 많은 경우 + } else if (orderType === 'OUTBOUND' && quantity > available) { // 가용 재고보다 많은 경우 수주의 경우에만 실행 alert('주문 수량이 가용 재고를 초과할 수 없습니다.'); input.val(available); // 수량을 가용 재고량으로 재설정 } @@ -545,29 +547,42 @@ buttons.prop('disabled', buttons.length <= 1); } - // 폼 유효성 검사 function validateForm() { let isValid = true; let hasUnselectedItems = false; - // 주문 유형 체크(수주/ 발주) - if (!$('input[name="orderType"]:checked').val()){ - alert('주문 유형을 선택 해주세요.'); - return false; + // 주문 유형 체크(수주/발주) + const orderType = $('input[name="orderType"]:checked').val(); + if (!orderType) { + alert('주문 유형을 선택해주세요.'); + return false; } + // 각 주문 항목 검증 $('.stock-info-card:visible').each(function() { const card = $(this); + + // 재고 선택 여부 체크 if (!card.find('.stock-id').val()) { hasUnselectedItems = true; - return false; + return false; // each 루프 중단 } + // 수량 유효성 체크 const quantity = parseInt(card.find('.order-quantity').val()); + const available = parseInt(card.find('.available-stock').val()); + if (!quantity || quantity < 1) { alert('모든 주문의 수량은 1 이상이어야 합니다.'); isValid = false; - return false; + return false; // each 루프 중단 + } + + // 수주(OUTBOUND)인 경우에만 가용 재고 체크 + if (orderType === 'OUTBOUND' && quantity > available) { + alert('수주 수량이 가용 재고를 초과할 수 없습니다.'); + isValid = false; + return false; // each 루프 중단 } }); From edb0ccf9608da529b9b082b4f4712abd46f9ba0e Mon Sep 17 00:00:00 2001 From: yeeezin Date: Wed, 18 Dec 2024 14:38:15 +0900 Subject: [PATCH 2/2] update main --- .../com/stockm8/controller/UserController.java | 17 ++++++++++------- .../user/{findPassword.jsp => findpassword.jsp} | 15 ++++++++++----- .../webapp/WEB-INF/views/user/showpassword.jsp | 17 +++++++++++++++++ .../main/webapp/WEB-INF/views/user/signin.jsp | 2 +- 4 files changed, 38 insertions(+), 13 deletions(-) rename stockMate/src/main/webapp/WEB-INF/views/user/{findPassword.jsp => findpassword.jsp} (88%) create mode 100644 stockMate/src/main/webapp/WEB-INF/views/user/showpassword.jsp diff --git a/stockMate/src/main/java/com/stockm8/controller/UserController.java b/stockMate/src/main/java/com/stockm8/controller/UserController.java index fa2a6da..8f2c85b 100644 --- a/stockMate/src/main/java/com/stockm8/controller/UserController.java +++ b/stockMate/src/main/java/com/stockm8/controller/UserController.java @@ -43,6 +43,8 @@ public class UserController { @Autowired private UserService userService; + + // http://localhost:8088 (o) // http://localhost:8088/user/signup (o) // http://localhost:8088/user/signin (o) @@ -251,7 +253,7 @@ public String changepassword1GET(HttpSession session) { return "/user/changepassword1"; // 비밀번호 입력 페이지로 이동 } - + // 회원정보 수정 @RequestMapping(value = "/changepassword1", method = RequestMethod.POST) public String changepassword2POST(@RequestParam("password") String password, RedirectAttributes rttr, HttpSession session) { Long userId = (Long) session.getAttribute("userId"); @@ -281,7 +283,7 @@ public String changepassword2POST(@RequestParam("password") String password, Red } } - + // - GET @RequestMapping(value = "/changepassword2", method = RequestMethod.GET) public String changepassword2GET(@ModelAttribute("currentPassword") String currentPassword, Model model) { if (currentPassword == null || currentPassword.isEmpty()) { @@ -292,6 +294,7 @@ public String changepassword2GET(@ModelAttribute("currentPassword") String curre return "/user/changepassword2"; // JSP 페이지 반환 } + // - POST @RequestMapping(value = "/changepassword2", method = RequestMethod.POST) public void changePasswordPOST( @RequestParam("newPassword") String newPassword, @@ -420,13 +423,13 @@ protected PasswordAuthentication getPasswordAuthentication() { // 비밀번호 찾기 - GET - @RequestMapping(value = "/findPassword", method = RequestMethod.GET) + @RequestMapping(value = "/findpassword", method = RequestMethod.GET) public String findPasswordGet() { - return "/user/findPassword"; // 비밀번호 찾기 페이지로 이동 + return "/user/findpassword"; // 비밀번호 찾기 페이지로 이동 } // 비밀번호 찾기 - POST - @RequestMapping(value = "/findPassword", method = RequestMethod.POST) + @RequestMapping(value = "/findpassword", method = RequestMethod.POST) public String findPasswordPost(@RequestParam("email") String email, @RequestParam("name") String name, Model model) { @@ -443,13 +446,13 @@ public String findPasswordPost(@RequestParam("email") String email, // 비밀번호가 일치하지 않으면 오류 메시지 추가 logger.info("비밀번호 찾기 실패: 이메일 또는 이름이 일치하지 않음"); // 실패 로그 model.addAttribute("errorMessage", "이메일 또는 이름이 일치하지 않습니다."); - return "/user/findPassword"; // 비밀번호 찾기 페이지로 다시 이동 + return "/user/findpassword"; // 비밀번호 찾기 페이지로 다시 이동 } } catch (Exception e) { e.printStackTrace(); logger.error("비밀번호 찾기 처리 중 오류 발생", e); // 예외 로그 추가 model.addAttribute("errorMessage", "비밀번호 찾기 처리 중 오류가 발생했습니다."); - return "/user/findPassword"; // 오류 발생 시 비밀번호 찾기 페이지로 돌아감 + return "/user/findpassword"; // 오류 발생 시 비밀번호 찾기 페이지로 돌아감 } } diff --git a/stockMate/src/main/webapp/WEB-INF/views/user/findPassword.jsp b/stockMate/src/main/webapp/WEB-INF/views/user/findpassword.jsp similarity index 88% rename from stockMate/src/main/webapp/WEB-INF/views/user/findPassword.jsp rename to stockMate/src/main/webapp/WEB-INF/views/user/findpassword.jsp index 1eabd8c..d3060ad 100644 --- a/stockMate/src/main/webapp/WEB-INF/views/user/findPassword.jsp +++ b/stockMate/src/main/webapp/WEB-INF/views/user/findpassword.jsp @@ -1,4 +1,5 @@ <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> @@ -108,10 +109,10 @@

비밀번호 찾기

-
+ @@ -120,9 +121,13 @@
- + diff --git a/stockMate/src/main/webapp/WEB-INF/views/user/showpassword.jsp b/stockMate/src/main/webapp/WEB-INF/views/user/showpassword.jsp new file mode 100644 index 0000000..2955499 --- /dev/null +++ b/stockMate/src/main/webapp/WEB-INF/views/user/showpassword.jsp @@ -0,0 +1,17 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> + + + + + 비밀번호 확인 + + + + + diff --git a/stockMate/src/main/webapp/WEB-INF/views/user/signin.jsp b/stockMate/src/main/webapp/WEB-INF/views/user/signin.jsp index abf1c50..d3b5c52 100644 --- a/stockMate/src/main/webapp/WEB-INF/views/user/signin.jsp +++ b/stockMate/src/main/webapp/WEB-INF/views/user/signin.jsp @@ -115,7 +115,7 @@