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

Merge branch 'develop' of http://112.172.147.34:4936/style24/STYLE24.git into develop

jsh77b 5 лет назад
Родитель
Сommit
6467d169d5

+ 17 - 4
style24.admin/src/main/java/com/style24/persistence/mybatis/shop/TsaGoods.xml

@@ -1249,6 +1249,21 @@
 	<!-- 상품 자동 검색어 조회-->
 	<select id="getGoodsSnm" parameterType="String" resultType="String">
 		/* TsaGoods.getGoodsSnm */
+		WITH RECURSIVE TMP_COLOR_GOODS AS (
+		    SELECT GOODS_CD
+		         , REPLACE(CONCAT(GROUP_CONCAT(COLOR_GRP_CD),';',GROUP_CONCAT(COLOR_ENM),';',GROUP_CONCAT(CD_NM)),',',';') AS COLOR_INFO
+		    FROM (
+		        SELECT DISTINCT G.GOODS_CD, C.COLOR_GRP_CD, C.COLOR_ENM, D.CD_NM
+		        FROM TB_GOODS G
+		        LEFT OUTER JOIN TB_OPTION E ON G.GOODS_CD = E.GOODS_CD
+		        LEFT OUTER JOIN TB_COLOR C ON E.OPT_CD1 = C.COLOR_CD
+		                                   AND C.USE_YN= 'Y' 
+		        LEFT OUTER JOIN TB_COMMON_CODE D ON C.COLOR_GRP_CD = D.CD
+		                                   AND D.USE_YN= 'Y' 
+		        WHERE G.GOODS_CD = #{goodsCd}
+		        ) Z
+		        GROUP BY GOODS_CD
+		)
 		SELECT UPPER(CONCAT(
 		       G.GOODS_CD,';',
 		       REPLACE(G.GOODS_NM,' ',''),';',
@@ -1258,15 +1273,13 @@
 		       G.STYLE_YEAR,';',
 		       FN_GET_CODE_NM('G006',G.SEASON_CD),';',
 		       FN_GET_CODE_NM('G007',G.SEX_GB),';',
-		      /* G.COLOR_CD,';',
-		       C.COLOR_ENM,';',
-		       C.COLOR_KNM,';',*/
+		       NVL2(D.COLOR_INFO,CONCAT(D.COLOR_INFO,';'),''),
 		       REPLACE(I.ITEMKIND_NM,'>',';')
 		       )) AS GOODS_SNM
 		FROM TB_GOODS G
 		INNER JOIN TB_BRAND B ON G.BRAND_CD = B.BRAND_CD
 		LEFT OUTER JOIN TB_ITEMKIND I ON G.ITEMKIND_CD = I.ITEMKIND_CD
-		/*LEFT OUTER JOIN TB_COLOR C ON G.COLOR_CD = C.COLOR_CD*/
+		LEFT OUTER JOIN TMP_COLOR_GOODS D ON G.GOODS_CD = D.GOODS_CD
 		WHERE G.GOODS_CD = #{goodsCd}
 	</select>
 	

+ 25 - 0
style24.batch/src/main/java/com/style24/batch/biz/dao/TsbGoodsDao.java

@@ -1,5 +1,7 @@
 package com.style24.batch.biz.dao;
 
+import java.util.Collection;
+
 import com.style24.core.support.annotation.ShopDs;
 import com.style24.persistence.domain.Goods;
 
@@ -69,4 +71,27 @@ public interface TsbGoodsDao {
 	 */
 	void updateGoodsPrice();
 
+	/**
+	 * 상품 검색어 작업
+	 *
+	 * @author eskim
+	 * @since 2020. 11. 27
+	 */
+	void updateGoodsSnmByGoodsSnm1Null();
+
+	/**
+	 * 상품 자동 검색어 조회
+	 *
+	 * @author eskim
+	 * @since 2020. 11. 27
+	 */
+	Collection<Goods> getGoodsByGooodsSnm1List();
+
+	/**
+	 * 상품 검색어 작업
+	 *
+	 * @author eskim
+	 * @since 2020. 11. 27
+	 */
+	void updateGoodsSnm(Goods goods);
 }

+ 52 - 0
style24.batch/src/main/java/com/style24/batch/biz/job/goods/TsbGoodsSnmJob.java

@@ -0,0 +1,52 @@
+package com.style24.batch.biz.job.goods;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import com.style24.batch.biz.job.TsbAbstractJob;
+import com.style24.batch.biz.service.TsbGoodsService;
+import com.style24.persistence.domain.Goods;
+
+import lombok.extern.slf4j.Slf4j;
+
+/**
+ * 상품 검색어 작업 - 시간배치
+ * 
+ * @author eskim
+ * @since 2020. 11. 30
+ */
+@Component
+@Slf4j
+public class TsbGoodsSnmJob extends TsbAbstractJob<Goods, Goods, Goods> {
+
+	@Autowired
+	private TsbGoodsService goodsService;
+
+	private int succCnt = 0;
+	private int failCnt = 0;
+
+	@Override
+	public Goods read() throws Exception {
+
+		Goods goods = new Goods();
+		return goods;
+	}
+
+	@Override
+	public Goods process(Goods goods) throws Exception {
+		return goods;
+	}
+
+	@Override
+	public Goods write(Goods goods) throws Exception {
+
+		goodsService.updateGoodsSnm();
+		return goods;
+	}
+
+	@Override
+	public void notify(Goods goods) throws Exception {
+		super.printResult(succCnt, failCnt);
+	}
+
+}

+ 6 - 0
style24.batch/src/main/java/com/style24/batch/biz/job/goods/TsbGoodsTnmJob.java

@@ -5,6 +5,7 @@ import org.springframework.stereotype.Component;
 
 import com.style24.batch.biz.job.TsbAbstractJob;
 import com.style24.batch.biz.service.TsbGoodsService;
+import com.style24.core.biz.thirdparty.SafetyKoreaApi;
 import com.style24.persistence.domain.Goods;
 
 import lombok.extern.slf4j.Slf4j;
@@ -22,12 +23,17 @@ public class TsbGoodsTnmJob extends TsbAbstractJob<Goods, Goods, Goods> {
 	@Autowired
 	private TsbGoodsService goodsService;
 
+	@Autowired
+	private SafetyKoreaApi safetyKoreaApi;
+
+
 	private int succCnt = 0;
 	private int failCnt = 0;
 
 	@Override
 	public Goods read() throws Exception {
 
+		log.info(safetyKoreaApi.getKoreaCertifyNo("MNW1BQKP20"));
 		Goods goods = new Goods();
 		return goods;
 	}

+ 33 - 1
style24.batch/src/main/java/com/style24/batch/biz/service/TsbGoodsService.java

@@ -1,5 +1,7 @@
 package com.style24.batch.biz.service;
 
+import java.util.Collection;
+
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -23,7 +25,6 @@ public class TsbGoodsService {
 	@Autowired
 	private TsbGoodsDao goodsDao;
 
-
 	/**
 	 * 상품 타이틀예약 작업
 	 *
@@ -86,4 +87,35 @@ public class TsbGoodsService {
 		goodsDao.updateGoodsPrice();
 	}
 
+	/**
+	 * 상품 검색어 작업
+	 *
+	 * @return
+	 * @author eskim
+	 * @since 2020. 11. 30
+	 */
+	@Transactional("shopTxnManager")
+	public void updateGoodsSnm() {
+
+		// 사용자 검색어 없는 상품 일괄 작업
+		goodsDao.updateGoodsSnmByGoodsSnm1Null();
+		// 사용자 검색어 있는 상품 작업
+		Collection<Goods> goodsList = goodsDao.getGoodsByGooodsSnm1List();
+		if (goodsList != null && !goodsList.isEmpty()) {
+			for (Goods goods : goodsList) {
+
+				// 사용자 검색어를 검색어에 적용
+				String goodsSnm = goods.getGoodsSnm();
+				String[] arrGoodsSnm = goods.getGoodsSnm1().split(";");
+				StringBuilder tempGoodsSnm = new StringBuilder();
+				for (String loopGoodsSnm : arrGoodsSnm) {
+					if (goodsSnm.toUpperCase().indexOf(loopGoodsSnm.toUpperCase()) <= -1) {
+						tempGoodsSnm.append(loopGoodsSnm).append(";");
+					}
+				}
+				goods.setGoodsSnm(tempGoodsSnm.toString() + goodsSnm);
+				goodsDao.updateGoodsSnm(goods);
+			}
+		}
+	}
 }

+ 20 - 3
style24.batch/src/main/java/com/style24/batch/biz/task/TsbGoodsTask.java

@@ -6,6 +6,7 @@ import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Component;
 
 import com.style24.batch.biz.job.goods.TsbGoodsPriceJob;
+import com.style24.batch.biz.job.goods.TsbGoodsSnmJob;
 import com.style24.batch.biz.job.goods.TsbGoodsTnmJob;
 
 import lombok.extern.slf4j.Slf4j;
@@ -25,6 +26,9 @@ public class TsbGoodsTask {
 	@Autowired
 	private TsbGoodsPriceJob goodsPriceJob;
 
+	@Autowired
+	private TsbGoodsSnmJob goodsSnmJob;
+
 	/**
 	 * 초 분 시 일 월 주(년)
 	 * 0 0 12 * * ?" : 아무 요일, 매월, 매일 12:00:00
@@ -56,7 +60,7 @@ public class TsbGoodsTask {
 	//@Scheduled(fixedDelay = 3500000)
 	@Async
 	public void tsbGoodsTnmJob() throws Exception {
-		goodsTnmJob.run("상품 타이틀예약 적용 ");
+		goodsTnmJob.run("상품 타이틀예약 적용");
 	}
 
 	/**
@@ -65,9 +69,22 @@ public class TsbGoodsTask {
 	 * @throws Exception
 	 */
 	@Scheduled(cron = "${cron.goods.goodsPriceJob}")
-	@Scheduled(fixedDelay = 3500000)
+	//@Scheduled(fixedDelay = 3500000)
 	@Async
 	public void tsbGoodsPriceJob() throws Exception {
-		goodsPriceJob.run("상품 가격예약 적용 ");
+		goodsPriceJob.run("상품 가격예약 적용");
+	}
+
+	/**
+	 * 상품 검색어 적용 주기 : 시간배치 - 매시 5분
+	 *
+	 * @throws Exception
+	 */
+	@Scheduled(cron = "${cron.goods.goodsSnmJob}")
+	//@Scheduled(fixedDelay = 3500000)
+	@Async
+	public void tsbGoodsSnmJob() throws Exception {
+		goodsSnmJob.run("상품 검색어 적용");
 	}
+
 }

+ 102 - 1
style24.batch/src/main/java/com/style24/persistence/mybatis/shop/TsbGoods.xml

@@ -333,7 +333,7 @@
 		AND A.SELF_GOODS_YN = 'Y'
 	</update>
 	
-	<!-- 상품예약 종료처리 -->
+	<!-- 상품 가격 예약 종료처리 -->
 	<update id="updateGoodsPriceRes">
 		/* TsbGoods.updateGoodsPriceRes */
 		UPDATE TB_GOODS_PRICE_RES
@@ -378,4 +378,105 @@
 		AND A.SELF_GOODS_YN = 'Y'
 	</update>
 	
+	<!--상품 검색어 작업 - 사용자검색어 없는 상품 일괄 -->
+	<update id="updateGoodsSnmByGoodsSnm1Null">
+		/* TsbGoods.updateGoodsSnmByGoodsSnm1Null */
+		UPDATE TB_GOODS A, (
+		                    WITH RECURSIVE TMP_COLOR_GOODS AS (
+		                       SELECT GOODS_CD
+		                            , REPLACE(CONCAT(GROUP_CONCAT(COLOR_GRP_CD),';',GROUP_CONCAT(COLOR_ENM),';',GROUP_CONCAT(CD_NM)),',',';') AS COLOR_INFO
+		                       FROM (
+		                           SELECT DISTINCT G.GOODS_CD, C.COLOR_GRP_CD, C.COLOR_ENM, D.CD_NM
+		                           FROM TB_GOODS G
+		                           LEFT OUTER JOIN TB_OPTION E ON G.GOODS_CD = E.GOODS_CD
+		                           LEFT OUTER JOIN TB_COLOR C ON E.OPT_CD1 = C.COLOR_CD
+		                                                      AND C.USE_YN= 'Y' 
+		                           LEFT OUTER JOIN TB_COMMON_CODE D ON C.COLOR_GRP_CD = D.CD
+		                                                      AND D.USE_YN= 'Y'
+		                           WHERE G.GOODS_SNM1 IS NULL
+		                       ) Z
+		                       GROUP BY GOODS_CD
+		                   )
+		                   SELECT GOODS_CD
+		                        , GOODS_SNM_COMP 
+		                   FROM (
+		                       SELECT DISTINCT Y.GOODS_CD
+		                            , Y.GOODS_SNM_COMP
+		                            , Y.GOODS_SNM
+		                       FROM (
+		                           SELECT G.GOODS_CD
+		                                , G.GOODS_SNM
+		                                , UPPER(CONCAT(
+		                                  G.GOODS_CD,';',
+		                                  REPLACE(G.GOODS_NM,' ',''),';',
+		                                  B.BRAND_ENM,';',
+		                                  B.BRAND_KNM,';',
+		                                  B.BRAND_GRP_NM,';',
+		                                  G.STYLE_YEAR,';',
+		                                  FN_GET_CODE_NM('G006',G.SEASON_CD),';',
+		                                  FN_GET_CODE_NM('G007',G.SEX_GB),';',
+		                                  NVL2(D.COLOR_INFO,CONCAT(D.COLOR_INFO,';'),''),
+		                                  REPLACE(I.ITEMKIND_NM,'>',';')
+		                                  )) AS GOODS_SNM_COMP
+		                           FROM TB_GOODS G
+		                           INNER JOIN TB_BRAND B ON G.BRAND_CD = B.BRAND_CD
+		                           LEFT OUTER JOIN TB_ITEMKIND I ON G.ITEMKIND_CD = I.ITEMKIND_CD
+		                           LEFT OUTER JOIN TMP_COLOR_GOODS D ON G.GOODS_CD = D.GOODS_CD
+		                           WHERE G.GOODS_SNM1 IS NULL
+		                            ) Y
+		                        )X
+		                        <![CDATA[
+		                        WHERE X.GOODS_SNM_COMP <> NVL(X.GOODS_SNM,'1')
+		                        ]]>
+		                    ) B
+		SET A.GOODS_SNM = B.GOODS_SNM_COMP
+		WHERE A.GOODS_CD = B.GOODS_CD
+	</update>
+	
+	<!-- 사용자검색어가 있는 상품 조회  -->
+	<select id="getGoodsByGooodsSnm1List"  resultType="Goods">
+		WITH RECURSIVE TMP_COLOR_GOODS AS (
+		    SELECT Z.GOODS_CD
+		         , REPLACE(CONCAT(GROUP_CONCAT(COLOR_GRP_CD),';',GROUP_CONCAT(COLOR_ENM),';',GROUP_CONCAT(CD_NM)),',',';') AS COLOR_INFO
+		    FROM (
+		        SELECT DISTINCT G.GOODS_CD, C.COLOR_GRP_CD, C.COLOR_ENM, D.CD_NM
+		        FROM TB_GOODS G
+		        LEFT OUTER JOIN TB_OPTION E ON G.GOODS_CD = E.GOODS_CD
+		        LEFT OUTER JOIN TB_COLOR C ON E.OPT_CD1 = C.COLOR_CD
+		                                   AND C.USE_YN= 'Y' 
+		        LEFT OUTER JOIN TB_COMMON_CODE D ON C.COLOR_GRP_CD = D.CD
+		                                   AND D.USE_YN= 'Y' 
+		        WHERE G.GOODS_SNM1 IS NOT NULL
+		        ) Z
+		        GROUP BY Z.GOODS_CD
+		)
+		SELECT G.GOODS_CD
+		     , G.GOODS_SNM1
+		     , UPPER(CONCAT(
+		       G.GOODS_CD,';',
+		       REPLACE(G.GOODS_NM,' ',''),';',
+		       B.BRAND_ENM,';',
+		       B.BRAND_KNM,';',
+		       B.BRAND_GRP_NM,';',
+		       G.STYLE_YEAR,';',
+		       FN_GET_CODE_NM('G006',G.SEASON_CD),';',
+		       FN_GET_CODE_NM('G007',G.SEX_GB),';',
+		       NVL2(D.COLOR_INFO,CONCAT(D.COLOR_INFO,';'),''),
+		       REPLACE(I.ITEMKIND_NM,'>',';')
+		       )) AS GOODS_SNM
+		FROM TB_GOODS G
+		INNER JOIN TB_BRAND B ON G.BRAND_CD = B.BRAND_CD
+		LEFT OUTER JOIN TB_ITEMKIND I ON G.ITEMKIND_CD = I.ITEMKIND_CD
+		LEFT OUTER JOIN TMP_COLOR_GOODS D ON G.GOODS_CD = D.GOODS_CD
+		WHERE G.GOODS_SNM1 IS NOT NULL
+	</select>
+	
+	<!--상품 검색어 작업-   -->
+	<update id="updateGoodsSnm" parameterType="Goods">
+		/* TsbGoods.updateGoodsSnm */
+		UPDATE TB_GOODS A
+		SET GOODS_SNM = #{goodsSnm}
+		WHERE GOODS_CD = #{goodsCd}
+	</update>
+		
 </mapper>

+ 1 - 0
style24.batch/src/main/resources/config/application-locd.yml

@@ -44,3 +44,4 @@ cron:
     goods:
         goodsTnmJob: 2 22 2 29 2 ?
         goodsPriceJob: 2 22 2 29 2 ?
+        goodsSnmJob: 2 22 2 29 2 ?

+ 119 - 0
style24.core/src/main/java/com/style24/core/biz/thirdparty/SafetyKoreaApi.java

@@ -0,0 +1,119 @@
+package com.style24.core.biz.thirdparty;
+
+import java.net.URI;
+
+import javax.annotation.PostConstruct;
+
+import org.json.simple.JSONObject;
+import org.json.simple.parser.JSONParser;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpEntity;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.HttpMethod;
+import org.springframework.http.MediaType;
+import org.springframework.http.ResponseEntity;
+import org.springframework.stereotype.Component;
+import org.springframework.web.client.RestTemplate;
+
+import lombok.extern.slf4j.Slf4j;
+
+/**
+ * KC인증번호 조회 (www.safetykorea.kr open API)
+ * 
+ * @author gagamel
+ * @since 2020. 12. 1
+ */
+@Component
+@Slf4j
+public class SafetyKoreaApi {
+
+	// URL
+	private String apiUrl = "http://www.safetykorea.kr/openapi/api/cert/certificationList.json";
+
+	// 인증키
+	private String authKey = "34fa9888-a2fb-4c02-adf4-18f018bb936d";
+
+	@Autowired
+	private RestTemplate restTemplate;
+
+	@PostConstruct
+	public void init() {
+		log.debug("\n\n---- SafetyKoreaApi initialization started ----");
+		log.debug("apiUrl: [{}]", apiUrl);
+		log.debug("authKey: [{}]", authKey);
+		log.debug("\n--- SafetyKoreaApi initialization completed ----\n");
+	}
+
+	/**
+	 * KC인증번호 조회
+	 * @param goodsCd - 상품코드
+	 * @return 인증번호
+	 * @throws Exception
+	 * @author gagamel
+	 * @since 2020. 12. 1
+	 */
+	public String getKoreaCertifyNo(String goodsCd) throws Exception {
+		// Header
+		HttpHeaders headers = new HttpHeaders();
+		headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
+		headers.add("AuthKey", authKey);
+
+		String requestUrl = apiUrl + "?conditionKey=all&conditionValue=" + goodsCd;
+		log.info("requestUrl: {}", requestUrl);
+		URI url = URI.create(requestUrl);
+
+		// GET방식으로 호출
+		HttpEntity<String> request = new HttpEntity<String>(headers);
+		ResponseEntity<String> responseEntity = restTemplate.exchange(url, HttpMethod.GET, request, String.class);
+		log.info("responseEntity.getStatusCode(): {} ", responseEntity.getStatusCode());
+
+		String responseJson = responseEntity.getBody();
+		log.info("responseEntity.getBody(): {}", responseJson);
+
+//		{
+//		    "resultCode": "2000",
+//		    "resultMsg": "Success",
+//		    "resultData": [
+//		        {
+//		            "certUid": 4675807,
+//		            "certOrganName": "FITI시험연구원(FITI)",
+//		            "certNum": "CB015R0919-8001",
+//		            "certState": "적합",
+//		            "certDiv": "어린이제품 특별법 대상>안전확인 대상",
+//		            "certDate": "20180703",
+//		            "certChgDate": null,
+//		            "certChgReason": "",
+//		            "firstCertNum": null,
+//		            "productName": "유아용 섬유제품",
+//		            "brandName": "",
+//		            "modelName": "MNW1BQKP20",
+//		            "categoryName": "어린이>유아용 섬유제품",
+//		            "importDiv": "수입",
+//		            "makerName": "INWOO",
+//		            "makerCntryName": "인도네시아",
+//		            "importerName": "(주)아은",
+//		            "remark": "",
+//		            "signDate": "20200629",
+//		            "derivationModels": null,
+//		            "certificationImageUrls": null,
+//		            "factories": null,
+//		            "similarCertifications": null
+//		        }
+//		    ]
+//		}
+
+		JSONParser jsonParser = new JSONParser();
+		JSONObject jsonObj = (JSONObject)jsonParser.parse(responseJson);
+		String resultCode = jsonObj.get("resultCode").toString();
+		String certNum = "";
+		if (resultCode != null && resultCode.equals("2000")) { // 성공
+			JSONObject resultData = (JSONObject)jsonParser.parse(jsonObj.get("resultData").toString());
+			if (resultData != null) {
+				certNum = resultData.get("certNum").toString();
+			}
+		}
+
+		return certNum;
+	}
+
+}

+ 17 - 4
style24.scm/src/main/java/com/style24/persistence/mybatis/shop/TssGoods.xml

@@ -909,6 +909,21 @@
 	<!-- 상품 자동 검색어 조회-->
 	<select id="getGoodsSnm" parameterType="String" resultType="String">
 		/* TssGoods.getGoodsSnm */
+		WITH RECURSIVE TMP_COLOR_GOODS AS (
+		    SELECT GOODS_CD
+		         , REPLACE(CONCAT(GROUP_CONCAT(COLOR_GRP_CD),';',GROUP_CONCAT(COLOR_ENM),';',GROUP_CONCAT(CD_NM)),',',';') AS COLOR_INFO
+		    FROM (
+		        SELECT DISTINCT G.GOODS_CD, C.COLOR_GRP_CD, C.COLOR_ENM, D.CD_NM
+		        FROM TB_GOODS G
+		        LEFT OUTER JOIN TB_OPTION E ON G.GOODS_CD = E.GOODS_CD
+		        LEFT OUTER JOIN TB_COLOR C ON E.OPT_CD1 = C.COLOR_CD
+		                                   AND C.USE_YN= 'Y' 
+		        LEFT OUTER JOIN TB_COMMON_CODE D ON C.COLOR_GRP_CD = D.CD
+		                                   AND D.USE_YN= 'Y' 
+		        WHERE G.GOODS_CD = #{goodsCd}
+		        ) Z
+		        GROUP BY GOODS_CD
+		)
 		SELECT UPPER(CONCAT(
 		       G.GOODS_CD,';',
 		       REPLACE(G.GOODS_NM,' ',''),';',
@@ -918,15 +933,13 @@
 		       G.STYLE_YEAR,';',
 		       FN_GET_CODE_NM('G006',G.SEASON_CD),';',
 		       FN_GET_CODE_NM('G007',G.SEX_GB),';',
-		      /* G.COLOR_CD,';',
-		       C.COLOR_ENM,';',
-		       C.COLOR_KNM,';',*/
+		       NVL2(D.COLOR_INFO,CONCAT(D.COLOR_INFO,';'),''),
 		       REPLACE(I.ITEMKIND_NM,'>',';')
 		       )) AS GOODS_SNM
 		FROM TB_GOODS G
 		INNER JOIN TB_BRAND B ON G.BRAND_CD = B.BRAND_CD
 		LEFT OUTER JOIN TB_ITEMKIND I ON G.ITEMKIND_CD = I.ITEMKIND_CD
-		/*LEFT OUTER JOIN TB_COLOR C ON G.COLOR_CD = C.COLOR_CD*/
+		LEFT OUTER JOIN TMP_COLOR_GOODS D ON G.GOODS_CD = D.GOODS_CD
 		WHERE G.GOODS_CD = #{goodsCd}
 	</select>