Browse Source

Merge branch 'develop' into card007

card007 4 năm trước cách đây
mục cha
commit
ee2f66a8f4
25 tập tin đã thay đổi với 1124 bổ sung573 xóa
  1. 15 3
      src/main/java/com/style24/admin/biz/dao/TsaGoodsDao.java
  2. 70 32
      src/main/java/com/style24/admin/biz/service/TsaGoodsService.java
  3. 5 5
      src/main/java/com/style24/admin/biz/service/TsaShoplinkerService.java
  4. 13 0
      src/main/java/com/style24/admin/biz/web/TsaBusinessController.java
  5. 94 12
      src/main/java/com/style24/admin/biz/web/TsaGoodsController.java
  6. 0 2
      src/main/java/com/style24/admin/biz/web/TsaSettleController.java
  7. 19 0
      src/main/java/com/style24/admin/biz/web/TsaShoplinkerController.java
  8. 4 0
      src/main/java/com/style24/persistence/domain/DeliveryLoc.java
  9. 65 0
      src/main/java/com/style24/persistence/domain/GoodsSupplyPrice.java
  10. 14 1
      src/main/java/com/style24/persistence/mybatis/shop/TsaBusiness.xml
  11. 108 22
      src/main/java/com/style24/persistence/mybatis/shop/TsaGoods.xml
  12. 439 382
      src/main/webapp/WEB-INF/views/business/DeliveryLocForm.html
  13. 28 12
      src/main/webapp/WEB-INF/views/display/MainContentsPopupForm.html
  14. 75 31
      src/main/webapp/WEB-INF/views/display/MainGnbContentsPopupForm.html
  15. 30 1
      src/main/webapp/WEB-INF/views/display/MainMultiContentsPopupForm.html
  16. 3 2
      src/main/webapp/WEB-INF/views/goods/GoodsNaverPriceForm.html
  17. 86 13
      src/main/webapp/WEB-INF/views/goods/GoodsPriceReserveForm.html
  18. 6 3
      src/main/webapp/WEB-INF/views/goods/GoodsPriceReservePopupForm.html
  19. 1 5
      src/main/webapp/WEB-INF/views/goods/GoodsQuikDeliverySkipForm.html
  20. 8 8
      src/main/webapp/WEB-INF/views/goods/GoodsSupplyPriceForm.html
  21. 1 1
      src/main/webapp/WEB-INF/views/goods/GoodsWmsIncomelotSkuForm.html
  22. 12 6
      src/main/webapp/WEB-INF/views/marketing/CouponIssuePopupForm.html
  23. 24 16
      src/main/webapp/WEB-INF/views/marketing/CouponPopupForm.html
  24. 3 15
      src/main/webapp/WEB-INF/views/shoplinker/ShoplinkerGoodsSendForm.html
  25. 1 1
      src/main/webapp/WEB-INF/views/shoplinker/ShoplinkerOrderForm.html

+ 15 - 3
src/main/java/com/style24/admin/biz/dao/TsaGoodsDao.java

@@ -21,6 +21,7 @@ import com.style24.persistence.domain.GoodsPriceRes;
 import com.style24.persistence.domain.GoodsResSell;
 import com.style24.persistence.domain.GoodsSafeNo;
 import com.style24.persistence.domain.GoodsSearch;
+import com.style24.persistence.domain.GoodsSupplyPrice;
 import com.style24.persistence.domain.GoodsTnmRes;
 import com.style24.persistence.domain.GoodsVideo;
 import com.style24.persistence.domain.IfIncomelot;
@@ -201,6 +202,7 @@ public interface TsaGoodsDao {
 	 */
 	Collection<GagaMap> getGoodsInfoExcelList(GoodsSearch goodsSearch);
 
+
 	/**
 	 * 상품 이미지 필수 항목 입력 여부 조회
 	 *
@@ -810,7 +812,7 @@ public interface TsaGoodsDao {
 	 * @author eskim
 	 * @since 2020. 11. 26
 	 */
-	Collection<GoodsPriceRes> getGoodsSupplyPriceList(GoodsPriceRes goodsPriceRes);
+	Collection<GoodsSupplyPrice> getGoodsSupplyPriceList(GoodsSupplyPrice goodsSupplyPrice);
 
 	/**
 	 * 상품 가격수정
@@ -833,11 +835,11 @@ public interface TsaGoodsDao {
 	/**
 	 * 상품 가격승인 적용일자 변경
 	 *
-	 * @param goodsPriceRes
+	 * @param goodsSupplyPrice
 	 * @author eskim
 	 * @since 2020. 11. 26
 	 */
-	void updateGoodsSupplyPricecfrmDt(GoodsPriceRes goodsPriceRes);
+	void updateGoodsSupplyPricecfrmDt(GoodsSupplyPrice goodsSupplyPrice);
 
 	/**
 	 * 상품 네이버 최저가 목록
@@ -849,6 +851,16 @@ public interface TsaGoodsDao {
 	 */
 	Collection<GoodsNaverLowestPrice> getGoodsNaverPriceList(GoodsSearch goodsSearch);
 
+	/**
+	 * 상품 네이버 최저가 엑셀다운로드
+	 *
+	 * @param goodsSearch
+	 * @return
+	 * @author eskim
+	 * @since 2021. 07. 09
+	 */
+	Collection<GagaMap> getGoodsNaverExcelList(GoodsSearch goodsSearch);
+	
 	/**
 	 * 상품 네이버 최저가 최종 작업일
 	 *

+ 70 - 32
src/main/java/com/style24/admin/biz/service/TsaGoodsService.java

@@ -41,6 +41,7 @@ import com.style24.persistence.domain.GoodsPriceRes;
 import com.style24.persistence.domain.GoodsResSell;
 import com.style24.persistence.domain.GoodsSafeNo;
 import com.style24.persistence.domain.GoodsSearch;
+import com.style24.persistence.domain.GoodsSupplyPrice;
 import com.style24.persistence.domain.GoodsTnmRes;
 import com.style24.persistence.domain.GoodsVideo;
 import com.style24.persistence.domain.IfIncomelot;
@@ -966,15 +967,15 @@ public class TsaGoodsService {
 		goods.setRegNo(TsaSession.getInfo().getUserNo());
 		goods.setUpdNo(TsaSession.getInfo().getUserNo());
 
-		goods.setGoodsDesc(GagaStringUtil.replace(GagaStringUtil.replace(goods.getGoodsDesc(), "&lt;", "<"), "&gt;", ">"));
-		goods.setGoodsPcTopDesc(GagaStringUtil.replace(GagaStringUtil.replace(goods.getGoodsPcTopDesc(), "&lt;", "<"), "&gt;", ">"));
-		goods.setGoodsMobileTopDesc(GagaStringUtil.replace(GagaStringUtil.replace(goods.getGoodsMobileTopDesc(), "&lt;", "<"), "&gt;", ">"));
-		goods.setGoodsPcDownDesc(GagaStringUtil.replace(GagaStringUtil.replace(goods.getGoodsPcDownDesc(), "&lt;", "<"), "&gt;", ">"));
-		goods.setGoodsMobileDownDesc(GagaStringUtil.replace(GagaStringUtil.replace(goods.getGoodsMobileDownDesc(), "&lt;", "<"), "&gt;", ">"));
+//		goods.setGoodsDesc(GagaStringUtil.replace(GagaStringUtil.replace(goods.getGoodsDesc(), "&lt;", "<"), "&gt;", ">"));
+//		goods.setGoodsPcTopDesc(GagaStringUtil.replace(GagaStringUtil.replace(goods.getGoodsPcTopDesc(), "&lt;", "<"), "&gt;", ">"));
+//		goods.setGoodsMobileTopDesc(GagaStringUtil.replace(GagaStringUtil.replace(goods.getGoodsMobileTopDesc(), "&lt;", "<"), "&gt;", ">"));
+//		goods.setGoodsPcDownDesc(GagaStringUtil.replace(GagaStringUtil.replace(goods.getGoodsPcDownDesc(), "&lt;", "<"), "&gt;", ">"));
+//		goods.setGoodsMobileDownDesc(GagaStringUtil.replace(GagaStringUtil.replace(goods.getGoodsMobileDownDesc(), "&lt;", "<"), "&gt;", ">"));
 
-		goods.setGoodsNm(GagaStringUtil.replace(GagaStringUtil.replace(goods.getGoodsNm(), "&lt;", "<"), "&gt;", ">"));
-		goods.setGoodsTnm(GagaStringUtil.replace(GagaStringUtil.replace(goods.getGoodsTnm(), "&lt;", "<"), "&gt;", ">"));
-		goods.setGoodsSnm1(GagaStringUtil.replace(GagaStringUtil.replace(goods.getGoodsSnm1(), "&lt;", "<"), "&gt;", ">"));
+//		goods.setGoodsNm(GagaStringUtil.replace(GagaStringUtil.replace(goods.getGoodsNm(), "&lt;", "<"), "&gt;", ">"));
+//		goods.setGoodsTnm(GagaStringUtil.replace(GagaStringUtil.replace(goods.getGoodsTnm(), "&lt;", "<"), "&gt;", ">"));
+//		goods.setGoodsSnm1(GagaStringUtil.replace(GagaStringUtil.replace(goods.getGoodsSnm1(), "&lt;", "<"), "&gt;", ">"));
 
 		// 딜상품의 대표상품 변경여부 확인
 		if ("G056_D".equals(goods.getGoodsType())) {
@@ -2329,14 +2330,14 @@ public class TsaGoodsService {
 	/**
 	 * 상품 가격승인관리 목록 조회
 	 *
-	 * @param goodsPriceHst
+	 * @param goodsSupplyPrice
 	 * @return
 	 * @author eskim
 	 * @since 2020. 11. 26
 	 */
-	public Collection<GoodsPriceRes> getGoodsSupplyPriceList(GoodsPriceRes goodsPriceHst) {
+	public Collection<GoodsSupplyPrice> getGoodsSupplyPriceList(GoodsSupplyPrice goodsSupplyPrice) {
 
-		return goodsDao.getGoodsSupplyPriceList(goodsPriceHst);
+		return goodsDao.getGoodsSupplyPriceList(goodsSupplyPrice);
 	}
 
 	/**
@@ -2347,34 +2348,34 @@ public class TsaGoodsService {
 	 * @since 2020. 11. 26
 	 */
 	@Transactional("shopTxnManager")
-	public void saveGoodsSupplyPrice(Collection<GoodsPriceRes> goodsPriceHstList) {
+	public void saveGoodsSupplyPrice(Collection<GoodsSupplyPrice> goodsSupplyPriceList) {
 
-		for (GoodsPriceRes goodsPriceRes : goodsPriceHstList) {
-			goodsPriceRes.setRegNo(TsaSession.getInfo().getUserNo());
-			goodsPriceRes.setUpdNo(TsaSession.getInfo().getUserNo());
+		for (GoodsSupplyPrice goodsSupplyPrice : goodsSupplyPriceList) {
+			goodsSupplyPrice.setRegNo(TsaSession.getInfo().getUserNo());
+			goodsSupplyPrice.setUpdNo(TsaSession.getInfo().getUserNo());
 
 			Goods goods = new Goods();
 			goods.setRegNo(TsaSession.getInfo().getUserNo());
 			goods.setUpdNo(TsaSession.getInfo().getUserNo());
-			goods.setGoodsCd(goodsPriceRes.getGoodsCd());
+			goods.setGoodsCd(goodsSupplyPrice.getGoodsCd());
 
 			goodsDao.createGoodsHst(goods);
 
 			// 판매가 변경
-			if (goodsPriceRes.getResGoodsPrice() > 0) {
-				goods.setDcRate((int)(this.getDcRate(goodsPriceRes.getListPrice(), goodsPriceRes.getResGoodsPrice())));
-				goods.setCurrBprice(goodsPriceRes.getCurrPrice());
-				goods.setCurrPrice(goodsPriceRes.getResGoodsPrice());
+			if (goodsSupplyPrice.getSupplyGoodsPrice() > 0) {
+				goods.setDcRate((int)(this.getDcRate(goodsSupplyPrice.getListPrice(), goodsSupplyPrice.getSupplyGoodsPrice())));
+				goods.setCurrBprice(goodsSupplyPrice.getCurrPrice());
+				goods.setCurrPrice(goodsSupplyPrice.getSupplyGoodsPrice());
 				goodsDao.updateGoodsPrice(goods);
 			}
 
 			// 판매수수료율 변경
-			if (Float.compare(goodsPriceRes.getSellFeeRate(), 0) > 0) {
-				goods.setSellFeeRate(goodsPriceRes.getSellFeeRate());
+			if (Float.compare(goodsSupplyPrice.getSupplySellFeeRate(), 0) > 0) {
+				goods.setSellFeeRate(goodsSupplyPrice.getSupplySellFeeRate());
 				goodsDao.updateSellFeeRate(goods);
 			}
 
-			goodsDao.updateGoodsSupplyPricecfrmDt(goodsPriceRes);
+			goodsDao.updateGoodsSupplyPricecfrmDt(goodsSupplyPrice);
 		}
 	}
 
@@ -2390,6 +2391,43 @@ public class TsaGoodsService {
 		return goodsDao.getGoodsNaverPriceList(goodsSearch);
 	}
 
+	
+	/**
+	 * 상품 네이버 최저가 엑셀다운로드
+	 *
+	 * @param goodsSearch
+	 * @param excelFilenameWithPath - 경로를 포함한 엑셀파일명
+	 * @return
+	 * @author eskim
+	 * @since 2021. 07. 09
+	 */
+	public void getGoodsNaverExcelList(GoodsSearch goodsSearch, String excelFilenameWithPath) {
+		
+		// 헤더 title 설정
+		String[] listTitles = {"상품코드", "브랜드명", "상품명", "정상가", "판매가", "자사즉시할인가", "네이버최저가", "차액",
+			"최저가몰명", "최저가몰링크"};
+
+		// DB 처리 시 사용되는 파라미터명(셀명) 설정
+		String[] cellNames = {"GOODS_CD", "BRAND_ENM", "GOODS_NM", "LIST_PRICE", "CURR_PRICE", "BENEFIT_PRICE",  "LOWEST_PRICE", "PRICE" , 
+			"MALL_NM", "MALL_LINK"};
+
+		String[] cellTypes = {
+			GagaExcelConstants.CellType.CHAR_CENTER.name(), GagaExcelConstants.CellType.CHAR_CENTER.name(),
+			GagaExcelConstants.CellType.CHAR_CENTER.name(), GagaExcelConstants.CellType.CHAR_RIGHT.name(),
+			GagaExcelConstants.CellType.CHAR_RIGHT.name(), GagaExcelConstants.CellType.CHAR_RIGHT.name(),
+			GagaExcelConstants.CellType.CHAR_RIGHT.name(), GagaExcelConstants.CellType.CHAR_RIGHT.name(),
+			GagaExcelConstants.CellType.CHAR_CENTER.name(), GagaExcelConstants.CellType.CHAR_CENTER.name()};
+
+		Collection<GagaMap> dataList = goodsDao.getGoodsNaverExcelList(goodsSearch); 
+
+		try {
+			GagaExcelUtil.createExcel(excelFilenameWithPath, dataList, "상품 네이버 가격", listTitles, cellNames, cellTypes, TsaConstants.EXCEL_FOOTER_TITLE);
+		} catch (Exception e) {
+			throw new IllegalStateException(e);
+		}
+	
+	}
+	
 	/**
 	 * 상품 네이버 최저가 목록
 	 *
@@ -3829,15 +3867,15 @@ public class TsaGoodsService {
 		goods.setRegNo(TsaSession.getInfo().getUserNo());
 		goods.setUpdNo(TsaSession.getInfo().getUserNo());
 
-		goods.setGoodsDesc(GagaStringUtil.replace(GagaStringUtil.replace(goods.getGoodsDesc(), "&lt;", "<"), "&gt;", ">"));
-		goods.setGoodsPcTopDesc(GagaStringUtil.replace(GagaStringUtil.replace(goods.getGoodsPcTopDesc(), "&lt;", "<"), "&gt;", ">"));
-		goods.setGoodsMobileTopDesc(GagaStringUtil.replace(GagaStringUtil.replace(goods.getGoodsMobileTopDesc(), "&lt;", "<"), "&gt;", ">"));
-		goods.setGoodsPcDownDesc(GagaStringUtil.replace(GagaStringUtil.replace(goods.getGoodsPcDownDesc(), "&lt;", "<"), "&gt;", ">"));
-		goods.setGoodsMobileDownDesc(GagaStringUtil.replace(GagaStringUtil.replace(goods.getGoodsMobileDownDesc(), "&lt;", "<"), "&gt;", ">"));
-
-		goods.setGoodsNm(GagaStringUtil.replace(GagaStringUtil.replace(goods.getGoodsNm(), "&lt;", "<"), "&gt;", ">"));
-		goods.setGoodsTnm(GagaStringUtil.replace(GagaStringUtil.replace(goods.getGoodsTnm(), "&lt;", "<"), "&gt;", ">"));
-		goods.setGoodsSnm1(GagaStringUtil.replace(GagaStringUtil.replace(goods.getGoodsSnm1(), "&lt;", "<"), "&gt;", ">"));
+//		goods.setGoodsDesc(GagaStringUtil.replace(GagaStringUtil.replace(goods.getGoodsDesc(), "&lt;", "<"), "&gt;", ">"));
+//		goods.setGoodsPcTopDesc(GagaStringUtil.replace(GagaStringUtil.replace(goods.getGoodsPcTopDesc(), "&lt;", "<"), "&gt;", ">"));
+//		goods.setGoodsMobileTopDesc(GagaStringUtil.replace(GagaStringUtil.replace(goods.getGoodsMobileTopDesc(), "&lt;", "<"), "&gt;", ">"));
+//		goods.setGoodsPcDownDesc(GagaStringUtil.replace(GagaStringUtil.replace(goods.getGoodsPcDownDesc(), "&lt;", "<"), "&gt;", ">"));
+//		goods.setGoodsMobileDownDesc(GagaStringUtil.replace(GagaStringUtil.replace(goods.getGoodsMobileDownDesc(), "&lt;", "<"), "&gt;", ">"));
+//
+//		goods.setGoodsNm(GagaStringUtil.replace(GagaStringUtil.replace(goods.getGoodsNm(), "&lt;", "<"), "&gt;", ">"));
+//		goods.setGoodsTnm(GagaStringUtil.replace(GagaStringUtil.replace(goods.getGoodsTnm(), "&lt;", "<"), "&gt;", ">"));
+//		goods.setGoodsSnm1(GagaStringUtil.replace(GagaStringUtil.replace(goods.getGoodsSnm1(), "&lt;", "<"), "&gt;", ">"));
 
 		// 판매기간설정 eskim
 		goods.setSellStdt(goods.getSellStYMD().replaceAll("-", "") + goods.getSellStHH() + "0000");

+ 5 - 5
src/main/java/com/style24/admin/biz/service/TsaShoplinkerService.java

@@ -1,11 +1,11 @@
 package com.style24.admin.biz.service;
 
-import java.io.File;
 import java.io.IOException;
 import java.net.URLEncoder;
 import java.util.ArrayList;
 import java.util.Collection;
 
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.core.env.Environment;
 import org.springframework.stereotype.Service;
@@ -70,7 +70,7 @@ public class TsaShoplinkerService {
 		int optionAll=0, optionSucc=0;
 		int excelCnt= ecxelGoodsList.size();
 		int tProdSucc = 0, productSucc=0, goodsNotiSucc=0, certSucc=0, imageSucc=0;
-
+		log.info(" #### SHOPLINKER CHK3 - "+excelCnt);
 		for (GagaMap gagaMap : ecxelGoodsList) {
 			if( !"".equals(gagaMap.getString("goodsCd").trim())) {
 				shoplinkerGoods.setGoodsCd(gagaMap.getString("goodsCd"));
@@ -833,7 +833,7 @@ public class TsaShoplinkerService {
 			map.setXmlTxt(sbRequest.toString());
 			map.setApiProductId(resultMsg.getProductId());
 			map.setApiResult(resultMsg.getResult());
-			map.setApiMessage(resultMsg.getMessage());
+			map.setApiMessage(StringUtils.abbreviate(resultMsg.getMessage(), 0 , 120));
 
 			if( "true".equals(resultMsg.getResult())){
 				succCnt = 1;
@@ -848,7 +848,7 @@ public class TsaShoplinkerService {
 			log.error("error", e);
 			map.setXmlTxt(sbRequest.toString());
 			map.setApiResult("error");
-			map.setApiMessage("API 통신오류");
+			map.setApiMessage("API 오류");
 		}
 
 		// 전송이력 저장
@@ -1162,7 +1162,7 @@ public class TsaShoplinkerService {
 						apiHstMap.setXmlTxt(sbRequest.toString());
 						apiHstMap.setOrdDtlNo(info.getOrdDtlNo());
 						apiHstMap.setApiResult("error");
-						apiHstMap.setApiMessage("API 통신오류");
+						apiHstMap.setApiMessage("API 오류");
 					}
 
 					// 전송이력 저장

+ 13 - 0
src/main/java/com/style24/admin/biz/web/TsaBusinessController.java

@@ -14,6 +14,7 @@ import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.ResponseBody;
 import org.springframework.web.servlet.ModelAndView;
 
+import com.fasterxml.jackson.databind.ObjectMapper;
 import com.style24.admin.biz.service.TsaBusinessService;
 import com.style24.admin.biz.service.TsaRendererService;
 import com.style24.admin.support.controller.TsaBaseController;
@@ -67,6 +68,9 @@ public class TsaBusinessController extends TsaBaseController {
 	@Autowired
 	private TscKcpService coreKcpService;
 
+	@Autowired
+	private ObjectMapper mapper;
+
 	/**
 	 * 공급벤더관리 화면
 	 * @return
@@ -235,6 +239,15 @@ public class TsaBusinessController extends TsaBaseController {
 	@PostMapping("/supply/company/delvloc/list")
 	@ResponseBody
 	public Collection<DeliveryLoc> getDeliveryLocList(@RequestBody DeliveryLoc delvLoc) {
+		if (!StringUtils.isBlank(delvLoc.getSupplyCompList())) {
+			try {
+				String[] arrSupplyComp = mapper.readValue(delvLoc.getSupplyCompList(), String[].class);
+				delvLoc.setMultiSupplyComp(arrSupplyComp);
+			} catch (Exception e) {
+				throw new IllegalStateException("업체코드 검색중 오류로 인해 조회되지 않았습니다.");
+			}
+		}
+
 		return businessService.getDeliveryLocList(delvLoc);
 	}
 

+ 94 - 12
src/main/java/com/style24/admin/biz/web/TsaGoodsController.java

@@ -54,6 +54,7 @@ import com.style24.persistence.domain.GoodsPriceRes;
 import com.style24.persistence.domain.GoodsResSell;
 import com.style24.persistence.domain.GoodsSafeNo;
 import com.style24.persistence.domain.GoodsSearch;
+import com.style24.persistence.domain.GoodsSupplyPrice;
 import com.style24.persistence.domain.GoodsTnmRes;
 import com.style24.persistence.domain.GoodsVideo;
 import com.style24.persistence.domain.IfIncomelot;
@@ -1562,29 +1563,29 @@ public class TsaGoodsController extends TsaBaseController {
 	 */
 	@PostMapping("/supply/price/list")
 	@ResponseBody
-	public Collection<GoodsPriceRes> getGoodsSupplyPriceList(@RequestBody GoodsPriceRes goodsPriceRes) {
+	public Collection<GoodsSupplyPrice> getGoodsSupplyPriceList(@RequestBody GoodsSupplyPrice goodsSupplyPrice) {
 
 		// multi row 검색관련 처리
-		if (!StringUtils.isBlank(goodsPriceRes.getBrandList())) {
+		if (!StringUtils.isBlank(goodsSupplyPrice.getBrandList())) {
 			try {
-				String[] arrBrandCd = mapper.readValue(goodsPriceRes.getBrandList(), String[].class);
-				goodsPriceRes.setMultiBrand(arrBrandCd);
+				String[] arrBrandCd = mapper.readValue(goodsSupplyPrice.getBrandList(), String[].class);
+				goodsSupplyPrice.setMultiBrand(arrBrandCd);
 			} catch (Exception e) {
 				e.printStackTrace();
 				throw new IllegalStateException("브랜드코드 검색중 오류로 인해 조회되지 않았습니다.");
 			}
 		}
 
-		if (!StringUtils.isBlank(goodsPriceRes.getSupplyCompList())) {
+		if (!StringUtils.isBlank(goodsSupplyPrice.getSupplyCompList())) {
 			try {
-				String[] arrSupplyComp = mapper.readValue(goodsPriceRes.getSupplyCompList(), String[].class);
-				goodsPriceRes.setMultiSupplyComp(arrSupplyComp);
+				String[] arrSupplyComp = mapper.readValue(goodsSupplyPrice.getSupplyCompList(), String[].class);
+				goodsSupplyPrice.setMultiSupplyComp(arrSupplyComp);
 			} catch (Exception e) {
 				e.printStackTrace();
 				throw new IllegalStateException("업체코드 검색중 오류로 인해 조회되지 않았습니다.");
 			}
 		}
-		return goodsService.getGoodsSupplyPriceList(goodsPriceRes);
+		return goodsService.getGoodsSupplyPriceList(goodsSupplyPrice);
 	}
 
 	/**
@@ -1597,14 +1598,14 @@ public class TsaGoodsController extends TsaBaseController {
 	 */
 	@PostMapping("/supply/price/save")
 	@ResponseBody
-	public GagaResponse saveGoodsSupplyPrice(@RequestBody Collection<GoodsPriceRes> goodsPriceResList) {
+	public GagaResponse saveGoodsSupplyPrice(@RequestBody Collection<GoodsSupplyPrice> goodsSupplyPriceList) {
 
 		if (!"G001_0000".equals(TsaSession.getInfo().getRoleCd()) && !"G001_A000".equals(TsaSession.getInfo().getRoleCd())
 			&& !"G001_A001".equals(TsaSession.getInfo().getRoleCd()) && !"G001_A100".equals(TsaSession.getInfo().getRoleCd())
 			&& !"G001_A101".equals(TsaSession.getInfo().getRoleCd())) {
 			throw new IllegalStateException("권한이 없습니다.");
 		}
-		goodsService.saveGoodsSupplyPrice(goodsPriceResList);
+		goodsService.saveGoodsSupplyPrice(goodsSupplyPriceList);
 		return super.ok(message.getMessage("SUCC_0001"));
 	}
 
@@ -2396,8 +2397,8 @@ public class TsaGoodsController extends TsaBaseController {
 		ModelAndView mav = new ModelAndView();
 
 		// 공급업체
-		String supplyCompCd = "";
-		mav.addObject("supplyCompList", rendererService.getSupplyCompanyList(supplyCompCd, "Y"));
+//		String supplyCompCd = "";
+//		mav.addObject("supplyCompList", rendererService.getSupplyCompanyList(supplyCompCd, "Y"));
 		// 상품상태
 		String[] exceptCds = {"G008_00"};
 		mav.addObject("goodsStatList", rendererService.getCommonCodeList("G008", "Y", exceptCds));
@@ -2440,6 +2441,25 @@ public class TsaGoodsController extends TsaBaseController {
 			goodsSearch.setMdNo(TsaSession.getInfo().getUserNo().toString());
 		}
 
+		if (!StringUtils.isBlank(goodsSearch.getBrandList())) {
+			try {
+				String[] arrBrandCd = mapper.readValue(goodsSearch.getBrandList(), String[].class);
+				goodsSearch.setMultiBrand(arrBrandCd);
+			} catch (Exception e) {
+				e.printStackTrace();
+				throw new IllegalStateException("브랜드코드 검색중 오류로 인해 조회되지 않았습니다.");
+			}
+		}
+
+		if (!StringUtils.isBlank(goodsSearch.getSupplyCompList())) {
+			try {
+				String[] arrSupplyComp = mapper.readValue(goodsSearch.getSupplyCompList(), String[].class);
+				goodsSearch.setMultiSupplyCompCd(arrSupplyComp);
+			} catch (Exception e) {
+				e.printStackTrace();
+				throw new IllegalStateException("업체코드 검색중 오류로 인해 조회되지 않았습니다.");
+			}
+		}
 		goodsSearch.setRegNo(TsaSession.getInfo().getUserNo()); // 엑셀조회시 로그인 사용자의 엑셀 상품조회시 사용
 		goodsSearch.setPageable(new TscPageRequest(goodsSearch.getPageNo() - 1, goodsSearch.getPageSize()));
 		goodsSearch.getPageable().setTotalCount(goodsService.getGoodsPriceResCount(goodsSearch));
@@ -2612,6 +2632,50 @@ public class TsaGoodsController extends TsaBaseController {
 		return goodsService.saveGoodsNaverPrice(goodsSearch);
 	}
 
+	
+	/**
+	 * 네이버 최저가 엑셀다운로드
+	 *
+	 * @param goodsSearch
+	 * @return
+	 * @author eskim
+	 * @since 2021. 07. 09
+	 */
+	@GetMapping("/naver/excel/list")
+	public ResponseEntity<InputStreamResource> downloadGoodsNaverExcelList(HttpServletRequest request, GoodsSearch goodsSearch) throws Exception {
+		String excelfileName = "상품_네이버_" + GagaDateUtil.getTodayDateTime() + ".xlsx";
+		String excelFilenameWithPath = GagaFileUtil.getConcatenationPath(env.getProperty("download.path"), "excel", excelfileName);
+
+		// 입점업체담당자는 업체코드 설정
+		if ("G001_B000".equals(TsaSession.getInfo().getRoleCd())) {
+			goodsSearch.setSupplyCompCd(TsaSession.getInfo().getSupplyCompCd());
+			goodsSearch.setMdNo(TsaSession.getInfo().getUserNo().toString());
+		}
+
+		// multi row 검색관련 처리
+		if (!StringUtils.isBlank(goodsSearch.getCondition())) {
+			goodsSearch.setConditionList(goodsSearch.getCondition().replaceAll("\r", "").trim().split("\n"));
+
+			if ("searchExtendGoodsCd".equals(goodsSearch.getSearch())) {
+				goodsSearch.setSearchGb("EXTEND");
+			} else if ("searchMasterGoodsCd".equals(goodsSearch.getSearch())) {
+				goodsSearch.setSearchGb("MASTER");
+			}
+		}
+
+		
+		log.info("[goodsSearch] ={}", goodsSearch);
+		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);
+
+		// 대용량엑셀파일다운로드는 이런 식으로 ...
+		goodsService.getGoodsNaverExcelList(goodsSearch, excelFilenameWithPath);
+
+		return GagaFileUtil.writeFile(request, excelFilenameWithPath);
+	}
 	/**
 	 * 광고 키워드 관리  화면
 	 *
@@ -2993,7 +3057,25 @@ public class TsaGoodsController extends TsaBaseController {
 		if (!StringUtils.isBlank(goodsSearch.getCondition())) {
 			goodsSearch.setConditionList(goodsSearch.getCondition().replaceAll("\r", "").trim().split("\n"));
 		}
+		if (!StringUtils.isBlank(goodsSearch.getBrandList())) {
+			try {
+				String[] arrBrandCd = mapper.readValue(goodsSearch.getBrandList(), String[].class);
+				goodsSearch.setMultiBrand(arrBrandCd);
+			} catch (Exception e) {
+				e.printStackTrace();
+				throw new IllegalStateException("브랜드코드 검색중 오류로 인해 조회되지 않았습니다.");
+			}
+		}
 
+		if (!StringUtils.isBlank(goodsSearch.getSupplyCompList())) {
+			try {
+				String[] arrSupplyComp = mapper.readValue(goodsSearch.getSupplyCompList(), String[].class);
+				goodsSearch.setMultiSupplyCompCd(arrSupplyComp);
+			} catch (Exception e) {
+				e.printStackTrace();
+				throw new IllegalStateException("업체코드 검색중 오류로 인해 조회되지 않았습니다.");
+			}
+		}
 		goodsSearch.setRegNo(TsaSession.getInfo().getUserNo()); // 엑셀조회시 로그인 사용자의 엑셀 상품조회시 사용
 		goodsSearch.setPageable(new TscPageRequest(goodsSearch.getPageNo() - 1, goodsSearch.getPageSize()));
 		goodsSearch.getPageable().setTotalCount(goodsService.getGoodsQuikDeleverySkipCount(goodsSearch));

+ 0 - 2
src/main/java/com/style24/admin/biz/web/TsaSettleController.java

@@ -85,7 +85,6 @@ public class TsaSettleController extends TsaBaseController {
 				String[] arrSupplyComp = mapper.readValue(goodsSettle.getSupplyCompList(), String[].class);
 				goodsSettle.setMultiSupplyComp(arrSupplyComp);
 			} catch (Exception e) {
-				e.printStackTrace();
 				throw new IllegalStateException("업체코드 검색중 오류로 인해 조회되지 않았습니다.");
 			}
 		}
@@ -95,7 +94,6 @@ public class TsaSettleController extends TsaBaseController {
 				String[] arrBrandCd = mapper.readValue(goodsSettle.getBrandList(), String[].class);
 				goodsSettle.setMultiBrand(arrBrandCd);
 			} catch (Exception e) {
-				e.printStackTrace();
 				throw new IllegalStateException("브랜드코드 검색중 오류로 인해 조회되지 않았습니다.");
 			}
 		}

+ 19 - 0
src/main/java/com/style24/admin/biz/web/TsaShoplinkerController.java

@@ -171,6 +171,7 @@ public class TsaShoplinkerController extends TsaBaseController {
 		slkSearch.setApiType("GOODS");
 		ShoplinkerSearch runMap = tscShoplinkerService.getCallRunableInfo(slkSearch);
 
+log.info(" #### SHOPLINKER CHK1 - "+runMap.getRunCnt() +" || "+GagaDateUtil.getTodayDateTime());
 		if( runMap.getRunCnt() < 1 ) {
 			try {
 				// 1. API 호출 이력 저장 시작(실행중 재호출 금지하기 위함)
@@ -207,6 +208,7 @@ public class TsaShoplinkerController extends TsaBaseController {
 				// 3. xml 데이터 생성
 				shoplinkerGoods.setCustomerId(env.getProperty("shoplinker.customer_id"));
 				shoplinkerGoods.setRegNo(TsaSession.getInfo().getUserNo());
+				log.info(" #### SHOPLINKER CHK2 ");
 				rtnMap = admShoplinkerService.createShoplinkerXml(ecxelGoodsList, shoplinkerGoods);
 
 				// 4. 파일 삭제
@@ -890,6 +892,23 @@ System.out.println("####### : "+re.getResult());
 			//1 상품등록 테스트
 			String testXmlUrl;
 
+			/*for( i=2; i< 87; i++) {
+				testXmlUrl = "http://ts5000.ipdisk.co.kr:8999/shoplinker/goods_reg/T142TS200P/option_"+i+".xml";
+				responseXmlData =    shoplinkerUtil.callShoplinkerApiByGet(GagaShoplinkerConstants.API_DOMAIN+"/Product/attribute_insert.php?iteminfo_url="+URLEncoder.encode(testXmlUrl), "" );
+				shoplinkerResult =  (com.gagaframework.shoplinker.domain.goods.result.Shoplinker)shoplinkerUtil.unmarshal(com.gagaframework.shoplinker.domain.goods.result.Shoplinker.class, responseXmlData);
+				resultMsg = shoplinkerResult.getResultMessage();
+				System.out.println(i+"\n### 1.단품 result1 :: "+resultMsg.getResult());
+			  	System.out.println(i+"### 1.단품 result2 :: "+resultMsg.getMessage());
+			}*/
+
+			testXmlUrl = "http://ts5000.ipdisk.co.kr:8999/shoplinker/goods_reg/T142TS200P/product.xml";
+			responseXmlData =   shoplinkerUtil.callShoplinkerApiByGet(GagaShoplinkerConstants.API_DOMAIN+"/Product/attribute_prod_insert.php?iteminfo_url="+URLEncoder.encode(testXmlUrl), "");
+			shoplinkerResult =  (com.gagaframework.shoplinker.domain.goods.result.Shoplinker)shoplinkerUtil.unmarshal(com.gagaframework.shoplinker.domain.goods.result.Shoplinker.class, responseXmlData);
+			resultMsg = shoplinkerResult.getResultMessage();
+			System.out.println("\n\n\n### 2.상품 result1 :: "+resultMsg.getResult());
+			System.out.println(" :: "+responseXmlData);
+			System.out.println("### 2.상품 result2 :: "+resultMsg.getMessage());
+
 	for( i=1; i< 1; i++) {
 
 			testXmlUrl = "http://ts5000.ipdisk.co.kr:8999/shoplinker/goods_reg/option_1.xml";

+ 4 - 0
src/main/java/com/style24/persistence/domain/DeliveryLoc.java

@@ -1,5 +1,6 @@
 package com.style24.persistence.domain;
 
+import com.fasterxml.jackson.annotation.JsonFormat;
 import com.style24.persistence.TscBaseDomain;
 
 import lombok.Data;
@@ -37,5 +38,8 @@ public class DeliveryLoc extends TscBaseDomain {
 	// 검색조건
 	private String searchGb;
 	private String searchTxt;
+	private String supplyCompList;		// 공급업체코드목록
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+	private String[] multiSupplyComp;
 
 }

+ 65 - 0
src/main/java/com/style24/persistence/domain/GoodsSupplyPrice.java

@@ -0,0 +1,65 @@
+package com.style24.persistence.domain;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.style24.persistence.TscBaseDomain;
+import com.style24.persistence.TscPageRequest;
+
+import lombok.Data;
+
+/**
+ * 입점상품가격관리 Domain
+ * @author eskim
+ * @since 2021. 07. 09
+ */
+@SuppressWarnings("serial")
+@Data
+public class GoodsSupplyPrice extends TscBaseDomain {
+
+	private Integer goodsSupplyPriceSq;
+	private String goodsCd;
+	private int supplyGoodsPrice;
+	private float supplySellFeeRate;
+	private String cfrmYn;
+	private int cfrmNo;
+	private String cfrmDt;
+
+	private String cfrmNm;
+
+	private String goodsNm;
+	private String supplyGoodsCd;
+	private String goodsStat;
+	private String supplyCompCd;
+	private String supplyCompNm;
+	private String brandCd;
+	private String brandEnm;
+	private int listPrice;
+	private int currPrice;
+	private String dateGbn;
+	private String stDate;
+	private String edDate;
+	private String confirmY;
+	private Float goodsSellFeeRate;
+	private String goodsPriceYn;
+	private String brandList;
+	private String supplyCompList;
+	
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+	private String[] arrGoodsCd;
+
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+	private int[] arrSupplyGoodsPriceSq;
+
+
+	/* Multi CheckBox 항목*/
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+	private String[] multiBrand;
+
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+	private String[] multiSupplyComp;
+	// Pagination
+	private TscPageRequest pageable;
+	private int pageNo = 1;
+	private int pageSize = 50;
+	private int pageUnit = 10;
+
+}

+ 14 - 1
src/main/java/com/style24/persistence/mybatis/shop/TsaBusiness.xml

@@ -387,6 +387,12 @@
 		<if test="supplyCompCd != null and supplyCompCd != ''">
 		AND    SUPPLY_COMP_CD = #{supplyCompCd}
 		</if>
+		<if test="multiSupplyComp != null and multiSupplyComp != ''">
+		AND    SUPPLY_COMP_CD IN
+		    <foreach collection="multiSupplyComp" item="item" index="index"  open="(" close=")" separator=",">
+		    #{item}
+		    </foreach>
+		</if>
 		<if test="delvLocNm != null and delvLocNm !=''">
 		AND    LOWER(DELV_LOC_NM) LIKE CONCAT('%',LOWER(#{delvLocNm}),'%')
 		</if>
@@ -426,7 +432,14 @@
 		     , UPD_DT
 		)
 		VALUES (
-		       #{delvLocCd}
+		        (CASE WHEN #{mode} = 'N' AND #{delvLocClsf} = 'G024_30' THEN /*입점업체*/
+		                  (SELECT CONCAT('DL',IFNULL(LPAD(SUBSTRING(MAX(DELV_LOC_CD),3) + 1,4,'0'),'0000'))
+		                   FROM   TB_DELIVERY_LOC Z
+		                   WHERE  DELV_LOC_CD LIKE 'DL%')
+		              ELSE
+		                  #{delvLocCd}
+		         END
+		        )
 		     , #{delvLocNm}
 		     , #{supplyCompCd}
 		     , #{delvLocClsf}

+ 108 - 22
src/main/java/com/style24/persistence/mybatis/shop/TsaGoods.xml

@@ -132,7 +132,7 @@
 	</update>
 	
 	<!-- 정보고시분류 목록 -->
-	<select id="getNotiInfoList" parameterType="NotiInfo" resultType="NotiInfo">
+	<select id="getNotiInfoList_org" parameterType="NotiInfo" resultType="NotiInfo">
 		/* TsaGoods.getNotiInfoList */
 		SELECT B.SUPPLY_COMP_CD
 		     , B.NI_CLSF_CD
@@ -154,6 +154,26 @@
 		ORDER BY B.NI_CLSF_CD, B.DISP_ORD
 	</select>
 	
+	<!-- 정보고시분류 목록 -->
+	<select id="getNotiInfoList" parameterType="NotiInfo" resultType="NotiInfo">
+		/* TsaGoods.getNotiInfoList */
+		SELECT DISTINCT B.SUPPLY_COMP_CD
+		     , B.NI_CLSF_CD
+		     , C.CD_NM AS NI_CLSF_NM
+		     , C.DISP_ORD
+		FROM TB_NOTI_INFO B
+		INNER JOIN TB_COMMON_CODE C ON B.NI_CLSF_CD = C.CD 
+		WHERE B.SUPPLY_COMP_CD = CASE #{supplyCompCd} 
+		                         WHEN '1' THEN '1'
+		                         WHEN '2' THEN '2'
+		                         WHEN '3' THEN '3'
+		                         WHEN '4' THEN '4'
+		                         WHEN '5' THEN '5'
+		                         ELSE 'E' END 
+		AND C.CD_GB = 'G004'   /*고시정보*/
+		ORDER BY C.DISP_ORD
+	</select>
+	
 	<!-- 정보고시 상세 목록 -->
 	<select id="getNotiInfoItemList" parameterType="NotiInfo" resultType="NotiInfo">
 		/* TsaGoods.getNotiInfoItemList */
@@ -2807,7 +2827,6 @@
 		                   )
 		        </if>
 		        WHERE 1=1
-		        AND G.SELF_GOODS_YN = #{selfGoodsYn}
 		        <if test="searchGb == null or searchGb =='BASIC'" >
 		        <include refid="getGoodsListCondition_sql"/>
 		        ORDER BY  GR.APPLY_STDT DESC, GR.APPLY_EDDT DESC, G.GOODS_CD, GR.GOODS_PRICE_RES_SQ
@@ -3000,19 +3019,17 @@
 	</select>
 	
 	<!-- 상품 가격 승인 목록 -->
-	<select id="getGoodsSupplyPriceList"  parameterType="GoodsPriceRes" resultType="GoodsPriceRes">
+	<select id="getGoodsSupplyPriceList"  parameterType="GoodsSupplyPrice" resultType="GoodsSupplyPrice">
 		/* TsaGoods.getGoodsSupplyPriceList */
-		SELECT X.GOODS_PRICE_RES_SQ
+		SELECT X.GOODS_SUPPLY_PRICE_SQ
 		     , X.GOODS_CD
 		     , X.GOODS_NM
-		     , X.RES_GOODS_PRICE
-		     , X.END_GOODS_PRICE
-		     , X.SELL_FEE_RATE
+		     , X.SUPPLY_GOODS_PRICE
+		     , X.SUPPLY_SELL_FEE_RATE
 		     , X.CFRM_YN
 		     , X.CFRM_NM
 		     , X.CFRM_NO
 		     , X.CFRM_DT
-		     , X.APPLY_YN
 		     , X.REG_NM
 		     , X.REG_DT
 		     , X.UPD_NM
@@ -3026,16 +3043,14 @@
 		     , X.BRAND_CD
 		     , X.BRAND_ENM
 		FROM (
-		    SELECT A.GOODS_PRICE_RES_SQ
+		    SELECT A.GOODS_SUPPLY_PRICE_SQ
 		         , A.GOODS_CD
-		         , A.RES_GOODS_PRICE
-		         , A.END_GOODS_PRICE
-		         , A.SELL_FEE_RATE
+		         , A.SUPPLY_GOODS_PRICE
+		         , A.SUPPLY_SELL_FEE_RATE
 		         , A.CFRM_YN
 		         , FN_GET_USER_NM(A.CFRM_NO) AS CFRM_NM
 		         , A.CFRM_NO
 		         , DATE_FORMAT(A.CFRM_DT,'%Y%m%d%H%i%S') AS CFRM_DT
-		         , A.APPLY_YN
 		         , FN_GET_USER_NM(A.REG_NO) AS REG_NM
 		         , DATE_FORMAT(A.REG_DT,'%Y%m%d%H%i%S') AS REG_DT
 		         , FN_GET_USER_NM(A.UPD_NO) AS UPD_NM
@@ -3050,7 +3065,7 @@
 		         , B.BRAND_ENM
 		         , G.SUPPLY_COMP_CD
 		         , S.SUPPLY_COMP_NM
-		    FROM TB_GOODS_PRICE_RES A
+		    FROM TB_GOODS_SUPPLY_PRICE A
 		    INNER JOIN TB_GOODS G ON A.GOODS_CD = G.GOODS_CD
 		                          AND G.SELF_GOODS_YN = 'N'
 		    INNER JOIN TB_BRAND B ON G.BRAND_CD = B.BRAND_CD
@@ -3065,9 +3080,6 @@
 		    <if test="brandCd != null and brandCd != ''">
 		    AND G.BRAND_CD = #{brandCd}
 		    </if>
-		    <if test="searchBrandCd != null and searchBrandCd != ''">
-		    AND G.BRAND_CD = #{searchBrandCd}
-		    </if>
 		    <if test="multiSupplyComp != null and multiSupplyComp != ''">
 		    AND G.SUPPLY_COMP_CD IN
 		        <foreach collection="multiSupplyComp" item="item" index="index"  open="(" close=")" separator=",">
@@ -3138,17 +3150,16 @@
 	</update>
 	
 	<!-- 상품 가격승인 적용일자 변경 -->
-	<update id="updateGoodsSupplyPricecfrmDt" parameterType="GoodsPriceRes">
+	<update id="updateGoodsSupplyPricecfrmDt" parameterType="GoodsSupplyPrice">
 		/* TsaGoods.updateGoodsSupplyPricecfrmDt */
-		UPDATE TB_GOODS_PRICE_RES
+		UPDATE TB_GOODS_SUPPLY_PRICE
 		SET UPD_NO = #{updNo}
 		  , UPD_DT = NOW()
 		  , CFRM_DT = NOW()
 		  , CFRM_NO = #{regNo}
 		  , CFRM_YN = 'Y'
-		  , APPLY_YN = 'Y'
 		WHERE GOODS_CD = #{goodsCd}
-		AND GOODS_PRICE_RES_SQ = #{goodsPriceResSq}
+		AND GOODS_SUPPLY_PRICE_SQ = #{goodsSupplyPriceSq}
 		AND CFRM_DT IS NULL
 	</update>
 	
@@ -3214,7 +3225,81 @@
 		              , G.LIST_PRICE
 		              , G.CURR_PRICE
 		              , IFNULL(GB.PC_CURR_PRICE,G.CURR_PRICE) AS BENEFIT_PRICE
-		              , FN_GET_USER_NM(GE.REG_NO) AS UPD_NM
+		              , FN_GET_USER_NM(GE.REG_NO) AS REG_NM
+		              , DATE_FORMAT(GE.REG_DT,'%Y%m%d%H%i%S') AS REG_DT
+		              , FN_GET_USER_NM(GE.UPD_NO) AS UPD_NM
+		              , DATE_FORMAT(GE.UPD_DT,'%Y%m%d%H%i%S') AS UPD_DT
+		               <choose>
+		                  <when test="searchGb != null and searchGb =='EXCEL'">
+		              , SD.TMP_DISP_ORD
+		                  </when>
+		                  <otherwise>
+		              , 0 AS TMP_DISP_ORD
+		                  </otherwise>
+		              </choose>
+		        FROM TB_GOODS G
+		        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_NAVER_LOWEST_PRICE GE ON G.GOODS_NUM = GE.GOODS_CD
+		        LEFT OUTER JOIN TB_GOODS_BENEFIT_PRICE GB ON G.GOODS_CD = GB.GOODS_CD AND GB.CUST_GB = 'G100_00'
+		        <if test="searchGb != null and searchGb =='EXCEL'">
+		        INNER JOIN (
+		                     SELECT SEARCH_CD
+		                          , TMP_DISP_ORD
+		                     FROM (
+		                           SELECT SEARCH_CD
+		                                , MIN(DISP_ORD) AS TMP_DISP_ORD
+		                           FROM TB_SEARCH_DATA
+		                           WHERE REG_NO = #{regNo}
+		                           GROUP BY SEARCH_CD) T
+		                   ) SD
+		                   ON ( (G.GOODS_NUM LIKE CONCAT(SD.SEARCH_CD,'%')) 
+		                        <if test="mdNo != null and mdNo != ''">
+		                        AND G.BRAND_CD IN (
+		                                           SELECT DISTINCT BRAND_CD
+		                                           FROM TB_BRAND_MD
+		                                           WHERE MD_NO = CAST(#{mdNo} AS UNSIGNED)
+		                                           )
+		                       </if>
+		                   )
+		        </if>
+		        WHERE 1=1
+		        <if test="mdNo != null and mdNo != ''">
+		        AND G.BRAND_CD IN (
+		                           SELECT DISTINCT BRAND_CD
+		                           FROM TB_BRAND_MD
+		                           WHERE MD_NO = CAST(#{mdNo} AS UNSIGNED)
+		                          )
+		        </if>
+		        <if test="searchGb == null or searchGb =='BASIC' " >
+		        <include refid="getGoodsListCondition_sql"/>
+		        ORDER BY GE.REQ_YMD, G.GOODS_CD
+		        </if>
+		        <if test="searchGb != null and searchGb =='EXCEL'">
+		        ORDER BY SD.TMP_DISP_ORD
+		        </if>
+	</select>
+	
+	<!-- 상품 네이버 최저가 엑셀  -->
+	<select id="getGoodsNaverExcelList" parameterType="GoodsSearch" resultType="paramMap">
+		/* TsaGoods.getGoodsNaverExcelList */
+		SELECT Z.*
+		      ,CAST(BENEFIT_PRICE AS SIGNED ) - CAST(LOWEST_PRICE AS SIGNED ) AS PRICE
+		FROM (
+		        SELECT
+		                GE.REQ_YMD
+		              , G.GOODS_CD
+		              , GE.MALL_NM
+		              , GE.MALL_LINK
+		              , GE.LOWEST_PRICE
+		              , B.BRAND_ENM
+		              , G.BRAND_CD
+		              , G.GOODS_NUM
+		              , G.GOODS_NM
+		              , G.LIST_PRICE
+		              , G.CURR_PRICE
+		              , IFNULL(GB.PC_CURR_PRICE,G.CURR_PRICE) AS BENEFIT_PRICE
+		              , FN_GET_USER_NM(GE.REG_NO) AS REG_NM
 		              , DATE_FORMAT(GE.REG_DT,'%Y%m%d%H%i%S') AS REG_DT
 		              , FN_GET_USER_NM(GE.UPD_NO) AS UPD_NM
 		              , DATE_FORMAT(GE.UPD_DT,'%Y%m%d%H%i%S') AS UPD_DT
@@ -3267,6 +3352,7 @@
 		        <if test="searchGb != null and searchGb =='EXCEL'">
 		        ORDER BY SD.TMP_DISP_ORD
 		        </if>
+		  ) Z
 	</select>
 	
 	<!-- 상품 네이버 최저가 최종 작업일 -->

+ 439 - 382
src/main/webapp/WEB-INF/views/business/DeliveryLocForm.html

@@ -1,382 +1,439 @@
-<!DOCTYPE html>
-<html lang="ko"
-	xmlns:th="http://www.thymeleaf.org">
-<!--
- *******************************************************************************
- * @source  : DeliveryLocForm.html
- * @desc    : 출고처관리 Page
- *============================================================================
- * STYLE24
- * Copyright(C) 2020 TSIT, All rights reserved.
- *============================================================================
- * VER  DATE         AUTHOR      DESCRIPTION
- * ===  ===========  ==========  =============================================
- * 1.0  2020.10.14   gagamel     최초 작성
- *******************************************************************************
- -->
-	<div id="main">
-		<!-- 메인타이틀 영역 -->
-		<div class="main-title">
-		</div>
-		<!-- //메인타이틀 영역 -->
-		
-		<!-- 메뉴 설명 -->
-		<div class="infoBox menu-desc">
-		</div>
-		<!-- //메뉴 설명 -->
-		
-		<!-- 검색조건 영역 -->
-		<div class="panelStyle">
-			<form id="searchForm" name="searchForm" action="#" th:action="@{'/business/supply/company/delvloc/list'}" onsubmit="$('#btnSearch').trigger('click'); return false;">
-				<table class="frmStyle" aria-describedby="검색조건">
-					<colgroup>
-						<col style="width:10%;"/>
-						<col style="width:15%;"/>
-						<col style="width:10%;"/>
-						<col style="width:15%;"/>
-						<col style="width:10%;"/>
-						<col style="width:15%;"/>
-						<col style="width:10%;"/>
-						<col/>
-					</colgroup>
-					<tr>
-						<th>공급업체</th>
-						<td>
-							<select name="supplyCompCd">
-								<option value="">[전체]</option>
-								<option th:if="${supplyCompList}" th:each="oneData, status : ${supplyCompList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
-							</select>
-						</td>
-						<th>출고처유형</th>
-						<td>
-							<select name="delvLocClsf">
-								<option value="">[전체]</option>
-								<option th:if="${delvLocClsfList}" th:each="oneData, status : ${delvLocClsfList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
-							</select>
-						</td>
-						<th>출고처명</th>
-						<td>
-							<input type="text" name="delvLocNm" maxlength="50"/>
-						</td>
-						<th>사용여부</th>
-						<td>
-							<select name="useYn">
-								<option value="Y">Yes</option>
-								<option value="N">No</option>
-							</select>
-						</td>
-					</tr>
-				</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="$('#searchForm')[0].reset();">초기화</button>
-					</li>
-				</ul>
-			</form>
-		</div>
-		<!-- 검색조건 영역 -->
-
-		<!-- 리스트 영역 -->
-		<div class="panelStyle">
-			<!-- 버튼 배치 영역 -->
-			<ul class="panelBar">
-				<li class="right">
-					<button type="button" class="btn btn-default btn-lg" id="btnExcel">엑셀다운로드</button>
-				</li>
-			</ul>
-			<!-- //버튼 배치 영역 -->
-			
-			<div id="gridList" style="width: 100%; height: 470px" class="ag-theme-balham"></div>
-		</div>
-		<!-- //리스트 영역 -->
-		
-		<!-- 등록/수정 -->
-		<div class="panelStyle">
-			<form id="detailForm" name="detailForm" action="#" th:action="@{'/business/supply/company/delvloc/save'}">
-				<table class="frmStyle" aria-describedby="등록/수정 폼">
-					<colgroup>
-						<col style="width:10%;"/>
-						<col style="width:15%;"/>
-						<col style="width:10%;"/>
-						<col style="width:15%;"/>
-						<col style="width:10%;"/>
-						<col style="width:15%;"/>
-						<col style="width:10%;"/>
-						<col style="width:15%;"/>
-					</colgroup>
-					<tr>
-						<th>출고처코드<i class="required" title="필수"></i></th>
-						<td>
-							<input type="text" class="w100" name="delvLocCd" maxlength="20" placeholder="출고처코드" required="required" data-valid-type="alphaNumeric" data-valid-name="출고처코드"/>
-						</td>
-						<th>출고처명<i class="required" title="필수"></i></th>
-						<td>
-							<input type="text" class="w200" name="delvLocNm" maxlength="100" placeholder="출고처명" required="required" data-valid-name="출고처명"/>
-						</td>
-						<th>출고처유형<i class="required" title="필수"></i></th>
-						<td>
-							<select name="delvLocClsf" required="required" data-valid-name="출고처유형">
-								<option value="">[선택]</option>
-								<option th:if="${delvLocClsfList}" th:each="oneData, status : ${delvLocClsfList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
-							</select>
-						</td>
-						<th>공급업체<i class="required" title="필수"></i></th>
-						<td>
-							<select name="supplyCompCd" required="required" data-valid-name="공급업체">
-								<option value="">[선택]</option>
-								<option th:if="${supplyCompList}" th:each="oneData, status : ${supplyCompList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
-							</select>
-						</td>
-					</tr>
-					<tr>
-						<th>재고적용율</th>
-						<td colspan="3">
-							<input type="text" class="w100 aR" name="stockApplRate" maxlength="5" data-valid-type="real"/>%
-							<span class="cBlue">* WMS부터 수신된 재고의 판매가용재고 적용율(%). 물류창고와 직송매장에 한함</span>
-						</td>
-						<th>출고수수료율</th>
-						<td colspan="3">
-							<input type="text" class="w100 aR" name="delvFeeRate" maxlength="5" data-valid-type="real"/>%
-							<span class="cBlue">* 직송매장 출고 시 적용할 출고수수료율(%)</span>
-						</td>
-					</tr>
-					<tr>
-						<th>출고지정순서</th>
-						<td colspan="3">
-							<input type="text" class="w100 aR" name="delvAssignOrd" maxlength="3" data-valid-type="integer"/>
-							<span class="cBlue">* 물류창고와 직송매장에 대해 출고지정되는 순서</span>
-						</td>
-<!-- 						<th>출고지정등급</th> -->
-<!-- 						<td> -->
-<!-- 							<select name="delvAssignGrade"> -->
-<!-- 								<option value="">[선택]</option> -->
-<!-- 								<option value="A">[A] A등급</option> -->
-<!-- 								<option value="B">[B] B등급</option> -->
-<!-- 								<option value="C">[C] C등급</option> -->
-<!-- 								<option value="Z">[Z] 출고지정제외</option> -->
-<!-- 							</select> -->
-<!-- 						</td> -->
-						<th>사용여부<i class="required" title="필수"></i></th>
-						<td colspan="3">
-							<label class="rdoBtn"><input type="radio" name="useYn" value="Y" checked="checked">Yes<span></span></label>
-							<label class="rdoBtn"><input type="radio" name="useYn" value="N">No<span></span></label>
-						</td>
-					</tr>
-					<tr>
-						<th>출고처주소<i class="required" title="필수"></i></th>
-						<td colspan="7">
-							<input type="text" class="w100" name="delvLocZipcode" data-valid-name="출고처 우편번호" readonly="readonly"/>
-							<button type="button" class="btn btn-info btn-sm" onclick="fnOpenDaumAddr('delvLoc');">우편번호찾기</button>
-							<input type="text" class="w300" name="delvLocBaseAddr" required="required" data-valid-name="출고처 기본주소" readonly="readonly"/>
-							-
-							<input type="text" class="w300" name="delvLocDtlAddr" maxlength="100" data-valid-name="출고처 상세주소"/>
-						</td>
-					</tr>
-					<tr>
-						<th>반품처명</th>
-						<td>
-							<input type="text" class="w200" name="rtnLocNm" maxlength="100" placeholder="반품처명"/>
-						</td>
-						<th>반품처주소<i class="required" title="필수"></i></th>
-						<td colspan="5">
-							<input type="text" class="w100" name="rtnLocZipcode" data-valid-name="반품처 우편번호" readonly="readonly"/>
-							<button type="button" class="btn btn-info btn-sm" onclick="fnOpenDaumAddr('rtnLoc');">우편번호찾기</button>
-							<input type="text" class="w300" name="rtnLocBaseAddr" required="required" data-valid-name="반품처 기본주소" readonly="readonly"/>
-							-
-							<input type="text" class="w300" name="rtnLocDtlAddr" maxlength="100" data-valid-name="반품처 상세주소"/>
-						</td>
-					</tr>
-				</table>
-			</form>
-			
-			<!-- 버튼 배치 영역 -->
-			<ul class="panelBar">
-				<li class="right">
-					<button type="button" class="btn btn-info btn-lg" id="btnNew">신규</button>
-					<button type="button" class="btn btn-success btn-lg" id="btnSave">저장</button>
-				</li>
-			</ul>
-			<!-- //버튼 배치 영역 -->
-		</div>
-		<!-- 등록/수정 -->
-	</div>
-
-<script th:inline="javascript">
-/*<![CDATA[*/
-	let supplyCompList = gagajf.convertToArray([[${supplyCompList}]]);
-	let delvLocClsfList = gagajf.convertToArray([[${delvLocClsfList}]]);
-	let delvGradeList = { "A":"A등급", "B":"B등급", "C":"C등급", "Z":"출고지정제외" };
-	let invoicePrintTypeList = gagajf.convertToArray([[${invoicePrintTypeList}]]);
-
-	let columnDefs = [
-		{ headerName: "출고처코드", field: "delvLocCd", width: 100, cellClass: 'text-center' },
-		{
-			headerName: "출고처명", field: "delvLocNm", width: 150, cellClass: 'text-center',
-			cellRenderer: function(params) {
-				return '<a href="javascript:void(0);">' + params.value + '</a>';
-			}
-		},
-		{
-			headerName: "출고처유형", field: "delvLocClsf", width: 150, cellClass: 'text-center',
-			valueGetter: function (params) {
-				return gagaAgGrid.lookupValue(delvLocClsfList, params.data.delvLocClsf);
-			}
-		},
-		{
-			headerName: "매장POS", field: "btnPos", width: 120, cellClass: 'text-center',
-			cellRenderer: function(params) {
-				var btn = '';
-				//if (params.value === '21') {
-					btn ='<button type="button" class="btn btn-success btn-sm" onclick="cfnPopPos(\'' + params.data.delvLocCd + '\');\">매장[POS]</button>';
-				//}
-				return btn;
-			}
-		},
-		{
-			headerName: "공급업체", field: "supplyCompCd", width: 150, cellClass: 'text-center',
-			valueGetter: function (params) {
-				return gagaAgGrid.lookupValue(supplyCompList, params.data.supplyCompCd);
-			}
-		},
-		{ headerName: "재고적용율(%)", field: "stockApplRate", width: 120, cellClass: 'text-center' },
-		{ headerName: "출고수수료율(%)", field: "delvFeeRate", width:120, cellClass: 'text-center' },
-		{ headerName: "출고지정순서", field: "delvAssignOrd", width: 120, cellClass: 'text-center' },
-// 		{
-// 			headerName: "출고지정등급", field: "delvAssignGrade", width: 150, cellClass: 'text-center',
-// 			cellRenderer: function (params) {
-// 				return gagaAgGrid.lookupValue(delvGradeList, params.value);
-// 			}
-// 		},
-		{
-			headerName: "송장출력형태", field: "invoicePrintType", width:150 , cellClass: 'text-center',
-			valueGetter: function (params) {
-				return gagaAgGrid.lookupValue(invoicePrintTypeList, params.data.invoicePrintType);
-			}
-		},
-		{ headerName: "출고처우편번호", field: "delvLocZipcode", width: 150, cellClass: 'text-center', hide: true },
-		{ headerName: "출고처기본주소", field: "delvLocBaseAddr", width: 300, hide: true },
-		{ headerName: "출고처상세주소", field: "delvLocDtlAddr", width: 300, hide: true },
-		{ headerName: "반품처명", field: "rtnLocNm", width: 100, cellClass: 'text-center', hide: true },
-		{ headerName: "반품처우편번호", field: "rtnLocZipcode", width: 150, cellClass: 'text-center', hide: true },
-		{ headerName: "반품처기본주소", field: "rtnLocBaseAddr", width: 300, hide: true },
-		{ headerName: "반품처상세주소", field: "rtnLocDtlAddr", width: 300, hide: true },
-		{
-			headerName: "사용여부", field: "useYn", width: 100, cellClass: 'text-center',
-			valueGetter: function (params) { return params.data.useYn == 'Y' ? 'Yes' : 'No'; }
-		}
-	];
-
-	let gridOptions = gagaAgGrid.getGridOptions(columnDefs);
-
-	// Cell click
-	gridOptions.onCellClicked = function(event) {
-		if (event.colDef.field != 'delvLocNm')
-			return;
-		
-		$('#detailForm input[name=delvLocCd]').attr('readonly', true);
-		$('#detailForm input[name=delvLocCd]').val(event.data.delvLocCd);
-		$('#detailForm input[name=delvLocNm]').val(event.data.delvLocNm);
-		$('#detailForm select[name=delvLocClsf]').val(event.data.delvLocClsf);
-		$('#detailForm select[name=supplyCompCd]').val(event.data.supplyCompCd);
-		$('#detailForm input[name=delvAssignOrd]').val(event.data.delvAssignOrd);
-		$('#detailForm select[name=delvAssignGrade]').val(event.data.delvAssignGrade);
-		$('#detailForm input[name=stockApplRate]').val(Number(event.data.stockApplRate).addComma());
-		$('#detailForm input[name=delvFeeRate]').val(Number(event.data.delvFeeRate).addComma());
-		$('#detailForm select[name=invoicePrintType]').val(event.data.invoicePrintType	);
-		$('#detailForm input[name=delvLocZipcode]').val(event.data.delvLocZipcode);
-		$('#detailForm input[name=delvLocBaseAddr]').val(event.data.delvLocBaseAddr);
-		$('#detailForm input[name=delvLocDtlAddr]').val(event.data.delvLocDtlAddr);
-		$('#detailForm input[name=rtnLocZipcode]').val(event.data.rtnLocZipcode);
-		$('#detailForm input[name=rtnLocBaseAddr]').val(event.data.rtnLocBaseAddr);
-		$('#detailForm input[name=rtnLocDtlAddr]').val(event.data.rtnLocDtlAddr);
-		$('#detailForm input[name=rtnLocNm]').val(event.data.rtnLocNm);
-		
-		if (event.data.useYn == 'Y') {
-			$('#detailForm input:radio[name=useYn]').eq(0).attr('checked', true);
-		} else {
-			$('#detailForm input:radio[name=useYn]').eq(1).attr('checked', true);
-		}
-	}
-
-	// 출고처유형 셀렉트박스 변경 시 이벤트
-	$('#detailForm select[name=delvLocClsf]').on('change', function() {
-		let val = $(this).val();
-		
-		if (val == 'G024_10' || val == 'G024_21') { // 물류창고, 직송매장
-			$('#detailForm input[name=stockApplRate]').val(100);
-		} else {
-			$('#detailForm input[name=stockApplRate]').val('');
-		}
-	});
-	
-	// 검색
-	$('#btnSearch').on('click', function() {
-		gagaAgGrid.fetch($('#searchForm').prop('action'), gridOptions, '#searchForm');
-	});
-
-	// 신규버튼
-	$('#btnNew').on('click', function() {
-		$("#detailForm")[0].reset();
-		$('#detailForm input[name=delvLocCd]').attr('readonly', false);
-		$('#detailForm input[name=delvLocCd]').focus();
-	});
-	
-	// 저장
-	$("#btnSave").on("click", function() {
-		// 필수값 체크
-		if (!gagajf.validation('#detailForm'))
-			return false;
-
-		mcxDialog.confirm("저장하시겠습니까?", {
-			cancelBtnText: "취소",
-			sureBtnText: "확인",
-			sureBtnClick: function() {
-				gagajf.ajaxFormSubmit($('#detailForm').prop('action'), '#detailForm', function() {
-					$('#btnNew').trigger('click');
-					$('#btnSearch').trigger('click');
-				});
-			}
-		});
-	});
-	
-	// 엑셀다운로드
-	$('#btnExcel').on('click', function() {
-		gagaAgGrid.exportToExcel('출고처 목록', gridOptions);
-	});
-	
-	/**
-	 * DAUM을 이용한 우편번호 팝업 레이어
-	 * @param callbackPosition - 우편번호 정보를 설정할 위치
-	 */
-	var fnOpenDaumAddr = function(callbackPosition) {
-		let daumZip = new daum.Postcode({
-			oncomplete: function(data) {
-				// 우편번호와 주소 정보를 해당 필드에 넣는다.
-				if (callbackPosition == 'delvLoc') {
-					$('#detailForm input[name=delvLocZipcode]').val(data.zonecode);
-					$('#detailForm input[name=delvLocBaseAddr]').val(cfnGetDaumRoadAddr(data));
-					$('#detailForm input[name=delvLocDtlAddr]').focus();
-				} else if (callbackPosition == 'rtnLoc') {
-					$('#detailForm input[name=rtnLocZipcode]').val(data.zonecode);
-					$('#detailForm input[name=rtnLocBaseAddr]').val(cfnGetDaumRoadAddr(data));
-					$('#detailForm input[name=rtnLocDtlAddr]').focus();
-				}
-				
-				cfnCloseDaumAddr();
-			},
-			width: '100%'
-		});
-		
-		cfnOpenDaumAddr(daumZip);
-	}
-	
-	$(document).ready(function() {
-		// Create a agGrid
-		gagaAgGrid.createGrid('gridList', gridOptions);
-	});
-/*]]>*/
-</script>
-
-</html>
+<!DOCTYPE html>
+<html lang="ko"
+	xmlns:th="http://www.thymeleaf.org">
+<!--
+ *******************************************************************************
+ * @source  : DeliveryLocForm.html
+ * @desc    : 출고처관리 Page
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2020 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2020.10.14   gagamel     최초 작성
+ *******************************************************************************
+ -->
+	<div id="main">
+		<!-- 메인타이틀 영역 -->
+		<div class="main-title">
+		</div>
+		<!-- //메인타이틀 영역 -->
+		
+		<!-- 메뉴 설명 -->
+		<div class="infoBox menu-desc">
+		</div>
+		<!-- //메뉴 설명 -->
+		
+		<!-- 검색조건 영역 -->
+		<div class="panelStyle">
+			<form id="searchForm" name="searchForm" action="#" th:action="@{'/business/supply/company/delvloc/list'}" onsubmit="$('#btnSearch').trigger('click'); return false;">
+				<table class="frmStyle" aria-describedby="검색조건">
+					<colgroup>
+						<col style="width:10%;"/>
+						<col style="width:15%;"/>
+						<col style="width:10%;"/>
+						<col style="width:15%;"/>
+						<col style="width:10%;"/>
+						<col style="width:15%;"/>
+						<col style="width:10%;"/>
+						<col/>
+					</colgroup>
+					<tr>
+						<th>공급업체</th>
+						<td>
+<!-- 							<select name="supplyCompCd"> -->
+<!-- 								<option value="">[전체]</option> -->
+<!-- 								<option th:if="${supplyCompList}" th:each="oneData, status : ${supplyCompList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option> -->
+<!-- 							</select> -->
+							<input type="text" class="w100" name="supplyCompSearchTxt" id="supplyCompSearchTxt" maxlength="20"/>
+							<button type="button" class="btn icn" onclick="cfnOpenCompanyListPopup('fnSetSupplyCompInfo', 'M');"><i class="fa fa-search"></i></button>
+							<span id="supplyCompTxt"></span>
+							<input type="hidden" name="supplyCompList"/>
+						</td>
+						<th>출고처유형</th>
+						<td>
+							<select name="delvLocClsf">
+								<option value="">[전체]</option>
+								<option th:if="${delvLocClsfList}" th:each="oneData, status : ${delvLocClsfList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
+							</select>
+						</td>
+						<th>출고처명</th>
+						<td>
+							<input type="text" name="delvLocNm" maxlength="50"/>
+						</td>
+						<th>사용여부</th>
+						<td>
+							<select name="useYn">
+								<option value="Y">Yes</option>
+								<option value="N">No</option>
+							</select>
+						</td>
+					</tr>
+				</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="$('#searchForm')[0].reset();">초기화</button>
+					</li>
+				</ul>
+			</form>
+		</div>
+		<!-- 검색조건 영역 -->
+
+		<!-- 리스트 영역 -->
+		<div class="panelStyle">
+			<!-- 버튼 배치 영역 -->
+			<ul class="panelBar">
+				<li class="right">
+					<button type="button" class="btn btn-default btn-lg" id="btnExcel">엑셀다운로드</button>
+				</li>
+			</ul>
+			<!-- //버튼 배치 영역 -->
+			
+			<div id="gridList" style="width: 100%; height: 470px" class="ag-theme-balham"></div>
+		</div>
+		<!-- //리스트 영역 -->
+		
+		<!-- 등록/수정 -->
+		<div class="panelStyle">
+			<form id="detailForm" name="detailForm" action="#" th:action="@{'/business/supply/company/delvloc/save'}">
+				<input type="hidden" name="mode" value="N"/>
+				
+				<table class="frmStyle" aria-describedby="등록/수정 폼">
+					<colgroup>
+						<col style="width:10%;"/>
+						<col style="width:15%;"/>
+						<col style="width:10%;"/>
+						<col style="width:15%;"/>
+						<col style="width:10%;"/>
+						<col style="width:15%;"/>
+						<col style="width:10%;"/>
+						<col style="width:15%;"/>
+					</colgroup>
+					<tr>
+						<th>출고처코드<i class="required" title="필수"></i></th>
+						<td colspan="7">
+							<input type="text" class="w100" name="delvLocCd" maxlength="20" placeholder="자동생성" required="required" data-valid-type="alphaNumeric" data-valid-name="출고처코드" readonly="readonly"/>
+							<span class="infoTxt cBlue">
+								<i class="fa fa-info-circle" aria-hidden="true"></i>물류창고 : ST0001, <i class="fa fa-info-circle" aria-hidden="true"></i>일반매장/직송매장 : ERP매장코드, <i class="fa fa-info-circle" aria-hidden="true"></i>입점업체 : DL+일련번호4자리로 자동생성
+							</span>
+						</td>
+					</tr>
+					<tr>
+						<th>출고처명<i class="required" title="필수"></i></th>
+						<td>
+							<input type="text" class="w200" name="delvLocNm" maxlength="100" placeholder="출고처명" required="required" data-valid-name="출고처명"/>
+						</td>
+						<th>출고처유형<i class="required" title="필수"></i></th>
+						<td>
+							<select name="delvLocClsf" required="required" data-valid-name="출고처유형">
+								<option value="">[선택]</option>
+								<option th:if="${delvLocClsfList}" th:each="oneData, status : ${delvLocClsfList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
+							</select>
+						</td>
+						<th>공급업체<i class="required" title="필수"></i></th>
+						<td colspan="3">
+							<select name="supplyCompCd" required="required" data-valid-name="공급업체">
+								<option value="">[선택]</option>
+								<option th:if="${supplyCompList}" th:each="oneData, status : ${supplyCompList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
+							</select>
+						</td>
+					</tr>
+					<tr>
+						<th>재고적용율</th>
+						<td colspan="3">
+							<input type="text" class="w100 aR" name="stockApplRate" maxlength="5" data-valid-type="real"/>%
+							<span class="cBlue">* WMS부터 수신된 재고의 판매가용재고 적용율(%). 물류창고와 직송매장에 한함</span>
+						</td>
+						<th>출고수수료율</th>
+						<td colspan="3">
+							<input type="text" class="w100 aR" name="delvFeeRate" maxlength="5" data-valid-type="real"/>%
+							<span class="cBlue">* 직송매장 출고 시 적용할 출고수수료율(%)</span>
+						</td>
+					</tr>
+					<tr>
+						<th>출고지정순서</th>
+						<td colspan="3">
+							<input type="text" class="w100 aR" name="delvAssignOrd" maxlength="3" data-valid-type="integer"/>
+							<span class="cBlue">* 물류창고와 직송매장에 대해 출고지정되는 순서</span>
+						</td>
+<!-- 						<th>출고지정등급</th> -->
+<!-- 						<td> -->
+<!-- 							<select name="delvAssignGrade"> -->
+<!-- 								<option value="">[선택]</option> -->
+<!-- 								<option value="A">[A] A등급</option> -->
+<!-- 								<option value="B">[B] B등급</option> -->
+<!-- 								<option value="C">[C] C등급</option> -->
+<!-- 								<option value="Z">[Z] 출고지정제외</option> -->
+<!-- 							</select> -->
+<!-- 						</td> -->
+						<th>사용여부<i class="required" title="필수"></i></th>
+						<td colspan="3">
+							<label class="rdoBtn"><input type="radio" name="useYn" value="Y" checked="checked">Yes<span></span></label>
+							<label class="rdoBtn"><input type="radio" name="useYn" value="N">No<span></span></label>
+						</td>
+					</tr>
+					<tr>
+						<th>출고처주소<i class="required" title="필수"></i></th>
+						<td colspan="7">
+							<input type="text" class="w100" name="delvLocZipcode" data-valid-name="출고처 우편번호" readonly="readonly"/>
+							<button type="button" class="btn btn-info btn-sm" onclick="fnOpenDaumAddr('delvLoc');">우편번호찾기</button>
+							<input type="text" class="w300" name="delvLocBaseAddr" required="required" data-valid-name="출고처 기본주소" readonly="readonly"/>
+							-
+							<input type="text" class="w300" name="delvLocDtlAddr" maxlength="100" required="required" data-valid-name="출고처 상세주소"/>
+						</td>
+					</tr>
+					<tr>
+						<th>반품처명</th>
+						<td>
+							<input type="text" class="w200" name="rtnLocNm" maxlength="100" placeholder="반품처명"/>
+						</td>
+						<th>반품처주소<i class="required" title="필수"></i></th>
+						<td colspan="5">
+							<input type="text" class="w100" name="rtnLocZipcode" data-valid-name="반품처 우편번호" readonly="readonly"/>
+							<button type="button" class="btn btn-info btn-sm" onclick="fnOpenDaumAddr('rtnLoc');">우편번호찾기</button>
+							<input type="text" class="w300" name="rtnLocBaseAddr" required="required" data-valid-name="반품처 기본주소" readonly="readonly"/>
+							-
+							<input type="text" class="w300" name="rtnLocDtlAddr" maxlength="100" required="required" data-valid-name="반품처 상세주소"/>
+						</td>
+					</tr>
+				</table>
+			</form>
+			
+			<!-- 버튼 배치 영역 -->
+			<ul class="panelBar">
+				<li class="right">
+					<button type="button" class="btn btn-info btn-lg" id="btnNew">신규</button>
+					<button type="button" class="btn btn-success btn-lg" id="btnSave">저장</button>
+				</li>
+			</ul>
+			<!-- //버튼 배치 영역 -->
+		</div>
+		<!-- 등록/수정 -->
+	</div>
+
+<script th:inline="javascript">
+/*<![CDATA[*/
+	let supplyCompList = gagajf.convertToArray([[${supplyCompList}]]);
+	let delvLocClsfList = gagajf.convertToArray([[${delvLocClsfList}]]);
+	let delvGradeList = { "A":"A등급", "B":"B등급", "C":"C등급", "Z":"출고지정제외" };
+	let invoicePrintTypeList = gagajf.convertToArray([[${invoicePrintTypeList}]]);
+
+	let columnDefs = [
+		{ headerName: "출고처코드", field: "delvLocCd", width: 100, cellClass: 'text-center' },
+		{
+			headerName: "출고처명", field: "delvLocNm", width: 150, cellClass: 'text-center',
+			cellRenderer: function(params) {
+				return '<a href="javascript:void(0);">' + params.value + '</a>';
+			}
+		},
+		{
+			headerName: "출고처유형", field: "delvLocClsf", width: 150, cellClass: 'text-center',
+			valueGetter: function (params) {
+				return gagaAgGrid.lookupValue(delvLocClsfList, params.data.delvLocClsf);
+			}
+		},
+// 		{
+// 			headerName: "매장POS", field: "btnPos", width: 120, cellClass: 'text-center',
+// 			cellRenderer: function(params) {
+// 				var btn = '';
+// 				if (params.data.delvLocClsf === 'G024_21') {
+// 					btn ='<button type="button" class="btn btn-success btn-sm" onclick="cfnPopPos(\'' + params.data.delvLocCd + '\');\">매장[POS]</button>';
+// 				}
+// 				return btn;
+// 			}
+// 		},
+		{
+			headerName: "공급업체", field: "supplyCompCd", width: 150, cellClass: 'text-center',
+			valueGetter: function (params) {
+				return gagaAgGrid.lookupValue(supplyCompList, params.data.supplyCompCd);
+			}
+		},
+		{ headerName: "재고적용율(%)", field: "stockApplRate", width: 120, cellClass: 'text-center' },
+		{ headerName: "출고수수료율(%)", field: "delvFeeRate", width:120, cellClass: 'text-center' },
+		{ headerName: "출고지정순서", field: "delvAssignOrd", width: 120, cellClass: 'text-center' },
+// 		{
+// 			headerName: "출고지정등급", field: "delvAssignGrade", width: 150, cellClass: 'text-center',
+// 			cellRenderer: function (params) {
+// 				return gagaAgGrid.lookupValue(delvGradeList, params.value);
+// 			}
+// 		},
+// 		{
+// 			headerName: "송장출력형태", field: "invoicePrintType", width:150 , cellClass: 'text-center',
+// 			valueGetter: function (params) {
+// 				return gagaAgGrid.lookupValue(invoicePrintTypeList, params.data.invoicePrintType);
+// 			}
+// 		},
+		{ headerName: "출고처우편번호", field: "delvLocZipcode", width: 150, cellClass: 'text-center', hide: true },
+		{ headerName: "출고처기본주소", field: "delvLocBaseAddr", width: 300, hide: true },
+		{ headerName: "출고처상세주소", field: "delvLocDtlAddr", width: 300, hide: true },
+		{ headerName: "반품처명", field: "rtnLocNm", width: 100, cellClass: 'text-center', hide: true },
+		{ headerName: "반품처우편번호", field: "rtnLocZipcode", width: 150, cellClass: 'text-center', hide: true },
+		{ headerName: "반품처기본주소", field: "rtnLocBaseAddr", width: 300, hide: true },
+		{ headerName: "반품처상세주소", field: "rtnLocDtlAddr", width: 300, hide: true },
+		{
+			headerName: "사용여부", field: "useYn", width: 100, cellClass: 'text-center',
+			valueGetter: function (params) { return params.data.useYn == 'Y' ? 'Yes' : 'No'; }
+		}
+	];
+
+	let gridOptions = gagaAgGrid.getGridOptions(columnDefs);
+
+	// Cell click
+	gridOptions.onCellClicked = function(event) {
+		if (event.colDef.field != 'delvLocNm')
+			return;
+		
+		$('#detailForm input[name=mode]').val('U');
+		$('#detailForm input[name=delvLocCd]').attr('readonly', true);
+		$('#detailForm input[name=delvLocCd]').val(event.data.delvLocCd);
+		$('#detailForm input[name=delvLocNm]').val(event.data.delvLocNm);
+		$('#detailForm select[name=delvLocClsf]').val(event.data.delvLocClsf);
+		$('#detailForm select[name=supplyCompCd]').val(event.data.supplyCompCd);
+		$('#detailForm input[name=delvAssignOrd]').val(event.data.delvAssignOrd);
+		$('#detailForm select[name=delvAssignGrade]').val(event.data.delvAssignGrade);
+		$('#detailForm input[name=stockApplRate]').val(Number(event.data.stockApplRate).addComma());
+		$('#detailForm input[name=delvFeeRate]').val(Number(event.data.delvFeeRate).addComma());
+// 		$('#detailForm select[name=invoicePrintType]').val(event.data.invoicePrintType);
+		$('#detailForm input[name=delvLocZipcode]').val(event.data.delvLocZipcode);
+		$('#detailForm input[name=delvLocBaseAddr]').val(event.data.delvLocBaseAddr);
+		$('#detailForm input[name=delvLocDtlAddr]').val(event.data.delvLocDtlAddr);
+		$('#detailForm input[name=rtnLocZipcode]').val(event.data.rtnLocZipcode);
+		$('#detailForm input[name=rtnLocBaseAddr]').val(event.data.rtnLocBaseAddr);
+		$('#detailForm input[name=rtnLocDtlAddr]').val(event.data.rtnLocDtlAddr);
+		$('#detailForm input[name=rtnLocNm]').val(event.data.rtnLocNm);
+		
+		if (event.data.useYn == 'Y') {
+			$('#detailForm input:radio[name=useYn]').eq(0).attr('checked', true);
+		} else {
+			$('#detailForm input:radio[name=useYn]').eq(1).attr('checked', true);
+		}
+	}
+
+	// 업체 조회 팝업에서 호출
+	var fnSetSupplyCompInfo = function(result) {
+		var arrSupplyComp = [];
+		var supplyCompTxt = "";
+		var sIndex = 0;
+		$('#supplyCompTxt').html('');
+		$('#searchForm input[name=supplyCompSearchTxt]').val('');
+		
+		result.forEach(function(supplyComp) {
+			sIndex++; 
+			arrSupplyComp.push(supplyComp.supplyCompCd);
+		});
+
+		// 조회 값이 하나일 경우 화면에 코드 노출. 그 외는 갯수 처리 
+		if (sIndex == 1) {
+			$('#searchForm input[name=supplyCompSearchTxt]').val(arrSupplyComp[0]);
+		} else {
+			supplyCompTxt = sIndex + " 개";
+			$('#supplyCompTxt').html(supplyCompTxt);
+		}
+		
+		var jsonData = JSON.stringify(arrSupplyComp);
+		$("#searchForm input[name=supplyCompList]").val(jsonData);
+	}
+	
+	// 출고처유형 셀렉트박스 변경 시 이벤트
+	$('#detailForm select[name=delvLocClsf]').on('change', function() {
+		let val = $(this).val();
+		let mode = $('#detailForm input[name=mode]').val();
+		
+		if (val == 'G024_10') { // 물류창고
+			if (mode == 'N') {
+				$('#detailForm input[name=delvLocCd]').attr('readonly', true); // 직접입력 불가
+				$('#detailForm input[name=delvLocCd]').val('ST0001');
+			}
+		
+			$('#detailForm input[name=stockApplRate]').val(100);
+		} else if (val == 'G024_20' || val == 'G024_21') { // 일반매장, 직송매장
+			if (mode == 'N') {
+				$('#detailForm input[name=delvLocCd]').attr('readonly', false); // 직접입력 가능
+				$('#detailForm input[name=delvLocCd]').val('');
+				$('#detailForm input[name=delvLocCd]').attr('placeholder', 'ERP매장코드');
+			}
+		
+			$('#detailForm input[name=stockApplRate]').val(100);
+		} else { // 입점업체
+			if (mode == 'N') {
+				$('#detailForm input[name=delvLocCd]').attr('readonly', true); // 직접입력 불가
+				$('#detailForm input[name=delvLocCd]').val('');
+				$('#detailForm input[name=delvLocCd]').attr('placeholder', '자동생성');
+			}
+		
+			$('#detailForm input[name=stockApplRate]').val('');
+		}
+	});
+	
+	// 검색
+	$('#btnSearch').on('click', function() {
+		gagaAgGrid.fetch($('#searchForm').prop('action'), gridOptions, '#searchForm');
+	});
+
+	// 신규버튼
+	$('#btnNew').on('click', function() {
+		$("#detailForm")[0].reset();
+		$('#detailForm input[name=delvLocCd]').attr('readonly', true);
+		$('#detailForm input[name=delvLocNm]').focus();
+	});
+	
+	// 저장
+	$("#btnSave").on("click", function() {
+		// 필수값 체크
+		if (!gagajf.validation('#detailForm'))
+			return false;
+
+		mcxDialog.confirm("저장하시겠습니까?", {
+			cancelBtnText: "취소",
+			sureBtnText: "확인",
+			sureBtnClick: function() {
+				gagajf.ajaxFormSubmit($('#detailForm').prop('action'), '#detailForm', function() {
+					$('#btnNew').trigger('click');
+					$('#btnSearch').trigger('click');
+				});
+			}
+		});
+	});
+	
+	// 엑셀다운로드
+	$('#btnExcel').on('click', function() {
+		gagaAgGrid.exportToExcel('출고처 목록', gridOptions);
+	});
+	
+	/**
+	 * DAUM을 이용한 우편번호 팝업 레이어
+	 * @param callbackPosition - 우편번호 정보를 설정할 위치
+	 */
+	var fnOpenDaumAddr = function(callbackPosition) {
+		let daumZip = new daum.Postcode({
+			oncomplete: function(data) {
+				// 우편번호와 주소 정보를 해당 필드에 넣는다.
+				if (callbackPosition == 'delvLoc') {
+					$('#detailForm input[name=delvLocZipcode]').val(data.zonecode);
+					$('#detailForm input[name=delvLocBaseAddr]').val(cfnGetDaumRoadAddr(data));
+					$('#detailForm input[name=delvLocDtlAddr]').focus();
+				} else if (callbackPosition == 'rtnLoc') {
+					$('#detailForm input[name=rtnLocZipcode]').val(data.zonecode);
+					$('#detailForm input[name=rtnLocBaseAddr]').val(cfnGetDaumRoadAddr(data));
+					$('#detailForm input[name=rtnLocDtlAddr]').focus();
+				}
+				
+				cfnCloseDaumAddr();
+			},
+			width: '100%'
+		});
+		
+		cfnOpenDaumAddr(daumZip);
+	}
+	
+	$(document).ready(function() {
+		// Create a agGrid
+		gagaAgGrid.createGrid('gridList', gridOptions);
+	});
+/*]]>*/
+</script>
+
+</html>

+ 28 - 12
src/main/webapp/WEB-INF/views/display/MainContentsPopupForm.html

@@ -429,6 +429,14 @@
 						if(subText!=null && subText!='null' && subText!='' ){
 							html += fnAddBrandDescRow(subText);
 						}
+					}else if(contentsLoc=='SMM001'){
+						if(subText!=null && subText!='null' && subText!='' ){
+							html += fnAddSubTextPopRow(subText);
+						}else{
+							if(j == 1){
+								html += fnAddSubTextPopRow();
+							}
+						}
 					}else{
 						if(subText!=null && subText!='null' && subText!='' ){
 							html += fnAddSubTextPopRow(subText);
@@ -1312,8 +1320,8 @@
 					return;
 				}
 			}else{
-				if($(param).closest("table").find("tbody").find("tr[name=linkPopRow]").length>3){
-					mcxDialog.alert("링크는 4개까지 등록 가능합니다");
+				if($(param).closest("table").find("tbody").find("tr[name=linkPopRow]").length>0){
+					mcxDialog.alert("링크는 1개까지 등록 가능합니다");
 					return;
 				}
 			}
@@ -1337,8 +1345,8 @@
 		}
 		html += '</tr>';
 		if(typeof param == 'object'){
-			if($(param).closest("table").find("tbody").find("tr[name=subTextPopRow]").length>3){
-				mcxDialog.alert("서브텍스트는 4개까지 등록 가능합니다");
+			if($(param).closest("table").find("tbody").find("tr[name=subTextPopRow]").length>0){
+				mcxDialog.alert("서브텍스트는 1개까지 등록 가능합니다");
 				return;
 			}
 			$(param).closest("table").find("tbody").append(html);
@@ -1426,9 +1434,13 @@
 					return;
 				}
 			}else{
-				if($(param).closest("table").find("tbody").find("tr[name=imgPopRow]").length>3){
-					mcxDialog.alert("이미지는 4개까지 등록 가능합니다");
-					return;
+				if(contentsLoc=='SMM001' || contentsLoc=='SBM004'|| contentsLoc=='SOM001'){
+
+				}else{
+					if($(param).closest("table").find("tbody").find("tr[name=imgPopRow]").length>0){
+						mcxDialog.alert("이미지는 1개까지 등록 가능합니다");
+						return;
+					}
 				}
 			}
 			imgIndex++;
@@ -1480,9 +1492,13 @@
 					return;
 				}
 			}else{
-				if($(param).closest("table").find("tbody").find("tr[name=imgPopRow]").length>3){
-					mcxDialog.alert("이미지는 4개까지 등록 가능합니다");
-					return;
+				if(contentsLoc=='SMM001' || contentsLoc=='SBM004'|| contentsLoc=='SOM001'){
+
+				}else{
+					if($(param).closest("table").find("tbody").find("tr[name=imgPopRow]").length>0){
+						mcxDialog.alert("이미지는 1개까지 등록 가능합니다");
+						return;
+					}
 				}
 			}
 			imgMobIndex++;
@@ -1506,8 +1522,8 @@
 		}
 		html += '</tr>';
 		if(typeof param == 'object'){
-			if($(param).closest("table").find("tbody").find("tr[name=titlePopRow]").length>3){
-				mcxDialog.alert("타이틀은 4개까지 등록 가능합니다");
+			if($(param).closest("table").find("tbody").find("tr[name=titlePopRow]").length>0){
+				mcxDialog.alert("타이틀은 1개까지 등록 가능합니다");
 				return;
 			}
 			$(param).closest("table").find("tbody").append(html);

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

@@ -80,7 +80,7 @@
 	// 탭추가
 	var addIdx = 0;
 	var fnAddTab = function (param){
-		addIdx = tableIdx;
+		addIdx = tableIdx+1;
 		var html = '';
 		html += '<table class="frmStyle tabTable" style="margin-bottom:30px" id="tabTable'+addIdx+'">';
 		html += '<input type="hidden" name="tableIdx" value="'+addIdx+'" data-id="'+addIdx+'" />';
@@ -338,6 +338,25 @@
 		}
 	}
 
+	// 유형선택 체크
+	var dataTypeValidation = function (){
+		var dataBool = true;
+
+		$("#gnbTabList .tabTable").each(function (i){
+			var thisIdx = $(this).find("input[name=tableIdx]").val();
+			if(gagajf.isNull($(this).find("input:radio[name=cateType"+thisIdx+"]:checked").val())){
+				mcxDialog.alert((i+1)+'번째 유형을 선택해주세요.');
+				dataBool = false;
+			}
+		});
+
+		if(!dataBool){
+			return false;
+		}else{
+			return true;
+		}
+	}
+
 	/**
 	 * 임시저장
 	 */
@@ -351,10 +370,18 @@
 		if(!dateValidation()){
 			return false;
 		}
+		if(contentsLoc=='STAB001'){
+			// 데이터 체크
+			if(!groupDataValidation()){
+				return false;
+			}
+		}
 
-		// 데이터 체크
-		if(!groupDataValidation()){
-			return false;
+		// 유형선택 체크
+		if(contentsLoc=='STAB002'){
+			if(!dataTypeValidation()){
+				return false;
+			}
 		}
 
 		dataArr = [];
@@ -382,11 +409,11 @@
 			var subText4 = '';
 			var i=1;
 			var tableidx;
+			var dispOrd;
 
 			if(contentsLoc=='STAB001'){
 				tableidx = $(this).find("input[name=tableIdx]").val();
 				strTitle3 = $(this).find("input[name=dispOrd]").val();
-				// console.log('strTitle3???'+strTitle3);
 				strTitle4 = $(this).find("input[name=tableIdx]").val();
 				var dispStdt = $(this).find("input[name=dispStdt]").val().replace(/[^0-9]/g, '')+$(this).find("[name=stTimeHour]").val().replace('시', '')+$(this).find("[name=stTimeMin]").val().replace('분', '')+'00';
 				var dispEddt = $(this).find("input[name=dispEddt]").val().replace(/[^0-9]/g, '')+$(this).find("[name=edTimeHour]").val().replace('시', '')+$(this).find("[name=edTimeMin]").val().replace('분', '')+'59';
@@ -394,11 +421,11 @@
 				$(this).find(".brandClass").each(function (){
 					var idx = $(this).closest('div').attr('data-id');
 					strTitle1 = $("#tabTable"+tableidx+" .groupTr").find("input[id=bTitle"+idx+"]").val();
-					var dispOrd = $(this).find("[name=dispOrd]").val();
+					dispOrd = $(this).find("[name=dispOrd]").val();
 					strVar1 = $(this).find("input[name=brandGroupNo]").val();
 					imgPath1 = $(this).find("input[name=imgPath1]").val();
 					strTitle2 = idx;
-					// console.log('strTitle3>>>>>>>>'+strTitle3);
+
 					var data = {
 						cateNo : cateNo
 						, contentsLoc : contentsLoc
@@ -430,8 +457,6 @@
 					};
 					dataArr.push(data);
 				});
-				// console.log('======0=====');
-				// console.log(dataArr);
 			}else{
 				var gtabGb = '';
 				if(contentsLoc=='STAB002'){
@@ -481,25 +506,11 @@
 			}
 		});
 
-		// if(contentsLoc=='STAB001'){
-		// 	if(dataArr.length>0){
-		// 		var dataArrSort = [];
-		// 		console.log('=======1======');
-		// 		console.log(dataArr);
-		// 		dataArr.forEach(function(item, index){
-		// 			for(var i=1; i<dataArr.length; i++){
-		// 				if(i>index){
-		// 					if(dataArr[index].strTitle4!=dataArr[i].strTitle4){
-		// 						console.log(dataArr[i].strTitle3);
-		// 						dataArr[i].strTitle3 = Number(dataArr[i].strTitle3) + 1;
-		// 					}
-		// 				}
-		// 			}
-		// 			dataArrSort.push(item);
-		// 		});
-		// 		dataArr = dataArrSort;
-		// 	}
-		// }
+		if(contentsLoc=='STAB001'){
+			if(!dispOrdValidation()){
+				return false;
+			}
+		}
 
 		var jsonData = JSON.stringify(dataArr);
 		mcxDialog.confirm('저장하시겠습니까?', {
@@ -515,6 +526,37 @@
 		});
 	});
 
+	// 동일 전시 순서 안되게 체크
+	var dispOrdValidation = function (){
+		var dataBool = true;
+		let dupCnt = 0;
+
+		if(dataArr.length>0){
+			var dataArrSort = [];
+			dataArr.forEach(function(item, index){
+				for(var i=1; i<dataArr.length; i++){
+					if(i>index){
+						if(dataArr[index].strTitle4!=dataArr[i].strTitle4){
+							if(dataArr[index].strTitle3==dataArr[i].strTitle3){
+								dupCnt++;
+							}
+						}
+					}
+				}
+			});
+			if(dupCnt>0){
+				dataBool = false;
+			}
+		}
+
+		if(!dataBool){
+			mcxDialog.alert('전시순서가 같을 수 없습니다. 재설정 해주세요.');
+			return false;
+		}else{
+			return true;
+		}
+	}
+
 	// 브랜드 코드에 해당하는 브랜드 명, 브랜드 이미지 join해서 가져와야함 -> 로직 수정 필요
 	var fnGetBrandPreviewList = function (result){
 		$("#gnbTabList").html('');
@@ -706,9 +748,11 @@
 		});
 
 		if(contentsLoc=='STAB001'){
-			$("#brandListTd1").sortable();
-			$("#brandListTd2").sortable();
-			$("#brandListTd3").sortable();
+			$("#gnbTabList .tabTable").each(function (){
+				$(this).find("#brandListTd1").sortable();
+				$(this).find("#brandListTd2").sortable();
+				$(this).find("#brandListTd3").sortable();
+			});
 		}
 
 		tableIdx = tableIdx+1;

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

@@ -357,7 +357,7 @@ console.log('brandGroupNo:'+brandGroupNo);
 
 	var fnReloadIdx = function (){
 		$(".tableTest").each(function(i){
-			$(this).attr('id','tabTable'+i);
+			// $(this).attr('id','tabTable'+i);
 			$(this).find("input[name=dispOrd]").val(i+1);
 			//console.log($(this).attr('id'));
 		});
@@ -574,6 +574,27 @@ console.log('brandGroupNo:'+brandGroupNo);
 		}
 	}
 
+	// 몰메인 신상품 : 상품데이터 체크
+	var goodsArrValidation = function (){
+		var dataBool = true;
+
+		$("#multiPopSortable .tableTest").each(function(i){
+			var thisIdx = $(this).find("input[name=tableIdx]").val();
+
+			if($("#tabTable"+thisIdx+" #goodsListTd"+thisIdx).find('ul').find('input[name=goodsCd]').length < 1){
+				mcxDialog.alert((i+1)+"번째 컨텐츠영역의 상품 정보가 없습니다.");
+				$(this).focus();
+				dataBool = false;
+			}
+		});
+
+		if(!dataBool){
+			return false;
+		}else{
+			return true;
+		}
+	}
+
 	/**
 	 * 임시저장
 	 */
@@ -588,6 +609,12 @@ console.log('brandGroupNo:'+brandGroupNo);
 			return false;
 		}
 
+		if(contentsLoc=='SMM003'){
+			if(!goodsArrValidation()){
+				return false;
+			}
+		}
+
 		dataArr = [];
 		$("#multiPopSortable .tableTest").each(function(){	//$("#multiPopSortable table").each(function(){
 			var newImgFileArr = [];
@@ -983,6 +1010,8 @@ console.log('brandGroupNo:'+brandGroupNo);
 		$("#"+tableId +" .goodsClass").each(function (i){
 			$(this).attr('id','goodsUl'+i);
 			$(this).find("#delId").attr('onclick','fnRemoveGoods(this,'+i+');');
+			$(this).find("input[name=dispOrdEdit]").val(i+1);
+			$(this).find("input[name=setDispOrd]").val(i+1);
 		});
 	}
 

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

@@ -232,7 +232,8 @@
 			$("#searchForm input[name=searchGb]").val("BASIC");
 		}
 
-		if(!fnConditionCheck()) return;
+		//전체조회 가능하게
+		//if(!fnConditionCheck()) return;
  		
  		var formId = "#searchForm";
  		gagaAgGrid.fetch($(formId).prop('action'), gridOptions, formId);
@@ -285,7 +286,7 @@
 		}
 
 		var params =  $(formId).serialize();
-		$('#GoodsExcelList').attr({ href : '/goods/info/excel/list?' + params }).get(0).click();
+		$('#GoodsExcelList').attr({ href : '/goods/naver/excel/list?' + params }).get(0).click();
 	}
 	
 	// 업체변경시

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

@@ -43,13 +43,20 @@
 						<col/>
 					</colgroup>
 					<tr>
-						<th>업체/브랜드</th>
-						<td colspan="3">
-							<select name="supplyCompCd" id="supplyCompCd">
-								<option value="" th:if="${sessionInfo.roleCd} != 'G001_B000'">[전체]</option>
-								<option th:if="${supplyCompList}" th:each="oneData, status : ${supplyCompList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
-							</select>
-							<span id="multiBrand"></span>
+						<th>업체</th>
+						<td>
+							<input type="text" class="w100" name="supplyCompSearchTxt" id="supplyCompSearchTxt" maxlength="20" />
+							<button type="button" class="btn icn" id="btnSearchSupplyComp"><i class="fa fa-search"></i></button>
+							<span id="supplyCompText"></span>
+							<input type="hidden" name="supplyCompList"/>
+						</td>
+						<th>브랜드</th>
+						<td>
+							<input type="text" class="w100" name="searchTxt" id="searchTxt" maxlength="20" />
+							<button type="button" class="btn icn" id="btnSearchBrand"><i class="fa fa-search"></i></button>
+							<!-- <input type="text" class="w100" name="brandCd" readonly="readonly"/> -->
+							<span id="brandText"></span>
+							<input type="hidden" name="brandList"/>
 						</td>
 						<th rowspan="3">키워드</th>
 						<td rowspan="3">
@@ -230,7 +237,11 @@
 		//$("#goodsPriceResForm input[type=radio]").parent("label").removeClass("checked");
 		$("#goodsPriceResForm input[type=checkbox]").parent("label").removeClass("checked");
 		$("#goodsPriceResForm input[type=radio][checked]").parent("label").addClass("checked");
-		$("#multiBrand").empty();
+		
+		$('#goodsPriceResForm input[name=brandList]').val('');
+		$('#goodsPriceResForm input[name=supplyCompList]').val('');
+		$('#goodsPriceResForm').find('#brandText').html('');
+		$('#goodsPriceResForm').find('#supplyCompText').html('');
 	}
 	
 	// 조회클릭시
@@ -282,12 +293,13 @@
 		var searchFlag = false;
 		var cnt = 0;
 
-		/* if( !gagajf.isNull($("#goodsPriceResForm select[name=supplyCompCd]").val())
-				|| !gagajf.isNull($("#goodsPriceResForm input[name=condition]").val())
-				|| (!gagajf.isNull($("#goodsPriceResForm input[name=stDate]").val()) && !gagajf.isNull($("#goodsPriceResForm input[name=edDate]").val()))
+		if( !gagajf.isNull($("#goodsPriceResForm input[name=supplyCompList]").val()) 
+				|| !gagajf.isNull($("#goodsPriceResForm textarea[name=condition]").val())
+				|| (!gagajf.isNull($("#goodsPriceResForm input[name=applyStdt]").val()) && !gagajf.isNull($("#goodsPriceResForm input[name=applyEddt]").val()))
+				|| !gagajf.isNull($("#goodsPriceResForm input[name=brandList]").val())
 			){
 			searchFlag = true;
-		}else{ */
+		}else{
 			for (i = 0; i < form.elements.length; i++ ) {
 				var el = form.elements[i];
 				if ($(el).prop("type") == "text" || $(el).prop("type") == "textarea" || ($(el).prop("type") == "select-one" && el.name != "search" && el.name != "pageSize")) {
@@ -299,7 +311,7 @@
 			
 			if(cnt > 0) searchFlag = true;
 			
-		/* } */
+		 } 
 		
 		if(searchFlag == false){
 			mcxDialog.alert("검색조건을 입력하세요.");
@@ -361,6 +373,67 @@
 		cfnCreateMultiCombo(actionUrl,"multiBrand",  "[전체]",null, 'Y');
 	});
 	
+	// 업체 조회 선택시
+	$('#btnSearchSupplyComp').on('click', function() {
+		cfnOpenCompanyListPopup('fnSetSupplyCompInfo', 'M');
+	});
+	
+	// 업체 조회 팝업에서 호출
+	var fnSetSupplyCompInfo = function(result) {
+		var arrSupplyComp = [];
+		var supplyCompText = "";
+		var sIndex = 0;
+		$('#goodsPriceResForm').find('#supplyCompText').html('');
+		$('#goodsPriceResForm input[name=supplyCompSearchTxt]').val('');
+		result.forEach(function(supplyComp){
+			sIndex++; 
+			arrSupplyComp.push(supplyComp.supplyCompCd);
+		});
+
+		// 조회값이 하나일 경우 화면에 코드 노출 그외는 갯수 처리 
+		if (sIndex == 1) {
+			$('#goodsPriceResForm input[name=supplyCompSearchTxt]').val(arrSupplyComp[0]);
+		}else{
+			supplyCompText = sIndex + " 개";
+			$('#goodsPriceResForm').find('#supplyCompText').html(supplyCompText);	
+		}
+		var jsonData = JSON.stringify(arrSupplyComp);
+		$("#goodsPriceResForm input[name=supplyCompList]").val(jsonData);
+	}
+	
+	// 브랜드 조회 선택시
+	$('#btnSearchBrand').on('click', function() {
+		/* if (gagajf.isNull($("#goodsPriceResForm input[name=searchTxt]").val())){
+			mcxDialog.alert('브랜드 검색어를 입력하세요.');
+			return false;
+		} */
+		cfnOpenBrandListPopup('fnSetBrandInfo', 'M');
+	});
+	
+	// 브랜드 조회 팝업에서 호출
+	var fnSetBrandInfo = function(result) {
+		var arrbrandCd = [];
+		var brandText = "";
+		var bIndex = 0;
+		$('#goodsPriceResForm').find('#brandText').html('');
+		$('#goodsPriceResForm input[name=searchTxt]').val('');
+		result.forEach(function(brand){
+			bIndex++; 
+			arrbrandCd.push(brand.brandCd);
+		});
+
+		// 조회값이 하나일 경우 화면에 코드 노출 그외는 갯수 처리 
+		if (bIndex == 1) {
+			$('#goodsPriceResForm input[name=searchTxt]').val(arrbrandCd[0]);
+		}else{
+			brandText = bIndex + " 개";
+			$('#goodsPriceResForm').find('#brandText').html(brandText);	
+		}
+		var jsonData = JSON.stringify(arrbrandCd);
+		$("#goodsPriceResForm input[name=brandList]").val(jsonData);
+	}
+	
+	
 	//엑셀 상품 조회
 	$('#btnGoodsExcelUpLoad').on('click', function() {
 		cfnExcelUploadPopup('goodsPriceExcelUpload', 'goodsPriceExcelUpload');

+ 6 - 3
src/main/webapp/WEB-INF/views/goods/GoodsPriceReservePopupForm.html

@@ -108,6 +108,9 @@
 		var oldData = gagaAgGrid.getAllRowData(rsvtGoodsPriceGridOptions);
 		$.each(result, function(idx, item) {
 			var isInvalid = false;
+			if(item.goodsType == 'G056_D'){
+				return true;
+			}
 			if (oldData != null && oldData.length != 0){
 				oldData.forEach(function(oneData){
 					if(oneData.goodsCd == item.goodsCd){
@@ -186,7 +189,7 @@
 		$.each(allRowData, function(index, item) {
 			if (item.listPrice < $("#goodsPriceRsvtForm input[name=resGoodsPrice]").val()){
 				optCheck = true;
-				mcxDialog.alertC("가격예약 상품중 정상가보다 높은 상품이 존재합니다.<br/>확인해 주세요", {
+				mcxDialog.alertC("가격예약 상품중 정상가가 예약가 보다 낮은 상품이 상품이 존재합니다.<br/>확인해 주세요", {
 					sureBtnText: "확인",
 					sureBtnClick: function() {
 						rsvtGoodsPriceGridOptions.api.setFocusedCell(index, "goodsCd", null);
@@ -220,7 +223,7 @@
 		var toDateStr = new Date().format("YYYYMMDDHHmmss");
 
 		if (toDateStr >= applyStdt){
-			mcxDialog.alertC("예약 시작일자는 현재일자 보다 작거나 같을 수 없습니다.",  {
+			mcxDialog.alertC("예약 시작일시는 현재일시 보다 작거나 같을 수 없습니다.",  {
 				sureBtnText: "확인",
 				sureBtnClick: function() {
 					$('#goodsPriceRsvtForm input[name=applyStYMD]').focus();
@@ -230,7 +233,7 @@
 		}
 
 		if (toDateStr >= applyEddt){
-			mcxDialog.alertC("예약 종료일자는 현재일자 보다 작거나 같을 수 없습니다.", {
+			mcxDialog.alertC("예약 종료일시는 현재일시 보다 작거나 같을 수 없습니다.", {
 				sureBtnText: "확인",
 				sureBtnClick: function() {
 					$('#goodsPriceRsvtForm input[name=applyEdYMD]').focus();

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

@@ -178,12 +178,8 @@
 	// Row Click
 	gridOptions.onCellClicked = function(event) {
 		var goodsCd = event.data.goodsCd;
-		if (event.colDef.field == "goodsCd"){
+		if (event.colDef.field == "goodsNm"){
 			cfnOpenGoodsDetailPopup('U',goodsCd);
-			//cfnOpenFrontGoodsPopup(goodsCd, event.data.siteCd);
-		}else if (event.colDef.field == "mallLink"){
-			window.open(event.data.mallLink, "_blank, scrollbars=yes");
-			
 		}
 	}
 

+ 8 - 8
src/main/webapp/WEB-INF/views/goods/GoodsSupplyPriceForm.html

@@ -137,12 +137,12 @@
 		{headerName: "온라인 현재판매가", field: "currPrice", width: 120, cellClass: 'text-right'
 			,valueFormatter: function(params) {return params.value.addComma();}
 		},
-		{headerName: "판매가조정대상금액", field: "resGoodsPrice", width: 140, cellClass: 'text-right'
+		{headerName: "판매가조정대상금액", field: "supplyGoodsPrice", width: 140, cellClass: 'text-right'
 			,cellRenderer: function(params) {
-				if (params.data.resGoodsPrice <= 0){
+				if (params.data.supplyGoodsPrice <= 0){
 					return "-";
 				}else{
-					var gapPrice = Number(params.data.currPrice) - Number(params.data.resGoodsPrice);
+					var gapPrice = Number(params.data.currPrice) - Number(params.data.supplyGoodsPrice);
 					
 					if (gapPrice >= 0){
 						return '<font color="red"> '+ params.value.addComma() +'</font>';
@@ -156,17 +156,17 @@
 		{headerName: "온라인 판매수수료", field: "goodsSellFeeRate", width: 140, cellClass: 'text-right'
 			,valueFormatter: function(params) {return params.value.addComma();}
 		},
-		{headerName: "판매수수료 조정대상수수료", field: "sellFeeRate", width: 180, cellClass: 'text-right'
+		{headerName: "판매수수료 조정대상수수료", field: "supplySellFeeRate", width: 180, cellClass: 'text-right'
 			,cellRenderer: function(params) {
-				if (gagajf.isNull(params.data.sellFeeRate)){
+				if (gagajf.isNull(params.data.supplySellFeeRate)){
 					return "-";
 				}else{
-					var gapRate = Number(params.data.goodsSellFeeRate) - Number(params.data.sellFeeRate);
+					var gapRate = Number(params.data.goodsSellFeeRate) - Number(params.data.supplySellFeeRate);
 					
 					if (gapRate >= 0){
-						return '<font color="red"> '+ params.data.sellFeeRate +'</font>';
+						return '<font color="red"> '+ params.data.supplySellFeeRate +'</font>';
 					}else{
-						return '<font color="blue"> '+ params.data.sellFeeRate +'</font>';
+						return '<font color="blue"> '+ params.data.supplySellFeeRate +'</font>';
 					}
 				}	
 			}

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

@@ -108,7 +108,7 @@
 		{headerName: "상품코드", field: "goodsCd" , width: 120, cellClass: 'text-center'},
 		{headerName: "검품", field: "normalqty" , width: 120, cellClass: 'text-right'},
 		{headerName: "양품", field: "brokenqty" , width: 120, cellClass: 'text-right'},
-		{headerName: "량", field: "totalqty" , width: 120, cellClass: 'text-right'},
+		{headerName: "총수량", field: "totalqty" , width: 120, cellClass: 'text-right'},
 		{headerName: "등록일시", field: "dateincome", width: 150, cellClass: 'text-center',
 			cellRenderer: function(params) {
 				return !gagajf.isNull(params.value) ? params.value.toDate("YYYYMMDD").format("YYYY-MM-DD") : '';

+ 12 - 6
src/main/webapp/WEB-INF/views/marketing/CouponIssuePopupForm.html

@@ -193,7 +193,7 @@
 		},
 		{
 			headerName: "최고할인값", field: "maxDcAmt", width: 100, cellClass: "text-center",
-			cellRenderer: function(params) { return (!gagajf.isNull(params.value) ? gagaAgGrid.toAddComma(params.value) : '') + (params.data.dcWay == 'G240_10' ? '원' : '%'); }
+			cellRenderer: function(params) { return (!gagajf.isNull(params.value) ? gagaAgGrid.toAddComma(params.value) + '원' : '');}
 		},
 		{
 			headerName: "유효기간", field: "availPeriod", width: 300, cellClass: "text-center",
@@ -226,7 +226,6 @@
 	
 	gridOptionsCouponList.rowSelection = 'single';
 	gridOptionsCouponList.rowMultiSelectWithClick = true; // 클릭으로 선택 가능
-	//gridOptionsCouponList.suppressRowClickSelection = true;
 
 	// 셀 클릭 이벤트
 	gridOptionsCouponList.onCellClicked = function (event) {
@@ -264,6 +263,11 @@
 			}
 			custCoupon.availStdt = custCoupon.availStdt+' '+availStHH +':'+ availStMM + ':' +START_END_TIME;
 			custCoupon.availEddt = custCoupon.availEddt+' '+availEdHH +':'+ availEdMM + ':' +END_TIME;
+			let today = new Date().format('YYYY-MM-DD');
+			if (custCoupon.availStdt < today || custCoupon.availEddt < today) {
+				mcxDialog.alert("유효 시작일시 / 유효 종료일시는 오늘일자 보다 크거나 같아야 합니다.");
+				return;
+			}
 		}
 
 		if (custCoupon.pdGb === 'D') {
@@ -298,12 +302,14 @@
 		$('#couponIssueForm input[name=pdGb]').val(params.pdGb);
 
 		if (params.pdGb === 'P') {
+			let stdt = params.availStdt.split(' ')[1].replaceAll(':','');
+			let eddt = params.availEddt.split(' ')[1].replaceAll(':','');
 			$('#couponIssueForm input[name=availStdt]').val(gagaAgGrid.toDateFormat(params.availStdt));
-			$("#couponIssueForm select[name=availStHH]").val(params.availStdt.substring(8,10));
-			$("#couponIssueForm select[name=availStMM]").val(params.availStdt.substring(10,12));
+			$("#couponIssueForm select[name=availStHH]").val(stdt.substring(0, 2));
+			$("#couponIssueForm select[name=availStMM]").val(stdt.substring(2, 4));
 			$('#couponIssueForm input[name=availEddt]').val(gagaAgGrid.toDateFormat(params.availEddt));
-			$("#couponIssueForm select[name=availEdHH]").val(params.availEddt.substring(8,10));
-			$("#couponIssueForm select[name=availEdMM]").val(params.availEddt.substring(10,12));
+			$("#couponIssueForm select[name=availEdHH]").val(eddt.substring(0, 2));
+			$("#couponIssueForm select[name=availEdMM]").val(eddt.substring(2, 4));
 		} else {
 			$('#couponIssueForm input[name=availDays]').val(params.availDays);
 		}

+ 24 - 16
src/main/webapp/WEB-INF/views/marketing/CouponPopupForm.html

@@ -1011,17 +1011,19 @@
 			return false;
 		}
 
-		// 적용대상 체크
-		let targetCnt = 0;
-		let target1 = gagaAgGrid.getAllRowData(supplyGridOptions);
-		let target2 = gagaAgGrid.getAllRowData(brandGridOptions);
-		let target3 = gagaAgGrid.getAllRowData(cateGridOptions);
-		let target4 = gagaAgGrid.getAllRowData(goodsGridOptions);
-
-		targetCnt = target1.length + target2.length + target3.length + target4.length;
-		if(targetCnt < 1){
-			mcxDialog.alert("적용대상을 설정해주세요.");
-			return false;
+		if($('#CouponForm input:radio[name="rdoApplyScope"]:checked').val() == 'I'){
+			// 적용대상 체크
+			let targetCnt = 0;
+			let target1 = gagaAgGrid.getAllRowData(supplyGridOptions);
+			let target2 = gagaAgGrid.getAllRowData(brandGridOptions);
+			let target3 = gagaAgGrid.getAllRowData(cateGridOptions);
+			let target4 = gagaAgGrid.getAllRowData(goodsGridOptions);
+
+			targetCnt = target1.length + target2.length + target3.length + target4.length;
+			if(targetCnt < 1){
+				mcxDialog.alert("적용대상을 설정해주세요.");
+				return false;
+			}
 		}
 
 		return true;
@@ -3144,11 +3146,17 @@
 			$("#CouponForm .goodsTrArea").hide();
 			$("#CouponForm .exceptArea").hide();
 		}else{ //개별적용일때
-			$("#CouponForm .supplyTrArea").show();
-			$("#CouponForm .brandTrArea").show();
-			$("#CouponForm .categoryTrArea").show();
-			$("#CouponForm .goodsTrArea").show();
-			$("#CouponForm .exceptArea").show();
+			var radioValue = $("#CouponForm input[name=rdoCpnType]:checked").val();
+			// 배송비 쿠폰일때
+			if(radioValue == 'G230_30'){
+				$("#CouponForm .supplyTrArea").show();
+			}else{
+				$("#CouponForm .supplyTrArea").show();
+				$("#CouponForm .brandTrArea").show();
+				$("#CouponForm .categoryTrArea").show();
+				$("#CouponForm .goodsTrArea").show();
+				$("#CouponForm .exceptArea").show();
+			}
 		}
 	});
 

+ 3 - 15
src/main/webapp/WEB-INF/views/shoplinker/ShoplinkerGoodsSendForm.html

@@ -358,12 +358,13 @@
 
 	/**************** 엑셀업로드 ********************************************************/
 	$('#btnGoodsUpload').on('click', function() {
-
+		console.log(" excel click");
 		var jsonData = JSON.stringify({apiType : "GOODS"});
 		gagajf.ajaxJsonSubmit('/shoplinker/check/api_runable', jsonData, function(result) {
 
 			// 현재실행중인건 없음.
 			if( 0 == result.runCnt){
+				console.log(" excel pupup");
 				cfnExcelUploadPopup('shoplinkerUploadGoods', 'shoplinkerUploadGoods');
 
 			}else{
@@ -374,6 +375,7 @@
 
 	var shoplinkerUploadGoods = function(result){
 
+		console.log(" excel post !!! ");
 		var actionUrl = "/shoplinker/goods/send/excelupload/register";
 		let params = {};
 		params.procJob = result.procJob;
@@ -404,20 +406,6 @@
 		var jsonData = JSON.stringify(data);
 		gagajf.ajaxJsonSubmit('/shoplinker/apiTest2', jsonData, null);
 	}
-
-	// 테스트- 엑셀업로드2
-	var fnGoodsExcelDownLoad = function(flag){
-		cfnExcelUploadPopup('shoplinkerSearchGoods', 'shoplinkerSearchGoods');
-	};
-
-	var shoplinkerSearchGoods = function(result){
-
-		var data = {procJob : result.procJob
-					,excelFileNm : result.excelFileNm
-					};
-		var jsonData = JSON.stringify(data);
-		gagajf.ajaxJsonSubmit('/shoplinker/goods/excel/list', jsonData, null);
-	}
 	/**************** 테스트용 // *****************************************************/
 
 

+ 1 - 1
src/main/webapp/WEB-INF/views/shoplinker/ShoplinkerOrderForm.html

@@ -29,7 +29,7 @@
 
 			<div class="panelStyle">
 				<div class="panelTitle">
-					<h3><i class="fa fa-info-circle"></i>[배치주기] 평일: 5시~15시 한시간 단위 | (월) 5시: 전주 금요일 15 ~ 금일 5시 / (화~금) 5시: 전날 15 ~ 금일 5시 //T0</h3>
+					<h3><i class="fa fa-info-circle"></i>[배치주기] 평일: 5시~15시 한시간 단위 | (월) 5시: 전주 금요일 15 ~ 금일 5시 / (화~금) 5시: 전날 15 ~ 금일 5시 -T1</h3>
 					<span class="panelControl">
 						<i class="fa fa-chevron-up"></i>
 					</span>