Просмотр исходного кода

상품상세 매장 재고 연동

eskim 5 лет назад
Родитель
Сommit
b907769d28

+ 25 - 7
src/main/java/com/style24/front/biz/service/TsfGoodsService.java

@@ -425,13 +425,13 @@ public class TsfGoodsService {
 	public int getGoodsStockQty(GoodsStock goodsStock) {
 		int result = 0;
 		// 예약상품 여부 확인
-//		int goodsResSellCount = goodsDao.getGoodsResSellCount(goodsStock.getGoodsCd());
+		int goodsResSellCount = goodsDao.getGoodsResSellCount(goodsStock.getGoodsCd());
 
-//		if ("N".equals(goodsStock.getSelfGoodsYn()) || goodsResSellCount > 0) {
-		result = goodsDao.getGoodsStockQty(goodsStock);
-//		} else {
-//			result = goodsDao.getGoodsStoreStockQty(goodsStock);
-//		}
+		if ("N".equals(goodsStock.getSelfGoodsYn()) || goodsResSellCount > 0) {
+			result = goodsDao.getGoodsStockQty(goodsStock);
+		} else {
+			result = goodsDao.getGoodsStoreStockQty(goodsStock);
+		}
 
 		return result;
 	}
@@ -445,6 +445,14 @@ public class TsfGoodsService {
 	 * @since 2021. 3. 22
 	 */
 	public int getGoodsSetStockQty(GoodsStock goodsStock) {
+		
+//		input param
+//		arrGoodsOption : goodsOption // [{goodsCd|optCd|qty},{goodsCd|optCd|qty}]
+//		,minOrdQty : minOrdQty
+//		,maxOrdQty : maxOrdQty
+//		,goodsCd : mGoodsCd
+//		,selfGoodsYn : selfGoodsYn
+		
 		int result = 0;
 		int index = 0;	// 상품순서
 		//int masterStoreCnt = 0;
@@ -454,6 +462,9 @@ public class TsfGoodsService {
 
 		log.info("[getGoodsSetStockQty] goodsStock = {}", goodsStock);
 
+		// 예약상품 여부 확인
+		int goodsResSellCount = goodsDao.getGoodsResSellCount(goodsStock.getGoodsCd());
+				
 		int ableOrderCnt = 0;
 		for (String arrGoodsCd : goodsStock.getArrGoodsOption()) {	// [{goodsCd|optCd|qty},{goodsCd|optCd|qty}]
 
@@ -465,7 +476,14 @@ public class TsfGoodsService {
 				tmpStock.setGoodsCd(goodsSizeInfo[0]);
 				tmpStock.setOptCd(goodsSizeInfo[1]);
 				int qty = Integer.parseInt(goodsSizeInfo[2]);	// 한번에 주문해야하는 상품수량
-				int stockByGoodsSize = goodsDao.getGoodsStockQty(tmpStock);
+//				int stockByGoodsSize = goodsDao.getGoodsStockQty(tmpStock);
+				int stockByGoodsSize = 0;
+				if ("N".equals(goodsStock.getSelfGoodsYn()) || goodsResSellCount > 0) {
+					stockByGoodsSize = goodsDao.getGoodsStockQty(tmpStock);
+				} else {
+					stockByGoodsSize = goodsDao.getGoodsStoreStockQty(tmpStock);
+				}
+				
 				log.info("[getGoodsSetStockQty] stockByGoodsSize = {}", stockByGoodsSize);
 				if (stockByGoodsSize <= 0) {
 					returnFlag = true;

+ 62 - 23
src/main/java/com/style24/persistence/mybatis/shop/TsfGoods.xml

@@ -677,12 +677,26 @@
 		             ELSE 0 END ) AS STOCK_QTY
 		FROM ( 
 		    SELECT CASE WHEN A.SOLDOUT_YN = 'Y' THEN 0
-		                ELSE A.CURR_STOCK_QTY
-		           END AS STOCK_QTY
-		           , B.MIN_ORD_QTY
-		    FROM  VW_STOCK A
+		                ELSE GREATEST(GREATEST((GREATEST(A.CURR_STOCK_QTY,0) + GREATEST(A.STORE_STOCK_QTY,0)) - A.BASE_STOCK_QTY, 0) - IFNULL(S.SELL_QTY, 0), 0) END AS STOCK_QTY
+		         , B.MIN_ORD_QTY  
+		    FROM TB_OPTION A
+		    LEFT OUTER JOIN (
+		                     SELECT GOODS_CD,
+		                            OPT_CD,
+		                            SUM((CASE SELL_GB
+		                                     WHEN '10' THEN 1
+		                                     WHEN '20' THEN -1
+		                                END) * SELL_QTY) AS SELL_QTY
+		                     FROM TB_SELL_QTY
+		                     WHERE GOODS_CD = #{goodsCd}
+		                     AND OPT_CD = #{optCd}
+		                     GROUP BY GOODS_CD, OPT_CD
+		                     ) S
+		                     ON (A.GOODS_CD = S.GOODS_CD
+		                         AND A.OPT_CD = S.OPT_CD
+		                         )
 		    INNER JOIN TB_GOODS B ON A.GOODS_CD = B.GOODS_CD
-		    WHERE A.GOODS_CD = #{goodsCd}
+		    WHERE A.GOODS_CD =  #{goodsCd}
 		    AND A.OPT_CD = #{optCd}
 		) Z
 	</select>
@@ -693,23 +707,48 @@
 		SELECT CASE WHEN STORE_MAX_QTY - MIN_ORD_QTY >= 0 THEN STORE_MAX_QTY
 		            ELSE 0 END
 		FROM (
-		      SELECT (CASE WHEN WMS_STOCK_QTY >= STORE_STOCK_QTY THEN WMS_STOCK_QTY
-		                       ELSE STORE_STOCK_QTY END) AS STORE_MAX_QTY
-		             , MIN_ORD_QTY
-		      FROM (
-		          SELECT CASE WHEN A.SOLDOUT_YN = 'Y' THEN 0
-		                      ELSE A.CURR_STOCK_QTY
-		                      END AS WMS_STOCK_QTY
-		               , CASE WHEN A.SOLDOUT_YN = 'Y' THEN 0
-		                      ELSE A.STORE_MAX_QTY
-		                      END AS STORE_STOCK_QTY
-		               , B.MIN_ORD_QTY
-		          FROM  TB_OPTION A
-		          INNER JOIN TB_GOODS B ON A.GOODS_CD = B.GOODS_CD
-		          WHERE A.GOODS_CD = #{goodsCd}
-		          AND A.OPT_CD = #{optCd}
-		          ) Z
-		     ) Y
+		    SELECT (CASE
+		                WHEN WMS_STOCK_QTY >= STORE_STOCK_QTY THEN WMS_STOCK_QTY
+		                ELSE STORE_STOCK_QTY END) AS STORE_MAX_QTY
+		         , MIN_ORD_QTY
+		    FROM (
+		             SELECT CASE
+		                        WHEN WMS_STOCK_QTY - SELL_QTY > 0 THEN WMS_STOCK_QTY - SELL_QTY
+		                        ELSE SELL_QTY - WMS_STOCK_QTY END AS WMS_STOCK_QTY
+		                  , CASE
+		                        WHEN SELL_QTY - WMS_STOCK_QTY >= 0
+		                            THEN STORE_STOCK_QTY - (SELL_QTY - WMS_STOCK_QTY)
+		                        ELSE STORE_STOCK_QTY END          AS STORE_STOCK_QTY
+		                  , MIN_ORD_QTY
+		             FROM (
+		                   SELECT CASE WHEN A.SOLDOUT_YN = 'Y' THEN 0
+		                               ELSE A.CURR_STOCK_QTY END  AS WMS_STOCK_QTY
+		                        , CASE WHEN A.SOLDOUT_YN = 'Y' THEN 0
+		                               ELSE A.STORE_MAX_QTY END AS STORE_STOCK_QTY
+		                        , IFNULL(S.SELL_QTY, 0) AS SELL_QTY
+		                        , B.MIN_ORD_QTY
+		                   FROM TB_OPTION A
+		                   LEFT OUTER JOIN (
+		                                    SELECT GOODS_CD,
+		                                           OPT_CD,
+		                                           SUM((CASE SELL_GB
+		                                                    WHEN '10' THEN 1
+		                                                    WHEN '20' THEN -1
+		                                               END) * SELL_QTY) AS SELL_QTY
+		                                    FROM TB_SELL_QTY
+		                                    WHERE GOODS_CD = #{goodsCd}
+		                                    AND OPT_CD = #{optCd}
+		                                    GROUP BY GOODS_CD, OPT_CD
+		                                    ) S
+		                                    ON (A.GOODS_CD = S.GOODS_CD
+		                                        AND A.OPT_CD = S.OPT_CD
+		                                        )
+		                   INNER JOIN TB_GOODS B ON A.GOODS_CD = B.GOODS_CD
+		                   WHERE A.GOODS_CD =  #{goodsCd}
+		                   AND A.OPT_CD = #{optCd}
+		                  ) X
+		         ) Y
+		)Z
 	</select>	
 	
 	<!-- 상품  공지 목록  -->
@@ -3150,7 +3189,7 @@
 		FROM TB_GOODS_RES_SELL 
 		WHERE GOODS_CD = #{goodsCd} 
 		AND USE_YN = 'Y'
-		AND DELV_RES_DT > SYSDATE
+		AND DELV_RES_DT > NOW()
 	</select>
 	
 </mapper>