Ver Fonte

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

gagamel há 5 anos atrás
pai
commit
5bbf5741c8

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

@@ -77,6 +77,7 @@ public class Goods extends TscBaseDomain {
 	private String brandEnm;		//브랜드영문명
 	private String brandGrpNm;		//브랜드그룹명
 	private int brandNo;			// 브랜드번호
+	private String supplyVendorCd;	//벤더코드
 
 	private String goodsPcTopDesc;
 	private String goodsPcDownDesc;

+ 8 - 4
src/main/java/com/style24/persistence/domain/GoodsMass.java

@@ -37,12 +37,16 @@ public class GoodsMass extends TscBaseDomain {
 	private String formalGb; 		//정상이월구분(공통코드G009)
 //	private String distributionGb;	//유통구분(공콩코드 G065)
 	private String taxGb;			//과세구분(10:과세, 20:비과세)
+	private String ageGrpCd;		//상품연령코드(공통코드G023)
 	private String adultYn;			//성인용품여부 'Y', 'N'
 
-	private String opt1Str;			//옵션1(입점용)
-	private String opt2Str;			//옵션2(입점용)
-	private String baseStockStr;	//안전재고(입점용)
-	private String currStockStr;	//재고(입점용)
+	private String optStr;			//옵션(입점용)
+
+	private String opt1Str;			//옵션1
+	private String opt2Str;			//옵션2
+
+//	private String baseStockStr;	//안전재고(입점용)
+//	private String currStockStr;	//재고(입점용)
 
 	private String goodsContent;	//상품상세 html(입점용)
 

+ 1 - 1
src/main/java/com/style24/persistence/domain/GoodsNotiInfo.java

@@ -23,6 +23,6 @@ public class GoodsNotiInfo extends TscBaseDomain {
 	private String reqYn;
 
 	private String niItemNm;
-	private String supplyCompCd;
+	private String supplyVendorCd;
 
 }

+ 1 - 0
src/main/java/com/style24/persistence/domain/Itemkind.java

@@ -19,6 +19,7 @@ public class Itemkind extends TscBaseDomain {
 	//private String itemkindEnm;		// 품목영문명
 	private String niClsfCd;		// 고시분류코드
 	private String useYn;			// 사용여부
+	private String itemkindLeafNm;		// leaf 품목명
 
 //	private String index;
 

+ 1 - 1
src/main/java/com/style24/persistence/domain/Option.java

@@ -26,7 +26,7 @@ public class Option extends TscBaseDomain {
 	private int currStockQty;
 	private int addPrice;
 	private String soldoutYn;
-	private String dispOrd;
+	private int dispOrd;
 	private String dispYn;
 
 	private int rnum;

+ 59 - 35
src/main/java/com/style24/persistence/mybatis/shop/TssGoods.xml

@@ -7,9 +7,9 @@
 		/* TssGoods.getItemkindList */
 		SELECT ITEMKIND_CD
 		     , ITEMKIND_NM
-		     /* , ITEMKIND_ENM*/
 		     , NI_CLSF_CD
 		     , USE_YN
+		     , REPLACE(SUBSTRING_INDEX(ITEMKIND_NM, '>', -2) ,'>','') AS ITEMKIND_LEAF_NM
 		FROM TB_ITEMKIND
 		WHERE 1 = 1
 		<if test="itemkindCd != null and itemkindCd != ''">
@@ -628,12 +628,15 @@
 		     , A.DISP_YN
 		     , A.REQ_YN
 		FROM TB_GOODS_NOTI_INFO C
+		INNER JOIN TB_GOODS B ON C.GOODS_CD = B.GOODS_CD
+		INNER JOIN TB_SUPPLY_COMPANY D ON B.SUPPLY_COMP_CD = D.SUPPLY_COMP_CD
 		INNER JOIN TB_NOTI_INFO A ON C.NI_CLSF_CD = A.NI_CLSF_CD
 		                          AND C.NI_ITEM_CD = A.NI_ITEM_CD
-		                          AND A.SUPPLY_COMP_CD = CASE #{supplyCompCd} 
-		                                                 WHEN 'S0001' THEN 'S0001'
-		                                                 WHEN 'S0002' THEN 'S0002'
-		                                                 ELSE 'E' END
+		                          AND A.SUPPLY_VENDOR_CD = CASE D.SUPPLY_VENDOR_CD
+		                                                        WHEN 'SV0001' THEN 'SV0001'
+		                                                        WHEN 'SV0002' THEN 'SV0002'
+		                                                        ELSE 'E' 
+		                                                   END
 		WHERE C.GOODS_CD = #{goodsCd}
 		AND C.NI_CLSF_CD = #{niClsfCd}
 		ORDER BY C.DISP_ORD
@@ -642,7 +645,7 @@
 	<!-- 상품의 정보고시 항목 목록 -->
 	<select id="getNotiGoodsInfoList" parameterType="NotiInfo" resultType="NotiInfo">
 		/* TssGoods.getNotiGoodsInfoList */
-		SELECT  N.SUPPLY_COMP_CD
+		SELECT  N.SUPPLY_VENDOR_CD
 		      , N.NI_CLSF_CD
 		      , N.NI_ITEM_CD
 		      , FN_GET_CODE_NM('G005', N.NI_ITEM_CD) AS NI_ITEM_NM
@@ -651,7 +654,6 @@
 		             WHEN NI_ITEM_CD = 'G005_006' THEN NVL(FN_GET_CODE_NM('G076', G.ORIGIN_CD),N.NI_CONTENT)
 		             WHEN NI_ITEM_CD = 'G005_097' AND FN_GET_CODE_NM('G076', G.ORIGIN_CD) IN ('대한민국', '한국', 'KOREA') THEN 'N'
 		             WHEN NI_ITEM_CD = 'G005_097' AND FN_GET_CODE_NM('G076', G.ORIGIN_CD) NOT IN ('대한민국', '한국', 'KOREA') THEN 'Y'
-		             WHEN NI_ITEM_CD = 'G005_005' AND G.BRAND_CD= 'T007' THEN G.SUPPLY_COMP_NM
 		             WHEN NI_ITEM_CD = 'G005_009' THEN NVL(G.MAKE_YMD, N.NI_CONTENT)
 		        ELSE N.NI_CONTENT
 		        END
@@ -662,13 +664,12 @@
 		 FROM (
 		     SELECT G.GOODS_CD
 		         , G.ITEMKIND_CD
-		         , G.SUPPLY_COMP_CD
+		         , (SELECT SUPPLY_VENDOR_CD FROM TB_SUPPLY_COMPANY SC WHERE SC.SUPPLY_COMP_CD = G.SUPPLY_COMP_CD) AS SUPPLY_VENDOR_CD
 		         , G.ORIGIN_CD
 		         , G.MAKE_YMD
 		         , (SELECT GROUP_CONCAT(DISTINCT T.OPT_CD1) FROM TB_OPTION T WHERE T.GOODS_CD = G.GOODS_CD)  AS COLOR_NM
 		         , (SELECT GROUP_CONCAT(DISTINCT T.OPT_CD2) FROM TB_OPTION T WHERE T.GOODS_CD = G.GOODS_CD)  AS SIZE_NAME
 		         , G.BRAND_CD
-		         , (SELECT SUPPLY_COMP_NM FROM tb_supply_company SC WHERE SC.SUPPLY_COMP_CD = G.SUPPLY_COMP_CD) AS SUPPLY_COMP_NM 
 		     FROM TB_GOODS G
 		     WHERE 1=1
 		     AND G.GOODS_CD = #{goodsCd}
@@ -676,10 +677,11 @@
 		  , TB_NOTI_INFO N
 		 WHERE 1 = 1
 		 AND N.NI_CLSF_CD = #{niClsfCd}
-		 AND N.SUPPLY_COMP_CD =  CASE G.SUPPLY_COMP_CD
-		                              WHEN 'S0001' THEN 'S0001'
-		                              WHEN 'S0002' THEN 'S0002'
-		                         ELSE 'E' END 
+		 AND N.SUPPLY_VENDOR_CD =  CASE G.SUPPLY_VENDOR_CD
+		                                WHEN 'SV0001' THEN 'SV0001'
+		                                WHEN 'SV0002' THEN 'SV0002'
+		                                ELSE 'E' 
+		                           END 
 		 ORDER BY  G.GOODS_CD , N.NI_CLSF_CD, N.DISP_ORD
 	</select>
 	
@@ -1000,7 +1002,7 @@
 		       FROM TB_NOTI_INFO A
 		          , TB_ITEMKIND B
 		       WHERE A.NI_CLSF_CD = B.NI_CLSF_CD
-		       AND A.SUPPLY_COMP_CD = #{supplyCompCd}
+		       AND A.SUPPLY_VENDOR_CD = #{supplyVendorCd}
 		       AND B.ITEMKIND_CD = #{itemkindCd}
 		     ) D
 		    LEFT OUTER JOIN (
@@ -1113,9 +1115,12 @@
 		FROM (
 		      SELECT A.GOODS_CD 
 		           , A.MAIN_COLOR_CD 
-		           , B.OPT_CD1 
+		           , NVL(B.OPT_CD1,'00') AS OPT_CD1
 		      FROM TB_GOODS A
 		      LEFT OUTER JOIN TB_OPTION B ON A.GOODS_CD = B.GOODS_CD
+		                                  AND 1 = (CASE WHEN A.SELF_GOODS_YN = 'Y' THEN 1
+		                                                ELSE 2 END
+		                                          )
 		      WHERE A.GOODS_CD  = #{goodsCd}
 		      GROUP BY A.GOODS_CD , B.OPT_CD1
 		     ) A 
@@ -1896,9 +1901,10 @@
 		     , B.REQ_YN
 		FROM TB_ITEMKIND A
 		INNER JOIN TB_NOTI_INFO B ON A.NI_CLSF_CD = B.NI_CLSF_CD
-		                          AND B.SUPPLY_COMP_CD = (CASE #{supplyCompCd} WHEN 'S0001' THEN 'S0001' 
-		                                                                       WHEN 'S0002' THEN 'S0002'
-		                                                                       ELSE 'E' END)             
+		                          AND B.SUPPLY_VENDOR_CD = (CASE #{supplyVendorCd} WHEN 'S0001' THEN 'S0001' 
+		                                                                           WHEN 'S0002' THEN 'S0002'
+		                                                                           ELSE 'E' 
+		                                                    END)             
 		WHERE A.ITEMKIND_CD = #{itemkindCd}
 		ORDER BY  B.NI_CLSF_CD, B.DISP_ORD
 	</select>
@@ -2128,27 +2134,30 @@
 	<!-- wms 상품 색상 , 사이즈별 재고 정보 조회 -->
 	<select id="getGoodsWmsSizeList" parameterType="Goods"  resultType = "Option">
 		/* TssGoods.getGoodsWmsSizeList */
-		SELECT GOODS_CD
-		     , OPT_CD
-		     , OPT_CD1
-		     , OPT_CD2
-		     , SKU_MODEL_NO
-		     , PRODUCT_NO
-		     , PRODUCT_CODE
-		     , SUM(CURR_STOCK_QTY) AS CURR_STOCK_QTY
+		SELECT Z.GOODS_CD
+		     , Z.OPT_CD
+		     , F.COLOR_CD AS OPT_CD1
+		     , Z.OPT_CD2
+		     , Z.SKU_MODEL_NO
+		     , Z.PRODUCT_NO
+		     , Z.PRODUCT_CODE
+		     , SUM(Z.CURR_STOCK_QTY) AS CURR_STOCK_QTY
 		     , NVL((SELECT (MAX(DISP_ORD) + 1) AS DISP_ORD 
 		            FROM TB_OPTION WHERE GOODS_CD = Z.GOODS_CD) , ROW_NUMBER() OVER(PARTITION BY GOODS_CD ORDER BY OPT_CD)) AS DISP_ORD
 		FROM (
 		SELECT B.GOODS_CD
-			, A.SKUCODE AS OPT_CD
-			, MAX(A.OPTION1) AS OPT_CD1
-			, MAX(A.OPTION2) AS OPT_CD2
-			, MAX(A.SKUMODELNO) AS SKU_MODEL_NO
-			, MAX(B.PRODUCT_NO) AS PRODUCT_NO
-			, MAX(B.PRODUCT_CODE) AS PRODUCT_CODE
-			, ROUND(GREATEST(A.SELLINGSTOCKAMOUNT, 0) * (NVL(D.STOCK_APPL_RATE, 0)/100)) AS CURR_STOCK_QTY
-			, D.DELV_LOC_CD
-			, D.STOCK_APPL_RATE
+		    , A.SKUCODE AS OPT_CD
+		    , MAX(A.OPTION1) AS OPT_CD1
+		    , MAX(A.OPTION2) AS OPT_CD2
+		    , MAX(A.SKUMODELNO) AS SKU_MODEL_NO
+		    , MAX(B.PRODUCT_NO) AS PRODUCT_NO
+		    , MAX(B.PRODUCT_CODE) AS PRODUCT_CODE
+		    , ROUND(GREATEST(A.SELLINGSTOCKAMOUNT, 0) * (NVL(D.STOCK_APPL_RATE, 0)/100)) AS CURR_STOCK_QTY
+		    , D.DELV_LOC_CD
+		    , D.STOCK_APPL_RATE
+		    , MAX(B.SUPPLY_COMP_CD) AS SUPPLY_COMP_CD
+		    , MAX(B.BRAND_CD) AS BRAND_CD
+		    , MAX(RIGHT(LEFT(REPLACE(A.SKUMODELNO,'-',''),12),2)) AS WMS_COLOR_CD
 		FROM TB_IF_PRODUCTSKU A 
 		INNER JOIN TB_GOODS B ON A.PRODUCTCODE = B.PRODUCT_CODE 
 		                      AND B.SELF_GOODS_YN = 'Y'
@@ -2162,6 +2171,11 @@
 		WHERE 1 = 1
 		GROUP BY B.GOODS_CD, A.SKUCODE, D.DELV_LOC_CD, D.STOCK_APPL_RATE
 		) Z
+		INNER JOIN TB_SUPPLY_COMPANY G ON Z.SUPPLY_COMP_CD = G.SUPPLY_COMP_CD
+		INNER JOIN TB_WMS_COLOR_MAPPING F ON (CASE WHEN Z.BRAND_CD = 'S006' THEN Z.BRAND_CD
+		                                           ELSE G.SUPPLY_VENDOR_CD 
+		                                      END) = F.SUPPLY_VENDOR_CD
+		                                  AND F.USE_YN ='Y'
 		GROUP BY GOODS_CD, OPT_CD
 	</select>
 	
@@ -2277,4 +2291,14 @@
 		WHERE GOODS_CD = #{goodsCd}
 	</update>
 	
+	<!-- 상품 상태만 변경 -->
+	<update id="updateGoodsStatOnly" parameterType="Goods">
+		/* TssGoods.updateGoodsStatOnly */
+		UPDATE TB_GOODS 
+		SET GOODS_STAT= #{goodsStat}
+		  , UPD_NO = #{updNo}
+		  , UPD_DT = NOW() 
+		WHERE GOODS_CD = #{goodsCd}
+	</update>
+	
 </mapper>

+ 21 - 6
src/main/java/com/style24/scm/biz/dao/TssGoodsDao.java

@@ -40,7 +40,6 @@ public interface TssGoodsDao {
 	 */
 	Collection<Itemkind> getItemkindList(Itemkind itemkind);
 
-
 	/**
 	 * 상품 목록 건수
 	 *
@@ -160,7 +159,6 @@ public interface TssGoodsDao {
 	 */
 	void createGoodsHst(Goods goods);
 
-
 	/**
 	 * 상품 수정 항목 일괄변경
 	 *
@@ -170,7 +168,6 @@ public interface TssGoodsDao {
 	 */
 	void updateGoodsState(Goods goods);
 
-
 	/**
 	 * 상품 자동 검색어 조회
 	 *
@@ -454,7 +451,6 @@ public interface TssGoodsDao {
 	 */
 	Collection<GoodsNotiInfo> getItemkindNotiInfoList(Goods goods);
 
-
 	/**
 	 * 상품 등록 로그 생성
 	 *
@@ -496,7 +492,7 @@ public interface TssGoodsDao {
 	/**
 	 * 상품 색상, 사이즈 정보 조회
 	 *
-	 * @param Goods
+	 * @param goods
 	 * @return
 	 * @author eskim
 	 * @since 2021. 01. 14
@@ -506,12 +502,31 @@ public interface TssGoodsDao {
 	/**
 	 * 상품 대표색상 설정
 	 *
-	 * @param Goods
+	 * @param goodsMass
 	 * @return
 	 * @author eskim
 	 * @since 2021. 01. 14
 	 */
 	void updateGoodsMainColorCd(GoodsMass goodsMass);
 
+	/**
+	 * 상품 상태만 변경
+	 *
+	 * @param goods
+	 * @return
+	 * @author eskim
+	 * @since 2021. 01. 18
+	 */
+	void updateGoodsStatOnly(Goods goods);
+
+
+	/**
+	 * 상품코드 생성
+	 *
+	 * @param goods
+	 * @author eskim
+	 * @since 2020. 10. 30
+	 */
+	void createGoodsSequence(Goods goods);
 
 }

+ 595 - 36
src/main/java/com/style24/scm/biz/service/TssGoodsService.java

@@ -2,6 +2,7 @@ package com.style24.scm.biz.service;
 
 import java.io.IOException;
 import java.text.SimpleDateFormat;
+import java.util.ArrayList;
 import java.util.Collection;
 
 import org.springframework.beans.factory.annotation.Autowired;
@@ -74,8 +75,6 @@ public class TssGoodsService {
 	@Autowired
 	private TssRendererService rendererService;
 
-
-
 	@Autowired
 	private ObjectMapper mapper;
 
@@ -83,6 +82,8 @@ public class TssGoodsService {
 
 	private static final String UPDATE_NO_PATTERN = "X";
 
+	private static final String SELF_GOOODS_AFTER = "STY";
+
 	/**
 	 * 상품 목록 건수
 	 *
@@ -143,8 +144,8 @@ public class TssGoodsService {
 			Collection<GagaMap> dataList = goodsDao.getGoodsInfoExcelList(goodsSearch); // map형식으로 조회
 			if (dataList != null && !dataList.isEmpty()) {
 				for (GagaMap gagaMap : dataList) {
-					if (!StringUtils.isEmpty(gagaMap.get("SYS_IMG_NM").toString()) ) {
-						gagaMap.set("SYS_IMG_NM", targetPath + '/' +  gagaMap.get("SYS_IMG_NM").toString());
+					if (!StringUtils.isEmpty(gagaMap.get("SYS_IMG_NM").toString())) {
+						gagaMap.set("SYS_IMG_NM", targetPath + '/' + gagaMap.get("SYS_IMG_NM").toString());
 					}
 				}
 			}
@@ -374,7 +375,7 @@ public class TssGoodsService {
 			for (GoodsDesc tmpGoodsDesc : goodsDescList) {
 				goodsDescSb.append(tmpGoodsDesc.getGoodsDesc());
 			}
-		}else {
+		} else {
 			goodsDescSb.append("");
 		}
 		return goodsDescSb.toString();
@@ -560,7 +561,7 @@ public class TssGoodsService {
 			}
 			goodsPriceRes.setApplyStdt(GagaDateUtil.getTodayDateTime());	//yyyymmddhhmiss
 			int toYear = Integer.parseInt(GagaDateUtil.getToday("yyyy")) + 4;
-			goodsPriceRes.setApplyEddt(toYear +"1231235959");	//yyyymmddhhmiss
+			goodsPriceRes.setApplyEddt(toYear + "1231235959");	//yyyymmddhhmiss
 			goodsPriceRes.setCfrmYn("N");
 			goodsPriceRes.setApplyYn("N");
 			goodsPriceRes.setRegNo(goods.getRegNo());
@@ -655,11 +656,11 @@ public class TssGoodsService {
 			goodsOrderGrade.setGoodsCd(goods.getGoodsCd());
 			goodsOrderGrade.setRegNo(TssSession.getInfo().getUserNo());
 			goodsDao.deleteGoodsCustGrade(goodsOrderGrade);
-			for(String custGrade : goods.getGoodsOrderGrade()) {
+			for (String custGrade : goods.getGoodsOrderGrade()) {
 				goodsOrderGrade.setCustGrade(custGrade);
 				goodsDao.createGoodsCustGrade(goodsOrderGrade);
 			}
-		}else {
+		} else {
 			Goods goodsOrderGrade = new Goods();
 			goodsOrderGrade.setGoodsCd(goods.getGoodsCd());
 			goodsOrderGrade.setRegNo(TssSession.getInfo().getUserNo());
@@ -837,7 +838,7 @@ public class TssGoodsService {
 			goodsStock.setOptCd2(goods.getOptCd2()[index]);
 			goodsStock.setBaseStockQty(Integer.parseInt(goods.getBaseStockQty()[index]));
 			goodsStock.setSoldoutYn(goods.getSoldoutYn()[index]);
-			goodsStock.setDispOrd(goods.getDispOrd()[index]);
+			goodsStock.setDispOrd(Integer.parseInt(goods.getDispOrd()[index]));
 			goodsStock.setDispYn(goods.getDispYn()[index]);
 			goodsStock.setRegNo(goods.getRegNo());
 			goodsStock.setUpdNo(goods.getUpdNo());
@@ -1056,7 +1057,7 @@ public class TssGoodsService {
 	 * @since 2020. 12. 23
 	 */
 	@Transactional("shopTxnManager")
-	public void saveGoodsImageList(Collection<GoodsImg> goodsImgList){
+	public void saveGoodsImageList(Collection<GoodsImg> goodsImgList) {
 		int index = 0;
 		for (GoodsImg goodsImg : goodsImgList) {
 			// 상품이미지 전체 삭제
@@ -1099,7 +1100,7 @@ public class TssGoodsService {
 	 * @since 2021. 01. 12
 	 */
 	@Transactional("shopTxnManager")
-	public String createExceluploadSelfGoods(GagaMap gagaMap,  String procJob) {
+	public String createExceluploadSelfGoods(GagaMap gagaMap, String procJob) {
 
 		GoodsMass goodsMass = mapper.convertValue(gagaMap, GoodsMass.class);
 
@@ -1111,7 +1112,7 @@ public class TssGoodsService {
 			return goods.getGoodsStat();  //continue
 		}
 
-		// 상품고시정보
+		// 상품고시정보 - 항목및 기본값
 		Collection<GoodsNotiInfo> goodsNotiList = goodsDao.getItemkindNotiInfoList(goods);
 		if (goodsNotiList == null || goodsNotiList.isEmpty()) {
 			goods.setGoodsRegMsg("품목의 고시정보 없음");
@@ -1139,20 +1140,26 @@ public class TssGoodsService {
 		if (goodsWmsSizeList == null || goodsWmsSizeList.isEmpty()) {
 			goods.setGoodsRegMsg("WMS 상품 사이즈 정보 없음");
 			goods.setGoodsStat("G008_20");
-		}else{
-			this.createSelfGoodsSize(goods, goodsWmsSizeList); // 자사 상품사이즈 정보 
+		} else {
+			this.createSelfGoodsSize(goods, goodsWmsSizeList); // 자사 상품사이즈 정보 
 		}
 
+		// 상품 색상 , 사이즈 옵션 정보 조회
 		GoodsMass goodsColorSize = goodsDao.getGoodsColorSize(goods);
 		if (goodsColorSize != null && !StringUtils.isEmpty(goodsColorSize.getMainColorCd())) {
 			goodsColorSize.setUpdNo(TssSession.getInfo().getUserNo());
 			goodsDao.updateGoodsMainColorCd(goodsColorSize); // 대표색상 설정
 		}
 
+		int index = 0;
 		// 자사 상품 등록시 고시정보 처리
 		for (GoodsNotiInfo goodsNotiInfo : goodsNotiList) {
+			if (!StringUtils.isEmpty(gagaMap.getString("niContent" + (index + 1)))) {
+				goodsNotiInfo.setNiContent(gagaMap.getString("niContent" + (index + 1)));
+			}
+
 			if ("G005_003".equals(goodsNotiInfo.getNiItemCd())) {	// 색상
-				if (!StringUtils.isEmpty(goodsColorSize.getOpt1Str() )) {
+				if (!StringUtils.isEmpty(goodsColorSize.getOpt1Str())) {
 					goodsNotiInfo.setNiContent(goodsColorSize.getOpt1Str());
 				}
 			} else if ("G005_004".equals(goodsNotiInfo.getNiItemCd())) {	//치수
@@ -1169,17 +1176,28 @@ public class TssGoodsService {
 				}
 			} else if ("G005_097".equals(goodsNotiInfo.getNiItemCd())) {	//수입여부
 				if (!StringUtils.isEmpty(goods.getOriginNm()) &&
-						(goods.getOriginNm().indexOf("대한민국") >= 0 || goods.getOriginNm().indexOf("한국") >= 0 || goods.getOriginNm().toUpperCase().indexOf("KOREA") >= 0)) {
+					(goods.getOriginNm().indexOf("대한민국") >= 0 || goods.getOriginNm().indexOf("한국") >= 0 || goods.getOriginNm().toUpperCase().indexOf("KOREA") >= 0)) {
 					goodsNotiInfo.setNiContent("N");
 				} else {
 					goodsNotiInfo.setNiContent("Y");
 				}
+			} else if ("G005_099".equals(goodsNotiInfo.getNiItemCd())) {	//종류
+				if (!StringUtils.isEmpty(goods.getItemkindNm())) {
+					goodsNotiInfo.setNiContent(goods.getItemkindNm());
+				}
 			}
+			index++;
 		}
 
+		log.info("[goodsNotiList goodsNotiList goodsNotiList ]={}", goodsNotiList);
 		//고시항목 필수값 확인
 		goods = this.getGoodsNotiCheck(goods, goodsNotiList, gagaMap, procJob);
 
+		//고시 필수 항목 미입력으로 상품 상태 변경
+		if ("G008_20".equals(goods.getGoodsStat())) {
+			goodsDao.updateGoodsStatOnly(goods);
+		}
+
 		this.createGoodsNoti(gagaMap, goodsNotiList); // 상품고시정보 저장
 
 		// 사용자 검색어를 검색어에 적용
@@ -1219,8 +1237,8 @@ public class TssGoodsService {
 	private Goods createSelfGoodsInfo(GoodsMass goodsMass, String procJob) {
 
 		Goods goods = new Goods();
-		goods.setGoodsStat("G008_40"); // 상품상태
-		goods.setGoodsRegMsg("승인대기");
+		goods.setGoodsStat("G008_20"); // 상품상태
+		goods.setGoodsRegMsg("이미지 등록 필");
 
 		// 품번정보 확인 (FRJ 는 11, 그외는 10)
 		if (StringUtils.isEmpty(goodsMass.getGoodsNum()) || goodsMass.getGoodsNum().length() < 10 || goodsMass.getGoodsNum().length() > 11) {
@@ -1239,16 +1257,6 @@ public class TssGoodsService {
 			return goods;
 		}
 
-		if ("createSelfGoods".equals(procJob)) {
-			if (!StringUtils.isEmpty(goodsMass.getSupplyCompCd())) {
-				throw new IllegalStateException("입점상품은 입점상품등록으로 작업해 주세요.");
-			}
-		} else {
-			if ("S0001".equals(goodsMass.getSupplyCompCd()) || "S0002".equals(goodsMass.getSupplyCompCd())) {
-				throw new IllegalStateException("자사상품은 자사상등록으로 작업해 주세요.");
-			}
-		}
-
 		// wms 상품 정보 확인
 		WmsGoods wmsGoodsInfo = goodsDao.getWmsGoodsInfo(goods);
 		if (wmsGoodsInfo == null) {
@@ -1306,7 +1314,6 @@ public class TssGoodsService {
 
 		goodsMass.setSupplyCompCd(supplyCompCd); // 업체 코드
 
-
 		// 상품명
 		if (StringUtils.isEmpty(goodsMass.getGoodsNm())) {
 			goods.setGoodsRegMsg("상품명 오류");
@@ -1332,9 +1339,10 @@ public class TssGoodsService {
 			goods.setGoodsStat("10");
 			return goods;
 		}
+		goods.setItemkindNm(getItemkindList.iterator().next().getItemkindLeafNm());	//LEAF품목명
 
 		// 스타일 년도
-		if (StringUtils.isEmpty(goodsMass.getStyleYear()) ||  goodsMass.getStyleYear().length() != 4 || !goodsMass.getStyleYear().trim().matches(NUMBER_PATTERN)) {
+		if (StringUtils.isEmpty(goodsMass.getStyleYear()) || goodsMass.getStyleYear().length() != 4 || !goodsMass.getStyleYear().trim().matches(NUMBER_PATTERN)) {
 			goods.setGoodsRegMsg("스타일 년도 오류");
 			goods.setGoodsStat("10");
 			return goods;
@@ -1430,18 +1438,18 @@ public class TssGoodsService {
 			int costPrice = Integer.parseInt(GagaStringUtil.replace(goodsMass.getCostPrice(), ",", "").trim());
 			// 원가
 			goods.setCostPrice(costPrice);
-		}else {
+		} else {
 			goods.setCostPrice(0);
 		}
 
 		// 정상이월
-		if (StringUtils.isEmpty(goodsMass.getSexGb())) {
-			goods.setGoodsRegMsg("성별 오류");
+		if (StringUtils.isEmpty(goodsMass.getFormalGb())) {
+			goods.setGoodsRegMsg("정상이월 오류");
 			goods.setGoodsStat("10");
 			return goods;
 		}
 		goods.setFormalGb(goodsMass.getFormalGb());
-		commonCode.setCdGb("G009"); // 정상이월구분
+		commonCode.setCdGb("G009"); 	//정상이월
 		commonCode.setCd(goods.getFormalGb());
 		Collection<CommonCode> formalGbList = rendererService.getCommonCodeList(commonCode);
 		if (formalGbList == null || formalGbList.isEmpty()) {
@@ -1517,7 +1525,7 @@ public class TssGoodsService {
 		goodsMass.setRegSuccYn("Y");
 		goodsMass.setRegFailRsn(goods.getGoodsRegMsg());
 		goodsMass.setRegNo(TssSession.getInfo().getUserNo());
-		 //model은 string 테이블은 number 형이라 ,,,
+		//model은 string 테이블은 number 형이라 ,,,
 		if (StringUtils.isEmpty(goodsMass.getListPrice())) {
 			goodsMass.setListPrice("0");
 		}
@@ -1547,13 +1555,14 @@ public class TssGoodsService {
 	 * @since 2021. 01. 12
 	 */
 	private Goods getGoodsNotiCheck(Goods goods, Collection<GoodsNotiInfo> goodsNotiList, GagaMap excelMap, String procJob) {
-
+		log.info("[getGoodsNotiCheck goodsNotiList] =>{}", goodsNotiList);
 		// 고시항목 필수값 입력 확인
 		int index = 0;
 
 		if ("createSelfGoods".equals(procJob)) {
 			for (GoodsNotiInfo goodsNotiInfo : goodsNotiList) {
 				if ("Y".equals(goodsNotiInfo.getReqYn()) && StringUtils.isEmpty(goodsNotiInfo.getNiContent())) {
+					log.info("[goodsNotiInfo] =>{}", goodsNotiInfo);
 					goods.setGoodsRegMsg("고시항목 오류");
 					goods.setGoodsStat("G008_20");
 					return goods;
@@ -1623,4 +1632,554 @@ public class TssGoodsService {
 			index++;
 		}
 	}
+
+	/**
+	 * 상품대량등록 엑셀 저장 - 입점상품
+	 *
+	 * @param ecxelGoodsList, excelFilename, procJob(자사:createSelfGoods, 입점:createGoods)
+	 * @return
+	 * @author eskim
+	 * @since 2021. 01. 19
+	 */
+	@Transactional("shopTxnManager")
+	public String createExceluploadGoods(GagaMap gagaMap, String procJob) {
+
+		GoodsMass goodsMass = mapper.convertValue(gagaMap, GoodsMass.class);
+
+		// 상품기본정보
+		Goods goods = this.createGoodsInfo(goodsMass, procJob);
+
+		if ("10".equals(goods.getGoodsStat())) { // 정보 오류
+			this.setGoodsRegResult(goods, goodsMass, procJob);
+			return goods.getGoodsStat();  //continue
+		}
+
+		//상품코드 생성
+		goods.setGoodsCd(this.getGoodsCodeSeq("E", goods.getBrandCd())); // 입점상품 상품코드 생성
+
+		// 상품고시정보 - 항목및 기본값
+		Collection<GoodsNotiInfo> goodsNotiList = goodsDao.getItemkindNotiInfoList(goods);
+		if (goodsNotiList == null || goodsNotiList.isEmpty()) {
+			goods.setGoodsRegMsg("품목의 고시정보 없음");
+			goods.setGoodsStat("10");
+			this.setGoodsRegResult(goods, goodsMass, procJob);
+			return goods.getGoodsStat();
+		}
+
+		// 할인율
+		goods.setDcRate((int)(this.getDcRate(goods.getListPrice(), goods.getCurrPrice())));
+
+		Collection<Option> stockList = new ArrayList<>();
+		// 입점상품 사이즈 작업
+		if (StringUtils.isEmpty(goodsMass.getOptStr())) {
+			goods.setGoodsRegMsg("옵션 정보 없음");
+			goods.setGoodsStat("10");
+			this.setGoodsRegResult(goods, goodsMass, procJob);
+			return goods.getGoodsStat();
+		}
+
+		//옵션1[필수]^옵션2[선택]^추가금액^안전재고[필수]^판매재고[필수]  |
+		//검정^90^0^0^10|검정^95^0^0^8|검정^100^0^0^5|파랑^90^0^0^15|파랑^95^0^0^5|파랑^100^0^0^1|파랑^105^0^0^7
+
+		String[] arrSizeCd = GagaStringUtil.cutTokenToArray(goodsMass.getOptStr().trim(), "|");
+		for (int i = 0; i < arrSizeCd.length; i++) {
+			String[] arrOptCd = GagaStringUtil.cutTokenToArray(arrSizeCd[i], "^");
+			if (arrOptCd.length != 5  ) {
+				goods.setGoodsRegMsg("옵션(SKU) " + (i+1)+ "번째 옵션구분자[^] 갯수 상이 ");
+				goods.setGoodsStat("10");
+				break;
+			}
+
+			// 옵션1 - 필수
+			if (StringUtils.isEmpty(arrOptCd[0])) {
+				goods.setGoodsRegMsg("옵션(SKU) " + (i+1)+ "번째 옵션1 정보없음");
+				goods.setGoodsStat("10");
+				break;
+			}
+			// 추가금액 - 필수
+			if (StringUtils.isEmpty(arrOptCd[2])) {
+				goods.setGoodsRegMsg("옵션(SKU) " + (i+1)+ "번째 추가금액 정보없음");
+				goods.setGoodsStat("10");
+				break;
+			}
+			if (!arrOptCd[2].trim().matches(NUMBER_PATTERN)) {
+				goods.setGoodsRegMsg("옵션(SKU) " + (i+1)+ "번째 추가금액이 숫자 오류");
+				goods.setGoodsStat("10");
+				break;
+			}
+			// 안전재고 - 필수
+			if (StringUtils.isEmpty(arrOptCd[3])) {
+				goods.setGoodsRegMsg("옵션(SKU) " + (i+1)+ "번째 안전재고 정보없음");
+				goods.setGoodsStat("10");
+				break;
+			}
+			if (!arrOptCd[3].trim().matches(NUMBER_PATTERN)) {
+				goods.setGoodsRegMsg("옵션(SKU) " + (i+1)+ "번째 안전재고 숫자 오류");
+				goods.setGoodsStat("10");
+				break;
+			}
+			// 판매재고 - 필수
+			if (StringUtils.isEmpty(arrOptCd[4])) {
+				goods.setGoodsRegMsg("옵션(SKU) " + (i+1)+ "번째 판매재고 정보없음");
+				goods.setGoodsStat("10");
+				break;
+			}
+			if (!arrOptCd[4].trim().matches(NUMBER_PATTERN)) {
+				goods.setGoodsRegMsg("옵션(SKU) " + (i+1)+ "번째 판매재고 숫자 오류");
+				goods.setGoodsStat("10");
+				break;
+			}
+
+			Option goodsStock = new Option();
+			goodsStock.setGoodsCd(goods.getGoodsCd());
+			goodsStock.setOptCd(goods.getGoodsCd() + "-" + (i+1));
+			goodsStock.setOptCd1(arrOptCd[0].trim());
+			goodsStock.setOptCd2(arrOptCd[1].trim());
+			goodsStock.setAddPrice(Integer.parseInt(arrOptCd[2]));
+			goodsStock.setBaseStockQty(Integer.parseInt(arrOptCd[3]));
+			goodsStock.setCurrStockQty(Integer.parseInt(arrOptCd[4]));
+			goodsStock.setSoldoutYn("N");
+			goodsStock.setDispOrd(i + 1);
+			goodsStock.setDispYn("Y");
+			goodsStock.setRegNo(goods.getRegNo());
+			goodsStock.setUpdNo(goods.getUpdNo());
+
+			stockList.add(goodsStock);
+		}
+
+		if ("10".equals(goods.getGoodsStat())) { // 정보 오류
+			this.setGoodsRegResult(goods, goodsMass, procJob);
+			return goods.getGoodsStat();  //continue
+		}
+
+		goodsDao.createGoods(goods); // 상품기본 저장
+		goodsDao.createGoodsSmmary(goods); // 상품통계 생성
+
+		this.createGoodsSize(goods, stockList); // 입점 상품사이즈 정보 자장
+
+		goodsMass.setGoodsCd(goods.getGoodsCd());
+
+		int index = 0;
+		// 상품 등록시 고시정보 처리
+		for (GoodsNotiInfo goodsNotiInfo : goodsNotiList) {
+			if (!StringUtils.isEmpty(gagaMap.getString("niContent" + (index + 1)))) {
+				goodsNotiInfo.setNiContent(gagaMap.getString("niContent" + (index + 1)));
+			}
+
+			if ("G005_006".equals(goodsNotiInfo.getNiItemCd())) {	//제조국
+				if (!StringUtils.isEmpty(goods.getOriginNm())) {
+					goodsNotiInfo.setNiContent(goods.getOriginNm());
+				}
+			} else if ("G005_009".equals(goodsNotiInfo.getNiItemCd())) {	//제조년월
+				if (!StringUtils.isEmpty(goods.getMakeYmd())) {
+					goodsNotiInfo.setNiContent(goods.getMakeYmd());
+				}
+			} else if ("G005_097".equals(goodsNotiInfo.getNiItemCd())) {	//수입여부
+				if (!StringUtils.isEmpty(goods.getOriginNm()) &&
+					(goods.getOriginNm().indexOf("대한민국") >= 0 || goods.getOriginNm().indexOf("한국") >= 0 || goods.getOriginNm().toUpperCase().indexOf("KOREA") >= 0)) {
+					goodsNotiInfo.setNiContent("N");
+				} else {
+					goodsNotiInfo.setNiContent("Y");
+				}
+			} else if ("G005_099".equals(goodsNotiInfo.getNiItemCd())) {	//종류
+				if (!StringUtils.isEmpty(goods.getItemkindNm())) {
+					goodsNotiInfo.setNiContent(goods.getItemkindNm());
+				}
+			}
+			index++;
+		}
+
+		log.info("[goodsNotiList goodsNotiList goodsNotiList ]={}", goodsNotiList);
+		//고시항목 필수값 확인
+		goods = this.getGoodsNotiCheck(goods, goodsNotiList, gagaMap, procJob);
+
+		//고시 필수 항목 미입력으로 상품 상태 변경
+		if ("G008_20".equals(goods.getGoodsStat())) {
+			goodsDao.updateGoodsStatOnly(goods);
+		}
+
+		this.createGoodsNoti(gagaMap, goodsNotiList); // 상품고시정보 저장
+
+		// 사용자 검색어를 검색어에 적용
+		String goodsSnm = goodsDao.getGoodsSnm(goods.getGoodsCd());
+		if (!StringUtils.isEmpty(goods.getGoodsSnm1())) {
+			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);
+
+		} else if (!goodsSnm.equals(goods.getGoodsSnm())) {
+			goods.setGoodsSnm(goodsSnm);
+		}
+
+		goodsDao.updateGoodsSnm(goods);
+
+		goodsDao.createCategoryGoods(goods);
+
+		this.setGoodsRegResult(goods, goodsMass, procJob);
+
+		return goods.getGoodsStat();
+
+	}
+
+	/**
+	 * 상품등록 - 상품기본정보 - 입점상품
+	 *
+	 * @param goodsMass
+	 * @param excelFilename
+	 * @author eskim
+	 * @since 2021. 01. 19
+	 */
+	private Goods createGoodsInfo(GoodsMass goodsMass, String procJob) {
+
+		Goods goods = new Goods();
+		goods.setGoodsStat("G008_20"); // 상품상태
+		goods.setGoodsRegMsg("이미지 등록 필");
+
+		if (StringUtils.isEmpty(goodsMass.getSupplyGoodsCd())) {
+			goods.setGoodsRegMsg("공급업체 상품코드 오류");
+			goods.setGoodsStat("10");
+			return goods;
+		}
+		goods.setSupplyGoodsCd(goodsMass.getSupplyGoodsCd());
+
+		if (StringUtils.isEmpty(goodsMass.getSupplyCompCd())) {
+			goods.setGoodsRegMsg("공급업체 코드 오류");
+			goods.setGoodsStat("10");
+			return goods;
+		}
+		goods.setSupplyCompCd(goodsMass.getSupplyCompCd());
+
+		// 상품코드 중복여부 확인 - 입점업체코드+입점상품코드
+		Goods goodsDup = goodsDao.getGoods(goods);
+		if (goodsDup != null) {
+			goods.setGoodsRegMsg("상품코드 중복등록요청");
+			goods.setGoodsStat("10");
+			return goods;
+		}
+
+		// 브랜드
+		if (StringUtils.isEmpty(goodsMass.getBrandCd())) {
+			goods.setGoodsRegMsg("브랜드코드 오류");
+			goods.setGoodsStat("10");
+			return goods;
+		}
+		goods.setBrandCd(goodsMass.getBrandCd()); // 브랜드 코드
+		// 브랜드 확인
+		Brand brand = new Brand();
+		brand.setBrandCd(goods.getBrandCd());
+		Collection<Brand> brandList = businessService.getBrandList(brand);
+		if (brandList == null || brandList.isEmpty()) {
+			goods.setGoodsRegMsg("브랜드 오류");
+			goods.setGoodsStat("10");
+			return goods;
+		}
+
+		float pntPrate = 0.0f;
+		float pntMrate = 0.0f;
+		float sellFeeRate = 0.0f;
+		String delvFeeCd = "";
+		String supplyCompCd = "";
+		for (Brand tmpBrand : brandList) {
+			if ("G009_10".equals(goods.getFormalGb())) {
+				pntPrate = tmpBrand.getPntPrate10();
+				pntMrate = tmpBrand.getPntMrate10();
+			} else {
+				pntPrate = tmpBrand.getPntPrate20();
+				pntMrate = tmpBrand.getPntMrate20();
+			}
+			delvFeeCd = tmpBrand.getDelvFeeCd();	//배송비정책 코드
+			supplyCompCd = tmpBrand.getSupplyCompCd();	//업체코드
+			sellFeeRate = tmpBrand.getSellFeeRate();	//판매수수료율
+		}
+		goods.setPntPrate(pntPrate); // 포인트적립율(PC)
+		goods.setPntMrate(pntMrate); // 포인트적립율(MOBILE)
+		goods.setSupplyCompCd(supplyCompCd); // 업체코드
+		goods.setDelvFeeCd(delvFeeCd); // 배송비정책 코드
+		goods.setSellFeeRate(sellFeeRate); // 판매수수료율
+
+		goodsMass.setSupplyCompCd(supplyCompCd); // 업체 코드
+
+		// 상품명
+		if (StringUtils.isEmpty(goodsMass.getGoodsNm())) {
+			goods.setGoodsRegMsg("상품명 오류");
+			goods.setGoodsStat("10");
+			return goods;
+		}
+		goods.setGoodsNm(goodsMass.getGoodsNm().replaceAll("(\\r\\n|\\r|\\n|\\n\\r)", ""));
+
+		if (!StringUtils.isEmpty(goodsMass.getGoodsTnm())) {
+			goods.setGoodsTnm(goodsMass.getGoodsTnm().replaceAll("(\\r\\n|\\r|\\n|\\n\\r)", "")); // 상품 타이틀
+		}
+		if (!StringUtils.isEmpty(goodsMass.getGoodsSnm1())) {
+			goods.setGoodsSnm1(goodsMass.getGoodsSnm1().replaceAll("(\\r\\n|\\r|\\n|\\n\\r|\\s)", "")); // 상품 사용자 검색어
+		}
+
+		// 품목코드
+		if (StringUtils.isEmpty(goodsMass.getItemkindCd())) {
+			goods.setGoodsRegMsg("품목코드 오류");
+			goods.setGoodsStat("10");
+			return goods;
+		}
+		goods.setItemkindCd(goodsMass.getItemkindCd());
+
+		Itemkind itemkind = new Itemkind();
+		itemkind.setItemkindCd(goodsMass.getItemkindCd());
+		itemkind.setUseYn("Y");
+		Collection<Itemkind> getItemkindList = goodsDao.getItemkindList(itemkind);
+		if (getItemkindList == null || getItemkindList.size() == 0) {
+			goods.setGoodsRegMsg("품목코드 오류");
+			goods.setGoodsStat("10");
+			return goods;
+		}
+		goods.setItemkindNm(getItemkindList.iterator().next().getItemkindLeafNm());	//LEAF품목명
+
+		// 스타일 년도
+		if (StringUtils.isEmpty(goodsMass.getStyleYear()) || goodsMass.getStyleYear().length() != 4 || !goodsMass.getStyleYear().trim().matches(NUMBER_PATTERN)) {
+			goods.setGoodsRegMsg("스타일 년도 오류");
+			goods.setGoodsStat("10");
+			return goods;
+		}
+		goods.setStyleYear(goodsMass.getStyleYear());
+
+		// 시즌
+		if (StringUtils.isEmpty(goodsMass.getSeasonCd())) {
+			goods.setGoodsRegMsg("시즌 오류");
+			goods.setGoodsStat("10");
+			return goods;
+		}
+		goods.setSeasonCd(goodsMass.getSeasonCd()); // 시즌
+
+		CommonCode commonCode = new CommonCode();
+		commonCode.setUseYn("Y");
+		commonCode.setCdGb("G006"); // 시즌
+		commonCode.setCd(goods.getSeasonCd());
+		Collection<CommonCode> styleYearList = rendererService.getCommonCodeList(commonCode);
+		if (styleYearList == null || styleYearList.isEmpty()) {
+			goods.setGoodsRegMsg("시즌 오류");
+			goods.setGoodsStat("10");
+			return goods;
+		}
+
+		// 성별
+		if (StringUtils.isEmpty(goodsMass.getSexGb())) {
+			goods.setGoodsRegMsg("성별 오류");
+			goods.setGoodsStat("10");
+			return goods;
+		}
+		goods.setSexGb(goodsMass.getSexGb()); // 성별
+		commonCode.setCdGb("G007"); // 성별
+		commonCode.setCd(goods.getSexGb());
+		Collection<CommonCode> sexGbList = rendererService.getCommonCodeList(commonCode);
+		if (sexGbList == null || sexGbList.isEmpty()) {
+			goods.setGoodsRegMsg("성별 오류");
+			goods.setGoodsStat("10");
+			return goods;
+		}
+
+		// 정상가
+		if (StringUtils.isEmpty(goodsMass.getListPrice())) {
+			goods.setGoodsRegMsg("정상가 오류");
+			goods.setGoodsStat("10");
+			return goods;
+		}
+		if (!GagaStringUtil.replace(goodsMass.getListPrice(), ",", "").trim().matches(NUMBER_PATTERN)) {
+			goods.setGoodsRegMsg("정상가 오류");
+			goods.setGoodsStat("10");
+			return goods;
+		}
+
+		// 판매가
+		if (StringUtils.isEmpty(goodsMass.getCurrPrice())) {
+			goods.setGoodsRegMsg("판매가 오류");
+			goods.setGoodsStat("10");
+			return goods;
+		}
+		if (!GagaStringUtil.replace(goodsMass.getCurrPrice(), ",", "").trim().matches(NUMBER_PATTERN)) {
+			goods.setGoodsRegMsg("판매가 오류");
+			goods.setGoodsStat("10");
+			return goods;
+		}
+
+		int listPrice = Integer.parseInt(GagaStringUtil.replace(goodsMass.getListPrice(), ",", "").trim());
+		int currPrice = Integer.parseInt(GagaStringUtil.replace(goodsMass.getCurrPrice(), ",", "").trim());
+
+		if (currPrice > listPrice) {
+			goods.setGoodsRegMsg("판매가 오류");
+			goods.setGoodsStat("10");
+			return goods;
+		}
+
+		// 정상가
+		goods.setListPrice(listPrice);
+		// 판매가
+		goods.setCurrPrice(currPrice);
+		// 원가
+		goods.setCostPrice(0);
+
+		// 상품구분
+		if (StringUtils.isEmpty(goodsMass.getGoodsGb())) {
+			goods.setGoodsRegMsg("상품구분 오류");
+			goods.setGoodsStat("10");
+			return goods;
+		}
+		goods.setGoodsGb(goodsMass.getGoodsGb());
+		commonCode.setCdGb("G073"); 	//상품구분
+		commonCode.setCd(goods.getGoodsGb());
+		Collection<CommonCode> goodsGbList = rendererService.getCommonCodeList(commonCode);
+		if (goodsGbList == null || goodsGbList.isEmpty()) {
+			goods.setGoodsRegMsg("상품구분 오류");
+			goods.setGoodsStat("10");
+			return goods;
+		}
+
+		// 정상이월
+		if (StringUtils.isEmpty(goodsMass.getFormalGb())) {
+			goods.setGoodsRegMsg("정상이월 오류");
+			goods.setGoodsStat("10");
+			return goods;
+		}
+		goods.setFormalGb(goodsMass.getFormalGb());
+		commonCode.setCdGb("G009"); 	//정상이월
+		commonCode.setCd(goods.getFormalGb());
+		Collection<CommonCode> formalGbList = rendererService.getCommonCodeList(commonCode);
+		if (formalGbList == null || formalGbList.isEmpty()) {
+			goods.setGoodsRegMsg("정상이월구분 오류");
+			goods.setGoodsStat("10");
+			return goods;
+		}
+
+		// 원산지 / 제조국
+		if (StringUtils.isEmpty(goodsMass.getOriginCd())) {
+			goods.setGoodsRegMsg("원산지 오류");
+			goods.setGoodsStat("10");
+			return goods;
+		}
+		goods.setOriginCd(goodsMass.getOriginCd());
+
+		commonCode.setCdGb("G076"); // 원산지
+		commonCode.setCd(goods.getOriginCd());
+		Collection<CommonCode> originCdList = rendererService.getCommonCodeList(commonCode);
+		if (originCdList == null || originCdList.isEmpty()) {
+			goods.setGoodsRegMsg("원산지 오류");
+			goods.setGoodsStat("10");
+			return goods;
+		}
+		goods.setOriginNm(originCdList.iterator().next().getCdNm());	//고시정보 적용용
+
+		// 과세구분
+		if (StringUtils.isEmpty(goodsMass.getTaxGb())) {
+			goods.setGoodsRegMsg("과세구분 오류");
+			goods.setGoodsStat("10");
+			return goods;
+		}
+		goods.setTaxGb(goodsMass.getTaxGb());
+		if (!"10".equals(goodsMass.getTaxGb()) && !"20".equals(goodsMass.getTaxGb())) {
+			goods.setGoodsRegMsg("과세구분 오류");
+			goods.setGoodsStat("10");
+			return goods;
+		}
+
+		//상품연령
+		if (!StringUtils.isEmpty(goodsMass.getAgeGrpCd())) {
+			goods.setAgeGrpCd(goodsMass.getAgeGrpCd());
+
+			commonCode.setCdGb("G023"); // 상품연령
+			commonCode.setCd(goods.getAgeGrpCd());
+			Collection<CommonCode> ageGrpCdList = rendererService.getCommonCodeList(commonCode);
+			if (ageGrpCdList == null || ageGrpCdList.isEmpty()) {
+				goods.setGoodsRegMsg("상품연령 오류");
+				goods.setGoodsStat("10");
+				return goods;
+			}
+		}
+
+		//성인용품여부
+		if (StringUtils.isEmpty(goodsMass.getAdultYn())) {
+			goods.setGoodsRegMsg("성인용품여부 오류");
+			goods.setGoodsStat("10");
+			return goods;
+		}
+		goods.setAdultYn(goodsMass.getAdultYn());
+		if (!"Y".equals(goodsMass.getAdultYn()) && !"N".equals(goodsMass.getAdultYn())) {
+			goods.setGoodsRegMsg("성인용품여부 오류");
+			goods.setGoodsStat("10");
+			return goods;
+		}
+
+		// 제조년월
+		if (StringUtils.isEmpty(goodsMass.getMakeYmd())) {
+			goods.setGoodsRegMsg("제조년월일 오류");
+			goods.setGoodsStat("10");
+			return goods;
+		}
+		goods.setMakeYmd(goodsMass.getMakeYmd());
+
+		SimpleDateFormat dateFormatParser = new SimpleDateFormat("yyyyMMdd");
+		dateFormatParser.setLenient(false);
+		try {
+			dateFormatParser.parse(goodsMass.getMakeYmd());
+		} catch (Exception e) {
+			goods.setGoodsRegMsg("제조년월일 오류");
+			goods.setGoodsStat("10");
+			return goods;
+		}
+
+		goods.setGoodsType("G056_N"); //상품타입
+		goods.setDistributionGb("G065_20"); //유통구분
+		goods.setSelfGoodsYn("N"); // 자사상품여부
+		goods.setSelfMallYn("Y"); //자사몰 노출여부
+		goods.setErpStockLinkYn("N"); // ERP재고연동여부
+
+		goods.setRegNo(TssSession.getInfo().getUserNo());
+		goods.setUpdNo(TssSession.getInfo().getUserNo());
+
+		return goods;
+	}
+
+
+	/**
+	 * 상품 코드 생성
+	 *
+	 * @param goodsType - 상품타입
+	 * @param goodsCdAfter - 상품시퀀스 앞에 붙는명
+	 * @return
+	 * @author eskim
+	 * @since 2020. 10. 30
+	 */
+	public String getGoodsCodeSeq(String goodsType, String goodsCdAfter) {
+
+		//상품코드 12자리
+		String goodsCd = "";
+		Goods goods = new Goods();
+		goodsDao.createGoodsSequence(goods);
+		String goodsSeq = GagaStringUtil.getLPadding(Integer.toString(goods.getGoodsSq()), 8, "0");
+		if ("S".equals(goodsType) || "D".equals(goodsType)) {
+			goodsCd = SELF_GOOODS_AFTER + goodsCdAfter + goodsSeq;
+
+		} else {
+			goodsCd = goodsCdAfter + goodsSeq; // 입점 : 브랜드코드
+		}
+		return goodsCd;
+	}
+
+	/**
+	 * 상품등록 - 상품재고정보 (입점)
+	 *
+	 * @param goods
+	 * @param excelMap
+	 * @return TsaGoods
+	 * @author eskim
+	 * @since 2021. 01. 19
+	 */
+	private void createGoodsSize(Goods goods, Collection<Option> stockist) {
+
+		for (Option stock : stockist) {
+			goodsDao.saveStock(stock);
+		}
+	}
 }

+ 18 - 6
src/main/java/com/style24/scm/biz/web/TssGoodsController.java

@@ -6,7 +6,6 @@ import java.util.Collection;
 
 import javax.servlet.http.HttpServletRequest;
 
-import com.style24.persistence.TscPageRequest;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.core.env.Environment;
 import org.springframework.core.io.InputStreamResource;
@@ -25,6 +24,8 @@ import org.springframework.web.servlet.ModelAndView;
 import com.fasterxml.jackson.core.type.TypeReference;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.style24.core.support.message.TscMessageByLocale;
+import com.style24.persistence.TscPageRequest;
+import com.style24.persistence.domain.CommonCode;
 import com.style24.persistence.domain.Goods;
 import com.style24.persistence.domain.GoodsHst;
 import com.style24.persistence.domain.GoodsImg;
@@ -269,7 +270,6 @@ public class TssGoodsController extends TssBaseController {
 					//고시정보
 					GoodsNotiInfo goodsNotiInfo = new GoodsNotiInfo();
 					goodsNotiInfo.setGoodsCd(tmpGoods.getGoodsCd());
-					goodsNotiInfo.setSupplyCompCd(tmpGoods.getSupplyCompCd());
 					goodsNotiInfo.setNiClsfCd(tmpGoods.getNiClsfCd());
 					Collection<GoodsNotiInfo> goodsNotiInfoList = goodsService.getGoodsNotiInfoList(goodsNotiInfo);
 					if (goodsNotiInfoList == null || goodsNotiInfoList.isEmpty()) {
@@ -497,7 +497,6 @@ public class TssGoodsController extends TssBaseController {
 		GoodsNotiInfo goodsInfo = new GoodsNotiInfo();
 		goodsInfo.setGoodsCd(goods.getGoodsCd());
 		goodsInfo.setNiClsfCd(goods.getNiClsfCd());
-		goodsInfo.setSupplyCompCd(goods.getSupplyCompCd());
 
 		return goodsService.getGoodsNotiInfoList(goodsInfo);
 	}
@@ -826,8 +825,7 @@ public class TssGoodsController extends TssBaseController {
 			// 입점상품등록
 			// DB 처리 시 사용되는 파라미터명(셀명) 설정 -
 			String[] goodsNames = {"supplyGoodsCd", "supplyCompCd", "brandCd", "goodsNm", "goodsTnm","goodsSnm1","itemkindCd",  "styleYear", "seasonCd",
-				"sexGb", "listPrice", "currPrice", "goodsGb", "formalGb",  "originCd", "makeYmd", "taxGb", "adultYn",
-				"optStr","currStockStr", "baseStockStr",
+				"sexGb", "listPrice", "currPrice", "goodsGb", "formalGb",  "originCd", "makeYmd", "taxGb", "ageGrpCd", "adultYn","optStr", "goodsContent",
 				"niClsfCd", "niContent1", "niContent2", "niContent3", "niContent4", "niContent5",
 				"niContent6", "niContent7", "niContent8", "niContent9", "niContent10", "niContent11", "niContent12",
 				"niContent13", "niContent14", "niContent15", "niContent16", "niContent17", "niContent18",
@@ -836,7 +834,21 @@ public class TssGoodsController extends TssBaseController {
 
 			ecxelGoodsList = GagaExcelUtil.getList(GagaFileUtil.getConcatenationPath(targetPath, goodsMass.getExcelFileNm()), 0, goodsNames, 0);
 
-			//goodsService.createExceluploadGoods(ecxelGoodsList, goodsMass.getExcelFileNm(), goodsMass.getProcJob());
+			// 사용자의 관리 브랜드 조회
+			Collection<CommonCode> mdBrandList = rendererService.getAuthBrandList(TssSession.getInfo().getUserNo());
+
+			if ("G001_B000".equals(TssSession.getInfo().getRoleCd())) {
+				if (mdBrandList == null || mdBrandList.isEmpty()) {
+					throw new IllegalStateException("담당 브랜드가 없습니다<br/>권한이 없습니다.");
+				}
+			} else {
+				throw new IllegalStateException("권한이 없습니다.");
+			}
+
+			for (GagaMap gagaMap : ecxelGoodsList) {
+				goodsService.createExceluploadGoods(gagaMap,  goodsMass.getProcJob());
+			}
+
 		}
 
 		// 파일 삭제

+ 1 - 1
src/main/webapp/WEB-INF/views/goods/GoodsDetailForm.html

@@ -1079,7 +1079,7 @@
 		if($("#goodsDetailForm select[name=goodsStat]").val() == "G008_40" || $("#goodsDetailForm select[name=goodsStat]").val() == "G008_90"){
 
 			// SUPER관리자, 어드민관리자, 계정관리자. 총괄관리자, MD 를 제외하고 승인처리 할수 없음
-			if ($("#goodsDetailForm select[name=goodsStat]").val() == "G008_90" &&  $("#goodsDetailForm select[name=goodsStatOrg]").val() != "G008_90"){
+			if ($("#goodsDetailForm select[name=goodsStat]").val() == "G008_90" &&  $("#goodsDetailForm input[name=goodsStatOrg]").val() != "G008_90"){
 				mcxDialog.alert(" '승인완료' 상태로 변경할 권한이 없습니다.");
 				return false;
 			}