Procházet zdrojové kódy

Merge branch 'develop' into jsshin

jsshin před 5 roky
rodič
revize
d9574e827a
25 změnil soubory, kde provedl 931 přidání a 792 odebrání
  1. 7 1
      src/main/java/com/style24/admin/biz/service/TsaGoodsService.java
  2. 1 0
      src/main/java/com/style24/admin/biz/service/TsaSystemService.java
  3. 6 6
      src/main/java/com/style24/admin/biz/web/TsaBusinessController.java
  4. 35 13
      src/main/java/com/style24/admin/biz/web/TsaGoodsController.java
  5. 2 1
      src/main/java/com/style24/admin/biz/web/TsaMarketingController.java
  6. 52 31
      src/main/java/com/style24/admin/biz/web/TsaOrderChangeController.java
  7. 1 3
      src/main/java/com/style24/admin/biz/web/TsaOrderController.java
  8. 6 2
      src/main/java/com/style24/admin/support/interceptor/TsaDefaultInterceptor.java
  9. 35 13
      src/main/java/com/style24/persistence/mybatis/shop/TsaGoods.xml
  10. 1 0
      src/main/java/com/style24/persistence/mybatis/shop/TsaPlan.xml
  11. 1 1
      src/main/resources/config/application-style.yml
  12. 4 7
      src/main/webapp/WEB-INF/views/business/SupplyCompanyForm.html
  13. 5 4
      src/main/webapp/WEB-INF/views/goods/GoodsDealForm.html
  14. 2 2
      src/main/webapp/WEB-INF/views/goods/GoodsPopupListForm.html
  15. 39 6
      src/main/webapp/WEB-INF/views/goods/GoodsSetForm.html
  16. 3 3
      src/main/webapp/WEB-INF/views/goods/WmsColorMappingForm.html
  17. 3 3
      src/main/webapp/WEB-INF/views/goods/WmsSeasonMappingForm.html
  18. 3 3
      src/main/webapp/WEB-INF/views/goods/WmsStyleYearMappingForm.html
  19. 9 5
      src/main/webapp/WEB-INF/views/marketing/CouponPopupForm.html
  20. 8 4
      src/main/webapp/WEB-INF/views/marketing/PlanDetailPopupForm.html
  21. 0 7
      src/main/webapp/WEB-INF/views/marketing/PlanPopupForm.html
  22. 235 270
      src/main/webapp/WEB-INF/views/order/CnclReqForm.html
  23. 17 1
      src/main/webapp/WEB-INF/views/order/OrderDetailChangeHst.html
  24. 169 128
      src/main/webapp/WEB-INF/views/order/OrderDetailForm.html
  25. 287 278
      src/main/webapp/WEB-INF/views/order/OrderListForm.html

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

@@ -412,11 +412,17 @@ public class TsaGoodsService {
 			if (dataList != null && !dataList.isEmpty()) {
 				for (GagaMap gagaMap : dataList) {
 					if (!StringUtils.isBlank(gagaMap.get("SYS_IMG_NM").toString())) {
-						gagaMap.set("SYS_IMG_NM", targetPath + '/' + gagaMap.get("SYS_IMG_NM").toString());
+						gagaMap.set("SYS_IMG_NM", targetPath + '/' + gagaMap.get("SYS_IMG_NM").toString() + "?RS=60");
 					}
 				}
 			}
 
+			log.info("[ excelFilenameWithPath] {}", excelFilenameWithPath);
+			log.info("[ dataList] {}", dataList.size());
+			log.info("[ listTitles] {}", listTitles);
+			log.info("[ cellNames] {}", cellNames);
+			log.info("[ cellTypes] {}", cellTypes);
+			
 			try {
 				GagaExcelUtil.createExcel(excelFilenameWithPath, dataList, "상품 정보", listTitles, cellNames, cellTypes, TsaConstants.EXCEL_FOOTER_TITLE);
 			} catch (Exception e) {

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

@@ -335,6 +335,7 @@ public class TsaSystemService {
 	 * @author gagamel
 	 * @since 2020. 10. 7
 	 */
+	@Transactional("shopTxnManager")
 	public void createMenuAccessHistory(String menuId, String reqUrl, String params) {
 		MenuAccessHst menuAccessHst = new MenuAccessHst();
 		menuAccessHst.setUserNo(TsaSession.getInfo().getUserNo());

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

@@ -168,10 +168,10 @@ public class TsaBusinessController extends TsaBaseController {
 	public Collection<SupplyCompany> getSupplyCompanyList(@RequestBody SupplyCompany supplyComp) {
 		// multi row 검색관련 처리
 		if (!StringUtils.isBlank(supplyComp.getSearchSupplyCompCd())) {
-			supplyComp.setMultiSupplyCompCd(supplyComp.getSearchSupplyCompCd().replaceAll("\r", "").split("\n"));
+			supplyComp.setMultiSupplyCompCd(supplyComp.getSearchSupplyCompCd().replaceAll("\r", "").trim().split("\n"));
 		}
 		if (!StringUtils.isBlank(supplyComp.getSearchSupplyCompNm())) {
-			supplyComp.setMultiSupplyCompNm(supplyComp.getSearchSupplyCompNm().replaceAll("\r", "").split("\n"));
+			supplyComp.setMultiSupplyCompNm(supplyComp.getSearchSupplyCompNm().replaceAll("\r", "").trim().split("\n"));
 		}
 		//log.info("supplyComp  {}", supplyComp);
 		return businessService.getSupplyCompanyList(supplyComp);
@@ -321,10 +321,10 @@ public class TsaBusinessController extends TsaBaseController {
 
 		// multi row 검색관련 처리
 		if (!StringUtils.isBlank(brand.getSearchBrandCd())) {
-			brand.setMultiBrandCd(brand.getSearchBrandCd().replaceAll("\r", "").split("\n"));
+			brand.setMultiBrandCd(brand.getSearchBrandCd().replaceAll("\r", "").trim().split("\n"));
 		}
 		if (!StringUtils.isBlank(brand.getSearchBrandNm())) {
-			brand.setMultiBrandNm(brand.getSearchBrandNm().replaceAll("\r", "").split("\n"));
+			brand.setMultiBrandNm(brand.getSearchBrandNm().replaceAll("\r", "").trim().split("\n"));
 		}
 
 		return businessService.getBrandList(brand);
@@ -763,10 +763,10 @@ public class TsaBusinessController extends TsaBaseController {
 	public Collection<BrandGroup> getBrandGroupList(@RequestBody BrandGroup brandGroup) {
 		// multi row 검색관련 처리
 		if (!StringUtils.isBlank(brandGroup.getSearchBrandGroupNo())) {
-			brandGroup.setMultiBrandGroupNo(brandGroup.getSearchBrandGroupNo().replaceAll("\r", "").split("\n"));
+			brandGroup.setMultiBrandGroupNo(brandGroup.getSearchBrandGroupNo().replaceAll("\r", "").trim().split("\n"));
 		}
 		if (!StringUtils.isBlank(brandGroup.getSearchBrandGroupNm())) {
-			brandGroup.setMultiBrandGroupNm(brandGroup.getSearchBrandGroupNm().replaceAll("\r", "").split("\n"));
+			brandGroup.setMultiBrandGroupNm(brandGroup.getSearchBrandGroupNm().replaceAll("\r", "").trim().split("\n"));
 		}
 		return businessService.getBrandGroupList(brandGroup);
 	}

+ 35 - 13
src/main/java/com/style24/admin/biz/web/TsaGoodsController.java

@@ -496,7 +496,7 @@ public class TsaGoodsController extends TsaBaseController {
 	@ResponseBody
 	public GagaMap getGoodsList(@RequestBody GoodsSearch goodsSearch) {
 
-		//log.info("[getGoodsList] goodsSearch = {}", goodsSearch);
+		log.info("[getGoodsList] goodsSearch = {}", goodsSearch);
 		GagaMap result = new GagaMap();
 
 		// 입점업체담당자는 업체코드 설정
@@ -507,7 +507,7 @@ public class TsaGoodsController extends TsaBaseController {
 
 		// multi row 검색관련 처리
 		if (!StringUtils.isBlank(goodsSearch.getCondition())) {
-			goodsSearch.setConditionList(goodsSearch.getCondition().replaceAll("\r", "").split("\n"));
+			goodsSearch.setConditionList(goodsSearch.getCondition().replaceAll("\r", "").trim().split("\n"));
 
 			if ("searchExtendGoodsCd".equals(goodsSearch.getSearch())) {
 				goodsSearch.setSearchGb("EXTEND");
@@ -572,7 +572,7 @@ public class TsaGoodsController extends TsaBaseController {
 
 		// multi row 검색관련 처리
 		if (!StringUtils.isBlank(goodsSearch.getCondition())) {
-			goodsSearch.setConditionList(goodsSearch.getCondition().replaceAll("\r", "").split("\n"));
+			goodsSearch.setConditionList(goodsSearch.getCondition().replaceAll("\r", "").trim().split("\n"));
 
 			if ("searchExtendGoodsCd".equals(goodsSearch.getSearch())) {
 				goodsSearch.setSearchGb("EXTEND");
@@ -580,6 +580,28 @@ public class TsaGoodsController extends TsaBaseController {
 				goodsSearch.setSearchGb("MASTER");
 			}
 		}
+		
+		if (!StringUtils.isBlank(goodsSearch.getBrandList())) {
+			try {
+				String [] arrBrandCd = mapper.readValue(goodsSearch.getBrandList(), String[].class);
+				goodsSearch.setMultiBrand(arrBrandCd);
+			} catch (Exception e) {
+				e.printStackTrace();
+				throw new IllegalStateException("브랜드코드 검색중 오류로 인해 조회되지 않았습니다.");
+			}
+		}
+
+		if (!StringUtils.isBlank(goodsSearch.getSupplyCompList())) {
+			try {
+				String [] arrSupplyComp = mapper.readValue(goodsSearch.getSupplyCompList(), String[].class);
+				goodsSearch.setMultiSupplyCompCd(arrSupplyComp);
+			} catch (Exception e) {
+				e.printStackTrace();
+				throw new IllegalStateException("업체코드 검색중 오류로 인해 조회되지 않았습니다.");
+			}
+		}
+		
+		log.info("[downloadGoodsInfoExcelList] goodsSearch = {}", goodsSearch);
 
 		// 대용량엑셀파일다운로드는 이런 식으로 ...
 		goodsService.getGoodsInfoExcelList(goodsSearch, excelFilenameWithPath);
@@ -1575,7 +1597,7 @@ public class TsaGoodsController extends TsaBaseController {
 
 		// multi row 검색관련 처리
 		if (!StringUtils.isBlank(goodsSearch.getCondition())) {
-			goodsSearch.setConditionList(goodsSearch.getCondition().replaceAll("\r", "").split("\n"));
+			goodsSearch.setConditionList(goodsSearch.getCondition().replaceAll("\r", "").trim().split("\n"));
 		}
 
 		goodsSearch.setRegNo(TsaSession.getInfo().getUserNo()); // 엑셀조회시 로그인 사용자의 엑셀 상품조회시 사용
@@ -1776,7 +1798,7 @@ public class TsaGoodsController extends TsaBaseController {
 
 		// multi row 검색관련 처리
 		if (!StringUtils.isBlank(goodsSearch.getCondition())) {
-			goodsSearch.setConditionList(goodsSearch.getCondition().replaceAll("\r", "").split("\n"));
+			goodsSearch.setConditionList(goodsSearch.getCondition().replaceAll("\r", "").trim().split("\n"));
 		}
 		if (!StringUtils.isBlank(goodsSearch.getBrandList())) {
 			try {
@@ -2067,7 +2089,7 @@ public class TsaGoodsController extends TsaBaseController {
 
 		// multi row 검색관련 처리
 		if (!StringUtils.isBlank(goodsSearch.getCondition())) {
-			goodsSearch.setConditionList(goodsSearch.getCondition().replaceAll("\r", "").split("\n"));
+			goodsSearch.setConditionList(goodsSearch.getCondition().replaceAll("\r", "").trim().split("\n"));
 		}
 
 		return goodsService.getNoticeList(goodsSearch);
@@ -2190,7 +2212,7 @@ public class TsaGoodsController extends TsaBaseController {
 
 		// multi row 검색관련 처리
 		if (!StringUtils.isBlank(goodsSearch.getCondition())) {
-			goodsSearch.setConditionList(goodsSearch.getCondition().replaceAll("\r", "").split("\n"));
+			goodsSearch.setConditionList(goodsSearch.getCondition().replaceAll("\r", "").trim().split("\n"));
 
 			if ("searchExtendGoodsCd".equals(goodsSearch.getSearch())) {
 				goodsSearch.setSearchGb("EXTEND");
@@ -2425,7 +2447,7 @@ public class TsaGoodsController extends TsaBaseController {
 
 		// multi row 검색관련 처리
 		if (!StringUtils.isBlank(goodsSearch.getCondition())) {
-			goodsSearch.setConditionList(goodsSearch.getCondition().replaceAll("\r", "").split("\n"));
+			goodsSearch.setConditionList(goodsSearch.getCondition().replaceAll("\r", "").trim().split("\n"));
 
 			if ("searchExtendGoodsCd".equals(goodsSearch.getSearch())) {
 				goodsSearch.setSearchGb("EXTEND");
@@ -2450,7 +2472,7 @@ public class TsaGoodsController extends TsaBaseController {
 
 		// multi row 검색관련 처리
 		if (!StringUtils.isBlank(goodsSearch.getCondition())) {
-			goodsSearch.setConditionList(goodsSearch.getCondition().replaceAll("\r", "").split("\n"));
+			goodsSearch.setConditionList(goodsSearch.getCondition().replaceAll("\r", "").trim().split("\n"));
 		}
 
 		return goodsService.saveGoodsNaverPrice(goodsSearch);
@@ -2560,7 +2582,7 @@ public class TsaGoodsController extends TsaBaseController {
 	public Collection<GoodsNotiInfo> getGoodsNotiInfoListByNotiClsf(@RequestBody GoodsNotiInfo goodsNotiInfo) {
 		// multi row 검색관련 처리
 		if (StringUtils.isNotBlank(goodsNotiInfo.getGoodsCd())) {
-			goodsNotiInfo.setGoodsCds(goodsNotiInfo.getGoodsCd().replaceAll("\r", "").split("\n"));
+			goodsNotiInfo.setGoodsCds(goodsNotiInfo.getGoodsCd().replaceAll("\r", "").trim().split("\n"));
 		}
 
 		return goodsService.getGoodsNotiInfoListByNotiClsf(goodsNotiInfo);
@@ -2632,7 +2654,7 @@ public class TsaGoodsController extends TsaBaseController {
 
 		// multi row 검색관련 처리
 		if (!StringUtils.isBlank(goodsSearch.getCondition())) {
-			goodsSearch.setConditionList(goodsSearch.getCondition().replaceAll("\r", "").split("\n"));
+			goodsSearch.setConditionList(goodsSearch.getCondition().replaceAll("\r", "").trim().split("\n"));
 		}
 
 		return goodsService.getFreeGoodsList(goodsSearch);
@@ -2835,7 +2857,7 @@ public class TsaGoodsController extends TsaBaseController {
 
 		// multi row 검색관련 처리
 		if (!StringUtils.isBlank(goodsSearch.getCondition())) {
-			goodsSearch.setConditionList(goodsSearch.getCondition().replaceAll("\r", "").split("\n"));
+			goodsSearch.setConditionList(goodsSearch.getCondition().replaceAll("\r", "").trim().split("\n"));
 		}
 
 		goodsSearch.setRegNo(TsaSession.getInfo().getUserNo()); // 엑셀조회시 로그인 사용자의 엑셀 상품조회시 사용
@@ -2863,7 +2885,7 @@ public class TsaGoodsController extends TsaBaseController {
 		Goods goods = new Goods();
 		// multi row 검색관련 처리
 		if (!StringUtils.isBlank(goodsSearch.getCondition())) {
-			goodsSearch.setConditionList(goodsSearch.getCondition().replaceAll("\r", "").split("\n"));
+			goodsSearch.setConditionList(goodsSearch.getCondition().replaceAll("\r", "").trim().split("\n"));
 			goods.setArrGoodsCd(goodsSearch.getConditionList());
 		}
 		

+ 2 - 1
src/main/java/com/style24/admin/biz/web/TsaMarketingController.java

@@ -587,7 +587,8 @@ public class TsaMarketingController extends TsaBaseController {
 		// 쿠폰다운로드 방식 조회
 		mav.addObject("dnGbList", rendererService.getCommonCodeList("G058"));
 		// 결제수단 조회
-		mav.addObject("payTypeList", rendererService.getCommonCodeList("G015"));
+		String[] exceptCds2 = {"INICIS","ISTYLE","NAVER_ORDER","NICE"};
+		mav.addObject("payTypeList", rendererService.getCommonCodeList("G015", "Y", exceptCds2));
 		// 상위제휴채널 조회
 		mav.addObject("upperAfLinkCdList", rendererService.getCommonCodeList("G053"));
 		// 선착순쿠폰 조회

+ 52 - 31
src/main/java/com/style24/admin/biz/web/TsaOrderChangeController.java

@@ -58,20 +58,22 @@ public class TsaOrderChangeController extends TsaBaseController {
 	/**
 	 * 취소요청, 취소완료 통합 화면 (관리자)
 	 * 
-	 * @param ordNo - 주문번호
-	 * @param cncWait - 취소대기요청 구분
 	 * @return ModelAndView
 	 * @author jsh77b
 	 * @since 2020. 12. 22
 	 */
 	@GetMapping("/cncl/req/form")
-	public ModelAndView cnclReqForm(@RequestParam(value = "ordNo") int ordNo, @RequestParam(value = "ordChgSq") int ordChgSq) {
+	public ModelAndView cnclReqForm(@RequestParam(value = "ordNo") int ordNo, @RequestParam(value = "ordDtlNo") int ordDtlNo
+			, @RequestParam(value = "delvFeeCd") String delvFeeCd, @RequestParam(value = "delvFeeCdGrp") String delvFeeCdGrp
+			, @RequestParam(value = "ordChgSq") int ordChgSq) {
 
 		Order order = new Order();
-		ModelAndView mav = new ModelAndView();
 		order.setOrdNo(ordNo);
+		order.setOrdDtlNo(ordDtlNo);
+		order.setDelvFeeCd(delvFeeCd);
+		order.setDelvFeeCdGrp(delvFeeCdGrp);
 		order.setOrdChgSq(ordChgSq);
-				
+
 		// 1. 취소가능 주문상세상탭값 설정
 		String[] ordDtlStatArr = new String[4];
 		ordDtlStatArr[0] = TscConstants.OrderDetailStat.DEPOSIT_WAIT.value();
@@ -87,6 +89,7 @@ public class TsaOrderChangeController extends TsaBaseController {
 		
 		// 3. 화면으로 데이타 전송
 		// 2021.01.26 취소요청 화면, 취소요청정보확인 화면 통합
+		ModelAndView mav = new ModelAndView();
 		mav.addObject("chgReasonList"				, rendererService.getAvailCommonCodeList("G686"));				// 취소사유
 		mav.addObject("cancelRequestTargetList"		, cancelRequestTargetList);										// 변경신청대상목록 (취소/반품/교환)
 		mav.addObject("orderInfoList"				, orderInfoList);												// 주문정보
@@ -157,43 +160,61 @@ public class TsaOrderChangeController extends TsaBaseController {
 		GagaMap mav = new GagaMap();
 		
 		List<Order> cnclReqList = cnclReq.getCancelReqList(); // 변경요청정보
+		int[] ordDtlNoArr 		= new int[cnclReqList.size()];
+		int[] cnclRtnReqQtyArr 	= new int[cnclReqList.size()];
 		
-		// TODO
-		// @ 결품취소로직 추가
-		// @ 주문취소시 상태값 체크
-		// @ 취소, 반품시 배송비 체크 로직 (선결제 로직)
-		
+		for (int i=0 ; i<cnclReqList.size() ; i++) {
+			Order vo = (Order)cnclReqList.get(i);
+			ordDtlNoArr[i] 			= vo.getOrdDtlNo();
+			cnclRtnReqQtyArr[i] 	= vo.getOrdCanChgQty();
+		}
+
 		// 1. 세션회원조회
 		int userNo = TsaSession.getInfo().getUserNo();
+				
+		cnclReq.setOrdDtlNoArr(ordDtlNoArr);
+		cnclReq.setCnclRtnReqQtyArr(cnclRtnReqQtyArr);
+		cnclReq.setCustNo(userNo);
+		cnclReq.setIpAddress(TsaSession.getIpAddress());
+		
+		// front 정보 선주문정보조회
+		GagaMap refundPreInfo = orderChangeService.getRefundPreInfo(cnclReq);
 		
 		// 2. 환불금액계산
 		// 2021.01.19 취소신청정보를 목록 (주문상세번호, 취소/반품수량) 으로 표현
 		mav = orderRefundService.cnclRtnRefundAmt(cnclReqList);
 		
 		// 3. 주문변경 기본정보 설정
-		mav.set("ordNo"					, cnclReq.getOrdNo());					// 주문번호
-		mav.set("ordChgSq"				, cnclReq.getOrdChgSq());				// 주문변경번호
-		mav.set("chgReason"				, cnclReq.getChgReason());				// 변경사유
-		mav.set("chgMemo"				, cnclReq.getChgMemo());				// 변경메모
-		
-		mav.set("accountNo"				, cnclReq.getAccountNo());				// 환불계좌번호
-		mav.set("accountNm"				, cnclReq.getAccountNm());				// 환불계좌예금주명
-		mav.set("bankCd"				, cnclReq.getBankCd());					// 환불계좌은행코드
-		
-		mav.set("allCanYnBeforePayment"	, cnclReq.getAllCanYnBeforePayment());	// 무통장입금전 전체취소 여부
-		mav.set("allCanYn"				, cnclReq.getAllCanYn());				// 전체취소 여부
-		mav.set("isCustomer"			, cnclReq.getIsCustomer());				// 변경사유 (고객, 회사)
-		
-		// 4. 주문변경 회수지정보 추가
-		mav.set("chgerNm"				, cnclReq.getChgerNm());				// 변경자명
-		mav.set("chgerEmail"			, cnclReq.getChgerEmail());				// 변경자이메일주소
-		mav.set("chgerPhnno"			, cnclReq.getChgerPhnno());				// 변경자핸드폰번호
-		mav.set("chgerTelno"			, cnclReq.getChgerTelno());				// 변경자전화번호
-		
-		mav.set("reqGbn"				, cnclReq.getReqGbn());					// 신청구분
+		mav.set("ordNo"					, cnclReq.getOrdNo());						// 주문번호
+		mav.set("ordChgSq"				, cnclReq.getOrdChgSq());					// 주문변경번호
+		mav.set("chgReason"				, cnclReq.getChgReason());					// 변경사유
+		mav.set("chgReasonNm"			, cnclReq.getChgReasonNm());				// 변경사유명 (2021.05.13 추가)
+		mav.set("chgMemo"				, cnclReq.getChgMemo());					// 변경메모
+		mav.set("accountNo"				, cnclReq.getAccountNo());					// 환불계좌번호
+		mav.set("accountNm"				, cnclReq.getAccountNm());					// 환불계좌예금주명
+		mav.set("bankCd"				, cnclReq.getBankCd());						// 환불계좌은행코드
+		mav.set("allCanYnBeforePayment"	, cnclReq.getAllCanYnBeforePayment());		// 무통장입금전 전체취소 여부
+		mav.set("allCanYn"				, cnclReq.getAllCanYn());					// 전체취소 여부
+		mav.set("allLastCanYn"			, cnclReq.getAllCanYn());					// 전체 마지막 취소 여부 (2021.05.13 추가)
+		mav.set("isCustomer"			, cnclReq.getIsCustomer());					// 변경사유 (고객, 회사)
+		mav.set("chgerNm"				, cnclReq.getChgerNm());					// 변경자명
+		mav.set("chgerEmail"			, cnclReq.getChgerEmail());					// 변경자이메일주소
+		mav.set("chgerPhnno"			, cnclReq.getChgerPhnno());					// 변경자핸드폰번호
+		mav.set("chgerTelno"			, cnclReq.getChgerTelno());					// 변경자전화번호
+		mav.set("reqGbn"				, cnclReq.getReqGbn());						// 신청구분
+		mav.set("ipAddress"				, cnclReq.getIpAddress());					// IP주소 (2021.05.13 추가)
+		mav.set("custNo"				, cnclReq.getCustNo());						// 고객번호 (2021.05.13 추가)
+		
+		mav.set("pgTid"					, refundPreInfo.getString("pgTid"));		// PG거래ID
+		mav.set("payMeans"				, refundPreInfo.getString("payMeans"));		// 결제수단
+		mav.set("pgGb"					, refundPreInfo.getString("pgGb"));			// PG구분
+		mav.set("cashAuthNo"			, refundPreInfo.getString("cashAuthNo"));	// 현금영수증 승인번호
 				
 		// 5. 주문변경 DB 등록 (TB_ORDER_CHANGE, TB_ORDER_CHANGE_DETAIL)
-		orderChangeService.cnclComplete(mav, userNo);
+		//orderChangeService.cnclComplete(mav, userNo);
+
+		// 5. 부분취소 처리 2021.05.13
+		orderChangeService.partialCancel(mav, userNo);
 		
 		return super.ok("성공");
 	}

+ 1 - 3
src/main/java/com/style24/admin/biz/web/TsaOrderController.java

@@ -85,11 +85,9 @@ public class TsaOrderController extends TsaBaseController {
 		
 		// 2021.05.11 프론트기준으로 상태값 정리
 		mav.addObject("ordDtlStatList"	, rendererService.getCommonCodeList("G013", "Y", new String[] {"G013_10", "G013_11", "G013_25", "G013_35", "G013_55", "G013_97", "G013_98", "G013_99"}));
-		//mav.addObject("ordStatList"		, rendererService.getAvailCommonCodeList("G012"));		// 주문상태코드
-		//mav.addObject("ordDtlStatList"	, rendererService.getAvailCommonCodeList("G013"));		// 주문상세상태코드
-
 		mav.addObject("chgStatList"		, rendererService.getAvailCommonCodeList("G685"));		// 주문변경요청상태코드
 		mav.addObject("chgGbList"		, rendererService.getAvailCommonCodeList("G680"));		// 주문변경구분코드
+		mav.addObject("pgGbList"		, rendererService.getAvailCommonCodeList("G015"));		// 결제타입
 		mav.addObject("payMeansList"	, rendererService.getAvailCommonCodeList("G014"));		// 결제수단
 		mav.addObject("siteCdList"		, rendererService.getAvailCommonCodeList("G000"));		// 사이트구분
 		mav.addObject("formalGbList"	, rendererService.getAvailCommonCodeList("G009"));		// 정상/이월

+ 6 - 2
src/main/java/com/style24/admin/support/interceptor/TsaDefaultInterceptor.java

@@ -87,8 +87,12 @@ public class TsaDefaultInterceptor extends HandlerInterceptorAdapter {
 			String params = IOUtils.toString(request.getInputStream(), StandardCharsets.UTF_8);
 			log.info("params: {}", params);
 
-			// 메뉴접속이력 생성
-			systemService.createMenuAccessHistory(ckMenuId, reqUrl, (params.isEmpty() ? "" : params.toString()));
+			try {
+				// 메뉴접속이력 생성
+				systemService.createMenuAccessHistory(ckMenuId, reqUrl, (params.isEmpty() ? "" : params.toString()));
+			} catch (Exception e) {
+				// Do nothing
+			}
 		}
 	}
 

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

@@ -138,9 +138,11 @@
 		FROM TB_NOTI_INFO B
 		INNER JOIN TB_COMMON_CODE C ON B.NI_CLSF_CD = C.CD 
 		WHERE B.SUPPLY_COMP_CD = CASE #{supplyCompCd} 
-		                         WHEN '1003' THEN '1003'
-		                         WHEN '1004' THEN '1004'
-		                         WHEN '1005' THEN '1005'
+		                         WHEN '1' THEN '1'
+		                         WHEN '2' THEN '2'
+		                         WHEN '3' THEN '3'
+		                         WHEN '4' THEN '4'
+		                         WHEN '5' THEN '5'
 		                         ELSE 'E' END 
 		AND C.CD_GB = 'G004'   /*고시정보*/
 		ORDER BY C.DISP_ORD
@@ -157,9 +159,11 @@
 		     , B.DISP_ORD
 		FROM TB_NOTI_INFO B
 		WHERE B.SUPPLY_COMP_CD = CASE #{supplyCompCd} 
-		                         WHEN '1003' THEN '1003'
-		                         WHEN '1004' THEN '1004'
-		                         WHEN '1005' THEN '1005'
+		                         WHEN '1' THEN '1'
+		                         WHEN '2' THEN '2'
+		                         WHEN '3' THEN '3'
+		                         WHEN '4' THEN '4'
+		                         WHEN '5' THEN '5'
 		                         ELSE 'E' END 
 		<if test="niClsfCd != null and niClsfCd != ''">
 		AND B.NI_CLSF_CD = #{niClsfCd}
@@ -413,7 +417,14 @@
 		    , 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
+		<choose>
+		<when test='goodsPriceYn != null and goodsPriceYn == "Y"'>
 		    , IFNULL(GB.PC_CURR_PRICE, Q.CURR_PRICE)  AS BENEFIT_PRICE
+		</when>
+		<otherwise>
+		    , 0  AS BENEFIT_PRICE
+		</otherwise>
+		</choose>
 		FROM (     
 		SELECT Z.*
 		FROM (
@@ -526,7 +537,14 @@
 		              </foreach>
 		             )
 		              </when>
-		              <when test='search != null and search == "searchGoodsNum"'>
+		              <when test='search != null and search == "searchGoodsNm"'>
+		        AND (
+		              <foreach collection="conditionList" item="item" index="index" separator="or">
+		               UPPER(G.GOODS_NM) LIKE CONCAT('%',UPPER(#{item}),'%')
+		              </foreach>
+		             )
+		              </when>
+		               <when test='search != null and search == "searchGoodsNum"'>
 		        AND (
 		              <foreach collection="conditionList" item="item" index="index" separator="or">
 		               UPPER(G.GOODS_NUM) LIKE CONCAT('%',UPPER(#{item}),'%')
@@ -997,9 +1015,11 @@
 		INNER JOIN TB_NOTI_INFO A ON C.NI_CLSF_CD = A.NI_CLSF_CD
 		                          AND C.NI_ITEM_CD = A.NI_ITEM_CD
 		                          AND A.SUPPLY_COMP_CD = CASE B.SUPPLY_COMP_CD
-		                                                      WHEN '1003' THEN '1003'
-		                                                      WHEN '1004' THEN '1004'
-		                                                      WHEN '1005' THEN '1005'
+		                                                      WHEN '1' THEN '1'
+		                                                      WHEN '2' THEN '2'
+		                                                      WHEN '3' THEN '3'
+		                                                      WHEN '4' THEN '4'
+		                                                      WHEN '5' THEN '5'
 		                                                      ELSE 'E' 
 		                                                 END
 		WHERE C.GOODS_CD = #{goodsCd}
@@ -1041,9 +1061,11 @@
 		 WHERE 1 = 1
 		 AND N.NI_CLSF_CD = #{niClsfCd}
 		 AND N.SUPPLY_COMP_CD =  CASE G.SUPPLY_COMP_CD
-		                                WHEN '1003' THEN '1003'
-		                                WHEN '1004' THEN '1004'
-		                                WHEN '1005' THEN '1005'
+		                                WHEN '1' THEN '1'
+		                                WHEN '2' THEN '2'
+		                                WHEN '3' THEN '3'
+		                                WHEN '4' THEN '4'
+		                                WHEN '5' THEN '5'
 		                                ELSE 'E' 
 		                           END 
 		 ORDER BY  G.GOODS_CD , N.NI_CLSF_CD, N.DISP_ORD

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

@@ -145,6 +145,7 @@
 		SELECT COUNT(1)
 		  FROM TB_PlAN
 		 WHERE 1=1
+		 AND DEL_YN = 'N'
 		 <include refid="getPlanListCondition_sql"/>
 	</select>
 	

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

@@ -63,7 +63,7 @@ upload:
         target.path: /files/data/style24/sample
         max.size: 10
         allow.extension: txt|doc|docx|ppt|pptx|xls|xlsx|hwp|pdf
-        view: //image.style24.com/Upload/sample
+        view: //image.istyle24.com/Upload/sample
 
 download.path: /files/data/style24
 

+ 4 - 7
src/main/webapp/WEB-INF/views/business/SupplyCompanyForm.html

@@ -157,12 +157,13 @@
 						<th>사업장주소</th>
 						<td colspan="5">
 							<input type="text" name="bizZipcode"  class="w100" data-valid-name="우편번호" readonly="readonly"/>
+							<button type="button" class="btn btn-info btn-lg" onclick="fnOpenDaumAddr();">우편번호찾기</button>
 							<input type="text" name="bizBaseAddr" class="w300" maxlength="200" readonly="readonly"/>
-							<input type="text" name="bizDtlAddr" class="w300" maxlength="200" readonly="readonly"/>
+							<input type="text" name="bizDtlAddr" class="w300" maxlength="200"/>
 						</td>
 						<th>홈페이지URL</th>
 						<td>
-							<input type="text" name="homepageUrl" readonly="readonly"/>
+							<input type="text" name="homepageUrl" maxlength="100" readonly="readonly"/>
 						</td>
 					</tr>
 					<tr>
@@ -469,6 +470,7 @@
 		$('#detailForm input[name=accountNo]').val(event.data.accountNo);
 		$('#detailForm input[name=depositorNm]').val(event.data.depositorNm);
 		$('#detailForm textarea[name=remarks]').val(event.data.remarks);
+		$('#detailForm textarea[name=note]').val(event.data.note);
 		
 		if (event.data.useYn == 'Y') {
 			$('#detailForm input:radio[name=useYn]').eq(0).trigger('click');
@@ -482,11 +484,6 @@
 			$('#detailForm input:radio[name=shotDelvYn]').eq(1).trigger('click');
 		}
 		
-		// 공지내용. Summernote에 값 세팅
-		if (!gagajf.isNull(event.data.note)){
-			gagaSn.setContents('#note', event.data.note);	
-		}
-		
 		// 배송비 정책 조회
 		fnGetDeliveryFeePolicy(event.data.supplyCompCd);
 	}

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

@@ -14,7 +14,7 @@
  * 1.0  2020.10.29   eskim       최초 작성
  *******************************************************************************
  -->	
-	<div class="modalPopup" data-width="1100" >
+	<div class="modalPopup" data-width="1200" >
 		<div class="panelStyle">
 			<div class="panelTitle">
 				<h2>딜 상품 구성</h2>
@@ -257,9 +257,10 @@
 			if (goods.goodsType != "G056_N"){
 				isExist = true;
 			}
-			if (goods.selfGoodsYn != "Y"){
-				isExist = true;
-			}
+			// 입점상품 허용 - 20210512
+			//if (goods.selfGoodsYn != "Y"){
+			//	isExist = true;
+			//}
 
 			if(!isExist){
 				var data = { 

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

@@ -262,9 +262,9 @@
 		{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: "stockQtySum", width: 80, cellClass: 'text-right',
+		/* {headerName: "재고", field: "stockQtySum", width: 80, cellClass: 'text-right',
 			valueFormatter: function(params) {	return params.value.addComma();}
-		},
+		}, */
 		{headerName: "상품상태", field: "goodsStat" , width: 120, cellClass: 'text-center',
 			cellEditorParams: { values: gagaAgGrid.extractValues(goodsStatList) },
 			valueFormatter: function (params) { return gagaAgGrid.lookupValue(goodsStatList, params.value); },

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

@@ -14,7 +14,7 @@
  * 1.0  2020.11.04   eskim       최초 작성
  *******************************************************************************
  -->	
-	<div class="modalPopup" data-width="1100" >
+	<div class="modalPopup" data-width="1250" >
 		<div class="panelStyle">
 			<div class="panelTitle">
 				<h2>세트 상품 구성</h2>
@@ -28,7 +28,7 @@
 						<!-- 아이콘 툴팁 -->
 						<div class="iconTooltip">
 							<i class="fa fa-info" aria-hidden="true"></i>
-							<span class="left" style="width:400px; text-align:left;">
+							<span class="left" style="width:450px; text-align:left;">
 							<!-- class="left" 또는 class="right" -->
 								* 세트상품 정보<br/>
 								&nbsp;&nbsp;- 상품상태 : 정보부족<br/>
@@ -40,7 +40,7 @@
 								&nbsp;&nbsp;- 배송비정책 : 구성상품의 기준여부 'Y'상품의 브랜드 배송비정책<br/>
 								<br/>
 								* 구성상품 정보<br/>
-								&nbsp;&nbsp;- 구상상품판매가 : 구성상품의 수량만큼의 판매가 합 입력<br/>
+								&nbsp;&nbsp;- 세트구상상품판매가 : 구성상품의 세트구성수량만큼의 판매가 합 입력<br/>
 								&nbsp;&nbsp;- 구상상품의 기준상품 : 수정 불가<br/>
 							</span>
 						</div>
@@ -91,6 +91,12 @@
 							<input type="hidden" id="makeNm" name="makeNm" />
 						</td>
 					</tr>
+					<tr>
+						<th>세트상품판매가</th>
+						<td colspan="7">
+							<div id="setGoodsCurrPrice"></div>
+						</td>
+					</tr>
 				</table>
 			</div>	
 			<ul class="panelBar">
@@ -98,6 +104,7 @@
 					<button type="button" class="btn btn-danger btn-lg" onclick="fnGoodsSetDeleteRow();">행삭제</button>
 				</li>
 				<li class="right">
+					<strong class="cRed">* 세트상품의 판매가는 세트구상상품판매가의 합로 설정되므로 구성상품의 세트구성수량과 세트구성상품판매가를 꼭 확인하세요.&nbsp;&nbsp;&nbsp;</strong>
 					<button type="button" class="btn btnRight btn-base btn-lg" onclick="fnOpenGoodsSetPopup();">구상상품추가</button>
 				</li>
 			</ul>
@@ -127,10 +134,10 @@
 			}
 		},
 		{headerName: "구성상품코드", field: "compsGoodsCd" , width: 130, cellClass: 'text-center'},
-		{headerName: "구성상품명", field: "goodsNm" , width: 250, cellClass: 'text-left'},
+		{headerName: "구성상품명", field: "goodsNm" , width: 200, cellClass: 'text-left'},
 		//{headerName: "순서", field: "dispOrd" , width: 100, cellClass: 'text-center',editable: true, required: true},
-		{headerName: "수량", field: "qty" , width: 80, cellClass: 'text-right',editable: true, required: true},
-		{headerName: "상품판매가", field: "compsCurrPrice" , width: 120, cellClass: 'text-right', editable: true, required: true,
+		{headerName: "세트구성수량", field: "qty" , width: 120, cellClass: 'text-right',editable: true, required: true},
+		{headerName: "세트구성상품판매가", field: "compsCurrPrice" , width: 150, cellClass: 'text-right', editable: true, required: true,
 			cellEditor: 'textCellEditor',
 			cellEditorParams: { maxlength: 14, validType: 'numeric'}
 		},
@@ -140,6 +147,10 @@
 			valueFormatter: function (params) { return gagaAgGrid.lookupValue(useYnList, params.value); },
 			valueParser: function (params) { return gagaAgGrid.lookupKey(useYnList, params.newValue); }
 		},
+		{headerName: "상품판매가", field: "currPrice" , width: 120, cellClass: 'text-right', editable: true, required: true,
+			cellEditor: 'textCellEditor',
+			cellEditorParams: { maxlength: 14, validType: 'numeric'}
+		},
 		{headerName: "상품상태", field: "goodsStat" , width: 100, cellClass: 'text-center',
 			cellEditorParams: { values: gagaAgGrid.extractValues(goodsStatList) },
 			valueFormatter: function (params) { return gagaAgGrid.lookupValue(goodsStatList, params.value); },
@@ -168,6 +179,7 @@
 		}	
 	}
 	
+
 	// Row 
 	gridGoodsSetOptions.onCellValueChanged = function(event) {
 		var rowIdx = null;
@@ -192,6 +204,18 @@
 				}
 			}	
 		}
+		
+		if (event.colDef.field == "compsCurrPrice"){
+			var setGoodsCurrPrice = 0;
+			
+			gridGoodsSetOptions.api.forEachNode(function(rowNode, index) {
+				if (!gagajf.isNull(rowNode.data.compsCurrPrice)){
+					setGoodsCurrPrice += Number(rowNode.data.compsCurrPrice);
+				}
+			});
+			$('#goodsSetForm').find('#setGoodsCurrPrice').html(setGoodsCurrPrice.addComma());
+		}
+		
 	}
 	
 	//창종료
@@ -215,6 +239,7 @@
 		// 기존상품
 		var oldGoodsSetList = gagaAgGrid.getAllRowData(gridGoodsSetOptions);
 		var idx = oldGoodsSetList.length+1; 
+		var setGoodsCurrPrice = 0;
 		
 		var isExist = false;
 		goodsData.forEach(function(goods){
@@ -230,6 +255,11 @@
 				if (goods.supplyCompCd != rowNode.data.supplyCompCd){
 					isExist = true;
 				}
+				
+				if (!gagajf.isNull(rowNode.data.compsCurrPrice)){
+					setGoodsCurrPrice += Number(rowNode.data.compsCurrPrice);
+				}
+				 
 			});
 
 			if (goods.goodsType != "G056_N"){
@@ -246,6 +276,7 @@
 						, dispOrd: idx
 						, qty: 1
 						, compsCurrPrice: goods.currPrice
+						, currPrice: goods.currPrice
 						, baseYn: 'N'
 						, goodsStat : goods.goodsStat
 						, useYn: 'Y'
@@ -254,6 +285,7 @@
 						, supplyCompCd : goods.supplyCompCd
 						, sysImgNm : goods.sysImgNm
 						};
+				setGoodsCurrPrice += Number(goods.currPrice);
 				//그리드 마지막에 추가해야함
 				gridGoodsSetOptions.api.updateRowData({add: [data], addIndex: idx});
 				gridGoodsSetOptions.api.refreshCells();
@@ -261,6 +293,7 @@
 			
 			}
 		});
+		$('#goodsSetForm').find('#setGoodsCurrPrice').html(setGoodsCurrPrice.addComma());
 	}
 	
 	// 저장클릭시

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

@@ -31,9 +31,9 @@
 					<li>
 						<h3>업체명</h3>
 						<select name="supplyCompCd" id="supplyCompCd">
-							<option value="1003" selected="selected">한세드림</option>
-							<option value="1004">(주)에프알제이</option>
-							<option value="1005">(주)엠케이트렌드</option>
+							<option value="3" selected="selected">한세드림</option>
+							<option value="4">(주)에프알제이</option>
+							<option value="5">(주)엠케이트렌드</option>
 						</select>
 						<button type="button" class="btn btn-dark btn-sm" id="btnAddRow">행추가</button>
 					</li>

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

@@ -31,9 +31,9 @@
 					<li>
 						<h3>업체명</h3>
 						<select name="supplyCompCd" id="supplyCompCd">
-							<option value="1003" selected="selected">한세드림</option>
-							<option value="1004">(주)에프알제이</option>
-							<option value="1005">(주)엠케이트렌드</option>
+							<option value="3" selected="selected">한세드림</option>
+							<option value="4">(주)에프알제이</option>
+							<option value="5">(주)엠케이트렌드</option>
 						</select>
 						<button type="button" class="btn btn-dark btn-sm" id="btnAddRow">행추가</button>
 					</li>

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

@@ -31,9 +31,9 @@
 					<li>
 						<h3>업체명</h3>
 						<select name="supplyCompCd" id="supplyCompCd">
-							<option value="1003" selected="selected">한세드림</option>
-							<option value="1004">(주)에프알제이</option>
-							<option value="1005">(주)엠케이트렌드</option>
+							<option value="3" selected="selected">한세드림</option>
+							<option value="4">(주)에프알제이</option>
+							<option value="5">(주)엠케이트렌드</option>
 						</select>
 						<button type="button" class="btn btn-dark btn-sm" id="btnAddRow">행추가</button>
 					</li>

+ 9 - 5
src/main/webapp/WEB-INF/views/marketing/CouponPopupForm.html

@@ -338,7 +338,7 @@
 											<th>결제수단<em class="required" title="필수"></em></th>
 											<td colspan="5">
 												<label class="chkBox" th:if="${payTypeList}" th:each="oneData, status : ${payTypeList}">
-													<input type="checkbox" name="payTypeArr" th:value="${oneData.cd}" th:text="${oneData.cdNm}"/>
+													<input type="checkbox" name="payTypeArr" th:value="${oneData.cd}" th:text="${oneData.cdNm}" checked="checked"/>
 												</label>
 											</td>
 										</tr>
@@ -2486,10 +2486,6 @@
 				$("#CouponForm .buttonSpan").hide();	//행추가,삭제버튼
 			}
 
-			if($("#CouponForm input[name=rdoDcWay]:checked").val() == 'G240_10'){
-				$("#CouponForm .maxDcAmtArea").hide();
-			}
-
 			// 사용가능고객구분 체크박스 체크 제거
 			$('#CouponForm input:checkbox[name=usableCustGbArr]').prop('checked', false);
 			if(cpnCustGbList.length > 0){
@@ -2727,6 +2723,14 @@
 				}
 			}
 
+			if($("#CouponForm input[name=rdoDcWay]:checked").val() == 'G240_10') {
+				$("#CouponForm .maxDcAmtArea").hide();
+			}else{
+				$('#dcPvalSpan').text("%");
+				$('#dcMvalSpan').text("%");
+				$('#dcAvalSpan').text("%");
+			}
+
 			// 쿠폰다운 날짜
 			let edDtArr;
 			if(!gagajf.isNull(cpnDetail.downEddt)){

+ 8 - 4
src/main/webapp/WEB-INF/views/marketing/PlanDetailPopupForm.html

@@ -1152,10 +1152,14 @@
 					if(!validationPlanDetail()){
 						return false;
 					}
-					if ($('#planRegisterForm input[name=mainPimg]').val()=='') {
-						mcxDialog.alert("메인이미지를 등록하세요.");
-						return false;
-					}
+					
+					if($('#planRegisterForm select[name=planGb]').val() != 'S'){
+						if ($('#planRegisterForm input[name=mainPimg]').val()=='') {
+							mcxDialog.alert("목록 이미지를 등록하세요.");
+							return false;
+						}
+					} 
+					
 					var chkFrontGb = $('#planRegisterForm input:checkbox[name=frontGb]:checked');
 					
 					if(chkFrontGb.length < 1){

+ 0 - 7
src/main/webapp/WEB-INF/views/marketing/PlanPopupForm.html

@@ -86,13 +86,6 @@
 										th:value="${oneData.cd}"
 										th:text="|[${oneData.cd}] ${oneData.cdNm}|"></option>
 							</select></td>
-
-							<!-- <th>기획전템플릿유형</th>
-							<td colspan="3"><select name="templateType">
-									<option value="">전체</option>
-									<option value="H">HTML</option>
-									<option value="T">TEXT</option>
-							</select></td> -->
 						</tr>
 
 						<tr>

+ 235 - 270
src/main/webapp/WEB-INF/views/order/CnclReqForm.html

@@ -56,7 +56,11 @@
 							<td>
 								<select name="selectChgReason" onchange="fnChangeChgReason($(this).val());">
 									<option value="">[선택하세요]</option>
-									<option th:if="${chgReasonList}" th:each="oneData, status : ${chgReasonList}" th:value="|${oneData.cd}|" th:text="|${oneData.cdNm}|"></option>
+									<th:block th:each="oneData, status : ${chgReasonList}">
+										<th:block th:if="${oneData.cd} == G686_10 or ${oneData.cd} == G686_20 or ${oneData.cd} == G686_30">
+											<option th:if="${chgReasonList}"  th:value="|${oneData.cd}|" th:text="|${oneData.cdNm}|"></option>
+										</th:block>
+									</th:block>
 								</select>
 							</td>
 							<th>귀책사유</th>
@@ -85,38 +89,38 @@
 							<td colspan="3"><span id="spanPayAmt"></span>원 (상품 실결제 금액 : <span id="spanSumRealOrdAmt"></span>원, 배송금액 : <span id="spanSumDeliveryFee"></span>원) </td>
 						</tr>
 						<tr>
-							<th>주문 상품 금액</th>
+							<th>상품 주문 금액</th>
 							<td><span id="spanOrdAmt"></span>원</td>
-							<th>취소 상품 금액</th>
+							<th>상품 취소 금액</th>
 							<td><span id="spanCnclRtnAmt"></span>원</td>
 						</tr>
 						<tr>
-							<th>취소 사용 포인트</th>
+							<th>포인트 취소 금액</th>
 							<td colspan="3"><span id="spanTotPntDcAmt"></span>원 (고객 포인트 : <span id="spanPntDcAmt"></span>원 + 상품 선포인트 : <span id="spanPrePntDcAmt"></span>원) </td>
 						</tr>
 						<tr>
-							<th>취소 사용 쿠폰금액</th>
+							<th>쿠폰 취소 금액</th>
 							<td colspan="3"><span id="spanCpnDcAmt"></span>원 (즉시할인쿠폰 : <span id="spanCpn1DcAmt"></span>원 + 상품쿠폰 : <span id="spanGoodsCpnDcAmt"></span>원 + 장바구니쿠폰 : <span id="spanCartCpnDcAmt"></span>원)</td>
 						</tr>
 						<tr>
-							<th>취소 다다익선 금액</th>
+							<th>다다익선 취소 금액</th>
 							<td colspan="3"><span id="spanTmtbDcAmt"></span>원 (수량할인 : <span id="spanTmtb1DcAmt"></span>원 + 금액할인 : <span id="spanTmtb2DcAmt"></span>원)</td>
 						</tr>
 						
 						<tr>
-							<th>취소 고객 상품권 금액</th>
+							<th>상품권 취소 금액</th>
 							<td colspan="3"><span id="spanGfcdUseAmt"></span>원</td>
 						</tr>
 						
 						<tr>
-							<th>취소 상품 실결제 금액</th>
+							<th>상품 실결제 취소 금액</th>
 							<td><span id="spanRealCnclRtnAmt"></span>원</td>
-							<th>추가 배송 금액</th>
+							<th>추가 배송 금액</th>
 							<td><span id="spanTotDeliveryFee"></span>원 </td>
 						</tr>
 						
 						<tr>
-							<th>환불 금액 합계</th>
+							<th>환불 예정 금액</th>
 							<td colspan="3"><span id="spanRefundAmt"></span>원</td>
 						</tr>
 					</tbody>
@@ -144,6 +148,7 @@ var orderChangeDetailList 	= [[${orderChangeDetailList}]];					// 취소/반품/
 var payMeans 				= orderInfoList[0].payMeans;					// 결제수단
 var chgReason				= "";											// 변경사유코드
 var chgMemo					= "";											// 변경사유메모
+var cancelRequestTargetCnt 	= [[${cancelRequestTargetList.size()}]];		// 환불정보
 
 // 변경요청정보 승인, 철회
 if (ordChgSq > 0) {
@@ -152,279 +157,233 @@ if (ordChgSq > 0) {
 }
 
 var temp1 = true;
-var temp2 = true;
+var temp2 = false;
+var temp3 = true;
 
 // 1. 주문정보(변경요청가능대상)
 var columnCancelReqList = [
+	{headerName: "주문번호"		, field: "ordNo"			, width: 80		, cellClass: 'text-center', hide: temp1},
+	{headerName: "주문상세"		, field: "ordDtlNo"			, width: 80		, cellClass: 'text-center'},
+	{headerName: "주문상세"		, field: "ordDtlStat"		, width: 80		, cellClass: 'text-center', hide: temp1},
+	{headerName: "주문상세상태"		, field: "ordDtlStatNm"		, width: 100	, cellClass: 'text-center', hide: temp1},
+	{headerName: "상품코드"		, field: "goodsCd"			, width: 100	, cellClass: 'text-left', hide: temp2},
+	{headerName: "상품명"			, field: "goodsNm"			, width: 200	, cellClass: 'text-left', hide: temp2},
+	{headerName: "상품타입"		, field: "goodsTypeNm"		, width: 100	, cellClass: 'text-center', hide: temp2},
 	{
-		headerName	: "주문상세정보",
-		children	: [
-			{headerName: "주문번호"		, field: "ordNo"			, width: 80		, cellClass: 'text-center', hide: temp1},
-			{headerName: "주문상세"		, field: "ordDtlNo"			, width: 80		, cellClass: 'text-center'},
-			{headerName: "주문상세"		, field: "ordDtlStat"		, width: 80		, cellClass: 'text-center', hide: temp1},
-			{headerName: "주문상세상태"		, field: "ordDtlStatNm"		, width: 100	, cellClass: 'text-center', hide: temp1},
-			{headerName: "상품코드"		, field: "goodsCd"			, width: 100	, cellClass: 'text-center', hide: temp1},
-			{headerName: "상품명"			, field: "goodsNm"			, width: 200	, cellClass: 'text-center', hide: temp1},
-			{headerName: "상품타입"		, field: "goodsTypeNm"		, width: 100	, cellClass: 'text-center', hide: temp2}
-		]
+		headerName		: "옵션금액"		
+		, field			: "optAddPrice"			
+		, width			: 80		
+		, cellClass		: 'text-right'
+		, cellRenderer	: function (params) {
+			return params.value.addComma();
+		}
+		, hide			: temp1
 	},
 	{
-		headerName	: "주문상세단품정보",
-		children	: [
-			{headerName: "단품번호"		, field: "ordDtlItemSq"		, width: 100	, cellClass: 'text-center', hide: temp2},
-			{headerName: "단품코드"		, field: "itemCd"			, width: 100	, cellClass: 'text-center', hide: temp2},
-			{headerName: "단품명"			, field: "itemNm"			, width: 200	, cellClass: 'text-center', hide: temp2},
-			{headerName: "옵션1"			, field: "optCd1"			, width: 80		, cellClass: 'text-center', hide: temp1},
-			{headerName: "옵션2"			, field: "optCd2"			, width: 80		, cellClass: 'text-center', hide: temp2},
-			{
-				headerName		: "단품수량"		
-				, field			: "itemQty"			
-				, width			: 80		
-				, cellClass		: 'text-center'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-			},
-			{
-				headerName		: "단품금액"		
-				, field			: "itemPrice"			
-				, width			: 80		
-				, cellClass		: 'text-right'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-			},
-			{
-				headerName		: "단품옵션금액"		
-				, field			: "optAddPrice"			
-				, width			: 80		
-				, cellClass		: 'text-right'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-			}
-		]
+		headerName		: "주문"		
+		, field			: "ordQty"			
+		, width			: 80		
+		, cellClass		: 'text-center'
+		, cellRenderer	: function (params) {
+			return params.value.addComma();
+		}
 	},
 	{
-		headerName	: "주문상세수량",
-		children	: [
-			{
-				headerName		: "주문"		
-				, field			: "ordQty"			
-				, width			: 80		
-				, cellClass		: 'text-center'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-			},
-			{
-				headerName		: "취소/요청"		
-				, field			: "cnclRtnQty"			
-				, width			: 80		
-				, cellClass		: 'text-center'
-				, cellRenderer	: function (params) {
-					var cnclRtnReqQty = parseInt(params.data.cnclRtnQty) + parseInt(params.data.ordReqChgQty);
-					return cnclRtnReqQty;
-				}
-			},
-			{
-				headerName		: "취소/반품"		
-				, field			: "ordCanChgQty"			
-				, width			: 100		
-				, cellClass		: 'text-center'
-				, cellRenderer	: function (params) {
-					var ordQty 			= parseInt(params.data.ordQty);
-					var cnclRtnQty 		= parseInt(params.data.cnclRtnQty);
-					var ordReqChgQty 	= parseInt(params.data.ordReqChgQty);
-					var ordCanChgQty 	= parseInt(params.value);
-					var rtnStr 			= "";
-					
-					// 취소신청가능수량있으면 수량만 표시 (취소,반품,교환 신청정보 처리)
-					if (ordChgSq > 0) {
-						rtnStr = ordCanChgQty;
+		headerName		: "취소/요청"		
+		, field			: "cnclRtnQty"			
+		, width			: 80		
+		, cellClass		: 'text-center'
+		, cellRenderer	: function (params) {
+			var cnclRtnReqQty = parseInt(params.data.cnclRtnQty) + parseInt(params.data.ordReqChgQty);
+			return cnclRtnReqQty;
+		}
+	},
+	{
+		headerName		: "취소/반품"		
+		, field			: "ordCanChgQty"			
+		, width			: 100		
+		, cellClass		: 'text-center'
+		, cellRenderer	: function (params) {
+			var ordQty 			= parseInt(params.data.ordQty);
+			var cnclRtnQty 		= parseInt(params.data.cnclRtnQty);
+			var ordReqChgQty 	= parseInt(params.data.ordReqChgQty);
+			var ordCanChgQty 	= parseInt(params.value);
+			var rtnStr 			= "";
+			
+			// 취소신청가능수량있으면 수량만 표시 (취소,반품,교환 신청정보 처리)
+			if (ordChgSq > 0) {
+				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++) {
+					if (i == params.data.ordCanChgQty) {
+						rtnStr += "	<option value='"+i+"' selected>"+i+"</option>";
 					} else {
-						ordCanChgQty 	= ordQty - (cnclRtnQty +  ordReqChgQty);
-						
-						rtnStr += "<select class='ordCanChgQty' name='ordCanChgQty' ordDtlNo='"+params.data.ordDtlNo+"' onChange='fnCalculateRefundAmt(this);'>";
-						
-						for (i=0 ; i<=ordCanChgQty ; i++) {
-							if (i == params.data.ordCanChgQty) {
-								rtnStr += "	<option value='"+i+"' selected>"+i+"</option>";
-							} else {
-								rtnStr += "	<option value='"+i+"'>"+i+"</option>";
-							}
-						}
-					
-						rtnStr += "</select>";
+						rtnStr += "	<option value='"+i+"'>"+i+"</option>";
 					}
-					
-					return rtnStr;
 				}
+			
+				rtnStr += "</select>";
 			}
-		]
+			
+			return rtnStr;
+		}
 	},
 	{
-		headerName	: "주문단품금액",
-		children	: [
-			{
-				headerName		: "주문"
-				, field			: "ordAmt"			
-				, width			: 80		
-				, cellClass		: 'text-right'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-			},
-			{
-				headerName		: "취소"		
-				, field			: "cnclRtnAmt"			
-				, width			: 80		
-				, cellClass		: 'text-right'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-			},
-			{
-				headerName		: "즉시할인"		
-				, field			: "cpn1DcAmt"			
-				, width			: 80		
-				, cellClass		: 'text-right'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-			},
-			{
-				headerName		: "다다익선1"		
-				, field			: "tmtb1DcAmt"			
-				, width			: 80		
-				, cellClass		: 'text-right'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-			},
-			{
-				headerName		: "다다익선2"		
-				, field			: "tmtb2DcAmt"			
-				, width			: 80		
-				, cellClass		: 'text-right'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-			},
-			{
-				headerName		: "상품쿠폰"		
-				, field			: "goodsCpnDcAmt"			
-				, width			: 80		
-				, cellClass		: 'text-right'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-			},
-			{
-				headerName		: "장바구니쿠폰"		
-				, field			: "cartCpnDcAmt"			
-				, width			: 80		
-				, cellClass		: 'text-right'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-			},
-			{
-				headerName		: "포인트"		
-				, field			: "pntDcAmt"			
-				, width			: 80		
-				, cellClass		: 'text-right'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-			},
-			{
-				headerName		: "선포인트"		
-				, field			: "prePntDcAmt"			
-				, width			: 80		
-				, cellClass		: 'text-right'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-			},
-			{
-				headerName		: "상품권"		
-				, field			: "gfcdUseAmt"			
-				, width			: 80		
-				, cellClass		: 'text-right'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-			},
-			{
-				headerName		: "실결제금액"		
-				, field			: "realOrdAmt"			
-				, width			: 80		
-				, cellClass		: 'text-right'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-			}
-		]
+		headerName		: "주문"
+		, field			: "ordAmt"			
+		, width			: 80		
+		, cellClass		: 'text-right'
+		, cellRenderer	: function (params) {
+			return params.value.addComma();
+		}
 	},
 	{
-		headerName	: "주문배송비정보",
-		children	: [
-			{
-				headerName		: "배송비"		
-				, field			: "delvFee"			
-				, width			: 80		
-				, cellClass		: 'text-right'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-				, hide			: temp2
-			},
-			{headerName: "업체"			, field: "supplyCompCd"		, width: 100	, cellClass: 'text-center', hide: temp2},
-			{headerName: "배송비코드"		, field: "delvFeeCd"		, width: 100	, cellClass: 'text-center', hide: temp2},
-			{
-				headerName		: "무료배송비"		
-				, field			: "minOrdAmt"			
-				, width			: 80		
-				, cellClass		: 'text-right'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-				, hide			: temp2
-			},
-			{
-				headerName		: "기본배송비"		
-				, field			: "orgDelvFee"			
-				, width			: 80		
-				, cellClass		: 'text-right'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-				, hide			: temp2
-			},
-			{
-				headerName		: "반품배송비"		
-				, field			: "rtnDelvFee"			
-				, width			: 80		
-				, cellClass		: 'text-right'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-				, hide			: temp2
-			},
-			{
-				headerName		: "교환배송비"		
-				, field			: "excDelvFee"			
-				, width			: 80		
-				, cellClass		: 'text-right'
-				, cellRenderer	: function (params) {
-					return params.value.addComma();
-				}
-				, hide			: temp2
-			},
-			{headerName: "전체취소가능"		, field: "allCanYn"			, width: 100	, cellClass: 'text-center', hide: temp2},
-		]
-	}
+		headerName		: "취소"		
+		, field			: "cnclRtnAmt"			
+		, width			: 80		
+		, cellClass		: 'text-right'
+		, cellRenderer	: function (params) {
+			return params.value.addComma();
+		}
+	},
+	{
+		headerName		: "즉시할인"		
+		, field			: "cpn1DcAmt"			
+		, width			: 80		
+		, cellClass		: 'text-right'
+		, cellRenderer	: function (params) {
+			return params.value.addComma();
+		}
+	},
+	{
+		headerName		: "다다익선1"		
+		, field			: "tmtb1DcAmt"			
+		, width			: 80		
+		, cellClass		: 'text-right'
+		, cellRenderer	: function (params) {
+			return params.value.addComma();
+		}
+	},
+	{
+		headerName		: "다다익선2"		
+		, field			: "tmtb2DcAmt"			
+		, width			: 80		
+		, cellClass		: 'text-right'
+		, cellRenderer	: function (params) {
+			return params.value.addComma();
+		}
+	},
+	{
+		headerName		: "상품쿠폰"		
+		, field			: "goodsCpnDcAmt"
+		, width			: 80		
+		, cellClass		: 'text-right'
+		, cellRenderer	: function (params) {
+			return params.value.addComma();
+		}
+	},
+	{
+		headerName		: "장바구니쿠폰"
+		, field			: "cartCpnDcAmt"
+		, width			: 100		
+		, cellClass		: 'text-right'
+		, cellRenderer	: function (params) {
+			return params.value.addComma();
+		}
+	},
+	{
+		headerName		: "포인트"		
+		, field			: "pntDcAmt"			
+		, width			: 80		
+		, cellClass		: 'text-right'
+		, cellRenderer	: function (params) {
+			return params.value.addComma();
+		}
+	},
+	{
+		headerName		: "선포인트"		
+		, field			: "prePntDcAmt"			
+		, width			: 80		
+		, cellClass		: 'text-right'
+		, cellRenderer	: function (params) {
+			return params.value.addComma();
+		}
+	},
+	{
+		headerName		: "상품권"		
+		, field			: "gfcdUseAmt"			
+		, width			: 80		
+		, cellClass		: 'text-right'
+		, cellRenderer	: function (params) {
+			return params.value.addComma();
+		}
+	},
+	{
+		headerName		: "실결제금액"		
+		, field			: "realOrdAmt"			
+		, width			: 100		
+		, cellClass		: 'text-right'
+		, cellRenderer	: function (params) {
+			return params.value.addComma();
+		}
+	},
+	{
+		headerName		: "배송비"		
+		, field			: "delvFee"			
+		, width			: 80		
+		, cellClass		: 'text-right'
+		, cellRenderer	: function (params) {
+			return params.value.addComma();
+		}
+		, hide			: temp1
+	},
+	{headerName: "업체"			, field: "supplyCompCd"		, width: 100	, cellClass: 'text-center', hide: temp1},
+	{headerName: "배송비코드"		, field: "delvFeeCd"		, width: 100	, cellClass: 'text-center', hide: temp1},
+	{
+		headerName		: "무료배송비"		
+		, field			: "minOrdAmt"			
+		, width			: 80		
+		, cellClass		: 'text-right'
+		, cellRenderer	: function (params) {
+			return params.value.addComma();
+		}
+		, hide			: temp1
+	},
+	{
+		headerName		: "기본배송비"		
+		, field			: "orgDelvFee"			
+		, width			: 80		
+		, cellClass		: 'text-right'
+		, cellRenderer	: function (params) {
+			return params.value.addComma();
+		}
+		, hide			: temp1
+	},
+	{
+		headerName		: "반품배송비"		
+		, field			: "rtnDelvFee"			
+		, width			: 80		
+		, cellClass		: 'text-right'
+		, cellRenderer	: function (params) {
+			return params.value.addComma();
+		}
+		, hide			: temp1
+	},
+	{
+		headerName		: "교환배송비"		
+		, field			: "excDelvFee"			
+		, width			: 80		
+		, cellClass		: 'text-right'
+		, cellRenderer	: function (params) {
+			return params.value.addComma();
+		}
+		, hide			: temp1
+	},
+	{headerName: "전체취소가능"		, field: "allCanYn"			, width: 100	, cellClass: 'text-center', hide: temp1}
 ];
 var gridOptionsCancelReqList = gagaAgGrid.getGridOptions(columnCancelReqList);
 
@@ -839,7 +798,6 @@ var fnCalculateRefundAmt = function (obj) {
 			
 			$("#spanPayAmt").text(result.spanPayAmt.addComma());					//총 결제 금액
 			$("#spanSumRealOrdAmt").text(result.spanSumRealOrdAmt.addComma());		//상품 실결제 금액
-			$("#spanSumDeliveryFee").text(result.spanSumDeliveryFee.addComma());	//배송금액
 			
 			$("#spanOrdAmt").text(result.spanOrdAmt.addComma());					//주문 상품 금액
 			$("#spanCnclRtnAmt").text(result.spanCnclRtnAmt.addComma());			//취소 상품 금액
@@ -873,6 +831,8 @@ var fnCalculateRefundAmt = function (obj) {
 				// 회사사유 : 환불금액계산 = (취소금액 + 배송비)
 				else {
 					result.spanRefundAmt = (result.spanRealCnclRtnAmt + result.sumDeliveryFee);
+					// 2021.05.13 추가배송비금액 수정
+					$("#spanTotDeliveryFee").text(0);	//배송금액
 				}
 			}
 			
@@ -883,7 +843,7 @@ var fnCalculateRefundAmt = function (obj) {
 
 //  사유
 var fnChangeChgReason = function(reasonCd){
-	var customerReasonArr = ['G686_10'];
+	var customerReasonArr = ['G686_10', 'G686_20'];
 
 	isCustomer = false;
 	
@@ -919,6 +879,7 @@ var fnCnclReq = function (reqGbn) {
 	var bankCd 					= "";
 	
 	if (reqGbn == "cnclReq" || reqGbn == "cnclComplete") {
+		
 		// 1. 취소수량 체크
 		for (i=0 ; i<cancelRequestTargetList.length ; i++) {
 			if (cancelRequestTargetList[i].ordCanChgQty > 0) {
@@ -1104,12 +1065,16 @@ $(document).ready(function() {
 	}
 	
 	// debug mode 해제
-	if (temp2) {
+	if (temp3) {
 		$("#h4OrderCancelRequestToBeList").css("display", "none");
 		$("#gridOrderCancelRequestToBeList").css("display", "none");
 		$("#h4DelvCdList").css("display", "none");
 		$("#gridDelvCdList").css("display", "none");
 	}
+	
+	// 2021.05.13 높이자동조절
+	var cancelRequestTargetHeight = 50 + (40 * cancelRequestTargetCnt);
+	$("#gridOrderCancelRequestList").css("height" , cancelRequestTargetHeight+"px");
 });
 </script>
 </html>

+ 17 - 1
src/main/webapp/WEB-INF/views/order/OrderDetailChangeHst.html

@@ -44,7 +44,23 @@ var columnDefs4OrderDetailChangeHstList = [
 			return !gagajf.isNull(params.value) ? params.value.toDate("YYYYMMDDHHmm").format("YYYY-MM-DD HH:mm") : '';
 		}
 	},
-	{headerName: "변경아이디"		, field: "updId"		, width: 120	, cellClass: 'text-center'},
+	{
+		headerName		: "변경아이디"		
+		, field			: "userId"
+		, width			: 120
+		, cellClass		: 'text-center'
+		, cellRenderer	: function (params) {
+			var rtnStr = "";
+			
+			if (params.value != null && params.value != '') {
+				rtnStr += params.value;
+			} else {
+				rtnStr += params.data.custId;
+			}
+			
+			return rtnStr;
+		}
+	},
 	{headerName: "변경내용"		, field: "ordDtlStatNm"	, width: 130	, cellClass: 'text-center'},
 	{headerName: "주문수량"		, field: "ordQty"		, width: 80		, cellClass: 'text-center'},
 	{headerName: "취소수량"		, field: "cnclRtnQty"	, width: 80		, cellClass: 'text-center'},

+ 169 - 128
src/main/webapp/WEB-INF/views/order/OrderDetailForm.html

@@ -166,11 +166,7 @@ var orderChangeInfo 		= [[${orderChangeInfo}]];				// 취소/반품/교환요청
 var orderRefundInfo 		= [[${orderRefundInfo}]];				// 환불정보
 var orderCounselInfo 		= [[${orderCounselInfo}]];				// 상담내역
 var orderAdminMemoInfo 		= [[${orderAdminMemoInfo}]];			// 관리자메모
-
-var canChgDelvOrdStat		= ['G013_10', 'G013_11', 'G013_17', 'G013_20', 'G013_30', 'G013_40'];
-var canChgDelvChgStat		= ['G685_30', 'G685_33', 'G685_40'];
 var allCanYn				= [[${allCanYn}]];						// 배송지수정가능여부
-
 var orderGoodsCnt 			= [[${orderGoodsInfo.size()}]];			// 주문상세정보
 var orderFreeGiftCnt		= [[${orderFreeGiftInfo.size()}]];		// 주문사은품정보
 var orderDeliveryAddrCnt	= [[${orderDeliveryAddrInfo.size()}]];	// 배송정보
@@ -179,28 +175,23 @@ var orderRefundCnt 			= [[${orderRefundInfo.size()}]];		// 환불정보
 
 // 2021.05.12 
 var hiddenTemp				= true;
-if (userNo == "24" || userNo == "8") {
+if (userNo == "24") {
 	hiddenTemp				= false;
 }
 
 </script>
 
 <!-- AgGrid 컬럼 세팅 -->
-<script>
+<script th:inline="javascript">
 
 // 1.주문기본정보 그리드 바인딩
 // 2.상품별 상세정보
 var columnDefsGoodsInfo = [
 	{
-		headerName	: "주문상세",
+		headerName	: "주문상세정보",
 		children	: [
-			{headerName: "번호"		, field: "ordDtlNo"		, width: 80, cellClass: 'text-center'},
+			{headerName: "상세번호"	, field: "ordDtlNo"		, width: 80, cellClass: 'text-center'},
 			{headerName: "주문구분"	, field: "exchGbNm"		, width: 80, cellClass: 'text-center'},
-		],
-	},
-	{
-		headerName	: "상품정보",
-		children	: [
 			{headerName: "상품코드"	, field: "goodsCd"		, width: 80, cellClass: 'text-center'},
 			{
 				headerName		: "상품명"
@@ -241,12 +232,7 @@ var columnDefsGoodsInfo = [
 				, cellRenderer	: function (params) {
 					return params.value.addComma();
 				}
-			}
-		]
-	},
-	{
-		headerName	: "주문상세",
-		children	: [
+			},
 			{headerName: "주문수량"	, field: "ordQty"		, width: 80, cellClass: 'text-center'},
 			{headerName: "취소수량"	, field: "cnclRtnQty"	, width: 80, cellClass: 'text-center'},
 			{headerName: "변경요청수량"	, field: "ordReqChgQty"	, width: 100, cellClass: 'text-center'},
@@ -272,56 +258,16 @@ var columnDefsGoodsInfo = [
 			{
 				headerName		: "상태변경"
 				, field			: "ordDtlStatChg"
-				, width			: 120
+				, width			: 140
 				, hide			: hiddenTemp
 				, cellClass		: 'text-center'
 				, cellRenderer	: function (params) {
 					var strVal 		= "";
 					var strCheck	= "";
 					
-					// 현재상태에 따라서 갈수 있는 상태 정리
-					// @ 자사 : 결제완료, 배송준비중, 배송중, 배송완료
-					// @ 입점 : 결제완료, 상품준비중, 출고완료
-					// @ 모든상태값 변경 기준 (상세내역의 상택값 이력으로만 이동가능)
-					// G013_00	주문접수
-					// G013_10	입금대기
-					// G013_18	발주대기-가격차이
-					// G013_19	발주대기-우편번호상이
-					// G013_20	결제완료
-					// G013_30	상품준비중
-					// G013_40	배송준비중
-					// G013_50	배송중
-					// G013_55	출고완료
-					// G013_60	배송완료
-					// G013_98	결제전주문취소
-					// G013_99	결제후주문취소
-					// 2020.12.22 추가적인 개발은 추후 물류개발이 완료된 후 추가할 예정
-					// To Do List
-					// @ 재고정보수정
-					// @ 정산정보수정
+					// 2021.04.30 상태값 임시 기능
 					strVal += "<select class='ordDtlStatChg' name='ordDtlStatChg' ordDtlNo='"+params.data.ordDtlNo+"' ordNo='"+params.data.ordNo+"' onChange='fnChangOrdDtlStat(this);'>";
 					strVal += "	<option value=''>선택</option>";
-
-					if (!gagajf.isNull(params.data.g20)) {
-						strVal += "	<option value='G013_20'>결제완료</option>";
-					}
-					if (!gagajf.isNull(params.data.g30)) {
-						strVal += "	<option value='G013_30'>상품준비중</option>";
-					}
-					if (!gagajf.isNull(params.data.g40)) {
-						strVal += "	<option value='G013_40'>배송준비중</option>";
-					}
-					if (!gagajf.isNull(params.data.g50)) {
-						strVal += "	<option value='G013_50'>배송중</option>";
-					}
-					if (!gagajf.isNull(params.data.g55)) {
-						strVal += "	<option value='G013_55'>출고완료</option>";
-					}
-					if (!gagajf.isNull(params.data.g60)) {
-						strVal += "	<option value='G013_60'>배송완료</option>";
-					}
-
-					// 2021.04.30 상태값 임시 기능
 					strVal += "	<option value='G013_20'>결제완료</option>";
 					strVal += "	<option value='G013_30'>상품준비중</option>";
 					strVal += "	<option value='G013_40'>배송준비중</option>";
@@ -331,8 +277,46 @@ var columnDefsGoodsInfo = [
 					
 					return strVal;
 				}
-			}
-		]
+			},
+			{
+				headerName		: "변경요청"
+				, field			: "ordDtlStat"
+				, width			: 200
+				, cellClass		: 'text-center'
+				, cellRenderer: function (params) {
+					var retStr = "";
+					
+					// 결제완료, 상품준비중, 출고처지정, 배송준비중 (주문취소) 
+					if (params.value == 'G013_20' || params.value == 'G013_30' || params.value == 'G013_35' || params.value == 'G013_40') {
+						if (params.data.ordQty > (params.data.cnclRtnQty + params.data.ordReqChgQty)) {
+							var paramData 	= params.data.ordNo;
+							paramData 		+= '@' + params.data.ordDtlNo;
+							paramData 		+= '@' + params.data.delvFeeCd;
+							paramData 		+= '@' + params.data.delvFeeCdGrp;
+							retStr 			+= '<button type="button" class="btn btn-base btn-sm" onclick="fnCancelRequest(\'' + paramData + '\', null);">취소요청</button>';
+						}
+					}
+					
+					// 배송중, 배송완료 (교환신청, 반품신청) 
+					if (params.value == 'G013_50' || params.value == 'G013_60') {
+						if (params.data.ordQty > (params.data.cnclRtnQty + params.data.ordReqChgQty)) {
+							var paramData 	= params.data.ordNo;
+							paramData 		+= '@' + params.data.ordDtlNo;
+							paramData 		+= '@' + params.data.delvFeeCd;
+							paramData 		+= '@' + params.data.delvFeeCdGrp;
+														
+							if (params.data.changeableYn == 'Y') {
+								retStr 			+= '<button type="button" class="btn btn-base btn-sm" onclick="fnReturnRequest(\'' + paramData + '\', null);">반품요청</button>';
+							}
+							if (params.data.returnableYn == 'Y') {
+								retStr 			+= '<button type="button" class="btn btn-base btn-sm" onclick="fnExchangeRequest(\'' + paramData + '\', null);">교환요청</button>';
+							}
+						}
+					}
+					return retStr;
+				}
+			},
+		],
 	},
 	{
 		headerName	: "금액",
@@ -355,6 +339,15 @@ var columnDefsGoodsInfo = [
 					return params.value.addComma();
 				}
 			},
+			{
+				headerName		: "실결제"
+				, field			: "realOrdAmt"
+				, width			: 80
+				, cellClass		: 'text-right'
+				, valueFormatter: function (params) {
+					return params.value.addComma();
+				}
+			}
 		]
 	},
 	{
@@ -364,16 +357,16 @@ var columnDefsGoodsInfo = [
 				headerName		: "즉시할인"
 				, field			: "cpn1DcAmt"
 				, width			: 80
-				, cellClass		: 'text-right' //goodsCpnDcAmtClass
+				, cellClass		: 'text-right'
 				, cellRenderer: function (params) {
-					return "<a href=\"javascript:void(0);\" onclick=\"fnOrderCouponHst('" + params.data.ordNo + "');\">" + params.value.addComma() + "</a>";
+					return params.value.addComma();
 				}
 			},
 			{
 				headerName		: "상품"
 				, field			: "goodsCpnDcAmt"
 				, width			: 80
-				, cellClass		: 'text-right' //goodsCpnDcAmtClass
+				, cellClass		: 'text-right'
 				, cellRenderer: function (params) {
 					return "<a href=\"javascript:void(0);\" onclick=\"fnOrderCouponHst('" + params.data.ordNo + "');\">" + params.value.addComma() + "</a>";
 				}
@@ -382,7 +375,7 @@ var columnDefsGoodsInfo = [
 				headerName		: "장바구니"
 				, field			: "cartCpnDcAmt"
 				, width			: 80
-				, cellClass		: 'text-right' //cartCpnDcAmtClass
+				, cellClass		: 'text-right'
 				, cellRenderer	: function (params) {
 					return "<a href=\"javascript:void(0);\" onclick=\"fnOrderCouponHst('" + params.data.ordNo + "');\">" + params.value.addComma() + "</a>";
 				}
@@ -458,24 +451,10 @@ var columnDefsGoodsInfo = [
 			}
 		]
 	},
-	{
-		headerName	: "금액",
-		children	: [
-			{
-				headerName		: "실결제"
-				, field			: "realOrdAmt"
-				, width			: 80
-				, cellClass		: 'text-right'
-				, valueFormatter: function (params) {
-					return params.value.addComma();
-				}
-			}
-		]
-	},
-	{headerName: "결품", field: "soldoutYn", width: 60, cellClass: 'text-center'},
 	{
 		headerName	: "배송",
 		children	: [
+			{headerName: "품절여부", field: "soldoutYn", width: 90, cellClass: 'text-center'},
 			{
 				headerName		: "송장번호"
 				, field			: "invoiceNo"
@@ -551,7 +530,7 @@ var columnDefsDeliveryInfo = [
 		, width			: 220
 		, cellClass		: 'text-center'
 		, cellRenderer	: function (params) {
-			var rtnStr = ""
+			var rtnStr = "";
 			
 			if (allCanYn == 'Y') {
 				rtnStr += params.value;
@@ -572,9 +551,33 @@ var gridOptionsDeliveryInfo = gagaAgGrid.getGridOptions(columnDefsDeliveryInfo);
 
 // 4.결제정보
 var columnDefsPaymentInfo = [
-	{headerName: "결제수단"		, field: "payMeansNm"	, width: 100	, cellClass: 'text-center'},
+	{headerName: "결제방법"		, field: "pgGb"			, width: 100	, cellClass: 'text-center'},
+	{headerName: "결제수단"		, field: "payMeansNm"	, width: 120	, cellClass: 'text-center'},
 	{headerName: "카드(은행)"		, field: "cardNm"		, width: 100	, cellClass: 'text-center'},
-	{headerName: "할부(입금계좌)"	, field: "cardMips"		, width: 150	, cellClass: 'text-center'},
+	{
+		headerName		: "할부(입금계좌)"
+		, field			: "cardMips"
+		, width			: 150
+		, cellClass		: 'text-center'
+		, cellRenderer	: function (params) {
+			var retStr = '';
+			// 무통장입금
+			if (params.data.payMeans == 'G014_20') {
+				retStr = params.data.vaNo;
+			} else {
+				if (params.value == '00' || params.value == '0') {
+					retStr = "일시불";
+				} else {
+					if (parseInt(params.value) > 0) {
+						retStr = parseInt(params.value) + "개월할부";
+					} else {
+						retStr = params.value;
+					}
+				}
+			}
+			return retStr;
+		}
+	},
 	{
 		headerName		: "승인번호"
 		, field			: "pgTradeNo"
@@ -582,7 +585,8 @@ var columnDefsPaymentInfo = [
 		, cellClass		: 'text-center'
 		, cellRenderer	: function (params) {
 			var retStr = '';
-
+			
+			/*
 			if (!gagajf.isNull(params.value)) {
 				retStr = '<a href="javascript:void(0);" onclick="fnReceiptPage(\'' + params.data.pgTid + '\');">' + params.value + '</a>';
 			}
@@ -590,6 +594,9 @@ var columnDefsPaymentInfo = [
 			if (gagajf.isNull(params.value) && !gagajf.isNull(params.data.pgTid)) {
 				retStr = '<a href="javascript:void(0);" onclick="fnReceiptPage(\'' + params.data.pgTid + '\');">' + '거래내역' + '</a>';
 			}
+			*/
+			
+			retStr = params.value;
 
 			return retStr;
 		}
@@ -681,6 +688,7 @@ var columnDefsOrderChangeInfo = [
 			var rtnStr = "";
 			
 			// 취소요청, 교환요청, 반품요청 일때는 요청 정보 확인 팝업 정보
+			/*
 			if (params.data.chgStat == 'G685_20') {
 				rtnStr = '<a href="javascript:void(0);" onclick="fnCancelRequest(\'' + params.value + '\');">' + params.value + '</a>';
 			} else if (params.data.chgStat == 'G685_40') {
@@ -690,6 +698,8 @@ var columnDefsOrderChangeInfo = [
 			} else {
 				rtnStr = params.value;
 			}
+			*/
+			rtnStr = params.value;
 			
 			return  rtnStr;
 		}
@@ -728,13 +738,16 @@ var columnDefsOrderChangeInfo = [
 			var rtnStr = ""
 			
 			// 회수지수정가능(교환요청, 반품요청)
-			if (params.data.wdGb != 'D' && (params.data.chgStat == 'G685_30' || params.data.chgStat == 'G685_33' || params.data.chgStat == 'G685_40')) {
-				
+			if (params.data.wdGb != 'D' && (params.data.chgStat == 'G685_20' || params.data.chgStat == 'G685_21' || params.data.chgStat == 'G685_50' || params.data.chgStat == 'G685_51')) {
 				rtnStr += params.value;			
 				rtnStr += "<button type=\"button\" style=\"margin-left:10px\" class=\"btn btn-info\" onclick=\"fnOpenDaumAddr('" + params.node.rowIndex + "', 'CLAIM');\">POST</button>";
 				rtnStr += "<button type=\"button\" class=\"btn btn-info\" onclick=\"fnSaveChgerAddr('" + params.node.rowIndex + "');\">저장</button>";
 			} else {
-				rtnStr = "";
+				if (params.data.chgGb == 'G680_30' || params.data.chgGb == 'G680_40') {
+					rtnStr += params.value;
+				} else {
+					rtnStr += "";
+				}
 			}
 			
 			return rtnStr;
@@ -784,6 +797,7 @@ var gridOptionsOrderChangeInfo = gagaAgGrid.getGridOptions(columnDefsOrderChange
 
 // 7.환불정보
 var columnDefsRefundInfo = [
+	{headerName: "요청번호"		, field: "ordChgSq"		, width: 80		, cellClass: 'text-center'},
 	{headerName: "환불수단"		, field: "payMeansNm"	, width: 80		, cellClass: 'text-center'},
 	{headerName: "환불은행(카드)"	, field: "cardNm"		, width: 120	, cellClass: 'text-center'},
 	{headerName: "환불은행계좌번호"	, field: "raNo"			, width: 150	, cellClass: 'text-center'},
@@ -806,7 +820,23 @@ var columnDefsRefundInfo = [
 			return !gagajf.isNull(params.value) ? params.value.toDate("YYYYMMDDHHmm").format("YYYY-MM-DD HH:mm") : '';
 		}
 	},
-	{headerName: "환불처리자"		, field: "updNm"		, width: 120		, cellClass: 'text-center'}
+	{
+		headerName		: "변경아이디"		
+		, field			: "userId"
+		, width			: 120
+		, cellClass		: 'text-center'
+		, cellRenderer	: function (params) {
+			var rtnStr = "";
+			
+			if (params.value != null && params.value != '') {
+				rtnStr += params.value;
+			} else {
+				rtnStr += params.data.custId;
+			}
+			
+			return rtnStr;
+		}
+	}
 ];
 var gridOptionsRefundInfo = gagaAgGrid.getGridOptions(columnDefsRefundInfo);
 
@@ -887,20 +917,8 @@ var columnDefsOrderMemoInfo = [
 var gridOptionsOrderMemoInfo = gagaAgGrid.getGridOptions(columnDefsOrderMemoInfo);
 </script>
 
-<script>
-var fnSetGridHeightInit = function () {
-	if (_windowWidth < 1780) {
-		_girdRowH1 = 33 + _scrollH;
-		_girdRowH2 = 80 + _scrollH;
-	} else {
-		_girdRowH1 = 33
-		_girdRowH2 = 80;
-	}
-}
-</script>
-
 <!-- 버튼 이벤트 바인딩 -->
-<script>
+<script th:inline="javascript">
 var _windowWidth 	= $(window).width();		/* 위도우창 넓이 */
 var _girdRowH 		= 33;						/* 그리드 Row 줄 높이 */
 var _girdRowH1 		= 33;						/* 그리드 타이틀 1줄 짜리 높이*/
@@ -912,9 +930,18 @@ $(window).resize(function () {
 	fnSetGridHeightInit();
 });
 
+var fnSetGridHeightInit = function () {
+	if (_windowWidth < 1780) {
+		_girdRowH1 = 33 + _scrollH;
+		_girdRowH2 = 80 + _scrollH;
+	} else {
+		_girdRowH1 = 33
+		_girdRowH2 = 80;
+	}
+}
 </script>
 <!-- AgGrid 생성 -->
-<script>
+<script th:inline="javascript">
 // 팝업닫기
 var fnOrderDetailClose = function(){
 	uifnPopupClose('popupOrderDetail');
@@ -999,7 +1026,8 @@ $(document).ready(function () {
 	// G685_40	반품요청
 	// G685_41	반품요청취소
 	// G685_42	반품완료
-
+	
+	/*
 	var addrBtnChkCnt = 0;
 	gridOptionsGoodsInfo.api.forEachNode(function (rowNode, index) {
 		
@@ -1028,15 +1056,16 @@ $(document).ready(function () {
 	if (addrBtnChkCnt > 0) {
 		$("#btnUpdateOrderAddr").removeClass("off");
 	}
+	*/
 });
 
 $(document).ready(function () {
 	// 2021.05.11 그리드 높이정보 수정
 	var orderGoodsHeight 			= 90 + (33 * orderGoodsCnt);
-	var orderFreeGiftHeight 		= 38 + (33 * orderFreeGiftCnt);
-	var orderDeliveryAddrHeight 	= 38 + (33 * orderDeliveryAddrCnt);
-	var orderChangeHeight 			= 38 + (33 * orderChangeCnt);
-	var orderRefundHeight 			= 38 + (33 * orderRefundCnt);
+	var orderFreeGiftHeight 		= 40 + (38 * orderFreeGiftCnt);
+	var orderDeliveryAddrHeight 	= 40 + (38 * orderDeliveryAddrCnt);
+	var orderChangeHeight 			= 40 + (38 * orderChangeCnt);
+	var orderRefundHeight 			= 40 + (38 * orderRefundCnt);
 	
 	$("#gridOrderGoodsInfo").css("height"		, orderGoodsHeight+"px");
 	$("#gridOrderFreeGiftInfo").css("height"	, orderFreeGiftHeight+"px");
@@ -1046,18 +1075,6 @@ $(document).ready(function () {
 
 	$('#orderDetailContents').css("width", "97%").css("height", "96%");
 	
-	// 취소요청
-	$('#btnCancel').on('click', function () {
-		fnCancelRequest();
-	});
-	// 반품요청
-	$('#btnReturn').on('click', function () {
-		fnReturnRequest();
-	});
-	// 교환요청
-	$('#btnExchange').on('click', function () {
-		fnExchangeRequest(ordNo, 'N');
-	});
 	// 메모등록
 	$('#btnCreateOrderMemo').on('click', function () {
 		fnCreateOrderMemo(ordNo, 0, 'N');
@@ -1074,7 +1091,7 @@ $(document).ready(function () {
 </script>
 
 <!-- function -->
-<script>
+<script th:inline="javascript">
 var gridOrderChangeInfoSelectedIdx = '';
 
 // 배송지변경
@@ -1099,45 +1116,69 @@ var fnUpdateOrderAddr = function (rowIdx) {
 
 // 2021.01.25 추가
 // 취소요청, 교환요청, 반품요청 일때는 요청 정보 확인 팝업 정보
-var fnCancelRequest = function (ordChgSq) {
-	
+var fnCancelRequest = function (paramData, ordChgSq) {
 	// 취소요청 구분 (orChgSq null 이면 취소요청화면 있으면 취소요청정보화면)
 	if (ordChgSq == null) {
 		ordChgSq = 0;
 	}
 	
-	var actionUrl = "/orderChange/cncl/req/form?ordNo=" + ordNo + "&ordChgSq=" + ordChgSq;
+	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/cncl/req/form?" + param;
 	
 	cfnOpenModalPopup(actionUrl, 'popupCancelRequestForm');
+	
+	return false;
 };
 
 //2021.01.25 추가
 // 반품요청
-var fnReturnRequest = function (ordChgSq) {
+var fnReturnRequest = function (paramData, ordChgSq) {
 	
 	// 취소요청 구분 (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/rtn/req/form?ordNo=" + ordNo + "&ordChgSq=" + ordChgSq;
 	
 	cfnOpenModalPopup(actionUrl, 'popupReturnRequestForm');
 };
 
 // 교환요청
-var fnExchangeRequest = function (ordChgSq) {
+var fnExchangeRequest = function (paramData, ordChgSq) {
 	
 	// 취소요청 구분 (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?ordNo=" + ordNo + "&ordChgSq=" + ordChgSq;
 	cfnOpenModalPopup(actionUrl, 'popupExchangeRequestForm');
 };
 
-
 // 반품요청 철회
 var fnReturnReqeustCancel = function (ordChgSq, ordDtlNo, rowIdx) {
 	mcxDialog.confirm('반품요청을 철회하시겠습니까?', {

+ 287 - 278
src/main/webapp/WEB-INF/views/order/OrderListForm.html

@@ -90,8 +90,8 @@
 						</td>
 					</tr>
 					<tr>
-						<th>주문상세상태</th>
-						<td colspan="5">
+						<th>주문상태</th>
+						<td>
 							<div class="multiCheckBox" style="width:270px">
 								<button type="button" class="sltBtn" style="overflow-x: hidden; padding-right:5px;">[전체]</button>
 								<ul style="display: none; box-shadow: 3px 3px 3px; overflow-y: scroll; height: 112px;">
@@ -112,6 +112,22 @@
 								</ul>
 							</div>
 						</td>
+						<th>결제타입</th>
+						<td>
+							<select name="pgGb">
+								<option value="">[전체]</option>
+								<option th:if="${pgGbList}" th:each="oneData, status : ${pgGbList}" th:value="${oneData.cd}"
+										th:text="|[${oneData.cd}] ${oneData.cdNm}|"></option>
+							</select>
+						</td>
+						<th>결제수단</th>
+						<td>
+							<select name="payMeans">
+								<option value="">[전체]</option>
+								<option th:if="${payMeansList}" th:each="oneData, status : ${payMeansList}" th:value="${oneData.cd}"
+										th:text="|[${oneData.cd}] ${oneData.cdNm}|"></option>
+							</select>
+						</td>
 						<th rowspan="5">키워드<i class="star"></i></th>
 						<td rowspan="5">
 							<select name="search" id="search">
@@ -135,7 +151,7 @@
 							</select>
 						</td>
 						<th>변경요청처리상태</th>
-						<td>
+						<td colspan="3">
 							<select name="chgStat">
 								<option value="">[전체]</option>
 								<option value="9999">[품절취소]</option>
@@ -143,14 +159,6 @@
 										th:text="|[${oneData.cd}] ${oneData.cdNm}|"></option>
 							</select>
 						</td>
-						<th>결제수단</th>
-						<td>
-							<select name="payMeans">
-								<option value="">[전체]</option>
-								<option th:if="${payMeansList}" th:each="oneData, status : ${payMeansList}" th:value="${oneData.cd}"
-										th:text="|[${oneData.cd}] ${oneData.cdNm}|"></option>
-							</select>
-						</td>
 					</tr>
 					<tr>
 						<th>주문자명</th>
@@ -228,7 +236,7 @@
 			<ul class="panelBar">
 				<li>
 					<button type="button" class="btn btn-info btn-lg" onclick="fnOrderExcelList();">엑셀다운로드</button>
-					<!-- <button type="button" class="btn btn-info btn-lg" th:if="${userNo == 8 or userNo == 14 or userNo == 11}" onclick="fnCreateSampleOrder();">주문생성</button> -->
+					<button type="button" class="btn btn-info btn-lg" th:if="${userNo == 8 or userNo == 14 or userNo == 11}" onclick="fnCreateSampleOrder();">주문생성</button>
 				</li>
 				<li class="aR">
 					검색결과 : <strong><span id="rowCntOrderList">0</span> 건</strong>&nbsp;
@@ -279,273 +287,260 @@ var uploadGoodsUrl 	= [[${@environment.getProperty('upload.goods.view')}]];
 // 1. 주문기본정보
 var columnDefsOrderList = [
 	{
-		headerName	: "주문기본정보"
-		, cellClass	: 'text-center'
-		, children	: [
-			{
-				headerName		: "주문번호"
-				, field			: 'ordNo'
-				, width			: 80
-				, cellClass		: 'text-center'
-				, sortable		: true
-				, cellRenderer	: function (params) {
-					var roleCd = [[${sessionInfo.roleCd}]];
-					if (!roleCd.startsWith("C")) {
-						return "<a href=\"javascript:void(0);\" onclick=\"fnOpenOrderDetailPopup('" + params.value + "');\">" + params.value + "</a>";
-					} else {
-						return params.value;
-					}
-				}
-			},
-			{
-				headerName		: "주문자"
-				, field			: "ordNm"
-				, width			: 100
-				, cellClass		: 'text-left'
-				, sortable		: true
-				, cellRenderer	: function (params) {
-					var custNo = '';
-					if (!gagajf.isNull(params.data.custNo)) {
-						custNo = params.data.custNo;
-					}
-					
-					var roleCd = [[${sessionInfo.roleCd}]];
-					if (!roleCd.startsWith("C") && !gagajf.isNull(params.data.custNo)  && params.data.mallGb === '10' ) {
-						return '<a href="javascript:void(0);" onclick=\"cfnOpenCustDetailPopup(' + params.data.custNo + ');\">' + params.value + '(' + custNo + ')' + '</a>';
-					} else {
-						return params.value + '(' + custNo + ')';
-					}
-				}
-			},
-			{headerName: "고객고유번호"	, field: "custNo"		, width: 120, cellClass: 'text-center', hide: true},
-			{headerName: "외부몰"		, field: "extmallNm"	, width: 100, cellClass: 'text-center', sortable: true},
-			{headerName: "휴대폰번호"	, field: "orderPhnno"	, width: 120, cellClass: 'text-center', hide: true},
-			{
-				headerName		: "사이트"
-				, field			: "siteCd"
-				, width			: 80
-				, cellClass		: 'text-center'
-				, hide			: true
-				, valueGetter	: function (params) { 
-					return gagaAgGrid.lookupValue(siteCdList, params.data.siteCd); 
-				}
-			},
-			{
-				headerName		: "프론트"
-				, field			: "frontGb"
-				, width			: 80
-				, cellClass		: 'text-center'
-				, sortable		: true
-				, valueGetter	: function (params) { 
-					return gagaAgGrid.lookupValue(frontGbList, params.data.frontGb); 
-				}
-			},
-			{
-				headerName		: "몰구분"
-				, field			: "mallGb"
-				, width			: 60
-				, cellClass		: 'text-center'
-				, hide			: true
-				, valueGetter	: function (params) { 
-					return gagaAgGrid.lookupValue(mallGbList, params.data.mallGb); 
-				}
-			},
-			{
-				headerName		: "주문일시"
-				, field			: "ordDt"
-				, width			: 140
-				, cellClass		: 'text-center'
-				, sortable		: true
-				, valueGetter	: function (params) { 
-					return gagaAgGrid.toDateTimeFormat(params.data.ordDt); 
-				}
-			},
-			{
-				headerName		: "결제수단"
-				, field			: "payMeans"
-				, width			: 100
-				, cellClass		: 'text-center'
-				, hide			: true
-				, valueGetter	: function (params) { 
-					return gagaAgGrid.lookupValue(payMeansList, params.data.payMeans); 
-				}
-			},
-			{
-				headerName		: "신규/교환"
-				, field			: "ordExchGb"
-				, width			: 100
-				, cellClass		: 'text-center',
-				valueGetter 	: function (params) {
-					return params.data.ordExchGb === 'O' ? '신규' : '교환';
-				}
-			},
-			{
-				headerName		: "주문상태"
-				, field			: "ordDtlStatNm"
-				, width			: 120
-				, cellClass		: 'text-center'
-				, sortable		: true
-			},
-			{headerName: "출고처", field: "delvLocNm", width: 110, cellClass: 'text-center', sortable: true, hide:true},
-		]
+		headerName		: "주문번호"
+		, field			: 'ordNo'
+		, width			: 80
+		, cellClass		: 'text-center'
+		, sortable		: true
+		, cellRenderer	: function (params) {
+			var roleCd = [[${sessionInfo.roleCd}]];
+			if (!roleCd.startsWith("C")) {
+				return "<a href=\"javascript:void(0);\" onclick=\"fnOpenOrderDetailPopup('" + params.value + "');\">" + params.value + "</a>";
+			} else {
+				return params.value;
+			}
+		}
 	},
 	{
-		headerName	: "상품정보"
-		, cellClass	: 'text-center'
-		, children	: [
-			{headerName: "상품코드"	, field: "goodsCd"		, width: 100	, cellClass: 'text-center'	, sortable: true},
-			{headerName: "브랜드"		, field: "brandEnm"		, width: 100	, cellClass: 'text-center'	, sortable: true},
-			{headerName: "구성유형"	, field: "goodsTypeNm"	, width: 100	, cellClass: 'text-center'	, sortable: true},
-			{headerName: "상품명"		, field: "goodsNm"		, width: 200	, cellClass: 'text-center'	, sortable: true},
-			{
-				headerName		: "이미지"
-				, field			: "sysImgNm"
-				, width			: 100
-				, height		: 60
-				, cellClass		: 'text-center'
-				,cellRenderer	: function(params) {
-					return '<img width="60" src="'+ _goodsUrl+ "/" + params.value + '" alt=""  onerror="this.src=\'/image/no.gif\';"/>';
-				}
-			},
-			{headerName: "옵션1"		, field: "colorNm"		, width: 120	, cellClass: 'text-center'	, sortable: true},
-			{headerName: "옵션2"		, field: "optCd2"		, width: 120	, cellClass: 'text-center'	, sortable: true},
-			{
-				headerName		: "외부몰벤더"
-				, field			: "vendorId"
-				, width			: 110
-				, cellClass		: 'text-center'
-				, hide			: true
-				, valueGetter	: function (params) { 
-					return gagaAgGrid.lookupValue(vendorList, params.data.vendorId); 
-				}
-			},
-			{headerName: "외부몰주문번호"	, field: "extmallOrderId"	, width: 150, cellClass: 'textFormat', sortable: true},
-			{headerName: "외부몰부주문번호"	, field: "agentOrderId"		, width: 120, cellClass: 'textFormat', sortable: true},
-			{
-				headerName		: "주문수량"
-				, field			: "ordQty"
-				, width			: 80
-				, cellClass		: 'text-center'
-				, valueGetter: function (params) { 
-					return params.data.ordQty.addComma(); 
-				}
-			},
-			{
-				headerName		: "취소수량"
-				, field			: "cnclRtnQty"
-				, width			: 80
-				, cellClass		: 'text-center'
-				, valueGetter	: function (params) { 
-					return params.data.cnclRtnQty.addComma(); 
-				}
-			},
-			{
-				headerName		: "주문금액"
-				, field			: "ordAmt"
-				, width			: 80
-				, cellClass		: 'text-right'
-				, valueGetter	: function (params) { 
-					return params.data.ordAmt.addComma(); 
-				}
-			},
-			{
-				headerName		: "취소반품금액"
-				, field			: "cnclRtnAmt"
-				, width			: 120
-				, cellClass		: 'text-right'
-				, valueGetter	: function (params) { 
-					return params.data.cnclRtnAmt.addComma(); 
-				}
-			},
-			{
-				headerName		: "총할인금액"
-				, field			: "totDcAmt"
-				, width			: 120
-				, cellClass		: 'text-right'
-				, valueGetter: function (params) { 
-					return params.data.totDcAmt.addComma(); 
-				}
-			},
-			{
-				headerName		: "실판매금액"
-				, field			: "realOrdAmt"
-				, width			: 100
-				, cellClass		: 'text-right'
-				, valueGetter	: function (params) { 
-					return params.data.realOrdAmt.addComma(); 
-				}
-			},
-			{headerName: "원코드"		, field: "supplyGoodsCd"	, width: 130, cellClass: 'text-center', sortable: true},
-			{
-				headerName		: "정상/이월"
-				, field			: "formalGb"
-				, width			: 100
-				, cellClass		: 'text-center'
-				, sortable		: true 
-				, valueGetter	: function (params) { 
-					return gagaAgGrid.lookupValue(formalGbList, params.data.formalGb); 
-				}
-			},
-			{
-				headerName		: "출고처지정일시"
-				, field			: "delvAssignDt"
-				, width			: 150
-				, cellClass		: 'text-center'
-				, valueGetter	: function (params) { 
-					return gagaAgGrid.toDateTimeFormat(params.data.delvAssignDt); 
-				}
-			},
-			{
-				headerName		: "송장출력일시"
-				, field			: "invoiceDt"
-				, width			: 150
-				, cellClass		: 'text-center'
-				, valueGetter	: function (params) { 
-					return gagaAgGrid.toDateTimeFormat(params.data.invoiceDt); 
-				}
-			},
-			{headerName: "출고택배사"		, field: "shipCompNm"	, width: 150, cellClass: 'text-center'},
-			{headerName: "출고송장"		, field: "invoiceNo"	, width: 150, cellClass: 'text-center'},
-			{
-				headerName		: "출고일시"
-				, field			: "delvResDt"
-				, width			: 150
-				, cellClass		: 'text-center'
-				, valueGetter: function (params) { 
-					return gagaAgGrid.toDateTimeFormat(params.data.delvResDt); 
-				}
-			},
-			{headerName: "품절여부"		, field: "soldoutYn"	, width: 90		, cellClass: 'text-center', sortable: true},
-			{headerName: "품절메모"		, field: "soldoutMemo"	, width: 120	, cellClass: 'text-left'},
-			{
-				headerName		: "품절일시"
-				, field			: "soldoutRegDt"
-				, width			: 150
-				, cellClass		: 'text-center'
-				, valueGetter	: function (params) { 
-					return gagaAgGrid.toDateTimeFormat(params.data.soldoutRegDt); 
-				}
-			},
-			{headerName: "품절처리자", field: "soldoutRegId", width: 120, cellClass: 'text-center'},
-			{headerName: "수취인명"		, field: "recipNm"				, width: 100, cellClass: 'text-center'},
-			{headerName: "수취인연락처"		, field: "recipPhnno"			, width: 120, cellClass: 'text-center'},
-			{headerName: "수취인주소"		, field: "recipAddr"			, width: 500, cellClass: 'text-left'},
-			{
-				headerName		: "배송메모"
-				, field			: "delvMemo"
-				, width			: 200
-				, cellClass		: 'left'
-				, valueGetter: function (params) {
-					var delvMemo = '';
-					if (!gagajf.isNull(params.data.delvMemo)) {
-						delvMemo = fnRemoveEmojis(params.data.delvMemo);
-					}
-					return delvMemo;
-				}
-			},
-			{headerName: "출고메모", field: "dstrbtNote", width: 200, cellClass: 'left'}
-		]
-	}
+		headerName		: "주문자"
+		, field			: "ordNm"
+		, width			: 140
+		, cellClass		: 'text-left'
+		, sortable		: true
+		, cellRenderer	: function (params) {
+			var custNo = '';
+			if (!gagajf.isNull(params.data.custNo)) {
+				custNo = params.data.custNo;
+			}
+			
+			var roleCd = [[${sessionInfo.roleCd}]];
+			if (!roleCd.startsWith("C") && !gagajf.isNull(params.data.custNo)  && params.data.mallGb === '10' ) {
+				return '<a href="javascript:void(0);" onclick=\"cfnOpenCustDetailPopup(' + params.data.custNo + ');\">' + params.value + ' (' + params.data.custId + ')' + '</a>';
+			} else {
+				return params.value + ' (' + params.data.custId + ')';
+			}
+		}
+	},
+	{headerName: "고객고유번호"	, field: "custNo"		, width: 120, cellClass: 'text-center', hide: true},
+	{headerName: "외부몰"		, field: "extmallNm"	, width: 100, cellClass: 'text-center', sortable: true},
+	{headerName: "휴대폰번호"	, field: "orderPhnno"	, width: 120, cellClass: 'text-center', hide: true},
+	{
+		headerName		: "사이트"
+		, field			: "siteCd"
+		, width			: 80
+		, cellClass		: 'text-center'
+		, hide			: true
+		, valueGetter	: function (params) { 
+			return gagaAgGrid.lookupValue(siteCdList, params.data.siteCd); 
+		}
+	},
+	{
+		headerName		: "프론트"
+		, field			: "frontGb"
+		, width			: 80
+		, cellClass		: 'text-center'
+		, sortable		: true
+		, valueGetter	: function (params) { 
+			return gagaAgGrid.lookupValue(frontGbList, params.data.frontGb); 
+		}
+	},
+	{
+		headerName		: "몰구분"
+		, field			: "mallGb"
+		, width			: 60
+		, cellClass		: 'text-center'
+		, hide			: true
+		, valueGetter	: function (params) { 
+			return gagaAgGrid.lookupValue(mallGbList, params.data.mallGb); 
+		}
+	},
+	{
+		headerName		: "주문일시"
+		, field			: "ordDt"
+		, width			: 140
+		, cellClass		: 'text-center'
+		, sortable		: true
+		, valueGetter	: function (params) { 
+			return gagaAgGrid.toDateTimeFormat(params.data.ordDt); 
+		}
+	},
+	{
+		headerName		: "결제수단"
+		, field			: "payMeans"
+		, width			: 100
+		, cellClass		: 'text-center'
+		, hide			: true
+		, valueGetter	: function (params) { 
+			return gagaAgGrid.lookupValue(payMeansList, params.data.payMeans); 
+		}
+	},
+	{
+		headerName		: "신규/교환"
+		, field			: "ordExchGb"
+		, width			: 100
+		, cellClass		: 'text-center',
+		valueGetter 	: function (params) {
+			return params.data.ordExchGb === 'O' ? '신규' : '교환';
+		}
+	},
+	{
+		headerName		: "주문상태"
+		, field			: "ordDtlStatNm"
+		, width			: 120
+		, cellClass		: 'text-center'
+		, sortable		: true
+	},
+	{headerName: "출고처", field: "delvLocNm", width: 110, cellClass: 'text-center', sortable: true, hide:true},
+	{headerName: "상품코드"	, field: "goodsCd"		, width: 100	, cellClass: 'text-center'	, sortable: true},
+	{headerName: "브랜드"		, field: "brandEnm"		, width: 100	, cellClass: 'text-center'	, sortable: true},
+	{headerName: "구성유형"	, field: "goodsTypeNm"	, width: 100	, cellClass: 'text-center'	, sortable: true},
+	{headerName: "상품명"		, field: "goodsNm"		, width: 200	, cellClass: 'text-center'	, sortable: true},
+	{
+		headerName		: "이미지"
+		, field			: "sysImgNm"
+		, width			: 100
+		, height		: 60
+		, cellClass		: 'text-center'
+		,cellRenderer	: function(params) {
+			return '<img width="60" src="'+ _goodsUrl+ "/" + params.value + '" alt=""  onerror="this.src=\'/image/no.gif\';"/>';
+		}
+	},
+	{headerName: "옵션1"		, field: "colorNm"		, width: 120	, cellClass: 'text-center'	, sortable: true},
+	{headerName: "옵션2"		, field: "optCd2"		, width: 120	, cellClass: 'text-center'	, sortable: true},
+	{
+		headerName		: "외부몰벤더"
+		, field			: "vendorId"
+		, width			: 110
+		, cellClass		: 'text-center'
+		, hide			: true
+		, valueGetter	: function (params) { 
+			return gagaAgGrid.lookupValue(vendorList, params.data.vendorId); 
+		}
+	},
+	{headerName: "외부몰주문번호"	, field: "extmallOrderId"	, width: 120, cellClass: 'textFormat', sortable: true},
+	{headerName: "에이전트주문번호"	, field: "agentOrderId"		, width: 120, cellClass: 'textFormat', sortable: true},
+	{
+		headerName		: "주문수량"
+		, field			: "ordQty"
+		, width			: 80
+		, cellClass		: 'text-center'
+		, valueGetter: function (params) { 
+			return params.data.ordQty.addComma(); 
+		}
+	},
+	{
+		headerName		: "취소수량"
+		, field			: "cnclRtnQty"
+		, width			: 80
+		, cellClass		: 'text-center'
+		, valueGetter	: function (params) { 
+			return params.data.cnclRtnQty.addComma(); 
+		}
+	},
+	{
+		headerName		: "주문금액"
+		, field			: "ordAmt"
+		, width			: 80
+		, cellClass		: 'text-right'
+		, valueGetter	: function (params) { 
+			return params.data.ordAmt.addComma(); 
+		}
+	},
+	{
+		headerName		: "취소/반품금액"
+		, field			: "cnclRtnAmt"
+		, width			: 120
+		, cellClass		: 'text-right'
+		, valueGetter	: function (params) { 
+			return params.data.cnclRtnAmt.addComma(); 
+		}
+	},
+	{
+		headerName		: "총할인금액"
+		, field			: "totDcAmt"
+		, width			: 120
+		, cellClass		: 'text-right'
+		, valueGetter: function (params) { 
+			return params.data.totDcAmt.addComma(); 
+		}
+	},
+	{
+		headerName		: "실판매금액"
+		, field			: "realOrdAmt"
+		, width			: 100
+		, cellClass		: 'text-right'
+		, valueGetter	: function (params) { 
+			return params.data.realOrdAmt.addComma(); 
+		}
+	},
+	{
+		headerName		: "정상/이월"
+		, field			: "formalGb"
+		, width			: 100
+		, cellClass		: 'text-center'
+		, sortable		: true 
+		, valueGetter	: function (params) { 
+			return gagaAgGrid.lookupValue(formalGbList, params.data.formalGb); 
+		}
+	},
+	{
+		headerName		: "출고처지정일시"
+		, field			: "delvAssignDt"
+		, width			: 150
+		, cellClass		: 'text-center'
+		, valueGetter	: function (params) { 
+			return gagaAgGrid.toDateTimeFormat(params.data.delvAssignDt); 
+		}
+	},
+	{
+		headerName		: "송장출력일시"
+		, field			: "invoiceDt"
+		, width			: 150
+		, cellClass		: 'text-center'
+		, valueGetter	: function (params) { 
+			return gagaAgGrid.toDateTimeFormat(params.data.invoiceDt); 
+		}
+	},
+	{headerName: "출고택배사"		, field: "shipCompNm"	, width: 150, cellClass: 'text-center'},
+	{headerName: "출고송장"		, field: "invoiceNo"	, width: 150, cellClass: 'text-center'},
+	{
+		headerName		: "출고일시"
+		, field			: "delvResDt"
+		, width			: 150
+		, cellClass		: 'text-center'
+		, valueGetter: function (params) { 
+			return gagaAgGrid.toDateTimeFormat(params.data.delvResDt); 
+		}
+	},
+	{headerName: "품절여부"		, field: "soldoutYn"	, width: 90		, cellClass: 'text-center', sortable: true},
+	{headerName: "품절메모"		, field: "soldoutMemo"	, width: 120	, cellClass: 'text-left'},
+	{
+		headerName		: "품절일시"
+		, field			: "soldoutRegDt"
+		, width			: 150
+		, cellClass		: 'text-center'
+		, valueGetter	: function (params) { 
+			return gagaAgGrid.toDateTimeFormat(params.data.soldoutRegDt); 
+		}
+	},
+	{headerName: "품절처리자", field: "soldoutRegId", width: 120, cellClass: 'text-center'},
+	{headerName: "수취인명"		, field: "recipNm"				, width: 100, cellClass: 'text-center'},
+	{headerName: "수취인연락처"		, field: "recipPhnno"			, width: 120, cellClass: 'text-center'},
+	{headerName: "수취인주소"		, field: "recipAddr"			, width: 400, cellClass: 'text-left'},
+	{
+		headerName		: "배송메모"
+		, field			: "delvMemo"
+		, width			: 200
+		, cellClass		: 'left'
+		, valueGetter: function (params) {
+			var delvMemo = '';
+			if (!gagajf.isNull(params.data.delvMemo)) {
+				delvMemo = fnRemoveEmojis(params.data.delvMemo);
+			}
+			return delvMemo;
+		}
+	},
+	{headerName: "출고메모", field: "dstrbtNote", width: 200, cellClass: 'left'}
 ];
 
 var gridOptionsOrderList = gagaAgGrid.getGridOptions(columnDefsOrderList);
@@ -557,6 +552,7 @@ var currOrdNo = '';
 
 // 조회
 $('#btnOrderSearch').on('click', function () {
+	$("#searchForm input[name=pageNo]").val('1');
 	fnSearchList();
 });
 
@@ -664,7 +660,7 @@ $('#searchForm select[name=supplyCompCd]').on('change', function() {
 // 페이징
 $('#searchForm select[name=pageSize]').on('change', function() {
 	$("#searchForm input[name=pageNo]").val('1');
-	fnGoodsListSearch($("#searchForm input[name=searchGb]").val());
+	fnSearchList($("#searchForm input[name=searchGb]").val());
 });
 
 // 초기설정
@@ -685,6 +681,19 @@ var fnRemoveEmojis = function (str) {
 	var regex = /(?:[\u2700-\u27bf]|(?:\ud83c[\udde6-\uddff]){2}|[\ud800-\udbff][\udc00-\udfff]|[\u0023-\u0039]\ufe0f?\u20e3|\u3299|\u3297|\u303d|\u3030|\u24c2|\ud83c[\udd70-\udd71]|\ud83c[\udd7e-\udd7f]|\ud83c\udd8e|\ud83c[\udd91-\udd9a]|\ud83c[\udde6-\uddff]|\ud83c[\ude01-\ude02]|\ud83c\ude1a|\ud83c\ude2f|\ud83c[\ude32-\ude3a]|\ud83c[\ude50-\ude51]|\u203c|\u2049|[\u25aa-\u25ab]|\u25b6|\u25c0|[\u25fb-\u25fe]|\u00a9|\u00ae|\u2122|\u2139|\ud83c\udc04|[\u2600-\u26FF]|\u2b05|\u2b06|\u2b07|\u2b1b|\u2b1c|\u2b50|\u2b55|\u231a|\u231b|\u2328|\u23cf|[\u23e9-\u23f3]|[\u23f8-\u23fa]|\ud83c\udccf|\u2934|\u2935|[\u2190-\u21ff])/g;
 	return str.replace(regex, '');
 };
+
+// 엔터키 조회
+$('#searchForm input[name=orderPhnno], #searchForm input[name=condition]').on('keypress' ,function (event) {
+	if (event.which === 13) {
+		$("#searchForm input[name=pageNo]").val('1');
+		fnSearchList();
+	}
+});
+
+// 휴대폰 자동 하이픈
+$('#searchForm input[name=orderPhnno]').on('input keyup keydown paste change', function () {
+	cfnCellPhonnHypen(this);
+});
 </script>
 
 </html>