Ver código fonte

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

tsit14 4 anos atrás
pai
commit
c166245b65
29 arquivos alterados com 2804 adições e 978 exclusões
  1. 18 0
      src/main/java/com/style24/admin/biz/dao/TsaDisplayDao.java
  2. 0 327
      src/main/java/com/style24/admin/biz/dao/TsaOcmDao.java
  3. 176 3
      src/main/java/com/style24/admin/biz/dao/TsaShoplinkerDao.java
  4. 29 8
      src/main/java/com/style24/admin/biz/service/TsaDisplayService.java
  5. 0 11
      src/main/java/com/style24/admin/biz/service/TsaOcmService.java
  6. 12 8
      src/main/java/com/style24/admin/biz/service/TsaOrderChangeService.java
  7. 928 9
      src/main/java/com/style24/admin/biz/service/TsaShoplinkerService.java
  8. 42 11
      src/main/java/com/style24/admin/biz/web/TsaDisplayController.java
  9. 2 0
      src/main/java/com/style24/admin/biz/web/TsaOrderChangeController.java
  10. 219 216
      src/main/java/com/style24/admin/biz/web/TsaShoplinkerController.java
  11. 1 0
      src/main/java/com/style24/persistence/domain/ReinboundInform.java
  12. 24 0
      src/main/java/com/style24/persistence/domain/SearchKeyword.java
  13. 34 0
      src/main/java/com/style24/persistence/mybatis/shop/TsaDsiplay.xml
  14. 24 27
      src/main/java/com/style24/persistence/mybatis/shop/TsaGoods.xml
  15. 557 28
      src/main/java/com/style24/persistence/mybatis/shop/TsaShoplinker.xml
  16. 1 1
      src/main/webapp/WEB-INF/views/customer/EmailPopupForm.html
  17. 300 0
      src/main/webapp/WEB-INF/views/display/SearchKeywordForm.html
  18. 0 1
      src/main/webapp/WEB-INF/views/goods/GoodsEpSkipForm.html
  19. 1 1
      src/main/webapp/WEB-INF/views/goods/GoodsEpSkipPopupForm.html
  20. 5 12
      src/main/webapp/WEB-INF/views/goods/GoodsReinboundInformForm.html
  21. 1 2
      src/main/webapp/WEB-INF/views/goods/GoodsTitleReserveForm.html
  22. 1 1
      src/main/webapp/WEB-INF/views/marketing/MorebetterPopupForm.html
  23. 288 287
      src/main/webapp/WEB-INF/views/marketing/ShotDeliveryForm.html
  24. 15 4
      src/main/webapp/WEB-INF/views/ocm/ExtmallOrderRegisterForm.html
  25. 30 3
      src/main/webapp/WEB-INF/views/shoplinker/ShoplinkerGoodsSendForm.html
  26. 10 1
      src/main/webapp/WEB-INF/views/shoplinker/ShoplinkerInvoiceSendForm.html
  27. 12 12
      src/main/webapp/WEB-INF/views/shoplinker/ShoplinkerOrderDetailForm.html
  28. 36 5
      src/main/webapp/WEB-INF/views/shoplinker/ShoplinkerOrderForm.html
  29. 38 0
      src/main/webapp/WEB-INF/views/shoplinker/ShoplinkerStockForm.html

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

@@ -379,4 +379,22 @@ public interface TsaDisplayDao {
 	 * @since 2021. 6. 9
 	 */
 	Collection<Goods> getContentsForGoodsList(Contents contents);
+
+	/**
+	 * 검색키워드 등록
+	 *
+	 * @param searchKeyword
+	 * @author bin2107
+	 * @since 2021. 7. 1
+	 */
+	void createSearchKeyword(SearchKeyword searchKeyword);
+
+	/**
+	 * 검색키워드 수정
+	 *
+	 * @param searchKeyword
+	 * @author bin2107
+	 * @since 2021. 7. 1
+	 */
+	void updateSearchKeyword(SearchKeyword searchKeyword);
 }

+ 0 - 327
src/main/java/com/style24/admin/biz/dao/TsaOcmDao.java

@@ -5,11 +5,8 @@ import java.util.Collection;
 import com.style24.core.support.annotation.ShopDs;
 import com.style24.persistence.domain.Extmall;
 import com.style24.persistence.domain.ExtmallNoti;
-import com.style24.persistence.domain.ExtmallOrder;
 import com.style24.persistence.domain.ExtmallOrigin;
 import com.style24.persistence.domain.ExtmallPriceSync;
-import com.style24.persistence.domain.GoodsStock;
-import com.style24.persistence.domain.Payment;
 
 /**
  * 영업망관리 Dao
@@ -72,328 +69,4 @@ public interface TsaOcmDao {
 	 */
 	void saveExtmallPriceSync(ExtmallPriceSync extmallPriceSync);
 
-
-
-
-	/**
-	 * 제휴몰주문등록 - 주문업로드 그룹별 목록
-	 *
-	 * @param extmallOrder
-	 * @return
-	 * @author jmh
-	 * @since 2021. 5. 31
-	 */
-	Collection<ExtmallOrder> getExtmallMasterOrderList(ExtmallOrder extmallOrder);
-
-	/**
-	 * 제휴몰주문등록 - 주문업로드 전체 목록
-	 *
-	 * @param extmallOrder
-	 * @return
-	 * @author jmh
-	 * @since 2021. 5. 31
-	 */
-	Collection<ExtmallOrder> getExtmallOrderList(ExtmallOrder extmallOrder);
-
-	/**
-	 * 제휴몰주문등록 - 주문등록
-	 *
-	 * @param extmallOrder
-	 * @return
-	 * @author jmh
-	 * @since 2021. 5. 31
-	 */
-	void insertExtmallOrder(ExtmallOrder extmallOrder);
-
-	/**
-	 * 제휴몰주문등록 - 주문등록 상태값 업데이트
-	 * @param extmallOrder
-	 * @return
-	 * @author xodud1202
-	 * @since 2021. 01. 28
-	 */
-	void updateExtmallOrder(ExtmallOrder extmallOrder);
-
-	/**
-	 * 제휴몰주문등록 - 주문등록체크정보
-	 * @param extmallOrder
-	 * @return
-	 * @author jmh
-	 * @since 2021. 5. 31
-	 */
-	ExtmallOrder getExtmallOrderInfo(ExtmallOrder extmallOrder);
-
-
-	// ------------------------- 주문등록 소스 -------------------------------------------//
-	// ------------------------- 주문등록 소스 -------------------------------------------//
-	/**
-	 * 1. 주문기본정보 등록
-	 *
-	 * @param extmallOrder - 주문 정보
-	 * @return
-	 * @author jmh
-	 * @since 2021. 03. 09
-	 */
-	int createOrder(ExtmallOrder extmallOrder);
-
-	/**
-	 * 2. 주문배송지정보 등록
-	 *
-	 * @param extmallOrder - 주문 정보
-	 * @return
-	 * @author jmh
-	 * @since 2021. 03. 09
-	 */
-	int createDeliveryAddr(ExtmallOrder extmallOrder);
-
-	/**
-	 * 3. 주문배송비정보등록 등록
-	 *
-	 * @param extmallOrder - 주문 정보
-	 * @return
-	 * @author jmh
-	 * @since 2021. 03. 09
-	 */
-	int createDeliveryFee(ExtmallOrder extmallOrder);
-
-	/**
-	 * 4. 주문상세정보등록 등록
-	 *
-	 * @param extmallOrder - 주문 정보
-	 * @return
-	 * @author jmh
-	 * @since 2021. 03. 09
-	 */
-	int createOrderDetail(ExtmallOrder extmallOrder);
-
-	/**
-	 * 4-2 주문상세 이력 등록
-	 *
-	 * @param extmallOrder
-	 * @return
-	 * @author jmh
-	 * @since 2020. 11. 30
-	 */
-	int createOrderDetailHst(ExtmallOrder extmallOrder);
-
-	/**
-	 * 5. 주문상세단품정보등록 등록
-	 *
-	 * @param extmallOrder - 주문 정보
-	 * @return
-	 * @author jmh
-	 * @since 2021. 03. 09
-	 */
-	Collection<ExtmallOrder> getOrderDetailItem(ExtmallOrder extmallOrder);
-
-	/**
-	 * 6. 주문상세단품정보등록 등록
-	 *
-	 * @param extmallOrder - 주문 정보
-	 * @return
-	 * @author jmh
-	 * @since 2021. 03. 09
-	 */
-	int createOrderDetailItem(ExtmallOrder extmallOrder);
-
-	/**
-	 * 7. 주문상세단품이력정보등록 등록
-	 *
-	 * @param extmallOrder - 주문 정보
-	 * @return
-	 * @author jmh
-	 * @since 2021. 03. 09
-	 */
-	int createOrderDetailItemHst(ExtmallOrder extmallOrder);
-
-	/**
-	 * 8. 주문사은품 마스터 정보 등록
-	 *
-	 * @param extmallOrder - 주문 정보
-	 * @return
-	 * @author jmh
-	 * @since 2021. 03. 09
-	 */
-	int createOrdFreegift(ExtmallOrder extmallOrder);
-
-	/**
-	 * 9. 주문사은품 상품 정보 등록
-	 *
-	 * @param extmallOrder - 주문 정보
-	 * @return
-	 * @author jmh
-	 * @since 2021. 03. 09
-	 */
-	int createOrdFreegiftVal(ExtmallOrder extmallOrder);
-
-	/**
-	 * 10. 주문사은품 주문상세 정보 등록
-	 * @param extmallOrder - 주문 정보
-	 * @return
-	 * @author jmh
-	 * @since 2021. 03. 09
-	 */
-	int createOrdFreegiftDtl(ExtmallOrder extmallOrder);
-
-	/**
-	 * 11. PAYMENT INSERT
-	 * @param param
-	 * @return
-	 */
-	int insertPayment(Payment param);
-
-	/**
-	 * 12. 재고정보등록
-	 * @param extmallOrder - 주문 정보
-	 * @return
-	 * @author jmh
-	 * @since 2021. 03. 09
-	 */
-	int createSellQty(ExtmallOrder extmallOrder);
-
-	/**
-	 * 13. 사은품 남은수량 업데이트
-	 * @param extmallOrder - 주문 정보
-	 * @return
-	 * @author jmh
-	 * @since 2021. 04. 13
-	 */
-	int updateFreegiftValLeftQty(ExtmallOrder extmallOrder);
-
-	/**
-	 * 상품 재고 조회
-	 * @param goodsStock
-	 * @return
-	 * @author xodud1202
-	 * @since 2021. 01. 28
-	 */
-	GoodsStock getGoodsStockInfo(GoodsStock goodsStock);
-
-	/**
-	 * 사은품 : 1차조건 적용된 사음품 정보, 상품 금액 조회
-	 *
-	 * @param Order
-	 * @author jsh77b
-	 * @since 2021. 02. 02
-	 */
-	Collection<ExtmallOrder> getFreeGiftGoodsApplyAmt(ExtmallOrder extmallOrder);
-
-	/**
-	 * 사은품 : 2차조건 적용된 사은품상품금액 구간정보조회
-	 *
-	 * @param Order
-	 * @author jsh77b
-	 * @since 2021. 02. 02
-	 */
-	Collection<ExtmallOrder> getFreeGiftGoodsApplySection(ExtmallOrder extmallOrder);
-
-	/**
-	 * 사은품 : 3차조건 적용된 구간정보의 사은품정보조회
-	 *
-	 * @param Order
-	 * @author jsh77b
-	 * @since 2021. 02. 02
-	 */
-	Collection<ExtmallOrder> getFreeGiftGoodsApplyVal(ExtmallOrder extmallOrder);
-	// ------------------------- 주문등록 소스 끝 -------------------------------------------//
-	// ------------------------- 주문등록 소스 끝 -------------------------------------------//
-
-
-
-
-
-
-
-	/**
-	 * 제휴몰주문 임시 테이블 삭제
-	 *
-	 * @param userNo - 사용자아이디
-	 * @return int
-	 * @author jmh
-	 * @since 2021. 06. 17
-	 */
-	int deleteExtmallOrderUploadTmp(int userNo);
-
-	/**
-	 * 외부몰주문등록 테이블 실패목록 데이터 삭제
-	 *
-	 * @param userNo - 사용자아이디
-	 * @return int
-	 * @author jmh
-	 * @since 2021. 06. 17
-	 */
-	int deleteExtmallOrderUploadFail(int userNo);
-
-	/**
-	 * 제휴몰주문등록 (TB_EXTMALL_ORDER_UPLOAD_TMP)
-	 *
-	 * @param extmallOrderUpload - 제휴몰주문업로드정보
-	 * @return int
-	 * @author jmh
-	 * @since 2021. 06. 17
-	 */
-	int createExtmallOrderUploadTmp(ExtmallOrder extmallOrder);
-
-	/**
-	 * 제휴몰주문등록 업로드 후 목록
-	 *
-	 * @param extmallOrder - 제휴몰주문업로드정보
-	 * @return Collection<ExtmallOrder>
-	 * @author jmh
-	 * @since 2021. 06. 17
-	 */
-	Collection<ExtmallOrder> getExtmallOrderUploadTmpList(ExtmallOrder extmallOrder);
-
-	/**
-	 * 제휴몰주문업로드 생성 - 제휴몰 벤더ID 가져오기
-	 *
-	 * @param regId -
-	 * @return String
-	 * @author jmh
-	 * @since 2021. 06. 17
-	 */
-	String getVendorId(String regId);
-
-	/**
-	 * 제휴몰주문등록 업로드 후 주문업로드 생성
-	 *
-	 * @param extmallOrderUpload - 제휴몰주문업로드정보
-	 * @return int
-	 * @author jmh
-	 * @since 2021. 06. 17
-	 */
-	int createExtmallOrderUploadSecond(ExtmallOrder extmallOrder);
-
-	/**
-	 * 제휴몰주문등록 주문업로드 후 목록
-	 *
-	 * @param extmallOrder - 제휴몰주문업로드정보
-	 * @return Collection<ExtmallOrder>
-	 * @author jmh
-	 * @since 2021. 06. 17
-	 */
-	Collection<ExtmallOrder> getExtmallOrderUploadSecondList(ExtmallOrder extmallOrder);
-
-	/**
-	 * 제휴몰 주문 업로드 목록
-	 *
-	 * @param extmallOrder - 외부몰주문업로드 정보
-	 * @return Collection<ExtmallOrder>
-	 * @author jmh
-	 * @since 2021. 06. 17
-	 */
-	Collection<ExtmallOrder> getExtmallOrderUploadList(ExtmallOrder extmallOrder);
-
-	/**
-	 * 제휴몰 주문 업로드 결과정보
-	 *
-	 * @param extmallOrder - 외부몰주문업로드 정보
-	 * @return Collection<ExtmallOrder>
-	 * @author jmh
-	 * @since 2021. 06. 17
-	 */
-	ExtmallOrder getExtmallOrderUploadResultInfo(ExtmallOrder extmallOrder);
-
-
-	void insertTestNotiInfo(ExtmallOrder extmallOrder);
 }

+ 176 - 3
src/main/java/com/style24/admin/biz/dao/TsaShoplinkerDao.java

@@ -4,6 +4,8 @@ import java.util.Collection;
 
 import com.gagaframework.web.parameter.GagaMap;
 import com.style24.core.support.annotation.ShopDs;
+import com.style24.persistence.domain.ExtmallOrder;
+import com.style24.persistence.domain.ShoplinkerGoods;
 import com.style24.persistence.domain.ShoplinkerInvoice;
 import com.style24.persistence.domain.ShoplinkerOrder;
 import com.style24.persistence.domain.ShoplinkerSearch;
@@ -17,6 +19,86 @@ import com.style24.persistence.domain.ShoplinkerSearch;
 @ShopDs
 public interface TsaShoplinkerDao {
 
+	/**
+	 * 상품등록-단품 목록 조회
+	 *
+	 * @param shoplinkerSearch
+	 * @return
+	 * @author jmh
+	 * @since 2021. 5. 20
+	 */
+	Collection<ShoplinkerGoods> getOptionList(ShoplinkerGoods shoplinkerSearch);
+
+	/**
+	 * 상품등록-상품 상세
+	 *
+	 * @param shoplinkerSearch
+	 * @return
+	 * @author jmh
+	 * @since 2021. 5. 20
+	 */
+	ShoplinkerGoods getGoods(ShoplinkerGoods shoplinkerSearch);
+
+	/**
+	 * 상품등록-상품 이미지 조회
+	 *
+	 * @param shoplinkerSearch
+	 * @return
+	 * @author jmh
+	 * @since 2021. 5. 20
+	 */
+	Collection<ShoplinkerGoods> getGoodsImageList(ShoplinkerGoods shoplinkerSearch);
+
+	/**
+	 * 상품등록-상품 사이즈 조회
+	 *
+	 * @param shoplinkerSearch
+	 * @return
+	 * @author jmh
+	 * @since 2021. 5. 20
+	 */
+	Collection<ShoplinkerGoods> getGoodsSizeList(ShoplinkerGoods shoplinkerSearch);
+
+	/**
+	 * 상품등록-고시정보
+	 *
+	 * @param shoplinkerSearch
+	 * @return
+	 * @author jmh
+	 * @since 2021. 5. 20
+	 */
+	Collection<ShoplinkerGoods> getGoodsNotiList(ShoplinkerGoods shoplinkerSearch);
+
+	/**
+	 * 상품등록-인증정보
+	 *
+	 * @param shoplinkerSearch
+	 * @return
+	 * @author jmh
+	 * @since 2021. 5. 20
+	 */
+	ShoplinkerGoods getCert(ShoplinkerGoods shoplinkerSearch);
+
+	/**
+	 * 상품등록-상품 목록 건수
+	 *
+	 * @param shoplinkerSearch
+	 * @return
+	 * @author jmh
+	 * @since 2021. 5. 20
+	 */
+	int getGoodsSendListCount(ShoplinkerSearch shoplinkerSearch);
+
+	/**
+	 * 상품등록-상품 목록
+	 *
+	 * @param shoplinkerSearch
+	 * @return
+	 * @author jmh
+	 * @since 2021. 5. 20
+	 */
+	Collection<ShoplinkerGoods> getGoodsSendList(ShoplinkerSearch shoplinkerSearch);
+
 	/**
 	 * 상품등록-상품 목록 엑셀
 	 *
@@ -27,6 +109,36 @@ public interface TsaShoplinkerDao {
 	 */
 	Collection<GagaMap> getGoodsSendExcelList(ShoplinkerSearch shoplinkerSearch);
 
+	/**
+	 * 재고-단품 등록
+	 *
+	 * @param shoplinkerGoods
+	 * @return
+	 * @author jmh
+	 * @since 2021. 5. 20
+	 */
+	void insertStockOption(ShoplinkerGoods shoplinkerGoods);
+
+	/**
+	 * 재고전송-목록 건수
+	 *
+	 * @param shoplinkerSearch
+	 * @return
+	 * @author jmh
+	 * @since 2021. 5. 20
+	 */
+	int getStockListCount(ShoplinkerSearch shoplinkerSearch);
+
+	/**
+	 * 재고전송-목록
+	 *
+	 * @param shoplinkerSearch
+	 * @return
+	 * @author jmh
+	 * @since 2021. 5. 20
+	 */
+	Collection<ShoplinkerGoods> getStockList(ShoplinkerSearch shoplinkerSearch);
+
 	/**
 	 * 재고- 목록 엑셀
 	 *
@@ -37,20 +149,81 @@ public interface TsaShoplinkerDao {
 	 */
 	Collection<GagaMap> getStockExcelList(ShoplinkerSearch shoplinkerSearch);
 
+
 	/**
-	 * 주문- 목록 엑셀
+	 * 샵링커주문수집-목록 건수
 	 *
-	 * @param shoplinkerSearch
+	 * @param shoplinkerOrder
+	 * @return
+	 * @author jmh
+	 * @since 2021. 5. 20
+	 */
+	int getShoplinkerOrderListCount(ShoplinkerOrder shoplinkerOrder);
+
+	/**
+	 * 샵링커주문수집-목록
+	 *
+	 * @param shoplinkerOrder
+	 * @return
+	 * @author jmh
+	 * @since 2021. 5. 20
+	 */
+	Collection<ShoplinkerOrder> getShoplinkerOrderList(ShoplinkerOrder shoplinkerOrder);
+
+	/**
+	 * 샵링커주문수집-상세
+	 *
+	 * @param shoplinkerOrder
+	 * @return
+	 * @author jmh
+	 * @since 2021. 5. 20
+	 */
+	ShoplinkerOrder getShoplinkerOrderInfo(ShoplinkerOrder shoplinkerOrder);
+
+	/**
+	 * 샵링커주문수집-제휴몰 주문등록 상세
+	 *
+	 * @param extmallOrder
+	 * @return
+	 * @author jmh
+	 * @since 2021. 5. 31
+	 */
+	ExtmallOrder getExtmallOrderInfo(String extmallOrder);
+
+	/**
+	 * 샵링커주문수집- 엑셀
+	 *
+	 * @param shoplinkerOrder
 	 * @return
 	 * @author jmh
 	 * @since 2021. 5. 20
 	 */
 	Collection<GagaMap> getOrderExcelList(ShoplinkerOrder shoplinkerOrder);
 
+	/**
+	 * 송장전송-전송 목록 건수
+	 *
+	 * @param shoplinkerInvoice
+	 * @return
+	 * @author jmh
+	 * @since 2021. 5. 20
+	 */
+	int getSendInvoiceListCount(ShoplinkerInvoice shoplinkerInvoice);
+
+	/**
+	 * 송장전송-전송 목록
+	 *
+	 * @param shoplinkerInvoice
+	 * @return
+	 * @author jmh
+	 * @since 2021. 5. 20
+	 */
+	Collection<ShoplinkerInvoice> getSendInvoiceList(ShoplinkerInvoice shoplinkerInvoice);
+
 	/**
 	 * 송장- 목록 엑셀
 	 *
-	 * @param shoplinkerSearch
+	 * @param shoplinkerInvoice
 	 * @return
 	 * @author jmh
 	 * @since 2021. 5. 20

+ 29 - 8
src/main/java/com/style24/admin/biz/service/TsaDisplayService.java

@@ -4,6 +4,15 @@ import java.io.File;
 import java.io.IOException;
 import java.util.Collection;
 
+import com.style24.persistence.domain.Category;
+import com.style24.persistence.domain.CategoryGoods;
+import com.style24.persistence.domain.Contents;
+import com.style24.persistence.domain.GnbTab;
+import com.style24.persistence.domain.Goods;
+import com.style24.persistence.domain.GoodsCategory;
+import com.style24.persistence.domain.ItemkindCategory;
+import com.style24.persistence.domain.MainDisplay;
+import com.style24.persistence.domain.SearchKeyword;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.cache.annotation.CacheEvict;
 import org.springframework.core.env.Environment;
@@ -13,14 +22,6 @@ import org.springframework.util.StringUtils;
 
 import com.style24.admin.biz.dao.TsaDisplayDao;
 import com.style24.admin.support.security.session.TsaSession;
-import com.style24.persistence.domain.Category;
-import com.style24.persistence.domain.CategoryGoods;
-import com.style24.persistence.domain.Contents;
-import com.style24.persistence.domain.GnbTab;
-import com.style24.persistence.domain.Goods;
-import com.style24.persistence.domain.GoodsCategory;
-import com.style24.persistence.domain.ItemkindCategory;
-import com.style24.persistence.domain.MainDisplay;
 
 import lombok.extern.slf4j.Slf4j;
 
@@ -757,4 +758,24 @@ public class TsaDisplayService {
 	public Category getCategory4srch(Category category){
 		return displayDao.getCategory4srch(category);
 	}
+
+	/**
+	 * 검색 키워드 저장
+	 * @param searchKeyword
+	 * @return
+	 * @author bin2107
+	 * @since 2021. 7. 1
+	 */
+	@Transactional("shopTxnManager")
+	public void saveSearchKeyword(SearchKeyword searchKeyword) {
+		searchKeyword.setRegNo(TsaSession.getInfo().getUserNo());
+		searchKeyword.setUpdNo(TsaSession.getInfo().getUserNo());
+
+//		if(searchKeyword.getKeywordSq() == null || searchKeyword.getKeywordSq() == 0){
+//			displayDao.createSearchKeyword(searchKeyword);
+//		}else{
+//			displayDao.updateSearchKeyword(searchKeyword);
+//		}
+		displayDao.createSearchKeyword(searchKeyword);
+	}
 }

+ 0 - 11
src/main/java/com/style24/admin/biz/service/TsaOcmService.java

@@ -3,14 +3,11 @@ package com.style24.admin.biz.service;
 import java.util.Collection;
 
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.core.env.Environment;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
-import com.fasterxml.jackson.databind.ObjectMapper;
 import com.style24.admin.biz.dao.TsaOcmDao;
 import com.style24.admin.support.security.session.TsaSession;
-import com.style24.core.biz.service.TscKakaotalkService;
 import com.style24.core.support.message.TscMessageByLocale;
 import com.style24.persistence.domain.Extmall;
 import com.style24.persistence.domain.ExtmallNoti;
@@ -32,17 +29,9 @@ public class TsaOcmService {
     @Autowired
     private TscMessageByLocale message;
 
-    @Autowired
-	private TscKakaotalkService kakaotalkService;
-
-    @Autowired
-	private Environment env;
-
     @Autowired
     private TsaOcmDao ocmDao;
 
-    @Autowired
-	private ObjectMapper mapper;
 
     /**
      * 제휴몰 목록

+ 12 - 8
src/main/java/com/style24/admin/biz/service/TsaOrderChangeService.java

@@ -12,6 +12,7 @@ import com.gagaframework.web.parameter.GagaMap;
 import com.style24.core.biz.service.TscOrderChangeService;
 import com.style24.core.biz.service.TscOrderRefundService;
 import com.style24.core.biz.service.TscWmsService;
+import com.style24.core.support.env.TscConstants;
 import com.style24.core.support.message.TscMessageByLocale;
 import com.style24.persistence.domain.Order;
 import com.style24.persistence.domain.OrderChange;
@@ -82,12 +83,8 @@ public class TsaOrderChangeService {
 	 */
 	@Transactional("shopTxnManager")
 	public void returnToReturn(OrderChange orderChange) {
-		int userNo = orderChange.getUserNo();
-		orderChange.setRegNo(userNo);
-		orderChange.setUpdNo(userNo);
-
 		// 1. 반품 철회 처리
-		this.returnCancel(orderChange);
+		GagaMap result = this.returnCancel(orderChange);
 
 		// 2. WMS 회수지시 여부 체크 후 회시지시대상여부 컬럼 정보 설정
 		orderChange.setWdTargetYn(this.getWdTargetYnInfo(orderChange));
@@ -102,6 +99,9 @@ public class TsaOrderChangeService {
 		GagaMap map = this.getReturnInfo(orderChange);
 		
 		// 6. 반품 접수 처리
+		map.setString("ordChgGb", orderChange.getOrdChgGb());
+		map.setInt("orgOrdChgSq", orderChange.getOrdChgSq());
+		map.setInt("orgAddPayCost", result.getInt("orgAddPayCost"));
 		coreOrderChangeService.returnRequest(map);
 	}
 
@@ -141,12 +141,16 @@ public class TsaOrderChangeService {
 	 * @author card007
 	 * @since 2021. 06. 21
 	 */
-	private void returnCancel(OrderChange orderChange) {
+	private GagaMap returnCancel(OrderChange orderChange) {
 		GagaMap map = new GagaMap();
 		map.setInt("ordChgSq", orderChange.getOrdChgSq());
 		map.setInt("ordNo", orderChange.getOrdNo());
+		
+		if (TscConstants.ChangeGb.RETURN_TO_RETURN.value().equals(orderChange.getOrdChgGb())) {
+			map.setString("ordChgGb", orderChange.getOrdChgGb());
+		}
 
-		coreOrderChangeService.rtnReqCancel(map, orderChange.getUserNo());
+		return coreOrderChangeService.rtnReqCancel(map, orderChange.getUserNo());
 	}
 
 	/**
@@ -161,7 +165,7 @@ public class TsaOrderChangeService {
 	}
 
 	/**
-	 * 회지시대상여부 컬럼 정보 설정
+	 * 회지시대상여부 컬럼 정보 설정
 	 * 
 	 * @param OrderChange
 	 * @return String

Diferenças do arquivo suprimidas por serem muito extensas
+ 928 - 9
src/main/java/com/style24/admin/biz/service/TsaShoplinkerService.java


+ 42 - 11
src/main/java/com/style24/admin/biz/web/TsaDisplayController.java

@@ -3,6 +3,18 @@ package com.style24.admin.biz.web;
 import java.util.Collection;
 
 import com.fasterxml.jackson.databind.ObjectMapper;
+import com.style24.persistence.domain.Brand;
+import com.style24.persistence.domain.Category;
+import com.style24.persistence.domain.CategoryGoods;
+import com.style24.persistence.domain.Contents;
+import com.style24.persistence.domain.GnbTab;
+import com.style24.persistence.domain.GoodsCategory;
+import com.style24.persistence.domain.ItemkindCategory;
+import com.style24.persistence.domain.Lookbook;
+import com.style24.persistence.domain.LookbookGoods;
+import com.style24.persistence.domain.MainDisplay;
+import com.style24.persistence.domain.Popup;
+import com.style24.persistence.domain.SearchKeyword;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
@@ -24,17 +36,6 @@ import com.style24.core.biz.service.TscLookbookService;
 import com.style24.core.biz.service.TscPopupService;
 import com.style24.core.support.message.TscMessageByLocale;
 import com.style24.persistence.TscPageRequest;
-import com.style24.persistence.domain.Brand;
-import com.style24.persistence.domain.Category;
-import com.style24.persistence.domain.CategoryGoods;
-import com.style24.persistence.domain.Contents;
-import com.style24.persistence.domain.GnbTab;
-import com.style24.persistence.domain.GoodsCategory;
-import com.style24.persistence.domain.ItemkindCategory;
-import com.style24.persistence.domain.Lookbook;
-import com.style24.persistence.domain.LookbookGoods;
-import com.style24.persistence.domain.MainDisplay;
-import com.style24.persistence.domain.Popup;
 
 import lombok.extern.slf4j.Slf4j;
 
@@ -993,4 +994,34 @@ public class TsaDisplayController extends TsaBaseController {
 		return mav;
 	}
 
+	/**
+	 * 검색키워드 관리 화면
+	 * @return
+	 * @author bin2107
+	 * @since 2021. 7. 1
+	 */
+	@GetMapping("/keyword/form")
+	public ModelAndView searchKeywordForm() {
+		ModelAndView mav = new ModelAndView();
+
+		mav.setViewName("display/SearchKeywordForm");
+
+		return mav;
+	}
+
+	/**
+	 * 검색 키워드 저장/등록
+	 *
+	 * @param adKeyword
+	 * @return
+	 * @author eskim
+	 * @since 2020. 12. 15
+	 */
+	@PostMapping("/search/keyword/save")
+	@ResponseBody
+	public GagaResponse saveSearchKeyword(@RequestBody SearchKeyword searchKeyword) {
+		displayService.saveSearchKeyword(searchKeyword);
+		return super.ok(message.getMessage("SUCC_0001"));
+	}
+
 }

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

@@ -903,6 +903,7 @@ public class TsaOrderChangeController extends TsaBaseController {
 		orderChange.setUserNo(userNo);
 		orderChange.setRegNo(userNo);
 		orderChange.setUpdNo(userNo);
+		orderChange.setOrdChgGb(TscConstants.ChangeGb.RETURN_TO_RETURN.value());
 
 		orderChangeService.returnToReturn(orderChange);
 
@@ -924,6 +925,7 @@ public class TsaOrderChangeController extends TsaBaseController {
 		orderChange.setUserNo(userNo);
 		orderChange.setRegNo(userNo);
 		orderChange.setUpdNo(userNo);
+		orderChange.setOrdChgGb(TscConstants.ChangeGb.EXCHANGE_TO_EXCHANGE.value());
 
 		orderChangeService.exchangeToExchange(orderChange);
 

+ 219 - 216
src/main/java/com/style24/admin/biz/web/TsaShoplinkerController.java

@@ -6,6 +6,7 @@ import java.net.URLEncoder;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.HashMap;
+import java.util.List;
 
 import javax.servlet.http.HttpServletRequest;
 
@@ -69,7 +70,7 @@ public class TsaShoplinkerController extends TsaBaseController {
 	private Environment env;
 
 	@Autowired
-	private TscShoplinkerService shoplinkerService;
+	private TscShoplinkerService tscShoplinkerService;
 
 	@Autowired
 	private TsaShoplinkerService admShoplinkerService;
@@ -86,7 +87,7 @@ public class TsaShoplinkerController extends TsaBaseController {
 	@Autowired
 	private ObjectMapper mapper;
 
-	private static final int EXCEL_ROW_COUNT = 1000;
+	private static final int EXCEL_ROW_COUNT = 500;
 
 
 
@@ -109,7 +110,7 @@ public class TsaShoplinkerController extends TsaBaseController {
 	/**
 	 * 샵링커상품등록-전송목록조회
 	 *
-	 * @return
+	 * @return shoplinkerSearch
 	 * @author jmh
 	 * @since 2021. 5. 20
 	 */
@@ -136,10 +137,10 @@ public class TsaShoplinkerController extends TsaBaseController {
 
 		shoplinkerSearch.setRegNo(TsaSession.getInfo().getUserNo()); // 엑셀조회시 로그인 사용자의 엑셀 상품조회시 사용
 		shoplinkerSearch.setPageable(new TscPageRequest(shoplinkerSearch.getPageNo() - 1, shoplinkerSearch.getPageSize()));
-		shoplinkerSearch.getPageable().setTotalCount(shoplinkerService.getGoodsSendListCount(shoplinkerSearch));
+		shoplinkerSearch.getPageable().setTotalCount(admShoplinkerService.getGoodsSendListCount(shoplinkerSearch));
 
 		result.set("pageing", shoplinkerSearch);
-		result.set("goodsList", shoplinkerService.getGoodsSendList(shoplinkerSearch));
+		result.set("goodsList", admShoplinkerService.getGoodsSendList(shoplinkerSearch));
 
 		return result;
 	}
@@ -147,7 +148,7 @@ public class TsaShoplinkerController extends TsaBaseController {
 	/**
 	 * 샵링커상품등록-상품등록엑셀업로드
 	 *
-	 * @param shoplinkerGoods
+	 * @param paramMap
 	 * @return GagaMap
 	 * @throws Exception
 	 * @author jmh
@@ -168,14 +169,14 @@ public class TsaShoplinkerController extends TsaBaseController {
 		// API 호출 중인건수 있는지 확인
 		ShoplinkerSearch slkSearch = new ShoplinkerSearch();
 		slkSearch.setApiType("GOODS");
-		ShoplinkerSearch runMap = shoplinkerService.getCallRunableInfo(slkSearch);
+		ShoplinkerSearch runMap = tscShoplinkerService.getCallRunableInfo(slkSearch);
 
 		if( runMap.getRunCnt() < 1 ) {
 			try {
 				// 1. API 호출 이력 저장 시작(실행중 재호출 금지하기 위함)
 				slkSearch.setSid(GagaDateUtil.getTodayDateTime());
 				slkSearch.setRegNo(TsaSession.getInfo().getUserNo());
-				shoplinkerService.saveCallApiRunable(slkSearch);
+				tscShoplinkerService.saveCallApiRunable(slkSearch);
 
 				// 2. 엑셀데이터 확인 및 xml 관련 위치 확인
 				String[] goodsNames = {"goodsCd"};
@@ -206,7 +207,7 @@ public class TsaShoplinkerController extends TsaBaseController {
 				// 3. xml 데이터 생성
 				shoplinkerGoods.setCustomerId(env.getProperty("shoplinker.customer_id"));
 				shoplinkerGoods.setRegNo(TsaSession.getInfo().getUserNo());
-				rtnMap = shoplinkerService.createShoplinkerXml(ecxelGoodsList, shoplinkerGoods);
+				rtnMap = admShoplinkerService.createShoplinkerXml(ecxelGoodsList, shoplinkerGoods);
 
 				// 4. 파일 삭제
 				GagaFileUtil.deleteFile(GagaFileUtil.getConcatenationPath(targetPath, shoplinkerGoods.getExcelFileNm()));
@@ -223,9 +224,138 @@ public class TsaShoplinkerController extends TsaBaseController {
 			}finally {
 				// 4. API 호출 이력 저장 종료
 				slkSearch.setRunStat("END");
-				shoplinkerService.saveCallApiRunable(slkSearch);
+				tscShoplinkerService.saveCallApiRunable(slkSearch);
+			}
+		}
+	}
+
+	/**
+	 * 샵링커상품등록- 엑셀다운로드
+	 *
+	 * @param shoplinkerSearch
+	 * @return
+	 * @author jmh
+	 * @since 2021. 06. 29
+	 */
+	@GetMapping("/goods/excel/list")
+	public ResponseEntity<InputStreamResource> downloadGoodsInfoExcelList(HttpServletRequest request, ShoplinkerSearch shoplinkerSearch) throws Exception {
+		String excelfileName = "샵링커_상품_" + GagaDateUtil.getTodayDateTime() + ".xlsx";
+		String excelFilenameWithPath = GagaFileUtil.getConcatenationPath(env.getProperty("download.path"), "excel", excelfileName);
+
+		if (!StringUtils.isBlank(shoplinkerSearch.getBrandList())) {
+			try {
+				String[] arrBrandCd = mapper.readValue(shoplinkerSearch.getBrandList(), String[].class);
+				shoplinkerSearch.setMultiBrand(arrBrandCd);
+			} catch (Exception e) {
+				e.printStackTrace();
+				throw new IllegalStateException("브랜드코드 검색중 오류로 인해 조회되지 않았습니다.");
 			}
 		}
+
+		// multi row 검색관련 처리
+		if (!StringUtils.isBlank(shoplinkerSearch.getCondition())) {
+			shoplinkerSearch.setConditionList(shoplinkerSearch.getCondition().replaceAll("\r", "").trim().split("\n"));
+		}
+
+		shoplinkerSearch.setRegNo(TsaSession.getInfo().getUserNo()); // 엑셀조회시 로그인 사용자의 엑셀 상품조회시 사용
+		shoplinkerSearch.setPageable(new TscPageRequest(shoplinkerSearch.getPageNo() - 1, shoplinkerSearch.getPageSize()));
+		shoplinkerSearch.getPageable().setTotalCount(admShoplinkerService.getGoodsSendListCount(shoplinkerSearch));
+
+		admShoplinkerService.getGoodsSendExcelList(shoplinkerSearch, excelFilenameWithPath);
+
+		return GagaFileUtil.writeFile(request, excelFilenameWithPath);
+	}
+
+
+	/**
+	 * 재고이력-화면
+	 * @return ModelAndView
+	 * @author jmh
+	 * @since 2021. 5. 20
+	 */
+	@GetMapping("/stock/result/form")
+	public ModelAndView stockHistoryForm() {
+		ModelAndView mav = new ModelAndView();
+
+		mav.setViewName("shoplinker/ShoplinkerStockForm");
+
+		return mav;
+	}
+
+	/**
+	 * 재고이력-목록조회
+	 *
+	 * @param shoplinkerSearch
+	 * @return GagaMap
+	 * @author jmh
+	 * @since 2021. 5. 20
+	 */
+	@PostMapping("/stock/result/list")
+	@ResponseBody
+	public GagaMap getStockHistoryList(@RequestBody ShoplinkerSearch shoplinkerSearch) {
+
+		GagaMap result = new GagaMap();
+
+		if (!StringUtils.isBlank(shoplinkerSearch.getBrandList())) {
+			try {
+				String[] arrBrandCd = mapper.readValue(shoplinkerSearch.getBrandList(), String[].class);
+				shoplinkerSearch.setMultiBrand(arrBrandCd);
+			} catch (Exception e) {
+				e.printStackTrace();
+				throw new IllegalStateException("브랜드코드 검색중 오류로 인해 조회되지 않았습니다.");
+			}
+		}
+
+		// multi row 검색관련 처리
+		if (!StringUtils.isBlank(shoplinkerSearch.getCondition())) {
+			shoplinkerSearch.setConditionList(shoplinkerSearch.getCondition().replaceAll("\r", "").trim().split("\n"));
+		}
+
+		shoplinkerSearch.setRegNo(TsaSession.getInfo().getUserNo()); // 엑셀조회시 로그인 사용자의 엑셀 상품조회시 사용
+		shoplinkerSearch.setPageable(new TscPageRequest(shoplinkerSearch.getPageNo() - 1, shoplinkerSearch.getPageSize()));
+		shoplinkerSearch.getPageable().setTotalCount(admShoplinkerService.getStockListCount(shoplinkerSearch));
+
+		result.set("pageing", shoplinkerSearch);
+		result.set("stockList", admShoplinkerService.getStockList(shoplinkerSearch));
+
+		return result;
+	}
+
+	/**
+	 * 재고이력-엑셀다운로드
+	 *
+	 * @param shoplinkerSearch
+	 * @return
+	 * @author jmh
+	 * @since 2021. 06. 29
+	 */
+	@GetMapping("/stock/excel/list")
+	public ResponseEntity<InputStreamResource> downloadStockInfoExcelList(HttpServletRequest request, ShoplinkerSearch shoplinkerSearch) throws Exception {
+		String excelfileName = "샵링커_재고_" + GagaDateUtil.getTodayDateTime() + ".xlsx";
+		String excelFilenameWithPath = GagaFileUtil.getConcatenationPath(env.getProperty("download.path"), "excel", excelfileName);
+
+		if (!StringUtils.isBlank(shoplinkerSearch.getBrandList())) {
+			try {
+				String[] arrBrandCd = mapper.readValue(shoplinkerSearch.getBrandList(), String[].class);
+				shoplinkerSearch.setMultiBrand(arrBrandCd);
+			} catch (Exception e) {
+				e.printStackTrace();
+				throw new IllegalStateException("브랜드코드 검색중 오류로 인해 조회되지 않았습니다.");
+			}
+		}
+
+		// multi row 검색관련 처리
+		if (!StringUtils.isBlank(shoplinkerSearch.getCondition())) {
+			shoplinkerSearch.setConditionList(shoplinkerSearch.getCondition().replaceAll("\r", "").trim().split("\n"));
+		}
+
+		shoplinkerSearch.setRegNo(TsaSession.getInfo().getUserNo()); // 엑셀조회시 로그인 사용자의 엑셀 상품조회시 사용
+		shoplinkerSearch.setPageable(new TscPageRequest(shoplinkerSearch.getPageNo() - 1, shoplinkerSearch.getPageSize()));
+		shoplinkerSearch.getPageable().setTotalCount(admShoplinkerService.getStockListCount(shoplinkerSearch));
+
+		admShoplinkerService.getStockExcelList(shoplinkerSearch, excelFilenameWithPath);
+
+		return GagaFileUtil.writeFile(request, excelFilenameWithPath);
 	}
 
 
@@ -265,7 +395,7 @@ public class TsaShoplinkerController extends TsaBaseController {
 	/**
 	 * 주문수집관리-목록조회
 	 *
-	 * @return
+	 * @return shoplinkerOrder
 	 * @author jmh
 	 * @since 2021. 5. 20
 	 */
@@ -282,10 +412,10 @@ public class TsaShoplinkerController extends TsaBaseController {
 
 		shoplinkerOrder.setRegNo(TsaSession.getInfo().getUserNo()); // 엑셀조회시 로그인 사용자의 엑셀 상품조회시 사용
 		shoplinkerOrder.setPageable(new TscPageRequest(shoplinkerOrder.getPageNo() - 1, shoplinkerOrder.getPageSize()));
-		shoplinkerOrder.getPageable().setTotalCount(shoplinkerService.getShoplinkerOrderListCount(shoplinkerOrder));
+		shoplinkerOrder.getPageable().setTotalCount(admShoplinkerService.getShoplinkerOrderListCount(shoplinkerOrder));
 
 		result.set("pageing", shoplinkerOrder);
-		result.set("shoplinkerOrderList", shoplinkerService.getShoplinkerOrderList(shoplinkerOrder));
+		result.set("shoplinkerOrderList", admShoplinkerService.getShoplinkerOrderList(shoplinkerOrder));
 
 		return result;
 	}
@@ -295,8 +425,8 @@ public class TsaShoplinkerController extends TsaBaseController {
 	 *
 	 * @param ordNo - 주문번호
 	 * @return ModelAndView
-	 * @author jsh77b
-	 * @since 2020. 11. 26
+	 * @author jmh
+	 * @since 2021. 5. 20
 	 */
 	@GetMapping("/order/collection/info")
 	@ResponseBody
@@ -306,8 +436,8 @@ public class TsaShoplinkerController extends TsaBaseController {
 		ShoplinkerOrder order = new ShoplinkerOrder();
 		order.setShoplinkerOrderId(shoplinkerOrderId);
 
-		mav.addObject("slkOrderInfo", shoplinkerService.getShoplinkerOrderInfo(order));
-		mav.addObject("extOrderInfo", shoplinkerService.getExtmallOrderInfo(shoplinkerOrderId));
+		mav.addObject("slkOrderInfo", admShoplinkerService.getShoplinkerOrderInfo(order));
+		mav.addObject("extOrderInfo", admShoplinkerService.getExtmallOrderInfo(shoplinkerOrderId));
 
 		mav.setViewName("shoplinker/ShoplinkerOrderDetailForm");
 
@@ -316,7 +446,7 @@ public class TsaShoplinkerController extends TsaBaseController {
 
 	/**
 	 * 주문수집관리-주문수집 api 호출
-	 * @return
+	 * @param apiStDate
 	 * @author jmh
 	 * @throws IOException
 	 * @since 2021. 5. 20
@@ -350,13 +480,13 @@ public class TsaShoplinkerController extends TsaBaseController {
 		ShoplinkerSearch slkSearch = new ShoplinkerSearch();
 		slkSearch.setApiType("ORDER");
 		slkSearch.setRegNo(TsaSession.getInfo().getUserNo());
-		ShoplinkerSearch runMap = shoplinkerService.getCallRunableInfo(slkSearch);
+		ShoplinkerSearch runMap = tscShoplinkerService.getCallRunableInfo(slkSearch);
 
 		if( runMap.getRunCnt() < 1 ) {
 			try {
 				// 1. API 호출 이력 저장 시작(실행중 재호출 금지하기 위함)
 				slkSearch.setSid(GagaDateUtil.getTodayDateTime());
-				shoplinkerService.saveCallApiRunable(slkSearch);
+				tscShoplinkerService.saveCallApiRunable(slkSearch);
 
 				// 2. 샵링커 api 호출 샵링커주문수집 등록
 				shoplinkerOrder.setSid(slkSearch.getSid());
@@ -365,16 +495,16 @@ public class TsaShoplinkerController extends TsaBaseController {
 				shoplinkerOrder.setShoplinkerId(env.getProperty("shoplinker.shoplinker_id"));
 				shoplinkerOrder.setRegNo(TsaSession.getInfo().getUserNo());
 				shoplinkerOrder.setAcType("ADMMIN");
-				rtnMap = shoplinkerService.insertShoplinkerOrderStep1(shoplinkerOrder);
+				rtnMap = tscShoplinkerService.insertShoplinkerOrderStep1(shoplinkerOrder);
 
 				// 3. 제휴몰 주문등록
 				slkSearch.setTxt("=>제휴몰");
-				shoplinkerService.updateCallApiRunable(slkSearch);
-				shoplinkerService.insertShoplinkerOrderStep2(shoplinkerOrder);
+				tscShoplinkerService.updateCallApiRunable(slkSearch);
+				tscShoplinkerService.insertShoplinkerOrderStep2(shoplinkerOrder);
 
 				// 4. 스타일24 주문등록 (제휴몰 - 대기상태인 것들)
 				slkSearch.setTxt("=>스타일24");
-				shoplinkerService.updateCallApiRunable(slkSearch);
+				tscShoplinkerService.updateCallApiRunable(slkSearch);
 				orderOcmService.createShoplinkerOrder("S", TsaSession.getInfo().getUserNo());
 
 			}catch (Exception e) {
@@ -393,15 +523,37 @@ public class TsaShoplinkerController extends TsaBaseController {
 					slkSearch.setRunStat("END");
 					slkSearch.setTxt("=>FINISH");
 				}
-				shoplinkerService.saveCallApiRunable(slkSearch);
+				tscShoplinkerService.saveCallApiRunable(slkSearch);
 			}
 		}
+	}
+
+	/**
+	 * 주문수집관리-엑셀다운로드
+	 *
+	 * @param shoplinkerOrder
+	 * @return
+	 * @author jmh
+	 * @since 2021. 06. 29
+	 */
+	@GetMapping("/order/excel/list")
+	public ResponseEntity<InputStreamResource> downloadOrderInfoExcelList(HttpServletRequest request, ShoplinkerOrder shoplinkerOrder) throws Exception {
+		String excelfileName = "샵링커_주문_" + GagaDateUtil.getTodayDateTime() + ".xlsx";
+		String excelFilenameWithPath = GagaFileUtil.getConcatenationPath(env.getProperty("download.path"), "excel", excelfileName);
+
+		shoplinkerOrder.setRegNo(TsaSession.getInfo().getUserNo()); // 엑셀조회시 로그인 사용자의 엑셀 상품조회시 사용
+		shoplinkerOrder.setPageable(new TscPageRequest(shoplinkerOrder.getPageNo() - 1, shoplinkerOrder.getPageSize()));
+		shoplinkerOrder.getPageable().setTotalCount(admShoplinkerService.getShoplinkerOrderListCount(shoplinkerOrder));
 
+		admShoplinkerService.getOrderExcelList(shoplinkerOrder, excelFilenameWithPath);
+
+		return GagaFileUtil.writeFile(request, excelFilenameWithPath);
 	}
 
+
 	/**
 	 * 송장전송관리-화면
-	 * @return
+	 * @return ModelAndView
 	 * @author jmh
 	 * @since 2021. 5. 20
 	 */
@@ -425,7 +577,8 @@ public class TsaShoplinkerController extends TsaBaseController {
 	/**
 	 * 송장전송관리-전송목록조회
 	 *
-	 * @return
+	 * @param shoplinkerInvoice
+	 * @return GagaMap
 	 * @author jmh
 	 * @since 2021. 5. 20
 	 */
@@ -442,10 +595,10 @@ public class TsaShoplinkerController extends TsaBaseController {
 
 		shoplinkerInvoice.setRegNo(TsaSession.getInfo().getUserNo()); // 엑셀조회시 로그인 사용자의 엑셀 상품조회시 사용
 		shoplinkerInvoice.setPageable(new TscPageRequest(shoplinkerInvoice.getPageNo() - 1, shoplinkerInvoice.getPageSize()));
-		shoplinkerInvoice.getPageable().setTotalCount(shoplinkerService.getSendInvoiceListCount(shoplinkerInvoice));
+		shoplinkerInvoice.getPageable().setTotalCount(admShoplinkerService.getSendInvoiceListCount(shoplinkerInvoice));
 
 		result.set("pageing", shoplinkerInvoice);
-		result.set("invoiceList", shoplinkerService.getSendInvoiceList(shoplinkerInvoice));
+		result.set("invoiceList", admShoplinkerService.getSendInvoiceList(shoplinkerInvoice));
 
 		return result;
 	}
@@ -453,8 +606,7 @@ public class TsaShoplinkerController extends TsaBaseController {
 	/**
 	 * 송장전송관리-송장전송
 	 *
-	 * @param shoplinkerGoods
-	 * @return GagaMap
+	 * @param
 	 * @throws Exception
 	 * @author jmh
 	 * @since 2021.5.20
@@ -467,14 +619,14 @@ public class TsaShoplinkerController extends TsaBaseController {
 		// API 호출 중인건수 있는지 확인
 		ShoplinkerSearch slkSearch = new ShoplinkerSearch();
 		slkSearch.setApiType("INVOICE");
-		ShoplinkerSearch runMap = shoplinkerService.getCallRunableInfo(slkSearch);
+		ShoplinkerSearch runMap = tscShoplinkerService.getCallRunableInfo(slkSearch);
 
 		if( runMap.getRunCnt() < 1 ) {
 			try {
 				// 1. API 호출 이력 저장 시작(실행중 재호출 금지하기 위함)
 				slkSearch.setSid(GagaDateUtil.getTodayDateTime());
 				slkSearch.setRegNo(TsaSession.getInfo().getUserNo());
-				shoplinkerService.saveCallApiRunable(slkSearch);
+				tscShoplinkerService.saveCallApiRunable(slkSearch);
 
 				ShoplinkerInvoice shoplinkerInvoice = new ShoplinkerInvoice();
 				shoplinkerInvoice.setStDate(stDate);
@@ -500,8 +652,8 @@ public class TsaShoplinkerController extends TsaBaseController {
 
 				// 2. xml 데이터 생성
 				shoplinkerInvoice.setCustomerId(env.getProperty("shoplinker.customer_id"));
-				Collection<ShoplinkerInvoice> sendList = shoplinkerService.getShoplinkerInvoiceOrdDtlList();
-				shoplinkerService.createShoplinkerInvoiceXml(shoplinkerInvoice, sendList);
+				Collection<ShoplinkerInvoice> sendList = tscShoplinkerService.getShoplinkerInvoiceOrdDtlSendList();
+				tscShoplinkerService.createShoplinkerInvoiceXml(shoplinkerInvoice, sendList);
 
 				rtnMap.setString("RESULT_TYPE", "TRUE");
 
@@ -521,13 +673,37 @@ public class TsaShoplinkerController extends TsaBaseController {
 					slkSearch.setRunStat("END");
 					slkSearch.setTxt("=>FINISH");
 				}
-				shoplinkerService.saveCallApiRunable(slkSearch);
+				tscShoplinkerService.saveCallApiRunable(slkSearch);
 			}
 		}
 	}
 
 	/**
-	 * 송장전송관리-송장전송(엑셀용)
+	 * 송장전송- 엑셀다운로드
+	 *
+	 * @param shoplinkerInvoice
+	 * @return
+	 * @author jmh
+	 * @since 2021. 06. 29
+	 */
+	@GetMapping("/invoice/excel/list")
+	public ResponseEntity<InputStreamResource> downloadOrderInfoExcelList(HttpServletRequest request, ShoplinkerInvoice shoplinkerInvoice) throws Exception {
+		String excelfileName = "샵링커_송장_" + GagaDateUtil.getTodayDateTime() + ".xlsx";
+		String excelFilenameWithPath = GagaFileUtil.getConcatenationPath(env.getProperty("download.path"), "excel", excelfileName);
+
+
+
+		shoplinkerInvoice.setRegNo(TsaSession.getInfo().getUserNo()); // 엑셀조회시 로그인 사용자의 엑셀 상품조회시 사용
+		shoplinkerInvoice.setPageable(new TscPageRequest(shoplinkerInvoice.getPageNo() - 1, shoplinkerInvoice.getPageSize()));
+		shoplinkerInvoice.getPageable().setTotalCount(admShoplinkerService.getSendInvoiceListCount(shoplinkerInvoice));
+
+		admShoplinkerService.getInvoiceExcelList(shoplinkerInvoice, excelFilenameWithPath);
+
+		return GagaFileUtil.writeFile(request, excelFilenameWithPath);
+	}
+
+	/**
+	 * 송장전송관리-송장전송(업로드엑셀용)
 	 *
 	 * @param shoplinkerGoods
 	 * @return GagaMap
@@ -566,7 +742,7 @@ public class TsaShoplinkerController extends TsaBaseController {
 				// 1. API 호출 이력 저장 시작(실행중 재호출 금지하기 위함)
 				slkSearch.setSid(datestr);
 				slkSearch.setRegNo(TsaSession.getInfo().getUserNo());
-				shoplinkerService.saveCallApiRunable(slkSearch);
+				tscShoplinkerService.saveCallApiRunable(slkSearch);
 
 				// 2. 엑셀데이터 확인 및 xml 관련 위치 확인
 				String[] goodsNames = {"ordNo", "supplyCompCd"};
@@ -619,7 +795,7 @@ public class TsaShoplinkerController extends TsaBaseController {
 					slkSearch.setRunStat("END");
 					slkSearch.setTxt("=>FINISH");
 				}
-				shoplinkerService.saveCallApiRunable(slkSearch);
+				tscShoplinkerService.saveCallApiRunable(slkSearch);
 			}
 		}
 
@@ -627,64 +803,12 @@ public class TsaShoplinkerController extends TsaBaseController {
 	}
 	 ******************************************************************************************/
 
-	/**
-	 * 재고이력-화면
-	 * @return
-	 * @author jmh
-	 * @since 2021. 5. 20
-	 */
-	@GetMapping("/stock/result/form")
-	public ModelAndView stockHistoryForm() {
-		ModelAndView mav = new ModelAndView();
-
-		mav.setViewName("shoplinker/ShoplinkerStockForm");
-
-		return mav;
-	}
-
-	/**
-	 * 재고이력-목록조회
-	 *
-	 * @return
-	 * @author jmh
-	 * @since 2021. 5. 20
-	 */
-	@PostMapping("/stock/result/list")
-	@ResponseBody
-	public GagaMap getStockHistoryList(@RequestBody ShoplinkerSearch shoplinkerSearch) {
-
-		GagaMap result = new GagaMap();
-
-		if (!StringUtils.isBlank(shoplinkerSearch.getBrandList())) {
-			try {
-				String[] arrBrandCd = mapper.readValue(shoplinkerSearch.getBrandList(), String[].class);
-				shoplinkerSearch.setMultiBrand(arrBrandCd);
-			} catch (Exception e) {
-				e.printStackTrace();
-				throw new IllegalStateException("브랜드코드 검색중 오류로 인해 조회되지 않았습니다.");
-			}
-		}
-
-		// multi row 검색관련 처리
-		if (!StringUtils.isBlank(shoplinkerSearch.getCondition())) {
-			shoplinkerSearch.setConditionList(shoplinkerSearch.getCondition().replaceAll("\r", "").trim().split("\n"));
-		}
-
-		shoplinkerSearch.setRegNo(TsaSession.getInfo().getUserNo()); // 엑셀조회시 로그인 사용자의 엑셀 상품조회시 사용
-		shoplinkerSearch.setPageable(new TscPageRequest(shoplinkerSearch.getPageNo() - 1, shoplinkerSearch.getPageSize()));
-		shoplinkerSearch.getPageable().setTotalCount(shoplinkerService.getStockListCount(shoplinkerSearch));
-
-		result.set("pageing", shoplinkerSearch);
-		result.set("stockList", shoplinkerService.getStockList(shoplinkerSearch));
-
-		return result;
-	}
 
 	/**
 	 * 공통-api 실행여부확인
 	 *
 	 * @param slkSearch - 주문번호
-	 * @return ModelAndView
+	 * @return ShoplinkerSearch
 	 * @author jmh
 	 * @since 2020. 11. 26
 	 */
@@ -693,131 +817,10 @@ public class TsaShoplinkerController extends TsaBaseController {
 	public ShoplinkerSearch apiRunable(@RequestBody ShoplinkerSearch slkSearch) throws IOException {
 
 		slkSearch.setRegNo(TsaSession.getInfo().getUserNo());
-		ShoplinkerSearch runMap = shoplinkerService.getCallRunableInfo(slkSearch);
+		ShoplinkerSearch runMap = tscShoplinkerService.getCallRunableInfo(slkSearch);
 		return runMap;
 	}
 
-	/**
-	 * 상품목록 - 기본정보 엑셀다운로드
-	 *
-	 * @param shoplinkerSearch
-	 * @return
-	 * @author jmh
-	 * @since 2021. 06. 29
-	 */
-	@GetMapping("/goods/excel/list")
-	public ResponseEntity<InputStreamResource> downloadGoodsInfoExcelList(HttpServletRequest request, ShoplinkerSearch shoplinkerSearch) throws Exception {
-		String excelfileName = "샵링커_상품_" + GagaDateUtil.getTodayDateTime() + ".xlsx";
-		String excelFilenameWithPath = GagaFileUtil.getConcatenationPath(env.getProperty("download.path"), "excel", excelfileName);
-
-		if (!StringUtils.isBlank(shoplinkerSearch.getBrandList())) {
-			try {
-				String[] arrBrandCd = mapper.readValue(shoplinkerSearch.getBrandList(), String[].class);
-				shoplinkerSearch.setMultiBrand(arrBrandCd);
-			} catch (Exception e) {
-				e.printStackTrace();
-				throw new IllegalStateException("브랜드코드 검색중 오류로 인해 조회되지 않았습니다.");
-			}
-		}
-
-		// multi row 검색관련 처리
-		if (!StringUtils.isBlank(shoplinkerSearch.getCondition())) {
-			shoplinkerSearch.setConditionList(shoplinkerSearch.getCondition().replaceAll("\r", "").trim().split("\n"));
-		}
-
-		shoplinkerSearch.setRegNo(TsaSession.getInfo().getUserNo()); // 엑셀조회시 로그인 사용자의 엑셀 상품조회시 사용
-		shoplinkerSearch.setPageable(new TscPageRequest(shoplinkerSearch.getPageNo() - 1, shoplinkerSearch.getPageSize()));
-		shoplinkerSearch.getPageable().setTotalCount(shoplinkerService.getGoodsSendListCount(shoplinkerSearch));
-
-		admShoplinkerService.getGoodsSendExcelList(shoplinkerSearch, excelFilenameWithPath);
-
-		return GagaFileUtil.writeFile(request, excelFilenameWithPath);
-	}
-
-	/**
-	 * 재고이력- 엑셀다운로드
-	 *
-	 * @param shoplinkerSearch
-	 * @return
-	 * @author jmh
-	 * @since 2021. 06. 29
-	 */
-	@GetMapping("/stock/excel/list")
-	public ResponseEntity<InputStreamResource> downloadStockInfoExcelList(HttpServletRequest request, ShoplinkerSearch shoplinkerSearch) throws Exception {
-		String excelfileName = "샵링커_재고_" + GagaDateUtil.getTodayDateTime() + ".xlsx";
-		String excelFilenameWithPath = GagaFileUtil.getConcatenationPath(env.getProperty("download.path"), "excel", excelfileName);
-
-		if (!StringUtils.isBlank(shoplinkerSearch.getBrandList())) {
-			try {
-				String[] arrBrandCd = mapper.readValue(shoplinkerSearch.getBrandList(), String[].class);
-				shoplinkerSearch.setMultiBrand(arrBrandCd);
-			} catch (Exception e) {
-				e.printStackTrace();
-				throw new IllegalStateException("브랜드코드 검색중 오류로 인해 조회되지 않았습니다.");
-			}
-		}
-
-		// multi row 검색관련 처리
-		if (!StringUtils.isBlank(shoplinkerSearch.getCondition())) {
-			shoplinkerSearch.setConditionList(shoplinkerSearch.getCondition().replaceAll("\r", "").trim().split("\n"));
-		}
-
-		shoplinkerSearch.setRegNo(TsaSession.getInfo().getUserNo()); // 엑셀조회시 로그인 사용자의 엑셀 상품조회시 사용
-		shoplinkerSearch.setPageable(new TscPageRequest(shoplinkerSearch.getPageNo() - 1, shoplinkerSearch.getPageSize()));
-		shoplinkerSearch.getPageable().setTotalCount(shoplinkerService.getStockListCount(shoplinkerSearch));
-
-		admShoplinkerService.getStockExcelList(shoplinkerSearch, excelFilenameWithPath);
-
-		return GagaFileUtil.writeFile(request, excelFilenameWithPath);
-	}
-
-	/**
-	 * 주문수집- 엑셀다운로드
-	 *
-	 * @param shoplinkerOrder
-	 * @return
-	 * @author jmh
-	 * @since 2021. 06. 29
-	 */
-	@GetMapping("/order/excel/list")
-	public ResponseEntity<InputStreamResource> downloadOrderInfoExcelList(HttpServletRequest request, ShoplinkerOrder shoplinkerOrder) throws Exception {
-		String excelfileName = "샵링커_주문_" + GagaDateUtil.getTodayDateTime() + ".xlsx";
-		String excelFilenameWithPath = GagaFileUtil.getConcatenationPath(env.getProperty("download.path"), "excel", excelfileName);
-
-
-
-		shoplinkerOrder.setRegNo(TsaSession.getInfo().getUserNo()); // 엑셀조회시 로그인 사용자의 엑셀 상품조회시 사용
-		shoplinkerOrder.setPageable(new TscPageRequest(shoplinkerOrder.getPageNo() - 1, shoplinkerOrder.getPageSize()));
-		shoplinkerOrder.getPageable().setTotalCount(shoplinkerService.getShoplinkerOrderListCount(shoplinkerOrder));
-
-		admShoplinkerService.getOrderExcelList(shoplinkerOrder, excelFilenameWithPath);
-
-		return GagaFileUtil.writeFile(request, excelFilenameWithPath);
-	}
-
-	/**
-	 * 송장전송- 엑셀다운로드
-	 *
-	 * @param shoplinkerInvoice
-	 * @return
-	 * @author jmh
-	 * @since 2021. 06. 29
-	 */
-	@GetMapping("/invoice/excel/list")
-	public ResponseEntity<InputStreamResource> downloadOrderInfoExcelList(HttpServletRequest request, ShoplinkerInvoice shoplinkerInvoice) throws Exception {
-		String excelfileName = "샵링커_송장_" + GagaDateUtil.getTodayDateTime() + ".xlsx";
-		String excelFilenameWithPath = GagaFileUtil.getConcatenationPath(env.getProperty("download.path"), "excel", excelfileName);
-
-
-
-		shoplinkerInvoice.setRegNo(TsaSession.getInfo().getUserNo()); // 엑셀조회시 로그인 사용자의 엑셀 상품조회시 사용
-		shoplinkerInvoice.setPageable(new TscPageRequest(shoplinkerInvoice.getPageNo() - 1, shoplinkerInvoice.getPageSize()));
-		shoplinkerInvoice.getPageable().setTotalCount(shoplinkerService.getSendInvoiceListCount(shoplinkerInvoice));
-
-		admShoplinkerService.getInvoiceExcelList(shoplinkerInvoice, excelFilenameWithPath);
-
-		return GagaFileUtil.writeFile(request, excelFilenameWithPath);
-	}
 
 
 	/*
@@ -965,10 +968,10 @@ System.out.println("####### : "+re.getResult());
 			com.gagaframework.shoplinker.domain.orderlist.Header rHeader;
 			com.gagaframework.shoplinker.domain.orderlist.Shoplinker shoplinkerOrdResult;
 
-			testXmlUrl = "http://ts5000.ipdisk.co.kr:8999/shoplinker/order/order_time.xml";
+			testXmlUrl = "http://ts5000.ipdisk.co.kr:8999/shoplinker/order/order_time.xml"; // 20210401  143000 ~ 150000
 			//testXmlUrl = "http://ts5000.ipdisk.co.kr:8999/shoplinker/order/0528/order_real_1.xml";	// 28~31일 15시~07시
 			//testXmlUrl = "http://ts5000.ipdisk.co.kr:8999/shoplinker/order/0528/order_real_28.xml";	// 28 15시~235959  7개
-			testXmlUrl = "http://ts5000.ipdisk.co.kr:8999/shoplinker/order/0528/order_real_31.xml";	// 31일 000000시~07시  5582개
+			//testXmlUrl = "http://ts5000.ipdisk.co.kr:8999/shoplinker/order/0528/order_real_31.xml";	// 31일 000000시~07시  5582개
 			responseXmlData =   shoplinkerUtil.callShoplinkerApiByGet(GagaShoplinkerConstants.API_DOMAIN+"/Order/orderlist.php?iteminfo_url="+testXmlUrl, "");
 
 

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

@@ -26,6 +26,7 @@ public class ReinboundInform extends TscBaseDomain {
 	private String optCd2;
 	private String reqDt;
 	private String informDt;
+	private int pastDays;
 
 	private String custId;
 	private String brandEnm;

+ 24 - 0
src/main/java/com/style24/persistence/domain/SearchKeyword.java

@@ -0,0 +1,24 @@
+package com.style24.persistence.domain;
+
+import com.style24.persistence.TscBaseDomain;
+import lombok.Data;
+
+import java.util.Collection;
+
+/**
+ * 검색 키워드 Domain
+ *
+ * @author bin2107
+ * @since 2021. 07. 01
+ */
+@SuppressWarnings("serial")
+@Data
+public class SearchKeyword extends TscBaseDomain {
+
+	private Integer keywordSq;
+	private String keyword;
+	private String linkUrl;
+	private String dispStdt;
+	private String dispEddt;
+
+}

+ 34 - 0
src/main/java/com/style24/persistence/mybatis/shop/TsaDsiplay.xml

@@ -2081,4 +2081,38 @@
 		AND CG.CONTENTS_SQ = #{dispOrd}
 		ORDER BY CG.BRAND_GROUP_NO , CG.CATE_NO ,CG.LEAF_CATE_NO ,CG.CONTENTS_LOC ,CG.PRE_CONTENTS_SQ , CG.CONTENTS_SQ , CG.DISP_ORD
 	</select>
+
+	<!-- 검색키워드  등록 -->
+	<insert id="createSearchKeyword" parameterType="SearchKeyword" keyProperty="keywordSq">
+		/* TsaDisplay.createSearchKeyword */
+		INSERT INTO TB_SEARCH_KEYWORD
+		(
+		  KEYWORD_SQ
+		  ,KEYWORD
+		  ,LINK_URL
+		  ,DISP_STDT
+		  ,DISP_EDDT
+		  ,REG_NO
+		  ,REG_DT
+		  ,UPD_NO
+		  ,UPD_DT
+		) VALUES (
+		  #{keywordSq}
+		  , #{keyword}
+		  , #{linkUrl}
+		  , #{dispStdt}
+		  , #{dispEddt}
+		  , #{regNo}
+		  , NOW()
+		  , #{updNo}
+		  , NOW()
+		)
+		ON DUPLICATE KEY UPDATE
+		    KEYWORD = #{keyword}
+		  , LINK_URL = #{linkUrl}
+		  , DISP_STDT = #{dispStdt}
+		  , DISP_EDDT = #{dispEddt}
+		  , UPD_NO = #{updNo}
+		  , UPD_DT = NOW()
+	</insert>
 </mapper>

+ 24 - 27
src/main/java/com/style24/persistence/mybatis/shop/TsaGoods.xml

@@ -2017,7 +2017,8 @@
 		FROM (
 		SELECT Z.*
 		FROM (
-		    SELECT A.*, @rownum := @rownum + 1 AS RNUM FROM (
+		    SELECT A.*
+		    FROM (
 		        SELECT
 		                G.GOODS_CD
 		              , B.BRAND_ENM
@@ -2037,7 +2038,6 @@
 		              , FN_GET_USER_NM(GR.REG_NO) AS REG_NM
 		              , DATE_FORMAT(GR.REG_DT,'%Y%m%d%H%i%S') AS REG_DT
 		        FROM TB_GOODS G
-		        JOIN ( SELECT @rownum := 0) R
 		        INNER JOIN TB_BRAND B ON G.BRAND_CD = B.BRAND_CD
 		        INNER JOIN TB_SUPPLY_COMPANY S ON G.SUPPLY_COMP_CD = S.SUPPLY_COMP_CD
 		        INNER JOIN TB_GOODS_TNM_RES GR ON G.GOODS_CD = GR.GOODS_CD
@@ -2087,7 +2087,7 @@
 		        <if test="searchGb != null and searchGb =='EXCEL'">
 		        ORDER BY SD.TMP_DISP_ORD
 		        </if>
-		<include refid="getListPagingCondition_sql"/>
+		<include refid="getListLimitPagingCondition_sql"/>
 	</select>
 
 	<!-- 상품 타이틀 예약조회(기간 체크용) -->
@@ -2245,7 +2245,7 @@
 		FROM (
 		SELECT Z.*
 		FROM (
-		      SELECT A.*, @rownum := @rownum + 1 AS RNUM
+		      SELECT A.*
 		      FROM (
 		            SELECT
 		                   G.GOODS_CD
@@ -2265,7 +2265,6 @@
 		                   , FN_GET_USER_NM(GR.UPD_NO) AS UPD_NM
 		                   , DATE_FORMAT(GR.UPD_DT,'%Y%m%d%H%i%S') AS UPD_DT
 		            FROM TB_GOODS G
-		            JOIN ( SELECT @rownum := 0) R
 		            INNER JOIN TB_BRAND B ON G.BRAND_CD = B.BRAND_CD
 		            INNER JOIN TB_SUPPLY_COMPANY S ON G.SUPPLY_COMP_CD = S.SUPPLY_COMP_CD
 		            INNER JOIN TB_GOODS_RES_SELL GR ON G.GOODS_CD = GR.GOODS_CD
@@ -2312,7 +2311,7 @@
 		            <if test="searchGb != null and searchGb =='EXCEL'">
 		            ORDER BY SD.TMP_DISP_ORD
 		            </if>
-		<include refid="getListPagingCondition_sql"/>
+		<include refid="getListLimitPagingCondition_sql"/>
 	</select>
 
 	<!-- 상품예약판매 조회(기간 체크용) -->
@@ -2421,7 +2420,8 @@
 		FROM (
 		SELECT Z.*
 		FROM (
-		    SELECT A.*, @rownum := @rownum + 1 AS RNUM FROM (
+		    SELECT A.*
+		    FROM (
 		        SELECT
 		                G.GOODS_CD
 		              , B.BRAND_ENM
@@ -2440,7 +2440,6 @@
 		              , FN_GET_USER_NM(GE.UPD_NO) AS UPD_NM
 		              , DATE_FORMAT(GE.UPD_DT,'%Y%m%d%H%i%S') AS UPD_DT
 		        FROM TB_GOODS G
-		        JOIN ( SELECT @rownum := 0) R
 		        INNER JOIN TB_BRAND B ON G.BRAND_CD = B.BRAND_CD
 		        INNER JOIN TB_SUPPLY_COMPANY S ON G.SUPPLY_COMP_CD = S.SUPPLY_COMP_CD
 		        INNER JOIN TB_GOODS_EP_SKIP GE ON G.GOODS_CD = GE.GOODS_CD
@@ -2487,7 +2486,7 @@
 		         <if test="searchGb != null and searchGb =='EXCEL'">
 		        ORDER BY SD.TMP_DISP_ORD
 		        </if>
-		<include refid="getListPagingCondition_sql"/>
+		<include refid="getListLimitPagingCondition_sql"/>
 	</select>
 
 	<!-- 네이버 EP 제외 상품 조회(기간 체크용) -->
@@ -2499,7 +2498,7 @@
 		<![CDATA[
 		AND APPLY_STDT <= DATE_FORMAT(#{applyStdt}, '%Y%m%d')
 		]]>
-		AND APPLY_EDDT >= DATE_FORMAT(#{applyEddt},'%Y%m%d%')
+		AND APPLY_EDDT >= DATE_FORMAT(#{applyEddt}, '%Y%m%d')
 		AND GOODS_CD = #{goodsCd}
 	</select>
 
@@ -2726,7 +2725,8 @@
 		FROM (
 		SELECT Z.*
 		FROM (
-		    SELECT A.*, @rownum := @rownum + 1 AS RNUM FROM (
+		    SELECT A.* 
+		    FROM (
 		        SELECT
 		                G.GOODS_CD
 		              , G.CURR_PRICE
@@ -2757,7 +2757,6 @@
 		              , FN_GET_USER_NM(GR.UPD_NO) AS UPD_NM
 		              , DATE_FORMAT(GR.UPD_DT,'%Y%m%d%H%i%S') AS UPD_DT
 		        FROM TB_GOODS G
-		        JOIN ( SELECT @rownum := 0) R
 		        INNER JOIN TB_BRAND B ON G.BRAND_CD = B.BRAND_CD
 		        INNER JOIN TB_SUPPLY_COMPANY S ON G.SUPPLY_COMP_CD = S.SUPPLY_COMP_CD
 		        INNER JOIN TB_GOODS_PRICE_RES GR ON G.GOODS_CD = GR.GOODS_CD
@@ -2813,7 +2812,7 @@
 		        <if test="searchGb != null and (searchGb =='EXCEL' or searchGb =='EXCELRESULT')">
 		        ORDER BY SD.TMP_DISP_ORD, GR.APPLY_STDT DESC, GR.APPLY_EDDT DESC, G.GOODS_CD, GR.GOODS_PRICE_RES_SQ
 		        </if>
-		<include refid="getListPagingCondition_sql"/>
+		<include refid="getListLimitPagingCondition_sql"/>
 	</select>
 
 	<!-- 상품 가격예약 조회(기간 체크용) -->
@@ -2825,7 +2824,7 @@
 		<![CDATA[
 		AND APPLY_STDT <= DATE_FORMAT(#{applyStdt}, '%Y%m%d%H%i%S')
 		]]>
-		AND APPLY_EDDT >= DATE_FORMAT(#{applyEddt},'%Y%m%d%H%i%S')
+		AND APPLY_EDDT >= DATE_FORMAT(#{applyEddt}, '%Y%m%d%H%i%S')
 	</select>
 
 	<!-- 상품 가격예약 등록 -->
@@ -3542,7 +3541,7 @@
 		              AND DATE_FORMAT(IA.REQ_DT, '%Y%m%d')  >= DATE_FORMAT(DATE_ADD(NOW(), INTERVAL -15 DAY), '%Y%m%d') 
 		              </if>
 		<include refid="getGoodsListCondition_sql"/>
-		ORDER BY IA.REG_DT DESC
+		ORDER BY IA.RINBD_INFO_SQ
 	</select>
 
 	<!-- 재입고알림 목록 -->
@@ -3552,7 +3551,7 @@
 		FROM (
 		SELECT Z.*
 		FROM (
-		       SELECT A.*, @rownum := @rownum + 1 AS RNUM 
+		       SELECT A.*
 		       FROM (
 		              SELECT IA.RINBD_INFO_SQ
 		                   , IA.GOODS_CD
@@ -3565,6 +3564,7 @@
 		                   , DATE_FORMAT(IA.REG_DT,'%Y%m%d%H%i%S') AS REG_DT
 		                   , FN_GET_USER_NM(IA.UPD_NO)             AS UPD_NM
 		                   , DATE_FORMAT(IA.UPD_DT,'%Y%m%d%H%i%S') AS UPD_DT
+		                   , DATEDIFF(CURRENT_DATE(),IA.REQ_DT)    AS PAST_DAYS
 		                   , IA.CUST_NO
 		                   , C.CUST_ID
 		                   , C.CUST_NM
@@ -3578,7 +3578,6 @@
 		                   , VS.CURR_STOCK_QTY
 		                   , VS.SOLDOUT_YN
 		              FROM TB_REINBOUND_INFORM IA
-		              JOIN ( SELECT @rownum := 0) R
 		              INNER JOIN TB_GOODS G ON IA.GOODS_CD = G.GOODS_CD
 		                                    AND G.GOODS_STAT IN ('G008_70', 'G008_90', 'G008_96')
 		              INNER JOIN TB_BRAND B ON G.BRAND_CD = B.BRAND_CD
@@ -3628,12 +3627,12 @@
 		                  </if>
 		              </if>
 		              <if test='beforSkipFlag != null and beforSkipFlag == "Y"'>
-		              AND DATE_FORMAT(IA.REQ_DT, '%Y%m%d')  >= DATE_FORMAT(DATE_ADD(NOW(), INTERVAL -15 DAY), '%Y%m%d') 
+		              AND DATEDIFF(CURRENT_DATE(),IA.REQ_DT) <![CDATA[<=]]> 15
 		              </if>
 		              <include refid="getGoodsListCondition_sql"/>
-		              ORDER BY IA.REG_DT DESC
-		<include refid="getListPagingCondition_sql"/>
-	</select>
+		              ORDER BY IA.REQ_DT DESC
+		<include refid="getListLimitPagingCondition_sql"/>
+	</select> 
 	
 	<!-- 재입고 알림톡 발송처리 -->
 	<update id="updateReinboundInform" parameterType="ReinboundInform">
@@ -3812,7 +3811,7 @@
 		/* TsaGoods.getGoodsWmsIncomelotList */
 		SELECT Q.* FROM (
 		SELECT Z.* FROM (
-		SELECT A.*, @rownum := @rownum + 1 AS RNUM 
+		SELECT A.*
 		    FROM (
 		SELECT A.PRODUCT_NO
 		     , A.PRODUCT_CODE
@@ -3833,7 +3832,6 @@
 		     , FN_GET_USER_NM(A.UPD_NO) AS UPD_NM
 		     , DATE_FORMAT(A.UPD_DT,'%Y%m%d%H%i%S') AS UPD_DT
 		FROM TB_WMS_GOODS A
-		JOIN ( SELECT @rownum := 0) R
 		INNER JOIN TB_BRAND B ON A.BRAND_NO = B.BRAND_NO 
 		                           AND B.SELF_YN  = 'Y'
 		                           AND B.USE_YN  = 'Y'
@@ -3857,7 +3855,7 @@
 		AND B.BRAND_CD = #{brandCd}
 		</if>
 		ORDER BY A.UPD_DT DESC
-		<include refid="getListPagingCondition_sql"/>
+		<include refid="getListLimitPagingCondition_sql"/>
 	</select>
 	
 	<!-- 사은품 등록 -->
@@ -4578,7 +4576,7 @@
 		FROM (
 		SELECT Z.*
 		FROM (
-		    SELECT A.*, @rownum := @rownum + 1 AS RNUM 
+		    SELECT A.*
 		    FROM (
 		SELECT G.GOODS_CD
 		     , G.GOODS_NM
@@ -4598,7 +4596,6 @@
 		         </otherwise>
 		     </choose>
 		FROM TB_GOODS_SHOT_DELV_SKIP A
-		JOIN ( SELECT @rownum := 0) R
 		INNER JOIN TB_GOODS G ON A.GOODS_CD = G.GOODS_CD
 		INNER JOIN TB_BRAND B ON G.BRAND_CD = B.BRAND_CD
 		INNER JOIN TB_BRAND_GROUP D ON B.BRAND_GROUP_NO  = D.BRAND_GROUP_NO
@@ -4628,7 +4625,7 @@
 		            </if>
 		        <include refid="getGoodsListCondition_sql"/>
 		</if>
-		<include refid="getListPagingCondition_sql"/>
+		<include refid="getListLimitPagingCondition_sql"/>
 	</select>
 	
 	<!-- 총알배송 제외 상품 저장 -->

+ 557 - 28
src/main/java/com/style24/persistence/mybatis/shop/TsaShoplinker.xml

@@ -2,8 +2,241 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.style24.admin.biz.dao.TsaShoplinkerDao">
 
+	<!-- 상품등록-단품 목록 조회 -->
+	<select id="getOptionList" parameterType="ShoplinkerGoods" resultType="ShoplinkerGoods">
+		/* TsaShoplinker.getOptionList */
+		SELECT
+			A.GOODS_CD
+			, B.OPT_CD AS PARTNER_PRODUCT_ID
+			, B.OPT_CD
+			, B.OPT_CD1
+			, B.OPT_CD2
+		   /*, IF(B.CURR_STOCK_QTY - B.BASE_STOCK_QTY <![CDATA[<]]> 1, 1 , B.CURR_STOCK_QTY - B.BASE_STOCK_QTY) AS QUANTITY -- 기준재고(안전재고)수량
+		   , B.STORE_STOCK_QTY -- 매장재고수량
+		   , B.CURR_STOCK_QTY -- 현재고수량
+		   */
+			, A.SELF_GOODS_YN
+			, IF(VS.CURR_STOCK_QTY <![CDATA[<]]> 1, 1, VS.CURR_STOCK_QTY) AS QUANTITY   	-- 현재고
+			, VS.BASE_STOCK_QTY 	-- 안전재고
+		FROM VW_STOCK VS inner join tb_goods A on VS.GOODS_CD = A.GOODS_CD
+		INNER JOIN tb_option B on VS.GOODS_CD = B.GOODS_CD AND A.GOODS_CD = B.GOODS_CD and VS.OPT_CD = B.OPT_CD
+		WHERE VS.GOODS_CD = #{goodsCd}
+
+		ORDER BY cast(REPLACE(B.OPT_CD, '-', '') as unsigned)
+	</select>
+
+	<!-- 상품등록-상품 상세 -->
+	<select id="getGoods" parameterType="ShoplinkerGoods" resultType="ShoplinkerGoods">
+		/* TsaShoplinker.getGoods */
+		SELECT
+			GOODS_CD
+			, A.BRAND_CD
+			, IFNULL((SELECT S.SYNC_YN FROM TB_EXTMALL_PRICE_SYNC S WHERE S.VENDOR_ID = 'G003_V001' and S.BRAND_CD = A.BRAND_CD), 'N') as SYNC_YN
+			, (SELECT REPLACE(REPLACE(BRAND_ENM, ' ', '_'), '\'', '') FROM TB_BRAND S WHERE S.BRAND_CD = A.BRAND_CD AND S.USE_YN = 'Y') AS BRAND_ENM
+			, '999999999' AS ATTRIBUTE_TITLE_CODE
+			, (SELECT GROUP_CONCAT(OPT_CD ORDER BY CAST(REPLACE(OPT_CD, '-', '') AS UNSIGNED) SEPARATOR ',')  FROM TB_OPTION S WHERE A.GOODS_CD = S.GOODS_CD) AS ATTRIBUTE_PARTNER_PRODUCT_ID
+			, GOODS_NM AS PRODUCT_NAME
+
+			, TOBE_FORM_YN
+			, (SELECT GOODS_DESC FROM TB_GOODS_DESC S WHERE A.GOODS_CD = S.GOODS_CD AND DESC_GB= '80' LIMIT 1) AS DETAIL_DESC
+			, (SELECT GOODS_DESC FROM TB_GOODS_DESC S WHERE A.GOODS_CD = S.GOODS_CD AND DESC_GB= '10' LIMIT 1) AS DETAIL_DESC_NEW_10
+			, (SELECT GOODS_DESC FROM TB_GOODS_DESC S WHERE A.GOODS_CD = S.GOODS_CD AND DESC_GB= '20' LIMIT 1) AS DETAIL_DESC_NEW_20
+			, (SELECT GOODS_DESC FROM TB_GOODS_DESC S WHERE A.GOODS_CD = S.GOODS_CD AND DESC_GB= '30' LIMIT 1) AS DETAIL_DESC_NEW_30
+			, (SELECT S.MODEL_INFO FROM TB_GOODS_MODEL_INFO S WHERE S.GOODS_CD = A.GOODS_CD) AS MODEL_INFO
+
+			, '' AS MARKET_PRICE -- 쇼핑몰시중가(도서정가)
+			, CURR_PRICE AS SALE_PRICE -- 쇼핑몰판매가
+			, LIST_PRICE AS SUPPLY_PRICE -- 쇼핑몰공급가
+			, '' AS MARKET_PRICE_P -- 매입처 시중가(도서정가)
+			, '' AS SALE_PRICE_P -- 매입처 판매가
+			, '' AS SUPPLY_PRICE_P -- 매입처 공급가
+			, '001' AS SALE_STATUS -- 상품판매상태
+			, MAKE_YMD AS MAKER_DT -- 발행일(제조일)
+			, '001' AS TAX_YN -- 과세
+			, '' AS NEW_DESC_TOP -- 신상세설명
+			, '전국' AS SALEAREA
+			-- , SEX_GB
+			-- , FN_GET_CODE_NM('G007', SEX_GB) AS SEX_NM
+			, (CASE SEX_GB WHEN 'G007_M' THEN '002' WHEN 'G007_F' THEN '003' ELSE '001' END) AS SEX -- 샵링커 성별
+			, GOODS_CD AS MODEL -- 모델명
+			, GOODS_CD AS MODEL_NO -- 모델NO
+			, (SELECT BRAND_ENM FROM TB_BRAND S WHERE A.BRAND_CD = S.BRAND_CD AND USE_YN = 'Y') AS BRAND -- 브랜드명
+			, ( SELECT CERT_NUM FROM TB_GOODS_SAFE_NO S WHERE A.GOODS_CD = S.GOODS_CD ) AS AUTH_NO -- 인증번호
+			, '20991231' AS EXPIRYDATE -- 유효일
+			, (SELECT NI_CONTENT FROM TB_GOODS_NOTI_INFO S WHERE A.GOODS_CD = S.GOODS_CD AND NI_ITEM_CD = 'G005_005') AS MAKER -- 제조업체
+			, IFNULL((select S.EXTMALL_ORIGIN_NM from TB_EXTMALL_ORIGIN S where S.ORIGIN_CD = A.ORIGIN_CD), '') AS ORIGIN -- 원산지명 OR 코드
+			, ADULT_YN AS ADULT_INFO -- 성인상품
+
+			, A.ITEMKIND_CD
+			, C.ITEMKIND_NM AS SHOPLINKER_ITEMKIND_NM
+			, C.SL_CATE1_CD AS CCATEGORY_L
+			, C.SL_CATE2_CD AS CCATEGORY_M
+			, C.SL_CATE3_CD AS CCATEGORY_S
+			, C.SL_CATE4_CD AS CCATEGORY_D
+
+			, MAIN_COLOR_CD
+			, SELF_GOODS_YN
+			, (SELECT COLOR_ENM FROM TB_COLOR WHERE COLOR_CD = MAIN_COLOR_CD) AS MAIN_COLOR_ENM
+			, (SELECT GROUP_CONCAT(opt_cd1 order BY cast(REPLACE(OPT_CD, '-', '') as unsigned) SEPARATOR ',')
+				FROM (
+				    SELECT
+				        GOODS_CD, opt_cd, opt_cd1
+				        , ROW_NUMBER() OVER (PARTITION BY opt_cd1 ORDER BY opt_cd ) AS RankNo
+				    FROM tb_option WHERE GOODS_CD = a.GOODS_CD
+				) T WHERE RankNo = 1
+			 ) as all_opt_cd1
+			, CASE
+				WHEN SUBSTRING(A.ITEMKIND_CD, 1, 2) = '08' || SUBSTRING(A.ITEMKIND_CD, 1, 2) = '09'
+					|| SUBSTRING(A.ITEMKIND_CD, 1, 2) = '10' || SUBSTRING(A.ITEMKIND_CD, 1, 2) = '11'
+					|| SUBSTRING(A.ITEMKIND_CD, 1, 2) = '12' || SUBSTRING(A.ITEMKIND_CD, 1, 2) = '13'
+			  	THEN 'Y'
+			  	ELSE 'N'
+			  END KIDS_YN
+		FROM TB_GOODS A
+			LEFT OUTER JOIN TB_ITEMKIND B ON A.ITEMKIND_CD = B.ITEMKIND_CD
+ 			LEFT OUTER JOIN SHOPLINKER_CATE C ON B.ITEMKIND_CD = C.ITEMKIND_CD AND A.BRAND_CD = C.BRAND_CD
+		WHERE A.GOODS_CD = #{goodsCd}
+		AND A.SELF_GOODS_YN = 'Y'
+		limit 1
+
+	</select>
+
+	<!-- 상품등록-상품 이미지 조회 -->
+	<select id="getGoodsImageList" parameterType="ShoplinkerGoods" resultType="ShoplinkerGoods">
+		/* TsaShoplinker.getGoodsImageList */
+		SELECT
+			B.GOODS_CD
+		     , B.COLOR_CD
+		     , C.COLOR_KNM
+		     , B.DISP_ORD
+		     , B.SYS_IMG_NM
+		     , B.DEFAULT_IMG_YN
+		     , B.EXTMALL_IMG_YN
+		FROM   TB_GOODS A INNER JOIN TB_GOODS_IMG B ON A.GOODS_CD = B.GOODS_CD
+				LEFT OUTER JOIN TB_COLOR C ON B.COLOR_CD = C.COLOR_CD
+		WHERE A.GOODS_CD = #{goodsCd}
+		<if test='extmallImgYn != null and extmallImgYn == "Y"'>
+			AND A.MAIN_COLOR_CD = B.COLOR_CD
+        	AND (B.DEFAULT_IMG_YN = 'Y' OR B.EXTMALL_IMG_YN = 'Y')
+        </if>
+        <if test='colorListYn != null and colorListYn == "Y"'>
+
+        </if>
+		ORDER BY B.COLOR_CD, B.DISP_ORD
+	</select>
+
+	<!-- 상품등록-상품 사이즈 조회 -->
+	<select id="getGoodsSizeList" parameterType="ShoplinkerGoods" resultType="ShoplinkerGoods">
+		/* TsaShoplinker.getGoodsSizeList */
+		SELECT
+			 A.OPT_CD2
+			, B.TYPECD as SIZE_TYPECD
+			, B.VALUE1 as SIZE_VALUE1
+			, B.VALUE2 as SIZE_VALUE2
+			, B.VALUE3 as SIZE_VALUE3
+			, B.VALUE4 as SIZE_VALUE4
+			, B.VALUE5 as SIZE_VALUE5
+
+		FROM TB_OPTION A INNER JOIN TB_IF_MEASUREMENT B ON A.OPT_CD = B.SKUCODE /*A.PRODUCT_NO = B.PRODUCTNO*/
+		WHERE A.GOODS_CD = #{goodsCd}
+		GROUP BY A.OPT_CD2, B.TYPECD, B.VALUE1, B.VALUE2, B.VALUE3, B.VALUE4, B.VALUE5
+		ORDER BY A.OPT_CD2
+	</select>
+
+	<!-- 상품등록-고시정보 -->
+	<select id="getGoodsNotiList" parameterType="ShoplinkerGoods" resultType="ShoplinkerGoods">
+		/* TsaShoplinker.getGoodsNotiList */
+		SELECT
+			A.GOODS_CD as partner_product_id
+			, A.GOODS_NM
+			/*, B.NI_CLSF_CD
+			, B.NI_ITEM_CD */
+			, C.NI_CLSF_CD
+			, C.NI_ITEM_CD
+			, C.EXTMALL_NI_CLSF_CD as lclass_id
+			, C.EXTMALL_NI_ITEM_CD as item_seq
+			, B.NI_CONTENT as item_info
+			, FN_GET_CODE_NM('G005', C.NI_ITEM_CD) AS NI_CONTENT_INFO
+			, A.SELF_GOODS_YN = 'Y'
+		FROM TB_GOODS A INNER JOIN TB_GOODS_NOTI_INFO B INNER JOIN TB_EXTMALL_NOTI_INFO C
+		ON A.GOODS_CD = B.GOODS_CD
+		AND B.NI_CLSF_CD = C.NI_CLSF_CD
+		AND B.NI_ITEM_CD = C.NI_ITEM_CD
+		AND A.GOODS_CD = #{goodsCd}
+	</select>
+
+	<!-- 상품등록-인증정보 -->
+	<select id="getCert" parameterType="ShoplinkerGoods" resultType="ShoplinkerGoods">
+		/* TsaShoplinker.getCert */
+		SELECT
+			B.GOODS_CD AS PARTNER_PRODUCT_ID
+			, CASE B.CERT_ORGAN_NAME
+				WHEN NULL THEN '.' WHEN '' THEN '.'
+				ELSE B.CERT_ORGAN_NAME
+			 END AS CERT_ORGAN
+			, IFNULL(B.CERT_NUM, '') AS CERT_NO
+			, A.SELF_GOODS_YN
+
+			, B.CERT_TARGET_GB
+			, FN_GET_CODE_NM('G083', CERT_TARGET_GB) AS CERT_TARGET_NM
+			, CERT_FORM_GB
+			, FN_GET_CODE_NM('G084', CERT_FORM_GB) AS CERT_FORM_NM
+			, CERT_TYPE
+			, FN_GET_CODE_NM('G081', CERT_TYPE) AS CERT_TYPE_NM
+			, CERT_NUM
+			, CERT_STATE
+			, CERT_DIV
+			, CERT_ORGAN_NAME
+			, CERT_DT
+		FROM TB_GOODS A INNER JOIN TB_GOODS_SAFE_NO B
+		ON A.GOODS_CD = B.GOODS_CD
+		WHERE A.GOODS_CD = #{goodsCd}
+	</select>
+
+	<!-- 상품등록-상품 목록 건수 -->
+	<select id="getGoodsSendListCount" parameterType="ShoplinkerSearch" resultType="int">
+		/* TsaShoplinker.getGoodsSendListCount */
+		SELECT COUNT(1) FROM
+		(
+			SELECT
+				 B.GOODS_NM
+				, B.BRAND_CD
+				, A.*
+				, fn_get_user_nm(A.REG_NO) AS REG_NM
+			FROM SHOPLINKER_SYNC_HST A
+				LEFT OUTER JOIN TB_GOODS B ON A.GOODS_CD = B.GOODS_CD
+
+			WHERE 1=1
+			<include refid="getListCondition_sql"/>
+		) A
+
+
+	</select>
+
+	<!-- 상품등록-상품 목록 -->
+	<select id="getGoodsSendList" parameterType="ShoplinkerSearch" resultType="ShoplinkerGoods">
+		/* TsaShoplinker.getGoodsSendList */
+		SELECT * FROM
+		(
+			SELECT
+				 B.GOODS_NM
+				, B.BRAND_CD
+				, A.*
+				, fn_get_user_nm(A.REG_NO) AS REG_NM
+			FROM SHOPLINKER_SYNC_HST A
+				LEFT OUTER JOIN TB_GOODS B ON A.GOODS_CD = B.GOODS_CD
+
+			WHERE 1=1
+			<include refid="getListCondition_sql"/>
+		) A
+
+		ORDER BY REG_DT DESC
+		LIMIT #{pageable.limitStartRow} ,  #{pageable.pageSize}
+	</select>
+
+	<!-- 상품등록-상품 목록 엑셀 -->
 	<select id="getGoodsSendExcelList" parameterType="ShoplinkerSearch" resultType="paramMap">
-		/* TsaShoplinkerDao.getGoodsSendExcelList */
+		/* TsaShoplinker.getGoodsSendExcelList */
 		SELECT
 			 IFNULL(B.GOODS_NM, '') AS GOODS_NM
 			, IFNULL(B.BRAND_CD, '') AS BRAND_CD
@@ -31,7 +264,107 @@
 		ORDER BY REG_DT DESC
 	</select>
 
-	<!-- 상품 목록 조건 정보 -->
+	<!-- 재고-단품 등록 -->
+	<insert id="insertStockOption" parameterType="ShoplinkerGoods">
+		/* TsaShoplinker.insertStockOption */
+		INSERT INTO SHOPLINKER_STOCK (
+		    GOODS_CD
+			, OPT_CD
+			, STOCK_QTY
+			, SEND_YN
+			, SEND_DT
+			, REG_DT
+			, UPD_DT
+		)
+		VALUES (
+			#{goodsCd}
+			, #{optCd}
+			, #{quantity}
+			, 'Y'
+			, now()
+			, now()
+			, now()
+		) ON DUPLICATE KEY UPDATE
+		  	UPD_DT = now()
+	</insert>
+
+	<!-- 재고전송-목록 건수 -->
+	<select id="getStockListCount" parameterType="ShoplinkerSearch" resultType="int">
+		/* TsaShoplinker.getStockListCount */
+		SELECT COUNT(1) FROM (
+			SELECT
+				A.*
+				, B.GOODS_NM
+				, B.BRAND_CD
+				, C.OPT_CD1
+				, C.OPT_CD2
+			FROM
+				SHOPLINKER_SYNC_HST A
+				INNER JOIN TB_GOODS B ON A.GOODS_CD = B.GOODS_CD
+				INNER JOIN TB_OPTION C ON A.GOODS_CD = C.GOODS_CD AND A.OPT_CD = C.OPT_CD
+			WHERE A.API_TYPE = 'STOCK'
+
+			<include refid="getListCondition_sql"/>
+		) A
+	</select>
+
+	<!-- 재고전송-목록 -->
+	<select id="getStockList" parameterType="ShoplinkerSearch" resultType="ShoplinkerGoods">
+		/* TsaShoplinker.getStockList */
+		SELECT * FROM
+		(
+			SELECT
+				A.API_TYPE
+				, A.API_RESULT
+				, A.API_MESSAGE
+				, A.GOODS_CD
+				, A.OPT_CD
+				, A.QTY as QUANTITY
+				, A.REG_DT
+				, B.GOODS_NM
+				, B.BRAND_CD
+				, C.OPT_CD1
+				, C.OPT_CD2
+			FROM
+				SHOPLINKER_SYNC_HST A
+				INNER JOIN TB_GOODS B ON A.GOODS_CD = B.GOODS_CD
+				INNER JOIN TB_OPTION C ON A.GOODS_CD = C.GOODS_CD AND A.OPT_CD = C.OPT_CD
+			WHERE A.API_TYPE = 'STOCK'
+
+			<include refid="getListCondition_sql"/>
+		) A
+		ORDER BY A.REG_DT DESC, A.GOODS_CD, A.OPT_CD
+
+		LIMIT #{pageable.limitStartRow} ,  #{pageable.pageSize}
+	</select>
+
+	<!-- 재고- 목록 엑셀 -->
+	<select id="getStockExcelList" parameterType="ShoplinkerSearch" resultType="paramMap">
+	/* TsaShoplinker.getStockList */
+		SELECT
+			A.API_TYPE
+			, A.API_RESULT
+			, A.API_MESSAGE
+			, A.GOODS_CD
+			, A.OPT_CD
+			, A.QTY as QUANTITY
+			, A.REG_DT
+			, B.GOODS_NM
+			, B.BRAND_CD
+			, C.OPT_CD1
+			, C.OPT_CD2
+		FROM
+			SHOPLINKER_SYNC_HST A
+			INNER JOIN TB_GOODS B ON A.GOODS_CD = B.GOODS_CD
+			INNER JOIN TB_OPTION C ON A.GOODS_CD = C.GOODS_CD AND A.OPT_CD = C.OPT_CD
+		WHERE A.API_TYPE = 'STOCK'
+		<include refid="getListCondition_sql"/>
+
+		ORDER BY A.REG_DT DESC, A.GOODS_CD, A.OPT_CD
+
+	</select>
+
+	<!-- 상품/재고 목록 조건 정보 -->
 	<sql id="getListCondition_sql">
 
 		        <if test="goodsCd != null and goodsCd != ''">
@@ -48,10 +381,10 @@
 		        AND UPPER(B.GOODS_NM) LIKE CONCAT('%',UPPER(#{goodsNm}),'%')
 		        </if>
 		        <if test="brandCd != null and brandCd != ''">
-		        AND B.BRAND_CD = #{brandCd}
+		        AND BRAND_CD = #{brandCd}
 		        </if>
 		        <if test="multiBrand != null and multiBrand != ''">
-		        AND B.BRAND_CD IN
+		        AND BRAND_CD IN
 		            <foreach collection="multiBrand" item="item" index="index"  open="(" close=")" separator=",">
 		        #{item}
 		            </foreach>
@@ -79,35 +412,151 @@
 
 	</sql>
 
+	<!-- 샵링커주문수집-목록 건수 cnt -->
+	<select id="getShoplinkerOrderListCount" parameterType="ShoplinkerOrder" resultType="int">
+		/* TsaShoplinker.getShoplinkerOrderListCount */
+		select count(1) from (
+			SELECT
+				A.*
+				, B.VENDOR_ID
+				, B.EXTMALL_ID
+				, B.EXTMALL_NM
+				, B.AGENT_ORDER_ID
+				, B.EXTMALL_ORDER_ID
+				, IFNULL(B.UPLOAD_STAT, 'G021_50') AS UPLOAD_STAT
+				, B.UPLOAD_FAIL_CD
+				, B.UPLOAD_FAIL_REASON
+				, IFNULL(B.ORD_NO, '') AS ORD_NO
+				, B.DELV_ADDR_SQ
+			FROM SHOPLINKER_ORDER A
+				LEFT OUTER JOIN TB_EXTMALL_ORDER_UPLOAD B
+					ON A.SHOPLINKER_ORDER_ID = B.AGENT_ORDER_ID
 
-	<select id="getStockExcelList" parameterType="ShoplinkerSearch" resultType="paramMap">
-	/* TscShoplinkerDao.getStockList */
+			WHERE 1=1
+			<include refid="getSlkOrderListCondition_sql"/>
+		) A
+
+	</select>
+
+	<!-- 샵링커주문수집-목록 -->
+	<select id="getShoplinkerOrderList" parameterType="ShoplinkerOrder" resultType="ShoplinkerOrder">
+		/* TsaShoplinker.getShoplinkerOrderList */
+		SELECT * FROM
+		(
+			SELECT
+				A.*
+				, B.VENDOR_ID
+				, B.EXTMALL_ID
+				, B.EXTMALL_NM
+				, B.AGENT_ORDER_ID
+				, B.EXTMALL_ORDER_ID
+				, IFNULL(B.UPLOAD_STAT, 'G021_50') AS UPLOAD_STAT
+				, B.UPLOAD_FAIL_CD
+				, B.UPLOAD_FAIL_REASON
+				, IFNULL(B.ORD_NO, '') AS ORD_NO
+				, B.DELV_ADDR_SQ
+				, B.REG_DT AS EXTMALL_REG_DT
+			FROM SHOPLINKER_ORDER A
+				LEFT OUTER JOIN TB_EXTMALL_ORDER_UPLOAD B
+					ON A.SHOPLINKER_ORDER_ID = B.AGENT_ORDER_ID
+			WHERE 1=1
+
+			<include refid="getSlkOrderListCondition_sql"/>
+		) A
+
+		ORDER BY EXTMALL_REG_DT, REG_DT DESC
+		LIMIT #{pageable.limitStartRow} ,  #{pageable.pageSize}
+
+	</select>
+
+	<!-- 샵링커주문수집-상세 -->
+	<select id="getShoplinkerOrderInfo" parameterType="ShoplinkerOrder" resultType="ShoplinkerOrder">
+		/* TsaShoplinker.getShoplinkerOrderInfo */
 		SELECT
-			A.API_TYPE
-			, A.API_RESULT
-			, A.API_MESSAGE
-			, A.GOODS_CD
-			, A.OPT_CD
-			, A.QTY as QUANTITY
-			, A.REG_DT
-			, B.GOODS_NM
-			, B.BRAND_CD
-			, C.OPT_CD1
-			, C.OPT_CD2
-		FROM
-			SHOPLINKER_SYNC_HST A
-			INNER JOIN TB_GOODS B ON A.GOODS_CD = B.GOODS_CD
-			INNER JOIN TB_OPTION C ON A.GOODS_CD = C.GOODS_CD AND A.OPT_CD = C.OPT_CD
-		WHERE A.API_TYPE = 'STOCK'
-		ORDER BY A.REG_DT DESC, A.GOODS_CD, A.OPT_CD
+			ORDER_IF_IDX
+			, SHOPLINKER_ORDER_ID
+			, MALL_ORDER_ID
+			, MALL_NAME
+			, BAESONG_STATUS
+			, ORDER_NAME
+			, ORDER_TEL
+			, ORDER_CEL
+			, ORDER_EMAIL
+			, RECEIVE
+			, RECEIVE_TEL
+			, RECEIVE_CEL
+			, RECEIVE_ZIPCODE
+			, RECEIVE_ADDR
+			, BAESONG_TYPE
+			, BAESONG_BI
+			, DELIVERY_MSG
+			, ORDER_PRODUCT_ID
+			, SHOPLINKER_PRODUCT_ID
+			, PARTNER_PRODUCT_ID
+			, PRODUCT_NAME
+			, QUANTITY
+			, ORDER_PRICE
+			, SALE_PRICE
+			, SUPPLY_PRICE
+			, SKU
+			, STR_TO_DATE(ORDERDATE, '%Y%m%d%H%i%S') as ORDERDATE
+			, STR_TO_DATE(ORDER_REG_DATE, '%Y%m%d%H%i%S') as ORDER_REG_DATE
+			, DELIVERY_INVOICE
+			, ORDER_SEQ
+			, TOTAL_COUNT
+			, TOTAL_PAGE
+			, TOTAL_STANDARD_COUNT
+			, CURRENTLY_PAGE
+			, CURRENTLY_COUNT
+			, SELLER_ID
+			, ONLY_SKU
+			, ADD_SKU
+			, MALL_ID
+			, DIS_PRICE_MALL
+			, DIS_PRICE_SELLER
+			, DIS_PRICE_COUPON
+			, DIS_PRICE_POINT
+			, DISTRIBUTION_DELIVERY
+			, SKU_MATCH_CODE
+			, SKU_BARCODE
+			, ORDER_CUSTOMS_NUMBER
+			, ORDER_INPUT_TYPE
+			, SUPPLY_ID
+			, DELIVERY
+			, ORDER_USER_ID
+			, CRSPIK_USE
+			, SHIP_NO
+			, DEAL_NO
+			, EXCHANGE_ORDER_YN
+			, ORDER_MAIN_KEY
+			, PAN_TYPE
+			, CHANNEL_TYPE
+			, SHIP_RSV_DATE
+			, ORDER_FLAG
+			, EXTMALL_REG_YN
+			, REG_DT
+		FROM SHOPLINKER_ORDER
+		WHERE SHOPLINKER_ORDER_ID = #{shoplinkerOrderId}
+	</select>
 
-		<include refid="getListCondition_sql"/>
+	<!-- 제휴몰 주문등록 상세 -->
+	<select id="getExtmallOrderInfo" parameterType="String" resultType="ExtmallOrder">
+		/* TsaShoplinker.getExtmallOrderInfo */
+		SELECT
+			A.*
+			, FN_GET_USER_NM(A.REG_NO) AS REG_NM
+			, FN_GET_CODE_NM('G021', UPLOAD_STAT) AS UPLOAD_STAT_NM
+			, FN_GET_CODE_NM('G022', UPLOAD_FAIL_CD) AS UPLOAD_FAIL_NM
+			, FN_GET_CODE_NM('G003', A.VENDOR_ID) AS VENDOR_NM
+		FROM TB_EXTMALL_ORDER_UPLOAD A
+		WHERE AGENT_ORDER_ID = #{agentOrderId}
+		AND A.UPLOAD_GB = 'S'
 
 	</select>
 
-	<!-- 샵링커주문수집-목록 -->
+	<!-- 샵링커주문수집-목록엑셀 -->
 	<select id="getOrderExcelList" parameterType="ShoplinkerOrder" resultType="paramMap">
-		/* TscShoplinkerDao.getShoplinkerOrderList */
+		/* TsaShoplinker.getOrderExcelList */
 		SELECT * FROM
 		(
 			SELECT
@@ -184,10 +633,83 @@
 	        </if>
 	</sql>
 
+	<!-- 송장전송-전송 목록 건수 cnt -->
+	<select id="getSendInvoiceListCount" parameterType="ShoplinkerInvoice" resultType="int">
+		/* TsaShoplinker.getSendInvoiceListCount */
+		select count(1) from (
+			SELECT
+				OD.ORD_NO
+				, OD.ORD_DTL_NO
+				, (SELECT SHIP_COMP_NM FROM TB_SHIP_COMPANY S WHERE S.SHIP_COMP_CD = OD.SHIP_COMP_CD ) AS SHIP_COMP_NM
+				, OD.SHIP_COMP_CD AS DELIVERY_CODE-- 배송업체(택배사코드)
+				, OD.INVOICE_NO AS DELIVERY_INVOICE-- 송장번호
+
+				, OD.VENDOR_ID -- 외부몰벤더ID
+				, OD.EXTMALL_ID -- 외부몰ID(외부몰)
+				, OD.AGENT_ORDER_ID -- 에이전트주문번호
+				, OD.EXTMALL_ORDER_ID -- 외부몰주문번호
+				, OD.DELV_ASSIGN_STAT -- 출고지정상태(P:대기,Y:수락,N:거부)
+				, OD.ORD_EXCH_GB -- 주문교환구분(O:주문,E:교환)
+				, OD.ORD_DTL_STAT -- 주문상세상태(공통코드G013)
+				, FN_GET_CODE_NM('G013', OD.ORD_DTL_STAT) AS ORD_DTL_STAT_NM
+				, OD.DELV_STDT
+
+				, SL.API_RESULT
+				, SL.API_MESSAGE
+				, SL.XML_TXT
+				, FN_GET_USER_NM(SL.REG_NO) AS REG_NM
+			FROM
+				TB_ORDER_DETAIL OD
+				LEFT OUTER JOIN SHOPLINKER_SYNC_HST SL ON OD.ORD_DTL_NO = SL.ORD_DTL_NO AND SL.API_TYPE = 'INVOICE'
+			WHERE OD.VENDOR_ID = 'G003_V001'
+			ORDER BY OD.ORD_NO, OD.ORD_DTL_NO
+		) A
+		WHERE 1=1
+		<include refid="getSlkInvoiceCondition_sql"/>
+
+	</select>
 
 	<!-- 송장전송-전송 목록 -->
+	<select id="getSendInvoiceList" parameterType="ShoplinkerInvoice" resultType="ShoplinkerInvoice">
+		/* TsaShoplinker.getSendInvoiceList */
+		SELECT * FROM
+		(
+			SELECT
+				OD.ORD_NO
+				, OD.ORD_DTL_NO
+				, (SELECT SHIP_COMP_NM FROM TB_SHIP_COMPANY S WHERE S.SHIP_COMP_CD = OD.SHIP_COMP_CD ) AS SHIP_COMP_NM
+				, OD.SHIP_COMP_CD AS DELIVERY_CODE-- 배송업체(택배사코드)
+				, OD.INVOICE_NO AS DELIVERY_INVOICE-- 송장번호
+
+				, OD.VENDOR_ID -- 외부몰벤더ID
+				, OD.EXTMALL_ID -- 외부몰ID(외부몰)
+				, OD.AGENT_ORDER_ID -- 에이전트주문번호
+				, OD.EXTMALL_ORDER_ID -- 외부몰주문번호
+				, OD.DELV_ASSIGN_STAT -- 출고지정상태(P:대기,Y:수락,N:거부)
+				, OD.ORD_EXCH_GB -- 주문교환구분(O:주문,E:교환)
+				, OD.ORD_DTL_STAT -- 주문상세상태(공통코드G013)
+				, FN_GET_CODE_NM('G013', OD.ORD_DTL_STAT) AS ORD_DTL_STAT_NM
+				, OD.DELV_STDT
+
+				, SL.API_RESULT
+				, SL.API_MESSAGE
+				, SL.XML_TXT
+				, SL.REG_DT
+			FROM
+				TB_ORDER_DETAIL OD
+				LEFT OUTER JOIN SHOPLINKER_SYNC_HST SL ON OD.ORD_DTL_NO = SL.ORD_DTL_NO AND SL.API_TYPE = 'INVOICE'
+			WHERE OD.VENDOR_ID = 'G003_V001'
+			ORDER BY OD.ORD_NO, OD.ORD_DTL_NO
+		) A
+		WHERE 1=1
+		<include refid="getSlkInvoiceCondition_sql"/>
+
+		LIMIT #{pageable.limitStartRow} ,  #{pageable.pageSize}
+	</select>
+
+	<!-- 송장전송-전송 목록 엑셀 -->
 	<select id="getInvoiceExcelList" parameterType="ShoplinkerInvoice" resultType="paramMap">
-		/* TscShoplinkerDao.getInvoiceExcelList */
+		/* TsaShoplinker.getInvoiceExcelList */
 		SELECT * FROM
 		(
 			SELECT
@@ -234,8 +756,15 @@
             ]]>
             </if>
 
-	        <if test="apiResult != null and apiResult != ''">
+            <if test="extmallId != null and extmallId != ''">
+	        AND EXTMALL_ID = #{extmallId}
+            </if>
+
+	        <if test='apiResult != null and apiResult != "" and apiResult != "default"'>
 	        AND API_RESULT = #{apiResult}
+	        </if>
+	        <if test='apiResult != null and apiResult == "default"'>
+	        AND API_RESULT != 'true'
 	        </if>
 
 			<if test='conditionList != null and conditionList.length>0'>

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

@@ -48,7 +48,7 @@
 					<tr>
 						<th>제목<em class="star"></em></th>
 						<td>
-							<input type="text" class="w150" name="title" value="" required="required" data-valid-name="제목"/>
+							<input type="text" class="w300" name="title" value="" required="required" data-valid-name="제목"/>
 						</td>
 					</tr>
 					<tr>

+ 300 - 0
src/main/webapp/WEB-INF/views/display/SearchKeywordForm.html

@@ -0,0 +1,300 @@
+<!DOCTYPE html>
+<html lang="ko"
+	xmlns:th="http://www.thymeleaf.org">
+<!--
+ *******************************************************************************
+ * @source  : SearchKeywordForm.html
+ * @desc    : 검색키워드관리 Page
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2020 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.07.01   bin2107     최초 작성
+  *******************************************************************************
+ -->
+	<div id="main">
+		<!-- 메인타이틀 영역 -->
+		<div class="main-title">
+		</div>
+		<!-- //메인타이틀 영역 -->
+		<!-- 메뉴 설명 -->
+		<div class="infoBox menu-desc">
+		</div>
+		<!-- 검색조건 영역 -->
+		<div class="panelStyle">
+			<!-- TITLE -->
+			<div class="panelTitle">
+<!--				<h3><i class="fa fa-info-circle"></i>아래 검색조건 중 하나를 꼭 입력해 주세요.</h3>-->
+			</div>
+			<!-- //TITLE -->
+			<div class="panelContent">
+			
+			<form id="searchForm" name="searchForm" action="#" th:action="@{'/display/search/keyword/list'}">
+				<table class="frmStyle">
+					<colgroup>
+						<col style="width:10%;"/>
+						<col style="width:40%;"/>
+						<col style="width:10%;"/>
+						<col/>
+					</colgroup>
+					<tr>
+						<th>등록일</th>
+						<td colspan="3" id="sellTerms">
+						</td>
+					</tr>
+				</table>
+				<ul class="panelBar">
+					<li class="center">
+						<button type="button" class="btn btn-default btn-lg" id="btnInit">초기화</button>
+						<button type="button" class="btn btn-success btn-lg" id="btnSearch">조회</button>
+					</li>
+				</ul>
+			</form>
+			</div>
+		</div>
+		<!-- //검색조건 영역 -->
+		
+		<!-- 리스트 영역 -->
+		<div class="panelStyle">
+			<div id="gridList" style="width: 100%; height: 450px;" class="ag-theme-balham"></div>
+		</div>
+		<!-- //리스트 영역 -->
+		<!-- 등록/수정 -->
+		<div class="panelStyle">
+			<form id="detailForm" name="detailForm" action="#" >
+				<table class="frmStyle">
+					<colgroup>
+						<col style="width:10%;"/>
+						<col style="width:20%;"/>
+						<col style="width:10%;"/>
+						<col style="width:20%;"/>
+						<col style="width:10%;"/>
+						<col/>
+					</colgroup>
+					<tr>
+						<td colspan='6'>키워드등록(상세)</td>
+					</tr>
+					<tr>
+						<th>키워드번호</th>
+						<td>
+							<input type="text" class="w100" name="keywordSq" maxlength="20" placeholder="자동부여" readonly="readonly"/>
+						</td>
+						<th>키워드<em class="required" title="필수"></em></th>
+						<td>
+							<input type="text" class="w150" name="keyword" maxlength="20" required="required" data-valid-name="키워드"/>
+						</td>
+						<th>링크URL<em class="required" title="필수"></em></th>
+						<td>
+							<input type="text" class="w150" name="linkUrl" maxlength="20" required="required" data-valid-name="링크URL"/>
+						</td>
+					</tr>
+					<tr>
+						<th>기간<i class="required" title="필수"></i></th>
+						<td colspan="3">
+							<input type="text" class="schDate w100" name="dispStdt" maxlength="10" th:value="${#calendars.format(#calendars.createNow(), 'yyyy-MM-dd')}"/>
+							~
+							<input type="text" class="schDate w100" name="dispEddt" maxlength="10" th:value="${#calendars.format(#calendars.createNow(), 'yyyy-MM-dd')}"/>
+						</td>
+					</tr>
+				</table>
+				<ul class="panelBar">
+					<li class="center">
+						<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>
+			</form>
+		</div>
+	</div>
+<script type="text/javascript" src="/ux/plugins/gaga/gaga.kollus.js"></script>
+<script th:inline="javascript">
+/*<![CDATA[*/
+	var videoGbList = {'Y':'유투브', 'M':'MP4'};
+	// specify the columns
+	var columnDefs = [
+		{headerName: 'No', width: 60, cellClass: 'text-center', valueGetter: function(params) { return params.node.rowIndex + 1 }},
+		{headerName: "키워드번호", field: "keywordSq", width: 150, cellClass: 'text-center'},
+		{headerName: "키워드", field: "keyword", width: 300, cellClass: 'text-center',
+			cellRenderer: function(params) { return '<a href="javascript:void(0);">' + params.value + '</a>'; }
+		},
+		{headerName: "링크URL", field: "linkUrl", width: 300, cellClass: 'text-center'},
+		{headerName: "시작일", field: "dispStdt", width:150, cellClass: 'text-center',
+			cellRenderer: function(params) { return gagaAgGrid.toDateFormat(params.value); }
+		},
+		{headerName: "종료일", field: "dispEddt", width:150, cellClass: 'text-center',
+			cellRenderer: function(params) { return gagaAgGrid.toDateFormat(params.value); }
+		},
+		{headerName: "등록자", field: "regNm", width:90, cellClass: 'text-center'},
+		{headerName: "등록일자", field: "regDt", width:150, cellClass: 'text-center',
+			cellRenderer: function(params) { return gagaAgGrid.toDateFormat(params.value); }
+		},
+		{headerName: "수정자", field: "updNm", width:90, cellClass: 'text-center'},
+		{headerName: "수정일자", field: "updDt", width:150, cellClass: 'text-center',
+			cellRenderer: function(params) { return gagaAgGrid.toDateFormat(params.value); }
+		}
+	];
+	
+	// Get GridOptions
+	var gridOptions = gagaAgGrid.getGridOptions(columnDefs);
+	
+	gridOptions.rowSelection = 'multiple';
+	gridOptions.suppressRowClickSelection = true;
+	
+	// 상품코드 셀 클릭
+	gridOptions.onCellClicked = function(event) {
+		if (event.colDef.field == "keyword"){
+			var formId = '#detailForm';
+			$(formId + " input[name=keywordSq]").val(event.data.keywordSq);
+			$(formId + " input[name=keyword]").val(event.data.keyword);
+			$(formId + " input[name=linkUrl]").val(event.data.linkUrl);
+			$(formId + " input[name=dispStdt]").val(event.data.dispStdt);
+			$(formId + " input[name=dispEddt]").val(event.data.dispEddt);
+		}
+	}
+	
+	// 신규 버튼 클릭
+	$("#btnNew").on('click', function() {
+		$("#detailForm")[0].reset();
+		$("#detailForm input[name=videoSq]").val('');
+		$("#detailForm input[name=goodsCd]").prop("disabled", false);
+		$("#detailForm select[name=videoGb]").prop("disabled", false);
+		$('#youtubeArea').show();
+		$('#fileArea').hide();
+	});
+	
+	// 조회
+	$('#btnSearch').on('click', function() {
+		$("#goodsCd").val('');
+		$("#goodsNm").val('');
+		$("#goodsNum").val('');
+		$("#supplyGoodsCd").val('');
+		$("#"+$("#searchForm select[name=keyWord]").val()).val($("#searchForm input[name=searchTxt]").val());
+		
+		if(!fnConditionCheck()) return;
+		
+		
+		// Fetch data
+		gagaAgGrid.fetch($('#searchForm').prop('action'), gridOptions, '#searchForm');
+		$("#btnNew").click();
+	});
+	
+	//검색 조건 확인
+	var fnConditionCheck = function(){
+		var form = document.searchForm;
+
+		var searchFlag = false;
+		var cnt = 0;
+
+		for (i = 0; i < form.elements.length; i++ ) {
+			var el = form.elements[i];
+
+			if ($(el).prop("type") == "text" || ($(el).prop("type") == "select-one" && el.name != "search" && el.name != "pageSize" && el.name != "keyWord")) {
+				if (!(el.value == null || el.value == "")) {
+					cnt++;
+				}
+			}
+		}
+		if(cnt > 0) searchFlag = true;
+
+		
+		if(searchFlag == false){
+			mcxDialog.alert("검색조건을 입력하세요.");
+			return false;
+		}
+		
+		// 기간 값 체크
+		if (!fnCalendarDateValidation('#sellTerms', 'stDate', 'edDate')){
+			return false;
+		}
+
+		return true;
+	}
+	
+	// 검색조건 초기화
+	$('#btnInit').on('click', function() {
+		$("#searchForm")[0].reset();
+	});
+	
+	// 동영상 저장
+	$("#btnSave").on('click', function() {
+		
+		var formId = '#detailForm';
+		var keywordSq = $(formId + " input[name=keywordSq]").val();
+		var keyword = $(formId + " input[name=keyword]").val();
+		var linkUrl = $(formId + " input[name=linkUrl]").val();
+
+		// 날짜 체크
+		if (gagajf.isNull($('#detailForm input[name=dispStdt]').val())) {
+			mcxDialog.alertC('시작일자를 입력해 주세요.', {
+				sureBtnText: "확인",
+				sureBtnClick: function() {
+					$('#detailForm input[name=dispStdt]').focus();
+				}
+			});
+			return;
+		}
+
+		if (gagajf.isNull($('#detailForm input[name=dispEddt]').val())) {
+			mcxDialog.alertC('종료일자를 입력해 주세요.', {
+				sureBtnText: "확인",
+				sureBtnClick: function() {
+					$('#detailForm input[name=dispEddt]').focus();
+				}
+			});
+			return;
+		}
+		var stDate = $('#detailForm input[name=dispStdt]').val();
+		var edDate = $('#detailForm input[name=dispEddt]').val();
+
+		if (stDate > edDate) {
+			mcxDialog.alert("기간 종료일자는 시작일자 보다 클 수 없습니다.");
+			return;
+		}
+
+		// validation
+		if (!gagajf.validation('#detailForm'))
+			return false;
+		
+		mcxDialog.confirm('저장 하시겠습니까?', {
+			cancelBtnText: "취소",
+			sureBtnText: "확인",
+			sureBtnClick: function(){
+				var data = { keywordSq : keywordSq
+							,keyword : keyword
+							,linkUrl : linkUrl
+							,dispStdt : stDate
+							,dispEddt : edDate
+							};
+				var jsonData = JSON.stringify(data);
+				console.log(data);
+				console.log(jsonData);
+				gagajf.ajaxJsonSubmit('/display/search/keyword/save', jsonData, fnSaveCallback);
+			}
+		})
+	});
+	
+	var fnSaveCallback = function() {
+		$('#btnSearch').click();
+	}
+	
+	// 동영상파일 선택 시
+	$('#detailForm input[name=file]').on('change', function() {
+		var file = this.files[0];
+		gagaKollus.upload('Goods', file, $('input[name=kufKey]'));
+	});
+	
+	$(document).ready(function() {
+		
+		cfnCreateCalendar('#sellTerms', 'stDate', 'edDate', true, '등록일', true);
+		
+		// Create a agGrid
+		gagaAgGrid.createGrid('gridList', gridOptions);
+		
+		//$('#btnSearch').click();
+	});
+/*]]>*/
+</script>
+
+</html>

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

@@ -24,7 +24,6 @@
 		</div>
 		<form id="goodsEpSkipListForm" name="goodsEpSkipListForm" action="#" th:action="@{'/goods/ep/skip/list'}">
 		<input type="hidden" id="searchGb" name="searchGb" />
-		<input type="hidden" id="arrGoodsCd" name="arrGoodsCd" />
  		<!-- 패널 영역1 -->
 		<div class="panelStyle" >
 			<!-- TITLE -->

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

@@ -251,7 +251,7 @@
 	
 	//창종료
 	var fnGoodsRsvtEpSkipListFormClose = function(){
-		uifnPopClose('popupGoodsEpSkip');
+		uifnPopupClose('popupGoodsEpSkip');
 		fnGoodsEpSkipResDeleteCallBack();
 	}
 

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

@@ -116,7 +116,7 @@
 			<!-- 상단버튼 영역  -->
 			<ul class="panelBar">
 				<li class="right">
-					<button type="button" class="btn btn-primary btn-lg" id="reinboundInformSend">재입고알림 발송</button>
+					<!-- <button type="button" class="btn btn-primary btn-lg" id="reinboundInformSend">재입고알림 발송</button> -->
 					검색결과 : <strong><span id="gridRowTotalCount">0</span> 건</strong>&nbsp;
 					쪽번호 <span id="pgNo">0</span>/ <strong id="endPgNo">0</strong>&nbsp;&nbsp;
 					<select id="pageSize" name="pageSize">
@@ -145,20 +145,11 @@
 <script th:inline="javascript">
 /*<![CDATA[*/
 
-	//var toDateStr = new Date().format("YYYYMMDD");
-	var date = new Date();
-	var beforeDay = date.before(0, 0, 15).format("YYYYMMDD");
-		
 	var sessRoleCd = [[${sessionInfo.roleCd}]];
 	var goodsStatList = gagajf.convertToArray([[${goodsStatList}]]);
 	var uploadGoodsUrl = [[${@environment.getProperty('upload.goods.view')}]];
 
 	var columnDefs = [
-		{width: 40, minWidth: 40, cellClass: 'text-right', headerCheckboxSelection: true, filter: false
-			, checkboxSelection: function (params) {
-				return (beforeDay > params.data.reqDt ) ? false : true;
-			}
-		},
 		{headerName: 'No', width: 60, cellClass: 'text-center',
 			valueGetter: function(params) { return cfnGridNumner('searchForm',params.node.rowIndex, 'A');}
 		},
@@ -205,7 +196,9 @@
 				return !gagajf.isNull(params.value) ? params.value.toDate("YYYYMMDDHHmmss").format("YYYY-MM-DD HH:mm:ss") : '';
 			}
 		},
-		{headerName: "수정자", field: "updNm" , width: 100, cellClass: 'text-center'}
+		{headerName: "수정자", field: "updNm" , width: 100, cellClass: 'text-center'},
+		{headerName: "경과일수", field: "pastDays" , width: 100, cellClass: 'text-center', hide: true}
+		
 		
 	];
 	
@@ -411,7 +404,7 @@
 				return false;
 			}
 			
-			if (beforeDay > item.reqDt){
+			if (item.pastDays > 15){
 				chkFlag = true;
 				mcxDialog.alert("요청일이 15일경과한 재입고알림은 발송할 수 없습니다.");
 				return false;

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

@@ -24,8 +24,7 @@
 		</div>
 		<form id="goodsTnmListForm" name="goodsTnmListForm" action="#" th:action="@{'/goods/title/reserve/list'}">
 		<input type="hidden" id="searchGb" name="searchGb" />
-		<input type="hidden" id="arrGoodsCd" name="arrGoodsCd" />
- 		<!-- 패널 영역1 -->
+		 		<!-- 패널 영역1 -->
 		<div class="panelStyle" >
 			<!-- TITLE -->
 			<div class="panelTitle">

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

@@ -748,7 +748,7 @@
 
 		var jsonData = JSON.stringify(data);
 
-		// gagajf.ajaxJsonSubmit($('#moreBetterForm').prop('action'), jsonData, fnMorebetterSaveCollback);
+		gagajf.ajaxJsonSubmit($('#moreBetterForm').prop('action'), jsonData, fnMorebetterSaveCollback);
 	});
 
 	var fnMorebetterSaveCollback = function(result){

+ 288 - 287
src/main/webapp/WEB-INF/views/marketing/ShotDeliveryForm.html

@@ -1,288 +1,289 @@
-<!DOCTYPE html>
-<html lang="ko" xmlns:th="http://www.thymeleaf.org">
-<!--
- *******************************************************************************
- * @source  : ShotDeliveryForm.html
- * @desc    : 총알배송 Page
- *============================================================================
- * SISUN
- * Copyright(C) 2020 TSIT, All rights reserved.
- *============================================================================
- * VER  DATE         AUTHOR      DESCRIPTION
- * ===  ===========  ==========  =============================================
- * 1.0  2021.06.29   sowon        최초 작성
- *******************************************************************************
- -->
- 
- <div id="main">
-	<div class="main-title"></div>
-	<div class="panelStyle" style="height: 750px;">
-		<div class="panelContent">
-			<form id="shotBrandListForm" name="shotBrandListForm" action="#" th:action="@{'/marketing/shot/delivery/brand/list'}" th:method="post">
-				<div class="panelContent">
-					<ul class="panelBar">
-						<!-- <li class="boxContentBtnT" style="margin-left: -20px; margin-right: -23px;">
-							<span class="btnLeft">
-								<button type="button" class="btn btn-warning btn-sm"  id="btnAddRow">행추가</button>
-								<button type="button" class="btn btn-danger btn-sm" id="btnDeleteRow">행삭제</button>
-							</span> 
-						</li> -->
-						<li class="right">
-							<span class="btnRight"> 
-								<button type="button" class="btn btn-success btn-lg" onclick="fnShotBrandSave();">저장</button>
-						   </span>
-					   </li>
-					</ul>
-					<div id="gridListBrand" style="width: 100%; max-height: 230px; height: 230px;" class="ag-theme-balham"></div>
-				</div>
-			</form>
-		</div>
-
-		<div class="panelContent">
-			<div>
-				<h4>
-					브랜드명 : <label id="brandNm"></label>
-				</h4>
-				<div class="aR" style="float: right; margin-top: 10px;">
-					<!-- <button type="button" class="btn btn-Right btn-default btn-lg"onclick="fnGoodsExcelUpload();">엑셀상품추가</button>
-					<button type="button" class="btn btn-default btn-lg" onclick="cfnDownloadSampleFile('SF012');">엑셀상품추가 양식 다운로드</button> -->
-					<button type="button" class="btn btn-default btn-lg" onclick="fnOpenGoodsPopup();">상품추가</button>
-					<button type="button" class="btn btn-danger btn-lg"	onclick="fnDeleteGoods();">선택삭제</button>
-				</div>
-			</div>
-
-			<div id="gridListGoods"	style="width: 100%; max-height: 350px; height: 350px;" class="ag-theme-balham lh60"></div>
-			<ul class="panelBar">
-				<li class="center">
-					<div class="tablePaging" id="brandGoodsPagination"></div>
-				</li>
-			</ul>
-		</div>
-	</div>
-</div>
-<script type="text/javascript" src="/ux/plugins/gaga/gaga.paging.js"></script>
-<script th:inline="javascript">
-	var cornerDispTypeList = gagajf.convertToArray([[${cornerDispTypeList}]]);
-	var goodsStatList =gagajf.convertToArray([[${goodsStatList}]]);
-	// 브랜드 그룹번호 전역변수
-	var _brandGroupNo = '';
-	
-	var columnDefsBrand = [
-		{width: 40, minWidth: 40, cellClass: 'text-center', headerCheckboxSelection: true, checkboxSelection: true, filter: false},
-		{headerName: "브랜드번호"		, field:'brandGroupNo'			, width:150, cellClass: 'text-center', editable: false },
-		{headerName: "브랜드그룹명"			, field:'brandNm'			, width:400, cellClass: 'text-center',
-			cellRenderer: function(params) {return '<a href="javascript:void(0);">' + params.value + '</a>'; },
-			cellEditorParams: { maxlength: 50, required: true }
-		},
-		{headerName: "코너유형"		, field:'cornerDispType'		, width:180, cellClass: 'text-center',
-			cellEditor: 'agRichSelectCellEditor',
-			cellEditorParams: { values: gagaAgGrid.extractValues(cornerDispTypeList) },
-			valueFormatter: function (params) { return gagaAgGrid.lookupValue(cornerDispTypeList, params.value); },
-			valueParser: function (params) { return gagaAgGrid.lookupKey(cornerDispTypeList, params.newValue); }
-		},
-		{headerName: "전시순서"		, field:'dispOrd'				, width:100, cellClass: 'text-right',
-			cellEditor: 'textCellEditor',
-			cellEditorParams: { maxlength: 3, required: true }
-		},
-		{headerName: "등록일"			, field:'regDt'				, width:200, cellClass: 'text-center', editable: false }
-	];
-	
-	var columnDefsGoods = [
-		{width: 40, minWidth: 40, cellClass: 'text-center', headerCheckboxSelection: true, checkboxSelection: true, filter: false},
-		{headerName: "상품코드"	, field:'goodsCd'		, width:150, cellClass: 'text-left'
-			, cellRenderer: function(params) {return '<a href="javascript:void(0);">' + params.value + '</a>'; }
-		},
-		{headerName: "상품명"		, field:'goodsNm'		, width:300, cellClass: 'text-left'},
-		{headerName: "이미지"		, field:'sysImgNm'		, width:100 , height:60, cellClass: 'text-right'
-			,cellRenderer: function(params) {
-				return '<img width="60" src="'+ _goodsUrl+ "/" + params.value + '?RS=60" alt="" onclick="cfnOpenImagePreViewPopup(\'goodsImgView\', \''+ _goodsUrl+ "/" + params.value +'\')" onerror="this.src=\'/image/no.png\';"/>';
-			}
-		},
-		{headerName: "재고"		, field:'stockQtySum'			, width:80 , cellClass: 'text-center'
-			, cellRenderer: function(params) {return !gagajf.isNull(params.value) ? params.value : '0'; }
-		},
-		{headerName: "할인율(%)"		, field:'dcRate'		, width:80 , cellClass: 'text-center'},
-		{headerName: "정상가"		, field:'listPrice'		, width:100, cellClass: 'text-right' , hide : true
-			, valueFormatter: function(params) { return params.value.addComma(); }
-		},
-		{headerName: "판매가"		, field:'currPrice'		, width:100, cellClass: 'text-right'
-			, valueFormatter: function(params) { return params.value.addComma(); }
-		},
-		{headerName: "정상/이월여부", field:'formalGb'		, width:120, cellClass: 'text-center'},
-		{headerName: "상품상태"	, field:'goodsStat'		, width:100, cellClass: 'text-center'
-			, valueFormatter: function(params) { return gagaAgGrid.lookupValue(goodsStatList, params.value); }
-		},
-		{headerName: "업체"		, field:'supplyCompNm'	, width:150, cellClass: 'text-left'},
-		{headerName: "기획전상세"	, field:'planDtlSq'		, width:200, cellClass: 'text-left', hide: true},
-		{headerName: "등록일"		, field:'regDt'			, width:100,  cellClass: 'text-left'
-			, cellRenderer: function(params) { return !gagajf.isNull(params.value) ? params.value.toDate("YYYY-MM-DD HH:MM:SS").format("YYYY-MM-DD") : ''; }
-		},
-	];
-	
-	var gridOptionsBrand = gagaAgGrid.getGridOptions(columnDefsBrand);
-	gridOptionsBrand.suppressRowClickSelection = true;
-	gridOptionsBrand.stopEditingWhenGridLosesFocus = true;
-	gridOptionsBrand.defaultColDef.editable = true;
-	//gridOptionsBrand.rowSelection = 'multiple';
-	
-	var gridOptionsGoods = gagaAgGrid.getGridOptions(columnDefsGoods);
-	gridOptionsGoods.rowSelection = 'multiple';
-	gridOptionsGoods.rowHeight = 60; //이미지가 있을경우 높이 지정해야함.
-	gridOptionsGoods.suppressRowClickSelection = true;
-
-	gridOptionsGoods.onCellClicked = function(event) {
-		if (event.colDef.field == 'goodsCd') {
-			// 상품 상세 팝업
-			cfnOpenGoodsDetailPopup('U',event.data.goodsCd);
-		}
-	}
-
-	// 브랜드 셀 클릭 이벤트
-	gridOptionsBrand.onCellClicked = function(event) {
-		var field = event.colDef.field;
-		if (field != 'brandNm') return;
-
-		fnBindSearch(event.data);
-	}
-
-	// 코너 상품 조회 바인딩
-	var fnBindSearch = function(data) {
-		if (!gagajf.isNull(data.brandNm)) {
-
-			$('#brandNm').html(data.brandNm);
-			_brandGroupNo = data.brandGroupNo;
-
-			fnShotGoodsSearch();
-		}
-	}
-	// 상품 추가 버튼 클릭시 
-	var fnOpenGoodsPopup = function() {
-		var allData = gagaAgGrid.getAllRowData(gridOptionsBrand);
-		if (allData.length < 1 ) {
-			mcxDialog.alert('브랜드가 존재 하지 않습니다.');
-			return;
-		}
-
-		if ($("#brandNm").text() == null || $("#brandNm").text()=='') {
-			mcxDialog.alert('브랜드를 선택해주세요.');
-			return;
-		}
-		cfnOpenGoodsPopup('fnCreateGoods');
-	}
-
-	// 브랜드 조회
-	var fnBrandSearch = function() {
-		var formId = '#shotBrandListForm';
-		gagaAgGrid.fetch($(formId).prop('action'), gridOptionsBrand, formId
-						, function() {
-								$('#gridListGoods').html('');
-								$('#brandNm').html('');
-								gagaAgGrid.createGrid('gridListGoods', gridOptionsGoods);
-				});
-		
-		uifnPopupClose('fnCreateGoods');
-	}
-	
-	// 코너 저장
-	var fnShotBrandSave = function() {
-		var changeData = gagaAgGrid.getChangedData(gridOptionsBrand);
-
-		if (changeData.length < 1) {
-			mcxDialog.alert('변경 된 코너가 없습니다.');
-			return;
-		}
-
-		// Validation
-		if (!gagaAgGrid.validation(gridOptionsBrand, changeData))
-			return;
-
-
-		mcxDialog.confirm('저장 하시겠습니까?', {
-			cancelBtnText: "취소",
-			sureBtnText: "확인",
-			sureBtnClick: function() {
-				var jsonData = JSON.stringify(changeData);
-				gagajf.ajaxJsonSubmit('/marketing/shot/delivery/brand/update', jsonData, fnBrandSearch);
-			}
-		});
-	}
-	
-	// 상품추가
-	var fnCreateGoods = function(result) {
-		if (result.length < 1) return;
-	
-		var oldGoodsList = gagaAgGrid.getAllRowData(gridOptionsGoods);
-		for (var disp = 0; disp < result.length; disp++) {
-			let addChk = true;
-			
-			// 받아온 data for
-			for(let j = 0 ; j < oldGoodsList.length ; j++) {
-				if(oldGoodsList[j].goodsCd == result[disp].goodsCd) {	addChk = false;	}					// 중복체크
-			}
-			
-			if(addChk) {
-				var goods = { brandGroupNo : _brandGroupNo ,
-						      goodsCd : result[disp].goodsCd ,
-						      dispOrd : oldGoodsList.length+1
-						    };
-				oldGoodsList.unshift(goods);
-			}
-		}
-		
-		mcxDialog.confirm('선택하신 상품을 추가 하시겠습니까?', {
-			cancelBtnText: "취소",
-			sureBtnText: "확인",
-			sureBtnClick: function() {
-				var jsonData = JSON.stringify(oldGoodsList);
-				gagajf.ajaxJsonSubmit('/marketing/shot/delivery/goods/save', jsonData, fnShotGoodsSearch);
-			}
-		});
-	}
-
-
-	// 브랜드 상품 조회
-	var fnShotGoodsSearch = function() {
-		uifnPopupClose('popupGoods');
-		var actionUrl = '/marketing/shot/delivery/goods/list';
-		var data = {brandGroupNo:_brandGroupNo};
-		var jsonData = JSON.stringify(data);
-
-		gagajf.ajaxJsonSubmit(actionUrl, jsonData, function(data) {
-			gridOptionsGoods.api.setRowData(data.brandGoodsList);
-		});
-	}
-	
-	//선택삭제
-	var fnDeleteGoods = function() {
-		var removedData = gagaAgGrid.removeRowData(gridOptionsGoods);
-
-		if (removedData.length == 0) {
-			mcxDialog.alert('선택된 행이 없습니다.');
-			return;
-		}
-
-		mcxDialog.confirm('선택된 상품을 삭제하시겠습니까?', {
-			cancelBtnText: "취소",
-			sureBtnText: "확인",
-			sureBtnClick: function() {
-				var jsonData = JSON.stringify(removedData);
-
-				gagajf.ajaxJsonSubmit('/marketing/shot/delivery/goods/delete', jsonData, function() {
-					fnShotGoodsSearch();
-				});
-			}
-		});
-	}
-	
-	// 엑셀상품추가
-	//var fnGoodsExcelUpload = function() {
-	//	cfnExcelUploadPopup('createGoods', 'fnCreatePlanGoodsExcel');
-	//}
-
-
-	$(document).ready(function() {
-		gagaAgGrid.createGrid('gridListBrand', gridOptionsBrand);
-		gagaAgGrid.createGrid('gridListGoods', gridOptionsGoods);
-		fnBrandSearch();
-	});
+<!DOCTYPE html>
+<html lang="ko" xmlns:th="http://www.thymeleaf.org">
+<!--
+ *******************************************************************************
+ * @source  : ShotDeliveryForm.html
+ * @desc    : 총알배송 Page
+ *============================================================================
+ * SISUN
+ * Copyright(C) 2020 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.06.29   sowon        최초 작성
+ *******************************************************************************
+ -->
+ 
+ <div id="main">
+	<!-- 메인타이틀 영역 -->
+	<div class="main-title">
+	</div>
+	<!-- //메인타이틀 영역 -->
+	
+	<!-- 메뉴 설명 -->
+	<div class="infoBox menu-desc">
+	</div>
+	<!-- //메뉴 설명 -->
+	
+	<div class="panelStyle" style="height: 750px;">
+		<div class="panelContent">
+			<ul class="panelBar">
+				<li>
+					<h4>브랜드 목록</h4> 
+				</li>
+				<li class="right">
+					<button type="button" class="btn btn-success btn-lg" onclick="fnShotBrandSave();">브랜드 저장</button>
+				</li>
+			</ul>
+			<form id="shotBrandListForm" name="shotBrandListForm" action="#" th:action="@{'/marketing/shot/delivery/brand/list'}" th:method="post">
+				<div class="panelContent">
+					<div id="gridListBrand" style="width: 100%; max-height: 230px; height: 230px;" class="ag-theme-balham"></div>
+				</div>
+			</form>
+		</div>
+
+		<div class="panelContent">
+			<ul class="panelBar">
+				<li>
+					<h4>브랜드명 : <label id="brandNm"></label></h4> 
+				</li>
+				<li class="right">
+					<button type="button" class="btn btn-default btn-lg" onclick="fnOpenGoodsPopup();">상품추가</button>
+					<button type="button" class="btn btn-danger btn-lg"	onclick="fnDeleteGoods();">선택삭제</button>
+				</li>
+			</ul>
+			
+			<div id="gridListGoods"	style="width: 100%; max-height: 350px; height: 350px;" class="ag-theme-balham lh60"></div>
+<!-- 			<ul class="panelBar"> -->
+<!-- 				<li class="center"> -->
+<!-- 					<div class="tablePaging" id="brandGoodsPagination"></div> -->
+<!-- 				</li> -->
+<!-- 			</ul> -->
+		</div>
+	</div>
+</div>
+<script type="text/javascript" src="/ux/plugins/gaga/gaga.paging.js"></script>
+<script th:inline="javascript">
+	var cornerDispTypeList = gagajf.convertToArray([[${cornerDispTypeList}]]);
+	var goodsStatList =gagajf.convertToArray([[${goodsStatList}]]);
+	// 브랜드 그룹번호 전역변수
+	var _brandGroupNo = '';
+	
+	var columnDefsBrand = [
+		{width: 40, minWidth: 40, cellClass: 'text-center', headerCheckboxSelection: true, checkboxSelection: true, filter: false},
+		{headerName: "브랜드번호"		, field:'brandGroupNo'			, width:150, cellClass: 'text-center', editable: false },
+		{headerName: "브랜드그룹명"			, field:'brandNm'			, width:400, cellClass: 'text-center',
+			cellRenderer: function(params) {return '<a href="javascript:void(0);">' + params.value + '</a>'; },
+			cellEditorParams: { maxlength: 50, required: true }
+		},
+		{headerName: "코너유형"		, field:'cornerDispType'		, width:180, cellClass: 'text-center',
+			cellEditor: 'agRichSelectCellEditor',
+			cellEditorParams: { values: gagaAgGrid.extractValues(cornerDispTypeList) },
+			valueFormatter: function (params) { return gagaAgGrid.lookupValue(cornerDispTypeList, params.value); },
+			valueParser: function (params) { return gagaAgGrid.lookupKey(cornerDispTypeList, params.newValue); }
+		},
+		{headerName: "전시순서"		, field:'dispOrd'				, width:100, cellClass: 'text-right',
+			cellEditor: 'textCellEditor',
+			cellEditorParams: { maxlength: 3, required: true }
+		},
+		{headerName: "등록일"			, field:'regDt'				, width:200, cellClass: 'text-center', editable: false }
+	];
+	
+	var columnDefsGoods = [
+		{width: 40, minWidth: 40, cellClass: 'text-center', headerCheckboxSelection: true, checkboxSelection: true, filter: false},
+		{headerName: "상품코드"	, field:'goodsCd'		, width:150, cellClass: 'text-left'
+			, cellRenderer: function(params) {return '<a href="javascript:void(0);">' + params.value + '</a>'; }
+		},
+		{headerName: "상품명"		, field:'goodsNm'		, width:300, cellClass: 'text-left'},
+		{headerName: "이미지"		, field:'sysImgNm'		, width:100 , height:60, cellClass: 'text-right'
+			,cellRenderer: function(params) {
+				return '<img width="60" src="'+ _goodsUrl+ "/" + params.value + '?RS=60" alt="" onclick="cfnOpenImagePreViewPopup(\'goodsImgView\', \''+ _goodsUrl+ "/" + params.value +'\')" onerror="this.src=\'/image/no.png\';"/>';
+			}
+		},
+		{headerName: "재고"		, field:'stockQtySum'			, width:80 , cellClass: 'text-center'
+			, cellRenderer: function(params) {return !gagajf.isNull(params.value) ? params.value : '0'; }
+		},
+		{headerName: "할인율(%)"		, field:'dcRate'		, width:80 , cellClass: 'text-center'},
+		{headerName: "정상가"		, field:'listPrice'		, width:100, cellClass: 'text-right' , hide : true
+			, valueFormatter: function(params) { return params.value.addComma(); }
+		},
+		{headerName: "판매가"		, field:'currPrice'		, width:100, cellClass: 'text-right'
+			, valueFormatter: function(params) { return params.value.addComma(); }
+		},
+		{headerName: "정상/이월여부", field:'formalGb'		, width:120, cellClass: 'text-center'},
+		{headerName: "상품상태"	, field:'goodsStat'		, width:100, cellClass: 'text-center'
+			, valueFormatter: function(params) { return gagaAgGrid.lookupValue(goodsStatList, params.value); }
+		},
+		{headerName: "업체"		, field:'supplyCompNm'	, width:150, cellClass: 'text-left'},
+		{headerName: "기획전상세"	, field:'planDtlSq'		, width:200, cellClass: 'text-left', hide: true},
+		{headerName: "등록일"		, field:'regDt'			, width:100,  cellClass: 'text-left'
+			, cellRenderer: function(params) { return !gagajf.isNull(params.value) ? params.value.toDate("YYYY-MM-DD HH:MM:SS").format("YYYY-MM-DD") : ''; }
+		},
+	];
+	
+	var gridOptionsBrand = gagaAgGrid.getGridOptions(columnDefsBrand);
+	gridOptionsBrand.suppressRowClickSelection = true;
+	gridOptionsBrand.stopEditingWhenGridLosesFocus = true;
+	gridOptionsBrand.defaultColDef.editable = true;
+	//gridOptionsBrand.rowSelection = 'multiple';
+	
+	var gridOptionsGoods = gagaAgGrid.getGridOptions(columnDefsGoods);
+	gridOptionsGoods.rowSelection = 'multiple';
+	gridOptionsGoods.rowHeight = 60; //이미지가 있을경우 높이 지정해야함.
+	gridOptionsGoods.suppressRowClickSelection = true;
+
+	gridOptionsGoods.onCellClicked = function(event) {
+		if (event.colDef.field == 'goodsCd') {
+			// 상품 상세 팝업
+			cfnOpenGoodsDetailPopup('U',event.data.goodsCd);
+		}
+	}
+
+	// 브랜드 셀 클릭 이벤트
+	gridOptionsBrand.onCellClicked = function(event) {
+		var field = event.colDef.field;
+		if (field != 'brandNm') return;
+
+		fnBindSearch(event.data);
+	}
+
+	// 코너 상품 조회 바인딩
+	var fnBindSearch = function(data) {
+		if (!gagajf.isNull(data.brandNm)) {
+
+			$('#brandNm').html(data.brandNm);
+			_brandGroupNo = data.brandGroupNo;
+
+			fnShotGoodsSearch();
+		}
+	}
+	// 상품 추가 버튼 클릭시 
+	var fnOpenGoodsPopup = function() {
+		var allData = gagaAgGrid.getAllRowData(gridOptionsBrand);
+		if (allData.length < 1 ) {
+			mcxDialog.alert('브랜드가 존재 하지 않습니다.');
+			return;
+		}
+
+		if ($("#brandNm").text() == null || $("#brandNm").text()=='') {
+			mcxDialog.alert('브랜드를 선택해주세요.');
+			return;
+		}
+		cfnOpenGoodsPopup('fnCreateGoods');
+	}
+
+	// 브랜드 조회
+	var fnBrandSearch = function() {
+		var formId = '#shotBrandListForm';
+		gagaAgGrid.fetch($(formId).prop('action'), gridOptionsBrand, formId
+						, function() {
+								$('#gridListGoods').html('');
+								$('#brandNm').html('');
+								gagaAgGrid.createGrid('gridListGoods', gridOptionsGoods);
+				});
+		
+		uifnPopupClose('fnCreateGoods');
+	}
+	
+	// 코너 저장
+	var fnShotBrandSave = function() {
+		var changeData = gagaAgGrid.getChangedData(gridOptionsBrand);
+
+		if (changeData.length < 1) {
+			mcxDialog.alert('변경된 브랜드 목록이 없습니다.');
+			return;
+		}
+
+		// Validation
+		if (!gagaAgGrid.validation(gridOptionsBrand, changeData))
+			return;
+
+		mcxDialog.confirm('저장하시겠습니까?', {
+			cancelBtnText: "취소",
+			sureBtnText: "확인",
+			sureBtnClick: function() {
+				var jsonData = JSON.stringify(changeData);
+				gagajf.ajaxJsonSubmit('/marketing/shot/delivery/brand/update', jsonData, fnBrandSearch);
+			}
+		});
+	}
+	
+	// 상품추가
+	var fnCreateGoods = function(result) {
+		if (result.length < 1) return;
+	
+		var oldGoodsList = gagaAgGrid.getAllRowData(gridOptionsGoods);
+		for (var disp = 0; disp < result.length; disp++) {
+			let addChk = true;
+			
+			// 받아온 data for
+			for(let j = 0 ; j < oldGoodsList.length ; j++) {
+				if(oldGoodsList[j].goodsCd == result[disp].goodsCd) {	addChk = false;	}					// 중복체크
+			}
+			
+			if(addChk) {
+				var goods = { brandGroupNo : _brandGroupNo ,
+						      goodsCd : result[disp].goodsCd ,
+						      dispOrd : oldGoodsList.length+1
+						    };
+				oldGoodsList.unshift(goods);
+			}
+		}
+		
+		mcxDialog.confirm('선택하신 상품을 추가 하시겠습니까?', {
+			cancelBtnText: "취소",
+			sureBtnText: "확인",
+			sureBtnClick: function() {
+				var jsonData = JSON.stringify(oldGoodsList);
+				gagajf.ajaxJsonSubmit('/marketing/shot/delivery/goods/save', jsonData, fnShotGoodsSearch);
+			}
+		});
+	}
+
+
+	// 브랜드 상품 조회
+	var fnShotGoodsSearch = function() {
+		uifnPopupClose('popupGoods');
+		var actionUrl = '/marketing/shot/delivery/goods/list';
+		var data = {brandGroupNo:_brandGroupNo};
+		var jsonData = JSON.stringify(data);
+
+		gagajf.ajaxJsonSubmit(actionUrl, jsonData, function(data) {
+			gridOptionsGoods.api.setRowData(data.brandGoodsList);
+		});
+	}
+	
+	//선택삭제
+	var fnDeleteGoods = function() {
+		var removedData = gagaAgGrid.removeRowData(gridOptionsGoods);
+
+		if (removedData.length == 0) {
+			mcxDialog.alert('선택된 행이 없습니다.');
+			return;
+		}
+
+		mcxDialog.confirm('선택된 상품을 삭제하시겠습니까?', {
+			cancelBtnText: "취소",
+			sureBtnText: "확인",
+			sureBtnClick: function() {
+				var jsonData = JSON.stringify(removedData);
+
+				gagajf.ajaxJsonSubmit('/marketing/shot/delivery/goods/delete', jsonData, function() {
+					fnShotGoodsSearch();
+				});
+			}
+		});
+	}
+	
+	// 엑셀상품추가
+	//var fnGoodsExcelUpload = function() {
+	//	cfnExcelUploadPopup('createGoods', 'fnCreatePlanGoodsExcel');
+	//}
+
+
+	$(document).ready(function() {
+		gagaAgGrid.createGrid('gridListBrand', gridOptionsBrand);
+		gagaAgGrid.createGrid('gridListGoods', gridOptionsGoods);
+		fnBrandSearch();
+	});
 </script>

+ 15 - 4
src/main/webapp/WEB-INF/views/ocm/ExtmallOrderRegisterForm.html

@@ -76,11 +76,22 @@
 		{headerName: "상품코드",			field: "goodsCd",				width: 150, cellClass: 'text-center'},
 		{headerName: "상품명",			field: "sku",					width: 150, cellClass: 'text-center'},
 		{headerName: "옵션코드",			field: "optCd",					width: 150, cellClass: 'text-center'},
-		{headerName: "판매금액",			field: "currPrice",				width: 100, cellClass: 'text-center'},
-		{headerName: "할인금액",			field: "cpnDcAmt",				width: 100, cellClass: 'text-center'},
+		{headerName: "판매금액", 			field: "currPrice",				width: 100, cellClass: 'text-center'
+			,valueFormatter: function(params) {return params.value.addComma();},
+			cellEditor: 'textCellEditor',
+			cellEditorParams: { maxlength: 14, validType: 'numeric'}
+		},
 		{headerName: "주문수량",			field: "ordQty",				width: 100, cellClass: 'text-center'},
-		{headerName: "주문금액",			field: "ordAmt",				width: 200, cellClass: 'text-center'},
-		{headerName: "배송비",			field: "delvFee",				width: 100, cellClass: 'text-center'},
+		{headerName: "주문금액", 			field: "ordAmt", 				width: 100, cellClass: 'text-center'
+			,valueFormatter: function(params) {return params.value.addComma();},
+			cellEditor: 'textCellEditor',
+			cellEditorParams: { maxlength: 14, validType: 'numeric'}
+		},
+		{headerName: "배송비", 			field: "delvFee", 				width: 100, cellClass: 'text-center'
+			,valueFormatter: function(params) {return params.value.addComma();},
+			cellEditor: 'textCellEditor',
+			cellEditorParams: { maxlength: 14, validType: 'numeric'}
+		},
 		{headerName: "주문자",			field: "ordNm",					width: 100, cellClass: 'text-center'},
 		{headerName: "주문자전화번호",		field: "ordTelno",				width: 130, cellClass: 'text-center'},
 		{headerName: "주문자핸드폰번호",		field: "ordPhnno",				width: 130, cellClass: 'text-center'},

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

@@ -92,7 +92,7 @@
 					<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>
+							<button type="button" class="btn btn-gray btn-lg" id="btnInit">초기화</button>
 							<button type="button" class="btn btn-primary btn-lg" id="btnGoodsUpload">엑셀업로드</button>
 							<!-- <button th:if="${sessionInfo.userId == 'jmh'}" type="button" class="btn btn-default btn-lg" onclick="fnTest();">테스트</button> -->
 						</li>
@@ -161,7 +161,11 @@
 		{headerName: "IF결과메세지", field: "apiMessage", width: 300, cellClass: 'text-left'},
 		{headerName: "자사 상품코드", field: "goodsCd", width: 150, cellClass: 'text-center'},
 		{headerName: "옵션코드", field: "optCd", width: 150, cellClass: 'text-center'},
-		{headerName: "상품명", field: "goodsNm", width: 300, cellClass: 'text-left'},
+		{headerName: "상품명", field: "goodsNm", width: 300, cellClass: 'text-left'
+			,cellRenderer: function(params) {
+				return '<a href="javascript:void(0);">' + params.value + '</a>';
+			}
+		},
 		{headerName: "xml", field: "xmlTxt", width: 100, cellClass: 'text-center', editable: true,
 			cellEditor: 'agLargeTextCellEditor',
 			cellRenderer: function(params) {
@@ -190,7 +194,11 @@
 		},
 		{headerName: "IF결과메세지", field: "apiMessage", width: 300, cellClass: 'text-left'},
 		{headerName: "자사 상품코드", field: "goodsCd", width: 150, cellClass: 'text-center'},
-		{headerName: "상품명", field: "goodsNm", width: 300, cellClass: 'text-left'},
+		{headerName: "상품명", field: "goodsNm", width: 300, cellClass: 'text-left'
+			,cellRenderer: function(params) {
+				return '<a href="javascript:void(0);">' + params.value + '</a>';
+			}
+		},
 		{headerName: "등록자", field: "regNm", width: 100, cellClass: 'text-center'},
 		{
 			headerName: "전송일자", field: "regDt", width: 150, cellClass: 'text-center',
@@ -205,6 +213,16 @@
 		gridOptions = gagaAgGrid.getGridOptions(columnDefs2);
 	}
 
+	// Row Click
+	gridOptions.onCellClicked = function(event) {
+		var goodsCd = event.data.goodsCd;
+		if (event.colDef.field == "goodsNm"){
+			cfnOpenGoodsDetailPopup('U',goodsCd);
+		}else if (event.colDef.field == "goodsCd"){
+
+			//cfnOpenFrontGoodsPopup(goodsCd, event.data.siteCd);
+		}
+	}
 
 	//페이징
 	$('#searchForm select[name=pageSize]').on('change', function() {
@@ -328,6 +346,15 @@
 	}
 	/**************** 검색 // *****************************************************/
 
+	/**************** 초기화 클릭시 *****************************************************/
+	$('#btnInit').on('click', function() {
+
+		$('#searchForm')[0].reset();
+		$("#multiBrand").empty();
+		$('#searchForm input[name=brandList]').val('');
+		$('#searchForm').find('#brandText').html('');
+	});
+	/**************** 초기화 클릭시 // *****************************************************/
 
 	/**************** 엑셀업로드 ********************************************************/
 	$('#btnGoodsUpload').on('click', function() {

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

@@ -93,7 +93,7 @@
 					<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> -->
+							<button type="button" class="btn btn-gray btn-lg" id="btnInit">초기화</button>
 							<button type="button" class="btn btn-primary btn-lg" id="btnSendInvoice">송장전송</button>
 							<!-- <button type="button" class="btn btn-primary btn-lg" id="btnInvoiceUpload">엑셀업로드</button> -->
 						</li>
@@ -284,6 +284,15 @@
 	}
 	/**************** 검색 // *****************************************************/
 
+	/**************** 초기화 클릭시 *****************************************************/
+	$('#btnInit').on('click', function() {
+
+		$('#searchForm')[0].reset();
+		$("#multiBrand").empty();
+		$('#searchForm input[name=brandList]').val('');
+		$('#searchForm').find('#brandText').html('');
+	});
+	/**************** 초기화 클릭시 // *****************************************************/
 
 	/**************** 송장전송 ********************************************************/
 	$('#btnSendInvoice').on('click', function() {

+ 12 - 12
src/main/webapp/WEB-INF/views/shoplinker/ShoplinkerOrderDetailForm.html

@@ -93,13 +93,13 @@
 						<th>주문수량</th>
 						<td class="aL padL10" th:text="${slkOrderInfo.quantity}"></td>
 						<th>주문금액</th>
-						<td class="aL padL10" th:text="${slkOrderInfo.orderPrice}"></td>
+						<td class="aL padL10" th:text="${#numbers.formatDecimal(slkOrderInfo.orderPrice, 0,'COMMA', 0,'POINT')}"></td>
 						<th>판매단가</th>
-						<td class="aL padL10" th:text="${slkOrderInfo.salePrice}"></td>
+						<td class="aL padL10" th:text="${#numbers.formatDecimal(slkOrderInfo.salePrice, 0,'COMMA', 0,'POINT')}"></td>
 					</tr>
 					<tr>
 						<th>공급가</th>
-						<td class="aL padL10" th:text="${slkOrderInfo.supplyPrice}"></td>
+						<td class="aL padL10" th:text="${#numbers.formatDecimal(slkOrderInfo.supplyPrice, 0,'COMMA', 0,'POINT')}"></td>
 						<th>옵션명</th>
 						<td class="aL padL10" th:text="${slkOrderInfo.sku}"></td>
 						<th>주문일자</th>
@@ -123,15 +123,15 @@
 					</tr>
 					<tr>
 						<th>쇼핑몰부담할인액</th>
-						<td class="aL padL10" th:text="${slkOrderInfo.disPriceMall}"></td>
+						<td class="aL padL10" th:text="${#numbers.formatDecimal(slkOrderInfo.disPriceMall, 0,'COMMA', 0,'POINT')}"></td>
 						<th>판매자부담할인액</th>
-						<td class="aL padL10" th:text="${slkOrderInfo.disPriceSeller}"></td>
+						<td class="aL padL10" th:text="${#numbers.formatDecimal(slkOrderInfo.disPriceSeller, 0,'COMMA', 0,'POINT')}"></td>
 						<th>쿠폰할인액</th>
-						<td class="aL padL10" th:text="${slkOrderInfo.disPriceCoupon}"></td>
+						<td class="aL padL10" th:text="${#numbers.formatDecimal(slkOrderInfo.disPriceCoupon, 0,'COMMA', 0,'POINT')}"></td>
 					</tr>
 					<tr>
 						<th>포인트할인액</th>
-						<td class="aL padL10" th:text="${slkOrderInfo.disPricePoint}"></td>
+						<td class="aL padL10" th:text="${#numbers.formatDecimal(slkOrderInfo.disPricePoint, 0,'COMMA', 0,'POINT')}"></td>
 						<th>물류배송여부</th>
 						<td class="aL padL10" th:text="${slkOrderInfo.distributionDelivery}"></td>
 						<th>옵션매칭코드</th>
@@ -234,19 +234,19 @@
 						</tr>
 						<tr>
 							<th>현재판매가</th>
-							<td class="aL padL10" th:text="${extOrderInfo.currPrice}"></td>
+							<td class="aL padL10" th:text="${#numbers.formatDecimal(extOrderInfo.currPrice, 0,'COMMA', 0,'POINT')}"></td>
 							<th>주문수량</th>
 							<td class="aL padL10" th:text="${extOrderInfo.ordQty}"></td>
 							<th>주문금액</th>
-							<td class="aL padL10" th:text="${extOrderInfo.ordAmt}"></td>
+							<td class="aL padL10" th:text="${#numbers.formatDecimal(extOrderInfo.ordAmt, 0,'COMMA', 0,'POINT')}"></td>
 						</tr>
 						<tr>
 							<th>쿠폰할인금액</th>
-							<td class="aL padL10" th:text="${extOrderInfo.cpnDcAmt}"></td>
+							<td class="aL padL10" th:text="${#numbers.formatDecimal(extOrderInfo.cpnDcAmt, 0,'COMMA', 0,'POINT')}"></td>
 							<th>포인트할인금액</th>
-							<td class="aL padL10" th:text="${extOrderInfo.pntDcAmt}"></td>
+							<td class="aL padL10" th:text="${#numbers.formatDecimal(extOrderInfo.pntDcAmt, 0,'COMMA', 0,'POINT')}"></td>
 							<th>배송비</th>
-							<td class="aL padL10" th:text="${extOrderInfo.delvFee}"></td>
+							<td class="aL padL10" th:text="${#numbers.formatDecimal(extOrderInfo.delvFee, 0,'COMMA', 0,'POINT')}"></td>
 						</tr>
 						<tr>
 							<th>주문수집일</th>

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

@@ -51,7 +51,7 @@
 							</td>
 						</tr>
 					</table>
-					<p class="dot">실패사유가 <font color="red">가용재고없음</font>일 경우 고객에게 림이 발송된 건으로 엑셀업로드를 하지 말아주세요.</p>
+					<p class="dot">실패사유가 <font color="red">가용재고없음</font>일 경우 고객에게 림이 발송된 건으로 엑셀업로드를 하지 말아주세요.</p>
 					<p class="dot">샵링커 주문수집 => 제휴몰 주문등록 => (제휴몰 주문등록 성공목록만) STYLE24에 주문등록이 됩니다.</p>
 					<p class="dot">샵링커 주문수집 시 동일한 목록은 '제휴몰 주문등록'이 되지 않습니다. </p>
 					<p class="dot">[제휴몰 주문등록 상태]가 <font color="red">미매핑</font>건은 옵션정보가 없는것으로 <font color="red">제휴몰주문업로드</font> 해주세요.(딜상품)</p>
@@ -122,8 +122,8 @@
 				<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" id="btnInit">초기화</button>
 						<!-- <button type="button" class="btn btn-default btn-lg" onclick="fnTest();">테스트</button> -->
-						<!-- <button type="button" class="btn btn-gray btn-lg" onclick="$('#searchForm')[0].reset();">초기화</button> -->
 					</li>
 				</ul>
 			</div>
@@ -228,9 +228,21 @@
 		{headerName: "자사 상품코드", field: "partnerProductId", width: 130, cellClass: 'text-center'},
 		{headerName: "상품명", field: "productName", width: 130, cellClass: 'text-center'},
 		{headerName: "주문수량", field: "quantity", width: 130, cellClass: 'text-center'},
-		{headerName: "주문금액", field: "orderPrice", width: 130, cellClass: 'text-center'},
-		{headerName: "판매단가", field: "salePrice", width: 130, cellClass: 'text-center'},
-		{headerName: "공급가", field: "supplyPrice", width: 130, cellClass: 'text-center'},
+		{headerName: "주문금액", 			field: "orderPrice",				width: 100, cellClass: 'text-center'
+			,valueFormatter: function(params) {return params.value.addComma();},
+			cellEditor: 'textCellEditor',
+			cellEditorParams: { maxlength: 14, validType: 'numeric'}
+		},
+		{headerName: "판매단가", 			field: "salePrice",				width: 100, cellClass: 'text-center'
+			,valueFormatter: function(params) {return params.value.addComma();},
+			cellEditor: 'textCellEditor',
+			cellEditorParams: { maxlength: 14, validType: 'numeric'}
+		},
+		{headerName: "공급가", 			field: "supplyPrice",				width: 100, cellClass: 'text-center'
+			,valueFormatter: function(params) {return params.value.addComma();},
+			cellEditor: 'textCellEditor',
+			cellEditorParams: { maxlength: 14, validType: 'numeric'}
+		},
 		{headerName: "옵션명", field: "sku", width: 130, cellClass: 'text-center'},
 		{headerName: "주문수집일자", field: "orderRegDate", width: 150, cellClass: 'text-center',
 			cellRenderer: function(params) {
@@ -354,6 +366,16 @@
 	}
 	/**************** 검색 // *****************************************************/
 
+	/**************** 초기화 클릭시 *****************************************************/
+	$('#btnInit').on('click', function() {
+
+		$('#searchForm')[0].reset();
+		$("#multiBrand").empty();
+		$('#searchForm input[name=brandList]').val('');
+		$('#searchForm').find('#brandText').html('');
+	});
+	/**************** 초기화 클릭시 // *****************************************************/
+
 	/**************** 엑셀다운로드 *****************************************************/
 	var fnExcelDownLoad = function(){
 		var formId = '#searchForm';
@@ -440,6 +462,15 @@
 					$("#btnCollection").addClass("btn-primary");
 					$("#btnCollection").removeClass("btn-dark");
 
+					if( 5 < $(".runable_info").html().length){
+						var resultTxt = result.txt;
+						if( null != resultTxt ){
+							resultTxt = resultTxt.replace("제휴몰", "제휴몰남은수 "+result.remainExtCnt.addComma());
+							resultTxt = resultTxt.replace("스타일24", "스타일24남은수 "+result.remainStyleCnt.addComma() )
+							$(".runable_info").html(resultTxt);
+						}
+					}
+
 				}else{
 					// 현재 진행중
 					$("#btnCollection").html("주문수집중");

+ 38 - 0
src/main/webapp/WEB-INF/views/shoplinker/ShoplinkerStockForm.html

@@ -86,6 +86,7 @@
 					<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" id="btnInit">초기화</button>
 						</li>
 					</ul>
 				</div>
@@ -158,6 +159,33 @@
 		fnListSearch();
 	});
 
+	// 브랜드 조회 선택시
+	$('#btnSearchBrand').on('click', function() {
+		cfnOpenBrandListPopup('fnSetBrandInfo', 'M');
+	});
+
+	// 브랜드 조회 팝업에서 호출
+	var fnSetBrandInfo = function(result) {
+		var arrbrandCd = [];
+		var brandText = "";
+		var bIndex = 0;
+		$('#searchForm').find('#brandText').html('');
+		$('#searchForm input[name=searchTxt]').val('');
+		result.forEach(function(brand){
+			bIndex++;
+			arrbrandCd.push(brand.brandCd);
+		});
+
+		// 조회값이 하나일 경우 화면에 코드 노출 그외는 갯수 처리
+		if (bIndex == 1) {
+			$('#searchForm input[name=searchTxt]').val(arrbrandCd[0]);
+		}else{
+			brandText = bIndex + " 개";
+			$('#searchForm').find('#brandText').html(brandText);
+		}
+		var jsonData = JSON.stringify(arrbrandCd);
+		$("#searchForm input[name=brandList]").val(jsonData);
+	}
 
 	/**************** 검색 ********************************************************/
 	$('#btnSearch').on('click', function() {
@@ -249,6 +277,16 @@
 	}
 	/**************** 검색 // *****************************************************/
 
+	/**************** 초기화 클릭시 *****************************************************/
+	$('#btnInit').on('click', function() {
+
+		$('#searchForm')[0].reset();
+		$("#multiBrand").empty();
+		$('#searchForm input[name=brandList]').val('');
+		$('#searchForm').find('#brandText').html('');
+	});
+	/**************** 초기화 클릭시 // *****************************************************/
+
 	/**************** 엑셀다운로드 *****************************************************/
 	var fnExcelDownLoad = function(){
 		var formId = '#searchForm';

Alguns arquivos não foram mostrados porque muitos arquivos mudaram nesse diff