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

Merge branch 'develop' into bin2107

bin2107 4 лет назад
Родитель
Сommit
ba57cc63c9
28 измененных файлов с 817 добавлено и 1457 удалено
  1. 39 0
      src/main/java/com/style24/admin/biz/dao/TsaPlanDao.java
  2. 80 1
      src/main/java/com/style24/admin/biz/service/TsaPlanService.java
  3. 0 1291
      src/main/java/com/style24/admin/biz/service/TsaWithdrawService.java
  4. 3 2
      src/main/java/com/style24/admin/biz/web/TsaCustomerController.java
  5. 50 0
      src/main/java/com/style24/admin/biz/web/TsaMarketingController.java
  6. 42 19
      src/main/java/com/style24/admin/biz/web/TsaOrderChangeController.java
  7. 11 3
      src/main/java/com/style24/admin/support/config/TsaRedisSessionConfig.java
  8. 4 1
      src/main/java/com/style24/persistence/domain/Withdraw.java
  9. 4 0
      src/main/java/com/style24/persistence/domain/WithdrawExc.java
  10. 14 14
      src/main/java/com/style24/persistence/mybatis/shop/TsaGoods.xml
  11. 106 0
      src/main/java/com/style24/persistence/mybatis/shop/TsaPlan.xml
  12. 92 8
      src/main/java/com/style24/persistence/mybatis/shop/TsaWithdraw.xml
  13. 3 3
      src/main/webapp/WEB-INF/views/customer/CustomerDetailForm.html
  14. 3 1
      src/main/webapp/WEB-INF/views/customer/LmsPopupForm.html
  15. 5 1
      src/main/webapp/WEB-INF/views/display/GoodsCategoryForm.html
  16. 15 3
      src/main/webapp/WEB-INF/views/display/ItemkindCategoryForm.html
  17. 5 1
      src/main/webapp/WEB-INF/views/goods/GoodsItemkindForm.html
  18. 5 1
      src/main/webapp/WEB-INF/views/goods/GoodsListForm.html
  19. 5 1
      src/main/webapp/WEB-INF/views/goods/GoodsPopupListForm.html
  20. 1 1
      src/main/webapp/WEB-INF/views/goods/ItemkindBaseForm.html
  21. 81 4
      src/main/webapp/WEB-INF/views/marketing/ShotDeliveryForm.html
  22. 16 16
      src/main/webapp/WEB-INF/views/order/ExchangeRequestForm.html
  23. 13 10
      src/main/webapp/WEB-INF/views/order/RtnReqForm.html
  24. 5 1
      src/main/webapp/WEB-INF/views/stock/GoodsSizeStockForm.html
  25. 9 8
      src/main/webapp/WEB-INF/views/withdraw/RefundRegisterListForm.html
  26. 76 10
      src/main/webapp/WEB-INF/views/withdraw/WithdrawDirectiveListForm.html
  27. 121 25
      src/main/webapp/WEB-INF/views/withdraw/WithdrawExceptionListForm.html
  28. 9 32
      src/main/webapp/WEB-INF/views/withdraw/WmsWithdrawListForm.html

+ 39 - 0
src/main/java/com/style24/admin/biz/dao/TsaPlanDao.java

@@ -644,4 +644,43 @@ public interface TsaPlanDao {
 	 * @since 2021. 06. 29
 	 */
 	void updateShotBrand(Plan param);
+	
+	/**
+	 * 총알배송 브랜드 상품 카운트
+	 *
+	 * @param plan
+	 * @return
+	 * @author sowon
+	 * @since 2021. 6. 29
+	 */
+	int getShotBrandGoodsListCount(Plan param);
+	
+	/**
+	 * 총알배송 브랜드 상품 리스트
+	 *
+	 * @param plan
+	 * @return
+	 * @author sowon
+	 * @since 2021. 06. 29
+	 */
+	Collection<Plan> getShotBrandGoodsList(Plan param);
+	
+	/**
+	 * 총알배송 브랜드 상품 등록
+	 *
+	 * @param
+	 * @author sowon
+	 * @since 2021. 06. 29
+	 */
+	void saveShotBrandGoods(Plan param);
+	
+	/**
+	 * 총알배송 브랜드 상품 삭제
+	 *
+	 * @param
+	 * @author sowon
+	 * @since 2021. 06. 29
+	 */
+	void deleteShotBrandGoods(Plan param);
+	
 }

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

@@ -1676,7 +1676,86 @@ public class TsaPlanService {
 		for (Plan cornerInfo : paramList) {
 			cornerInfo.setRegNo(TsaSession.getInfo().getUserNo());
 			cornerInfo.setUpdNo(TsaSession.getInfo().getUserNo());
-			planDao.savePlanCornerInfo(cornerInfo);
+			planDao.updateShotBrand(cornerInfo);
+		}
+	}
+	
+	/**
+	 * 총알배송 브랜드 상품 카운트
+	 *
+	 * @param plan
+	 * @return
+	 * @author sowon
+	 * @since 2021. 6. 29
+	 */
+	public int getShotBrandGoodsListCount(Plan param) {
+		return planDao.getShotBrandGoodsListCount(param);
+	}
+	
+	/**
+	 * 총알배송 그룹브랜드 상품리스트
+	 *
+	 * @param 
+	 * @return
+	 * @author sowon
+	 * @since 2021. 6. 29
+	 */
+	public Collection<Plan> getShotBrandGoodsList(Plan param){
+		return planDao.getShotBrandGoodsList(param);
+	}
+	
+
+	/**
+	 * 총알배송 그룹브랜드 상품 추가
+	 *
+	 * @param
+	 * @return
+	 * @author sowon
+	 * @since 2021. 6. 129
+	 */
+	@Transactional("shopTxnManager")
+	public void saveShotBrandGoods(Collection<Plan> paramList) {
+		for (Plan param : paramList) {
+			saveShotBrandGoods(param);
+		}
+	}
+	
+	/**
+	 * 총알배송 그룹브랜드 상품 저장
+	 *
+	 * @param
+	 * @return
+	 * @author sowon
+	 * @since 2021. 2. 17
+	 */
+	@Transactional("shopTxnManager")
+	public void saveShotBrandGoods(Plan param) {
+		Plan plan = new Plan();
+		
+		plan.setRegNo(TsaSession.getInfo().getUserNo());
+		plan.setUpdNo(TsaSession.getInfo().getUserNo());
+		plan.setDelYn("N");
+		plan.setGoodsCd(param.getGoodsCd());
+		plan.setDispOrd(param.getDispOrd());
+		plan.setBrandGroupNo(param.getBrandGroupNo());
+		planDao.saveShotBrandGoods(plan);
+	}
+	
+	/**
+	 * 총알배송 그룹브랜드 상품삭제
+	 *
+	 * @param
+	 * @return
+	 * @author sowon
+	 * @since 2021. 6. 29
+	 */
+	@Transactional("shopTxnManager")
+	public void deleteShotBrandGoods(Collection<Plan> paramList) {
+		for (Plan brandInfo : paramList) {
+			brandInfo.setUpdNo(TsaSession.getInfo().getUserNo());
+			planDao.deleteShotBrandGoods(brandInfo);
 		}
 	}
+	
+
 }

Разница между файлами не показана из-за своего большого размера
+ 0 - 1291
src/main/java/com/style24/admin/biz/service/TsaWithdrawService.java


+ 3 - 2
src/main/java/com/style24/admin/biz/web/TsaCustomerController.java

@@ -503,6 +503,7 @@ public class TsaCustomerController extends TsaBaseController {
 		// 휴대폰 번호
 		mav.addObject("elementCellPhnno", elementCellPhnno);
 
+
 		// 휴대폰 번호
 		mav.addObject("maskingCellPhnno", StringUtils.defaultString(maskingCellPhnno,""));
 
@@ -511,7 +512,7 @@ public class TsaCustomerController extends TsaBaseController {
 
 		mav.addObject("callBack", TscConstants.CALLCENTER_TEL_NO);
 
-		mav.addObject("pageGb", pageGb);
+		mav.addObject("pageGb", StringUtils.defaultString(pageGb, ""));
 
 		mav.setViewName("customer/LmsPopupForm");
 
@@ -734,7 +735,7 @@ public class TsaCustomerController extends TsaBaseController {
 	/**
 	 * 회원상세-주문내역목록
 	 *
-	 * @param custNo -고객일련번호
+	 * @param customerSearch -고객일련번호, 페이징
 	 * @return Collection<Order>
 	 * @author jsshin
 	 * @since 2021. 01. 21

+ 50 - 0
src/main/java/com/style24/admin/biz/web/TsaMarketingController.java

@@ -2659,6 +2659,8 @@ public class TsaMarketingController extends TsaBaseController {
 		
 		// 코너유형목록
 		mav.addObject("cornerDispTypeList", rendererService.getCommonCodeList("G045", "Y"));
+		// 상품상태
+		mav.addObject("goodsStatList", rendererService.getCommonCodeList("G008", "Y"));
 		
 		mav.setViewName("marketing/ShotDeliveryForm");
 		return mav;
@@ -2691,4 +2693,52 @@ public class TsaMarketingController extends TsaBaseController {
 		return super.ok(message.getMessage("SUCC_0001"));
 	}
 
+	/**
+	 * 총알배송 브랜드 상품조회
+	 *
+	 * @return
+	 * @author sowon
+	 * @since 2021. 6. 29
+	 */
+	@PostMapping("/shot/delivery/goods/list")
+	@ResponseBody
+	public GagaMap getShotBrandGoodsList(@RequestBody Plan plan) {
+		GagaMap result = new GagaMap();
+
+		if ("Y".equals(plan.getPageYn())) {
+			plan.setPageable(new TscPageRequest(plan.getPageNo() - 1, plan.getPageSize()));
+			plan.getPageable().setTotalCount(planService.getShotBrandGoodsListCount(plan));
+		}
+		result.set("pageing", plan);
+		result.set("brandGoodsList", planService.getShotBrandGoodsList(plan));
+		return result;
+	}
+	
+	/**
+	 * 총알배송 브랜드 상품추가
+	 *
+	 * @return
+	 * @author sowon
+	 * @since 2021. 6. 29
+	 */
+	@PostMapping("/shot/delivery/goods/save")
+	@ResponseBody
+	public GagaResponse saveShotBrandGoods(@RequestBody Collection<Plan> paramList) {
+		planService.saveShotBrandGoods(paramList);
+		return super.ok(message.getMessage("SUCC_0001"));
+	}
+	
+	/**
+	 * 총알배송 브랜드 상품 삭제
+	 *
+	 * @return
+	 * @author sowon
+	 * @since 2021. 6. 29
+	 */
+	@PostMapping("/shot/delivery/goods/delete")
+	@ResponseBody
+	public GagaResponse deleteShotBrandGoods(@RequestBody Collection<Plan> paramList) {
+		planService.deleteShotBrandGoods(paramList);
+		return super.ok(message.getMessage("SUCC_0003"));
+	}
 }

+ 42 - 19
src/main/java/com/style24/admin/biz/web/TsaOrderChangeController.java

@@ -328,16 +328,25 @@ public class TsaOrderChangeController extends TsaBaseController {
 
 		String chgStat = "";
 		if (order.getOrdChgSq() > 0) {
+			// 교환TO교환 처리 시 미착 수량 설정
+			Collection<Order> returnDetailList;
 			String ordChgGb = order.getOrdChgGb();
+
+			if (StringUtils.isNotBlank(ordChgGb) && TscConstants.ChangeGb.RETURN_TO_RETURN.value().equals(ordChgGb.toUpperCase())) {
+				returnDetailList = coreOrderChangeService.getNonArrivalInfo(order);
+			} else {
+				returnDetailList = orderChangeDetailList;
+			}
+
 			// Collection<Order> exchangeInfoList = coreOrderChangeService.getExchangeInfo(order);
 			// mav.addObject("exchangeInfoList"		, exchangeInfoList);											// 교환정보
-			mav.addObject("ordChgGb"				, StringUtils.isBlank(ordChgGb) ? "" : ordChgGb);				// 주문변경요쳥변경구분
+			mav.addObject("ordChgGb"				, StringUtils.isBlank(ordChgGb) ? "" : ordChgGb.toUpperCase());	// 주문변경요쳥변경구분
 
 			// 반품상세 정보 설정
 			List<Integer> ordDtlNoList = new ArrayList<>();
 			List<Integer> chgQtyList = new ArrayList<>();
-			if (orderChangeDetailList != null && orderChangeDetailList.size() > 0) {
-				for (Order tmp : orderChangeDetailList) {
+			if (returnDetailList != null && returnDetailList.size() > 0) {
+				for (Order tmp : returnDetailList) {
 					if (tmp.getChgQty() > 0 && !ordDtlNoList.contains(tmp.getOrdDtlNo())) {
 						ordDtlNoList.add(tmp.getOrdDtlNo());
 						chgQtyList.add(tmp.getChgQty());
@@ -353,6 +362,11 @@ public class TsaOrderChangeController extends TsaBaseController {
 					if(ordDtlNoList.contains(tmp.getOrdDtlNo())) {
 						int chgQty = chgQtyList.get(ordDtlNoList.indexOf(tmp.getOrdDtlNo()));
 						tmp.setChgQty(chgQty);
+
+						if (StringUtils.isNotBlank(ordChgGb) && TscConstants.ChangeGb.RETURN_TO_RETURN.value().equals(ordChgGb.toUpperCase())) {
+							tmp.setOrdCanChgQty(chgQty);
+						}
+
 						tmpList.add(tmp);
 					}
 				}
@@ -648,13 +662,22 @@ public class TsaOrderChangeController extends TsaBaseController {
 
 		String chgStat = "";
 		if (order.getOrdChgSq() > 0) {
-			String ordChgGb = order.getOrdChgGb();
 			Collection<Order> exchangeInfoList = coreOrderChangeService.getExchangeInfo(order);
+
+			// 교환TO교환 처리 시 미착 수량 설정
+			Collection<Order> exchangeDetailList;
+			String ordChgGb = order.getOrdChgGb();
+			if (StringUtils.isNotBlank(ordChgGb) && TscConstants.ChangeGb.EXCHANGE_TO_EXCHANGE.value().equals(ordChgGb.toUpperCase())) {
+				exchangeDetailList = coreOrderChangeService.getNonArrivalInfo(order);
+			} else {
+				exchangeDetailList = orderChangeDetailList;
+			}
+
 			// 교환상세 정보 설정
 			List<Integer> ordDtlNoList = new ArrayList<>();
 			List<Integer> chgQtyList = new ArrayList<>();
-			if (orderChangeDetailList != null && orderChangeDetailList.size() > 0) {
-				for (Order tmp : orderChangeDetailList) {
+			if (exchangeDetailList != null && exchangeDetailList.size() > 0) {
+				for (Order tmp : exchangeDetailList) {
 					if (tmp.getChgQty() > 0 && !ordDtlNoList.contains(tmp.getOrdDtlNo())) {
 						ordDtlNoList.add(tmp.getOrdDtlNo());
 						chgQtyList.add(tmp.getChgQty());
@@ -682,21 +705,21 @@ public class TsaOrderChangeController extends TsaBaseController {
 				chgOrdDtlStat = exchangeInfoList.iterator().next().getOrdDtlStat();
 			}
 
-			mav.addObject("exchangeInfoList"		, exchangeInfoList);								// 교환정보
-			mav.addObject("ordChgGb"				, StringUtils.isBlank(ordChgGb) ? "" : ordChgGb);	// 주문변경요쳥변경정보
-			mav.addObject("chgOrdDtlStat"			, chgOrdDtlStat);									// 교환상품상세상태
+			mav.addObject("exchangeInfoList"		, exchangeInfoList);											// 교환정보
+			mav.addObject("ordChgGb"				, StringUtils.isBlank(ordChgGb) ? "" : ordChgGb.toUpperCase());	// 주문변경요쳥변경정보
+			mav.addObject("chgOrdDtlStat"			, chgOrdDtlStat);												// 교환상품상세상태
 		}
 
-		mav.addObject("chgReasonList"				, rendererService.getAvailCommonCodeList("G689"));	// 교환사유
-		mav.addObject("cancelRequestTargetList"		, cancelRequestTargetList);							// 교환요청대상 목록
-		mav.addObject("orderChangeDetailList"		, orderChangeDetailList);							// 변경신청목록 (취소/반품/교환)
-		mav.addObject("orderInfoList"				, orderInfoList);									// 주문정보
-		mav.addObject("ordNo"						, order.getOrdNo());								// 주문번호
-		mav.addObject("ordChgSq"					, order.getOrdChgSq());								// 주문변경번호
-		mav.addObject("orderDelvAddrInfo"			, coreOrderService.getDeliveryAddrList(order));		// 배송정보
-		mav.addObject("TelExcNoList"				, rendererService.getAvailCommonCodeList("G095"));	// 전화번호국번
-		mav.addObject("PhnExcNoList"				, rendererService.getAvailCommonCodeList("G096"));	// (휴대전화)번호국번
-		mav.addObject("chgStat"						, chgStat);											// 변경상태
+		mav.addObject("chgReasonList"				, rendererService.getAvailCommonCodeList("G689"));				// 교환사유
+		mav.addObject("cancelRequestTargetList"		, cancelRequestTargetList);										// 교환요청대상 목록
+		mav.addObject("orderChangeDetailList"		, orderChangeDetailList);										// 변경신청목록 (취소/반품/교환)
+		mav.addObject("orderInfoList"				, orderInfoList);												// 주문정보
+		mav.addObject("ordNo"						, order.getOrdNo());											// 주문번호
+		mav.addObject("ordChgSq"					, order.getOrdChgSq());											// 주문변경번호
+		mav.addObject("orderDelvAddrInfo"			, coreOrderService.getDeliveryAddrList(order));					// 배송정보
+		mav.addObject("TelExcNoList"				, rendererService.getAvailCommonCodeList("G095"));				// 전화번호국번
+		mav.addObject("PhnExcNoList"				, rendererService.getAvailCommonCodeList("G096"));				// (휴대전화)번호국번
+		mav.addObject("chgStat"						, chgStat);														// 변경상태
 
 		mav.setViewName("order/ExchangeRequestForm");
 

+ 11 - 3
src/main/java/com/style24/admin/support/config/TsaRedisSessionConfig.java

@@ -1,8 +1,10 @@
 package com.style24.admin.support.config;
 
 import org.springframework.beans.factory.BeanClassLoaderAware;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
+import org.springframework.core.env.Environment;
 import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
 import org.springframework.data.redis.serializer.RedisSerializer;
 import org.springframework.security.jackson2.SecurityJackson2Modules;
@@ -34,6 +36,9 @@ public class TsaRedisSessionConfig
 
 	private ClassLoader classLoader;
 
+	@Autowired
+	private Environment env;
+
 	@Override
 	public void setBeanClassLoader(ClassLoader classLoader) {
 		this.classLoader = classLoader;
@@ -89,10 +94,13 @@ public class TsaRedisSessionConfig
 		DefaultCookieSerializer serializer = new DefaultCookieSerializer();
 		serializer.setCookiePath("/");
 		serializer.setUseBase64Encoding(false);
+		String active = env.getProperty("spring.profiles.active");
 
-		// SSL인증서 적용 시 주석 제거
-		serializer.setUseSecureCookie(true);
-		serializer.setSameSite("NONE");
+		if ("run".equals(active) || "locd".equals(active) || "style".equals(active)) {
+			// SSL인증서 적용 시 주석 제거
+			serializer.setUseSecureCookie(true);
+			serializer.setSameSite("NONE");
+		}
 
 		return serializer;
 	}

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

@@ -84,7 +84,10 @@ public class Withdraw extends TscBaseDomain {
 	private String accountNo;
 	private String bankCd;	
 	private String invoiceNo;
-
+	private String delvFeeCd;
+	private String delvFeeCdGrp;
+	private String refundConfirm;
+	
 	private Integer ordNo;
 	private Integer ordDtlNo; 
 	private Integer ordChgSq;

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

@@ -63,6 +63,9 @@ public class WithdrawExc extends TscBaseDomain {
 	private String ordDtlNoList;
 	private String banReq;
 	private String chgReq;
+	private String ordPhnno;
+	private String payGb;
+	
 	
 	
 	private int chargeAmount;          // 요금총액
@@ -104,6 +107,7 @@ public class WithdrawExc extends TscBaseDomain {
 	private Integer ordDtlNo;
 	private Integer custNo;
 	private Integer userNo;
+	private Integer orderExceptionNo;
 	
 	
 	// 검색

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

@@ -510,7 +510,7 @@
 		              <when test='search != null and search == "searchGoodsCd"'>
 		        AND (
 		              <foreach collection="conditionList" item="item" index="index" separator="or">
-		               UPPER(G.GOODS_CD) LIKE CONCAT(UPPER(#{item}),'%') 
+		               G.GOODS_CD LIKE CONCAT(UPPER(#{item}),'%') 
 		              </foreach>
 		             )
 		              </when>
@@ -547,10 +547,10 @@
 		            </choose>
 		        </if>
 		        <if test="goodsCd != null and goodsCd != ''">
-		        AND UPPER(G.GOODS_CD) LIKE CONCAT(UPPER(#{goodsCd}),'%')
+		        AND G.GOODS_CD LIKE CONCAT(UPPER(#{goodsCd}),'%')
 		        </if>
 		        <if test="arrGoodsCd != null and arrGoodsCd.length>0">
-		        AND UPPER(G.GOODS_CD) IN
+		        AND G.GOODS_CD IN
 		            <foreach collection="arrGoodsCd" item="item" index="index"  open="(" close=")" separator=",">
 		        UPPER(#{item})
 		            </foreach>
@@ -2561,7 +2561,7 @@
 		    <choose>
 		      <when test='search != null and search == "searchGoodsCd"'>
 		          <foreach collection="conditionList" item="item" index="index" separator="or">
-		       UPPER(G.GOODS_CD) LIKE CONCAT(UPPER(#{item}),'%') 
+		       G.GOODS_CD LIKE CONCAT(UPPER(#{item}),'%') 
 		          </foreach>
 		      </when>
 		      <when test='search != null and search == "searchGoodsNm"'>
@@ -3037,7 +3037,7 @@
 		    INNER JOIN TB_SUPPLY_COMPANY S ON G.SUPPLY_COMP_CD = S.SUPPLY_COMP_CD
 		    WHERE 1 = 1
 		    <if test="goodsCd != null and goodsCd != ''">
-		    AND UPPER(G.GOODS_CD) LIKE CONCAT(UPPER(#{goodsCd}),'%') 
+		    AND G.GOODS_CD LIKE CONCAT(UPPER(#{goodsCd}),'%') 
 		    </if>
 		    <if test="supplyCompCd != null and supplyCompCd != ''">
 		    AND G.SUPPLY_COMP_CD = #{supplyCompCd}
@@ -3498,7 +3498,7 @@
 		AND UPPER(G.GOODS_NM) LIKE  CONCAT(UPPER(#{condition}),'%')
 		        </when>
 				<when test='search != null and search == "searchGoodsCd"'>
-		AND UPPER(G.GOODS_CD) LIKE  CONCAT(UPPER(#{condition}),'%')
+		AND G.GOODS_CD LIKE  CONCAT(UPPER(#{condition}),'%')
 				</when>
 		    </choose>
 		</if>
@@ -3587,7 +3587,7 @@
 		              AND UPPER(G.GOODS_NM) LIKE  CONCAT(UPPER(#{condition}),'%')
 		                      </when>
 		                      <when test='search != null and search == "searchGoodsCd"'>
-		              AND UPPER(G.GOODS_CD) LIKE  CONCAT(UPPER(#{condition}),'%')
+		              AND G.GOODS_CD LIKE  CONCAT(UPPER(#{condition}),'%')
 		                      </when>
 		                  </choose>
 		              </if>
@@ -3711,7 +3711,7 @@
 		      <when test='search != null and search == "searchProductNo"'>
 		AND (
 		      <foreach collection="conditionList" item="item" index="index" separator="or">
-		       UPPER(G.PRODUCT_NO) = UPPER(#{item}) 
+		       G.PRODUCT_NO = #{item} 
 		      </foreach>
 		     )
 		      </when>
@@ -3783,10 +3783,10 @@
 		]]>
 		</if>
 		<if test="supplyCompCd != null and supplyCompCd != ''">
-		AND UPPER(S.SUPPLY_COMP_CD) = UPPER(#{supplyCompCd}) 
+		AND S.SUPPLY_COMP_CD = #{supplyCompCd} 
 		</if>
 		<if test="brandCd != null and brandCd != ''">
-		AND UPPER(B.BRAND_CD) = UPPER(#{brandCd}) 
+		AND B.BRAND_CD = #{brandCd}
 		</if>
 		ORDER BY A.UPD_DT DESC
 	</select>
@@ -3835,10 +3835,10 @@
 		]]>
 		</if>
 		<if test="supplyCompCd != null and supplyCompCd != ''">
-		AND UPPER(S.SUPPLY_COMP_CD) = UPPER(#{supplyCompCd}) 
+		AND S.SUPPLY_COMP_CD = #{supplyCompCd} 
 		</if>
 		<if test="brandCd != null and brandCd != ''">
-		AND UPPER(B.BRAND_CD) = UPPER(#{brandCd}) 
+		AND B.BRAND_CD = #{brandCd}
 		</if>
 		ORDER BY A.UPD_DT DESC
 		<include refid="getListPagingCondition_sql"/>
@@ -3913,7 +3913,7 @@
 		        <if test="goodsCds != null and goodsCds != ''">
 		        AND    (
 		                <foreach collection="goodsCds" item="item" index="index" separator="or">
-		                UPPER(GOODS_CD) LIKE CONCAT(UPPER(#{item}),'%') 
+		                GOODS_CD LIKE CONCAT(UPPER(#{item}),'%') 
 		                </foreach>
 		               )
 		        </if>
@@ -4396,7 +4396,7 @@
 		<if test='condition != null and condition != "" '>
 		AND (UPPER(A.GOODS_NUM) LIKE CONCAT(UPPER(#{condition}),'%')
 		     OR 
-		     UPPER(A.GOODS_CD) LIKE CONCAT(UPPER(#{condition}),'%')
+		     A.GOODS_CD LIKE CONCAT(UPPER(#{condition}),'%')
 		     OR 
 		     UPPER(A.SUPPLY_GOODS_CD) LIKE CONCAT(UPPER(#{condition}),'%')
 		    )

+ 106 - 0
src/main/java/com/style24/persistence/mybatis/shop/TsaPlan.xml

@@ -1542,6 +1542,112 @@
 		   ,CORNER_DISP_TYPE = #{cornerDispType}
 		WHERE BRAND_GROUP_NO = #{brandGroupNo}
 	</update>
+	
+	<!-- 기획전 코너 상품 목록 조회 건수 -->
+	<select id="getShotBrandGoodsListCount" parameterType="Plan" resultType="int">
+		/* TsaPlan.getShotBrandGoodsListCount */
+		SELECT COUNT(*) AS CNT
+		FROM TB_SHOT_DELV_GOODS
+		AND DEL_YN = 'N'
+		WHERE BRAND_GROUP_NO = #{brandGroupNo}
+	</select>
+	
+	<select id="getShotBrandGoodsList" parameterType="Plan" resultType="Plan">
+		/* TsaPlan.getShotBrandGoodsList */
+		SELECT Q.*
+		    , IFNULL((SELECT STOCK_QTY FROM TB_GOODS_STOCK WHERE GOODS_CD = Q.GOODS_CD),0) AS STOCK_QTY_SUM
+		    , (SELECT MAX(SYS_IMG_NM) FROM TB_GOODS_IMG  WHERE GOODS_CD = Q.GOODS_CD AND COLOR_CD = Q.MAIN_COLOR_CD AND DEFAULT_IMG_YN = 'Y' ) AS SYS_IMG_NM
+		    , CASE IFNULL((SELECT COUNT(SYS_IMG_NM) FROM TB_GOODS_IMG  WHERE GOODS_CD = Q.GOODS_CD AND COLOR_CD = Q.MAIN_COLOR_CD AND DEFAULT_IMG_YN = 'Y' ),0) 
+		            WHEN 0 THEN 'N'
+		            ELSE 'Y' END AS GOODS_IMAGE_YN
+		FROM (     
+		      SELECT Z.*
+		      FROM (
+		          SELECT A.*, @rownum := @rownum + 1 AS RNUM 
+		          FROM (
+		              SELECT
+		                       G.GOODS_CD                                                                   
+		                     , G.GOODS_TYPE                                                                 
+		                     , G.SUPPLY_COMP_CD                                                             
+		                     , G.SUPPLY_GOODS_CD                                                            
+		                     , G.GOODS_NUM                                                                  
+		                     , G.GOODS_NM                                                                   
+		                     , G.GOODS_STAT                                                                 
+		                     , G.LIST_PRICE                                                                 
+		                     , G.CURR_PRICE                                                                 
+		                     , G.DC_RATE      
+		                     , G.TAG_PRICE                                                              
+		                     , CASE G.FORMAL_GB WHEN 'G009_20' THEN '이월' ELSE '정상' END AS FORMAL_GB                                                                 
+		                     , G.SEASON_CD       
+		                     , (SELECT SUPPLY_COMP_NM
+		              FROM   TB_SUPPLY_COMPANY
+		              WHERE  SUPPLY_COMP_CD = G.SUPPLY_COMP_CD
+		               ) AS SUPPLY_COMP_NM                                                           
+		                   , G.ERP_STOCK_LINK_YN                                                          
+		                   , G.ERP_PRICE_LINK_YN                                                          
+		                   , G.CHANGEABLE_YN                                                              
+		                   , G.RETURNABLE_YN                                                              
+		                   , G.NEW_CUST_ORD_YN                                                            
+		                   , G.GIFT_PACK_YN                                                               
+		                   , G.DELV_FEE_CD                                                                
+		                   , G.MAIN_COLOR_CD                                                              
+		                   , G.FRST_CFRM_DT                  
+		                   , G.SELL_FEE_RATE                                                              
+		                   , G.PRICE_UPD_DT                   
+		                   , SDE.BRAND_GROUP_NO    
+		                   , SDE.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_SHOT_DELV_GOODS SDE ON G.GOODS_CD = SDE.GOODS_CD  
+		             WHERE 1=1
+		                 AND SDE.BRAND_GROUP_NO = #{brandGroupNo}
+		                 AND SDE.DEL_YN = 'N'
+		             ORDER BY G.REG_DT DESC, G.GOODS_CD
+		<include refid="getListPagingCondition_sql"/>
+		)Q
+	</select>
+	
+	<insert id="saveShotBrandGoods" parameterType="Plan">
+		/* TsaPlan.saveShotBrandGoods */
+		INSERT INTO TB_SHOT_DELV_GOODS
+		       (
+		          BRAND_GROUP_NO
+		        , GOODS_CD
+		        , DISP_ORD
+		        , DEL_YN
+		        , REG_NO
+		        , REG_DT
+		        , UPD_NO
+		        , UPD_DT
+		       )
+		       VALUES
+		       (
+		          #{brandGroupNo}
+		        , #{goodsCd}
+		        , #{dispOrd}
+		        , #{delYn}
+		        , #{regNo}
+		        , now()
+		        , #{updNo}
+		        , now()
+		       )
+		        ON DUPLICATE KEY
+		          UPDATE
+		        DEL_YN = 'N'
+		      , UPD_DT = now()
+		      , UPD_NO = #{updNo}                                  
+	</insert>
+	
+	<update id="deleteShotBrandGoods" parameterType="Plan">
+		/* TsaPlan.updateShotBrandGoods */
+		UPDATE TB_SHOT_DELV_GOODS
+		SET  DEL_YN = 'Y'
+		   , UPD_NO = #{updNo}
+		   , UPD_DT = NOW()
+		WHERE BRAND_GROUP_NO = #{brandGroupNo}
+		 AND  GOODS_CD       = #{goodsCd}
+	</update>
 </mapper>
 
 

+ 92 - 8
src/main/java/com/style24/persistence/mybatis/shop/TsaWithdraw.xml

@@ -73,6 +73,7 @@
 					, DATE_FORMAT(B.REG_DT, '%Y-%m-%d') AS WD_REG_DT        -- 회수등록일
 					, DATE_FORMAT(D.REG_DT, '%Y-%m-%d') AS RC_REG_DT        -- 반품신청일
 					, I.CUST_NO AS USER_NO 
+					, '' AS REFUND_CONFIRM
 				  FROM TB_WITHDRAW A
 				  JOIN TB_WITHDRAW_DETAIL B ON A.WD_INVOICE_NO  = B.WD_INVOICE_NO AND A.ORD_CHG_SQ = B.ORD_CHG_SQ 
 				  JOIN TB_ORDER_CHANGE_DETAIL C ON B.ORD_CHG_SQ = C.ORD_CHG_SQ AND B.ORD_DTL_NO = C.ORD_DTL_NO AND C.DEL_YN ='N'
@@ -137,7 +138,7 @@
 					, B.ORDER_DTL_NO
 				  FROM TB_ORDER_RECALL_EXCEPTION A 
 				  JOIN TB_ORDER_RECALL_EXCEPTION_ITEM B ON A.RECALL_EXCEPTION_NO = B.RECALL_EXCEPTION_NO
-				  WHERE B.REASON_CD NOT IN('확정 전 품절(재고없음)','확정 전 불량')
+				  WHERE B.REASON_CODE NOT IN('08','10')
 					<if test='customerName != null and customerName != ""'>
 					AND   A.CUSTOMER_NAME = #{customerName}
 					</if>
@@ -189,7 +190,7 @@
 		    SELECT A.*, ROW_NUMBER() OVER(ORDER BY  A.ORDER_NO, A.RECALL_EXCEPTION_NO, A.RECALL_EXCEPTION_ITEM_NO)  RNUM 
 		          , CASE WHEN A.MALL_GB = 'G011_20' THEN (SELECT MAX(BB.EXTMALL_ID) FROM TB_ORDER_DETAIL BB WHERE BB.ORD_NO = A.ORDER_NO) ELSE 'APISHOP_0054' END AS EXTMALL_ID
 		    FROM (   
-				SELECT A.* , CD.CHG_STAT, OC.ORD_CHG_SQ , OC.WD_GB , OC.CHG_REASON, OC.CHG_GB 
+				SELECT A.*
 				  FROM (
 						SELECT 
 							  A.RECALL_STAT   -- 반품대기처리상태
@@ -220,11 +221,90 @@
 							, B.REASON_CODE
 							, O.MALL_GB
 							, A.COD_FEE
+							, O.ORD_PHNNO 
+							, O.CUST_NO 
+							, CASE WHEN A.PAY_GB = 'NAVER' THEN 'Y' ELSE 'N' END AS PAY_GB  
+							, A.ORDER_EXCEPTION_NO 
+							, ''   AS CHG_STAT
+							, NULL AS ORD_CHG_SQ 
+							, ''   AS WD_GB 
+							, NULL AS CHG_REASON
+							, NULL AS CHG_GB 
 						  FROM TB_ORDER_RECALL_EXCEPTION A 
 						  JOIN TB_ORDER_RECALL_EXCEPTION_ITEM B ON A.RECALL_EXCEPTION_NO = B.RECALL_EXCEPTION_NO
 						  LEFT JOIN TB_ORDER O ON O.ORD_NO = A.ORDER_NO 
 						  LEFT JOIN TB_OPTION C ON C.OPT_CD = B.SKU_CODE
-						  WHERE B.REASON_CODE NOT IN('08','10')
+						  WHERE B.REASON_CODE IN('09','11')
+							<if test='customerName != null and customerName != ""'>
+							AND   A.CUSTOMER_NAME = #{customerName}
+							</if>
+							<if test='orderNo != null and orderNo != ""'>
+							AND   A.ORDER_NO  = #{orderNo}
+							</if>
+							<if test='recallStat != null and recallStat != ""'>
+							AND   A.RECALL_STAT  = #{recallStat}
+							</if>
+							<if test='stDate != null and stDate != ""'>
+							AND   A.DATE_CREATED <![CDATA[>= ]]> STR_TO_DATE(REPLACE(#{stDate},'-',''), '%Y%m%d%H%i%s') 
+							</if>
+							<if test='edDate != null and edDate != ""'>
+							AND   A.DATE_CREATED <![CDATA[<]]> DATE_ADD(STR_TO_DATE(REPLACE(#{edDate},'-','')+ 1, '%Y%m%d%H%i%s'), INTERVAL 1 DAY)
+							</if>
+							
+							<if test='reasonCode != null and reasonCode != ""'>
+							AND B.REASON_CODE = #{reasonCode}
+							</if>
+							<if test='userNameCreated != null and userNameCreated != ""'>
+							AND A.USER_NAME_CREATED = #{userNameCreated}
+							</if>
+							
+						UNION ALL
+						
+						SELECT 
+							  A.RECALL_STAT   -- 반품대기처리상태
+							, A.STATUS_CD     -- 처리상태
+							, A.DATE_CREATED  -- 등록일자
+							, A.CUSTOMER_NAME -- 고객명
+							, A.ORDER_NO      -- 주문번호
+							, B.ORDER_DTL_NO  -- 주문상세번호 
+							, A.LOGISTICS_NAME -- 택배사명
+							, A.INVOICE_NO     -- 반송장번호
+							, A.CHARGE_TYPE    -- 요금구분
+							, A.CHARGE_AMOUNT  -- 배송비
+							, A.USER_NAME_CREATED -- 작업자
+							, B.REASON_CD -- 예외사유
+							, IFNULL((SELECT GROUP_CONCAT(ADMIN_MEMO ORDER BY RECALL_EXCEPTION_MEMO_NO ) 
+							     FROM TB_ORDER_RECALL_EXCEPTION_MEMO C WHERE C.RECALL_EXCEPTION_NO = A.RECALL_EXCEPTION_NO  AND ADMIN_MEMO !='.'),'-') AS ADMIN_MEMO -- WMS메시지
+							, IFNULL((SELECT BRAND_KNM FROM TB_BRAND BR JOIN TB_GOODS GD ON BR.BRAND_CD = GD.BRAND_CD WHERE GD.GOODS_CD = C.GOODS_CD),'') AS BRAND_NM           -- 브랜드명
+							, B.PRODUCT_CODE   -- 상품코드
+							, B.SKU_CODE       -- SKU코드
+							, B.PRODUCT_NAME   -- 상품명
+							, B.SKU_VALUE      -- 속성
+							, C.SKU_MODEL_NO   -- 원코드
+							, B.EXCEPTION_QTY  -- 수량 
+							, A.RECALL_EXCEPTION_NO -- 반품예외처리번호 
+							, IFNULL(C.GOODS_CD,'') AS GOODS_CD       -- 상품코드 
+							, B.RECALL_EXCEPTION_ITEM_NO 
+							, B.QTY
+							, B.REASON_CODE
+							, O.MALL_GB
+							, A.COD_FEE
+							, O.ORD_PHNNO 
+							, O.CUST_NO 
+							, CASE WHEN A.PAY_GB = 'NAVER' THEN 'Y' ELSE 'N' END AS PAY_GB  
+							, A.ORDER_EXCEPTION_NO 
+							, CD.CHG_STAT
+							, OC.ORD_CHG_SQ 
+							, OC.WD_GB 
+							, OC.CHG_REASON
+							, OC.CHG_GB 
+						  FROM TB_ORDER_RECALL_EXCEPTION A 
+						  JOIN TB_ORDER_RECALL_EXCEPTION_ITEM B ON A.RECALL_EXCEPTION_NO = B.RECALL_EXCEPTION_NO
+						  LEFT JOIN TB_ORDER O ON O.ORD_NO = A.ORDER_NO 
+						  LEFT JOIN TB_OPTION C ON C.OPT_CD = B.SKU_CODE
+						  LEFT OUTER JOIN TB_ORDER_CHANGE_DETAIL  CD ON B.ORDER_DTL_NO = CD.ORD_DTL_NO AND CD.DEL_YN ='N' AND CD.CHG_STAT = 'G685_31'
+						  LEFT OUTER JOIN TB_ORDER_CHANGE         OC ON CD.ORD_CHG_SQ = OC.ORD_CHG_SQ 						  
+						  WHERE B.REASON_CODE IN('00','01','02','03','04','05','06','15')
 							<if test='customerName != null and customerName != ""'>
 							AND   A.CUSTOMER_NAME = #{customerName}
 							</if>
@@ -248,14 +328,12 @@
 							AND A.USER_NAME_CREATED = #{userNameCreated}
 							</if>
 				) A
-				LEFT OUTER JOIN TB_ORDER_CHANGE_DETAIL  CD ON A.ORDER_DTL_NO = CD.ORD_DTL_NO AND CD.DEL_YN ='N' AND CD.CHG_STAT = 'G685_31'
-				LEFT OUTER JOIN TB_ORDER_CHANGE         OC ON CD.ORD_CHG_SQ = OC.ORD_CHG_SQ 
 				WHERE 1=1
 				<if test='chgGb != null and chgGb != "" and chgGb !="G680"'>
-				AND OC.CHG_GB  = #{chgGb}
+				AND A.CHG_GB  = #{chgGb}
 				</if>
 				<if test='chgGb =="G680"'>
-				AND OC.CHG_GB  IS NULL
+				AND A.CHG_GB  IS NULL
 				</if>
 				ORDER BY A.ORDER_NO, A.RECALL_EXCEPTION_NO, A.RECALL_EXCEPTION_ITEM_NO
 	<include refid="getListPagingCondition_sql"/> 
@@ -350,6 +428,12 @@
 						     , O.ORD_PHNNO                              -- 주문자휴대전화번호
 						     , O.ORD_TELNO                              -- 주문자전화번호
 						     , O.ORD_EMAIL                              -- 주문자이메일
+						     , OD.DELV_FEE_CD
+						     , O.CUST_NO
+						     , CASE WHEN G.SELF_GOODS_YN = 'Y'
+						            THEN 'WMS'
+						            ELSE OD.DELV_FEE_CD
+						            END  DELV_FEE_CD_GRP
 						FROM   TB_ORDER_CHANGE OC          
 						JOIN   TB_ORDER_CHANGE_DETAIL OCD ON OC.ORD_CHG_SQ  = OCD.ORD_CHG_SQ 
 						JOIN   TB_ORDER_DETAIL OD         ON OCD.ORD_DTL_NO = OD.ORD_DTL_NO
@@ -523,7 +607,7 @@
 				, E.ORD_NM 	
 				, C.DELV_ADDR_SQ
 				, F.WD_INVOICE_NO 
-				, (SELECT R.REFUND_AMT FROM TB_REFUND R WHERE R.ORD_NO = E.ORD_NO) AS REFUND_AMT
+				, (SELECT R.REFUND_AMT FROM TB_REFUND R WHERE R.ORD_NO = E.ORD_NO AND R.ORD_CHG_SQ = A.ORD_CHG_SQ ) AS REFUND_AMT
 		  FROM TB_ORDER_CHANGE A
 		  JOIN TB_ORDER_CHANGE_DETAIL B ON B.ORD_CHG_SQ = A.ORD_CHG_SQ 
 		  JOIN TB_ORDER_DETAIL C ON C.ORD_DTL_NO = B.ORD_DTL_NO 

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

@@ -61,7 +61,7 @@
 					<ul>
 						<li class="on"><a href="#tab1" onclick="fnSearchCustInfo();">기본정보</a></li>
 						<li><a href="#tab2" onclick="fnSearchOrder();">주문내역</a></li>
-						<li><a href="#tab3" onclick="fnSearchDelivery();">배송지정보</a></li>
+						<li><a href="#tab3" onclick="fnCustSearchDelivery();">배송지정보</a></li>
 						<li><a href="#tab4" onclick="fnSearchCoupon();">쿠폰내역</a></li>
 						<li><a href="#tab5" onclick="fnSearchPoint();">포인트내역</a></li>
 						<li><a href="#tab6" onclick="fnSearchGiftCard()">상품권내역</a></li>
@@ -1102,7 +1102,7 @@
 			sureBtnClick: function () {
 				gagajf.removeCommaAtNumberFormattedInput('#custAddrForm');
 				let jsonData = JSON.stringify($('#custAddrForm').serializeObject());
-				gagajf.ajaxJsonSubmit('/customer/delivery/addr/save', jsonData, fnSearchDelivery);
+				gagajf.ajaxJsonSubmit('/customer/delivery/addr/save', jsonData, fnCustSearchDelivery);
 			}
 		});
 
@@ -1306,7 +1306,7 @@
 	}
 
 	// 배송지 조회
-	var fnSearchDelivery = function () {
+	var fnCustSearchDelivery = function () {
 		const actionUrl = "/customer/delivery/list/" + custNo;
 		gagaAgGrid.fetch(actionUrl, gridAddrOptions);
 		$('#btnCustAddrNew').trigger('click');

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

@@ -127,8 +127,10 @@
 
 	$(document).ready(function() {
 		fnInitDataSet();
-
+	
 		cfnGetTextLength("#lmsForm textarea[name=content]", 2000, $('#lmsForm span[name=count]'));
+	
+		$('#popupLmsForm .modelessPopup').draggable({'cancel':'.panelContent'});
 	});
 	/*]]>*/
 </script>

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

@@ -320,7 +320,11 @@
 				}
 			},
 			{headerName: "기존품목코드", field: "itemkindCd", width: 150, cellClass: 'text-center' },
-			{headerName: "품목", field: "itemkindNm", width: 150, cellClass: 'text-center'},
+			{headerName: "품목", field: "itemkindNm", width: 150, cellClass: 'text-center',
+				cellRenderer: function (params) {
+					return params.value.replaceAll("&gt;", ">");
+				}
+			},
 			{headerName: "전시재고", field: "stockQtySum", width: 120, cellClass: 'text-right',
 				valueFormatter: function(params) {	return params.value.addComma();},
 				cellStyle : function(params){

+ 15 - 3
src/main/webapp/WEB-INF/views/display/ItemkindCategoryForm.html

@@ -80,7 +80,11 @@
 			headerName: "품목코드", field: "itemkindCd", width: 150, cellClass: 'text-center',
 			cellRenderer: function (params) { return '<a href="javascript:void(0);">' + params.value + '</a>'; }
 		},
-		{headerName: "품목명", field: "itemkindNm", width: 300}
+		{headerName: "품목명", field: "itemkindNm", width: 300,
+			cellRenderer: function (params) {
+				return params.value.replaceAll("&gt;", ">");
+			}
+		}
 	];
 	
 	let columnDefs2 = [
@@ -103,8 +107,16 @@
 			cellRenderer: function (params) { return gagaAgGrid.lookupValue(cateGbList, params.value); }
 		},
 		{headerName: "카테고리번호", field: "cateNo", width: 150, cellClass: 'text-center'},
-		{headerName: "FULL카테고리번호", field: "fullCateNo", width: 200},
-		{headerName: "FULL카테고리명", field: "fullCateNm", width: 400}
+		{headerName: "FULL카테고리번호", field: "fullCateNo", width: 200,
+			cellRenderer: function (params) {
+				return params.value.replaceAll("&gt;", ">");
+			}
+		},
+		{headerName: "FULL카테고리명", field: "fullCateNm", width: 400,
+			cellRenderer: function (params) {
+				return params.value.replaceAll("&gt;", ">");
+			}
+		}
 	];
 	
 	let gridOptions1 = gagaAgGrid.getGridOptions(columnDefs1);

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

@@ -192,7 +192,11 @@
 			}
 		},
 		{headerName: "상품명", field: "goodsNm", width: 200, cellClass: 'text-left'},
-		{headerName: "품목명", field: "itemkindNm", width: 250, cellClass: 'text-left'},
+		{headerName: "품목명", field: "itemkindNm", width: 250, cellClass: 'text-left',
+			cellRenderer: function (params) {
+				return params.value.replaceAll("&gt;", ">");
+			}
+		},
 		{headerName: "기존품목코드", field: "itemkindCd", width: 150, cellClass: 'text-center' },
 		{headerName: "변경품목코드", field: "itemkindCdNew", width: 150, cellClass: 'text-center', editable : true,
 			cellEditor: 'textCellEditor',

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

@@ -470,7 +470,11 @@
 				return '<a href="javascript:void(0);">' + params.value + '</a>';
 			}
 		},
-		{headerName: "품목", field: "itemkindNm", width: 150, cellClass: 'text-center'},
+		{headerName: "품목", field: "itemkindNm", width: 150, cellClass: 'text-center',
+			cellRenderer: function (params) {
+				return params.value.replaceAll("&gt;", ">");
+			}
+		},
 		{headerName: "전시재고", field: "stockQtySum", width: 120, cellClass: 'text-right',
 			valueFormatter: function(params) {	return params.value.addComma();},
 			cellStyle : function(params){

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

@@ -263,7 +263,11 @@
 		{headerName: "브랜드명", field: "brandEnm", width: 130, cellClass: 'text-center'},
 		{headerName: "상품코드", field: "goodsCd", width: 140, cellClass: 'text-center'},
 		{headerName: "상품명", field: "goodsNm", width: 200, cellClass: 'text-left'},
-		{headerName: "품목", field: "itemkindNm", width: 150, cellClass: 'text-left'},
+		{headerName: "품목", field: "itemkindNm", width: 150, cellClass: 'text-left', 
+			cellRenderer: function (params) {
+				return params.value.replaceAll("&gt;", ">");
+			}
+		},
 		{headerName: "전시재고", field: "stockQtySum", width: 100, cellClass: 'text-right',
 			valueFormatter: function(params) {	return params.value.addComma();}
 		},

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

@@ -61,7 +61,7 @@
 			cellEditor: 'textCellEditor',
 			cellEditorParams: { maxlength: 50, required: true },
 			cellRenderer: function (params) {
-				return params.value.replaceAll("&lt;", ">");
+				return params.value.replaceAll("&gt;", ">");
 			}
 		},
 		/* {headerName: "품목영문명", field: "itemkindEnm", width: 350, cellClass: 'text-center',

+ 81 - 4
src/main/webapp/WEB-INF/views/marketing/ShotDeliveryForm.html

@@ -44,8 +44,8 @@
 					브랜드명 : <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-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>
@@ -54,14 +54,18 @@
 			<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="planListPagination"></div>
+					<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},
@@ -146,8 +150,9 @@
 		if (!gagajf.isNull(data.brandNm)) {
 
 			$('#brandNm').html(data.brandNm);
+			_brandGroupNo = data.brandGroupNo;
 
-			//fnConnerGoodsSearch();
+			fnShotGoodsSearch();
 		}
 	}
 	// 상품 추가 버튼 클릭시 
@@ -201,6 +206,78 @@
 			}
 		});
 	}
+	
+	// 상품추가
+	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() {

+ 16 - 16
src/main/webapp/WEB-INF/views/order/ExchangeRequestForm.html

@@ -347,9 +347,9 @@ var columnExchangeReqList = [
 				, width			: 100
 				, cellClass		: 'text-center'
 				, cellRenderer	: function (params) {
-					if (ordChgSq > 0 && ordChgGb != 'G681_20') {
-						// 반품TO교환
-						if (ordChgGb == 'G681_40') {
+					if (ordChgSq > 0) {
+						// 반품TO교환, 교환TO교환
+						if (ordChgGb == 'G681_40' || ordChgGb == 'G681_20') {
 							strVal = params.data.chgQty;
 						}
 						// 교환상세
@@ -366,10 +366,10 @@ var columnExchangeReqList = [
 						var ordReqChgQty = parseInt(params.data.ordReqChgQty);
 						var ordCanChgQty = ordQty - (cnclRtnQty + ordReqChgQty);
 						
-						// 교환TO교환
-						if (ordChgGb == 'G681_20') {
-							ordCanChgQty = parseInt(params.data.ordCanChgQty);
-						}
+						//// 교환TO교환
+						//if (ordChgGb == 'G681_20') {
+						//	ordCanChgQty = parseInt(params.data.ordCanChgQty);
+						//}
 						
 						var strVal = "";
 						strVal += '<select class="ordCanChgQty ' + params.data.ordDtlNo + '" name="chgQty" ordDtlNo="' + params.data.ordDtlNo + '" onchange="fnChangeQty(this)">';
@@ -628,16 +628,16 @@ var fnExchange = function () {
 	//		}
 	//	}
 	//});
-	// 반품TO교환 신청 수량 설정
-	if (ordChgGb == 'G681_40') {
+	// 교환TO교환, 반품TO교환 신청 수량 설정
+	if (ordChgGb == 'G681_20' || ordChgGb == 'G681_40') {
 		exchangeRequestList = cancelRequestTargetList;
-		$.each(exchangeRequestList, function(idx, exchangeRequest) {
-			$.each(exchangeInfoList , function(idx2, exchangeInfo) {
-				if (exchangeRequest.itemCd == exchangeInfo.itemCd && exchangeRequest.optCd1 == exchangeInfo.optCd1) {
-					exchangeRequest.chgQty = exchangeInfo.chgQty;
-				}
-			});
-		});
+		//$.each(exchangeRequestList, function(idx, exchangeRequest) {
+		//	$.each(exchangeInfoList , function(idx2, exchangeInfo) {
+		//		if (exchangeRequest.itemCd == exchangeInfo.itemCd && exchangeRequest.optCd1 == exchangeInfo.optCd1) {
+		//			exchangeRequest.chgQty = exchangeInfo.chgQty;
+		//		}
+		//	});
+		//});
 	}
 	
 	$.each(exchangeRequestList, function(idx, item) {

+ 13 - 10
src/main/webapp/WEB-INF/views/order/RtnReqForm.html

@@ -320,17 +320,15 @@ var columnCancelReqList = [
 
 			// 취소신청가능수량있으면 수량만 표시 (취소,반품,교환 신청정보 처리)
 			// 2021.06.22 반품TO반품 수량 처리
-			if (ordChgSq > 0 && ordChgGb != 'G681_30') {
-				rtnStr = ordCanChgQty;
-			} else {
-				//if (ordChgGb != 'G681_30') {
-					ordCanChgQty = ordQty - (cnclRtnQty + ordReqChgQty);
-				//}
-
+			if (ordChgSq > 0) {
 				if (ordChgGb == 'G681_30') {
 					ordCanChgQty = params.data.chgQty;
 				}
 				
+				rtnStr = ordCanChgQty;
+			} else {
+				ordCanChgQty = ordQty - (cnclRtnQty + ordReqChgQty);
+
 				rtnStr += "<select class='ordCanChgQty' name='ordCanChgQty' ordDtlNo='"+params.data.ordDtlNo+"' onChange='fnCalculateRefundAmt(this);'>";
 				
 				for (i=0 ; i<=ordCanChgQty ; i++) {
@@ -905,6 +903,10 @@ var fnCalculateRefundAmt = function (obj) {
 		}
 	}
 
+	console.log(ordDtlNoArr);
+	console.log(cnclRtnReqQtyArr);
+	console.log(chgQtyArr);
+
 	// 2. 추가정보설정
 	var chgerNm 	= orderInfoList[0].ordNm;
 	var chgerEmail 	= orderInfoList[0].ordEmail;
@@ -946,6 +948,7 @@ var fnCalculateRefundAmt = function (obj) {
 			gridOptionsDelvCdList.api.setRowData(result.cancelDelvRefundList);
 			
 			let spanSumDeliveryFee = result.spanSumDeliveryFee - result.spanDelvCpnDcAmt;
+			let sumDeliveryFee = result.sumDeliveryFee - result.spanRefundDelvCpnAmt;
 			
 			$("#spanPayAmt").text(result.spanPayAmt.addComma());					//총 결제 금액
 			$("#spanSumRealOrdAmt").text(result.spanSumRealOrdAmt.addComma());		//상품 실결제 금액
@@ -981,15 +984,15 @@ var fnCalculateRefundAmt = function (obj) {
 
 				// 고객사유(회수요청) : 환불금액게산 = (취소금액 + 배송비) - 추가배송비 - 반품배송비
 				if (isCustomer && wdGb == 'W') {
-					result.spanRefundAmt = (result.spanRealCnclRtnAmt + spanSumDeliveryFee) - result.spanTotDeliveryFee - result.spanTotRtnDelvFee;
+					result.spanRefundAmt = (result.spanRealCnclRtnAmt + sumDeliveryFee) - result.spanTotDeliveryFee - result.spanTotRtnDelvFee;
 				} 
 				// 고객사유(직접발송) : 환불금액계산 = (취소금액 + 배송비) - 추가배송비
 				else if (isCustomer && wdGb == 'D') {
-					result.spanRefundAmt = (result.spanRealCnclRtnAmt + spanSumDeliveryFee) - result.spanTotDeliveryFee;
+					result.spanRefundAmt = (result.spanRealCnclRtnAmt + sumDeliveryFee) - result.spanTotDeliveryFee;
 				}
 				// 회사사유 : 환불금액게산 = (취소금액 + 배송비)
 				else {
-					result.spanRefundAmt = (result.spanRealCnclRtnAmt + spanSumDeliveryFee);
+					result.spanRefundAmt = (result.spanRealCnclRtnAmt + sumDeliveryFee);
 				}
 			}
 			

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

@@ -216,7 +216,11 @@
 		},
 		{headerName: "브랜드명", field: "brandEnm", width: 130, cellClass: 'text-center'},
 		{headerName: "상품명", field: "goodsNm", width: 200, cellClass: 'text-left'},
-		{headerName: "품목", field: "itemkindNm", width: 180, cellClass: 'text-left'},
+		{headerName: "품목", field: "itemkindNm", width: 180, cellClass: 'text-left',
+			cellRenderer: function (params) {
+				return params.value.replaceAll("&gt;", ">");
+			}
+		},
 		{headerName: "상품상태", field: "goodsStat" , width: 120, cellClass: 'text-center',
 			cellEditorParams: { values: gagaAgGrid.extractValues(goodsStatList) },
 			valueFormatter: function (params) { return gagaAgGrid.lookupValue(goodsStatList, params.value); },

+ 9 - 8
src/main/webapp/WEB-INF/views/withdraw/RefundRegisterListForm.html

@@ -141,7 +141,8 @@
 		{headerName: "회수구분", 		field: "wdGb",		width: 80,  cellClass: 'text-center'},
 		{headerName: "주문번호", 		field: "ordNo",		width: 100,  cellClass: 'text-center'},
 		{headerName: "주문상세번호", 	field: "ordDtlNo",	width: 100,  cellClass: 'text-center'},
-		{headerName: "반품요청일련번호", field: "ordChgSq",	width: 120,  cellClass: 'text-center',
+		{headerName: "주문변경번호", 	field: "ordChgSq",	width: 100,  cellClass: 'text-center'},
+		{headerName: "환불컨펌", field: "refundConfirm",	width: 120,  cellClass: 'text-center',
 			cellRenderer: function(params) {
 				if (params.data.rfndStat == '환불완료') {
 					return "<a href=\"javascript:void(0);\" class=\"btn btn-dark btn-sm\">환불완료</a>";
@@ -150,21 +151,21 @@
 				}
 			}
 		},
-		{headerName: "회수송장번호", 	field: "wdInvoiceNo", 	width: 100, cellClass: 'text-center'},
+		{headerName: "회수송장번호", field: "wdInvoiceNo", 	width: 100, cellClass: 'text-center'},
 		{headerName: "보내는사람", 	field: "senderNm", 		width: 100, cellClass: 'text-center'},
 		{headerName: "보낸연락처", 	field: "senderPhnno", 	width: 120, cellClass: 'text-center'},
-		{headerName: "주문자명", 		field: "ordNm",			width: 100, cellClass: 'text-center'},
-		{headerName: "주문자연락처", 	field: "ordPhnno",		width: 120, cellClass: 'text-center'},
+		{headerName: "주문자명", 	field: "ordNm",			width: 100, cellClass: 'text-center'},
+		{headerName: "주문자연락처", field: "ordPhnno",		width: 120, cellClass: 'text-center'},
 		{headerName: "도착일", 		field: "arrivalDt", 	width: 100,  cellClass: 'text-center'},
 		{headerName: "환불확정일", 	field: "completeDt",	width: 100,  cellClass: 'text-center'},
 		{headerName: "WMS회수메모", 	field: "wdMemo", 		width: 200,  cellClass: 'text-left'},
 		{headerName: "요청사유",		field: "chgReasonNm", 	width: 150,  cellClass: 'text-center'},
 		{headerName: "클레임메모", 	field: "chgMemo", 		width: 200,  cellClass: 'text-left'},
-		{headerName: "상품코드", 		field: "goodsCd", 		width: 150,  cellClass: 'text-center'},
+		{headerName: "상품코드", 	field: "goodsCd", 		width: 150,  cellClass: 'text-center'},
 		{headerName: "옵션1", 		field: "optCd1", 		width: 80,  cellClass: 'text-center'},
 		{headerName: "옵션2", 		field: "optCd2", 		width: 80,  cellClass: 'text-center'},
-		{headerName: "반품수량", 		field: "chgQty", 		width: 80,  cellClass: 'text-center'},
-		{headerName: "회수수량", 		field: "wdQty", 		width: 80,  cellClass: 'text-center'},
+		{headerName: "반품수량", 	field: "chgQty", 		width: 80,  cellClass: 'text-center'},
+		{headerName: "회수수량", 	field: "wdQty", 		width: 80,  cellClass: 'text-center'},
 		{headerName: "회수등록일", 	field: "wdRegDt", 		width: 80,  cellClass: 'text-center'},
 		{headerName: "반품신청일", 	field: "rcRegDt", 		width: 80,  cellClass: 'text-center'},
 		{headerName: "반품완료일", 	field: "wdEddt", 		width: 80,  cellClass: 'text-center'}
@@ -237,7 +238,7 @@
 	*  cell Click
 	**************************************************************************/	
 	withDrawGridOptions.onCellClicked = function(event) {
-		if (event.colDef.field != 'ordChgSq') return;
+		if (event.colDef.field != 'refundConfirm') return;
 		// 회수등록 팝업
 		if (event.data.ordChgSq > 0 && !gagajf.isNull(event.data.ordChgSq) && event.data.wdQty > 0) {
 			// 회수 상세 화면

+ 76 - 10
src/main/webapp/WEB-INF/views/withdraw/WithdrawDirectiveListForm.html

@@ -130,8 +130,8 @@
 					검색결과 : <strong><span id="gridRowTotalCount">0</span> 건</strong>&nbsp;
 					쪽번호 <span id="pgNo">0</span>/ <strong id="endPgNo">0</strong>&nbsp;&nbsp;
 					<select id="pageSize" name="pageSize">
-						<option value="10" selected="selected">10개씩 보기</option>
-						<option value="20">20개씩 보기</option>
+						<option value="10" >10개씩 보기</option>
+						<option value="20" selected="selected">20개씩 보기</option>
 						<option value="50">50개씩 보기</option>
 						<option value="100">100개씩 보기</option>
 						<option value="500">500개씩 보기</option>
@@ -157,7 +157,32 @@
 	// 사이트목록
 	var currOrdNo =0;
 	var columnDefs = [
-		{headerName: "주문변경번호", 	field: "ordChgSq", 		width: 100, cellClass: "text-center"},
+		{headerName: "주문변경번호", 	field: "ordChgSq", 		width: 100, cellClass: "text-center",
+			cellRenderer	: function(params) {
+				var rtnStr = "";
+				
+				var paramData 	= params.data.ordNo;
+				paramData 		+= '@' + params.data.ordDtlNo;
+				paramData 		+= '@' + params.data.delvFeeCd;
+				paramData 		+= '@' + params.data.delvFeeCdGrp;
+				 
+				// 반품접수, 반품대기, 회수요청, 상품검수중, 결제대기, 반품진행중
+				if (params.data.chgStat == 'G685_50' || params.data.chgStat == 'G685_51' 
+						|| params.data.chgStat == 'G685_30' || params.data.chgStat == 'G685_31' || params.data.chgStat == 'G685_32' || params.data.chgStat == 'G685_33') {
+					rtnStr = '<a href="javascript:void(0);" onclick="fnReturnRequest(\'' + paramData + '\',\'' + params.value + '\');">' + params.value + '</a>';
+				}
+				// 교환접수, 교환대기, 회수요청, 상품검수중, 결제대기, 교환진행중
+				else if (params.data.chgStat == 'G685_20' || params.data.chgStat == 'G685_21' 
+						|| params.data.chgStat == 'G685_30' || params.data.chgStat == 'G685_31' || params.data.chgStat == 'G685_32' || params.data.chgStat == 'G685_34') {
+					rtnStr = '<a href="javascript:void(0);" onclick="fnExchangeRequest(\'' + paramData + '\',\'' + params.value + '\');">' + params.value + '</a>';
+				} 
+				else {
+					rtnStr = params.value;
+				}
+				return  rtnStr;
+			}			
+		
+		},
 		{headerName: "주문번호", 		field: "ordNo", 		width: 100, cellClass: "text-center",
 			cellRenderer: function(params) { 
 				return gagajf.isNull(params.value) ? '' : "<a href=\"javascript:void(0);\" onclick=\"fnOrderDetailPopup('" + params.data.ordNo + "');\">" + params.data.ordNo + "</a>";
@@ -193,9 +218,9 @@
 		{headerName: "배송종료일시", 	field: "wdEddt", 		width: 120, cellClass: "text-center"},
 		{headerName: "수취인명", 		field: "recipNm", 		width: 120, cellClass: "text-center"},
 		
-		{headerName: "LMS", 			field: "chgerPhnno", 	width: 120, cellClass: "text-center",
+		{headerName: "LMS", 			field: "chgerPhnno", 	width: 80, cellClass: "text-center",
 			cellRenderer: function(params) {
-				return '<button type="button" class="btn btn-base btn-sm" onclick="fnLms(\'' + params.data.chgGb + '\',\'' + params.data.ordDtlNo + '\',\''+params.data.ordChgSq+'\',\''+params.data.ordNo+'\');">&nbsp;LMS&nbsp;</button>';
+				return '<button type="button" class="btn btn-base btn-sm" onclick="fnLms(\'' + params.data.chgerPhnno + '\',\'' + params.data.custNo + '\');">&nbsp;LMS&nbsp;</button>';
 			}			
 		},
 		
@@ -322,16 +347,57 @@
 	/*************************************************************************
 	*  LMS
 	**************************************************************************/	
-	var fnLms = function(){
+	var fnLms = function(chgerPhnno, custNo){
 		let param = {};
-		param.elementCellPhnno = '010-4016-1558'; //'#custInfoForm input[name=cellPhnno]';
-		param.elementCustNo =    '100025';// '#custInfoForm input[name=custNo]';
-		param.elementMaskingCellPhnno = ''; //  '#custInfoForm input[name=maskingCellPhnno]';
+		param.elementCellPhnno = chgerPhnno; //'010-4016-1558'; //'#custInfoForm input[name=cellPhnno]';
+		param.elementCustNo =    custNo; //'100025';// '#custInfoForm input[name=custNo]';
 		param.pageGb = 'delv';
 		cfnOpenLmsPopup(param);
 	}
 
-	
+	/*************************************************************************
+	*  반품요청
+	**************************************************************************/		
+	var fnReturnRequest = function (paramData, ordChgSq) {
+		
+		// 취소요청 구분 (orChgSq null 이면 취소요청화면 있으면 취소요청정보화면)
+		if (ordChgSq == null) {
+			ordChgSq = 0;
+		}
+		
+		var param 		= "";
+		var paramArr 	= paramData.split("@");
+		param += "&ordNo=" 			+ paramArr[0];
+		param += "&ordDtlNo=" 		+ paramArr[1];
+		param += "&delvFeeCd="		+ paramArr[2];
+		param += "&delvFeeCdGrp="	+ paramArr[3];
+		
+		param += "&ordChgSq=" 		+ ordChgSq;
+		var actionUrl = "/orderChange/rtn/req/form?" + param;
+		cfnOpenModalPopup(actionUrl, 'popupReturnRequestForm');
+	};
+
+	/*************************************************************************
+	*  교환요청
+	**************************************************************************/			
+	var fnExchangeRequest = function (paramData, ordChgSq) {
+		console.log(paramData);
+		// 취소요청 구분 (orChgSq null 이면 취소요청화면 있으면 취소요청정보화면)
+		if (ordChgSq == null) {
+			ordChgSq = 0;
+		}
+		
+		var paramArr 	= paramData.split("@");
+		var param 		= "";
+		param += "&ordNo=" 			+ paramArr[0];
+		param += "&ordDtlNo=" 		+ paramArr[1];
+		param += "&delvFeeCd="		+ paramArr[2];
+		param += "&delvFeeCdGrp="	+ paramArr[3];
+		param += "&ordChgSq=" 		+ ordChgSq;
+		
+		var actionUrl = "/orderChange/exchange/request/form?" + param;
+		cfnOpenModalPopup(actionUrl, 'popupExchangeRequestForm');
+	};
 	
 	//엑셀다운로드
 	$('#btnExcel').on('click', function() {

+ 121 - 25
src/main/webapp/WEB-INF/views/withdraw/WithdrawExceptionListForm.html

@@ -115,8 +115,7 @@
 					검색결과 : <strong><span id="gridRowTotalCount">0</span> 건</strong>&nbsp;
 					쪽번호 <span id="pgNo">0</span>/ <strong id="endPgNo">0</strong>&nbsp;&nbsp;
 					<select id="pageSize" name="pageSize">
-						<option value="20" selected="selected">10개씩 보기</option>
-						<option value="20">20개씩 보기</option>
+						<option value="20" selected="selected">20개씩 보기</option>
 						<option value="50">50개씩 보기</option>
 						<option value="100">100개씩 보기</option>
 						<option value="500">500개씩 보기</option>
@@ -145,6 +144,10 @@
 	var uploadGoodsUrl = [[${@environment.getProperty('upload.goods.view')}]]; 
 	var roleCd = [[${sessionInfo.roleCd}]]; 
 
+	$("#reasonCode option[value='07']").remove();
+	$("#reasonCode option[value='08']").remove();
+	$("#reasonCode option[value='10']").remove();
+	
 	var columnDefs = [
 		{headerName: "반품예외처리번호",		field: "recallExceptionNo", width: 50,	cellClass: 'text-center', hide: true},
 		//{headerName: "No.",				field: "rnum",				width: 50,	cellClass: 'text-center'},
@@ -179,12 +182,50 @@
 			}
 			}
 		},
+		
+		{headerName: "주문변경번호",			field: "ordChgSq",			width: 100,	cellClass: 'text-center', rowSpan: params => params.data.rowspanRank === 1 ? params.data.rowspanCnt : 1,  
+			    cellClassRules: {
+			        'cell-span': "data.rowspanRank == 1"
+			      },
+				
+				cellRenderer	: function(params) {
+					var rtnStr = "";
+					
+					var paramData 	= params.data.orderNo;
+					paramData 		+= '@' + params.data.orderDtlNo;
+					paramData 		+= '@' + params.data.delvFeeCd;
+					paramData 		+= '@' + 'WMS';
+					 
+					// 반품접수, 반품대기, 회수요청, 상품검수중, 결제대기, 반품진행중
+					if (params.data.chgStat == 'G685_50' || params.data.chgStat == 'G685_51' 
+							|| params.data.chgStat == 'G685_30' || params.data.chgStat == 'G685_31' || params.data.chgStat == 'G685_32' || params.data.chgStat == 'G685_33') {
+						rtnStr = '<a href="javascript:void(0);" onclick="fnReturnRequest(\'' + paramData + '\',\'' + params.value + '\');">' + params.value + '</a>';
+					}
+					// 교환접수, 교환대기, 회수요청, 상품검수중, 결제대기, 교환진행중
+					else if (params.data.chgStat == 'G685_20' || params.data.chgStat == 'G685_21' 
+							|| params.data.chgStat == 'G685_30' || params.data.chgStat == 'G685_31' || params.data.chgStat == 'G685_32' || params.data.chgStat == 'G685_34') {
+						rtnStr = '<a href="javascript:void(0);" onclick="fnExchangeRequest(\'' + paramData + '\',\'' + params.value + '\');">' + params.value + '</a>';
+					} 
+					else {
+						rtnStr = params.value;
+					}
+					return  rtnStr;
+				}		
+		},
+			
 		{headerName: "주문자명",			field: "customerName",		width: 100,	cellClass: 'text-center'},
+		{headerName: "휴대번호",			field: "ordPhnno",			width: 100,	cellClass: 'text-center'},
+		{headerName: "LMS", 			field: "ordPhnno",			width: 80, cellClass: "text-center",
+			cellRenderer: function(params) {
+				return '<button type="button" class="btn btn-base btn-sm" onclick="fnLms(\'' + params.data.ordPhnno + '\',\'' + params.data.custNo + '\');">&nbsp;LMS&nbsp;</button>';
+			}			
+		},
 		{headerName: "예외사유",			field: "reasonCd",			width: 150,	cellClass: 'text-center'},
-		{headerName: "WMS메시지",			field: "adminMemo",			width: 300,	cellClass: 'text-left'},
+		{headerName: "WMS메시지",		field: "adminMemo",			width: 300,	cellClass: 'text-left'},
 		{headerName: "회수요청구분",		field: "chgGbNm",			width: 90,	cellClass: 'text-left'},
 		{headerName: "반품교환사유",		field: "chgReasonNm",		width: 150,	cellClass: 'text-left'},
-		{headerName: "반품/사유변경",		field: "chgReason",			width: 120,	cellClass: 'text-center',rowSpan: params => params.data.rowspanRank === 1 ? params.data.rowspanCnt : 1,  
+		{headerName: "네이버 주문형",		field: "payGb",				width: 100,	cellClass: 'text-center'},
+		{headerName: "반품/사유변경",	field: "chgReason",			width: 120,	cellClass: 'text-center',rowSpan: params => params.data.rowspanRank === 1 ? params.data.rowspanCnt : 1,  
 			    cellClassRules: {
 			        'cell-span': "data.rowspanRank == 1"
 			      },
@@ -364,8 +405,29 @@
 		} else if(event.colDef.field == 'chgReason'){
 			if(event.data.recallStat == "P" && event.data.rowspanRank == "1" && event.data.chgStat != null){
 				
-				var actionUrl = "/withdraw/exception/change/form?ordChgSq=" + event.data.ordChgSq + '&chgGb=' + event.data.chgGb;
-				cfnOpenModalPopup(actionUrl, 'popupWithdrawChangeForm');
+				if (event.data.reasonCode == '02') { // 미착 
+					param += "&ordNo=" 			+ event.data.orderNo;
+					param += "&ordDtlNo=" 		+ event.data.orderDtlNo;
+					param += "&ordChgSq=" 		+ event.data.ordChgSq;
+					param += "&delvFeeCd="		+ event.data.delvFeeCd;
+					param += "&delvFeeCdGrp="	+ "WMS";
+					
+					if (event.data.chgGb == 'G680_30') { // 반품요청
+						param += "&ordChgGb=G681_30";    // 반품TO반품
+						actionUrl = "/orderChange/rtn/req/form?" + param;
+
+						cfnOpenModalPopup(actionUrl, 'popupReturnRequestForm');
+					} else if (event.data.chgGb == 'G680_40') { // 교환요청
+						param += "&ordChgGb=G681_20";           // 교환TO교환
+						actionUrl = "/orderChange/exchange/request/form?" + param;
+						
+						cfnOpenModalPopup(actionUrl, 'popupExchangeRequestForm');
+					}
+				} else {
+					actionUrl = "/withdraw/exception/change/form?ordChgSq=" + event.data.ordChgSq + '&chgGb=' + event.data.chgGb;
+					cfnOpenModalPopup(actionUrl, 'popupWithdrawChangeForm');
+				}
+				
 			} else if(event.data.recallStat == "P" && event.data.rowspanRank == "1" && event.data.chgStat == null){
 				refreshFlag  = "ban";
 				var ordChgSq = 0;
@@ -397,29 +459,63 @@
 			}
 		}
 	}
-	/*
-	var fnComplete = function(recallExceptionNo,csAddFee,csMemo) {
-		var params = {};
-		params.recallExceptionNo = recallExceptionNo;
-		params.csAddFee = csAddFee;
-		params.csMemo = csMemo;
+
+	
+	/*************************************************************************
+	*  LMS
+	**************************************************************************/	
+	var fnLms = function(chgerPhnno, custNo){
+		let param = {};
+		param.elementCellPhnno = chgerPhnno; //'010-4016-1558'; //'#custInfoForm input[name=cellPhnno]';
+		param.elementCustNo =    custNo; //'100025';// '#custInfoForm input[name=custNo]';
+		param.pageGb = 'delv';
+		cfnOpenLmsPopup(param);
+	};
+	
+	/*************************************************************************
+	*  반품요청
+	**************************************************************************/		
+	var fnReturnRequest = function (paramData, ordChgSq) {
 		
+		// 취소요청 구분 (orChgSq null 이면 취소요청화면 있으면 취소요청정보화면)
+		if (ordChgSq == null) {
+			ordChgSq = 0;
+		}
 		
-		alert("recallExceptionNo:"+recallExceptionNo);
-		alert("csAddFee: "+csAddFee);
-		alert("csMemo: "+csMemo);
+		var param 		= "";
+		var paramArr 	= paramData.split("@");
+		param += "&ordNo=" 			+ paramArr[0];
+		param += "&ordDtlNo=" 		+ paramArr[1];
+		param += "&delvFeeCd="		+ paramArr[2];
+		param += "&delvFeeCdGrp="	+ paramArr[3];
 		
-		return;
-		mcxDialog.confirm('처리완료 하시겠습니까?', {
-			cancelBtnText: "취소",
-			sureBtnText: "확인",
-			sureBtnClick: function(){
-				var jsonData = JSON.stringify(params);
-				gagajf.ajaxJsonSubmit('/withdraw/exception/complete', jsonData, fnCompleteCallback);
-			}
-		});
+		param += "&ordChgSq=" 		+ ordChgSq;
+		var actionUrl = "/orderChange/rtn/req/form?" + param;
+		cfnOpenModalPopup(actionUrl, 'popupReturnRequestForm');
 	};
-	*/
+
+	/*************************************************************************
+	*  교환요청
+	**************************************************************************/			
+	var fnExchangeRequest = function (paramData, ordChgSq) {
+		console.log(paramData);
+		// 취소요청 구분 (orChgSq null 이면 취소요청화면 있으면 취소요청정보화면)
+		if (ordChgSq == null) {
+			ordChgSq = 0;
+		}
+		
+		var paramArr 	= paramData.split("@");
+		var param 		= "";
+		param += "&ordNo=" 			+ paramArr[0];
+		param += "&ordDtlNo=" 		+ paramArr[1];
+		param += "&delvFeeCd="		+ paramArr[2];
+		param += "&delvFeeCdGrp="	+ paramArr[3];
+		param += "&ordChgSq=" 		+ ordChgSq;
+		
+		var actionUrl = "/orderChange/exchange/request/form?" + param;
+		cfnOpenModalPopup(actionUrl, 'popupExchangeRequestForm');
+	};	
+	
 	/*************************************************************************
 	*  회수예외 처리완료 콜백
 	**************************************************************************/		

+ 9 - 32
src/main/webapp/WEB-INF/views/withdraw/WmsWithdrawListForm.html

@@ -161,8 +161,8 @@
 			cellRenderer: function (params) { return params.value == '10' ? '일반' : '교환'; }	
 		},
 		{headerName: "수취인",			field: "receiver",			width: 100,	cellClass: 'text-center'},
-		{headerName: "수취인전화번호",		field: "receivertelnum",	width: 120,	cellClass: 'text-center'},
-		{headerName: "수취인휴대폰번호",		field: "receivercellnum",	width: 120,	cellClass: 'text-center'},
+		{headerName: "수취인전화번호",	field: "receivertelnum",	width: 120,	cellClass: 'text-center'},
+		{headerName: "수취인휴대폰번호",	field: "receivercellnum",	width: 120,	cellClass: 'text-center'},
 		{headerName: "우편번호",			field: "deliverypostalcode",width: 80,	cellClass: 'text-center'},
 		{headerName: "기본주소",			field: "deliveryaddr1",		width: 300,	cellClass: 'text-left'},
 		{headerName: "상세주소",			field: "deliveryaddr2",		width: 200,	cellClass: 'text-left'},
@@ -171,12 +171,12 @@
 		{headerName: "CS메모",			field: "csmemo",			width: 250,	cellClass: 'text-left'},	
 		{headerName: "CS메모 변경일",		field: "datecsmemoupdated",	width: 120,	cellClass: 'text-center'},
 		{headerName: "WMS메모",			field: "wmsmemo",			width: 250,	cellClass: 'text-left'},
-		{headerName: "WMS메모변경일",		field: "datewmsmemoupdated",width: 120,	cellClass: 'text-center'},
-		{headerName: "회수요청일",			field: "datecreated",		width: 100,	cellClass: 'text-center'},
+		{headerName: "WMS메모변경일",	field: "datewmsmemoupdated",width: 120,	cellClass: 'text-center'},
+		{headerName: "회수요청일",		field: "datecreated",		width: 100,	cellClass: 'text-center'},
 		{headerName: "삭제여부",			field: "isdeleted",			width: 80,	cellClass: 'text-center',
 			cellRenderer: function (params) { return params.value == '0' ? 'N' : 'Y'; }		
 		},
-		{headerName: "도로명주소",			field: "deliveryaddrnew",	width: 300,	cellClass: 'text-left'},
+		{headerName: "도로명주소",		field: "deliveryaddrnew",	width: 300,	cellClass: 'text-left'},
 		{headerName: "상품번호",			field: "productno",			width: 100,	cellClass: 'text-center'},
 		{headerName: "상품코드",			field: "productcode",		width: 100,	cellClass: 'text-center'},
 		{headerName: "상품명",			field: "productname",		width: 250,	cellClass: 'text-left',
@@ -189,11 +189,11 @@
 			}					
 		},
 		{headerName: "옵션코드",			field: "skucode",			width: 100,	cellClass: 'text-center'},
-		{headerName: "옵션 내용",			field: "skuvalue",			width: 100,	cellClass: 'text-center'},
+		{headerName: "옵션 내용",		field: "skuvalue",			width: 100,	cellClass: 'text-center'},
 		{headerName: "수량",				field: "recallqty",			width: 100,	cellClass: 'text-center'},	
 		{headerName: "완료일",			field: "datecompleted",		width: 100,	cellClass: 'text-center'},
-		{headerName: "택배사 명",			field: "logisticsname",		width: 100,	cellClass: 'text-left'},
-		{headerName: "회수송장번호",		field: "recallinvoiceno",	width: 120,	cellClass: 'text-center'},
+		{headerName: "택배사 명",		field: "logisticsname",		width: 100,	cellClass: 'text-left'},
+		{headerName: "회수송장번호",	field: "recallinvoiceno",	width: 120,	cellClass: 'text-center'},
 		{headerName: "원운송장번호",		field: "invoiceno",			width: 120,	cellClass: 'text-center'}
 
 	];
@@ -276,29 +276,6 @@
 		
 	}
 
-	/*************************************************************************
-	*  회수예외 처리완료 버튼 - 대기->완료  업데이트
-	**************************************************************************/	
-	var fnComplete = function(recallExceptionNo) {
-		var params = {};
-		params.recallExceptionNo = recallExceptionNo;
-		mcxDialog.confirm('처리완료 하시겠습니까?', {
-			cancelBtnText: "취소",
-			sureBtnText: "확인",
-			sureBtnClick: function(){
-				var jsonData = JSON.stringify(params);
-				gagajf.ajaxJsonSubmit('/withdraw/exception/complete', jsonData, fnCompleteCallback);
-			}
-		});
-	};
-	
-	/*************************************************************************
-	*  회수예외 처리완료 콜백
-	**************************************************************************/		
-	var fnCompleteCallback = function() {
-		fnSearchList();
-	};
-	
 
 	/*************************************************************************
 	*  엑셀다운로드
@@ -312,7 +289,7 @@
 
 		var date = new Date().format("YYYYMMDDHHmmss");
 		var params = {
-			fileName : "WMS회수예외목록_"+ date,
+			fileName : "WMS회수목록_"+ date,
 			sheetName: "DATA"
 		}
 		gridOptions.excelStyles = [

Некоторые файлы не были показаны из-за большого количества измененных файлов