스프링 쇼핑몰 만들기 #25. 배송 완료시 상품 수량 감소
상품이 배송중이라면, 또는 배송이 완료되었다면 상품의 전체 수량을 그만큼 줄여야합니다. 이 게시물에 있는건 단순히 기능적으로만 구현한것이고, 실제로는 이렇게 작업하지 않습니다.
먼저 상품 테이블(tbl_goods)의 상품 수량(gdsStock)을 감소시키는 쿼리를 작성합니다.
매퍼에 쿼리를 추가합니다.
<!-- 상품 수량 조절 -->
<update id="changeStock">
update tbl_goods
set gdsStock = gdsStock - #{gdsStock}
where gdsNum = #{gdsNum}
</update>
DAO와 Service를 작성합니다.
컨트롤러는 상태 변경(배송 중, 배송 완료)을 그대로 사용합니다.하지만 현재 메서드에는 상품 수량을 변경할 수 있는 상품 번호(gdsNum)와 상품 수량(gdsStock)이 없기 때문에, 뷰 단계에있는 jsp를 살펴봐야겠습니다.
폼(form)안에도 마땅히 데이터를 넣을만하지 않습니다. 여기서, 폼에 주문 아이디(orderId)가 있으므로
상세 주문 테이블(tbl_order_details)를 사용하면 될 것 같습니다.
필요한 값을 불러올 수 있도록 쿼리를 작성합니다.
매퍼에 쿼리를 추가했는데(주황색), 자세히보니 특정 주문 목록(orderView)를 재사용하면 될 것 같습니다.
많은 양의 데이터를 가져오기 때문에 새로 작성한 쿼리보다 비효율적이겠지만, 이번엔 기존에 있는 쿼리를 재사용하는 방법으로 진행하겠습니다.
메서드에 코드를 추가합니다.
List<OrderListVO> orderView = adminService.orderView(order);
GoodsVO goods = new GoodsVO();
for(OrderListVO i : orderView) {
goods.setGdsNum(i.getGdsNum());
goods.setGdsStock(i.getCartStock());
adminService.changeStock(goods);
}
특정 주문 목록(orderView)을 그대로 사용했으며 GoodsVO형태의 변수 goods를 새로 생성했습니다.
그리고 특정 주문 목록의 갯수만큼 반복하는 for문을 이용하여, 주문의 갯수만큼 changStock을 실행합니다.
현재 상품 갯수는 2216개입니다.
상품 5개가 있는 주문을 완료시키면
배송 완료로 변경됨과 동시에 상품 수량도 같이 줄어듭니다.
/view/shop/view.jsp에서 조건문을 추가합니다.
상품 수량(gdsStock)이 0이 아니면 평소대로 상품 수량과 주문 버튼을 그대로 출력하고, 상품 수량이 0이라면 수량이 부족하다는 메시지를 출력합니다.
상품 수량이 0개가되면 미리 입력했던 메시지를 출력합니다.
저 혹시 나중에 상품 판매제품중에 1년정도 지난건 자동삭제되는 배치 프로그램 같은 예제도 만들어주실수 있나요? 앞단보다 거의 자바쪽 개발이라 너무 궁금합니다.
답글삭제안녕하세요? 방문해주셔서 감사합니다.
삭제해당 기능을 구현하기 전에, 각 기능에 대응될 컬럼이 필요합니다. (여기서는 등록날짜와 삭제 여부)
구현 방법은.. 특정 기간마다 실행되는 '스케쥴러'를 이용하여
delete문을 실행하도록 하되, 조건을 '등록날짜+365일' 로 해두시면 됩니다.
여기서 스케줄러는 DB의 스케줄러와 백단어(대표적으로 JAVA) 스케줄러가 있으며
둘중 아무거나 사용하셔도 무관합니다
그럼 그거 말고 회원에 대하여 비밀번호변경 안한지 1년이 된 회원들은 자동으로 비밀번호를 변경하는 문구가 뜬다던지 그런 예시를 만들어주실수 있나요?
삭제그후에 차츰 접속 안한 회원들에 대하여 휴면계정으로 변환하거나 그런 기능도 해보려구요~
안녕하세요? 방문해주셔서 감사합니다.
삭제흔히 볼 수 있는 1달마다 비밀번호 변경화면으로 넘어가는거라면...
1. 회원 테이블에 '최근 비밀번호 수정 날짜' 컬럼을 추가 한 뒤
2. 로그인할때마다 최근 비밀번호 수정 날짜와 오늘날짜를 비교하여
3. 특정 기간 이상 차이가 난다면, 컨트롤러에서 비밀번호 변경 화면의 URL로 리턴
휴면계정 처리는
1. 회원 테이블에 '마지막 접속 날짜', '휴면 계정 여부(Y/N)' 컬럼 추가
2. 스케줄러를 이용하여, 마지막 접속 날짜가 특정 기간이 지나면, 휴면 계정 여부 컬럼을 N 으로 변경
3. 휴면 계정 여부 컬럼의 값이 N이라면, 휴면 계정 해제 화면의 URL로 리턴
이런 방식으로 처리하시면 됩니다.
비밀번호 변경 여부는 지금(?) 진행중인 게시판의 회원쪽에서 다룰 예정이긴한데..
언제가될지 모르겠군요-_-;
오 감사합니다. 이런식으로 구현해볼게요.
삭제나중에 배치도 꼭 부탁드려요 ㅠㅠ
안녕하세요. 게시글을 잘 보면서 학습하고 있습니다.
답글삭제한가지 기능상 힌트를 얻고 싶은데요.
현재 기능을 실행하면 배송중 버튼을 누르거나 배송완료 버튼을 누르면
어떠한 버튼을 눌러도 수량은 -1 이 됩니다.
배송을 생각해보면
배송주문-> 배송중 -> 배송완료 이렇게 3단계에 걸치게 되는데
관리자 측면에서 생각해보면 배송주문단계에서 배송중단계로 넘어갈때
배송중 버튼을 누르면 수량이 -1 되고, 다시 배송중에서 배송완료 단계로 넘어갈때 다시 -1 이 되므로
총 -2 의 수량이 감소가 되는것이 아닌가해서
이 부분을 배송중 버튼을 눌렀을 경우에만 수량이 -1이 되도록 하고 싶은데 힌트라도 좀 알려주실 수 있을까요?
안녕하세요 저도 배송중 배송완료 2번이나 수량이 줄어드는 부분을 수정하고 싶어서 댓글을 달아봅니다.
답글삭제배송중 일때만 수량이 줄어들수 있는 방법으로 뭐가 있을까요?
안녕하세요? 방문해주셔서 감사합니다.
삭제아마 저게 예전에 작업한걸 그대로 올린게 아니기도하고.. 좀 가물가물하기도한데-_-;
먼저, 가장 위에있는 상품 갯수를 감소키시는 쿼리를 아예 사용하지 않고
그냥 완료 처리하는 부분만 작업하시면 되겠습니다.
슬슬 초안글 개시하면서.. 하나씩 다시 만들도록..하겠..습..니다..ㅠ
혹시 해결하셨나요 ㅠㅠ
삭제