|
|
@@ -3,6 +3,8 @@ package com.style24.front.biz.service;
|
|
|
import com.style24.core.support.env.TscConstants;
|
|
|
import com.style24.core.support.session.TscSession;
|
|
|
import com.style24.front.biz.dao.TsfCartDao;
|
|
|
+import com.style24.front.support.env.TsfConstants;
|
|
|
+import com.style24.front.support.security.session.TsfSession;
|
|
|
import com.style24.persistence.domain.Cart;
|
|
|
import com.style24.persistence.domain.Goods;
|
|
|
import com.style24.persistence.domain.GoodsStock;
|
|
|
@@ -12,7 +14,6 @@ import org.springframework.stereotype.Service;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
import java.util.Collection;
|
|
|
-import java.util.List;
|
|
|
|
|
|
/**
|
|
|
* 장바구니 Service
|
|
|
@@ -40,106 +41,152 @@ public class TsfCartService {
|
|
|
public void saveCartInfo(Collection<Cart> params) {
|
|
|
Cart cart = new Cart();
|
|
|
// JSESSION_ID 저장
|
|
|
- cart.setJsessionId(TscSession.getSessionId());
|
|
|
+
|
|
|
|
|
|
// 로그인 유무 확인 (로그인이 되어 있지 않으면 regNo 를 0으로 장바구니에 저장한다.)
|
|
|
+ // TODO 로그인여부체크
|
|
|
+
|
|
|
+ // 장바구니 상품 및 재고 가능 여부 체크
|
|
|
+ for(Cart param : params) {
|
|
|
+ cart.setJsessionId(TscSession.getSessionId());
|
|
|
+ cart.setRegNo(0);
|
|
|
+ cart.setUpdNo(0);
|
|
|
+
|
|
|
+ // 상품 마스터 정보 확인
|
|
|
+ Goods goods = new Goods();
|
|
|
+ goods.setGoodsCd(param.getGoodsCd());
|
|
|
+ goods = goodsService.getGoodsInfo(goods);
|
|
|
+ if (goods == null) {
|
|
|
+ throw new IllegalArgumentException("상품 정보가 존재하지 않습니다.");
|
|
|
+ }
|
|
|
+
|
|
|
+ cart.setGoodsCd(param.getGoodsCd());
|
|
|
+ int goodsCartCnt = cartDao.getHasGoodsCartCnt(param);
|
|
|
+ if(param.getGoodsQty() + goodsCartCnt > goods.getDayMaxOrdQty()) {
|
|
|
+ throw new IllegalArgumentException("1일 구매한도 수량이 초과되었습니다.");
|
|
|
+ }
|
|
|
+
|
|
|
+ // 상품 재고 확인
|
|
|
+ GoodsStock checkParam = new GoodsStock();
|
|
|
+ checkParam.setGoodsCd(param.getGoodsCd());
|
|
|
+ checkParam.setItemCd(param.getItemCd());
|
|
|
+ checkParam.setOptCd(param.getOptCd());
|
|
|
+ checkParam.setGoodsQty(param.getGoodsQty());
|
|
|
+ checkParam.setGoodsType(param.getGoodsType());
|
|
|
+ String stockResult = goodsService.getCheckStock(checkParam);
|
|
|
+
|
|
|
+ if(!"SUCCESS".equals(stockResult)) {
|
|
|
+ throw new IllegalArgumentException(stockResult);
|
|
|
+ }
|
|
|
+
|
|
|
+ cart = param;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 장바구니 정보 수정
|
|
|
+ if(cart.getGoodsType().equals(TscConstants.GOODS_TYPE.SET.value())) {
|
|
|
+ // 세트상품일 경우
|
|
|
+ saveSetTypeCartInfo(params);
|
|
|
+ } else {
|
|
|
+ // 세트 상품이 아닐 경우
|
|
|
+ saveNormalDealCartInfo(params.iterator().next());
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ @Transactional("shopTxnManager")
|
|
|
+ public void saveSetTypeCartInfo(Collection<Cart> params) {
|
|
|
+ Cart cart = new Cart();
|
|
|
+ StringBuilder sb = new StringBuilder();
|
|
|
+
|
|
|
+ // TODO 로그인 정보 세팅
|
|
|
cart.setRegNo(0);
|
|
|
+ cart.setCustNo(0);
|
|
|
cart.setUpdNo(0);
|
|
|
|
|
|
- // 상품 정보 확인
|
|
|
- /*Goods goods = new Goods(); // 상품 마스터 정보
|
|
|
- goods.setGoodsCd(param.getGoodsCd());
|
|
|
- goods = goodsService.getGoodsInfo(goods);
|
|
|
- if(goods == null) {
|
|
|
- throw new IllegalArgumentException("상품 정보가 존재하지 않습니다.");
|
|
|
+ for(Cart param : params) {
|
|
|
+ sb.append("UNION ALL SELECT '").append(param.getGoodsCd()).append("' AS GOODS_CD, '")
|
|
|
+ .append(param.getItemCd()).append("' AS ITEM_CD, '")
|
|
|
+ .append(param.getOptCd()).append("' AS OPT_CD\n");
|
|
|
}
|
|
|
|
|
|
- cart.setGoodsCd(goods.getGoodsCd());
|
|
|
- cart.setProductNo(goods.getProductNo());
|
|
|
- cart.setProductCode(goods.getProductCode());*/
|
|
|
-
|
|
|
- // 재고 정보 확인
|
|
|
-
|
|
|
-
|
|
|
- // 재고 정보 확인
|
|
|
- /*if(TscConstants.GOODS_TYPE.SET.value().equals(goods.getGoodsType())) { // 장바구니 상품이 세트상품이라면
|
|
|
- if(param.getCompsList() != null && param.getCompsList().size() > 0) {
|
|
|
- for(int i = 0 ; i < param.getCompsList().size() ; i++) {
|
|
|
- Cart tCart = param.getCompsList().get(i);
|
|
|
- // 구성상품 구성정보
|
|
|
- Goods compsGoodsInfo = new Goods();
|
|
|
- compsGoodsInfo.setGoodsCd(param.getGoodsCd());
|
|
|
- compsGoodsInfo.setCompsGoodsCd(tCart.getCompsGoodsCd());
|
|
|
- compsGoodsInfo.setGoodsType(goods.getGoodsType());
|
|
|
- compsGoodsInfo = goodsService.getGoodsCompsInfo(compsGoodsInfo);
|
|
|
-
|
|
|
- // 구성상품 재고 정보
|
|
|
- GoodsStock stock = new GoodsStock();
|
|
|
- stock.setGoodsCd(compsGoodsInfo.getCompsGoodsCd());
|
|
|
- stock.setOptCd(tCart.getOptCd());
|
|
|
- stock = goodsService.getGoodsStockInfo(stock);
|
|
|
-
|
|
|
- if("Y".equals(stock.getSoldoutYn()) || stock.getCurrStockQty() < 1) {
|
|
|
- throw new IllegalArgumentException("세트 구성 상품 중 품절 상품이 있습니다.");
|
|
|
- }
|
|
|
-
|
|
|
- // 세트상품 요청 수량 * 구성상품 필요 수량이 해당 구성수량의 재고보다 많으면
|
|
|
- if(param.getGoodsQty() * compsGoodsInfo.getQty() > stock.getCurrStockQty()) {
|
|
|
- throw new IllegalArgumentException("요청하신 수량만큼의 재고가 존재하지 않습니다.");
|
|
|
- }
|
|
|
-
|
|
|
- tCart.setItemCd(stock.getGoodsCd());
|
|
|
- tCart.setOptCd(stock.getOptCd());
|
|
|
- tCart.setOptCd1(stock.getOptCd1());
|
|
|
- tCart.setOptCd2(stock.getOptCd2());
|
|
|
- tCart.setSkuModelNo(stock.getSkuModelNo());
|
|
|
- tCart.setProductNo(compsGoodsInfo.getProductNo());
|
|
|
- tCart.setProductCode(compsGoodsInfo.getProductCode());
|
|
|
- tCart.setItemQty(compsGoodsInfo.getQty());
|
|
|
- }
|
|
|
+ // cart 정보 세팅
|
|
|
+ cart.setJsessionId(TscSession.getSessionId());
|
|
|
+ cart.setContentsLoc(params.iterator().next().getContentsLoc());
|
|
|
+ cart.setAfLinkCd(params.iterator().next().getAfLinkCd());
|
|
|
+ cart.setIthrCd(params.iterator().next().getIthrCd());
|
|
|
+ cart.setPlanDtlSq(params.iterator().next().getPlanDtlSq());
|
|
|
+ cart.setGoodsCd(params.iterator().next().getGoodsCd());
|
|
|
+ cart.setGoodsQty(params.iterator().next().getGoodsQty());
|
|
|
+ cart.setGoodsType(params.iterator().next().getGoodsType());
|
|
|
+ cart.setItemCdSql(sb.toString());
|
|
|
+
|
|
|
+ if("C".equals(params.iterator().next().getCartGb())) {
|
|
|
+ cart.setCartGb(TscConstants.CartGb.CART.value());
|
|
|
+ } else if("O".equals(params.iterator().next().getCartGb())) {
|
|
|
+ if("P".equals(TsfSession.getFrontGb())) {
|
|
|
+ cart.setCartGb(TscConstants.CartGb.PC_ORDER.value());
|
|
|
} else {
|
|
|
- throw new IllegalArgumentException("세트 상품 정보가 존재하지 않습니다.");
|
|
|
- }
|
|
|
- } else { // 딜상품이거나 일반 상품일 경우
|
|
|
-
|
|
|
- }*/
|
|
|
-
|
|
|
- // 현재 장바구니에 존재하는지 확인 후 정보 저장
|
|
|
- /*if(param.getCompsList() != null && param.getCompsList().size() > 0) { // 세트상품
|
|
|
- int haveCartSq = 0, ifHaveSq = 0;
|
|
|
- for(int i = 0 ; i < param.getCompsList().size() ; i++) { // 세트상품 전체 옵션이 같은지 확인
|
|
|
- int cnt = 0; // 맞는 수량 체크
|
|
|
- List<Cart> goodsCartList = cartDao.getHasGoodsCartList(param); // 해당 세트 상품이 있는 cart_sq 검색
|
|
|
-
|
|
|
- // cart_sq마다 같은 옵션의 세트상품이 있는지 검색
|
|
|
- for (Cart value : goodsCartList) {
|
|
|
- Cart searchParam = new Cart();
|
|
|
- searchParam.setCartSq(value.getCartSq());
|
|
|
- searchParam.setItemCd(param.getCompsList().get(i).getCompsGoodsCd());
|
|
|
- searchParam.setOptCd(param.getCompsList().get(i).getOptCd());
|
|
|
-
|
|
|
- if (cartDao.getCartDetailCnt(searchParam) > 0) {
|
|
|
- cnt++;
|
|
|
- ifHaveSq = searchParam.getCartSq();
|
|
|
- } else {
|
|
|
- continue;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- if(param.getCompsList().size() == cnt) {
|
|
|
- haveCartSq = ifHaveSq;
|
|
|
- }
|
|
|
+ cart.setCartGb(TscConstants.CartGb.MOB_ORDER.value());
|
|
|
}
|
|
|
+ } else {
|
|
|
+ cart.setCartGb(TscConstants.CartGb.CREATE_ORDER.value());
|
|
|
+ }
|
|
|
|
|
|
- if(haveCartSq != 0) { // 세트상품 전체 옵션이 같은 장바구니가 있다면
|
|
|
- // update (추가)
|
|
|
- Cart updateInfo = new Cart();
|
|
|
+ // 같은 장바구니 상품 확인
|
|
|
+ Collection<Integer> cartSqList = cartDao.selectHasSetItemCartList(cart);
|
|
|
|
|
|
+ if(cartSqList != null && cartSqList.size() > 0) { // 장바구니 기존재
|
|
|
+ if(cartSqList.size() > 1) { // 장바구니 조회 결과 이상시 insert or select 수정 필요
|
|
|
+ throw new IllegalArgumentException("장바구니 조회에 실패하였습니다. 관리자에게 문의해주세요.");
|
|
|
} else {
|
|
|
- // insert (추가)
|
|
|
+ cart.setCartSq(cartSqList.iterator().next());
|
|
|
+ cartDao.updateCartInfo(cart);
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ cartDao.insertCartInfo(cart); // 장바구니 마스터 정보 저장
|
|
|
+
|
|
|
+ for(Cart param : params) {
|
|
|
+ param.setCartSq(cart.getCartSq());
|
|
|
+ param.setRegNo(cart.getRegNo());
|
|
|
+ param.setCustNo(cart.getCustNo());
|
|
|
+ param.setUpdNo(cart.getUpdNo());
|
|
|
+ cartDao.insertCartDetailInfo(param); // 장바구니 상세 저장
|
|
|
}
|
|
|
- } else { // 세트상품이 아닐 경우
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
- }*/
|
|
|
+ @Transactional("shopTxnManager")
|
|
|
+ public void saveNormalDealCartInfo(Cart param) {
|
|
|
+ // TODO 로그인 정보 세팅
|
|
|
+ param.setJsessionId(TscSession.getSessionId());
|
|
|
+ param.setRegNo(0);
|
|
|
+ param.setCustNo(0);
|
|
|
+ param.setUpdNo(0);
|
|
|
+
|
|
|
+ if("C".equals(param.getCartGb())) {
|
|
|
+ param.setCartGb(TscConstants.CartGb.CART.value());
|
|
|
+ } else if("O".equals(param.getCartGb())) {
|
|
|
+ if("P".equals(TsfSession.getFrontGb())) {
|
|
|
+ param.setCartGb(TscConstants.CartGb.PC_ORDER.value());
|
|
|
+ } else {
|
|
|
+ param.setCartGb(TscConstants.CartGb.MOB_ORDER.value());
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ param.setCartGb(TscConstants.CartGb.CREATE_ORDER.value());
|
|
|
+ }
|
|
|
+
|
|
|
+ // 같은 장바구니 상품 확인
|
|
|
+ Collection<Integer> cartSqList = cartDao.selectHasNormalDealItemCartList(param);
|
|
|
+
|
|
|
+ if(cartSqList != null && cartSqList.size() > 0) { // 장바구니 기존재
|
|
|
+ if(cartSqList.size() > 1) { // 장바구니 조회 결과 이상시 insert or select 수정 필요
|
|
|
+ throw new IllegalArgumentException("장바구니 조회에 실패하였습니다. 관리자에게 문의해주세요.");
|
|
|
+ } else {
|
|
|
+ param.setCartSq(cartSqList.iterator().next());
|
|
|
+ cartDao.updateCartInfo(param);
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ cartDao.insertCartInfo(param); // 장바구니 마스터 정보 저장
|
|
|
+ cartDao.insertCartDetailInfo(param); // 장바구니 상세 저장
|
|
|
+ }
|
|
|
}
|
|
|
}
|