Parcourir la source

상품대량수정 안전인증 추가

eskim il y a 4 ans
Parent
commit
14c9c66d24

+ 18 - 0
src/main/java/com/style24/admin/biz/dao/TsaGoodsDao.java

@@ -815,6 +815,24 @@ public interface TsaGoodsDao {
 	 */
 	int getGoodsOptionCount(Option option);
 
+	/**
+	 * 상품옵션 중복건수여부 확인 // 20210929 eskim (안전인증)
+	 * @param option
+	 * @return
+	 * @author eskim
+	 * @since 2021. 9. 29
+	 */
+	int getGoodsOptionDupCountCheck(Option option);
+
+	/**
+	 * 상품옵션 패턴조회 // 20210929 eskim (안전인증)
+	 * @param option
+	 * @return
+	 * @author eskim
+	 * @since 2021. 9. 29
+	 */
+	Option getGoodsOption(Option option);
+
 	/**
 	 * 상품 가격 승인 목록
 	 *

+ 253 - 10
src/main/java/com/style24/admin/biz/service/TsaGoodsService.java

@@ -2860,14 +2860,124 @@ public class TsaGoodsService {
 			return goods.getGoodsStat();
 		}
 
-		// 옵션
-		if (!UPDATE_NO_PATTERN.equals(goodsMass.getOptStr().trim())) {
-			goods.setGoodsRegMsg("옵션은 변경할 수 없습니다.");
+		// 옵션 // 20210929 eskim (안전인증)
+		if (!UPDATE_NO_PATTERN.equals(goodsMass.getOptStr().trim()) && "Y".equals(goodsOrigin.getSelfGoodsYn())) {
+			goods.setGoodsRegMsg("자사상품은 옵션은 변경할 수 없습니다.");
 			goods.setGoodsStat("10");
 			this.setGoodsRegResult(goods, goodsMass, procJob);
 			return goods.getGoodsStat();
 		}
 
+		// 20210929 eskim (안전인증)
+		// 옵션-입점상품만
+		Collection<Option> stockList = new ArrayList<>();
+		if (!UPDATE_NO_PATTERN.equals(goodsMass.getOptStr().trim()) ) {
+
+			//옵션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
+
+			Option dupOption = new Option();
+			dupOption.setGoodsCd(goodsMass.getGoodsCd());
+			int cnt = goodsDao.getGoodsOptionCount(dupOption); // 기 등록된 옵션 건수 조회
+
+			String[] arrSizeCd = goodsMass.getOptStr().trim().split("\\|");
+			for (int i = 0; i < arrSizeCd.length; i++) {
+				String[] arrOptCd = arrSizeCd[i].split("\\^");
+				//log.info("[ arrOptCd.length] {}", arrOptCd.length);
+				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.setGoodsStat("10");
+					break;
+				}
+				// 추가금액 - 필수
+				if (StringUtils.isBlank(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.isBlank(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.isBlank(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;
+				}
+
+				// 옵션 중복 여부 확인
+				String optCd1 = arrOptCd[0];
+				String optCd2 = arrOptCd[1];
+				dupOption.setOptCd1(optCd1);
+				dupOption.setOptCd2(optCd2);
+
+				//상품옵션 중복건수여부 확인
+				int dupOptionCnt = goodsDao.getGoodsOptionDupCountCheck(dupOption);
+				if (dupOptionCnt > 0) {
+					goods.setGoodsRegMsg("옵션(SKU) " + (i + 1) + "번째 옵션1과 옵션2가 중복되는 옵션이 존재합니다.");
+					goods.setGoodsStat("10");
+					break;
+				}
+
+				//상품옵션 패턴조회
+				Option goodsOption = goodsDao.getGoodsOption(dupOption);
+				if (goodsOption != null) {
+					if (StringUtils.isBlank(goodsOption.getOptCd2()) == !StringUtils.isBlank(optCd2) || !StringUtils.isBlank(goodsOption.getOptCd2()) == StringUtils.isBlank(optCd2)) {
+						goods.setGoodsRegMsg("옵션(SKU) " + (i + 1) + "번째 옵션2가 기 등록된 옵션2의 패턴과 다릅니다.");
+						goods.setGoodsStat("10");
+						break;
+					}
+				}
+
+				Option goodsStock = new Option();
+				goodsStock.setGoodsCd(goods.getGoodsCd());
+				goodsStock.setOptCd(goods.getGoodsCd() + "-" + (cnt + (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(cnt + (i + 1));
+				goodsStock.setDispYn("Y");
+				goodsStock.setRegNo(goods.getRegNo());
+				goodsStock.setUpdNo(goods.getUpdNo());
+
+				stockList.add(goodsStock);
+			}
+			goods.setChoOtYn("Y");
+		}
+
+		if ("10".equals(goods.getGoodsStat())) { // 정보 오류
+			this.setGoodsRegResult(goods, goodsMass, procJob);
+			return goods.getGoodsStat();  //continue
+		}
+
 		// 상품 고시
 		Collection<GoodsNotiInfo> newGoodsNotiList = new ArrayList<>(); //적용할 고시 정보
 		goods = this.getUpdateMassGoodsNotiCheck(goods, gagaMap, goodsOrigin, newGoodsNotiList);
@@ -2887,13 +2997,6 @@ public class TsaGoodsService {
 			goods.setChkDescKeep("Y");
 		}
 
-		if ("N".equals(goods.getChDataYn()) && "N".equals(goods.getChkDescKeep()) && "N".equals(goods.getChNotiYn())) {
-			goods.setGoodsRegMsg("변경정보 없음");
-			goods.setGoodsStat("10");
-			this.setGoodsRegResult(goods, goodsMass, procJob);
-			return goods.getGoodsStat();
-		}
-
 		//상품 기본정보 변경여부 와 촬영업체가 아닌경우
 		if ("Y".equals(goods.getChDataYn()) && !"G001_E000".equals(TsaSession.getInfo().getRoleCd())) {
 
@@ -2942,6 +3045,13 @@ public class TsaGoodsService {
 			}
 		}
 
+		// 20210929 eskim(안전인증)
+		// 옵션 적용
+		if (!UPDATE_NO_PATTERN.equals(goodsMass.getOptStr().trim()) && stockList != null && !stockList.isEmpty()) {
+			goods.setSelfGoodsYn(goodsOrigin.getSelfGoodsYn());
+			this.createGoodsSize(goods, stockList); // 입점 상품사이즈 정보 자장
+		}
+
 		// 품목변경시 카테고리 자동 전시
 		if (!UPDATE_NO_PATTERN.equals(goods.getItemkindCd().trim())) {
 			GoodsCategory goodsCategory = new GoodsCategory();
@@ -2954,11 +3064,144 @@ public class TsaGoodsService {
 
 		}
 
+		// 20210929 eskim (안전인증)
+		// 안전인증 적용
+		if (!UPDATE_NO_PATTERN.equals(goodsMass.getCertTargetGb().trim()) || !UPDATE_NO_PATTERN.equals(goodsMass.getCertFormGb().trim()) ||
+			 !UPDATE_NO_PATTERN.equals(goodsMass.getCertType().trim()) || !UPDATE_NO_PATTERN.equals(goodsMass.getCertNum().trim())) {
+
+			//기존안전인증정보
+			GoodsSafeNo dataGoodsSafeNo = goodsDao.getGoodsDetailSafe(goods);
+			GoodsSafeNo goodsSafeNo = new GoodsSafeNo();
+			goodsSafeNo.setGoodsCd(goods.getGoodsCd());
+			if (dataGoodsSafeNo == null || StringUtils.isBlank(dataGoodsSafeNo.getGoodsCd())) {
+				goodsSafeNo.setCertTargetGb(!UPDATE_NO_PATTERN.equals(goodsMass.getCertTargetGb().trim())?goodsMass.getCertTargetGb().trim():"");
+				goodsSafeNo.setCertFormGb(!UPDATE_NO_PATTERN.equals(goodsMass.getCertFormGb().trim())?goodsMass.getCertFormGb().trim():"");
+				goodsSafeNo.setCertType(!UPDATE_NO_PATTERN.equals(goodsMass.getCertType().trim())?goodsMass.getCertType().trim():"");
+				goodsSafeNo.setCertNum(!UPDATE_NO_PATTERN.equals(goodsMass.getCertNum().trim())?goodsMass.getCertNum().trim():"");
+			}else {
+				goodsSafeNo.setCertTargetGb(!UPDATE_NO_PATTERN.equals(goodsMass.getCertTargetGb().trim())?goodsMass.getCertTargetGb().trim():dataGoodsSafeNo.getCertTargetGb());
+				goodsSafeNo.setCertFormGb(!UPDATE_NO_PATTERN.equals(goodsMass.getCertFormGb().trim())?goodsMass.getCertFormGb().trim():dataGoodsSafeNo.getCertFormGb());
+				goodsSafeNo.setCertType(!UPDATE_NO_PATTERN.equals(goodsMass.getCertType().trim())?goodsMass.getCertType().trim():dataGoodsSafeNo.getCertType());
+				goodsSafeNo.setCertNum(!UPDATE_NO_PATTERN.equals(goodsMass.getCertNum().trim())?goodsMass.getCertNum().trim():dataGoodsSafeNo.getCertNum());
+			}
+			// 안전인증 체크
+			if (!StringUtils.isBlank(goodsSafeNo.getCertTargetGb())) {
+				CommonCode commonCode = new CommonCode();
+				//인증대상구분
+
+				commonCode.setCdGb("G083");
+				commonCode.setCd(goodsSafeNo.getCertTargetGb());
+				Collection<CommonCode> certTargetGbList = rendererService.getCommonCodeList(commonCode);
+				if (certTargetGbList == null || certTargetGbList.isEmpty()) {
+					goods.setGoodsRegMsg("인증대상 오류");
+					goods.setGoodsStat("10");
+					this.setGoodsRegResult(goods, goodsMass, procJob);
+					return goods.getGoodsStat();
+
+				}
+
+				if ("G083_1".equals(goodsSafeNo.getCertTargetGb())) {
+					//인증형태구분
+					if (StringUtils.isBlank(goodsSafeNo.getCertFormGb())) {
+
+						goods.setGoodsRegMsg("인증형태 오류");
+						goods.setGoodsStat("10");
+						this.setGoodsRegResult(goods, goodsMass, procJob);
+						return goods.getGoodsStat();
+					}else {
+						commonCode.setCdGb("G084");
+						commonCode.setCd(goodsSafeNo.getCertFormGb());
+						Collection<CommonCode> certFormGbList = rendererService.getCommonCodeList(commonCode);
+						if (certFormGbList == null || certFormGbList.isEmpty()) {
+
+							goods.setGoodsRegMsg("인증형태 오류");
+							goods.setGoodsStat("10");
+							this.setGoodsRegResult(goods, goodsMass, procJob);
+							return goods.getGoodsStat();
+						}
+					}
+
+					//인증타입
+					if (UPDATE_NO_PATTERN.equals(goodsSafeNo.getCertType()) || StringUtils.isBlank(goodsSafeNo.getCertType())) {
+
+						goods.setGoodsRegMsg("인증타입 오류");
+						goods.setGoodsStat("10");
+						this.setGoodsRegResult(goods, goodsMass, procJob);
+						return goods.getGoodsStat();
+					}
+
+					commonCode.setCdGb("G081");
+					commonCode.setCd(goodsSafeNo.getCertType());
+					Collection<CommonCode> certTypeList = rendererService.getCommonCodeList(commonCode);
+					if (certTypeList == null || certTypeList.isEmpty()) {
+						goods.setGoodsRegMsg("인증타입 오류");
+						goods.setGoodsStat("10");
+						this.setGoodsRegResult(goods, goodsMass, procJob);
+						return goods.getGoodsStat();
+					}
+
+					if ("G081_1".equals(goodsSafeNo.getCertType()) || "G081_2".equals(goodsSafeNo.getCertType())) {
+						if (UPDATE_NO_PATTERN.equals(goodsSafeNo.getCertNum()) || StringUtils.isBlank(goodsSafeNo.getCertNum())) {
+
+							goods.setGoodsRegMsg("인증번호 오류");
+							goods.setGoodsStat("10");
+							this.setGoodsRegResult(goods, goodsMass, procJob);
+							return goods.getGoodsStat();
+						}
+					}
+				}else {
+					goodsSafeNo.setCertFormGb("");
+					goodsSafeNo.setCertType("");
+					goodsSafeNo.setCertNum("");
+				}
+
+				saveGoodsDetailCertNum(goodsSafeNo);
+
+			}else{
+				if ((!StringUtils.isBlank(goodsSafeNo.getCertNum())) ||
+					(!StringUtils.isBlank(goodsSafeNo.getCertFormGb())) ||
+					(!StringUtils.isBlank(goodsSafeNo.getCertType()))) {
+
+					goods.setGoodsRegMsg("인증대상 오류");
+					goods.setGoodsStat("10");
+					this.setGoodsRegResult(goods, goodsMass, procJob);
+					return goods.getGoodsStat();
+				}
+			}
+			goods.setChSafeYn("Y");
+		}
+
+		if ("N".equals(goods.getChDataYn()) && "N".equals(goods.getChkDescKeep()) &&
+				"N".equals(goods.getChNotiYn()) && "N".equals(goods.getChSafeYn()) &&
+				"N".equals(goods.getChoOtYn()) ) {
+			goods.setGoodsRegMsg("변경정보 없음");
+			goods.setGoodsStat("10");
+			this.setGoodsRegResult(goods, goodsMass, procJob);
+			return goods.getGoodsStat();
+		}
+
 		this.setGoodsRegResult(goods, goodsMass, procJob);
 
 		return goods.getGoodsStat();
 	}
 
+	/**
+	 * 상품등록 - 상품재고정보 (입점)  // 20210929 eskim(안전인증)
+	 *
+	 * @param goods
+	 * @param excelMap
+	 * @return Goods
+	 * @author eskim
+	 * @since 2021. 09. 29
+	 */
+	private void createGoodsSize(Goods goods, Collection<Option> stockist) {
+
+		for (Option stock : stockist) {
+			goodsDao.saveStock(stock);
+		}
+	}
+
+
 	/**
 	 * 상품 대량 등록 결과 정보
 	 *

+ 6 - 4
src/main/java/com/style24/admin/biz/web/TsaGoodsController.java

@@ -3080,12 +3080,14 @@ public class TsaGoodsController extends TsaBaseController {
 		String targetPath = GagaFileUtil.getConcatenationPath(env.getProperty("upload.excel.target.path"), "excel");
 		Collection<GagaMap> ecxelGoodsList = new ArrayList<>();
 
+		// 20210929 eskim (안전인증)
 		// 상품수장
 		// DB 처리 시 사용되는 파라미터명(셀명) 설정 -
 		String[] goodsNames = {"goodsCd", "goodsNm", "goodsTnm", "goodsSnm1", "itemkindCd", "seasonCd",
 			"sexGb", "goodsStatCd", "listPrice", "currPrice", "sellFeeRate", "goodsGb", "formalGb", "minOrdQty", "maxOrdQty", "dayMaxOrdQty",
 			"giftPackYn", "newCustOrdYn", "pntPrate", "prePpntUsableYn", "pntMrate", "preMpntUsableYn",
 			"returnableYn", "changeableYn", "taxGb", "ageGrpCd", "adultYn", "delvFeeCd", "optStr", "goodsContent",
+			"certTargetGb", "certFormGb", "certType", "certNum",
 			"niClsfCd", "niContent1", "niContent2",
 			"niContent3", "niContent4", "niContent5", "niContent6", "niContent7", "niContent8", "niContent9",
 			"niContent10", "niContent11", "niContent12", "niContent13", "niContent14", "niContent15", "niContent16",
@@ -3415,16 +3417,16 @@ public class TsaGoodsController extends TsaBaseController {
 		if (!StringUtils.isBlank(ifIncomelot.getCondition())) {
 			ifIncomelot.setConditionList(ifIncomelot.getCondition().replaceAll("\r", "").trim().split("\n"));
 		}
-		
+
 		// wms상품번호
 		if (!StringUtils.isBlank(ifIncomelot.getCondition2())) {
 			ifIncomelot.setConditionList2(ifIncomelot.getCondition2().replaceAll("\r", "").trim().split("\n"));
 		}
-		
-		// sku코드 
+
+		// sku코드
 		if (!StringUtils.isBlank(ifIncomelot.getCondition3())) {
 			ifIncomelot.setConditionList3(ifIncomelot.getCondition3().replaceAll("\r", "").trim().split("\n"));
-		}		
+		}
 
 		ifIncomelot.setPageable(new TscPageRequest(ifIncomelot.getPageNo() - 1, ifIncomelot.getPageSize()));
 		ifIncomelot.getPageable().setTotalCount(goodsService.getGoodsWmsIncomelotSkuListCount(ifIncomelot));

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

@@ -107,6 +107,8 @@ public class Goods extends TscBaseDomain {
 	private String chDataYn = "N";
 	private String chImgYn = "N";
 	private String chNotiYn = "N";
+	private String chSafeYn = "N";	// 20210929 eskim (안전인증)
+	private String choOtYn = "N";	// 20210929 eskim (안전인증)
 	private String chStockDataYn = "N";
 	private String chGoodsStatYn = "N";
 	private String chCfrmYn = "N";		//입점용추가
@@ -147,7 +149,7 @@ public class Goods extends TscBaseDomain {
 //	private String sizeSoldoutYn;
 	private String siteCd;
 	private int sellDay15Qty;
-	
+
 	private String certTargetGb;
 	private String certFormGb;
 	private String certType;

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

@@ -38,8 +38,11 @@ public class GoodsMass extends TscBaseDomain {
 //	private String distributionGb;	//유통구분(공콩코드 G065)
 	private String taxGb;			//과세구분(10:과세, 20:비과세)
 	private String ageGrpCd;		//상품연령코드(공통코드G023)
-	private String adultYn;			//성인용품여부 'Y', 'N'
+	private String certTargetGb;	//안전인증대상구분		// 20210929 eskim (안전인증)
+	private String certFormGb;		//안전인증형태구분
+	private String certType;		//안전인증타입구분
 	private String certNum;			//안전인증번호
+	private String adultYn;			//성인용품여부 'Y', 'N'
 
 	private String pntPrate;		//포인트적립율(PC)
 	private String pntMrate;		//포인트적립율(모바일)

+ 31 - 8
src/main/java/com/style24/persistence/mybatis/shop/TsaGoods.xml

@@ -3124,6 +3124,29 @@
 		</if>
 	</select>
 
+	<!-- 상품옵션 패턴조회 // 20210929 eskim (안전인증)-->
+	<select id="getGoodsOption" parameterType="Option" resultType="Option">
+		/* TssGoods.getGoodsOption */
+		SELECT GOODS_CD
+		     , OPT_CD
+		     , OPT_CD1
+		     , OPT_CD2
+		FROM TB_OPTION
+		WHERE  GOODS_CD = #{goodsCd}
+		ORDER BY DISP_ORD
+		LIMIT 1
+	</select>
+
+	<!-- 상품옵션 중복건수여부 확인 // 20210929 eskim (안전인증)-->
+	<select id="getGoodsOptionDupCountCheck" parameterType="Option" resultType="int">
+		/* TssGoods.getGoodsOptionDupCountCheck */
+		SELECT COUNT(*)
+		FROM TB_OPTION
+		WHERE  GOODS_CD = #{goodsCd}
+		AND OPT_CD1 = #{optCd1}
+		AND OPT_CD2 = #{optCd2}
+	</select>
+
 	<!-- 상품 가격 승인 목록 -->
 	<select id="getGoodsSupplyPriceList"  parameterType="GoodsSupplyPrice" resultType="GoodsSupplyPrice">
 		/* TsaGoods.getGoodsSupplyPriceList */
@@ -3968,7 +3991,7 @@
 			       UPPER(G.PRODUCT_CODE) LIKE CONCAT(UPPER(#{item}),'%')
 			      </foreach>
 			     )
-			      </when>			      
+			      </when>
 			      <otherwise>
 			AND 1 = 1
 			      </otherwise>
@@ -4015,7 +4038,7 @@
 			AND 1 = 1
 			      </otherwise>
 			    </choose>
-			</if>		
+			</if>
 		ORDER BY G.PRODUCT_NO DESC
 	</select>
 
@@ -5149,7 +5172,7 @@
 		        </foreach>
 		     )
 		     </if>
-		     
+
 		    <if test='conditionList2 != null and conditionList2.length>0'>
 		    AND (
 		        <foreach collection="conditionList2" item="item2" index="index" separator="or">
@@ -5157,7 +5180,7 @@
 		        </foreach>
 		     )
 		     </if>
-		     
+
 		    <if test='conditionList3 != null and conditionList3.length>0'>
 		    AND (
 		        <foreach collection="conditionList3" item="item3" index="index" separator="or">
@@ -5165,7 +5188,7 @@
 		        </foreach>
 		     )
 		     </if>
-		     		     
+
 	</select>
 
 	<!-- WMS입고단품목록 -->
@@ -5219,7 +5242,7 @@
 		              </foreach>
 		           )
 		           </if>
-		           
+
 				    <if test='conditionList2 != null and conditionList2.length>0'>
 				    AND (
 				        <foreach collection="conditionList2" item="item2" index="index" separator="or">
@@ -5227,14 +5250,14 @@
 				        </foreach>
 				     )
 				     </if>
-				     
+
 				    <if test='conditionList3 != null and conditionList3.length>0'>
 				    AND (
 				        <foreach collection="conditionList3" item="item3" index="index" separator="or">
 				       Z.SKUCODE LIKE CONCAT(UPPER(#{item3}),'%')
 				        </foreach>
 				     )
-				     </if>		           
+				     </if>
 		            ORDER BY LOTNO, DATEINCOME, SKUCODE
 		          ) Q
 		LIMIT #{pageable.limitStartRow} ,  #{pageable.pageSize}