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

Merge remote-tracking branch 'origin/develop' into jsh77b

tsit14 5 лет назад
Родитель
Сommit
71e96a3fc2
51 измененных файлов с 930 добавлено и 203 удалено
  1. 7 0
      pom.xml
  2. 91 0
      src/main/java/com/style24/admin/biz/dao/TsaGiftCardDao.java
  3. 1 1
      src/main/java/com/style24/admin/biz/service/TsaBusinessService.java
  4. 0 6
      src/main/java/com/style24/admin/biz/service/TsaCardPromotionService.java
  5. 17 0
      src/main/java/com/style24/admin/biz/service/TsaCustomerService.java
  6. 10 15
      src/main/java/com/style24/admin/biz/service/TsaDeliveryService.java
  7. 151 0
      src/main/java/com/style24/admin/biz/service/TsaGiftCardService.java
  8. 4 10
      src/main/java/com/style24/admin/biz/service/TsaGoodsService.java
  9. 1 1
      src/main/java/com/style24/admin/biz/service/TsaStockService.java
  10. 7 3
      src/main/java/com/style24/admin/biz/web/TsaGoodsController.java
  11. 84 11
      src/main/java/com/style24/admin/biz/web/TsaMarketingController.java
  12. 11 9
      src/main/java/com/style24/admin/biz/web/TsaStockController.java
  13. 1 0
      src/main/java/com/style24/persistence/domain/Coupon.java
  14. 182 0
      src/main/java/com/style24/persistence/mybatis/shop/TsaGiftCard.xml
  15. 32 9
      src/main/java/com/style24/persistence/mybatis/shop/TsaGoods.xml
  16. 24 2
      src/main/java/com/style24/persistence/mybatis/shop/TsaStock.xml
  17. BIN
      src/main/webapp/WEB-INF/lib/gagaframework-shoplinker-1.7-RELEASE.jar
  18. 3 3
      src/main/webapp/WEB-INF/views/customer/CustomerDetailForm.html
  19. 1 1
      src/main/webapp/WEB-INF/views/customer/GoodsQnaDetailForm.html
  20. 1 1
      src/main/webapp/WEB-INF/views/customer/GoodsQnaForm.html
  21. 2 2
      src/main/webapp/WEB-INF/views/customer/OneToOneQnaDetailForm.html
  22. 1 1
      src/main/webapp/WEB-INF/views/display/GoodsCategoryForm.html
  23. 1 1
      src/main/webapp/WEB-INF/views/display/GoodsDispOrdChangePopupForm.html
  24. 7 7
      src/main/webapp/WEB-INF/views/display/MainGnbContentsPopupForm.html
  25. 2 2
      src/main/webapp/WEB-INF/views/display/MainMultiContentsPopupForm.html
  26. 1 1
      src/main/webapp/WEB-INF/views/goods/GoodsDealForm.html
  27. 2 2
      src/main/webapp/WEB-INF/views/goods/GoodsDetailForm.html
  28. 1 1
      src/main/webapp/WEB-INF/views/goods/GoodsDetailSizeStockForm.html
  29. 1 1
      src/main/webapp/WEB-INF/views/goods/GoodsEpSkipForm.html
  30. 1 1
      src/main/webapp/WEB-INF/views/goods/GoodsFreeGoodsForm.html
  31. 2 2
      src/main/webapp/WEB-INF/views/goods/GoodsItemkindForm.html
  32. 6 5
      src/main/webapp/WEB-INF/views/goods/GoodsListForm.html
  33. 1 1
      src/main/webapp/WEB-INF/views/goods/GoodsNaverPriceForm.html
  34. 1 1
      src/main/webapp/WEB-INF/views/goods/GoodsPopupListForm.html
  35. 1 1
      src/main/webapp/WEB-INF/views/goods/GoodsPriceReserveForm.html
  36. 1 1
      src/main/webapp/WEB-INF/views/goods/GoodsQuikDeliverySkipForm.html
  37. 2 2
      src/main/webapp/WEB-INF/views/goods/GoodsReinboundInformForm.html
  38. 1 1
      src/main/webapp/WEB-INF/views/goods/GoodsReserveSellForm.html
  39. 1 1
      src/main/webapp/WEB-INF/views/goods/GoodsSetForm.html
  40. 1 1
      src/main/webapp/WEB-INF/views/goods/GoodsTitleReserveForm.html
  41. 1 1
      src/main/webapp/WEB-INF/views/goods/GoodsWmsIncomelotForm.html
  42. 11 4
      src/main/webapp/WEB-INF/views/marketing/CouponListForm.html
  43. 175 0
      src/main/webapp/WEB-INF/views/marketing/GiftCardListForm.html
  44. 1 1
      src/main/webapp/WEB-INF/views/marketing/PlanCornerListForm.html
  45. 1 1
      src/main/webapp/WEB-INF/views/marketing/ReviewDetailForm.html
  46. 1 1
      src/main/webapp/WEB-INF/views/marketing/ReviewForm.html
  47. 1 1
      src/main/webapp/WEB-INF/views/marketing/SocialShoppingListForm.html
  48. 5 12
      src/main/webapp/WEB-INF/views/stock/GoodsSizeStockForm.html
  49. 69 74
      src/main/webapp/dx5/dextuploadx5-configuration.js
  50. BIN
      src/main/webapp/image/no.png
  51. 1 1
      src/main/webapp/ux/js/admin.popup.js

+ 7 - 0
pom.xml

@@ -116,6 +116,13 @@
 			<scope>system</scope>
 			<systemPath>${basedir}/src/main/webapp/WEB-INF/lib/gagaframework-excel-1.7.1-RELEASE.jar</systemPath>
 		</dependency>
+		<dependency>
+			<groupId>com.gagaframework</groupId>
+			<artifactId>gagaframework-shoplinker</artifactId>
+			<version>1.7-RELEASE</version>
+			<scope>system</scope>
+			<systemPath>${basedir}/src/main/webapp/WEB-INF/lib/gagaframework-shoplinker-1.7-RELEASE.jar</systemPath>
+		</dependency>
 
 		<!-- /// KCP -->
 		<dependency>

+ 91 - 0
src/main/java/com/style24/admin/biz/dao/TsaGiftCardDao.java

@@ -0,0 +1,91 @@
+package com.style24.admin.biz.dao;
+
+import com.style24.persistence.domain.GiftCard;
+import org.springframework.stereotype.Repository;
+
+import com.style24.core.support.annotation.ShopDs;
+
+import java.util.Collection;
+
+/**
+ * 상품권 Dao
+ *
+ * @author jsshin
+ * @since 2021. 05. 12
+ */
+
+@ShopDs
+@Repository
+public interface TsaGiftCardDao {
+
+	/**
+	 * 상품권 정보 저장
+	 *
+	 * @param giftCard - 상품권, 고객 정보
+	 * @return int - 결과
+	 * @author jsshin
+	 * @since 2021. 05. 12
+	 */
+	int createGfcdBulkReg(GiftCard giftCard);
+
+	/**
+	 * 상품권API 결과 저장
+	 *
+	 * @param giftCard - 상품권, 고객 정보
+	 * @return int - 결과
+	 * @author jsshin
+	 * @since 2021. 05. 12
+	 */
+	int createGiftcardApi(GiftCard giftCard);
+
+	/**
+	 * 고객 상품권 등록
+	 *
+	 * @param giftCard - 상품권, 고객 정보
+	 * @return int - 결과
+	 * @author jsshin
+	 * @since 2021. 05. 12
+	 */
+	int createGiftcardUseConfirm(GiftCard giftCard);
+
+	/**
+	 * 고객 상품권 정보 이력
+	 *
+	 * @param giftCard - 상품권, 고객 정보
+	 * @return int - 결과
+	 * @author jsshin
+	 * @since 2021. 05. 12
+	 */
+	int createCustGiftcardHistory(GiftCard giftCard);
+
+	/**
+	 * 상품권 대량등록 결과
+	 *
+	 * @param giftCard - 상품권, 고객 정보
+	 * @return int - 결과
+	 * @author jsshin
+	 * @since 2021. 05. 12
+	 */
+	int updateGfcdBulkReg(GiftCard giftCard);
+
+	/**
+	 * 상품권 대량 등록수
+	 *
+	 * @param giftCard - 상품권, 고객 정보
+	 * @author jsshin
+	 * @since 2021. 5. 12
+	 */
+	int getGiftCardListCount(GiftCard giftCard);
+
+
+	/**
+	 * 상품권 대량등록 목록
+	 *
+	 * @param giftCard - 상품권, 고객 정보
+	 * @author jsshin
+	 * @since 2021. 5. 12
+	 */
+	 Collection<GiftCard> getGiftCardList(GiftCard giftCard);
+
+
+}

+ 1 - 1
src/main/java/com/style24/admin/biz/service/TsaBusinessService.java

@@ -281,7 +281,7 @@ public class TsaBusinessService {
 		} else { // 수정
 			businessDao.updateBrand(brand);
 		}
-		log.info("brand ={}", brand);
+		//log.info("brand ={}", brand);
 		if (brandSupplyList != null && !brandSupplyList.isEmpty()) {
 			for (Brand brandSupply : brandSupplyList) {
 				brandSupply.setRegNo(TsaSession.getInfo().getUserNo());

+ 0 - 6
src/main/java/com/style24/admin/biz/service/TsaCardPromotionService.java

@@ -61,7 +61,6 @@ public class TsaCardPromotionService {
 	public void saveCardInterest(CardPromotion cardPromotion) {
 
 		Integer userNo = TsaSession.getInfo().getUserNo();
-		log.info("[saveCardInterest] cardPromotion = {}", cardPromotion);
 		// 카드 프로모션 저장
 		cardPromotion.setRegNo(userNo);
 		cardPromotion.setUpdNo(userNo);
@@ -70,7 +69,6 @@ public class TsaCardPromotionService {
 		cardPromotion.setPrmtEdd(cardPromotion.getPrmtEdd().replace("-", ""));
 
 		cardPromotionDao.saveCardPromotion(cardPromotion);
-		log.info("[saveCardInterest] cardPromotion 2  = {}", cardPromotion);
 		// 카드 프로모션 행사조건 저장
 		if ("B".equals(cardPromotion.getPrmtGb())) {
 			if (cardPromotion.getArrMinNoItrt().length > 0) {
@@ -92,7 +90,6 @@ public class TsaCardPromotionService {
 					}
 
 					cardPromotionDao.saveCardPromotionCondition(cardPromotionCondition);
-					log.info("[saveCardInterest] cardPromotionCondition 2  = {}", cardPromotionCondition);
 					// 카드 프로모션 카드 삭제
 					cardPromotionDao.deleteCardPromotionTarget(cardPromotionCondition.getCardPrmtCdtSq());
 
@@ -131,7 +128,6 @@ public class TsaCardPromotionService {
 			}
 
 			cardPromotionDao.saveCardPromotionCondition(cardPromotionCondition);
-			log.info("[saveCardInterest] cardPromotionCondition 2  = {}", cardPromotionCondition);
 			// 카드 프로모션 카드 삭제
 			cardPromotionDao.deleteCardPromotionTarget(cardPromotionCondition.getCardPrmtCdtSq());
 
@@ -207,7 +203,6 @@ public class TsaCardPromotionService {
 
 		cardPromotion.setCardPrmtCdtList(cardPrmtCdtList);
 
-		log.info("[getCardPromotion] cardPromotion = {}", cardPromotion);
 		return cardPromotion;
 	}
 
@@ -317,7 +312,6 @@ public class TsaCardPromotionService {
 
 		cardPromotion.setCardPrmtCdtList(cardPrmtCdtList);
 
-		log.info("[getCardPromotion] cardPromotion = {}", cardPromotion);
 		return cardPromotion;
 	}
 }

+ 17 - 0
src/main/java/com/style24/admin/biz/service/TsaCustomerService.java

@@ -453,4 +453,21 @@ public class TsaCustomerService {
 		customer.setUpdNo(userNo);
 		return coreCustomerService.saveDormantCustomerRelease(customer);
 	}
+
+	/**
+	 * 회원 정보 조회
+	 * @param custId - 고객 아이디
+	 * @return Customer
+	 * @author jsshin
+	 * @since 2021. 05. 13
+	 */
+	public Customer getCustomerInfoByCustId(String custId) {
+		Customer customer = new Customer();
+		customer.setSiteCd(TscConstants.Site.STYLE24.value());
+		customer.setCustId(custId);
+		customer.setCustStat(TscConstants.CustStat.ACTIVE.value());
+		return coreCustomerService.getCustomerInfo(customer);
+	}
+
+
 }

+ 10 - 15
src/main/java/com/style24/admin/biz/service/TsaDeliveryService.java

@@ -2,32 +2,27 @@ package com.style24.admin.biz.service;
 
 import java.util.ArrayList;
 import java.util.Collection;
-import java.util.List;
 
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.transaction.annotation.Transactional;
+import org.springframework.core.env.Environment;
 import org.springframework.stereotype.Service;
-import org.apache.commons.lang3.StringUtils;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.client.RestTemplate;
 
 import com.fasterxml.jackson.databind.ObjectMapper;
-import com.gagaframework.web.parameter.GagaMap;
 import com.style24.admin.biz.dao.TsaDeliveryDao;
+import com.style24.admin.support.env.TsaConstants;
 import com.style24.admin.support.security.session.TsaSession;
 import com.style24.admin.support.util.TsitUtil;
-import com.style24.admin.support.env.TsaConstants;
-import com.style24.persistence.domain.Delivery;
-import com.style24.core.biz.service.TscWmsService;
+import com.style24.core.biz.dao.TscOrderDao;
 import com.style24.core.biz.service.TscDeliveryService;
-import com.style24.persistence.domain.WmsDelivery;
+import com.style24.core.biz.service.TscWmsService;
 import com.style24.core.support.env.TscConstants.OrderDetailStat;
 import com.style24.core.support.message.TscMessageByLocale;
-import com.style24.core.biz.dao.TscOrderDao;
+import com.style24.persistence.domain.Delivery;
 import com.style24.persistence.domain.Order;
-import org.springframework.web.client.RestTemplate;
-import org.springframework.core.env.Environment;
-import java.io.IOException;
-
-
+import com.style24.persistence.domain.WmsDelivery;
 
 import lombok.extern.slf4j.Slf4j;
 
@@ -243,7 +238,7 @@ public class TsaDeliveryService {
 			ordSoldoutList.add(param);
 			
 		}
-		coreDeliveryService.cancelSoldout(ordSoldoutList,userNo);
+		coreDeliveryService.cancelSoldout(ordSoldoutList,userNo, "N"); 
 	}	
 	
 	

+ 151 - 0
src/main/java/com/style24/admin/biz/service/TsaGiftCardService.java

@@ -0,0 +1,151 @@
+package com.style24.admin.biz.service;
+
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.gagaframework.web.parameter.GagaMap;
+import com.style24.admin.biz.dao.TsaGiftCardDao;
+import com.style24.admin.support.security.session.TsaSession;
+import com.style24.core.biz.thirdparty.Yes24Giftcard;
+import com.style24.core.support.env.TscConstants;
+import com.style24.persistence.domain.Customer;
+import com.style24.persistence.domain.GiftCard;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.Collection;
+
+/**
+ * 상품권 Service
+ *
+ * @author jsshin
+ * @since 2021. 05. 12
+ */
+@Service
+@Slf4j
+public class TsaGiftCardService {
+
+	@Autowired
+	private TsaGiftCardDao giftCardDao;
+
+	@Autowired
+	private TsaCustomerService customerService;
+
+	@Autowired
+	private Yes24Giftcard yes24Giftcard;
+
+	@Autowired
+	private ObjectMapper objectMapper;
+
+
+	/**
+	 * 상품권 대량 등록수
+	 *
+	 * @param giftCard - 상품권, 고객 정보
+	 * @author jsshin
+	 * @since 2021. 5. 12
+	 */
+	public int getGiftCardListCount(GiftCard giftCard) {
+		return giftCardDao.getGiftCardListCount(giftCard);
+	}
+
+	/**
+	 * 상품권 대량등록 목록
+	 *
+	 * @param giftCard - 상품권, 고객 정보
+	 * @author jsshin
+	 * @since 2021. 5. 12
+	 */
+	public Collection<GiftCard> getGiftCardList(GiftCard giftCard) {
+		return giftCardDao.getGiftCardList(giftCard);
+	}
+
+	/**
+	 * 상품권 저장
+	 *
+	 * @param gagaMap - 상품권, 고객 정보
+	 * @author jsshin
+	 * @throws Exception
+	 * @since 2021. 5. 12
+	 */
+	@Transactional("shopTxnManager")
+	public void saveGiftcardUseConfirm(GagaMap gagaMap) throws Exception {
+		Integer userNo = TsaSession.getInfo().getUserNo();
+		String ip = TsaSession.getIpAddress();
+		String resultMsg;
+		GiftCard giftCard = objectMapper.convertValue(gagaMap, GiftCard.class);
+
+		giftCard.setRegNo(userNo);
+		giftCard.setUpdNo(userNo);
+		giftCard.setIpAddr(ip);
+
+		// 1. 엑셀 내용 데이터 생성
+		giftCardDao.createGfcdBulkReg(giftCard);
+
+		// 2. 활동회원 확인
+		Customer customer = customerService.getCustomerInfoByCustId(giftCard.getCustId().trim());
+
+		// 3. 유효한 회원이면
+		if (customer != null) {
+			Integer custNo = customer.getCustNo();
+			String pubNo = giftCard.getGfcdNo().trim();
+			// 상품권 API 호출
+			String result = yes24Giftcard.soapDataTransfer(pubNo, ip, custNo);
+
+			giftCard.setGfcdNo(pubNo);
+			giftCard.setCustNo(custNo);
+
+			if ("01".equals(result)) {
+				giftCard.setResultVal(result);
+				resultMsg = "존재하지 않는 상품권";
+			} else if ("02".equals(result)) {
+				giftCard.setResultVal(result);
+				resultMsg = "이미 등록된 상품권";
+			} else if ("03".equals(result)) {
+				giftCard.setResultVal(result);
+				resultMsg = "삭제된 상품권";
+			} else if ("04".equals(result)) {
+				giftCard.setResultVal(result);
+				resultMsg = "기간이 만료된 상품권";
+			} else if ("99".equals(result)) {
+				giftCard.setResultVal(result);
+				resultMsg = "시스템 오류";
+			} else {
+				giftCard.setResultVal("00");
+				resultMsg = "상품권등록 성공";
+			}
+			// 상품권 API 이력 저장
+			giftCardDao.createGiftcardApi(giftCard);
+
+			// 성공일 경우
+			if ("00".equals(giftCard.getResultVal())) {
+				String[] param = result.split("[|]");
+				// [2021-04-01, 오전, 12:00:00]
+				String[] param2 = param[2].split(" ");
+				String[] param3 = param[3].split(" ");
+
+				// 고객 상품권 등록
+				giftCard.setGfcdNm("YES24상품권");
+				giftCard.setChgGfcdAmt(Integer.parseInt(param[1])); // 승인금액
+				giftCard.setRmGfcdAmt(Integer.parseInt(param[1])); // 승인금액
+				giftCard.setUseStDate(param2[0]);
+				giftCard.setUseExpDate(param3[0]);
+				giftCardDao.createGiftcardUseConfirm(giftCard);
+
+				// 고객 상품권 이력 등록
+				giftCard.setOccurGb(TscConstants.GiftCardOccurGb.REGISTER_GIFTCARD.value());
+				giftCard.setOccurDtlDesc("상품권등록");
+				giftCard.setGfcdAmt(Integer.parseInt(param[1]));
+				giftCardDao.createCustGiftcardHistory(giftCard);
+			}
+		} else {
+			resultMsg = "존재하지 않는 회원";
+		}
+
+		giftCard.setResultMsg(resultMsg);
+		giftCardDao.updateGfcdBulkReg(giftCard);
+
+	}
+
+}

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

@@ -117,7 +117,7 @@ public class TsaGoodsService {
 
 	private static final String SELF_GOOODS_AFTER = "STY";
 	
-	private static final int EXCEL_ROW_COUNT = 1000;
+	private static final int EXCEL_ROW_COUNT = 500;
 
 	/**
 	 * 상품 할인율 계산
@@ -388,7 +388,7 @@ public class TsaGoodsService {
 
 		if ("Y".equals(goodsSearch.getImageViewYn())) {
 			// 헤더 title 설정
-			String[] listTitles = {"이미지", "상품코드", "업체명", "브랜드명", "상품명", "품목", "재고", "상품상태", "스타일년도", "시즌",
+			String[] listTitles = {"이미지", "상품코드", "업체명", "브랜드명", "상품명", "품목", "전시재고", "상품상태", "스타일년도", "시즌",
 				"정상가", "판매가", "할인율", "가격변경일", "ERP재고연동여부", "정상이월구분", "반품가능 여부", "승인일시"};
 
 			// DB 처리 시 사용되는 파라미터명(셀명) 설정
@@ -416,12 +416,6 @@ public class TsaGoodsService {
 					}
 				}
 			}
-
-			log.info("[ excelFilenameWithPath] {}", excelFilenameWithPath);
-			log.info("[ dataList] {}", dataList.size());
-			log.info("[ listTitles] {}", listTitles);
-			log.info("[ cellNames] {}", cellNames);
-			log.info("[ cellTypes] {}", cellTypes);
 			
 			try {
 				GagaExcelUtil.createExcel(excelFilenameWithPath, dataList, "상품 정보", listTitles, cellNames, cellTypes, TsaConstants.EXCEL_FOOTER_TITLE);
@@ -431,7 +425,7 @@ public class TsaGoodsService {
 
 		} else {
 			// 헤더 title 설정
-			String[] listTitles = {"상품코드", "업체명", "브랜드명", "상품명", "품목", "재고", "상품상태", "스타일년도",
+			String[] listTitles = {"상품코드", "업체명", "브랜드명", "상품명", "품목", "전시재고", "상품상태", "스타일년도",
 				"시즌", "정상가", "판매가", "할인율", "가격변경일", "ERP재고연동여부", "정상이월구분", "반품가능 여부", "승인일시"};
 
 			// DB 처리 시 사용되는 파라미터명(셀명) 설정
@@ -447,7 +441,7 @@ public class TsaGoodsService {
 				GagaExcelConstants.CellType.CHAR_RIGHT.name(), GagaExcelConstants.CellType.CHAR_RIGHT.name(),
 				GagaExcelConstants.CellType.CHAR_CENTER.name(), GagaExcelConstants.CellType.CHAR_CENTER.name(),
 				GagaExcelConstants.CellType.CHAR_CENTER.name(), GagaExcelConstants.CellType.CHAR_CENTER.name(),
-				GagaExcelConstants.CellType.CHAR_CENTER.name(), GagaExcelConstants.CellType.CHAR_CENTER.name()};
+				GagaExcelConstants.CellType.CHAR_CENTER.name()};
 
 			Collection<GagaMap> dataList = goodsDao.getGoodsInfoExcelList(goodsSearch);
 

+ 1 - 1
src/main/java/com/style24/admin/biz/service/TsaStockService.java

@@ -50,7 +50,7 @@ public class TsaStockService {
 	@Autowired
 	private TsaGoodsService goodsService;
 
-	private static final int EXCEL_ROW_COUNT = 1000;
+	private static final int EXCEL_ROW_COUNT = 500;
 	
 	/**
 	 * 상품 사이즈별 재고 현황 목록 건수

+ 7 - 3
src/main/java/com/style24/admin/biz/web/TsaGoodsController.java

@@ -106,7 +106,7 @@ public class TsaGoodsController extends TsaBaseController {
 	@Autowired
 	private ObjectMapper mapper;
 
-	private static final int EXCEL_ROW_COUNT = 1000;
+	private static final int EXCEL_ROW_COUNT = 500;
 	
 	/**
 	 * 품목관리 화면
@@ -496,7 +496,7 @@ public class TsaGoodsController extends TsaBaseController {
 	@ResponseBody
 	public GagaMap getGoodsList(@RequestBody GoodsSearch goodsSearch) {
 
-		log.info("[getGoodsList] goodsSearch = {}", goodsSearch);
+		//log.info("[getGoodsList] goodsSearch = {}", goodsSearch);
 		GagaMap result = new GagaMap();
 
 		// 입점업체담당자는 업체코드 설정
@@ -600,8 +600,12 @@ public class TsaGoodsController extends TsaBaseController {
 				throw new IllegalStateException("업체코드 검색중 오류로 인해 조회되지 않았습니다.");
 			}
 		}
+
+		goodsSearch.setRegNo(TsaSession.getInfo().getUserNo()); // 엑셀조회시 로그인 사용자의 엑셀 상품조회시 사용
+		goodsSearch.setPageable(new TscPageRequest(goodsSearch.getPageNo() - 1, goodsSearch.getPageSize()));
+		goodsSearch.getPageable().setTotalCount(goodsService.getGoodsListCount(goodsSearch));
 		
-		log.info("[downloadGoodsInfoExcelList] goodsSearch = {}", goodsSearch);
+		//log.info("[downloadGoodsInfoExcelList] goodsSearch = {}", goodsSearch);
 
 		// 대용량엑셀파일다운로드는 이런 식으로 ...
 		goodsService.getGoodsInfoExcelList(goodsSearch, excelFilenameWithPath);

+ 84 - 11
src/main/java/com/style24/admin/biz/web/TsaMarketingController.java

@@ -8,6 +8,14 @@ import java.util.Collection;
 import java.util.Date;
 import java.util.Iterator;
 
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.style24.admin.biz.dao.TsaGiftCardDao;
+import com.style24.admin.biz.service.TsaGiftCardService;
+import com.style24.core.support.session.TscSession;
+import com.style24.core.support.util.CryptoUtils;
+import com.style24.persistence.domain.CustomerSearch;
+import com.style24.persistence.domain.GiftCard;
+import com.style24.persistence.domain.GoodsMass;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
@@ -127,6 +135,9 @@ public class TsaMarketingController extends TsaBaseController {
 	@Autowired
 	private TsaSocialService socialService;
 
+	@Autowired
+	private TsaGiftCardService giftCardService;
+
 	@Value("${upload.default.target.path}")
 	private String uploadTargetPath;
 
@@ -2363,7 +2374,6 @@ public class TsaMarketingController extends TsaBaseController {
 	/**
 	 * 소셜쇼핑관리 화면
 	 *
-	 * @param
 	 * @author sowon
 	 * @since 2021. 3. 3 
 	 */
@@ -2392,8 +2402,8 @@ public class TsaMarketingController extends TsaBaseController {
 	/**
 	 * 소셜 저장
 	 *
-	 * @param 소셜 정보
-	 * @return
+	 * @param  param - 소셜정보
+	 * @return GagaResponse - 메시지
 	 * @author sowon
 	 * @since 2021. 3. 3
 	 */
@@ -2408,8 +2418,8 @@ public class TsaMarketingController extends TsaBaseController {
 	/**
 	 * 소셜 목록
 	 *
-	 * @param 
-	 * @return 
+	 * @param params - 소셜정보
+	 * @return GagaResponse - 결과메시지
 	 * @author sowon
 	 * @since 2021. 3. 3
 	 */
@@ -2431,8 +2441,8 @@ public class TsaMarketingController extends TsaBaseController {
 	/**
 	 * 소셜 상품 저장
 	 *
-	 * @param 소셜 상품 정보
-	 * @return
+	 * @param  paramList - 소셜상품정보
+	 * @return GagaResponse - 결과메시지
 	 * @author sowon
 	 * @since 2021. 3. 4
 	 */
@@ -2446,8 +2456,8 @@ public class TsaMarketingController extends TsaBaseController {
 	/**
 	 * 소셜 상품 목록
 	 *
-	 * @param 소셜 상품 정보
-	 * @return 소셜 상품 목록
+	 * @param params - 소셜상품정보
+	 * @return Collection<Social> - 소셜상품목록
 	 * @author sowon
 	 * @since 2021. 3. 4
 	 */
@@ -2461,8 +2471,8 @@ public class TsaMarketingController extends TsaBaseController {
 	/**
 	 * 소셜 상품 삭제
 	 *
-	 * @param 소셜 상품 정보
-	 * @return
+	 * @param paramList - 소셜상품정보
+	 * @return GagaResponse - 결과메시지
 	 * @author sowon
 	 * @since 2021. 3. 4
 	 */
@@ -2473,4 +2483,67 @@ public class TsaMarketingController extends TsaBaseController {
 		return super.ok(message.getMessage("SUCC_0003"));
 	}
 
+	/**
+	 * 상품권 대량 등록 화면
+	 *
+	 * @return ModelAndView
+	 * @author jsshin
+	 * @since 2021. 05. 13
+	 */
+	@GetMapping("/giftcard/list/form")
+	public ModelAndView getGiftCardListForm() {
+		ModelAndView mav = new ModelAndView();
+
+		// 사이트 목록
+		mav.addObject("siteList", rendererService.getCommonCodeList("G000", "Y"));
+
+		mav.setViewName("marketing/GiftCardListForm");
+
+		return mav;
+	}
+
+	/**
+	 * 상품권 등록 목록
+	 *
+	 * @param giftCard - 검색조건
+	 * @return GagaMap - 페이징, 결과
+	 * @author jsshin
+	 * @since 2021. 01. 12
+	 */
+	@PostMapping("/giftcard/list")
+	@ResponseBody
+	public GagaMap getGiftCardList(@RequestBody GiftCard giftCard) {
+		GagaMap result = new GagaMap();
+		giftCard.setRegNo(TsaSession.getInfo().getUserNo());
+		giftCard.setPageable(new TscPageRequest(giftCard.getPageNo()-1, giftCard.getPageSize()));
+		giftCard.getPageable().setTotalCount(giftCardService.getGiftCardListCount(giftCard));
+		TscSession.setAttribute("maskingYn", TsaSession.getInfo().getMaskingYn());
+		result.set("pageing", giftCard);
+		result.set("giftCardList", giftCardService.getGiftCardList(giftCard));
+		return result;
+	}
+
+	/**
+	 * 상품권대량 업로드 엑셀 저장
+	 *
+	 * @param giftCard - 검색조건
+	 * @return
+	 * @author jsshin
+	 * @since 2021. 01. 12
+	 */
+	@PostMapping("/upload/giftcard/bulk/reg")
+	@ResponseBody
+	public GagaResponse uploadGiftCardBulkReg(@RequestBody GiftCard giftCard) throws Exception {
+		String targetPath = GagaFileUtil.getConcatenationPath(env.getProperty("upload.excel.target.path"), "excel");
+		String[] giftGardNames = {"custId", "gfcdNo"};
+		Collection<GagaMap> excelGiftCardList = GagaExcelUtil.getList(GagaFileUtil.getConcatenationPath(targetPath, giftCard.getExcelFileNm()), 0, giftGardNames, 0);
+
+		for (GagaMap gagaMap : excelGiftCardList) {
+			if (StringUtils.isNotBlank(gagaMap.getString("custId"))  && StringUtils.isNotBlank(gagaMap.getString("gfcdNo"))) {
+				giftCardService.saveGiftcardUseConfirm(gagaMap);
+			}
+		}
+		return super.ok(message.getMessage("SUCC_0001"));
+	}
+
 }

+ 11 - 9
src/main/java/com/style24/admin/biz/web/TsaStockController.java

@@ -64,7 +64,7 @@ public class TsaStockController extends TsaBaseController {
 	@Autowired
 	private ObjectMapper mapper;
 	
-	private static final int EXCEL_ROW_COUNT = 1000;
+	private static final int EXCEL_ROW_COUNT = 500;
 
 	/**
 	 * 사이즈별재고현황 화면
@@ -130,7 +130,7 @@ public class TsaStockController extends TsaBaseController {
 			goodsSearch.setMdNo(TsaSession.getInfo().getUserNo().toString());
 		}
 		if (!StringUtils.isBlank(goodsSearch.getCondition())) {
-			goodsSearch.setConditionList(goodsSearch.getCondition().replaceAll("\r", "").split("\n"));
+			goodsSearch.setConditionList(goodsSearch.getCondition().replaceAll("\r", "").trim().split("\n"));
 		}
 		// multi row 검색관련 처리
 		if (!StringUtils.isBlank(goodsSearch.getBrandList())) {
@@ -153,7 +153,7 @@ public class TsaStockController extends TsaBaseController {
 			}
 		}
 		
-		log.info("[goodsSearch] goodsSearch =>{}", goodsSearch);
+		//log.info("[goodsSearch] goodsSearch =>{}", goodsSearch);
 		goodsSearch.setRegNo(TsaSession.getInfo().getUserNo());	//엑셀조회시 로그인 사용자의 엑셀 상품조회시 사용
 		goodsSearch.setPageable(new TscPageRequest(goodsSearch.getPageNo() - 1, goodsSearch.getPageSize()));
 		goodsSearch.getPageable().setTotalCount(stockService.getGoodsSizeStockCount(goodsSearch));
@@ -178,14 +178,14 @@ public class TsaStockController extends TsaBaseController {
 		String excelfileName = "사이즈별재고현황_" + GagaDateUtil.getTodayDateTime() + ".xlsx";
 		String excelFilenameWithPath = GagaFileUtil.getConcatenationPath(env.getProperty("download.path"), "excel", excelfileName);
 
-		log.info("downloadGoodsInfoExcelList goodsSearch= {}", goodsSearch);
+		//log.info("downloadGoodsInfoExcelList goodsSearch= {}", goodsSearch);
 		//입점업체담당자는 업체코드 설정
 		if ("G001_B000".equals(TsaSession.getInfo().getRoleCd())) {
 			goodsSearch.setSupplyCompCd(TsaSession.getInfo().getSupplyCompCd());
 			goodsSearch.setMdNo(TsaSession.getInfo().getUserNo().toString());
 		}
 		if (!StringUtils.isBlank(goodsSearch.getCondition())) {
-			goodsSearch.setConditionList(goodsSearch.getCondition().replaceAll("\r", "").split("\n"));
+			goodsSearch.setConditionList(goodsSearch.getCondition().replaceAll("\r", "").trim().split("\n"));
 		}
 		// multi row 검색관련 처리
 		if (!StringUtils.isBlank(goodsSearch.getBrandList())) {
@@ -208,7 +208,9 @@ public class TsaStockController extends TsaBaseController {
 			}
 		}
 		goodsSearch.setRegNo(TsaSession.getInfo().getUserNo());	//엑셀조회시 로그인 사용자의 엑셀 상품조회시 사용
-
+		goodsSearch.setPageable(new TscPageRequest(goodsSearch.getPageNo() - 1, goodsSearch.getPageSize()));
+		goodsSearch.getPageable().setTotalCount(stockService.getGoodsSizeStockCount(goodsSearch));
+		
 		// 대용량엑셀파일다운로드는 이런 식으로 ...
 		stockService.getGoodsSizeStockExcelList(goodsSearch, excelFilenameWithPath);
 
@@ -227,15 +229,15 @@ public class TsaStockController extends TsaBaseController {
 	@PostMapping("/sizeSoldout/excelupload/save")
 	@ResponseBody
 	public GagaResponse saveGoodsSizeSoldoutExcelupload(@RequestBody Goods goods) throws Exception {
-		log.info("[saveGoodsSizeSoldoutExcelupload]Goods = >{}", goods);
+		//log.info("[saveGoodsSizeSoldoutExcelupload]Goods = >{}", goods);
 		ObjectMapper mapper = new ObjectMapper();
 
 		String targetPath = GagaFileUtil.getConcatenationPath(env.getProperty("upload.excel.target.path"), "excel");
 		// DB 처리 시 사용되는 파라미터명(셀명) 설정
 		String[] cellName = { "brandEnm", "goodsNm", "itemkindCd","goodsStat","goodsCd", "optCd", "optCd1", "optCd2",  "soldoutYn",
 								"currStockQty", "baseStockQty","saleStockQty", "ableStockQty"};
-		log.info("[saveGoodsSizeSoldoutExcelupload]targetPath = >{}", targetPath);
-		log.info("[saveGoodsSizeSoldoutExcelupload]getExcelFileNm = >{}", GagaFileUtil.getConcatenationPath(targetPath, goods.getExcelFileNm()));
+		//log.info("[saveGoodsSizeSoldoutExcelupload]targetPath = >{}", targetPath);
+		//log.info("[saveGoodsSizeSoldoutExcelupload]getExcelFileNm = >{}", GagaFileUtil.getConcatenationPath(targetPath, goods.getExcelFileNm()));
 		Collection<GagaMap> ecxelGoodsList = GagaExcelUtil.getList(GagaFileUtil.getConcatenationPath(targetPath, goods.getExcelFileNm()), 0, cellName, 0);
 
 		//건수

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

@@ -59,6 +59,7 @@ public class Coupon extends TscBaseDomain {
     private String afChannel;               // 제휴링크
     private String dcCdGb;                  // 할인코드유형 (공통코드G233)
     private String rdCpnNm;                 // 랜덤쿠폰 사용키 (시리얼명 or 난수)
+    private String chkExcep;                // 종료제외여부
 
     private String custNo;
     private String custNm;

+ 182 - 0
src/main/java/com/style24/persistence/mybatis/shop/TsaGiftCard.xml

@@ -0,0 +1,182 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.style24.admin.biz.dao.TsaGiftCardDao">
+
+	<!-- 페이징을 위한 select절 상단 -->
+	<sql id="selectForPagingHeader">
+		SELECT *
+		FROM (
+	</sql>
+
+	<!-- 페이징을 위한 select절 하단 -->
+	<sql id="selectForPagingFooter">
+		) ORIGINAL
+		WHERE NUMB BETWEEN #{pageable.startRow} AND #{pageable.endRow}
+	</sql>
+
+	<!-- 상품권 대량 등록 수-->
+	<select id="getGiftCardListCount" parameterType="GiftCard" resultType="int">
+		/*TsaGiftCard.getGiftCardListCount*/
+		SELECT COUNT(*)  AS CNT
+		FROM   TB_GFCD_BULK_REG GBR
+		LEFT JOIN
+		       TB_GIFTCARD_API_HST GAH
+		ON     GBR.GFCD_API_HST_SQ = GAH.GFCD_API_HST_SQ
+		WHERE  1 = 1
+		<if test="custId != null and custId != ''">
+		AND    LOWER(GBR.CUST_ID) LIKE CONCAT('%',LOWER(#{custId}),'%')
+		</if>
+		<if test="stDate != null and edDate != '' and stDate != null and edDate != ''">
+		AND    GBR.REG_DT >= DATE_FORMAT(#{stDate}, '%Y-%m-%d %H:%i:%S')
+		AND    GBR.REG_DT <![CDATA[<]]> DATE_FORMAT(DATE_ADD(#{edDate}, INTERVAL 1 DAY), '%Y-%m-%d %H:%i:%S')
+		</if>
+	</select>
+
+	<!--상품권 대량 등록 목록-->
+	<select id="getGiftCardList" parameterType="GiftCard" resultType="GiftCard">
+		/*TsaGiftCard.getGiftCardList*/
+		<include refid="selectForPagingHeader"/>
+		SELECT GBR.GFCD_BULK_REG_SQ
+		     , GBR.CUST_ID
+		     , GBR.GFCD_NO
+		     , GBR.RESULT_MSG
+		     , FN_GET_USER_NM(GBR.REG_NO)              AS REG_NM
+		     , DATE_FORMAT(GBR.REG_DT, '%Y%m%d%H%i%S') AS REG_DT
+		     , FN_GET_USER_NM(GBR.UPD_NO)              AS UPD_NM
+		     , DATE_FORMAT(GBR.UPD_DT, '%Y%m%d%H%i%S') AS UPD_DT
+		     , GAH.CUST_NO
+		     , GAH.IP_ADDR
+		     , GAH.RESULT_VAL
+		     , ROW_NUMBER() OVER(ORDER BY GBR.REG_DT DESC)   AS NUMB
+		FROM   TB_GFCD_BULK_REG GBR
+		LEFT JOIN
+		       TB_GIFTCARD_API_HST GAH
+		ON     GBR.GFCD_API_HST_SQ = GAH.GFCD_API_HST_SQ
+		WHERE  1 = 1
+		<if test="custId != null and custId != ''">
+		AND    LOWER(GBR.CUST_ID) LIKE CONCAT('%',LOWER(#{custId}),'%')
+		</if>
+		<if test="stDate != null and edDate != '' and stDate != null and edDate != ''">
+		AND    GBR.REG_DT >= DATE_FORMAT(#{stDate}, '%Y-%m-%d %H:%i:%S')
+		AND    GBR.REG_DT <![CDATA[<]]> DATE_FORMAT(DATE_ADD(#{edDate}, INTERVAL 1 DAY), '%Y-%m-%d %H:%i:%S')
+		</if>
+		<include refid="selectForPagingFooter"/>
+	</select>
+
+	<!--상품권 대량 엑셀 정보 등록-->
+	<insert id="createGfcdBulkReg" parameterType="GiftCard" keyProperty="gfcdBulkRegSq">
+		/*TsaGiftCard.createGfcdBulkReg*/
+		INSERT INTO TB_GFCD_BULK_REG (
+		       CUST_ID
+		     , GFCD_NO
+		     , GFCD_API_HST_SQ
+		     , RESULT_MSG
+		     , REG_NO
+		     , REG_DT
+		     , UPD_NO
+		     , UPD_DT
+		) VALUES (
+		       #{custId}
+		     , #{gfcdNo}
+		     , IFNULL(#{gfcdApiHstSq}, NULL)
+		     , IFNULL(#{resultMsg}, NULL)
+		     , #{regNo}
+		     , NOW()
+		     , #{updNo}
+		     , NOW()
+		)
+	</insert>
+
+	<!-- 상품권API 결과 저장-->
+	<insert id="createGiftcardApi" parameterType="GiftCard" keyProperty="gfcdApiHstSq">
+		/*TsaGiftCard.createGiftcardApi*/
+		INSERT INTO TB_GIFTCARD_API_HST (
+		       GFCD_NO
+		     , IP_ADDR
+		     , CUST_NO
+		     , RESULT_VAL
+		     , REG_NO
+		     , REG_DT
+		) VALUES (
+		       #{gfcdNo}
+		     , #{ipAddr}
+		     , #{custNo}
+		     , #{resultVal}
+		     , #{regNo}
+		     , NOW()
+		)
+	</insert>
+	
+	<!-- 고객 상품권 등록 -->
+	<insert id="createGiftcardUseConfirm" parameterType="GiftCard" keyProperty="custGfcdSq">
+		/*TsaGiftCard.createGiftcardUseConfirm*/
+		INSERT INTO TB_CUST_GIFTCARD (
+		       CUST_NO
+		     , GFCD_NO
+		     , GFCD_NM
+		     , CHG_GFCD_AMT
+		     , US_GFCD_AMT
+		     , RM_GFCD_AMT
+		     , USE_ST_DATE
+		     , USE_EXP_DATE
+		     , REG_NO
+		     , REG_DT
+		     , UPD_NO
+		     , UPD_DT
+		) VALUES(
+		       #{custNo}
+		     , #{gfcdNo}
+		     , #{gfcdNm}
+		     , #{chgGfcdAmt}
+		     , #{usGfcdAmt}
+		     , #{rmGfcdAmt}
+		     , DATE_FORMAT(#{useStDate},'%Y%m%d')
+		     , DATE_FORMAT(#{useExpDate},'%Y%m%d')
+		     , #{regNo}
+		     , NOW()
+		     , #{updNo}
+		     , NOW()
+		)
+	</insert>
+
+	<!-- 고객 상품권 정보 이력 -->
+	<insert id="createCustGiftcardHistory"  parameterType="GiftCard" keyProperty="gfcdHstSq">
+		/* TsaGiftCard.createCustGiftcardHistory */
+		INSERT INTO TB_CUST_GIFTCARD_HST (
+		      CUST_NO
+		    , OCCUR_GB
+		    , OCCUR_DTL_DESC
+		    , GFCD_AMT
+		    , CUST_GFCD_SQ
+		    , ORD_NO
+		    , ORD_DTL_NO
+		    , REG_NO
+		    , REG_DT
+		    , UPD_NO
+		    , UPD_DT
+		) VALUES (
+		      #{custNo}
+		    , #{occurGb}
+		    , #{occurDtlDesc}
+		    , #{gfcdAmt}
+		    , #{custGfcdSq}
+		    , #{ordNo}
+		    , #{ordDtlNo}
+		    , #{regNo}
+		    , NOW()
+		    , #{updNo}
+		    , NOW()
+		)
+	</insert>
+
+	<!--상품권 대량등록 결과-->
+	<update id="updateGfcdBulkReg" parameterType="GiftCard">
+		UPDATE TB_GFCD_BULK_REG
+		SET    GFCD_API_HST_SQ = #{gfcdApiHstSq}
+		     , RESULT_MSG = #{resultMsg}
+		     , UPD_NO = #{updNo}
+		     , UPD_DT = NOW()
+		WHERE  GFCD_BULK_REG_SQ = #{gfcdBulkRegSq}
+	</update>
+
+</mapper>

+ 32 - 9
src/main/java/com/style24/persistence/mybatis/shop/TsaGoods.xml

@@ -410,6 +410,7 @@
 		  --  , (CASE WHEN Q.GOODS_TYPE = 'G056_N' THEN (SELECT IFNULL(SUM(CURR_STOCK_QTY - BASE_STOCK_QTY),0) FROM VW_STOCK WHERE GOODS_CD = Q.GOODS_CD) 
 		  --          ELSE (SELECT IFNULL(SUM(CURR_STOCK_QTY - BASE_STOCK_QTY),0) FROM VW_STOCK_COMPOSE WHERE GOODS_CD = Q.GOODS_CD) 
 		  --          END) AS STOCK_QTY_SUM
+		    , IFNULL((SELECT STOCK_QTY FROM TB_GOODS_STOCK WHERE GOODS_CD = Q.GOODS_CD),0) AS STOCK_QTY_SUM
 		    , (SELECT ITEMKIND_NM FROM TB_ITEMKIND WHERE ITEMKIND_CD = Q.ITEMKIND_CD ) AS ITEMKIND_NM
 		    , FN_GET_USER_NM(REG_NO) AS REG_NM
 		    , FN_GET_USER_NM(UPD_NO) AS UPD_NM
@@ -428,7 +429,7 @@
 		FROM (     
 		SELECT Z.*
 		FROM (
-		    SELECT A.*, @rownum := @rownum + 1 AS RNUM 
+		    SELECT A.* -- , @rownum := @rownum + 1 AS RNUM 
 		    FROM (
 		        SELECT
 		                G.GOODS_CD
@@ -475,7 +476,7 @@
 		                  </otherwise>
 		              </choose>
 		        FROM TB_GOODS G
-		        JOIN ( SELECT @rownum := 0) R
+		       -- JOIN ( SELECT @rownum := 0) R
 		        INNER JOIN TB_BRAND B ON G.BRAND_CD = B.BRAND_CD
 		        INNER JOIN TB_SUPPLY_COMPANY S ON G.SUPPLY_COMP_CD = S.SUPPLY_COMP_CD
 		        INNER JOIN TB_GOODS_SUMMARY GS ON G.GOODS_CD = GS.GOODS_CD
@@ -521,9 +522,9 @@
 		        ORDER BY G.REG_DT DESC, G.GOODS_CD
 		        </if>
 		        <if test="searchGb != null and searchGb =='EXCEL'">
-		        ORDER BY SD.TMP_DISP_ORD
+		        ORDER BY SD.TMP_DISP_ORD, G.GOODS_CD
 		        </if>
-		<include refid="getListPagingCondition_sql"/>
+		<include refid="getListLimitPagingCondition_sql"/>
 	</select>
 	
 	<!-- 상품 목록 조건 정보 -->
@@ -802,6 +803,29 @@
 		</choose>
 	</sql>
 	
+	<!-- 목록 페이징 정보 LIMIT 용 -->
+	<sql id="getListLimitPagingCondition_sql">
+		<choose>
+		<when test="pageable != null">
+		    ) A
+		)Z
+		LIMIT #{pageable.limitStartRow} ,  #{pageable.pageSize}
+		) Q
+		<if test='goodsPriceYn != null and goodsPriceYn == "Y"'>
+		LEFT OUTER JOIN TB_GOODS_BENEFIT_PRICE GB ON Q.GOODS_CD = GB.GOODS_CD AND GB.CUST_GB = 'G100_00'
+		</if> 
+		</when>
+		<otherwise>
+		    ) A
+		)Z
+		)Q
+		<if test='goodsPriceYn != null and goodsPriceYn == "Y"'>
+		LEFT OUTER JOIN TB_GOODS_BENEFIT_PRICE GB ON Q.GOODS_CD = GB.GOODS_CD AND GB.CUST_GB = 'G100_00'
+		</if> 
+		</otherwise>
+		</choose>
+	</sql>
+	
 	<!-- 상품 목록 기본정보 엑셀  -->
 	<select id="getGoodsInfoExcelList" parameterType="GoodsSearch" resultType="paramMap">
 		/* TsaGoods.getGoodsInfoExcelList */
@@ -832,9 +856,7 @@
 		     , CASE IFNULL((SELECT COUNT(SYS_IMG_NM) FROM TB_GOODS_IMG  WHERE GOODS_CD = G.GOODS_CD AND COLOR_CD = G.MAIN_COLOR_CD AND DEFAULT_IMG_YN = 'Y' ),0) 
 		            WHEN 0 THEN 'N'
 		            ELSE 'Y' END AS GOODS_IMAGE_YN
-		     , (CASE WHEN G.GOODS_TYPE = 'G056_N' THEN (SELECT IFNULL(SUM(CURR_STOCK_QTY - BASE_STOCK_QTY),0) FROM VW_STOCK WHERE GOODS_CD = G.GOODS_CD) 
-		            ELSE (SELECT IFNULL(SUM(CURR_STOCK_QTY - BASE_STOCK_QTY),0) FROM VW_STOCK_COMPOSE WHERE GOODS_CD = G.GOODS_CD) 
-		            END) AS STOCK_QTY_SUM
+		     , IFNULL((SELECT STOCK_QTY FROM TB_GOODS_STOCK WHERE GOODS_CD = G.GOODS_CD),0) AS STOCK_QTY_SUM
 		     , (SELECT ITEMKIND_NM FROM TB_ITEMKIND WHERE ITEMKIND_CD = G.ITEMKIND_CD) AS ITEMKIND_NM
 		     , (SELECT MAX(SYS_IMG_NM) FROM TB_GOODS_IMG  WHERE GOODS_CD = G.GOODS_CD AND COLOR_CD = G.MAIN_COLOR_CD AND DEFAULT_IMG_YN = 'Y' ) AS SYS_IMG_NM
 		     , G.REG_NO
@@ -884,11 +906,12 @@
 		WHERE 1=1
 		<if test="searchGb == null or searchGb =='BASIC' or searchGb =='EXTEND' or searchGb =='MASTER'" >
 		<include refid="getGoodsListCondition_sql"/>
-		ORDER BY G.REG_DT DESC
+		ORDER BY G.REG_DT DESC, G.GOODS_CD 
 		</if>
 		<if test="searchGb == null or searchGb =='EXCEL'">
-		ORDER BY SD.TMP_DISP_ORD
+		ORDER BY SD.TMP_DISP_ORD, G.GOODS_CD
 		</if>
+		LIMIT #{pageable.limitStartRow} ,  #{pageable.pageSize}
 	</select>
 	
 	<!-- 상품 정보 -->

+ 24 - 2
src/main/java/com/style24/persistence/mybatis/shop/TsaStock.xml

@@ -11,6 +11,13 @@
 		              <foreach collection="conditionList" item="item" index="index" separator="or">
 		               UPPER(G.GOODS_CD) LIKE CONCAT('%',UPPER(#{item}),'%') 
 		              </foreach>
+		             )
+		              </when>
+		              <when test='search != null and search == "searchGoodsNm"'>
+		        AND (
+		              <foreach collection="conditionList" item="item" index="index" separator="or">
+		               UPPER(G.GOODS_NM) LIKE CONCAT('%',UPPER(#{item}),'%')
+		              </foreach>
 		             )
 		              </when>
 		              <when test='search != null and search == "searchGoodsNum"'>
@@ -233,6 +240,21 @@
 		</choose>
 	</sql>
 	
+	<!-- 목록 페이징 정보 LIMIT 용 -->
+	<sql id="getListLimitPagingCondition_sql">
+		<choose>
+		<when test="pageable != null">
+		    ) A
+		)Z 
+		LIMIT #{pageable.limitStartRow} ,  #{pageable.pageSize}
+		</when>
+		<otherwise>
+		    ) A
+		)Z
+		</otherwise>
+		</choose>
+	</sql>
+	
 	<!-- 상품 사이즈별 재고 현황 목록 건수 -->
 	<select id="getGoodsSizeStockCount" parameterType="GoodsSearch" resultType="int">
 		/* TsaStock.getGoodsSizeStockCount */
@@ -353,7 +375,7 @@
 		    , (SELECT ITEMKIND_NM FROM TB_ITEMKIND WHERE ITEMKIND_CD = Z.ITEMKIND_CD) AS ITEMKIND_NM
 		    , FN_GET_CODE_NM('G008', Z.GOODS_STAT) AS GOODS_STAT_NM
 		FROM (
-		    SELECT A.*, @rownum := @rownum + 1  RNUM 
+		    SELECT A.* -- , @rownum := @rownum + 1  RNUM 
 		    FROM (
 		        SELECT  X.GOODS_CD
 		              , X.BRAND_ENM
@@ -483,7 +505,7 @@
 		            </if>
 		        ORDER BY X.GOODS_CD, X.OPT_CD, X.REG_DT DESC
 		        </if>
-		<include refid="getListPagingCondition_sql"/>
+		<include refid="getListLimitPagingCondition_sql"/>
 	</sql>
 	
 	<!-- 상품 사이즈별 품절여부 변경 -->

BIN
src/main/webapp/WEB-INF/lib/gagaframework-shoplinker-1.7-RELEASE.jar


+ 3 - 3
src/main/webapp/WEB-INF/views/customer/CustomerDetailForm.html

@@ -42,7 +42,7 @@
 				</td>
 				<th>아이디</th>
 				<td>
-					<span id="custId" name="custId"></span>
+					<span id="spanCustId" name="spanCustId"></span>
 					<th:block th:if="${sessionInfo.userId == 'jsshin'}">
 						<button type="button" id="btnLogin" class="btn btnRight btn-success btn-lg">Login</button>
 					</th:block>
@@ -1216,7 +1216,7 @@
 			, function (data) {
 				if (!gagajf.isNull(data)) {
 					$('#spanCustNm').text(data.maskingCustNm);
-					$('#custId').text(data.maskingCustId);
+					$('#spanCustId').text(data.maskingCustId);
 					$('#siteNm').text(gagaAgGrid.lookupValue(siteList, data.siteCd));
 					$('#custGrade').val(data.custGrade);
 					$('#custGb').val(data.custGb);
@@ -1534,7 +1534,7 @@
 
 
 	$('#btnLogin').on('click', function () {
-		let custId = $('span[name=custId]').text();
+		let custId = $('#spanCustId').text();
 		const actionUrl = _frontUrl + '/customer/front/login?custId=' + custId;
 		let popupWidth = window.screen.width;
 		let popupHeight = window.screen.height;

+ 1 - 1
src/main/webapp/WEB-INF/views/customer/GoodsQnaDetailForm.html

@@ -80,7 +80,7 @@
 							<td colspan="3" th:text="*{relGoodsCd}"></td>
 							<th rowspan="3">상품이미지</th>
 							<td rowspan="3" class="userImg">
-								<img style="height: 100px;" th:src="${@environment.getProperty('upload.goods.view') + '/' + counselInfo.goodsImg}" alt="" onerror='this.src="/image/no.gif"'/>
+								<img style="height: 100px;" th:src="${@environment.getProperty('upload.goods.view') + '/' + counselInfo.goodsImg}" alt="" onerror='this.src="/image/no.png"'/>
 							</td>
 						</tr>
 						<tr>

+ 1 - 1
src/main/webapp/WEB-INF/views/customer/GoodsQnaForm.html

@@ -129,7 +129,7 @@
 		{
 			headerName: "이미지", field: "goodsImg", width: 100, cellClass: 'text-center',
 			cellRenderer: function(params) {
-				return '<img width="60" src="' + _goodsUrl +  "/" + params.value + '" alt="" onerror="this.src=\'/image/no.gif\';"/>';
+				return '<img width="60" src="' + _goodsUrl +  "/" + params.value + '" alt="" onerror="this.src=\'/image/no.png\';"/>';
 			}
 		},
 		{

+ 2 - 2
src/main/webapp/WEB-INF/views/customer/OneToOneQnaDetailForm.html

@@ -89,8 +89,8 @@
 							</td>
 							<th>첨부 이미지</th>
 							<td class="userImg">
-								<img th:if="${counselInfo.sysFileNm1 != null}" style="height: 100px;" th:src="${@environment.getProperty('domain.image') + '/counsel/' + counselInfo.sysFileNm1}" alt="" onerror='this.src="/image/no.gif"'/>
-								<img th:if="${counselInfo.sysFileNm2 != null}" style="height: 100px;" th:src="${@environment.getProperty('domain.image') + '/counsel/' + counselInfo.sysFileNm2}" alt="" onerror='this.src="/image/no.gif"'/>
+								<img th:if="${counselInfo.sysFileNm1 != null}" style="height: 100px;" th:src="${@environment.getProperty('domain.image') + '/counsel/' + counselInfo.sysFileNm1}" alt="" onerror='this.src="/image/no.png"'/>
+								<img th:if="${counselInfo.sysFileNm2 != null}" style="height: 100px;" th:src="${@environment.getProperty('domain.image') + '/counsel/' + counselInfo.sysFileNm2}" alt="" onerror='this.src="/image/no.png"'/>
 							</td>
 						</tr>
 					</tbody>

+ 1 - 1
src/main/webapp/WEB-INF/views/display/GoodsCategoryForm.html

@@ -293,7 +293,7 @@
 			},
 			{headerName: "이미지", field: "sysImgNm", width: 100, height: 60, cellClass: 'text-center'
 				,cellRenderer: function(params) {
-					return '<img width="60" src="'+ _goodsUrl+ "/" + params.value + '" alt=""  onerror="this.src=\'/image/no.gif\';"/>';
+					return '<img width="60" src="'+ _goodsUrl+ "/" + params.value + '" alt=""  onerror="this.src=\'/image/no.png\';"/>';
 				}
 			},
 			{headerName: "상품코드", field: "goodsCd", width: 140, cellClass: 'text-center'},

+ 1 - 1
src/main/webapp/WEB-INF/views/display/GoodsDispOrdChangePopupForm.html

@@ -130,7 +130,7 @@
 				//if(resultList[i].imgType=='A'){
 					imgPath = uploadGoodsUrl;
 				//}
-				html += '<img src="'+imgPath+ "/" +resultList[i].imgPath1+'" onerror="this.src=\'/image/no.gif\';"/>';
+				html += '<img src="'+imgPath+ "/" +resultList[i].imgPath1+'" onerror="this.src=\'/image/no.png\';"/>';
 				html += '<div class="btnArea">';
 				html += '<button type="button" class="icnSm" title="맨위로" onclick="fnUpdownBtn(\''+resultList[i].goodsCd+'\', \''+resultList[i].dispOrd+'\', \'up\');"><i class="fa fa-play-circle fa-rotate-270" aria-hidden="true"></i></button>';
 				html += '<button type="button" class="icnSm" title="위로"><i class="fa fa-arrow-up" aria-hidden="true"></i></button>';

+ 7 - 7
src/main/webapp/WEB-INF/views/display/MainGnbContentsPopupForm.html

@@ -216,7 +216,7 @@
 			html += '	<input type="hidden" name="brandGroupNo" value="' + result[i].brandGroupNo + '">';
 			html += '	<input type="hidden" name="imgPath1" value="' + result[i].logoFileNm + '">';
 			html += '	<li class="img">';
-			html += '		<img style="height:100%;" src="' + uploadGoodsUrl + "/" + result[i].logoFileNm + '" onerror="this.src=\'/image/no.gif\';"/>';
+			html += '		<img style="height:100%;" src="' + uploadGoodsUrl + "/" + result[i].logoFileNm + '" onerror="this.src=\'/image/no.png\';"/>';
 			html += '	</li>';
 			html += '	<li class="cont">';
 			html += '		<ul>';
@@ -508,9 +508,9 @@
 				html += '	<input type="hidden" name="brandGroupNo" value="' + g1cdArr[k] + '">';
 				html += '	<li class="img">';
 				if(gagajf.isNull(g1imgArr)){
-					html += '		<img style="height:100%;" src="" onerror="this.src=\'/image/no.gif\';"/>';
+					html += '		<img style="height:100%;" src="" onerror="this.src=\'/image/no.png\';"/>';
 				}else{
-					html += '		<img style="height:100%;" src="' + uploadGoodsUrl + "/" + g1imgArr[k] + '" onerror="this.src=\'/image/no.gif\';"/>';
+					html += '		<img style="height:100%;" src="' + uploadGoodsUrl + "/" + g1imgArr[k] + '" onerror="this.src=\'/image/no.png\';"/>';
 				}
 				html += '	</li>';
 				html += '	<li class="cont">';
@@ -539,9 +539,9 @@
 				html += '	<input type="hidden" name="brandGroupNo" value="' + g2cdArr[m] + '">';
 				html += '	<li class="img">';
 				if(gagajf.isNull(g2imgArr)){
-					html += '		<img style="height:100%;" src="" onerror="this.src=\'/image/no.gif\';"/>';
+					html += '		<img style="height:100%;" src="" onerror="this.src=\'/image/no.png\';"/>';
 				}else{
-					html += '		<img style="height:100%;" src="' + uploadGoodsUrl + "/" + g2imgArr[k] + '" onerror="this.src=\'/image/no.gif\';"/>';
+					html += '		<img style="height:100%;" src="' + uploadGoodsUrl + "/" + g2imgArr[m] + '" onerror="this.src=\'/image/no.png\';"/>';
 				}
 				html += '	</li>';
 				html += '	<li class="cont">';
@@ -570,9 +570,9 @@
 				html += '	<input type="hidden" name="brandGroupNo" value="' + g3cdArr[n] + '">';
 				html += '	<li class="img">';
 				if(gagajf.isNull(g3imgArr)){
-					html += '		<img style="height:100%;" src="" onerror="this.src=\'/image/no.gif\';"/>';
+					html += '		<img style="height:100%;" src="" onerror="this.src=\'/image/no.png\';"/>';
 				}else{
-					html += '		<img style="height:100%;" src="' + uploadGoodsUrl + "/" + g3imgArr[k] + '" onerror="this.src=\'/image/no.gif\';"/>';
+					html += '		<img style="height:100%;" src="' + uploadGoodsUrl + "/" + g3imgArr[n] + '" onerror="this.src=\'/image/no.png\';"/>';
 				}
 				html += '	</li>';
 				html += '	<li class="cont">';

+ 2 - 2
src/main/webapp/WEB-INF/views/display/MainMultiContentsPopupForm.html

@@ -700,7 +700,7 @@
 				goodsNm = goodsNmList.split(',')[i];
 				html += '<li class="img">';
 				var imgPath = _goodsUrl;
-				html += '<img src="'+imgPath+ "/" +goodsImg+'" onerror="this.src=\'/image/no.gif\';"/>';
+				html += '<img src="'+imgPath+ "/" +goodsImg+'" onerror="this.src=\'/image/no.png\';"/>';
 				html += '</li>';
 				html += '<li class="cont">';
 				html += '<ul>';
@@ -766,7 +766,7 @@
 			//if(result[i].imgType=='A'){
 				imgPath = _goodsUrl;
 			//}
-			html += '<img src="'+imgPath+ "/" +result[i].sysImgNm+'" onerror="this.src=\'/image/no.gif\';"/>';
+			html += '<img src="'+imgPath+ "/" +result[i].sysImgNm+'" onerror="this.src=\'/image/no.png\';"/>';
 			html += '</li>';
 			html += '<li class="cont">';
 			html += '<ul>';

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

@@ -122,7 +122,7 @@
 		//{headerName: 'No', width: 60, cellClass: 'text-center', valueGetter: function(params) { return params.node.rowIndex + 1 }},
 		{headerName: "이미지", field: "sysImgNm", width: 100, height: 60, cellClass: 'text-center'
 			,cellRenderer: function(params) {
-				return '<img width="60" src="'+ _goodsUrl+ "/" + params.value + '" alt="" onerror="this.src=\'/image/no.gif\';"/>';
+				return '<img width="60" src="'+ _goodsUrl+ "/" + params.value + '" alt="" onerror="this.src=\'/image/no.png\';"/>';
 			}
 		},
 		{headerName: "구성상품코드", field: "compsGoodsCd" , width: 130, cellClass: 'text-center'},

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

@@ -729,7 +729,7 @@
 		//{headerName: 'No', width: 60, cellClass: 'text-center', valueGetter: function(params) { return params.node.rowIndex + 1 }},
 		{headerName: "이미지", field: "sysImgNm", width: 100, height: 60, cellClass: 'text-center'
 			,cellRenderer: function(params) {
-				return '<img width="60" src="'+ _goodsUrl+ "/" + params.value + '" alt="" onclick="cfnOpenImagePreViewPopup(\'goodsImgView\', \''+ _goodsUrl+ "/" + params.value +'\')" onerror="this.src=\'/image/no.gif\';"/>';
+				return '<img width="60" src="'+ _goodsUrl+ "/" + params.value + '" alt="" onclick="cfnOpenImagePreViewPopup(\'goodsImgView\', \''+ _goodsUrl+ "/" + params.value +'\')" onerror="this.src=\'/image/no.png\';"/>';
 			}
 		},
 		{headerName: "상품타입", field: "goodsType" , width: 100, cellClass: 'text-center',
@@ -2519,7 +2519,7 @@
 	}
 		
 	$("img").on("error", function () {
-		$(this).attr("src",  _uximgUrl+"/image/no.gif");
+		$(this).attr("src",  _uximgUrl+"/image/no.png");
 	});
 	
 	$(document).ready(function() {

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

@@ -37,7 +37,7 @@
 			<td class="aC" th:text="${sizeStatus.count}">1</td>
 			<td class="aC"><label class="rdoBtn"><input type="radio" name="basicColor" th:value="${goodsColor.optCd1}"  th:checked="${goodsColor.mainColorYn =='Y'}" /></label></td>
 			<td class="aC">
-				<img width="60" th:src="${uploadGoodsUrl+'/'+goodsColor.sysImgNm}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/image/no.gif'}+'\';'" alt="">
+				<img width="60" th:src="${uploadGoodsUrl+'/'+goodsColor.sysImgNm}" th:onerror="'this.src=\''+@{${uxImgUrl}+ '/image/no.png'}+'\';'" alt="">
 				<input type="hidden" name="sysImgNmOrg" id="sysImgNmOrg" th:value="${goodsColor.sysImgNm}"/>
 			</td>	
 			<td class="aC" ><th:block th:text="${goodsColor.optCd1}">BK</th:block> 

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

@@ -114,7 +114,7 @@
 						<option value="50" selected="selected">50개씩 보기</option>
 						<option value="100">100개씩 보기</option>
 						<option value="500">500개씩 보기</option>
-						<option value="1000">1000개씩 보기</option>
+						<!-- <option value="1000">1000개씩 보기</option> -->
 					</select>
 					<input type="hidden" name="pageNo" id="pageNo" value ="1"/>
 				</li>

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

@@ -154,7 +154,7 @@
 		{headerName: 'No', width: 60, cellClass: 'text-center', valueGetter: function(params) { return params.node.rowIndex + 1 }},
 		{headerName: "이미지", field: "sysImgNm", width: 100, height: 60, cellClass: 'text-center'
 			,cellRenderer: function(params) {
-				return '<img width="60" src="'+ _imgUrl+  params.value + '" alt="" onerror="this.src=\'/image/no.gif\';"/>';
+				return '<img width="60" src="'+ _imgUrl+  params.value + '" alt="" onerror="this.src=\'/image/no.png\';"/>';
 			}
 		},
 		{headerName: "브랜드", field: "brandEnm", width: 130, cellClass: 'text-center'},

+ 2 - 2
src/main/webapp/WEB-INF/views/goods/GoodsItemkindForm.html

@@ -156,7 +156,7 @@
 						<option value="50" selected="selected">50개씩 보기</option>
 						<option value="100">100개씩 보기</option>
 						<option value="500">500개씩 보기</option>
-						<option value="1000">1000개씩 보기</option>
+						<!-- <option value="1000">1000개씩 보기</option> -->
 					</select>
 					<input type="hidden" name="pageNo" id="pageNo" value ="1"/>
 				</li>
@@ -183,7 +183,7 @@
 		},
 		{headerName: "이미지", field: "sysImgNm", width: 100, height: 60, cellClass: 'text-center'
 			,cellRenderer: function(params) {
-				return '<img width="60" src="'+ _goodsUrl+ "/" + params.value + '" alt=""  onerror="this.src=\'/image/no.gif\';"/>';
+				return '<img width="60" src="'+ _goodsUrl+ "/" + params.value + '" alt=""  onerror="this.src=\'/image/no.png\';"/>';
 			}
 		},
 		{headerName: "상품코드", field: "goodsCd", width: 140, cellClass: 'text-center'

+ 6 - 5
src/main/webapp/WEB-INF/views/goods/GoodsListForm.html

@@ -235,7 +235,7 @@
 				<li>
 					<button type="button" class="btn btn-default btn-lg" onclick="fnGoodsExcelDownLoad('');">엑셀다운로드</button>
 					<button type="button" class="btn btn-default btn-lg" onclick="fnGoodsExcelDownLoad('Y');">엑셀다운로드(이미지포함)</button>
-					<button type="button" class="btn btn-default btn-lg" onclick="cfnDownloadSampleFile('SF013');">상품엑셀조회 양식 다운로드</button>
+					<button type="button" class="btn btn-default btn-lg" onclick="cfnDownloadSampleFile('SF003');">상품엑셀조회 양식 다운로드</button>
 					<button type="button" class="btn btn-base btn-lg" id="btnGoodsExcelUpLoad">엑셀조회</button>
 				</li>
 				<li class="right">
@@ -247,7 +247,7 @@
 						<option value="50" selected="selected">50개씩 보기</option>
 						<option value="100">100개씩 보기</option>
 						<option value="500">500개씩 보기</option>
-						<option value="1000">1000개씩 보기</option>
+						<!-- <option value="1000">1000개씩 보기</option> -->
 					</select>
 					<input type="hidden" name="pageNo" id="pageNo" value ="1"/>
 				</li>
@@ -459,7 +459,7 @@
 		},
 		{headerName: "이미지", field: "sysImgNm", width: 100, height: 60, cellClass: 'text-center'
 			,cellRenderer: function(params) {
-				return '<img width="60" src="'+ _goodsUrl+ "/" + params.value + '" alt="" onclick="cfnOpenImagePreViewPopup(\'goodsImgView\', \''+ _goodsUrl+ "/" + params.value +'\')" onerror="this.src=\'/image/no.gif\';"/>';
+				return '<img width="60" src="'+ _goodsUrl+ "/" + params.value + '?RS=60" alt="" onclick="cfnOpenImagePreViewPopup(\'goodsImgView\', \''+ _goodsUrl+ "/" + params.value +'\')" onerror="this.src=\'/image/no.png\';"/>';
 			}
 		},
 		{headerName: "브랜드", field: "brandCd", width: 80, cellClass: 'text-center'},
@@ -471,7 +471,7 @@
 			}
 		},
 		{headerName: "품목", field: "itemkindNm", width: 150, cellClass: 'text-center'},
-		/* {headerName: "판매가능재고", field: "stockQtySum", width: 120, cellClass: 'text-right',
+		{headerName: "판매가능재고", field: "stockQtySum", width: 120, cellClass: 'text-right',
 			valueFormatter: function(params) {	return params.value.addComma();},
 			cellStyle : function(params){
 				if ("00" == params.data.goodsStat  || "10" == params.data.goodsStat || "20" == params.data.goodsStat || "30" == params.data.goodsStat) {
@@ -483,7 +483,7 @@
 				}
 				return { 'background-color': color};
 			} 
-		}, */
+		},
 		{headerName: "상품상태", field: "goodsStat" , width: 100, cellClass: 'text-center',
 			cellEditorParams: { values: gagaAgGrid.extractValues(goodsStatList) },
 			valueFormatter: function (params) { return gagaAgGrid.lookupValue(goodsStatList, params.value); },
@@ -776,6 +776,7 @@
 	}
 
 	var fnGoodsExcelUploadCallBack = function(result){
+		$("#searchForm input[name=pageNo]").val('1');
 		fnGoodsListSearch("EXCEL");
 	}
 

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

@@ -309,7 +309,7 @@
 		if (!gagajf.isNull($('#searchForm textarea[name=condition]').val())){
 			var arrData = $('#searchForm textarea[name=condition]').val().replace(/\r\n/g,"\n").split("\n"); 
 			if (arrData.length > 1000){
-				mcxDialog.alertC("키워드 조회값을 1000 이하로 조회 하세요.", {
+				mcxDialog.alertC("키워드 조회값을 500 이하로 조회 하세요.", {
 					sureBtnText: "확인",
 					sureBtnClick: function() {
 						$('#searchForm textarea[name=condition]').focus();

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

@@ -254,7 +254,7 @@
 		},
 		{headerName: "이미지", field: "sysImgNm", width: 100, height: 60, cellClass: 'text-center'
 			,cellRenderer: function(params) {
-				return '<img width="60" src="'+ _goodsUrl+ "/" + params.value + '" alt="" onerror="this.src=\'/image/no.gif\';"/>';
+				return '<img width="60" src="'+ _goodsUrl+ "/" + params.value + '" alt="" onerror="this.src=\'/image/no.png\';"/>';
 			}
 		},
 		{headerName: "브랜드", field: "brandCd", width: 100, cellClass: 'text-center'},

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

@@ -123,7 +123,7 @@
 						<option value="50" selected="selected">50개씩 보기</option>
 						<option value="100">100개씩 보기</option>
 						<option value="500">500개씩 보기</option>
-						<option value="1000">1000개씩 보기</option>
+						<!-- <option value="1000">1000개씩 보기</option> -->
 					</select>
 					<input type="hidden" name="pageNo" id="pageNo" value ="1"/>
 				</li>

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

@@ -118,7 +118,7 @@
 						<option value="50" selected="selected">50개씩 보기</option>
 						<option value="100">100개씩 보기</option>
 						<option value="500">500개씩 보기</option>
-						<option value="1000">1000개씩 보기</option>
+						<!-- <option value="1000">1000개씩 보기</option> -->
 					</select>
 					<input type="hidden" name="pageNo" id="pageNo" value ="1"/>
 				</li>

+ 2 - 2
src/main/webapp/WEB-INF/views/goods/GoodsReinboundInformForm.html

@@ -123,7 +123,7 @@
 						<option value="50" selected="selected">50개씩 보기</option>
 						<option value="100">100개씩 보기</option>
 						<option value="500">500개씩 보기</option>
-						<option value="1000">1000개씩 보기</option>
+						<!-- <option value="1000">1000개씩 보기</option> -->
 					</select>
 					<input type="hidden" name="pageNo" id="pageNo" value ="1"/>
 				</li>
@@ -165,7 +165,7 @@
 		{headerName: "브랜드명", field: "brandEnm", width: 130, cellClass: 'text-center'},
 		{headerName: "이미지", field: "sysImgNm", width: 100, height: 60, cellClass: 'text-center'
 			,cellRenderer: function(params) {
-				return '<img width="60" src="'+ _goodsUrl+ "/" + params.value + '" alt="" onerror="this.src=\'/image/no.gif\';"/>';
+				return '<img width="60" src="'+ _goodsUrl+ "/" + params.value + '" alt="" onerror="this.src=\'/image/no.png\';"/>';
 			}
 		},
 		{headerName: "상품코드", field: "goodsCd", width: 130, cellClass: 'text-center'},

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

@@ -92,7 +92,7 @@
 						<option value="50" selected="selected">50개씩 보기</option>
 						<option value="100">100개씩 보기</option>
 						<option value="500">500개씩 보기</option>
-						<option value="1000">1000개씩 보기</option>
+						<!-- <option value="1000">1000개씩 보기</option> -->
 					</select>
 					<input type="hidden" name="pageNo" id="pageNo" value ="1"/>
 				</li>

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

@@ -130,7 +130,7 @@
 		//{headerName: 'No', width: 60, cellClass: 'text-center', valueGetter: function(params) { return params.node.rowIndex + 1 }},
 		{headerName: "이미지", field: "sysImgNm", width: 100, height: 60, cellClass: 'text-center'
 			,cellRenderer: function(params) {
-				return '<img width="60" src="'+ _goodsUrl+ "/" + params.value + '" alt="" onerror="this.src=\'/image/no.gif\';"/>';
+				return '<img width="60" src="'+ _goodsUrl+ "/" + params.value + '" alt="" onerror="this.src=\'/image/no.png\';"/>';
 			}
 		},
 		{headerName: "구성상품코드", field: "compsGoodsCd" , width: 130, cellClass: 'text-center'},

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

@@ -117,7 +117,7 @@
 						<option value="50" selected="selected">50개씩 보기</option>
 						<option value="100">100개씩 보기</option>
 						<option value="500">500개씩 보기</option>
-						<option value="1000">1000개씩 보기</option>
+						<!-- <option value="1000">1000개씩 보기</option> -->
 					</select>
 					<input type="hidden" name="pageNo" id="pageNo" value ="1"/>
 				</li>

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

@@ -78,7 +78,7 @@
 						<option value="50" selected="selected">50개씩 보기</option>
 						<option value="100">100개씩 보기</option>
 						<option value="500">500개씩 보기</option>
-						<option value="1000">1000개씩 보기</option>
+						<!-- <option value="1000">1000개씩 보기</option> -->
 					</select>
 					<input type="hidden" name="pageNo" id="pageNo" value ="1"/>
 				</li>

+ 11 - 4
src/main/webapp/WEB-INF/views/marketing/CouponListForm.html

@@ -68,14 +68,14 @@
 						</td>
 						<th>등록자</th>
 						<td>
-							<input type="text" class="w200" name="regNo" id="regNo">
+							<input type="text" class="w200" name="regNm" id="regNm">
 						</td>
 					</tr>
 					<tr>
 						<th>할인유형</th>
 						<td>
-							<select name="dcWayList" id="dcWayList">
-								<option value="">[전체]</option> dcWayList
+							<select name="dcWay" id="dcWay">
+								<option value="">[전체]</option>
 								<option th:if="${dcWayList}" th:each="oneData, status : ${dcWayList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
 							</select>
 						</td>
@@ -99,7 +99,7 @@
 					<tr>
 						<th colspan="1">
 						<td colspan="9">
-							<label class="chkBox"><input type="checkbox" id="endCpnExcep" name="chkExcep" value="E" checked>종료쿠폰제외</label>
+							<label class="chkBox"><input type="checkbox" id="endCpnExcep" name="chkExcep" value="Y" checked>종료쿠폰제외</label>
 						</td>
 						</th>
 					</tr>
@@ -261,6 +261,13 @@
 		var fnCouponListSearch = function() {
 			if(!fnConditionCheck()) return;
 
+			if($("#cpnSearchForm").find("input[name=chkExcep]").is(':checked') == false){
+				$("#cpnSearchForm").find("input[name=chkExcep]").val('N');
+			}else{
+				$("#cpnSearchForm").find("input[name=chkExcep]").val('Y');
+			}
+
+
 			gagaPaging.init('cpnSearchForm', fnSearchCallBack, 'couponListPagination', $('#cpnSearchForm').find('#pageSize').val());
 			// gagaPaging.load(1);
 			gagaPaging.load($("#cpnSearchForm input[name=pageNo]").val());

+ 175 - 0
src/main/webapp/WEB-INF/views/marketing/GiftCardListForm.html

@@ -0,0 +1,175 @@
+<!DOCTYPE html>
+<html lang="ko"
+	  xmlns:th="http://www.thymeleaf.org">
+<!--
+ *******************************************************************************
+ * @source  : GiftCardListForm.html
+ * @desc    : 상품권 등록 화면 Page
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2021 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.05.13   jsshin     최초 작성
+ *******************************************************************************
+ -->
+<div id="main">
+	<!-- 메인타이틀 영역 -->
+	<div class="main-title">
+	</div>
+	<!-- //메인타이틀 영역 -->
+
+	<!-- 메뉴 설명 -->
+	<div class="infoBox menu-desc">
+	</div>
+	<!-- //메뉴 설명 -->
+
+	<!-- 검색조건 영역 -->
+	<div class="panelContent">
+		<form id="giftCardForm" name="giftCardForm" action="#" th:action="@{'/marketing/giftcard/list'}" onsubmit="$('#btnSearch').trigger('click'); return false;">
+		<div class="panelStyle">
+				<table class="frmStyle" aria-describedby="검색조건">
+					<colgroup>
+						<col style="width:10%;"/>
+						<col style="width:40%;"/>
+						<col style="width:10%;"/>
+						<col/>
+					</colgroup>
+					<tbody>
+					<tr>
+						<th class="dashR">아이디</th>
+						<td class="dashR">
+							<input type="text" class="w200" name="custId" id="custId"/>
+						</td>
+					</tr>
+					<tr>
+						<th class="dashR">등록일자</th>
+						<td class="dashR">
+							<span id="terms"></span>
+						</td>
+					</tr>
+					</tbody>
+				</table>
+
+				<ul class="panelBar">
+					<li class="center">
+						<button type="button" class="btn btn-base btn-lg" id="btnSearch">조회</button>
+						<button type="button" class="btn btn-gray btn-lg" onclick="$('#giftCardForm')[0].reset();">초기화</button>
+					</li>
+				</ul>
+		</div>
+		<!-- //검색조건 영역 -->
+
+		<!-- 리스트 영역 -->
+		<div class="panelStyle">
+			<ul class="panelBar">
+				<li>
+					<button type="button" class="btn btn-default btn-lg" onclick="cfnDownloadSampleFile('SF021');">상품권대량업로드 양식 다운로드</button>
+					<button type="button" class="btn btn-primary btn-lg" id="btnGiftCardReg">상품권대량업로드</button>
+				</li>
+				<li class="right">
+					검색결과 : <strong><span id="gridRowTotalCount">0</span> 건</strong>&nbsp;
+					쪽번호 <span id="pgNo">0</span>/ <strong id="endPgNo">0</strong>&nbsp;&nbsp;
+					<select id="pageSize" name="pageSize">
+						<option value="50" selected="selected">50개씩 보기</option>
+						<option value="100">100개씩 보기</option>
+						<option value="500">500개씩 보기</option>
+						<option value="1000">1000개씩 보기</option>
+					</select>
+					<input type="hidden" name="pageNo" id="pageNo" value ="1"/>
+				</li>
+			</ul>
+			<div id="gridList" style="width: 100%; height: 570px" class="ag-theme-balham"></div>
+			<ul class="panelBar">
+				<li class="center">
+					<div class="tablePaging" id="giftCardListPagination"></div>
+				</li>
+			</ul>
+		</div>
+		</form>
+	</div>
+</div>
+<script type="text/javascript" th:src="@{'/ux/plugins/gaga/gaga.paging.js?v=' + ${#calendars.format(#calendars.createNow(), 'yyyyMMddHHmmss')}}" src="/ux/plugins/gaga/gaga.paging.js"></script>
+<script th:inline="javascript">
+	/*<![CDATA[*/
+	const siteList = gagajf.convertToArray([[${siteList}]]);				// 사이트목록
+
+	// specify the columns
+	const columnDefs = [
+		{
+			headerName: "회원ID", field:'maskingCustId', width:120, cellClass: 'text-rigth',
+			cellRenderer: function (params) {
+				return gagajf.isNull(params.data.custNo) ?
+					params.data.maskingCustId :'<a href="javascript:void(0);" onclick="cfnOpenCustDetailPopup(\''+params.data.custNo+'\')">' + params.data.maskingCustId + '</a>'
+			}
+		},
+		{headerName: "상품권번호", field:'gfcdNo', width:200, cellClass: 'text-center'},
+		{headerName: "결과메시지", field:'resultMsg', width:150, cellClass: 'text-center'},
+		{
+			headerName: "등록일자", field:'regDt', width:120, cellClass: 'text-center',
+			valueGetter: function (params) { return gagaAgGrid.toDateFormat(params.data.regDt); }
+		}
+
+	];
+
+	// Get GridOptions
+	let gridOptions = gagaAgGrid.getGridOptions(columnDefs);
+
+	// 셀 클릭 이벤트
+	gridOptions.onCellClicked = function(event) {
+
+	}
+
+	// 조회
+	$('#btnSearch').on('click', function() {
+		fnSearch();
+	});
+
+	// 검색
+	var fnSearch = function() {
+		gagaPaging.init('giftCardForm', fnSearchCallBack, 'giftCardListPagination', $('#giftCardForm select[name=pageSize]').val());
+		gagaPaging.load($('#giftCardForm input[name=pageNo]').val());
+	};
+
+	var fnSearchCallBack = function (result) {
+		$('#gridRowTotalCount').html(result.pageing.pageable.totalCount.addComma());
+		$('#giftCardForm input[name=pageNo]').val(result.pageing.pageable.pageNo.addComma());
+		$('#pgNo').html(result.pageing.pageable.pageNo.addComma());
+		$('#endPgNo').html(result.pageing.pageable.totalPage.addComma());
+
+		gridOptions.api.setRowData(result.giftCardList);
+		gagaPaging.createPagination(result.pageing.pageable);
+	};
+
+	// 상품대량수정 클릭시
+	$('#btnGiftCardReg').on('click', function() {
+		cfnExcelUploadPopup('giftCardReg', 'fnSaveGiftCardExcel');
+	});
+
+	var fnSaveGiftCardExcel = function(result){
+		var data = {
+			         procJob : result.procJob
+					,excelFileNm : result.excelFileNm
+					};
+		var jsonData = JSON.stringify(data);
+		gagajf.ajaxJsonSubmit('/marketing/upload/giftcard/bulk/reg', jsonData, fnGiftCardBulkExcelUpload);
+	}
+
+	var fnGiftCardBulkExcelUpload = function(){
+		fnSearch();
+	}
+
+	$(document).ready(function() {
+		// 공통 달력 생성
+		cfnCreateCalendar('#terms', 'stDate', 'edDate', true);
+		$('.btnToday').trigger('click');
+
+		// Create a agGrid
+		gagaAgGrid.createGrid('gridList', gridOptions);
+	});
+
+	/*]]>*/
+</script>
+
+</html>

+ 1 - 1
src/main/webapp/WEB-INF/views/marketing/PlanCornerListForm.html

@@ -367,7 +367,7 @@
 				}else{
 					imgPath = imgPath + params.data.imgPath1;
 				}
-				return '<img width="60" src="'+imgPath.replace('1000', '100')+'" onerror="this.src=\''+_uximgUrl+'/image/no.gif\';">';
+				return '<img width="60" src="'+imgPath.replace('1000', '100')+'" onerror="this.src=\''+_uximgUrl+'/image/no.png\';">';
 			}
 		},
 		/* {headerName: "전시순서"	, field:'dispOrd'		, width:80 , cellClass: 'text-center'

+ 1 - 1
src/main/webapp/WEB-INF/views/marketing/ReviewDetailForm.html

@@ -32,7 +32,7 @@
 					<div class="user_review">
 						<div class="prodInfo">
 							<div class="prodImg">
-								<img th:src="${@environment.getProperty('upload.goods.view') + '/' + reviewInfo.goodsImg}" onerror="this.src=\'/image/no.gif\';"/>
+								<img th:src="${@environment.getProperty('upload.goods.view') + '/' + reviewInfo.goodsImg}" onerror="this.src=\'/image/no.png\';"/>
 							</div>
 							<dl>
 								<dt>상품코드</dt>

+ 1 - 1
src/main/webapp/WEB-INF/views/marketing/ReviewForm.html

@@ -162,7 +162,7 @@
 				{
 					headerName: "이미지", field: "goodsImg", width: 100, height: 60, cellClass: 'text-center',
 					cellRenderer: function(params) {
-						return '<img width="60" src="' + _goodsUrl + '/' + params.value + '" alt="" onclick="cfnOpenImagePreViewPopup(\'goodsImgView\', \'' + _goodsUrl + '/' + params.value + '\')" onerror="this.src=\'/image/no.gif\';"/>';
+						return '<img width="60" src="' + _goodsUrl + '/' + params.value + '" alt="" onclick="cfnOpenImagePreViewPopup(\'goodsImgView\', \'' + _goodsUrl + '/' + params.value + '\')" onerror="this.src=\'/image/no.png\';"/>';
 					}
 				},
 				{headerName: "상품코드", field: "goodsCd", width: 120, cellClass: 'text-center', cellRenderer: function(params) { return '<a href="javascript:void(0);">' + params.value + '</a>'; }},

+ 1 - 1
src/main/webapp/WEB-INF/views/marketing/SocialShoppingListForm.html

@@ -518,7 +518,7 @@
 		{width: 40, minWidth: 40, cellClass: 'text-center', headerCheckboxSelection: true, checkboxSelection: true, filter: false},
 		{headerName: '상품이미지'				, field:'goodsImg'	, width: 100, height: 60, cellClass: 'text-center',
 			cellRenderer: function(params) {
-				return '<img width="60" src="' + _goodsUrl + '/' + params.value + '" alt="" onclick="cfnOpenImagePreViewPopup(\'goodsImgView\', \'' + _goodsUrl + '/' + params.value + '\')" onerror="this.src=\'/image/no.gif\';"/>';
+				return '<img width="60" src="' + _goodsUrl + '/' + params.value + '" alt="" onclick="cfnOpenImagePreViewPopup(\'goodsImgView\', \'' + _goodsUrl + '/' + params.value + '\')" onerror="this.src=\'/image/no.png\';"/>';
 			}
 		},
 		{headerName: '상품코드'				, field:'goodsCd'	, width:250 , cellClass: 'text-center',

+ 5 - 12
src/main/webapp/WEB-INF/views/stock/GoodsSizeStockForm.html

@@ -173,24 +173,16 @@
 					<button type="button" class="btn btn-default btn-lg" id="btnExcelSampleDownLoad">다운로드</button>
 					<button type="button" class="btn btn-base btn-lg" id="btnGoodsExcelSearch">엑셀조회</button>
 					<button type="button" class="btn btn-success btn-lg" id="btnGoodsExcelSave" th:if="${sessionInfo.roleCd == 'G001_0000' OR sessionInfo.roleCd == 'G001_A000' OR sessionInfo.roleCd == 'G001_A101' OR sessionInfo.roleCd == 'G001_A100' OR sessionInfo.roleCd == 'G001_A001'}">품절/안전재고 저장</button>
-					<!-- 아이콘 툴팁 -->
-					&nbsp;<div class="iconTooltip">
-						<i class="fa fa-info" aria-hidden="true"></i>
-						<span class="left" style="width:500px;">
-						<!-- class="left" 또는 class="right" -->
-							* 매체별판매가능재고 = WMS가용재고 - 안전재고 - 출고대기
-						</span>
-					</div>
-					<!-- //아이콘 툴팁 -->
 				</li>
 				<li class="right">
 					검색결과 : <strong><span id="gridRowTotalCount">0</span> 건</strong>&nbsp;
 					쪽번호 <span id="pgNo">0</span>/ <strong id="endPgNo">0</strong>&nbsp;&nbsp;
 					<select id="pageSize" name="pageSize">
-						<option value="100" selected="selected">100개씩 보기</option>
+						<option value="50" selected="selected">50개씩 보기</option>
+						<option value="100">100개씩 보기</option>
 						<option value="500">500개씩 보기</option>
-						<option value="1000">1000개씩 보기</option>
-						<option value="5000">5000개씩 보기</option>
+						<!-- <option value="1000">1000개씩 보기</option>
+						<option value="5000">5000개씩 보기</option> -->
 					</select>
 					<input type="hidden" name="pageNo" id="pageNo" value ="1"/>
 				</li>
@@ -511,6 +503,7 @@
 	}
 	
 	var fnGoodsSizeStockExcelSearchCallBack = function(result){
+		$("#goodsSizeStockForm input[name=pageNo]").val('1');
 		fnGoodsListSearch("EXCEL");
 	}
 	

+ 69 - 74
src/main/webapp/dx5/dextuploadx5-configuration.js

@@ -1,75 +1,70 @@
-/*
- * DEXTUploadX5 Configuration javascript file
- * Copyright DEVPIA Inc.
- */
-;; (function (win) {
-
-    if (!location.origin) location.origin = location.protocol + "//" + location.host;
-
-    var gAuthkey = '';
-    if (location.host.indexOf("ld") > -1) {
-    	gAuthkey = "mEK6nvLPFD5zKL86wQPUBBiHLkMa+iogrAHH9wKqeuaQeGLfPv/PaOWtHXhN1OPqRfgtiaDYGj3Jetiewo186YA3aFqU3vK3UuNKGxJ8H8t34Hb0Ue4450xEJQK4awZqSFaR7HOPdxeWhSQ8oKhwgdZNZuolo4737WdsJZGq93Y= ";
-    } else if (location.host.indexOf("lp") > -1) {
-    	gAuthkey = "gx9EHEhXzTpbdxWjty/oHh9cfVi5WA5X4BV71AHaC/ORN/1fcs8nTTd4oUUvC5WhHqEa6Wt8cfmCBJ9w/pJpRhDd+tVu6kPDt9bxZL9n0bvaUn2rrbmJMA+HC9gzahwdEOcjr6ZOmNSEd6N0xN2BDBk55hvfPw02R77XjVuZrQU=";
-    } else if (location.host.indexOf("td") > -1) {
-    	gAuthkey = "pUlapJyQFZ3dQWegfjlLq1R/NLIOnSf7QBFpipc9XudSc/RafzVJ5GjAXELTmraWMSep2M2lv8ELx51g8QX7bmwyIR+xARQ5wIk/lpfzkYRALBXMIi2XHbxJjl4XCVkVwWa7HkSI02CGezyoCxN7HhDiGOGIKF+rq0aTkmRC2kg=";
-    } else if (location.host.indexOf("dev") > -1) {
-    	gAuthkey = "gx9EHEhXzTpbdxWjty/oHh9cfVi5WA5X4BV71AHaC/ORN/1fcs8nTTd4oUUvC5WhHqEa6Wt8cfmCBJ9w/pJpRhDd+tVu6kPDt9bxZL9n0bvaUn2rrbmJMA+HC9gzahwdEOcjr6ZOmNSEd6N0xN2BDBk55hvfPw02R77XjVuZrQU=";
-    } else if (location.host.indexOf("qas") > -1) {
-    	gAuthkey = "gx9EHEhXzTpbdxWjty/oHh9cfVi5WA5X4BV71AHaC/ORN/1fcs8nTTd4oUUvC5WhHqEa6Wt8cfmCBJ9w/pJpRhDd+tVu6kPDt9bxZL9n0bvaUn2rrbmJMA+HC9gzahwdEOcjr6ZOmNSEd6N0xN2BDBk55hvfPw02R77XjVuZrQU=";
-    } else {
-    	gAuthkey = "DUAYCUDVOFWITARW";
-    }
-
-    win.dextuploadx5Configuration = {
-
-        // 제품의 인증키 문자열입니다.
-        // 파일을 업로드하기 위해서는 반드시 인증키 문자열이 있어야 합니다.
-        // example) authkey: "jn+xziPdVh6f5KN17uFHd.....암호화된 문자열입니다.....I9r5XGfwxQ="
-        authkey: gAuthkey,
-
-        // 사용하고자 하는 제품의 명시 버전입니다.
-        // 1) multi 제품의 경우
-        //   설치형 제품이 아니므로, 리소스를 그대로 사용합니다.
-        // 2) ie 제품의 경우
-        //   설치 버전 확인 불가: 명시된 버전을 다운로드할 수 있는 다운로드 페이지(ieDownloadURL을 참고)로 이동합니다.
-        //   설치 버전 >= 명시 버전: 설치된 제품을 그대로 사용합니다.
-        //   설치 버전 < 명시 버전: 명시된 버전을 다운로드할 수 있는 다운로드 페이지로 이동합니다.
-        // 3) HD 응용프로그램의 경우
-        //   설치 버전 확인 불가: 명시된 버전을 다운로드할 수 있는 다운로드 페이지(hdDownloadURL을 참고)로 이동합니다.
-        //   설치 버전 >= 명시 버전: 설치된 제품을 그대로 사용합니다.
-        //   설치 버전 < 명시 버전: 제품 업데이트(hd32UpdateURL, hd64UpdateURL을 참고)를 시도합니다.
-        version: "3.2.0.0",
-
-        // 패스란 제품 리소스의 위치를 말합니다.
-        // 반드시 스키마(http, https)를 포함한 전체 path를 설정해주셔야 합니다.
-        // 절대로 상대경로를 입력하지 마십시오.
-        // 전제 경로 예제: "http://www.sample.com/dx5/"
-        // 동일 도메인이라면: location.origin + "/dx5/"
-        productPath: location.origin + "/dx5/",
-
-        // ie 버전을 사용하는 경우, 제품이 설치되지 않았을 때, 제품을 다운로드할 수 있는 페이지로 이동시킵니다.
-        // 다운로드 페이지 경로는 반드시 productPath 하위에 존재할 필요가 없으며, 주어진 환경에 따라 커스터마이징하여 사용하십시오.
-        // 절대로 상대경로를 입력하지 마십시오.
-        // 전제 경로 예제: "http://www.sample.com/dx5/client/dextuploadx5-ax-download.html"
-        // 동일 도메인이라면: location.origin + "/dx5/client/dextuploadx5-ax-download.html"
-        ieDownloadURL: location.origin + "/dx5/client/dextuploadx5-ax-download.html",
-
-        // HD 프로그램을 사용하는 경우, 제품이 설치되지 않았을 때, 제품을 다운로드할 수 있는 페이지로 이동시킵니다.
-        // 다운로드 페이지 경로는 반드시 productPath 하위에 존재할 필요가 없으며, 주어진 환경에 따라 커스터마이징하여 사용하십시오.
-        // 절대로 상대경로를 입력하지 마십시오.
-        // 전제 경로 예제: "http://www.sample.com/dx5/client/dextuploadx5-hd-download.html"
-        // 동일 도메인이라면: location.origin + "/dx5/client/dextuploadx5-hd-download.html"
-        hdDownloadURL: location.origin + "/dx5/client/dextuploadx5-hd-download.html",
-
-        // HD 프로그램을 자동으로 업데이트할 수 있는 경로입니다.
-        // 주어진 환경에 따라 커스터마이징하여 사용하되, 절대로 상대경로를 입력하지 마십시오.
-        // 서버 MIME 설정에 따라 다운로드가 실패할 수 있으므로, exe 파일이 다운로드할 수 있도록 서버 설정이 필요할 수 있습니다.
-        // 절대로 상대경로를 입력하지 마십시오.
-        // 전제 경로 예제: "http://www.sample.com/dx5/client/dextuploadx5-hd-installer.exe"
-        // 동일 도메인이라면: location.origin + "/dx5/client/dextuploadx5-hd-installer.exe"
-        hd32UpdateURL: location.origin + "/dx5/client/dextuploadx5-hd-installer.exe",
-        // 64비트용 설치 프로그램을 가리키는 업데이트 경로입니다.
-        hd64UpdateURL: location.origin + "/dx5/client/dextuploadx5-hd-installer-x64.exe"
-    };
+/* dextuploadx5-configuration Copyright ⓒ DEXTSolution Inc. */
+
+(function (win) {
+
+    if (!location.origin) location.origin = location.protocol + "//" + location.host;
+
+    var gAuthkey = '';
+    if (location.host.indexOf("ld") > -1) {
+    	gAuthkey = "/kMB0Chw9RULxOoWHHAhF4d09CrBzhsd0slsUr590PVmT7A9EHQmVpn8CsvuE1hAZVRtsV3Jb5xUL0hyVRaAn+aTCLoRxeGK3Uu/j5GxAoNYW8D7smKwGrDN/l/u7AoIkM8nDjsAqmTbtTngVsOReqSgchnI/3keVdFYciIP6iE= ";
+    } else if (location.host.indexOf("lp") > -1) {
+    	gAuthkey = "gx9EHEhXzTpbdxWjty/oHh9cfVi5WA5X4BV71AHaC/ORN/1fcs8nTTd4oUUvC5WhHqEa6Wt8cfmCBJ9w/pJpRhDd+tVu6kPDt9bxZL9n0bvaUn2rrbmJMA+HC9gzahwdEOcjr6ZOmNSEd6N0xN2BDBk55hvfPw02R77XjVuZrQU=";
+    } else if (location.host.indexOf("td") > -1) {
+    	gAuthkey = "pUlapJyQFZ3dQWegfjlLq1R/NLIOnSf7QBFpipc9XudSc/RafzVJ5GjAXELTmraWMSep2M2lv8ELx51g8QX7bmwyIR+xARQ5wIk/lpfzkYRALBXMIi2XHbxJjl4XCVkVwWa7HkSI02CGezyoCxN7HhDiGOGIKF+rq0aTkmRC2kg=";
+    } else if (location.host.indexOf("dev") > -1) {
+    	gAuthkey = "gx9EHEhXzTpbdxWjty/oHh9cfVi5WA5X4BV71AHaC/ORN/1fcs8nTTd4oUUvC5WhHqEa6Wt8cfmCBJ9w/pJpRhDd+tVu6kPDt9bxZL9n0bvaUn2rrbmJMA+HC9gzahwdEOcjr6ZOmNSEd6N0xN2BDBk55hvfPw02R77XjVuZrQU=";
+    } else if (location.host.indexOf("qas") > -1) {
+    	gAuthkey = "gx9EHEhXzTpbdxWjty/oHh9cfVi5WA5X4BV71AHaC/ORN/1fcs8nTTd4oUUvC5WhHqEa6Wt8cfmCBJ9w/pJpRhDd+tVu6kPDt9bxZL9n0bvaUn2rrbmJMA+HC9gzahwdEOcjr6ZOmNSEd6N0xN2BDBk55hvfPw02R77XjVuZrQU=";
+    } else {
+    	gAuthkey = "HLk/1/cd5YmQRtxmxzQq1iZ3LHZtkTe8bW8d2TT9e1wl10VwmK3TAts3LYgO7n7iTfESQBQNrj+IHIxS6u10tsQAkpMaNrX6DayyvgzjsCjZ9PsH8ODpcAdd9Svm9oIUznBy8cPuhXxN10vAordFny3NaL2OUGvHDgLZwkw0qD14BSaUU+HuGX6qMZip7JQA";
+    }
+    
+    win.dextuploadx5Configuration = {
+        // authkey: Authentication Key string
+        authkey: gAuthkey,
+
+        // 사용하고자 하는 제품의 명시 버전입니다.
+        // 1) multi 제품의 경우
+        //   설치형 제품이 아니므로, 리소스를 그대로 사용합니다.
+        // 2) ie 제품의 경우
+        //   설치 버전 확인 불가: 명시된 버전을 다운로드할 수 있는 다운로드 페이지(ieDownloadURL을 참고)로 이동합니다.
+        //   설치 버전 >= 명시 버전: 설치된 제품을 그대로 사용합니다.
+        //   설치 버전 < 명시 버전: 명시된 버전을 다운로드할 수 있는 다운로드 페이지로 이동합니다.
+        // 3) HD 응용프로그램의 경우
+        //   설치 버전 확인 불가: 명시된 버전을 다운로드할 수 있는 다운로드 페이지(hdDownloadURL을 참고)로 이동합니다.
+        //   설치 버전 >= 명시 버전: 설치된 제품을 그대로 사용합니다.
+        //   설치 버전 < 명시 버전: 제품 업데이트(hd32UpdateURL, hd64UpdateURL을 참고)를 시도합니다.
+        version: "3.2.0.0",
+
+        // 패스란 제품 리소스의 위치를 말합니다.
+        // 반드시 스키마(http, https)를 포함한 전체 path를 설정해주셔야 합니다.
+        // 절대로 상대경로를 입력하지 마십시오.
+        // 전제 경로 예제: "http://www.sample.com/dx5/"
+        // 동일 도메인이라면: location.origin + "/dx5/"
+        productPath: location.origin + "/dx5/",
+
+        // ie 버전을 사용하는 경우, 제품이 설치되지 않았을 때, 제품을 다운로드할 수 있는 페이지로 이동시킵니다.
+        // 다운로드 페이지 경로는 반드시 productPath 하위에 존재할 필요가 없으며, 주어진 환경에 따라 커스터마이징하여 사용하십시오.
+        // 절대로 상대경로를 입력하지 마십시오.
+        // 전제 경로 예제: "http://www.sample.com/dx5/client/dextuploadx5-ax-download.html"
+        // 동일 도메인이라면: location.origin + "/dx5/client/dextuploadx5-ax-download.html"
+        ieDownloadURL: location.origin + "/dx5/client/dextuploadx5-ax-download.html",
+
+        // HD 프로그램을 사용하는 경우, 제품이 설치되지 않았을 때, 제품을 다운로드할 수 있는 페이지로 이동시킵니다.
+        // 다운로드 페이지 경로는 반드시 productPath 하위에 존재할 필요가 없으며, 주어진 환경에 따라 커스터마이징하여 사용하십시오.
+        // 절대로 상대경로를 입력하지 마십시오.
+        // 전제 경로 예제: "http://www.sample.com/dx5/client/dextuploadx5-hd-download.html"
+        // 동일 도메인이라면: location.origin + "/dx5/client/dextuploadx5-hd-download.html"
+        hdDownloadURL: location.origin + "/dx5/client/dextuploadx5-hd-download.html",
+
+        // HD 프로그램을 자동으로 업데이트할 수 있는 경로입니다.
+        // 주어진 환경에 따라 커스터마이징하여 사용하되, 절대로 상대경로를 입력하지 마십시오.
+        // 서버 MIME 설정에 따라 다운로드가 실패할 수 있으므로, exe 파일이 다운로드할 수 있도록 서버 설정이 필요할 수 있습니다.
+        // 절대로 상대경로를 입력하지 마십시오.
+        // 전제 경로 예제: "http://www.sample.com/dx5/client/dextuploadx5-hd-installer.exe"
+        // 동일 도메인이라면: location.origin + "/dx5/client/dextuploadx5-hd-installer.exe"
+        hd32UpdateURL: location.origin + "/dx5/client/dextuploadx5-hd-installer.exe",
+        // 64비트용 설치 프로그램을 가리키는 업데이트 경로입니다.
+        hd64UpdateURL: location.origin + "/dx5/client/dextuploadx5-hd-installer-x64.exe"
+    };
 })(window);

BIN
src/main/webapp/image/no.png


+ 1 - 1
src/main/webapp/ux/js/admin.popup.js

@@ -189,7 +189,7 @@ var cfnOpenImagePreViewPopup = function(id,imgUrl) {
 
 	var str = '<div class="videoPopup" data-width="700" data-height="350" id="'+id+'" style="z-index:30">';
 	str = str + '<button type="button" class="close" onclick="uifnPopupClose(\''+id+'\')"><i class="fa fa-times"></i></button>';
-	str = str + '<img id="imagePreView" src="/image/no.gif"/>';
+	str = str + '<img id="imagePreView" src="/image/no.png" onerror="this.src=\'/image/no.png\';" />';
 	str = str + '</div>';
 
 	if ($('#'+ id).length == 0) {