Browse Source

[ST24PRJ-136] [MD개선][상품] 대량등록 이미지 > 덮는 형태로 수정(특정 권한만)

jmh 4 năm trước cách đây
mục cha
commit
95138b150e

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

@@ -36,5 +36,6 @@ public class GoodsImg extends TscBaseDomain {
 	private String mainColorYn;
 	private String colorEnm;
 	private String optCd1;
-
+	private String sysImgNmChangeYn;	// 동일한 파일명 덮어쓰기여부
+	private String sysImgNmChangePath;	// 동일한 파일명 저장된 경로 
 }

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

@@ -3537,4 +3537,21 @@
 		WHERE VIDEO_SQ = #{videoSq}
 	</update>
 	
+	<!-- 상품이미지 목록 -->
+	<select id="getGoodsImage" parameterType="GoodsImg" resultType="GoodsImg">
+	    /* TssGoods.getGoodsImage */
+	    SELECT GOODS_CD
+	         , COLOR_CD
+	         , DISP_ORD
+	         , SUBSTRING_INDEX(SYS_IMG_NM , '/', -1) AS SYS_IMG_NM
+	         , SYS_IMG_NM AS SYS_IMG_NM_CHANGE_PATH
+	         , DEFAULT_IMG_YN
+	         , MOUSEOVER_IMG_YN
+	         , EXTMALL_IMG_YN
+	    FROM   TB_GOODS_IMG
+	    WHERE  GOODS_CD = #{goodsCd}
+	    AND    SUBSTRING_INDEX(SYS_IMG_NM , '/', -1) = #{sysImgNm}
+	    LIMIT 1
+	</select>
+  
 </mapper>

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

@@ -804,4 +804,13 @@ public interface TssGoodsDao {
 	 * @since 2020. 11. 16
 	 */
 	void updateGoodsVideo(GoodsVideo goodsVideo);
+	
+	/**
+	 * 이미지 덮어쓰기 경로 확인
+	 *
+	 * @param goodsImg
+	 * @author jmh
+	 * @since 2021. 12. 14
+	 */
+	GoodsImg getGoodsImage(GoodsImg goodsImg);	
 }

+ 11 - 0
src/main/java/com/style24/scm/biz/service/TssGoodsService.java

@@ -4954,4 +4954,15 @@ public class TssGoodsService {
 
 		return cnt;
 	}
+	
+	/**
+	 * 이미지 덮어쓰기 경로 확인
+	 *
+	 * @param goodsImg
+	 * @author jmh
+	 * @since 2021. 12. 14
+	 */
+	public GoodsImg getGoodsImage(GoodsImg goodsImg) {
+		return goodsDao.getGoodsImage(goodsImg);
+	}
 }

+ 126 - 75
src/main/java/com/style24/scm/biz/web/TssGoodsController.java

@@ -893,6 +893,7 @@ public class TssGoodsController extends TssBaseController {
 
 		//순서 재정렬된 파일 목록
 		Collection<GoodsImg> resultGoodsImgList = new ArrayList<GoodsImg>();
+		Collection<GoodsImg> resultGoodsImgListDb = new ArrayList<GoodsImg>();
 		boolean procFlag = true;
 		int index = 0;
 
@@ -978,11 +979,22 @@ public class TssGoodsController extends TssBaseController {
 			String orgFile = goodsImg.getSysImgNm().substring(0, lastIdx);
 			String[] sysFileNmArr = orgFile.split("_");
 			String selfGoodsYn = "Y";
+			goodsImg.setSysImgNmChangeYn("N");
+			
 			// 촬영업체
 			if ("G001_E000".equals(TssSession.getInfo().getRoleCd())) {
 				goodsImg.setGoodsCd(sysFileNmArr[0]);
 				goodsImg.setColorCd(sysFileNmArr[1]);
 				goodsImg.setDispOrd(index);
+				
+				// 21.12.14 동일한 이미지명일 경우 파일만 덮어쓰기
+				GoodsImg overWriteImg = goodsService.getGoodsImage(goodsImg);
+				if (null != overWriteImg) {
+					if (!StringUtils.isBlank(overWriteImg.getSysImgNmChangePath())) {
+						goodsImg.setSysImgNmChangeYn("Y");
+						goodsImg.setSysImgNmChangePath(overWriteImg.getSysImgNmChangePath());
+					}
+				}
 			} else {
 				goodsImg.setGoodsCd(sysFileNmArr[0]);
 				goodsImg.setColorCd("XX");
@@ -1057,88 +1069,127 @@ public class TssGoodsController extends TssBaseController {
 					throw new IllegalStateException(goodsImg.getSysImgNm() + "의" + comGoodsCd + " 상품코드의  " + comGoodsColor + " 색상이  존재하지 않습니다.");
 				}
 			}
-
-			String newFilename = goodsImg.getSysImgNm();
-
-			//브랜드 폴더 확인
-			String goodsUploadPath = GagaFileUtil.getConcatenationPath(goodsTargetPath, brandDir); // 브랜드 폴더
-			File brandPath = new File(goodsUploadPath);
-			if (!brandPath.exists()) {
-				brandPath.mkdir();
-			}
-
-			goodsUploadPath = GagaFileUtil.getConcatenationPath(goodsUploadPath, GagaDateUtil.getToday());		//브랜드+/+YYYYMMDD(UPLOAD 일 )
-			String brandYmdDir = GagaFileUtil.getConcatenationPath(brandDir, GagaDateUtil.getToday());	//디비 저장용
-
-			File uniqueFile = GagaFileUtil.getUniqueFile(new File(GagaFileUtil.getConcatenationPath(goodsUploadPath, newFilename)));
-			File newFile = new File(GagaFileUtil.getConcatenationPath(goodsUploadPath, uniqueFile.getName()));
-			//log.debug("newFile.getPath(): {}", newFile.getPath());
-
-			// resizing 처리 시 오류가 발생할 경우 삭제하기 위해 설정
-			errorFileList.add(newFile);
-
-			File oldFile = new File(GagaFileUtil.getConcatenationPath(dextUploadPath, goodsImg.getSysImgNm()));
-			//log.debug("oldFile.getPath(): {}", oldFile.getPath());
-
-			File path = new File(goodsUploadPath);
-			if (!path.exists()) {
-				//log.info("mkdir ={}", goodsUploadPath);
-				path.mkdir();
-			}
-
-			boolean copyFlag = GagaFileUtil.copyFile(oldFile, newFile);
-			if (copyFlag) {
-				//기존이미지 삭제
-				GagaFileUtil.deleteFile(oldFile.getPath());
-			}
-
-			goodsImg.setDispOrd(index);
-			goodsImg.setOrgImgNm(GagaFileUtil.getConcatenationPath(brandYmdDir, newFile.getName()));
-			goodsImg.setSysImgNm(GagaFileUtil.getConcatenationPath(brandYmdDir, newFile.getName()));
-			goodsImg.setDefaultImgYn("N");
-			goodsImg.setMouseoverImgYn("N");
-			goodsImg.setExtmallImgYn("N");
-			goodsImg.setRegNo(TssSession.getInfo().getUserNo());
-
-			// 디비저장후 재작업 20210827
-//			// 첫번째 이미지이면 디폴트 이미지 설정
-//			if (index == 1) {
-//				goodsImg.setDefaultImgYn("Y");
-//			}
-//
-//			// 두번째 이미지이면 마우스오버 이미지 설정
-//			if (index == 2) {
-//				goodsImg.setMouseoverImgYn("Y");
-//			}
-
-			Image srcImg = getImageObject(newFile);
-			int width = srcImg.getWidth(null);
-			int height = srcImg.getHeight(null);
-
-//
-			if (newFile.getName().contains("_X1")) {
-//				if (width != height) {
-				if (width == 1000 && height == 1000) {
-					// 외부몰연동용 이미지로 설정
-					goodsImg.setExtmallImgYn("Y");
-				}else {
-					deleteErrorFileList(errorFileList);
-					deleteErrorFileList(errorFileDextList);
-					throw new IllegalStateException(comGoodsCd + " 상품코드의 외부몰용 상품이미지는 정사각형(1000x1000)이 아닙니다.");
+			
+			if(!"Y".equals(goodsImg.getSysImgNmChangeYn())) {
+				
+				String newFilename = goodsImg.getSysImgNm();
+	
+				//브랜드 폴더 확인
+				String goodsUploadPath = GagaFileUtil.getConcatenationPath(goodsTargetPath, brandDir); // 브랜드 폴더
+				File brandPath = new File(goodsUploadPath);
+				if (!brandPath.exists()) {
+					brandPath.mkdir();
+				}
+	
+				goodsUploadPath = GagaFileUtil.getConcatenationPath(goodsUploadPath, GagaDateUtil.getToday());		//브랜드+/+YYYYMMDD(UPLOAD 일 )
+				String brandYmdDir = GagaFileUtil.getConcatenationPath(brandDir, GagaDateUtil.getToday());	//디비 저장용
+	
+				File uniqueFile = GagaFileUtil.getUniqueFile(new File(GagaFileUtil.getConcatenationPath(goodsUploadPath, newFilename)));
+				File newFile = new File(GagaFileUtil.getConcatenationPath(goodsUploadPath, uniqueFile.getName()));
+				//log.debug("newFile.getPath(): {}", newFile.getPath());
+	
+				// resizing 처리 시 오류가 발생할 경우 삭제하기 위해 설정
+				errorFileList.add(newFile);
+	
+				File oldFile = new File(GagaFileUtil.getConcatenationPath(dextUploadPath, goodsImg.getSysImgNm()));
+				//log.debug("oldFile.getPath(): {}", oldFile.getPath());
+	
+				File path = new File(goodsUploadPath);
+				if (!path.exists()) {
+					//log.info("mkdir ={}", goodsUploadPath);
+					path.mkdir();
+				}
+	
+				boolean copyFlag = GagaFileUtil.copyFile(oldFile, newFile);
+				if (copyFlag) {
+					//기존이미지 삭제
+					GagaFileUtil.deleteFile(oldFile.getPath());
+				}
+	
+				goodsImg.setDispOrd(index);
+				goodsImg.setOrgImgNm(GagaFileUtil.getConcatenationPath(brandYmdDir, newFile.getName()));
+				goodsImg.setSysImgNm(GagaFileUtil.getConcatenationPath(brandYmdDir, newFile.getName()));
+				goodsImg.setDefaultImgYn("N");
+				goodsImg.setMouseoverImgYn("N");
+				goodsImg.setExtmallImgYn("N");
+				goodsImg.setRegNo(TssSession.getInfo().getUserNo());
+	
+				// 디비저장후 재작업 20210827
+	//			// 첫번째 이미지이면 디폴트 이미지 설정
+	//			if (index == 1) {
+	//				goodsImg.setDefaultImgYn("Y");
+	//			}
+	//
+	//			// 두번째 이미지이면 마우스오버 이미지 설정
+	//			if (index == 2) {
+	//				goodsImg.setMouseoverImgYn("Y");
+	//			}
+	
+				Image srcImg = getImageObject(newFile);
+				int width = srcImg.getWidth(null);
+				int height = srcImg.getHeight(null);
+	
+	//
+				if (newFile.getName().contains("_X1")) {
+	//				if (width != height) {
+					if (width == 1000 && height == 1000) {
+						// 외부몰연동용 이미지로 설정
+						goodsImg.setExtmallImgYn("Y");
+					}else {
+						deleteErrorFileList(errorFileList);
+						deleteErrorFileList(errorFileDextList);
+						throw new IllegalStateException(comGoodsCd + " 상품코드의 외부몰용 상품이미지는 정사각형(1000x1000)이 아닙니다.");
+					}
+				}
+				// 오류가 발생했으므로
+	//			deleteErrorFileList(errorFileList);
+	//			deleteErrorFileList(errorFileDextList);
+	//			throw new IllegalStateException(goodsImg.getSysImgNm() + " 상품이미지 파일의 크기(" + width + "*" + height + ")가 맞지 않습니다. (올바른 크기: 1079*1499, 750*1041, 1000*1000)");
+				resultGoodsImgListDb.add(goodsImg);
+				index++;
+			}else {
+				// 21.12.14 동일한 이미지명일 경우 파일만 덮어쓰기(db 작업 안함)
+				
+				// 1. 현재 저장되어있는 이미지
+				String goodsUploadPath = GagaFileUtil.getConcatenationPath(goodsTargetPath+"/"+goodsImg.getSysImgNmChangePath());
+				
+				// 2. 현재 저장되어있는 파일 
+				File newFile = new File(GagaFileUtil.getConcatenationPath(goodsUploadPath));
+				
+				// 3. dex 업로드된 파일 
+				File oldFile = new File(GagaFileUtil.getConcatenationPath(dextUploadPath, goodsImg.getSysImgNm()));
+				
+				// 4. 외부몰연동용 이미지 사이즈 확인
+				Image srcImg = getImageObject(oldFile);
+				int width = srcImg.getWidth(null);
+				int height = srcImg.getHeight(null);
+	
+				if (oldFile.getName().contains("_X1")) {
+					if (width == 1000 && height == 1000) {
+						// 외부몰연동용 이미지로 설정
+						goodsImg.setExtmallImgYn("Y");
+					}else {
+						GagaFileUtil.deleteFile(oldFile.getPath());
+						throw new IllegalStateException(comGoodsCd + " 상품코드의 외부몰용 상품이미지는 정사각형(1000x1000)이 아닙니다.");
+					}
+				}
+				
+				// 5. 기존이미지 삭제
+				GagaFileUtil.deleteFile(goodsUploadPath);
+								
+				// 6. dex 파일 카피 & 삭제
+				boolean copyFlag = GagaFileUtil.copyFile(oldFile, newFile);
+				if (copyFlag) {
+					//기존이미지 삭제
+					GagaFileUtil.deleteFile(oldFile.getPath());
 				}
 			}
-			// 오류가 발생했으므로
-//			deleteErrorFileList(errorFileList);
-//			deleteErrorFileList(errorFileDextList);
-//			throw new IllegalStateException(goodsImg.getSysImgNm() + " 상품이미지 파일의 크기(" + width + "*" + height + ")가 맞지 않습니다. (올바른 크기: 1079*1499, 750*1041, 1000*1000)");
-
-			index++;
 		}
 
 		//log.debug("resultGoodsImgList: {}", resultGoodsImgList);
 
 		// 상품이미지 저장 처리
-		goodsService.saveGoodsImageMassList(resultGoodsImgList);
+		goodsService.saveGoodsImageMassList(resultGoodsImgListDb);
 
 		return super.ok(message.getMessage("SUCC_0007"));
 	}

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

@@ -33,7 +33,7 @@ upload:
         target.path: /WIDE/workspace/files/data/style24/Upload/ProductImage
         max.size: 10
         allow.extension: jpg|gif|jpeg
-        view: //image.istyle24.com/Upload/ProductImage
+        view: //ldimage.style24.com/Upload/ProductImage
     image:
         target.path: /WIDE/workspace/files/data/style24
         max.size: 10

+ 2 - 2
src/main/webapp/dx5/dextuploadx5-configuration.js

@@ -8,11 +8,11 @@
 
     var gAuthkey = '';
     if (location.host.indexOf("ld") > -1) {
-    	gAuthkey = "8CtMKeRqXsnEPV4h6MT0jcyRMLAuqxXi/qZyQtgAmk/y1bubNPhWZp/4/4hAvC51h3I8GowuFHdnzAF4be2dv79kJkBcyEq0oRCRLGYkIthNDgEkEi1YmddXAeDTukLmmloTEMx+rW7KtoPNAw+CofGT9UUfboiMzSkKANtVGM4=";
+    	gAuthkey = "1YwrS0JOpQ92ehK6l+CcS5s5mOezjWLH9g+onvBv84EPOEKr+han1BM3n+RvIhQHLEd5pEeSH02AJfd4y/j9EzZntyT0P/jvjvI8OjrGWGHmq/utqQ1IbxR+c30V8MJd5pfrz+/ktNHaGAfMA5w9rD65mHZ5C8SvKlEaJC1kz14=";
     } else if (location.host.indexOf("lp") > -1) {
     	gAuthkey = "hr0AqviRLOCsbiIneYWPXdkhMn8awpDYw6HPDAvYo/cKKYVOyyuonGO2qFLlmur6svsAV6tkMZY5N1Iygq42R74h7AFlzk8xhM9YzIP8ySVhEN2LFlRxgsm/GQyLrzNoS1BwcHSYyOvAfzBCAVu6f8ubLw68bOFWivcvJKAz91I=";
     } else if (location.host.indexOf("td") > -1) {
-    	gAuthkey = "kM+8dOC7jvDE5bunmwIKWOCzXbhhPcOC3tkXrlZR+SVG7mnKXZER/Ev47J+6jsUulcaOoa7IoAJ/2bb7TbMys0qNbGgtVdAplH2ciGkr+3Jh6vLe9s8ZqvNVyXsuhdu5npkP572hulN0Nj7vKQEsMFcAREGl9wHD8gYKKPRBClc=";
+    	gAuthkey = "CV+2j735fcgm3BXE2rg6jCbg187fYGUx8BC7Xgfg7JmEhOdbkJCl7hEIW8ZRAjFCTy/KutNd2PGhELDGvXL2Z90/tCom5e8/+6tvVfpeSzacvz5lzwpApFzZ71w7C2eLY/KanASGos5zWn3wHOnKmfGKNcjPkuGpSyYvRtjlcwQ=";
     } else if (location.host.indexOf("dev") > -1) {
     	gAuthkey = "hr0AqviRLOCsbiIneYWPXdkhMn8awpDYw6HPDAvYo/cKKYVOyyuonGO2qFLlmur6svsAV6tkMZY5N1Iygq42R74h7AFlzk8xhM9YzIP8ySVhEN2LFlRxgsm/GQyLrzNoS1BwcHSYyOvAfzBCAVu6f8ubLw68bOFWivcvJKAz91I=";
     } else if (location.host.indexOf("qas") > -1) {