Explorar o código

고시분류 테이블 필수,전시 여부 삭제

eskim %!s(int64=5) %!d(string=hai) anos
pai
achega
dae8ecf8ba

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

@@ -19,8 +19,8 @@ public class GoodsNotiInfo extends TscBaseDomain {
 	private String niItemCd;
 	private String niContent;
 	private int dispOrd;
-	private String dispYn;
-	private String reqYn;
+	//private String dispYn;
+	//private String reqYn;
 
 	private String niItemNm;
 	private String supplyVendorCd;

+ 3 - 3
src/main/java/com/style24/persistence/domain/NotiInfo.java

@@ -15,15 +15,15 @@ import lombok.Data;
 @Data
 public class NotiInfo extends TscBaseDomain {
 
-	private String supplyCompCd;
+	private String supplyVendorCd;
 	private String niClsfCd;
 	private String niClsfNm;
 	private String niItemCd;
 	private String niItemNm;
 	private String niContent;
 	private Integer dispOrd;
-	private String reqYn;
-	private String dispYn;
+	//private String reqYn;
+	//private String dispYn;
 
 	private String crud;
 	private String goodsCd;

+ 22 - 14
src/main/java/com/style24/persistence/mybatis/shop/TssGoods.xml

@@ -627,20 +627,12 @@
 		     , C.NI_ITEM_CD
 		     , C.NI_CONTENT
 		     , C.DISP_ORD
-		     , 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_VENDOR_CD = CASE D.SUPPLY_VENDOR_CD
-		                                                        WHEN 'SV0001' THEN 'SV0001'
-		                                                        WHEN 'SV0002' THEN 'SV0002'
-		                                                        ELSE 'E' 
-		                                                   END
 		WHERE C.GOODS_CD = #{goodsCd}
+		<if test="niClsfCd != null and niClsfCd != '' ">
 		AND C.NI_CLSF_CD = #{niClsfCd}
+		</if>
 		ORDER BY C.DISP_ORD
 	</select>
 	
@@ -661,8 +653,6 @@
 		        END
 		        AS  NI_CONTENT
 		      , N.DISP_ORD
-		      , N.REQ_YN
-		      , N.DISP_YN
 		 FROM (
 		     SELECT G.GOODS_CD
 		         , G.ITEMKIND_CD
@@ -1899,8 +1889,6 @@
 		     , B.DISP_ORD
 		     , FN_GET_CODE_NM('G005', B.NI_ITEM_CD) AS NI_ITEM_NM
 		     , #{goodsCd} AS GOODS_CD
-		     , B.DISP_YN
-		     , 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_VENDOR_CD = (CASE #{supplyVendorCd} WHEN 'SV0001' THEN 'SV0001' 
@@ -2408,4 +2396,24 @@
 		</if>
 		WHERE GOODS_CD = #{goodsCd}
 	</update>
+	
+	<!-- 정보고시 상세 목록 -->
+	<select id="getNotiInfoItemList" parameterType="NotiInfo" resultType="NotiInfo">
+		/* TssGoods.getNotiInfoItemList */
+		SELECT B.SUPPLY_VENDOR_CD
+		     , B.NI_CLSF_CD
+		     , B.NI_ITEM_CD
+		     , FN_GET_CODE_NM('G005', B.NI_ITEM_CD) AS NI_ITEM_NM
+		     , B.NI_CONTENT
+		     , B.DISP_ORD
+		FROM TB_NOTI_INFO B
+		WHERE B.SUPPLY_VENDOR_CD = CASE #{supplyVendorCd} 
+		                         WHEN 'SV0001' THEN 'SV0001'
+		                         WHEN 'SV0002' THEN 'SV0002'
+		                         ELSE 'E' END 
+		<if test="niClsfCd != null and niClsfCd != ''">
+		AND B.NI_CLSF_CD = #{niClsfCd}
+		</if>
+		ORDER BY B.NI_CLSF_CD, B.DISP_ORD
+	</select>
 </mapper>

+ 18 - 0
src/main/java/com/style24/scm/biz/dao/TssGoodsDao.java

@@ -536,4 +536,22 @@ public interface TssGoodsDao {
 	 * @since 2021. 1. 20
 	 */
 	void updateGoodsMass(Goods goods);
+
+	/**
+	 * 상품 품목변경
+	 *
+	 * @param goods
+	 * @author eskim
+	 * @since 2021. 1. 24
+	 */
+	void updateGoodItemKindCd(Goods goods);
+
+	/**
+	 * 상품정보고시 항목 목록
+	 * @param notiInfo
+	 * @return
+	 * @author eskim
+	 * @since 2021. 1. 24
+	 */
+	Collection<NotiInfo> getNotiInfoItemList(NotiInfo notiInfo);
 }

+ 244 - 120
src/main/java/com/style24/scm/biz/service/TssGoodsService.java

@@ -1257,7 +1257,7 @@ public class TssGoodsService {
 		goods.setUpdNo(TssSession.getInfo().getUserNo());
 
 		// 품번정보 확인 (길이 10, FRJ '-' 삭제)
-		if (StringUtils.isBlank(goodsMass.getGoodsNum().trim()) || goodsMass.getGoodsNum().trim().replace("-", "") .length() != 10) {
+		if (StringUtils.isBlank(goodsMass.getGoodsNum().trim()) || goodsMass.getGoodsNum().trim().replace("-", "").length() != 10) {
 			goods.setGoodsRegMsg("품번코드 오류");
 			goods.setGoodsStat("10");
 			return goods;
@@ -1574,15 +1574,15 @@ public class TssGoodsService {
 
 		if ("createSelfGoods".equals(procJob)) {
 			for (GoodsNotiInfo goodsNotiInfo : goodsNotiList) {
-				if ("Y".equals(goodsNotiInfo.getReqYn()) && StringUtils.isBlank(goodsNotiInfo.getNiContent())) {
-					goods.setGoodsRegMsg("고시항목 필수 항목 오류");
+				if (StringUtils.isBlank(goodsNotiInfo.getNiContent())) {
+					goods.setGoodsRegMsg("고시항목 정보 오류");
 					goods.setGoodsStat("G008_20");
 					return goods;
 				}
 			}
 		} else {
 			for (GoodsNotiInfo goodsNotiInfo : goodsNotiList) {
-				if ("Y".equals(goodsNotiInfo.getReqYn()) && StringUtils.isBlank(excelMap.getString("niContent" + (index + 1)).trim())) {
+				if (StringUtils.isBlank(excelMap.getString("niContent" + (index + 1)).trim())) {
 					goods.setGoodsRegMsg("고시정보 없음 (" + (index + 1) + "번째 항목) - " + goodsNotiInfo.getNiItemCd() + "(" + goodsNotiInfo.getNiItemNm() + ")");
 					goods.setGoodsStat("10");
 					return goods;
@@ -1696,55 +1696,55 @@ public class TssGoodsService {
 		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)+ "번째 옵션구분자[^] 갯수 상이");
+			if (arrOptCd.length != 5) {
+				goods.setGoodsRegMsg("옵션(SKU) " + (i + 1) + "번째 옵션구분자[^] 갯수 상이");
 				goods.setGoodsStat("10");
 				break;
 			}
 
 			// 옵션1 - 필수
 			if (StringUtils.isBlank(arrOptCd[0])) {
-				goods.setGoodsRegMsg("옵션(SKU) " + (i+1)+ "번째 옵션1 정보없음");
+				goods.setGoodsRegMsg("옵션(SKU) " + (i + 1) + "번째 옵션1 정보없음");
 				goods.setGoodsStat("10");
 				break;
 			}
 			// 추가금액 - 필수
 			if (StringUtils.isBlank(arrOptCd[2])) {
-				goods.setGoodsRegMsg("옵션(SKU) " + (i+1)+ "번째 추가금액 정보없음");
+				goods.setGoodsRegMsg("옵션(SKU) " + (i + 1) + "번째 추가금액 정보없음");
 				goods.setGoodsStat("10");
 				break;
 			}
 			if (!arrOptCd[2].trim().matches(NUMBER_PATTERN)) {
-				goods.setGoodsRegMsg("옵션(SKU) " + (i+1)+ "번째 추가금액 숫자 오류");
+				goods.setGoodsRegMsg("옵션(SKU) " + (i + 1) + "번째 추가금액 숫자 오류");
 				goods.setGoodsStat("10");
 				break;
 			}
 			// 안전재고 - 필수
 			if (StringUtils.isBlank(arrOptCd[3])) {
-				goods.setGoodsRegMsg("옵션(SKU) " + (i+1)+ "번째 안전재고 정보없음");
+				goods.setGoodsRegMsg("옵션(SKU) " + (i + 1) + "번째 안전재고 정보없음");
 				goods.setGoodsStat("10");
 				break;
 			}
 			if (!arrOptCd[3].trim().matches(NUMBER_PATTERN)) {
-				goods.setGoodsRegMsg("옵션(SKU) " + (i+1)+ "번째 안전재고 숫자 오류");
+				goods.setGoodsRegMsg("옵션(SKU) " + (i + 1) + "번째 안전재고 숫자 오류");
 				goods.setGoodsStat("10");
 				break;
 			}
 			// 판매재고 - 필수
 			if (StringUtils.isBlank(arrOptCd[4])) {
-				goods.setGoodsRegMsg("옵션(SKU) " + (i+1)+ "번째 판매재고 정보없음");
+				goods.setGoodsRegMsg("옵션(SKU) " + (i + 1) + "번째 판매재고 정보없음");
 				goods.setGoodsStat("10");
 				break;
 			}
 			if (!arrOptCd[4].trim().matches(NUMBER_PATTERN)) {
-				goods.setGoodsRegMsg("옵션(SKU) " + (i+1)+ "번째 판매재고 숫자 오류");
+				goods.setGoodsRegMsg("옵션(SKU) " + (i + 1) + "번째 판매재고 숫자 오류");
 				goods.setGoodsStat("10");
 				break;
 			}
 
 			Option goodsStock = new Option();
 			goodsStock.setGoodsCd(goods.getGoodsCd());
-			goodsStock.setOptCd(goods.getGoodsCd() + "-" + (i+1));
+			goodsStock.setOptCd(goods.getGoodsCd() + "-" + (i + 1));
 			goodsStock.setOptCd1(arrOptCd[0].trim());
 			goodsStock.setOptCd2(arrOptCd[1].trim());
 			goodsStock.setAddPrice(Integer.parseInt(arrOptCd[2]));
@@ -1766,7 +1766,7 @@ public class TssGoodsService {
 
 		// 상품상세 확인
 		if (!StringUtils.isBlank(goodsMass.getGoodsContent())) {
-			if (goodsMass.getGoodsContent().toLowerCase().indexOf("script") >= 0 ) {
+			if (goodsMass.getGoodsContent().toLowerCase().indexOf("script") >= 0) {
 				goods.setGoodsRegMsg("상품상세 html script 선언 오류");
 				goods.setGoodsStat("10");
 				this.setGoodsRegResult(goods, goodsMass, procJob);
@@ -1905,7 +1905,6 @@ public class TssGoodsService {
 		}
 		goods.setBrandCd(goodsMass.getBrandCd().trim()); // 브랜드 코드
 
-
 		// 상품명
 		if (StringUtils.isBlank(goodsMass.getGoodsNm().trim())) {
 			goods.setGoodsRegMsg("상품명 오류");
@@ -2175,7 +2174,6 @@ public class TssGoodsService {
 		return goods;
 	}
 
-
 	/**
 	 * 상품 코드 생성
 	 *
@@ -2255,7 +2253,8 @@ public class TssGoodsService {
 		}
 
 		// 상품 고시
-		goods = this.getUpdateMassGoodsNotiCheck(goods, gagaMap, goodsOrigin);
+		Collection<GoodsNotiInfo> newGoodsNotiList = new ArrayList<>(); //적용할 고시 정보
+		goods = this.getUpdateMassGoodsNotiCheck(goods, gagaMap, goodsOrigin, newGoodsNotiList);
 		if ("10".equals(goods.getGoodsStat())) { // 정보 오류
 			this.setGoodsRegResult(goods, goodsMass, procJob);
 			return goods.getGoodsStat();
@@ -2263,7 +2262,7 @@ public class TssGoodsService {
 
 		// 상품상세 (html, as-is/입점)
 		if (!UPDATE_NO_PATTERN.equals(goodsMass.getGoodsContent().trim())) {
-			if (goodsMass.getGoodsContent().toLowerCase().indexOf("script") >= 0 ) {
+			if (goodsMass.getGoodsContent().toLowerCase().indexOf("script") >= 0) {
 				goods.setGoodsRegMsg("상품상세 html script 선언 오류");
 				goods.setGoodsStat("10");
 				this.setGoodsRegResult(goods, goodsMass, procJob);
@@ -2314,10 +2313,10 @@ public class TssGoodsService {
 		}
 
 		if ("Y".equals(goods.getChNotiYn())) {
-			this.updateGoodsNoti(goods, gagaMap, goodsOrigin); // 상품고시정보 저장
+			this.updateGoodsNoti(goods, newGoodsNotiList); // 상품고시정보 저장
 		}
 
-		// 품목변경시 카테고리 자동 전시 eskim
+		// 품목변경시 카테고리 자동 전시 
 		if (!UPDATE_NO_PATTERN.equals(goods.getItemkindCd().trim())) {
 			GoodsCategory goodsCategory = new GoodsCategory();
 			goodsCategory.setRegNo(TssSession.getInfo().getUserNo());
@@ -2543,8 +2542,8 @@ public class TssGoodsService {
 					goods.setSellFeeRate(sellFeeRate); // 판매수수료율
 					goods.setChDataYn("Y");
 				}
-			}else {
-			//입점
+			} else {
+				//입점
 				GoodsPriceRes goodsPriceRes = new GoodsPriceRes();
 				goodsPriceRes.setGoodsCd(goods.getGoodsCd());
 				if (goods.getCurrPrice() != goodsOrigin.getCurrPrice()) {
@@ -2666,13 +2665,13 @@ public class TssGoodsService {
 			goods.setChDataYn("Y");
 		}
 
-		if(goods.getMinOrdQty() > goods.getMaxOrdQty()){
+		if (goods.getMinOrdQty() > goods.getMaxOrdQty()) {
 			goods.setGoodsRegMsg("최소주문수량 오류(최대주문수량보다 클 수 없음)");
 			goods.setGoodsStat("10");
 			return goods;
 		}
 
-		if(goods.getMaxOrdQty() > goods.getDayMaxOrdQty()){
+		if (goods.getMaxOrdQty() > goods.getDayMaxOrdQty()) {
 			goods.setGoodsRegMsg("최대주문수량 오류(ID당1일최대구매수량보다 클 수 없음)");
 			goods.setGoodsStat("10");
 			return goods;
@@ -2694,7 +2693,7 @@ public class TssGoodsService {
 				}
 				goods.setChDataYn("Y");
 			}
-		}else {
+		} else {
 			goods.setGiftPackYn(goodsOrigin.getGiftPackYn());
 		}
 
@@ -2714,7 +2713,7 @@ public class TssGoodsService {
 				}
 				goods.setChDataYn("Y");
 			}
-		}else {
+		} else {
 			goods.setNewCustOrdYn(goodsOrigin.getNewCustOrdYn());
 		}
 
@@ -2881,75 +2880,167 @@ public class TssGoodsService {
 	 * @author eskim
 	 * @since 2021. 01. 20
 	 */
-	private Goods getUpdateMassGoodsNotiCheck(Goods goods, GagaMap excelMap, Goods goodsOrigin) {
+//	private Goods getUpdateMassGoodsNotiCheck_org(Goods goods, GagaMap excelMap, Goods goodsOrigin) {
+//
+//		// 고시분류 확인
+//		// 고시분류의 항목과 엑셀데이터 매핑
+//		// 필수
+//		String oldItemKindCd = goodsOrigin.getItemkindCd();
+//		String itemkindCd = goods.getItemkindCd();
+//		if (UPDATE_NO_PATTERN.equals(goods.getItemkindCd())) {
+//			itemkindCd = oldItemKindCd;
+//		}
+//		// old 품목고시분류 조회
+//		String oldNiClsfCd = "";
+//		Goods goodsNoti = new Goods();
+//		goodsNoti.setGoodsCd(goods.getGoodsCd());
+//		goodsNoti.setSupplyVendorCd(goodsOrigin.getSupplyVendorCd());
+//		goodsNoti.setItemkindCd(oldItemKindCd);
+//		Collection<GoodsNotiInfo> oldGoodsNotiList = goodsDao.getItemkindNotiInfoList(goodsNoti);
+//		if (oldGoodsNotiList != null && oldGoodsNotiList.isEmpty()) {
+//			for (GoodsNotiInfo oldGoodsNotiInfo : oldGoodsNotiList) {
+//				oldNiClsfCd = oldGoodsNotiInfo.getNiClsfCd();
+//				break;
+//			}
+//		}
+//		// 품목코드가 변경되었을 경우
+//		if (!oldItemKindCd.equals(itemkindCd)) {
+//			goods.setChNotiYn("Y");
+//
+//			// new 품목고시분류 조회
+//			String newNiClsfCd = "";
+//			goodsNoti.setItemkindCd(itemkindCd);
+//			Collection<GoodsNotiInfo> newGoodsNotiList = goodsDao.getItemkindNotiInfoList(goodsNoti);
+//			if (newGoodsNotiList == null || newGoodsNotiList.isEmpty()) {
+//				goods.setGoodsRegMsg("품목의 고시정보 없음");
+//				goods.setGoodsStat("10");
+//				return goods;
+//			} else {
+//				for (GoodsNotiInfo newGoodsNotiInfo : newGoodsNotiList) {
+//					newNiClsfCd = newGoodsNotiInfo.getNiClsfCd();
+//					break;
+//				}
+//			}
+//
+//			if (!oldNiClsfCd.equals(newNiClsfCd) && !UPDATE_NO_PATTERN.equals(excelMap.getString("niClsfCd"))) {
+//				goods.setGoodsRegMsg("고시분류 오류");
+//				goods.setGoodsStat("10");
+//				return goods;
+//			}
+//
+//			// 상품고시정보
+//			Collection<GoodsNotiInfo> goodsNotiList = goodsDao.getItemkindNotiInfoList(goodsNoti);
+//			if (goodsNotiList == null || goodsNotiList.isEmpty()) {
+//				goods.setGoodsRegMsg("품목의 고시정보 없음");
+//				goods.setGoodsStat("10");
+//				return goods;
+//			}
+//		} else {
+//			if (!UPDATE_NO_PATTERN.equals(excelMap.getString("niClsfCd"))
+//				&& !oldNiClsfCd.equals(excelMap.getString("niClsfCd"))) {
+//				goods.setGoodsRegMsg("고시분류 오류..");
+//				goods.setGoodsStat("10");
+//				return goods;
+//			}
+//		}
+//
+//		for (int i = 0; i < 28; i++) {
+//			String niContentVal = excelMap.getString("niContent" + (i + 1));
+//			if (!UPDATE_NO_PATTERN.equals(niContentVal)) {
+//				goods.setChNotiYn("Y");
+//			}
+//		}
+//
+//		return goods;
+//	}
 
-		// 고시분류 확인
-		// 고시분류의 항목과 엑셀데이터 매핑
-		// 필수
-		String oldItemKindCd = goodsOrigin.getItemkindCd();
-		String itemkindCd = goods.getItemkindCd();
-		if (UPDATE_NO_PATTERN.equals(goods.getItemkindCd())) {
-			itemkindCd = oldItemKindCd;
-		}
-		// old 품목고시분류 조회
+	/**
+	 * 상품대량수정 - 상품고시정보 check
+	 *
+	 * @param goods
+	 * @param excelMap
+	 * @param goodsOrigin
+	 * @param newGoodsNotiList
+	 * @return Goods
+	 * @author eskim
+	 * @since 2021. 01. 20
+	 */
+	private Goods getUpdateMassGoodsNotiCheck(Goods goods, GagaMap excelMap, Goods goodsOrigin, Collection<GoodsNotiInfo> newGoodsNotiList) {
+
+		goods.setChNotiYn("N");
 		String oldNiClsfCd = "";
-		Goods goodsNoti = new Goods();
-		goodsNoti.setGoodsCd(goods.getGoodsCd());
-		goodsNoti.setSupplyVendorCd(goodsOrigin.getSupplyVendorCd());
-		goodsNoti.setItemkindCd(oldItemKindCd);
-		Collection<GoodsNotiInfo> oldGoodsNotiList = goodsDao.getItemkindNotiInfoList(goodsNoti);
-		if (oldGoodsNotiList != null && oldGoodsNotiList.isEmpty()) {
-			for (GoodsNotiInfo oldGoodsNotiInfo : oldGoodsNotiList) {
-				oldNiClsfCd = oldGoodsNotiInfo.getNiClsfCd();
-				break;
-			}
-		}
-		// 품목코드가 변경되었을 경우
-		if (!oldItemKindCd.equals(itemkindCd)) {
-			goods.setChNotiYn("Y");
+		String newNiClsfCd = "";
 
-			// new 품목고시분류 조회
-			String newNiClsfCd = "";
-			goodsNoti.setItemkindCd(itemkindCd);
-			Collection<GoodsNotiInfo> newGoodsNotiList = goodsDao.getItemkindNotiInfoList(goodsNoti);
-			if (newGoodsNotiList == null || newGoodsNotiList.isEmpty()) {
-				goods.setGoodsRegMsg("품목의 고시정보 없음");
+		newNiClsfCd = excelMap.getString("niClsfCd").trim();
+		for (int i = 0; i < 28; i++) {
+			if (StringUtils.isBlank(excelMap.getString("niContent" + (i + 1)).trim())) {
+				goods.setGoodsRegMsg("고시항목정보 없음 (" + (i + 1) + "번째 항목)");
 				goods.setGoodsStat("10");
 				return goods;
-			} else {
-				for (GoodsNotiInfo newGoodsNotiInfo : newGoodsNotiList) {
-					newNiClsfCd = newGoodsNotiInfo.getNiClsfCd();
-					break;
-				}
 			}
-
-			if (!oldNiClsfCd.equals(newNiClsfCd) && !UPDATE_NO_PATTERN.equals(excelMap.getString("niClsfCd"))) {
-				goods.setGoodsRegMsg("고시분류 오류");
-				goods.setGoodsStat("10");
-				return goods;
+			if (!UPDATE_NO_PATTERN.equals(excelMap.getString("niContent" + (i + 1)).trim())) {
+				goods.setChNotiYn("Y");
 			}
+		}
+		// 변경사항이 있는지 확인
+		if (UPDATE_NO_PATTERN.equals(newNiClsfCd) && "N".equals(goods.getChNotiYn())) {
+			return goods;
+		}
 
-			// 상품고시정보
-			Collection<GoodsNotiInfo> goodsNotiList = goodsDao.getItemkindNotiInfoList(goodsNoti);
-			if (goodsNotiList == null || goodsNotiList.isEmpty()) {
-				goods.setGoodsRegMsg("품목의 고시정보 없음");
-				goods.setGoodsStat("10");
-				return goods;
-			}
+		Collection<GoodsNotiInfo> goodsNotiList = new ArrayList<>();
+		//고시분류 코드의 고시항목 조회
+		NotiInfo notiInfo = new NotiInfo();
+		notiInfo.setSupplyVendorCd(goodsOrigin.getSupplyVendorCd());
+		if (!UPDATE_NO_PATTERN.equals(newNiClsfCd)) {
+			notiInfo.setNiClsfCd(newNiClsfCd);
 		} else {
-			if (!UPDATE_NO_PATTERN.equals(excelMap.getString("niClsfCd"))
-				&& !oldNiClsfCd.equals(excelMap.getString("niClsfCd"))) {
-				goods.setGoodsRegMsg("고시분류 오류..");
-				goods.setGoodsStat("10");
-				return goods;
+			GoodsNotiInfo goodsNotiInfo = new GoodsNotiInfo();
+			goodsNotiInfo.setGoodsCd(goods.getGoodsCd());
+			goodsNotiList = goodsDao.getGoodsNotiInfoList(goodsNotiInfo);
+			if (goodsNotiList != null && !goodsNotiList.isEmpty()) {
+				oldNiClsfCd = goodsNotiList.iterator().next().getNiClsfCd();
 			}
+			notiInfo.setNiClsfCd(oldNiClsfCd);
+		}
+		Collection<NotiInfo> notiInfolist = goodsDao.getNotiInfoItemList(notiInfo);
+		// 상품의 고시 분류코드 조회
+		if (notiInfolist == null || notiInfolist.isEmpty()) {
+			goods.setGoodsRegMsg("고시분류정보 없음");
+			goods.setGoodsStat("10");
+			return goods;
 		}
 
-		for (int i = 0; i < 28; i++) {
-			String niContentVal = excelMap.getString("niContent" + (i + 1));
-			if (!UPDATE_NO_PATTERN.equals(niContentVal)) {
-				goods.setChNotiYn("Y");
+		int index = 0;
+		// 같은 고시분류 일경우 기존 고시항목 정보 적용
+		if (oldNiClsfCd.equals(newNiClsfCd)) {
+			for (NotiInfo notiInfoData : notiInfolist) {
+				for (GoodsNotiInfo goodsNotiInfoTemp : goodsNotiList) {
+					if (notiInfoData.getNiItemCd().equals(goodsNotiInfoTemp.getNiItemCd())) {
+						notiInfoData.setNiContent(goodsNotiInfoTemp.getNiContent());
+						break;
+					}
+				}
+				index++;
+			}
+		}
+
+		index = 0;
+		for (NotiInfo notiInfoTmp : notiInfolist) {
+			GoodsNotiInfo goodsNotiInfoTmp = new GoodsNotiInfo();
+			goodsNotiInfoTmp.setGoodsCd(goods.getGoodsCd());
+			goodsNotiInfoTmp.setNiClsfCd(notiInfoTmp.getNiClsfCd());
+			goodsNotiInfoTmp.setNiItemCd(notiInfoTmp.getNiItemCd());
+			goodsNotiInfoTmp.setDispOrd(index + 1);
+			goodsNotiInfoTmp.setRegNo(TssSession.getInfo().getUserNo());
+			goodsNotiInfoTmp.setUpdNo(TssSession.getInfo().getUserNo());
+			if (UPDATE_NO_PATTERN.equals(excelMap.getString("niContent" + (index + 1)))) {
+				goodsNotiInfoTmp.setNiContent(notiInfoTmp.getNiContent());
+			} else {
+				goodsNotiInfoTmp.setNiContent(excelMap.getString("niContent" + (index + 1)));
 			}
+
+			newGoodsNotiList.add(goodsNotiInfoTmp);
+			index++;
 		}
 
 		return goods;
@@ -2964,55 +3055,88 @@ public class TssGoodsService {
 	 * @author eskim
 	 * @since 2021. 01. 20
 	 */
-	private void updateGoodsNoti(Goods goods, GagaMap excelMap, Goods goodsOrigin) {
+	private void updateGoodsNoti(Goods goods, Collection<GoodsNotiInfo> newGoodsNotiList) {
 
-		String oldItemKindCd = goodsOrigin.getItemkindCd();
-		String itemkindCd = goods.getItemkindCd();
-		int index = 0;
-
-		if (UPDATE_NO_PATTERN.equals(goods.getItemkindCd())) {
-			itemkindCd = oldItemKindCd;
-		}
-
-		Collection<GoodsNotiInfo> newGoodsNotiList = new ArrayList<>();
-		// new 품목고시분류 조회
-		Goods goodsNoti = new Goods();
-		goodsNoti.setGoodsCd(goods.getGoodsCd());
-		goodsNoti.setSupplyCompCd(goodsOrigin.getSupplyCompCd());
-		// 품목코드가 변경되었을 경우
-		if (!oldItemKindCd.equals(itemkindCd)) {
-			goodsNoti.setItemkindCd(itemkindCd);
-			newGoodsNotiList = goodsDao.getItemkindNotiInfoList(goodsNoti);
-		} else {
-			// 원래 상품의 고시정보
-
-			GoodsNotiInfo goodsNotiInfo = new GoodsNotiInfo();
-			goodsNotiInfo.setGoodsCd(goods.getGoodsCd());
-			goodsNotiInfo.setSupplyVendorCd(goodsOrigin.getSupplyCompCd());  //수정해야함
-			goodsNotiInfo.setNiClsfCd(goodsOrigin.getNiClsfCd());
-			newGoodsNotiList = goodsDao.getGoodsNotiInfoList(goodsNotiInfo);
-		}
 		if (newGoodsNotiList != null && !newGoodsNotiList.isEmpty()) {
 
-			index = 0;
+			int index = 0;
 			for (GoodsNotiInfo goodsNotiInfo : newGoodsNotiList) {
 
 				if (index == 0) {
 					goodsDao.deleteGoodsNotiInfo(goods);
 				}
-
-				if (StringUtils.isEmpty(excelMap.getString("niContent" + (index + 1)))
-					|| UPDATE_NO_PATTERN.equals(excelMap.getString("niContent" + (index + 1)))) {
-					goodsNotiInfo.setNiContent(goodsNotiInfo.getNiContent());
-				} else {
-					goodsNotiInfo.setNiContent(excelMap.getString("niContent" + (index + 1)));
-				}
-				goodsNotiInfo.setRegNo(TssSession.getInfo().getUserNo());
-				goodsNotiInfo.setUpdNo(TssSession.getInfo().getUserNo());
 				goodsDao.saveGoodsNotiInfo(goodsNotiInfo);
 				index++;
 			}
 		}
 	}
 
+	/**
+	 * 상품 품목 변경 저장
+	 *
+	 * @param goodsList
+	 * @return
+	 * @author eskim
+	 * @since 2021. 01. 24
+	 */
+	@Transactional("shopTxnManager")
+	//@CacheEvict(value = "cate", allEntries = true)
+	public void saveItemKindChange(Collection<Goods> goodsList) {
+		for (Goods goods : goodsList) {
+			goods.setRegNo(TssSession.getInfo().getUserNo());
+			goods.setUpdNo(TssSession.getInfo().getUserNo());
+			goods.setItemkindCd(goods.getItemkindCd().toUpperCase());
+			// 품목확인
+			Itemkind itemkind = new Itemkind();
+			itemkind.setItemkindCd(goods.getItemkindCd());
+			itemkind.setUseYn("Y");
+			Collection<Itemkind> itemkindList = goodsDao.getItemkindList(itemkind);
+			if (itemkindList == null || itemkindList.isEmpty()) {
+				throw new IllegalStateException(goods.getGoodsCd() + " 상품의 품목코드를 확인해주세요.");
+			}
+
+			// 상품이력
+			goodsDao.createGoodsHst(goods);
+			// 품목변경
+			goodsDao.updateGoodItemKindCd(goods);
+
+			// 검색어 변경
+			String goodsSnm = goodsDao.getGoodsSnm(goods.getGoodsCd());
+			Goods tmpGoods = goodsDao.getGoods(goods);
+			if (tmpGoods != null && !StringUtils.isBlank(tmpGoods.getGoodsSnm1())) {
+				String[] arrGoodsSnm = tmpGoods.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 {
+				goods.setGoodsSnm(goodsSnm);
+			}
+			goodsDao.updateGoodsSnm(goods);
+
+			//상품 등록후에는 고시정보는 품목과 상관없이 변경처리 가능하게 
+//			Collection<GoodsNotiInfo> goodsNotiInfoList = goodsDao.getNewNotiInfo(goods);
+//			goodsDao.deleteGoodsNotiInfo(goods);
+//
+//			for (GoodsNotiInfo goodsNotiInfo : goodsNotiInfoList) {
+//				goodsNotiInfo.setRegNo(TssSession.getInfo().getUserNo());
+//				goodsNotiInfo.setUpdNo(TssSession.getInfo().getUserNo());
+//				goodsNotiInfo.setGoodsCd(goods.getGoodsCd());
+//				goodsDao.saveGoodsNotiInfo(goodsNotiInfo);
+//			}
+
+			// 품목변경시 카테고리 전시카테고리 변경
+			GoodsCategory goodsCategory = new GoodsCategory();
+			goodsCategory.setRegNo(TssSession.getInfo().getUserNo());
+			goodsCategory.setUpdNo(TssSession.getInfo().getUserNo());
+			goodsCategory.setGoodsCd(goods.getGoodsCd());
+			goodsCategory.setCateType("G031_10");	//상품분류카테고리
+			displayService.deleteGoodsCategory(goodsCategory);
+			goodsDao.createCategoryGoods(goods);
+		}
+	}
 }

+ 28 - 13
src/main/java/com/style24/scm/biz/web/TssGoodsController.java

@@ -276,11 +276,9 @@ public class TssGoodsController extends TssBaseController {
 						returnGoods += tmpGoods.getGoodsCd() + ",";
 					} else {
 						for (GoodsNotiInfo tmpGoodsNotiInfo : goodsNotiInfoList) {
-							if ("Y".equals(tmpGoodsNotiInfo.getReqYn()) || "Y".equals(tmpGoodsNotiInfo.getDispYn())) {
-								if (StringUtils.isBlank(tmpGoodsNotiInfo.getNiContent())) {
-									returnGoods += tmpGoods.getGoodsCd() + ",";
-									break;
-								}
+							if (StringUtils.isBlank(tmpGoodsNotiInfo.getNiContent())) {
+								returnGoods += tmpGoods.getGoodsCd() + ",";
+								break;
 							}
 						}
 					}
@@ -625,8 +623,9 @@ public class TssGoodsController extends TssBaseController {
 	@RequestMapping(value = "/thumbnail/image/save", method = RequestMethod.POST)
 	@ResponseBody
 	public GagaResponse saveGoodsThumbnailImageList(@RequestBody Collection<GoodsImg> goodsImgList) throws Exception {
-		if (goodsImgList == null || goodsImgList.isEmpty())
+		if (goodsImgList == null || goodsImgList.isEmpty()) {
 			throw new IllegalStateException(message.getMessage("FAIL_1001"));
+		}
 
 		String dextUploadPath = env.getProperty("upload.dext.target.path");
 		String goodsTargetPath = env.getProperty("upload.goods.target.path");
@@ -649,8 +648,9 @@ public class TssGoodsController extends TssBaseController {
 				Goods goods = new Goods();
 				goods.setGoodsCd(goodsImg.getGoodsCd());
 				Goods goodsInfo = goodsService.getGoods(goods);
-				if (goodsInfo == null || goodsInfo.getGoodsCd().isEmpty())
+				if (goodsInfo == null || goodsInfo.getGoodsCd().isEmpty()) {
 					throw new IllegalStateException(message.getMessage("FAIL_1001"));
+				}
 
 				strBrandNo = String.valueOf(goodsInfo.getBrandNo());
 			}
@@ -807,7 +807,7 @@ public class TssGoodsController extends TssBaseController {
 			}
 
 			// DB 처리 시 사용되는 파라미터명(셀명) 설정
-			String[] goodsNames = {"goodsNum", "brandCd",  "goodsNm", "itemkindCd", "styleYear", "seasonCd",
+			String[] goodsNames = {"goodsNum", "brandCd", "goodsNm", "itemkindCd", "styleYear", "seasonCd",
 				"sexGb", "listPrice", "currPrice", "costPrice", "formalGb", "originCd", "makeYmd",
 				"niClsfCd", "niContent1", "niContent2", "niContent3", "niContent4", "niContent5",
 				"niContent6", "niContent7", "niContent8", "niContent9", "niContent10", "niContent11", "niContent12",
@@ -818,14 +818,14 @@ public class TssGoodsController extends TssBaseController {
 			ecxelGoodsList = GagaExcelUtil.getList(GagaFileUtil.getConcatenationPath(targetPath, goodsMass.getExcelFileNm()), 0, goodsNames, 0);
 
 			for (GagaMap gagaMap : ecxelGoodsList) {
-				goodsService.createExceluploadSelfGoods(gagaMap,  goodsMass.getProcJob());
+				goodsService.createExceluploadSelfGoods(gagaMap, goodsMass.getProcJob());
 			}
 
 		} else {
 			// 입점상품등록
 			// DB 처리 시 사용되는 파라미터명(셀명) 설정 -
-			String[] goodsNames = {"supplyGoodsCd", "supplyCompCd", "brandCd", "goodsNm", "goodsTnm","goodsSnm1","itemkindCd",  "styleYear", "seasonCd",
-				"sexGb", "listPrice", "currPrice", "goodsGb", "formalGb",  "originCd", "makeYmd", "taxGb", "ageGrpCd", "adultYn","optStr", "goodsContent",
+			String[] goodsNames = {"supplyGoodsCd", "supplyCompCd", "brandCd", "goodsNm", "goodsTnm", "goodsSnm1", "itemkindCd", "styleYear", "seasonCd",
+				"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",
@@ -846,7 +846,7 @@ public class TssGoodsController extends TssBaseController {
 			}
 
 			for (GagaMap gagaMap : ecxelGoodsList) {
-				goodsService.createExceluploadGoods(gagaMap,  goodsMass.getProcJob());
+				goodsService.createExceluploadGoods(gagaMap, goodsMass.getProcJob());
 			}
 
 		}
@@ -893,7 +893,7 @@ public class TssGoodsController extends TssBaseController {
 		}
 
 		for (GagaMap gagaMap : ecxelGoodsList) {
-			goodsService.updateMassExceluploadGoods(gagaMap,  goodsMass.getProcJob());
+			goodsService.updateMassExceluploadGoods(gagaMap, goodsMass.getProcJob());
 		}
 
 		// 파일 삭제
@@ -1136,4 +1136,19 @@ public class TssGoodsController extends TssBaseController {
 
 		return result;
 	}
+
+	/**
+	 * 상품 품목 변경 저장
+	 *
+	 * @param goodsList
+	 * @return
+	 * @author eskim
+	 * @since 2021. 01. 24
+	 */
+	@PostMapping("/itemKind/change/save")
+	@ResponseBody
+	public GagaResponse saveItemKindChange(@RequestBody Collection<Goods> goodsList) {
+		goodsService.saveItemKindChange(goodsList);
+		return super.ok(message.getMessage("SUCC_0001"));
+	}
 }