Explorar o código

Merge branch 'develop' into bin2107

bin2107 %!s(int64=4) %!d(string=hai) anos
pai
achega
662d0a3456

+ 12 - 1
src/main/java/com/style24/front/biz/dao/TsfGoodsDao.java

@@ -22,6 +22,7 @@ import com.style24.persistence.domain.Notice;
 import com.style24.persistence.domain.ReinboundInform;
 import com.style24.persistence.domain.SizeInfo;
 import com.style24.persistence.domain.Tmtb;
+import com.style24.persistence.domain.eigene.Item;
 import com.style24.persistence.domain.searchengine.SearchEngine;
 
 /**
@@ -257,7 +258,7 @@ public interface TsfGoodsDao {
 	 * @date 2021. 6. 10
 	 */
 	Collection<Tmtb> getTmtbSqList(Goods goods);
-	
+
 	/**
 	 * 상품 다다익선 목록
 	 *
@@ -503,4 +504,14 @@ public interface TsfGoodsDao {
 	 * @date 2021. 07. 06
 	 */
 	Goods getNewCustOrdCanYnInfo(Goods param);
+
+	/**
+	 * 상품추가정보 목록
+	 * @param goods - 상품정보
+	 * @return
+	 * @author gagamel
+	 * @date 2021. 7. 7
+	 */
+	Collection<Item> getGoodsAddInfoList(Goods goods);
+
 }

+ 34 - 3
src/main/java/com/style24/front/biz/thirdparty/EigeneaiApi.java

@@ -15,10 +15,13 @@ import org.springframework.stereotype.Component;
 import org.springframework.web.client.RestTemplate;
 
 import com.google.gson.Gson;
+import com.style24.front.biz.dao.TsfGoodsDao;
+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.eigene.Eigeneai;
-import com.style24.persistence.domain.eigene.Eigeneai.Item;
 import com.style24.persistence.domain.eigene.Eigeneai.Result;
+import com.style24.persistence.domain.eigene.Item;
 
 import lombok.extern.slf4j.Slf4j;
 
@@ -39,6 +42,9 @@ public class EigeneaiApi {
 	@Autowired
 	private RestTemplate restTemplate;
 
+	@Autowired
+	private TsfGoodsDao goodsDao;
+
 	@PostConstruct
 	public void init() {
 		log.debug("\n\n---- Eigene.ai initialization started ----");
@@ -240,14 +246,39 @@ public class EigeneaiApi {
 	 * @since 2021. 6. 30
 	 */
 	public Collection<Item> getRealtimeViewGoodsList(int size) {
+		Collection<Item> dataList = new ArrayList<Item>();
+
 		String requestUrl = rtsApiUrl + "/stream?cuid=" + cuid + "&size=" + size + "&type=view";
 
 		Eigeneai eigeneai = this.getEigeneaiInfo(requestUrl);
 		if (eigeneai.getItems() != null && !eigeneai.getItems().isEmpty()) {
-			return eigeneai.getItems();
+			Collection<Item> items = eigeneai.getItems();
+			StringBuilder sql = new StringBuilder();
+			int idx = 1;
+			for (Item item : items) {
+				if (idx++ > 1) {
+					sql.append("UNION ALL");
+				}
+				sql.append(" SELECT ").append(item.getCount()).append(" AS COUNT");
+				sql.append(" , '").append(item.getItemId()).append("' AS ITEM_ID");
+				sql.append(" , '").append(item.getImageUrl()).append("' AS IMAGE_URL");
+				sql.append(" , '").append(item.getItemName()).append("' AS ITEM_NAME");
+				sql.append(" , '").append(item.getItemUrl()).append("' AS ITEM_URL");
+				sql.append(" , '").append(item.getCategoryId()).append("' AS CATEGORY_ID");
+				sql.append(" , '").append(item.getBrandId()).append("' AS BRAND_ID");
+				sql.append(" , ").append(idx).append(" AS RK FROM DUAL\n");
+			}
+			Goods goods = new Goods();
+			goods.setSql(sql.toString());
+			if (TsfSession.isLogin()) {
+				goods.setCustNo(TsfSession.getInfo().getCustNo());
+			}
+			goods.setFrontGb(TsfSession.getFrontGb());
+			goods.setCustGb(TsfSession.getCustGb());
+			dataList.addAll(goodsDao.getGoodsAddInfoList(goods));
 		}
 
-		return new ArrayList<Item>();
+		return dataList;
 	}
 
 	/**

+ 30 - 28
src/main/java/com/style24/front/biz/web/TsfCartController.java

@@ -9,8 +9,6 @@ import java.util.Comparator;
 import java.util.Date;
 import java.util.List;
 
-import com.style24.front.biz.thirdparty.EigeneaiApi;
-import com.style24.persistence.domain.eigene.Eigeneai;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.core.env.Environment;
 import org.springframework.stereotype.Controller;
@@ -23,7 +21,6 @@ import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.ResponseBody;
 import org.springframework.web.servlet.ModelAndView;
 
-import com.gagaframework.web.parameter.GagaMap;
 import com.style24.core.biz.service.TscKcpService;
 import com.style24.core.biz.service.TscOrderService;
 import com.style24.core.support.env.TscConstants;
@@ -32,6 +29,7 @@ import com.style24.front.biz.service.TsfCartService;
 import com.style24.front.biz.service.TsfCouponService;
 import com.style24.front.biz.service.TsfGoodsService;
 import com.style24.front.biz.service.TsfOrderService;
+import com.style24.front.biz.thirdparty.EigeneaiApi;
 import com.style24.front.support.controller.TsfBaseController;
 import com.style24.front.support.security.session.TsfSession;
 import com.style24.persistence.domain.Cart;
@@ -39,9 +37,13 @@ import com.style24.persistence.domain.Coupon;
 import com.style24.persistence.domain.Goods;
 import com.style24.persistence.domain.Login;
 import com.style24.persistence.domain.Order;
+import com.style24.persistence.domain.eigene.Eigeneai;
+import com.style24.persistence.domain.eigene.Item;
 
 import lombok.extern.slf4j.Slf4j;
 
+import com.gagaframework.web.parameter.GagaMap;
+
 /**
  * 장바구니 Controller
  *
@@ -90,7 +92,7 @@ public class TsfCartController extends TsfBaseController {
 	public ModelAndView cartListForm() {
 		ModelAndView mav = new ModelAndView();
 		Cart cart = new Cart();
-		if(TsfSession.isLogin()) {
+		if (TsfSession.isLogin()) {
 			cart.setCustNo(TsfSession.getInfo().getCustNo());
 		} else {
 			cart.setCustNo(0);
@@ -98,14 +100,14 @@ public class TsfCartController extends TsfBaseController {
 		}
 
 		Collection<Cart> cartList = cartService.getAllCartList(cart);
-		if(cartList != null && cartList.size() > 0) {
+		if (cartList != null && cartList.size() > 0) {
 			// 장바구니 상품이 있을 경우
 			Collection<Eigeneai.Result> itemList = eigeneaiApi.getRelatedGoodsList(cartList, 20);
 			mav.addObject("recomGoodsList", itemList);
 			mav.addObject("cartSize", cartList.size());
 		} else {
 			// 장바구니 상품이 없을 경우
-			Collection<Eigeneai.Item> itemList = eigeneaiApi.getRealtimeViewGoodsList(20);
+			Collection<Item> itemList = eigeneaiApi.getRealtimeViewGoodsList(20);
 			mav.addObject("recomGoodsList", itemList);
 			mav.addObject("cartSize", 0);
 		}
@@ -139,7 +141,7 @@ public class TsfCartController extends TsfBaseController {
 	public GagaMap createCart(@RequestBody Collection<Cart> params) {
 		GagaMap result = cartService.saveCartInfo(params);
 		String cartGb = String.valueOf(result.get("cartGb"));
-		if("C".equals(cartGb) || cartGb.equals(TscConstants.CartGb.CART.value())) {
+		if ("C".equals(cartGb) || cartGb.equals(TscConstants.CartGb.CART.value())) {
 			cartService.deleteOldCart();
 		}
 
@@ -153,20 +155,20 @@ public class TsfCartController extends TsfBaseController {
 		int shotCanYn = coreOrderService.getDailyDeliveryCheck(param);
 
 		// 10시 이전에만 총알 배송 가능 여부 체크
-		if(shotCanYn == 1) {
-			SimpleDateFormat format = new SimpleDateFormat ( "MM/dd");
+		if (shotCanYn == 1) {
+			SimpleDateFormat format = new SimpleDateFormat("MM/dd");
 			Date time = new Date();
 
 			param.setShotCanYn("Y");
 			param.setShotDelvDt(format.format(time));
 		} else {
-			SimpleDateFormat format = new SimpleDateFormat ( "MM/dd");
+			SimpleDateFormat format = new SimpleDateFormat("MM/dd");
 			Date time = new Date();
 			param.setShotCanYn("N");
 			param.setShotDelvDt(format.format(time));
 		}
 
-		if(param.getShotDelvUseYn() == null) {
+		if (param.getShotDelvUseYn() == null) {
 			param.setShotDelvUseYn(param.getShotCanYn());
 		}
 
@@ -210,21 +212,21 @@ public class TsfCartController extends TsfBaseController {
 
 		// 수량 및 금액 다다익선 최소 조건 조회
 		DecimalFormat format = new DecimalFormat("###,###");
-		List<Order> tmtbSalesValueList = (ArrayList<Order>) cartService.selectTmtbSalesValueList(param);
+		List<Order> tmtbSalesValueList = (ArrayList<Order>)cartService.selectTmtbSalesValueList(param);
 		// 조건 멘트 적용
 		List<StringBuilder> tmtbDcDescList = new ArrayList<StringBuilder>();
-		for(Order tmtbDcValue : tmtbSalesValueList) {
-			if(!StringUtils.isEmpty(tmtbDcValue.getDefaultYn()) && "Y".equals(tmtbDcValue.getDefaultYn())) {
+		for (Order tmtbDcValue : tmtbSalesValueList) {
+			if (!StringUtils.isEmpty(tmtbDcValue.getDefaultYn()) && "Y".equals(tmtbDcValue.getDefaultYn())) {
 				StringBuilder tmtbDcDesc = new StringBuilder();
-				if(TscConstants.ApplyGb.QTY.value().equals(tmtbDcValue.getSectionGb())) {
+				if (TscConstants.ApplyGb.QTY.value().equals(tmtbDcValue.getSectionGb())) {
 					tmtbDcDesc.append(tmtbDcValue.getSectionVal()).append("개 이상 구매시 ");
 				} else if (TscConstants.ApplyGb.AMT.value().equals(tmtbDcValue.getSectionGb())) {
 					tmtbDcDesc.append(format.format(tmtbDcValue.getSectionVal())).append("원 이상 구매시 ");
 				}
 
-				if(TscConstants.DcWay.AMT.value().equals(tmtbDcValue.getDcWay())) {
+				if (TscConstants.DcWay.AMT.value().equals(tmtbDcValue.getDcWay())) {
 					tmtbDcDesc.append(format.format(tmtbDcValue.getDcVal())).append("원 할인");
-				} else if(TscConstants.DcWay.RATE.value().equals(tmtbDcValue.getDcWay())) {
+				} else if (TscConstants.DcWay.RATE.value().equals(tmtbDcValue.getDcWay())) {
 					tmtbDcDesc.append(tmtbDcValue.getDcVal()).append("% 할인");
 				}
 
@@ -254,7 +256,7 @@ public class TsfCartController extends TsfBaseController {
 	@PostMapping("/login/info")
 	public Login selectLoginInfo(Order param) {
 		Login result = new Login();
-		if(TsfSession.isLogin()) {
+		if (TsfSession.isLogin()) {
 			result = TsfSession.getInfo();
 		} else {
 			result.setCustNo(0);
@@ -343,7 +345,7 @@ public class TsfCartController extends TsfBaseController {
 
 		result = cartService.updateCartOption(param);
 
-		if("SUCCESS".equals(result.get("status"))) {
+		if ("SUCCESS".equals(result.get("status"))) {
 			result.put("message", message.getMessage("SUCC_0009"));
 		}
 
@@ -392,7 +394,7 @@ public class TsfCartController extends TsfBaseController {
 		cart.setImgPath1(env.getProperty("upload.goods.view"));
 
 		// 현재 주문 가능 수량순으로 정렬
-		Collections.sort((ArrayList<Order>) cart.getDelvAllCartList(), new Comparator<Order>() {
+		Collections.sort((ArrayList<Order>)cart.getDelvAllCartList(), new Comparator<Order>() {
 			@Override
 			public int compare(Order c1, Order c2) {
 				return c1.getOrdCanQty() - c2.getOrdCanQty();
@@ -401,28 +403,28 @@ public class TsfCartController extends TsfBaseController {
 		});
 
 		List<Order> cartList = new ArrayList<>();
-		for(Order oneData : cart.getDelvAllCartList()) {
-			if(oneData.getOrdCanQty() < 6 && oneData.getOrdCanQty() > 0) {
+		for (Order oneData : cart.getDelvAllCartList()) {
+			if (oneData.getOrdCanQty() < 6 && oneData.getOrdCanQty() > 0) {
 				cartList.add(oneData);
 			}
 		}
 
 		// 장바구니 등록 최신순 정렬
-		Collections.sort((ArrayList<Order>) cart.getDelvAllCartList(), new Comparator<Order>() {
+		Collections.sort((ArrayList<Order>)cart.getDelvAllCartList(), new Comparator<Order>() {
 			@Override
 			public int compare(Order c1, Order c2) {
 				return c2.getCartSq() - c1.getCartSq();	//역순 정렬
 			}
 		});
 
-		for(Order oneData : cart.getDelvAllCartList()) {
-			if(oneData.getOrdCanQty() > 5) {
+		for (Order oneData : cart.getDelvAllCartList()) {
+			if (oneData.getOrdCanQty() > 5) {
 				cartList.add(oneData);
 			}
 		}
 
-		for(Order oneData : cart.getDelvAllCartList()) {
-			if(oneData.getOrdCanQty() < 1) {
+		for (Order oneData : cart.getDelvAllCartList()) {
+			if (oneData.getOrdCanQty() < 1) {
 				cartList.add(oneData);
 			}
 		}
@@ -454,7 +456,7 @@ public class TsfCartController extends TsfBaseController {
 	public Goods selectTmtbSalesGoodsOptCd(@RequestBody Goods param) {
 		Collection<Goods> goodsList = cartService.selectTmtbSalesGoodsOptCd(param);
 		Goods result = new Goods();
-		for(Goods goods : goodsList) {
+		for (Goods goods : goodsList) {
 			result = goods;		// goodsList는 상품정보 1라인만 조회됨
 		}
 

+ 2 - 0
src/main/java/com/style24/persistence/domain/Goods.java

@@ -224,4 +224,6 @@ public class Goods extends TscBaseDomain {
 	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
 	private String[] benefitArr;		// 상품혜택
 
+	private String sql;
+
 }

+ 0 - 15
src/main/java/com/style24/persistence/domain/eigene/Eigeneai.java

@@ -47,19 +47,4 @@ public class Eigeneai implements Serializable {
 		private Product product;	// 상품정보
 	}
 
-	// 실시간 상품정보
-	@Data
-	public class Item {
-		private int count;				// view건수
-		private String itemId;			// 상품코드
-		private String imageUrl;		// 상품이미지URL
-		private String itemName;		// 상품명
-		private String itemUrl;			// 상품상세페이지URL
-		private String categoryId;		// 카테고리ID
-		private double originalPrice;	// 정상가
-		private double salePrice;		// 판매가
-		private String brandId;			// 브랜드ID(브랜드그룹번호)
-		private String brandName;		// 브랜드명
-	}
-
 }

+ 29 - 0
src/main/java/com/style24/persistence/domain/eigene/Item.java

@@ -0,0 +1,29 @@
+package com.style24.persistence.domain.eigene;
+
+import java.io.Serializable;
+
+import lombok.Data;
+
+/**
+ * 추천솔루션 - Eigene - 실시간상품정보 도메인
+ * 
+ * @author gagamel
+ * @since 2021. 5. 14
+ */
+@SuppressWarnings("serial")
+@Data
+public class Item implements Serializable {
+
+	private int count;				// view건수
+	private String itemId;			// 상품코드
+	private String imageUrl;		// 상품이미지URL
+	private String itemName;		// 상품명
+	private String itemUrl;			// 상품상세페이지URL
+	private String categoryId;		// 카테고리ID
+	private double originalPrice;	// 정상가
+	private double salePrice;		// 판매가
+	private String brandId;			// 브랜드ID(브랜드그룹번호)
+	private String brandName;		// 브랜드명
+	private int wishCnt;			// 위시리스트담긴상품(1:있음, 0:없음)
+
+}

+ 37 - 0
src/main/java/com/style24/persistence/mybatis/shop/TsfGoods.xml

@@ -3699,4 +3699,41 @@
 		FROM   TB_GOODS G
 		WHERE  G.GOODS_CD = #{goodsCd}
 	</select>
+	
+	<!-- 상품추가정보 목록 -->
+	<select id="getGoodsAddInfoList" parameterType="Goods" resultType="Item">
+		/* TsfGoods.getGoodsAddInfoList */
+		SELECT Z.COUNT                                                                              /*view건수*/
+		     , Z.ITEM_ID                                                                            /*상품코드*/
+		     , Z.IMAGE_URL
+		     , Z.ITEM_NAME
+		     , Z.ITEM_URL
+		     , Z.CATEGORY_ID
+		     , G.LIST_PRICE                                                       AS ORIGINAL_PRICE /*정상가*/
+		     , FN_GET_BENEFIT_PRICE(#{frontGb},G.GOODS_CD,G.CURR_PRICE,#{custGb}) AS CURR_PRICE     /*현재판매가*/
+		     , BG.BRAND_GROUP_NO                                                  AS BRAND_ID       /*브랜드ID(브랜드그룹번호)*/
+		     , CASE WHEN BG.DISP_NM_LANG = 'EN' THEN
+		                BG.BRAND_GROUP_ENM
+		            ELSE
+		                BG.BRAND_GROUP_KNM
+		       END                                                                AS BRAND_NAME     /*브랜드명(브랜드그룹명)*/
+		     <choose>
+		         <when test="custNo != null and custNo > 0"> <!-- 로그인 했으면 -->
+		     , IF(W.GOODS_CD IS NULL,0,1)                                         AS WISH_CNT       /*위시리스트담긴상품*/
+		         </when>
+		         <otherwise>
+		     , 0                                                                  AS WISH_CNT       /*위시리스트담긴상품*/
+		         </otherwise>
+		     </choose>
+		FROM   (
+		        ${sql}
+		       ) Z
+		INNER JOIN TB_GOODS G ON Z.ITEM_ID = G.GOODS_CD
+		INNER JOIN TB_BRAND B ON G.BRAND_CD = B.BRAND_CD
+		INNER JOIN TB_BRAND_GROUP BG ON B.BRAND_GROUP_NO = BG.BRAND_GROUP_NO
+		LEFT OUTER JOIN TB_WISHLIST W ON Z.ITEM_ID = W.GOODS_CD
+		                             AND IFNULL(#{custNo}, 0) = W.CUST_NO
+		ORDER  BY Z.RK
+	</select>
+	
 </mapper>