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

Merge branch 'develop' of http://112.172.147.34:4936/style24/style24.front.git into develop

eskim 5 лет назад
Родитель
Сommit
e318b8b2fe
20 измененных файлов с 1181 добавлено и 348 удалено
  1. 24 7
      src/main/java/com/style24/front/biz/dao/TsfCustomerDao.java
  2. 66 22
      src/main/java/com/style24/front/biz/service/TsfCustomerService.java
  3. 8 3
      src/main/java/com/style24/front/biz/service/TsfReviewService.java
  4. 39 26
      src/main/java/com/style24/front/biz/web/TsfCustomerController.java
  5. 19 15
      src/main/java/com/style24/front/biz/web/TsfMypageController.java
  6. 1 0
      src/main/java/com/style24/persistence/domain/Review.java
  7. 1 1
      src/main/java/com/style24/persistence/mybatis/shop/TsfCart.xml
  8. 24 0
      src/main/java/com/style24/persistence/mybatis/shop/TsfCustomer.xml
  9. 2 2
      src/main/java/com/style24/persistence/mybatis/shop/TsfGoods.xml
  10. 3 3
      src/main/java/com/style24/persistence/mybatis/shop/TsfPoint.xml
  11. 26 9
      src/main/java/com/style24/persistence/mybatis/shop/TsfReview.xml
  12. 6 5
      src/main/java/com/style24/persistence/mybatis/shop/TsfSocial.xml
  13. 16 3
      src/main/resources/config/application-style.yml
  14. 1 1
      src/main/webapp/WEB-INF/views/mob/cart/CartListFormMob.html
  15. 670 0
      src/main/webapp/WEB-INF/views/mob/mypage/MypageReviewCreateFormMob.html
  16. 253 240
      src/main/webapp/WEB-INF/views/mob/mypage/MypageReviewFormMob.html
  17. 1 1
      src/main/webapp/WEB-INF/views/web/cart/CartListFormWeb.html
  18. 1 1
      src/main/webapp/WEB-INF/views/web/display/BrandMainFormWeb.html
  19. 4 2
      src/main/webapp/WEB-INF/views/web/mypage/MypageReviewCreateFormWeb.html
  20. 16 7
      src/main/webapp/WEB-INF/views/web/mypage/MypageReviewDetailFormWeb.html

+ 24 - 7
src/main/java/com/style24/front/biz/dao/TsfCustomerDao.java

@@ -1,15 +1,15 @@
 package com.style24.front.biz.dao;
 
+import java.util.Collection;
+
+import org.springframework.stereotype.Repository;
+
 import com.style24.core.support.annotation.ShopDs;
 import com.style24.persistence.domain.CustGrade;
 import com.style24.persistence.domain.CustSnsInfo;
 import com.style24.persistence.domain.Customer;
 import com.style24.persistence.domain.WishList;
 
-import java.util.Collection;
-
-import org.springframework.stereotype.Repository;
-
 /**
  * 고객(회원) Dao
  * 
@@ -82,7 +82,7 @@ public interface TsfCustomerDao {
 	 * @since 2021. 03. 02
 	 */
 	String getCustomerMaxCustId(Customer customer);
-	
+
 	/**
 	 * 위시리스트 등록
 	 *
@@ -101,7 +101,7 @@ public interface TsfCustomerDao {
 	 * @since 2021. 03. 08
 	 */
 	void deleteWishList(WishList wishList);
-	
+
 	/**
 	 * 위시리스트 삭제 상품 조회
 	 *
@@ -109,7 +109,7 @@ public interface TsfCustomerDao {
 	 * @author eskim
 	 * @since 2021. 03. 11
 	 */
-	String  getDeleteGoodsWish(int custNo);
+	String getDeleteGoodsWish(int custNo);
 
 	/**
 	 * 본인인증 처리
@@ -179,5 +179,22 @@ public interface TsfCustomerDao {
 	 */
 	int saveBatchBirth(Customer customer);
 
+	/**
+	 * SMS수신거부 처리
+	 * @param custNo - 고객번호
+	 * @return 처리건수
+	 * @author gagamel
+	 * @since 2021. 5. 11
+	 */
+	int updateSmsReceptionRefuse(Integer custNo);
+
+	/**
+	 * 메일수신거부 처리
+	 * @param custNo - 고객번호
+	 * @return 처리건수
+	 * @author gagamel
+	 * @since 2021. 5. 11
+	 */
+	int updateEmailReceptionRefuse(Integer custNo);
 
 }

+ 66 - 22
src/main/java/com/style24/front/biz/service/TsfCustomerService.java

@@ -7,8 +7,6 @@ import java.util.List;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpSession;
 
-
-import com.style24.persistence.domain.CustGrade;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.core.env.Environment;
@@ -17,8 +15,6 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import com.fasterxml.jackson.databind.ObjectMapper;
-import com.gagaframework.web.parameter.GagaMap;
-import com.gagaframework.web.security.GagaPasswordEncoder;
 import com.style24.core.biz.service.TscCustomerService;
 import com.style24.core.support.env.TscConstants;
 import com.style24.core.support.session.TscSession;
@@ -29,6 +25,7 @@ import com.style24.front.support.security.session.TsfSession;
 import com.style24.persistence.domain.Coupon;
 import com.style24.persistence.domain.CustAccount;
 import com.style24.persistence.domain.CustDeliveryAddr;
+import com.style24.persistence.domain.CustGrade;
 import com.style24.persistence.domain.CustSnsInfo;
 import com.style24.persistence.domain.Customer;
 import com.style24.persistence.domain.Login;
@@ -36,6 +33,9 @@ import com.style24.persistence.domain.WishList;
 
 import lombok.extern.slf4j.Slf4j;
 
+import com.gagaframework.web.parameter.GagaMap;
+import com.gagaframework.web.security.GagaPasswordEncoder;
+
 /**
  * 고객(회원) Service
  *
@@ -76,7 +76,7 @@ public class TsfCustomerService {
 	 * @since 2021. 02. 08
 	 */
 	public Customer getCustomerFindId(Customer customer) {
-		TsfSession.setAttribute("maskingYn","Y");
+		TsfSession.setAttribute("maskingYn", "Y");
 		customer.setSiteCd(TscConstants.Site.STYLE24.value());
 		customer.encryptData(); // 데이터 암호하
 		return customerDao.getCusomterActiveAndDormant(customer);
@@ -116,7 +116,6 @@ public class TsfCustomerService {
 		return coreCustomerService.getCustomerInfo(customer);
 	}
 
-
 	/**
 	 * 임시비밀번호 조회
 	 * @param length - 비밀번호 자릿수
@@ -221,7 +220,7 @@ public class TsfCustomerService {
 	 * @since 2021. 02. 15
 	 */
 	public Customer getCustomerFindByCi(String ci) {
-		TscSession.setAttribute("maskingYn","Y");
+		TscSession.setAttribute("maskingYn", "Y");
 		Customer customer = new Customer();
 		customer.setCi(ci);
 		customer.setSiteCd(TscConstants.Site.STYLE24.value());
@@ -238,7 +237,7 @@ public class TsfCustomerService {
 	 * @since 2021. 02. 15
 	 */
 	public Customer getCustomerFindByCellPhnno(String cellPhnno) {
-		TscSession.setAttribute("maskingYn","Y");
+		TscSession.setAttribute("maskingYn", "Y");
 		Customer customer = new Customer();
 		customer.setCellPhnno(cellPhnno);
 		customer.setHypenCellPhone(); // 010-0000-0000
@@ -286,11 +285,11 @@ public class TsfCustomerService {
 	 * @since 2021. 02. 19
 	 */
 	@Transactional("shopTxnManager")
-	public boolean saveJoinCustomerSns (Customer customer) {
+	public boolean saveJoinCustomerSns(Customer customer) {
 		boolean isJoin = true;
 		String snsId = customer.getSnsType().equals(TscConstants.SnsType.YES24.value()) ? customer.getMemNo() : customer.getSnsId();
 		customer.setEncodedPasswd(" ");
-		customer.setCustId(customer.getSnsType()+"_"+snsId);
+		customer.setCustId(customer.getSnsType() + "_" + snsId);
 		customer.encryptData();
 
 		customer.setSiteCd(TscConstants.Site.STYLE24.value());
@@ -300,7 +299,6 @@ public class TsfCustomerService {
 		customer.setCustGb(TscConstants.CustGb.NORMAL.value());
 		customer.setCustGrade(TscConstants.CustGrade.WELCOME.value());
 
-
 		int custCnt = customerDao.createCustomer(customer);
 		customerDao.createCustomerSns(customer);
 		customerDao.saveBatchBirth(customer);
@@ -334,7 +332,6 @@ public class TsfCustomerService {
 		couponService.saveJoinCoupon(coupon);
 	}
 
-
 	/**
 	 * Sns 정보에대한 상태 처리
 	 *
@@ -343,7 +340,7 @@ public class TsfCustomerService {
 	 * @since 2021. 02. 19
 	 */
 	@Transactional("shopTxnManager")
-	public GagaMap customerSnsProcessing (CustSnsInfo custSnsInfo) {
+	public GagaMap customerSnsProcessing(CustSnsInfo custSnsInfo) {
 		GagaMap resultMap = new GagaMap();
 		Customer custInfo;
 
@@ -392,7 +389,7 @@ public class TsfCustomerService {
 				return resultMap;
 			}
 
-			boolean isFindByPhone = getCustomerFindByCellPhnnoCount(custSnsInfo.getCellPhnno().replace("-",""));
+			boolean isFindByPhone = getCustomerFindByCellPhnnoCount(custSnsInfo.getCellPhnno().replace("-", ""));
 			if (isFindByPhone) {
 				resultMap.setString("custStat", "DUP_PHONE_CUST"); // 휴대폰 중복
 				return resultMap;
@@ -447,7 +444,7 @@ public class TsfCustomerService {
 		loginService.createLoginHistory(loginInfo.getCustNo());
 
 		// 세션 생성
-		this.createSession(request,  loginDetails);
+		this.createSession(request, loginDetails);
 	}
 
 	/**
@@ -464,7 +461,6 @@ public class TsfCustomerService {
 		session.setAttribute("session", loginDetails);
 	}
 
-
 	/**
 	 * 일반고객 정보 유효성
 	 *
@@ -473,7 +469,7 @@ public class TsfCustomerService {
 	 * @author jsshin
 	 * @since 2021. 02. 18
 	 */
-	public GagaMap generalCustomerValidation (Customer customer) {
+	public GagaMap generalCustomerValidation(Customer customer) {
 		GagaMap resultMap = new GagaMap();
 		String maskingCustId;
 
@@ -529,7 +525,6 @@ public class TsfCustomerService {
 		return customerDao.getCusomterSnsFind(custSnsInfo);
 	}
 
-
 	/**
 	 * 가입된 아이디 가져오기
 	 * @param custId - 고객아이디
@@ -625,7 +620,7 @@ public class TsfCustomerService {
 			wishInfo.setRegNo(TsfSession.getInfo().getCustNo());
 			customerDao.createWishList(wishInfo);
 		}
-		
+
 		// 위시상품목록 50개만 남게 처리
 		String goodsCd = customerDao.getDeleteGoodsWish(TsfSession.getInfo().getCustNo());
 		WishList delWishInfo = new WishList();
@@ -634,7 +629,7 @@ public class TsfCustomerService {
 			delWishInfo.setArrGoodsCd(goodsCd.split("\\,"));
 			customerDao.deleteWishList(delWishInfo);
 		}
-		
+
 	}
 
 	/**
@@ -799,7 +794,6 @@ public class TsfCustomerService {
 		return result;
 	}
 
-
 	/**
 	 * 고객계좌 정보
 	 *
@@ -812,7 +806,6 @@ public class TsfCustomerService {
 		return coreCustomerService.getCustomerAccuontInfo(custNo);
 	}
 
-
 	/**
 	 * 고객정보 수정
 	 *
@@ -999,4 +992,55 @@ public class TsfCustomerService {
 	public Collection<CustGrade> getCustGradePolicy(CustGrade custGrade) {
 		return customerDao.getCustGradePolicy(custGrade);
 	}
+
+	/**
+	 * SMS수신거부 처리
+	 * @param custNo - 고객번호
+	 * @author gagamel
+	 * @since 2021. 5. 11
+	 */
+	@Transactional("shopTxnManager")
+	public void updateSmsReceptionRefuse(Integer custNo) {
+		// 수신거부 처리
+		int result = customerDao.updateSmsReceptionRefuse(custNo);
+
+		if (result > 0) {
+			Customer customer = new Customer();
+			customer.setCustNo(custNo);
+			customer.setSmsAgreeYn("N");
+			customer.setRegNo(custNo);
+
+			// 마케팅수신동의이력 생성
+			coreCustomerService.createCustomerMarketHst(customer);
+
+			// 고객이력 생성
+			coreCustomerService.createCustomerHistory(customer);
+		}
+	}
+
+	/**
+	 * 메일수신거부 처리
+	 * @param custNo - 고객번호
+	 * @author gagamel
+	 * @since 2021. 5. 11
+	 */
+	@Transactional("shopTxnManager")
+	public void updateEmailReceptionRefuse(Integer custNo) {
+		// 수신거부 처리
+		int result = customerDao.updateEmailReceptionRefuse(custNo);
+
+		if (result > 0) {
+			Customer customer = new Customer();
+			customer.setCustNo(custNo);
+			customer.setEmailAgreeYn("N");
+			customer.setRegNo(custNo);
+
+			// 마케팅수신동의이력 생성
+			coreCustomerService.createCustomerMarketHst(customer);
+
+			// 고객이력 생성
+			coreCustomerService.createCustomerHistory(customer);
+		}
+	}
+
 }

+ 8 - 3
src/main/java/com/style24/front/biz/service/TsfReviewService.java

@@ -271,9 +271,7 @@ public class TsfReviewService {
 			}
 		}
 		
-		if (review.getConfirmYn()=="Y") {
-			reviewDao.updateMypageReviewConfimYn(review);
-		}
+		reviewDao.updateMypageReviewConfimYn(review);
 		
 	}
 		
@@ -288,11 +286,13 @@ public class TsfReviewService {
 	public void updateMypageReview(Review review) {
 		review.setRegNo(TsfSession.getInfo().getCustNo());
 		review.setUpdNo(TsfSession.getInfo().getCustNo());		
+		review.setConfirmYn("Y");
 		reviewDao.updateMypageReview(review);
 		reviewDao.reviewAttachDelete(review);
 		
 		//이미지등록
 		if(!StringUtils.isAllEmpty(review.getOrgFileNmArr())) {
+			review.setConfirmYn("Y");
 			ReviewAttach fileReview = new ReviewAttach();
 			fileReview.setRegNo(TsfSession.getInfo().getCustNo());
 			fileReview.setUpdNo(TsfSession.getInfo().getCustNo());
@@ -335,6 +335,7 @@ public class TsfReviewService {
 		}
 		
 		if(!StringUtils.isAllEmpty(review.getKufKeyArr())) {
+			review.setConfirmYn("N");
 			ReviewAttach fileReview = new ReviewAttach();
 			fileReview.setRegNo(TsfSession.getInfo().getCustNo());
 			fileReview.setUpdNo(TsfSession.getInfo().getCustNo());
@@ -342,11 +343,15 @@ public class TsfReviewService {
 			fileReview.setFileGb("M");
 			fileReview.setDelYn("N");
 			String[] fileItemVal1 = review.getKufKeyArr();
+			String[] fileItemVal2 = review.getKmcKeyArr();
 			for (int j = 0; j < fileItemVal1.length; j++) {
 				fileReview.setKufKey(fileItemVal1[j]);
+				fileReview.setKmcKey(fileItemVal2[j]);
 				reviewDao.saveReviewAttach(fileReview);
 			}
+			
 		}
+		reviewDao.updateMypageReviewConfimYn(review);
 	}
 	
 	/**

+ 39 - 26
src/main/java/com/style24/front/biz/web/TsfCustomerController.java

@@ -3,12 +3,11 @@ package com.style24.front.biz.web;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpSession;
 
-import com.style24.front.biz.thirdparty.Yes24Login;
-import com.style24.persistence.domain.CustSnsInfo;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
@@ -22,13 +21,16 @@ import com.style24.core.support.message.TscMessageByLocale;
 import com.style24.front.biz.service.TsfCustomerService;
 import com.style24.front.biz.service.TsfKakaoService;
 import com.style24.front.biz.thirdparty.NiceCertify;
+import com.style24.front.biz.thirdparty.Yes24Login;
 import com.style24.front.support.controller.TsfBaseController;
 import com.style24.front.support.security.session.TsfSession;
+import com.style24.persistence.domain.CustSnsInfo;
 import com.style24.persistence.domain.Customer;
 
 import lombok.extern.slf4j.Slf4j;
 
 import com.gagaframework.web.parameter.GagaMap;
+import com.gagaframework.web.rest.server.GagaResponse;
 
 /**
  * 고객(회원) Controller
@@ -67,8 +69,7 @@ public class TsfCustomerController extends TsfBaseController {
 	 * @since 2021. 02. 05
 	 */
 	@RequestMapping("/id/find/form")
-	public ModelAndView idFindForm(@RequestParam(value = "sEncData", required = false) String sEncData
-			, @RequestParam(value = "authMethod", required = false) String authMethod) {
+	public ModelAndView idFindForm(@RequestParam(value = "sEncData", required = false) String sEncData, @RequestParam(value = "authMethod", required = false) String authMethod) {
 
 		ModelAndView mav = new ModelAndView();
 
@@ -137,8 +138,7 @@ public class TsfCustomerController extends TsfBaseController {
 	 * @since 2021. 02. 05
 	 */
 	@RequestMapping("/password/find/form")
-	public ModelAndView pwdFindForm(@RequestParam(value = "sEncData", required = false) String sEncData
-			, @RequestParam(value = "authMethod", required = false) String authMethod) {
+	public ModelAndView pwdFindForm(@RequestParam(value = "sEncData", required = false) String sEncData, @RequestParam(value = "authMethod", required = false) String authMethod) {
 
 		ModelAndView mav = new ModelAndView();
 		mav.addObject("sEncData", sEncData);
@@ -338,9 +338,7 @@ public class TsfCustomerController extends TsfBaseController {
 	 * @since 2021. 02. 05
 	 */
 	@RequestMapping("/join/form")
-	public ModelAndView getJoinForm(@RequestParam(value = "sEncData", required = false) String sEncData
-			, @RequestParam(value = "authMethod", required = false) String authMethod
-			, @RequestParam(value = "custParams", required = false) String custParams) {
+	public ModelAndView getJoinForm(@RequestParam(value = "sEncData", required = false) String sEncData, @RequestParam(value = "authMethod", required = false) String authMethod, @RequestParam(value = "custParams", required = false) String custParams) {
 
 		ModelAndView mav = new ModelAndView();
 
@@ -362,8 +360,7 @@ public class TsfCustomerController extends TsfBaseController {
 	 * @since 2021. 02. 09
 	 */
 	@GetMapping("/nice/cellphone/form")
-	public ModelAndView niceCellphoneForm(@RequestParam(value = "redirectUrl", required = false) String redirectUrl
-										, @RequestParam(value = "custParams", required = false) String custParams) {
+	public ModelAndView niceCellphoneForm(@RequestParam(value = "redirectUrl", required = false) String redirectUrl, @RequestParam(value = "custParams", required = false) String custParams) {
 		ModelAndView mav = new ModelAndView();
 		GagaMap result = niceCertify.certifyCellPhone();
 
@@ -386,8 +383,7 @@ public class TsfCustomerController extends TsfBaseController {
 	 * @since 2021. 02. 09
 	 */
 	@GetMapping("/nice/ipin/form")
-	public ModelAndView getCertifyNiceIpin(@RequestParam(value = "redirectUrl", required = false) String redirectUrl
-										 , @RequestParam(value = "custParams", required = false) String custParams) {
+	public ModelAndView getCertifyNiceIpin(@RequestParam(value = "redirectUrl", required = false) String redirectUrl, @RequestParam(value = "custParams", required = false) String custParams) {
 		ModelAndView mav = new ModelAndView();
 		GagaMap result = niceCertify.certifyIpin();
 
@@ -411,10 +407,7 @@ public class TsfCustomerController extends TsfBaseController {
 	 * @since 2021. 02. 09
 	 */
 	@RequestMapping("/nice/certify/callback")
-	public ModelAndView niceCertifyCallback(@RequestParam(value = "EncodeData", required = false) String encodeData
-			, @RequestParam(value = "enc_data", required = false) String encData
-			, @RequestParam(value = "param_r1", required = false) String redirectUrl
-			, @RequestParam(value = "param_r2", required = false) String custParams) {
+	public ModelAndView niceCertifyCallback(@RequestParam(value = "EncodeData", required = false) String encodeData, @RequestParam(value = "enc_data", required = false) String encData, @RequestParam(value = "param_r1", required = false) String redirectUrl, @RequestParam(value = "param_r2", required = false) String custParams) {
 
 		ModelAndView mav = new ModelAndView();
 		String sEncData = "";
@@ -667,9 +660,7 @@ public class TsfCustomerController extends TsfBaseController {
 	 * @since 2021. 03. 08
 	 */
 	@RequestMapping("/dormant/certify/form")
-	public ModelAndView getDormantCeirtyForm(@RequestParam(value = "sEncData", required = false) String sEncData
-										 	, @RequestParam(value = "authMethod", required = false) String authMethod
-											, @RequestParam(value = "custParams", required = false) String custParams) {
+	public ModelAndView getDormantCeirtyForm(@RequestParam(value = "sEncData", required = false) String sEncData, @RequestParam(value = "authMethod", required = false) String authMethod, @RequestParam(value = "custParams", required = false) String custParams) {
 
 		ModelAndView mav = new ModelAndView();
 
@@ -706,7 +697,7 @@ public class TsfCustomerController extends TsfBaseController {
 		}
 
 		GagaMap resultInfo;
-		if (TscConstants.AuthMethod.MOBILE.value().equals(customer.getAuthMethod())){
+		if (TscConstants.AuthMethod.MOBILE.value().equals(customer.getAuthMethod())) {
 			resultInfo = niceCertify.getCertifyCellPhoneResultInfo(customer);
 			customer.setCi(resultInfo.getString("sCi"));
 		} else {
@@ -743,9 +734,7 @@ public class TsfCustomerController extends TsfBaseController {
 	 * @since 2021. 03. 10
 	 */
 	@RequestMapping("/certification/form")
-	public ModelAndView getCertificationForm(@RequestParam(value = "sEncData", required = false) String sEncData
-			, @RequestParam(value = "authMethod", required = false) String authMethod
-			, @RequestParam(value = "custParams", required = false) String custParams) {
+	public ModelAndView getCertificationForm(@RequestParam(value = "sEncData", required = false) String sEncData, @RequestParam(value = "authMethod", required = false) String authMethod, @RequestParam(value = "custParams", required = false) String custParams) {
 
 		ModelAndView mav = new ModelAndView();
 
@@ -761,7 +750,6 @@ public class TsfCustomerController extends TsfBaseController {
 		mav.addObject("sEncData", sEncData);
 		mav.addObject("authMethod", authMethod);
 
-
 		mav.setViewName(super.getDeviceViewName("customer/CertificationForm"));
 		return mav;
 	}
@@ -887,7 +875,7 @@ public class TsfCustomerController extends TsfBaseController {
 	@PostMapping("/peristalsis/yes24")
 	@ResponseBody
 	public GagaMap peristalsisYes24(HttpSession session, HttpServletRequest request) {
-		CustSnsInfo custSnsInfo = (CustSnsInfo) session.getAttribute("custSnsInfo");
+		CustSnsInfo custSnsInfo = (CustSnsInfo)session.getAttribute("custSnsInfo");
 		session.removeAttribute("custSnsInfo"); // YES24 세션 지움
 
 		// 1. SNS처리
@@ -964,5 +952,30 @@ public class TsfCustomerController extends TsfBaseController {
 		return mav;
 	}
 
+	/**
+	 * SMS수신거부 처리
+	 * @param custNo - 고객번호
+	 * @author gagamel
+	 * @since 2020. 5. 11
+	 */
+	@GetMapping("/sms/refuse/{custNo}")
+	@ResponseBody
+	public GagaResponse updateSmsReceptionRefuse(@PathVariable Integer custNo) {
+		customerService.updateSmsReceptionRefuse(custNo);
+		return super.ok(message.getMessage("SUCC_0004"));
+	}
+
+	/**
+	 * 이메일수신거부 처리
+	 * @param custNo - 고객번호
+	 * @author gagamel
+	 * @since 2020. 5. 11
+	 */
+	@GetMapping("/email/refuse/{custNo}")
+	@ResponseBody
+	public GagaResponse updateEmailReceptionRefuse(@PathVariable Integer custNo) {
+		customerService.updateSmsReceptionRefuse(custNo);
+		return super.ok(message.getMessage("SUCC_0004"));
+	}
 
 }

+ 19 - 15
src/main/java/com/style24/front/biz/web/TsfMypageController.java

@@ -1619,9 +1619,9 @@ public class TsfMypageController extends TsfBaseController {
 	@PostMapping("/complete/review/list")
 	@ResponseBody
 	public GagaMap getMypageCompleteReviewList(@RequestBody Review review) {
-
+		String frontGb = TsfSession.getFrontGb();
 		review.setSiteCd(TscConstants.Site.STYLE24.value());
-
+		review.setFrontGb(frontGb);
 		if (TsfSession.isLogin()) {
 			review.setCustNo(TsfSession.getInfo().getCustNo());
 		}
@@ -1629,11 +1629,14 @@ public class TsfMypageController extends TsfBaseController {
 		int reviewExpireDay = eventService.getGoodsReviewRegisterDays(TscConstants.Site.STYLE24.value());
 		review.setReviewExpireDay(reviewExpireDay);
 		result.set("completeReviewCount", reviewService.getCompleteReviewList(review).size());
-		TscPageRequest pageable = new TscPageRequest((review.getPageNo() > 0 ? review.getPageNo() - 1 : 0), review.getPageSize(), review.getPageUnit());
-		pageable.setTotalCount(reviewService.getCompleteReviewList(review).size());
-		review.setPageable(pageable);
 		
-		result.set("paging1", review);
+		if (frontGb == "P") {
+			TscPageRequest pageable = new TscPageRequest((review.getPageNo() > 0 ? review.getPageNo() - 1 : 0), review.getPageSize(), review.getPageUnit());
+			pageable.setTotalCount(reviewService.getCompleteReviewList(review).size());
+			review.setPageable(pageable);
+			
+			result.set("paging1", review);
+		}
 		
 		
 		result.set("dataList1", reviewService.getCompleteReviewList(review));
@@ -1651,9 +1654,9 @@ public class TsfMypageController extends TsfBaseController {
 	@PostMapping("/already/review/list")
 	@ResponseBody
 	public GagaMap getMypageAlreadyReviewList(@RequestBody Review review) {
-
+		String frontGb = TsfSession.getFrontGb();
 		review.setSiteCd(TscConstants.Site.STYLE24.value());
-
+		review.setFrontGb(frontGb);
 		GagaMap result = new GagaMap();
 		if (TsfSession.isLogin()) {
 			review.setCustNo(TsfSession.getInfo().getCustNo());
@@ -1661,11 +1664,12 @@ public class TsfMypageController extends TsfBaseController {
 		
 		review.setReviewExpireDay(eventService.getGoodsReviewPointExpireDays(TscConstants.Site.STYLE24.value()));
 		result.set("alreadyReviewCount", reviewService.getAlreadyReviewList(review).size());
-		
-		TscPageRequest pageable2 = new TscPageRequest((review.getPageNo2() > 0 ? review.getPageNo2() - 1 : 0), review.getPageSize2(), review.getPageUnit2());
-		pageable2.setTotalCount(reviewService.getAlreadyReviewList(review).size());
-		review.setPageable2(pageable2);
-		result.set("paging2", review);
+		if (frontGb == "P") {
+			TscPageRequest pageable2 = new TscPageRequest((review.getPageNo2() > 0 ? review.getPageNo2() - 1 : 0), review.getPageSize2(), review.getPageUnit2());
+			pageable2.setTotalCount(reviewService.getAlreadyReviewList(review).size());
+			review.setPageable2(pageable2);
+			result.set("paging2", review);
+		}
 		
 		result.set("dataList2", reviewService.getAlreadyReviewList(review));
 
@@ -1760,8 +1764,8 @@ public class TsfMypageController extends TsfBaseController {
 		review.setCustNo(TsfSession.getInfo().getCustNo());
 		review.setSiteCd(TscConstants.Site.STYLE24.value());
 		reviewService.reviewDelete(review);
-		result.set("alreadyReviewCount",reviewService.getAlreadyReviewCount(review));
-		result.set("completeReviewCount",reviewService.getCompleteReviewCount(review));
+		result.set("alreadyReviewCount",reviewService.getAlreadyReviewList(review).size());
+		result.set("completeReviewCount",reviewService.getCompleteReviewList(review).size());
 		result.set("status", "200");
 		return result;
 	}

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

@@ -106,6 +106,7 @@ public class Review extends TscBaseDomain {
 	private int nextReviewSq;
 	private int reviewExpireDay;
 	private String kmcKey;
+	private String kufKey;
 	
 	private Integer custPntSq;		// 고객포인트일련번호
 	private int gvPntAmt;			// 지급포인트금액

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

@@ -548,7 +548,7 @@
 		             , CASE WHEN GQDS.GOODS_CD IS NULL AND G.SELF_GOODS_YN = 'Y' THEN 'SHOT'
 		                    WHEN G.SELF_GOODS_YN = 'Y' THEN 'WMS'
 		                    ELSE DFP.DELV_FEE_CD END AS CART_DELV_FEE_CD
-		             , CASE WHEN STOCK.ORD_CAN_YN = 'Y' AND (SELECT  CASE WHEN MAX(Z.CNT1) IS NULL THEN 'Y' ELSE CASE WHEN CNT2 > 0 THEN 'Y'
+		             , CASE WHEN STOCK.ORD_CAN_YN = 'Y' AND (SELECT  CASE WHEN MAX(Z.CNT1) IS NULL THEN 'Y' ELSE CASE WHEN MAX(Z.CNT2) > 0 THEN 'Y'
 		                                                                                                              ELSE 'N' END END
 		                                                     FROM    (SELECT COUNT(1) AS CNT1
 		                                                                   , CASE WHEN GOG.CUST_GRADE = CT.CUST_GRADE THEN 1

+ 24 - 0
src/main/java/com/style24/persistence/mybatis/shop/TsfCustomer.xml

@@ -654,5 +654,29 @@
 		    ,  UPD_DT = NOW()
 		    ,  UPD_NO = #{updNo}
 	</insert>
+	
+	<!-- SMS수신거부 처리 -->
+	<update id="updateSmsReceptionRefuse" parameterType="Integer">
+		/* TsfCustomer.updateSmsReceptionRefuse */
+		UPDATE TB_CUSTOMER
+		SET    SMS_AGREE_YN = 'N'
+		     , SMS_AGREE_DT = NOW()
+		     , UPD_NO = #{custNo}
+		     , UPD_DT = NOW()
+		WHERE  CUST_NO = #{custNo}
+		AND    SMS_AGREE_YN = 'Y' /*현재수신동의인경우*/
+	</update>
+	
+	<!-- 메일수신거부 처리 -->
+	<update id="updateEmailReceptionRefuse" parameterType="Integer">
+		/* TsfCustomer.updateEmailReceptionRefuse */
+		UPDATE TB_CUSTOMER
+		SET    EMAIL_AGREE_YN = 'N'
+		     , EMAIL_AGREE_DT = NOW()
+		     , UPD_NO = #{custNo}
+		     , UPD_DT = NOW()
+		WHERE  CUST_NO = #{custNo}
+		AND    EMAIL_AGREE_YN = 'Y' /*현재수신동의인경우*/
+	</update>
 
 </mapper>

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

@@ -1009,7 +1009,7 @@
 		AND    G.MAIN_COLOR_CD = GI.COLOR_CD
 		AND    G.GOODS_STAT = 'G008_90' /*승인완료된상품만*/
 		AND    GI.DEFAULT_IMG_YN = 'Y' /*기본이미지만*/
-		GROUP  BY G.GOODS_CD, G.MAIN_COLOR_CD
+		GROUP  BY G.GOODS_CD, G.MAIN_COLOR_CD, GI.SYS_IMG_NM
 		ORDER  BY A.DISP_ORD DESC
 	</select>
 	
@@ -1160,7 +1160,7 @@
 		          -- , RANK() OVER (PARTITION BY F.FREEGIFT_SQ , F.FREEGIFT_SECTION_SQ ORDER BY  FG.FREEGIFT_VAL_SQ ) AS RNUM
 		    FROM TAB_FREEGOODS FG
 		     WHERE FG.ROWNUM = 1
-		    GROUP BY  FG.FREEGIFT_SQ , FG.FREEGIFT_SECTION_SQ , FG.ALL_YN , FG.SECTION_GB , FG.SECTION_VAL
+		    GROUP BY  FG.FREEGIFT_SQ , FG.FREEGIFT_SECTION_SQ , FG.ALL_YN , FG.SECTION_GB , FG.SECTION_VAL, FG.GOODS_NM, FG.ITEM_QTY
 		    ORDER BY FG.FREEGIFT_SQ, FG.FREEGIFT_SECTION_SQ
 		) Z
 		WHERE 1 = 1

+ 3 - 3
src/main/java/com/style24/persistence/mybatis/shop/TsfPoint.xml

@@ -104,7 +104,7 @@
 		       AND CPH.OCCUR_GB NOT IN ('G069_12','G069_13')
 		       AND DATE_FORMAT(CPH.UPD_DT,'%Y%m') = #{searchDt}
 		       AND CPH.PNT_AMT <![CDATA[>]]> 0
-		UNION ALL
+		UNION
 		      SELECT  CASE CPH.OCCUR_GB
 		                  WHEN 'G069_12' THEN '상품 구매'
 		                  WHEN 'G069_13' THEN '구매 취소'
@@ -199,7 +199,7 @@
 		       AND CPH.OCCUR_GB NOT IN ('G069_12','G069_13')
 		       AND DATE_FORMAT(CPH.UPD_DT,'%Y%m') = #{searchDt}
 		       AND CPH.PNT_AMT <![CDATA[<]]> 0
-		UNION ALL
+		UNION
 		      SELECT  CASE CPH.OCCUR_GB
 		                  WHEN 'G069_12' THEN '상품 구매'
 		                  WHEN 'G069_13' THEN '구매 취소'
@@ -293,7 +293,7 @@
 		       WHERE CPH.CUST_NO = #{custNo}
 		       AND CPH.OCCUR_GB NOT IN ('G069_12','G069_13')
 		       AND DATE_FORMAT(CPH.UPD_DT,'%Y%m') = #{searchDt}
-		UNION ALL
+		UNION
 		      SELECT  CASE CPH.OCCUR_GB
 		                  WHEN 'G069_12' THEN '상품 구매'
 		                  WHEN 'G069_13' THEN '구매 취소'

+ 26 - 9
src/main/java/com/style24/persistence/mybatis/shop/TsfReview.xml

@@ -270,6 +270,7 @@
 		     , A.FILE_GB
 		     , A.SYS_FILE_NM
 		     , A.KMC_KEY
+		     , A.KUF_KEY
 		     , A.DEL_YN 
 		     , RANK() OVER(ORDER BY a.FILE_GB DESC) AS NUMB
 		FROM  TB_REVIEW R
@@ -278,9 +279,9 @@
 		WHERE R.DISP_YN = 'Y'
 		AND R.DEL_YN = 'N'
 		AND R.REVIEW_SQ = #{reviewSq}
-		AND (A.FILE_GB  = 'I'
+		AND (FILE_GB  = 'I'
 		     OR
-		     A.FILE_GB = 'M' AND R.CONFIRM_YN = 'Y' AND  A.KMC_KEY IS NOT NULL
+		     FILE_GB = 'M' AND R.CONFIRM_YN = 'Y'  AND  NULLIF(KMC_KEY,'') IS NOT NULL
 		    )
 	</select>
 	
@@ -345,7 +346,9 @@
 	<!-- 마이페이지 작성가능한 리뷰 -->
 	<select id="getCompleteReviewList" parameterType="Review" resultType="Review">
 		/* TsfReivew.getCompleteReviewList */
+		<if test='frontGb == "P"'>
 		<include refid="selectForPagingHeader"/>
+		</if>
 		SELECT GROUP_CONCAT(Z.ITEM_NM ORDER BY Z.ORD_DTL_ITEM_SQ SEPARATOR '!@!') AS ITEM_NM
 		     -- , GROUP_CONCAT(Z.COLOR_NM ORDER BY Z.ORD_DTL_ITEM_SQ) AS COLOR_NM
 		     , GROUP_CONCAT(' ',CONCAT(OPT_CD1_NM,'/', OPT_CD2) ORDER BY Z.ORD_DTL_ITEM_SQ) AS COLOR_NM
@@ -465,7 +468,8 @@
 		                                   AND C.USE_YN = 'Y'
 				  WHERE 1=1
 				AND O.PAY_DT >  DATE_FORMAT(DATE_ADD(CURRENT_DATE(), INTERVAL #{reviewExpireDay} DAY), '%Y%M%D%H%I%S') 
-				AND O.ORD_NO NOT IN (SELECT R.ORD_NO FROM TB_REVIEW R WHERE R.DEL_YN = 'N' AND DISP_YN = 'Y')
+				-- AND O.ORD_NO NOT IN (SELECT R.ORD_NO FROM TB_REVIEW R WHERE R.DEL_YN = 'N' AND DISP_YN = 'Y')
+				AND OD.ORD_DTL_NO NOT IN (SELECT R.ORD_DTL_NO FROM TB_REVIEW R WHERE R.DEL_YN = 'N' AND DISP_YN = 'Y' AND R.ORD_NO = O.ORD_NO AND R.ORD_DTL_NO = OD.ORD_DTL_NO AND R.CUST_NO = #{custNo})
 				AND O.CUST_NO = #{custNo}
 				AND O.DISP_YN = 'Y'
 			 	AND O.SITE_CD = #{siteCd}
@@ -476,7 +480,9 @@
 				, Z.SUPPLY_COMP_CD, Z.DELV_FEE_CD, Z.SHOT_DELV_YN, Z.CHANGEABLE_YN, Z.SELF_GOODS_YN, Z.BRAND_NM, Z.BRAND_ENM, Z.ORD_DTL_STAT_NM
 				, Z.ORD_REQ_CHG_QTY, Z.ORD_CAN_CHG_QTY
 		ORDER BY Z.ORD_NO DESC, Z.ORD_DTL_STAT, Z.SELF_GOODS_YN DESC, Z.SHOT_DELV_YN DESC, Z.SUPPLY_COMP_CD
+		<if test='frontGb == "P"'>
 		<include refid="selectForPagingFooter"/>
+		</if>
 	</select>
 	
 	<!-- 마이페이지 리뷰작성 상품데이타 -->
@@ -832,7 +838,9 @@
 		   ,SCORE_WEIGHT   =  #{scoreWeight}     
 		   ,SCORE_BALL     =  #{scoreBall}  
 		   , DEL_YN        = 'N'     
-		   ,UPD_DT         =  now()     
+		   ,UPD_DT         =  now()  
+		   ,CONFIRM_YN     = 'Y'
+		   ,CONFIRM_DT     = NOW()   
 		WHERE REVIEW_SQ  = #{reviewSq}
 		AND   ORD_NO     = #{ordNo}
 		AND   ORD_DTL_NO = #{ordDtlNo}
@@ -843,14 +851,17 @@
 	<update id="updateMypageReviewConfimYn" parameterType="Review">
 		/* TsfReivew.updateMypageReviewConfimYn */
 		UPDATE TB_REVIEW
-		SET CONFIRM_YN = 'N'
-		   ,CONFIRM_DT = NOW()
+		<if test='confirmYn == "Y"'>
+		SET CONFIRM_DT = NOW()
+		   ,CONFIRM_YN = 'Y'
+		   </if>
+		   <if test='confirmYn == "N"'>
+		 SET CONFIRM_DT = NULL
+		    ,CONFIRM_YN = 'N'
+		   </if>
 		WHERE REVIEW_SQ  = #{reviewSq}
 	</update>
 	
-	
-	
-	
 	<select id="getAlreadyReviewCount" parameterType="Review" resultType="int">
 		/* TsfReivew.getAlreadyReviewCount */
 		SELECT  COUNT(*) AS CNT 
@@ -919,7 +930,9 @@
 	
 	<select id="getAlreadyReviewList" parameterType="Review" resultType="Review">
 		/* TsfReivew.getAlreadyReviewList */
+		<if test='frontGb == "P"'>
 		<include refid="selectForPagingHeader"/>
+		</if>
 		        SELECT GROUP_CONCAT(Z.ITEM_NM ORDER BY Z.ORD_DTL_ITEM_SQ SEPARATOR '!@!') AS ITEM_NM
 		          -- , GROUP_CONCAT(Z.COLOR_NM ORDER BY Z.ORD_DTL_ITEM_SQ) AS COLOR_NM
 		             , GROUP_CONCAT(' ',CONCAT(OPT_CD1_NM,'/', OPT_CD2) ORDER BY Z.ORD_DTL_ITEM_SQ) AS COLOR_NM
@@ -1122,6 +1135,7 @@
 		   AND O.CUST_NO =  #{custNo}
 		   AND O.DISP_YN = 'Y'
 		   AND R.CONFIRM_YN = 'Y'
+		   AND OD.ORD_DTL_NO IN (SELECT R.ORD_DTL_NO FROM TB_REVIEW R WHERE R.DEL_YN = 'N' AND DISP_YN = 'Y' AND R.ORD_NO = O.ORD_NO AND R.ORD_DTL_NO = OD.ORD_DTL_NO AND R.CUST_NO = #{custNo})
 		   AND O.SITE_CD =  #{siteCd}
 		   	) Z
 		 GROUP BY Z.ORD_NO, Z.ORD_DT, Z.DELV_EDDT, Z.ORD_DTL_NO, Z.ORD_EXCH_GB
@@ -1130,7 +1144,9 @@
 		        , Z.SUPPLY_COMP_CD, Z.DELV_FEE_CD, Z.SHOT_DELV_YN, Z.CHANGEABLE_YN, Z.SELF_GOODS_YN, Z.BRAND_NM, Z.BRAND_ENM, Z.ORD_DTL_STAT_NM
 		        , Z.ORD_REQ_CHG_QTY, Z.ORD_CAN_CHG_QTY
 		ORDER BY Z.ORD_NO DESC, Z.ORD_DTL_STAT, Z.SELF_GOODS_YN DESC, Z.SHOT_DELV_YN DESC, Z.SUPPLY_COMP_CD
+		<if test='frontGb == "P"'>
 		<include refid="selectForPagingFooter"/>
+		</if>
 		</select>
 	
 	<select id="getReviewAttach" parameterType="Review" resultType="Review">
@@ -1175,6 +1191,7 @@
 			 , RA.ORG_FILE_NM
 			 , RA.SYS_FILE_NM
 			 , RA.KMC_KEY
+			 , RA.KUF_KEY
 			 , RA.FILE_GB
 			 , RA.DEL_YN
 		FROM TB_REVIEW R LEFT JOIN TB_REVIEW_ATTACH RA ON R.REVIEW_SQ = RA.REVIEW_SQ 

+ 6 - 5
src/main/java/com/style24/persistence/mybatis/shop/TsfSocial.xml

@@ -87,8 +87,9 @@
 		     GROUP BY GOODS_CD
 		)
 		, TAB_STOCK AS (
-		    SELECT G.GOODS_CD
-		         , SUM(S.CURR_STOCK_QTY - S.BASE_STOCK_QTY) AS STOCK_QTY_SUM
+		     SELECT G.GOODS_CD
+		         , SUM(case WHEN S.SOLDOUT_YN = 'Y' THEN 0
+		                    ELSE S.CURR_STOCK_QTY - S.BASE_STOCK_QTY END ) AS STOCK_QTY_SUM
 		         , MIN(CASE WHEN S.SOLDOUT_YN = 'N' THEN S.OPT_CD ELSE 'XXX' END) AS OPT_CD 
 		    FROM   TAB_GOODS G
 		         , VW_STOCK S
@@ -98,15 +99,15 @@
 		    GROUP  BY G.GOODS_CD
 		    UNION ALL 
 		    SELECT G.GOODS_CD
-		         , SUM(S.CURR_STOCK_QTY - S.BASE_STOCK_QTY) AS STOCK_QTY_SUM
+		         , SUM(caSE WHEN S.SOLDOUT_YN = 'Y' THEN 0
+		                    ELSE S.CURR_STOCK_QTY - S.BASE_STOCK_QTY END ) AS STOCK_QTY_SUM
 		         , MIN(CASE WHEN S.SOLDOUT_YN = 'N' THEN S.OPT_CD ELSE 'XXX' END) AS OPT_CD 
 		    FROM   TAB_GOODS G
 		         , VW_STOCK_COMPOSE S
 		    WHERE  G.GOODS_CD = S.GOODS_CD
 		    AND    G.GOODS_TYPE != 'G056_N'
 		    AND    S.DISP_YN = 'Y' /*노출하는상품만*/
-		    GROUP  BY G.GOODS_CD
-		)
+		    GROUP  BY G.GOODS_CD		)
 		SELECT G.BRAND_GROUP_NM
 		     , G.GOODS_CD
 		     , FN_GET_GOODS_NM(G.GOODS_NM,G.GOODS_GB,G.FOREIGN_BUY_YN,G.PARALLEL_IMPORT_YN,G.ORDER_MADE_YN) AS GOODS_FULL_NM /*상품FULL명*/

+ 16 - 3
src/main/resources/config/application-style.yml

@@ -8,10 +8,23 @@ spring:
                 max-active: 10
                 max-idle: 10
                 min-idle: 2
-        host: 172.30.87.5
+#        host: 172.30.87.5
+#        port: 6379
+#        password: MdxpyGtipZSci6VhTpFdklXxb4Qv7zxEq3Jqg3ULekg=
+        host: 172.30.90.111
         port: 6379
-        password: MdxpyGtipZSci6VhTpFdklXxb4Qv7zxEq3Jqg3ULekg=
-
+        password:
+        cluster:
+            nodes:
+                172.30.90.111:6379
+                172.30.90.112:6379
+                172.30.90.113:6379
+                172.30.90.111:6380
+                172.30.90.112:6380
+                172.30.90.113:6380
+                172.30.90.111:6381
+                172.30.90.112:6381
+                172.30.90.113:6381
 # SSL Server
 has-ssl: false
 

+ 1 - 1
src/main/webapp/WEB-INF/views/mob/cart/CartListFormMob.html

@@ -245,7 +245,7 @@
 
 		// 다다익선 정보
 		let qtyTmtbSq = $(obj).parent().parent().parent().parent().find("input[name=qtyTmtbSq]").val();
-		let amtTmtbSq = $(obj).parent().parent().parent().parent().find("input[name=qtyTmtbSq]").val();
+		let amtTmtbSq = $(obj).parent().parent().parent().parent().find("input[name=amtTmtbSq]").val();
 		let qtyTmtbYn = $(obj).parent().parent().parent().parent().find("input[name=applyQtySectionYn]").val();
 		let amtTmtbYn = $(obj).parent().parent().parent().parent().find("input[name=applyAmtSectionYn]").val();
 		let goodsCd = $(obj).parent().parent().parent().parent().find("input[name=goodsCd]").val();

+ 670 - 0
src/main/webapp/WEB-INF/views/mob/mypage/MypageReviewCreateFormMob.html

@@ -0,0 +1,670 @@
+<!DOCTYPE html>
+<html lang="ko"
+	xmlns:th="http://www.thymeleaf.org"
+	xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
+	layout:decorator="mob/common/layout/MypageLayoutMob">
+<!--
+ *******************************************************************************
+ * @source  : MypageReviewCreateFormMob.html
+ * @desc    : 마이페이지 > 리뷰 작성Page
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2020 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.05.11   sowon     최초 작성
+ *******************************************************************************
+ -->
+<body>
+<th:block layout:fragment="content">
+<main role="" id="" class="container my">
+			<section class="content review">
+				<form class="form_wrap" id="reviewForm"  th:action="@{'/mypage/review/save'}" th:with="imageUrl=${@environment.getProperty('upload.goods.view')}">
+				<input type="hidden" name="ordNo" th:value="${reviewInfo.ordNo}">
+						<input type="hidden" name="ordDtlNo" th:value="${reviewInfo.ordDtlNo}">
+						<input type="hidden" name="goodsCd" th:value="${reviewInfo.goodsCd}">
+						<input type="hidden" name="custNo" th:value="${reviewInfo.custNo}">
+						<input type="hidden" name="reviewStat" th:value="${reviewStat}">
+						<input type="hidden" name="reviewSq" th:if="${reviewStat == 'u'}" th:value="${reviewInfo.reviewSq}">
+					<div class="inner bg_gray">
+						<ul class="note">
+							<li>일반 리뷰 작성시 150P, 일반 리뷰 작성시 150P, 포토/영상 리뷰는 350P가 추가 적립됩니다.</li>
+							<li>월 최대 10,000P까지 적립 가능합니다.(합산 후 월 1회 지급)</li>
+							<li>베스트 리뷰로 선정되면 10,000P가 추가 적립됩니다.</li>
+							<li>리뷰 작성시 욕설, 비방, 선정적인 내용 등이 있을 경우 통보 없이관리자에 의해 삭제 될 수 있습니다.</li>
+						</ul>
+					</div>
+					<div class="inner">
+						<div class="part_goods">
+							<!-- 굿즈_리뷰 -->
+							<div class="goods_section">
+								<div class="goods_detail">
+									<a href="">
+										<div class="thumb_box">
+											<img th:src="${imageUrl + '/' + reviewInfo.sysImgNm}" alt="tmp_pdClickother1">
+										</div>
+										<div class="info_box">
+											<div class="od_name">
+												<div class="goods_date"><span class="date" th:text="${reviewInfo.payDt}"></span>구매</div>
+												<div class="brand">
+													<span th:text="${reviewInfo.brandEnm}"></span>
+												</div>
+												<div class="name" th:text="${reviewInfo.goodsNm}"></div>
+											</div>
+											<div class="od_opt">
+												<div class="option" id="optionDiv">
+													<!-- <em>Black</em><em>XXL</em> -->
+												</div>
+											</div>
+										</div>
+									</a>
+								</div>											
+							</div>
+							<!-- //굿즈_리뷰 -->
+						</div>
+					</div>
+					<div class="inner">
+						<div class="titWrap">
+							<div class="">별점을 선택해주세요</div>
+						</div>
+						<div class="review_score">
+							<div id="star_grade">
+								<input type="hidden" id="score" name="score">
+								<button type="button" id="starBtn"></button>
+								<button type="button" id="starBtn"></button>
+								<button type="button" id="starBtn"></button>
+								<button type="button" id="starBtn"></button>
+								<button type="button" id="starBtn"></button>
+							</div>
+						</div>
+					</div>
+					<div class="inner">
+						<div class="my_edit_section">
+							<div class="tbl_wrap">
+								<div class="tbl_tit"> 
+									<h3>키/몸무게</h3>
+								</div>
+								<div class="tbl">
+									<div class="tbl_row">
+										<table>
+											<colgroup>
+												<col width="*">
+											</colgroup>   
+											<tr>
+												<th>키</th>
+												<td>
+													<div class="form_field rev_height">
+														<input type="tel" class="form_control" oninput='handleOnInput(this, 3)' id="height" name="height" data-valid-type="numeric" placeholder="키를 숫자만 입력해주세요."><span>cm</span>
+													</div>
+												</td>
+											</tr>
+											<tr>
+												<th>몸무게</th>
+												<td>
+													<div class="form_field rev_height">
+														<input type="tel" class="form_control" oninput='handleOnInput(this, 3)' id="weight" name="weight" data-valid-type="numeric" placeholder="몸무게를 숫자만 입력해주세요."><span>kg</span>
+													</div>
+												</td>
+											</tr>
+										</table>
+									</div>
+								</div>
+							</div>
+							<th:block th:if="${reviewInfo.sizeGb == 'T' or reviewInfo.sizeGb == 'B' or reviewInfo.sizeGb == 'S'}">
+							<div class="tbl_wrap">
+								<div class="tbl_tit"> 
+									<h3>상품평가</h3>
+								</div>
+								<div class="tbl">
+									<div class="tbl_row">
+										<table data-name="rating">
+											<colgroup>
+												<col width="*">
+											</colgroup>
+											<th:block th:if="${reviewInfo.sizeGb == 'T' or reviewInfo.sizeGb == 'B' or reviewInfo.sizeGb == 'S'}">    
+											<tr>
+												<th>사이즈</th>
+												<td>
+													<div class="form_field review_radio">
+														<div class="radio_li">
+															<input id="chk-1" type="radio" name="scoreSize" value="1"><label for="chk-1"> <span>작음</span></label>
+														</div>
+														<div class="radio_li">
+															<input id="chk-2" type="radio" name="scoreSize" value="2"><label for="chk-2"> <span>딱맞음</span></label>
+														</div>
+														<div class="radio_li">
+															<input id="chk-3" type="radio" name="scoreSize" value="3"><label for="chk-3"> <span>큼</span></label>
+														</div>
+													</div>
+												</td>
+											</tr>
+											<tr>
+												<th>컬러</th>
+												<td>
+													<div class="form_field review_radio">
+														<div class="radio_li">
+															<input id="chk-4" type="radio" name="scoreColor" value="1"><label for="chk-4"> <span>밝음</span></label>
+														</div>
+														<div class="radio_li">
+															<input id="chk-5" type="radio" name="scoreColor" value="2"><label for="chk-5"> <span>똑같음</span></label>
+														</div>
+														<div class="radio_li">
+															<input id="chk-6" type="radio" name="scoreColor" value="3"><label for="chk-6"> <span>어두움</span></label>
+														</div>
+													</div>
+												</td>
+											</tr>
+											</th:block>
+											<th:block th:if="${reviewInfo.sizeGb == 'T' or reviewInfo.sizeGb == 'B'}"> 
+											<tr>
+												<th>핏</th>
+												<td>
+													<div class="form_field review_radio">
+														<div class="radio_li">
+															<input id="chk-7" type="radio" name="scoreFit" value="1"><label for="chk-7"> <span>슬림</span></label>
+														</div>
+														<div class="radio_li">
+															<input id="chk-8" type="radio" name="scoreFit" value="2"><label for="chk-8"> <span>레귤러</span></label>
+														</div>
+														<div class="radio_li">
+															<input id="chk-9" type="radio" name="scoreFit" value="3"><label for="chk-9"> <span>오버</span></label>
+														</div>
+													</div>
+												</td>
+											</tr>
+											<tr>
+												<th>두께감</th>
+												<td>
+													<div class="form_field review_radio">
+														<div class="radio_li">
+															<input id="chk-10" type="radio" name="scoreThick" value="1"><label for="chk-10"> <span>얇음</span></label>
+														</div>
+														<div class="radio_li">
+															<input id="chk-11" type="radio" name="scoreThick" value="2"><label for="chk-11"> <span>적당함</span></label>
+														</div>
+														<div class="radio_li">
+															<input id="chk-12" type="radio" name="scoreThick" value="3"><label for="chk-12"> <span>도톰함</span></label>
+														</div>
+													</div>
+												</td>
+											</tr>
+											</th:block>
+											<th:block th:if="${reviewInfo.sizeGb == 'S'}"> 
+											<tr>
+												<th>무게감</th>
+												<td>
+													<div class="form_field review_radio">
+														<div class="radio_li">
+															<input id="chk-13" type="radio" name="scoreWeight" value="1"><label for="chk-13"> <span>가벼움</span></label>
+														</div>
+														<div class="radio_li">
+															<input id="chk-14" type="radio" name="scoreWeight" value="2"><label for="chk-14"> <span>적당함</span></label>
+														</div>
+														<div class="radio_li">
+															<input id="chk-15" type="radio" name="scoreWeight" value="3"><label for="chk-15"> <span>무거움</span></label>
+														</div>
+													</div>
+												</td>
+											</tr>
+											<tr>
+												<th>볼너비</th>
+												<td>
+													<div class="form_field review_radio">
+														<div class="radio_li">
+															<input id="chk-16" type="radio" name="scoreBall" value="1"><label for="chk-16"> <span>작음</span></label>
+														</div>
+														<div class="radio_li">
+															<input id="chk-17" type="radio" name="scoreBall" value="2"><label for="chk-17"> <span>딱맞음</span></label>
+														</div>
+														<div class="radio_li">
+															<input id="chk-18" type="radio" name="scoreBall" value="3"><label for="chk-18"> <span>큼</span></label>
+														</div>
+													</div>
+												</td>
+											</tr>
+											</th:block>
+										</table>
+									</div>
+								</div>
+							</div>
+							</th:block>
+							<div class="tbl_wrap">
+								<div class="tbl">
+									<div class="tbl_row">
+										<table>
+											<colgroup>
+												<col width="*">
+											</colgroup>   
+											<tr>
+												<th>
+													<span class="tit">고객님의 리뷰가<br>다른 고객님께 도움이 될 수 있어요! </span>
+
+													<div class="tip_wrap tip2" >
+														<div class="tip_tit">?</div>
+														<div class="tip_contents">
+															<ul>
+																<li>리뷰 내용은 최소 10자 이상 입력해주세요.</li>
+																<li>상품과 무관하거나 스팸, 음란, 불법적인 내용의 리뷰는 통보없이 삭제되며, 지금된 포인트는 회수 될 수 있습니다.</li>
+															</ul>
+														</div>
+													</div>
+												</th>
+												<td>
+													<textarea class="doc_review" name="reviewContent" id="reviewContent" cols="30" rows="10"></textarea>
+													<p class="txt_cnt"><span id="review_cnt" class="c_primary">0</span>/500</p>
+												</td>
+											</tr>
+											<tr>
+												<th>
+													<span class="tit">포토/영상 첨부</span>
+												</th>
+												<td>
+													<div class="form_field">
+														<div class="imgUpload">
+															<label for="fileAdd" class="fileAdd" id="fileAdd_reply">업로드</label>
+															<input type="file" id="fileAdd" name="files" multiple="">
+															<!-- 첨부한 이미지가 반영될 곳, 실제 반영 시 해당 구역은 제거할 것 -->
+														</div>
+													</div>
+													<p class="review_desc">최대 10개까지 등록 가능</p>
+													<p class="review_desc">동영상 첨부 시 관리자 승인이 필요하여 바로 노출이 되지 않을 수 있습니다.</p>					
+												</td>
+											</tr>
+										</table>
+									</div>
+								</div>
+							</div>
+						</div>
+					</div>
+					<div class="inner">
+						<div class="goods_btn_wrap btn_group_flex">
+							<div><button type="button" id="btn_review_cancle" class="btn btn_default" onclick="reviewCancel()"><span>취소</span></button></div> 
+							<div th:if="${reviewStat == 'c'}"><button type="button" id="btn_review_confirm" class="btn btn_dark"  onclick="reviewCreate()"><span>등록</span></button></div> 
+							<div th:if="${reviewStat == 'u'}"><button type="button" id="btn_review_confirm" class="btn btn_dark"  onclick="reviewUpdate()"><span>수정</span></button></div> 
+						</div>
+					</div>
+				</form>
+			</section>
+		</main>
+<script type="text/javascript" src="/ux/plugins/gaga/gaga.kollus.js"></script>
+<script th:inline="javascript">
+let reviewList = [[${reviewInfo}]];
+let reviewStat = [[${reviewStat}]];
+let reviewAttach = [[${alreadyReviewAttach}]];
+let reviewUrl =[[${@environment.getProperty('upload.image.view')}]];
+
+//별점 class="on"
+var $starEls = $('#star_grade button#starBtn');
+var rate = 0;
+
+$starEls.each(function (index, el) {
+    $(el).on('click', function () {
+        rating(index);
+        $("#score").attr("value",index+1);
+    });
+});
+
+
+function rating(score) {
+    $starEls.each(function (i, el) {
+        if (i <= score) {
+            $(el).addClass('on');
+        } else {
+            $(el).removeClass('on');
+        }
+    });
+
+    rate = score + 1;
+}
+
+// 리뷰  취소
+var reviewCancel = function() {
+	
+	mcxDialog.confirm('취소하시겠습니까"?', {
+        cancelBtnText: "취소",
+        sureBtnText: "확인",
+        sureBtnClick: function(){
+        	cfnGoToPage(_PAGE_MYPAGE_REVIEW);
+        }
+    });
+}
+
+
+//리뷰 등록
+var reviewCreate = function () {
+	if($("#score").val()=='' || $("#score").val()==null){
+		mcxDialog.alert('별점을 선택하세요.');
+		return;
+	}
+	
+	if($("#reviewForm input[name=height]").val() == '' || $("#reviewForm input[name=height]").val() == null){
+		mcxDialog.alert('키를 입력하세요.');
+		return;
+	}
+	
+	if($("#reviewForm input[name=weight]").val() == '' || $("#reviewForm input[name=weight]").val() == null){
+		mcxDialog.alert('몸무게를 입력하세요.');
+		return;
+	} 
+	
+	
+	if(reviewList.sizeGb == 'T' || reviewList.sizeGb == 'B' || reviewList.sizeGb == 'S'){
+		if($('#reviewForm input:radio[name=scoreSize]:checked').length == 0){
+			mcxDialog.alert('상품 사이즈를 평가해주세요.');
+			return false;
+		}
+		
+		if($('#reviewForm input:radio[name=scoreColor]:checked').length == 0){
+			mcxDialog.alert('상품 컬러를 평가해주세요.');
+			return false;
+		}
+	}
+	
+	if(reviewList.sizeGb == 'T' || reviewList.sizeGb == 'B'){
+		if($('#reviewForm input:radio[name=scoreFit]:checked').length == 0){
+			mcxDialog.alert('상품 핏을 평가해주세요.');
+			return false;
+		}
+		if($('#reviewForm input:radio[name=scoreThick]:checked').length == 0){
+			mcxDialog.alert('상품 두께감을 평가해주세요.');
+			return false;
+		}	
+	}
+	
+	if(reviewList.sizeGb == 'S' ){
+		if($('#reviewForm input:radio[name=scoreWeight]:checked').length == 0){
+			mcxDialog.alert('상품 무게감을 평가해주세요.');
+			return false;
+		}
+		
+		if($('#reviewForm input:radio[name=scoreBall]:checked').length == 0){
+			mcxDialog.alert('상품 볼넓이를 평가해주세요.');
+			return false;
+		}
+	}
+	
+	if($('#reviewContent').val().length<10){
+		mcxDialog.alert("리뷰 내용을 10자 이상 입력해주세요.");
+		return false;
+	}
+	
+	
+	mcxDialog.confirm('리뷰를 등록하시겠습니까?', {
+     cancelBtnText: "취소",
+     sureBtnText: "확인",
+     sureBtnClick: function(){
+     	gagajf.ajaxFormSubmit($('#reviewForm').prop('action'), '#reviewForm', fnSaveCallback);
+     }
+ });
+	
+	
+}
+
+
+//리뷰 수정
+var reviewUpdate = function() {
+	
+	if($("#reviewForm input[name=height]").val() == '' || $("#reviewForm input[name=height]").val() == null){
+		mcxDialog.alert('키를 입력하세요.');
+		return;
+	}
+	
+	if($("#reviewForm input[name=weight]").val() == '' || $("#reviewForm input[name=weight]").val() == null){
+		mcxDialog.alert('몸무게를 입력하세요.');
+		return;
+	}
+
+	if($('#reviewContent').val().length<10){
+		mcxDialog.alert("리뷰 내용을 10자 이상 입력해주세요.");
+		return;
+	}
+	
+	mcxDialog.confirm('리뷰를 수정하시겠습니까"?', {
+     cancelBtnText: "취소",
+     sureBtnText: "확인",
+     sureBtnClick: function(){
+     	gagajf.ajaxFormSubmit("/mypage/review/update", '#reviewForm', fnUpdateCallback);
+     }
+ });
+	
+}
+var fnSaveCallback = function (result) {
+	if(result.status == "200"){
+		if (document.getElementsByName("kufKeyArr").length>0 || document.getElementsByName("orgFileNmArr").length>0) {
+			mcxDialog.confirm("상품리뷰를 등록 하였습니다. 350P 적립 예정입니다.", {
+				sureBtnText: "확인",
+				sureBtnClick: function() { 
+					cfnGoToPage(_PAGE_MYPAGE_REVIEW);
+				}
+			});
+		}else{
+			mcxDialog.confirm("상품리뷰를 등록 하였습니다. 150P 적립 예정입니다.", {
+				sureBtnText: "확인",
+				sureBtnClick: function() { 
+					cfnGoToPage(_PAGE_MYPAGE_REVIEW);
+				}
+			});
+		}
+	}
+}
+
+var fnUpdateCallback = function (result) {
+	if(result.status == "200"){
+		mcxDialog.confirm("상품 리뷰를 수정하였습니다.", {
+			sureBtnText: "확인",
+			sureBtnClick: function() { 
+				cfnGoToPage(_PAGE_MYPAGE_REVIEW);
+			}
+		}); 
+		
+	}
+}
+
+//header scroll
+$(document).on('click', '.tabIndex li a', function() {
+	
+	
+	var $this = $(this),
+		$tabList = $this.parents('ul'),
+		_idx = $this.closest('li').index();
+	
+	$tabList.children().eq(_idx).addClass('active').siblings().removeClass('active');
+	$tabList.next().children().eq(_idx).addClass('active').siblings().removeClass('active');
+});
+		
+$(function(){
+	
+	$('#htopTitle').text('리뷰 쓰기');
+	if (reviewList.goodsType == 'G056_S') {
+		$.each(reviewList.colorNmArr, function(index, option) {
+			$("#optionDiv").append('<em>'+reviewList.itemNmArr[index] + ' / ' + option + ' / ' + reviewList.optCd2Arr[index]+'</em>');
+		});
+	}else{
+		$(".option").append('<em>'+reviewList.optCd1+'</em><em>'+reviewList.optCd2+'</em>');
+	}
+	
+	 if(reviewStat=='u'){
+		 var reviewScore = reviewList.score-1;
+		 $("#score").val(reviewScore);
+		 rating(reviewScore);
+		$("#reviewForm input[name=height]").val(reviewList.height);
+		$("#reviewForm input[name=weight]").val(reviewList.weight);
+		$("#reviewForm textarea[name=reviewContent]").val(reviewList.reviewContent);
+		if(reviewList.scoreSize == "1"){
+			$('#reviewForm input:radio[name=scoreSize]:radio[value="1"]').prop('checked', true);
+		}else if(reviewList.scoreSize == "2"){
+			$('#reviewForm input:radio[name=scoreSize]:radio[value="2"]').prop('checked', true);
+		}else if(reviewList.scoreSize == "3"){
+			$('#reviewForm input:radio[name=scoreSize]:radio[value="3"]').prop('checked', true);
+		}
+		
+		if(reviewList.scoreColor == "1"){
+			$('#reviewForm input:radio[name=scoreColor]:radio[value="1"]').prop('checked', true);
+		}else if(reviewList.scoreColor == "2"){
+			$('#reviewForm input:radio[name=scoreColor]:radio[value="2"]').prop('checked', true);
+		}else if(reviewList.scoreColor == "3"){
+			$('#reviewForm input:radio[name=scoreColor]:radio[value="3"]').prop('checked', true);
+		}
+		
+		if(reviewList.scoreFit == "1"){
+			$('#reviewForm input:radio[name=scoreFit]:radio[value="1"]').prop('checked', true);
+		}else if(reviewList.scoreFit == "2"){
+			$('#reviewForm input:radio[name=scoreFit]:radio[value="2"]').prop('checked', true);
+		}else if(reviewList.scoreFit == "3"){
+			$('#reviewForm input:radio[name=scoreFit]:radio[value="3"]').prop('checked', true);
+		}
+		
+		if(reviewList.scoreThick == "1"){
+			$('#reviewForm input:radio[name=scoreThick]:radio[value="1"]').prop('checked', true);
+		}else if(reviewList.scoreThick == "2"){
+			$('#reviewForm input:radio[name=scoreThick]:radio[value="2"]').prop('checked', true);
+		}else if(reviewList.scoreThick == "3"){
+			$('#reviewForm input:radio[name=scoreThick]:radio[value="3"]').prop('checked', true);
+		}
+		
+		if(reviewList.scoreWeight == "1"){
+			$('#reviewForm input:radio[name=scoreWeight]:radio[value="1"]').prop('checked', true);
+		}else if(reviewList.scoreWeight == "2"){
+			$('#reviewForm input:radio[name=scoreWeight]:radio[value="2"]').prop('checked', true);
+		}else if(reviewList.scoreWeight == "3"){
+			$('#reviewForm input:radio[name=scoreWeight]:radio[value="3"]').prop('checked', true);
+		}
+		
+		if(reviewList.scoreBall == "1"){
+			$('#reviewForm input:radio[name=scoreBall]:radio[value="1"]').prop('checked', true);
+		}else if(reviewList.scoreBall == "2"){
+			$('#reviewForm input:radio[name=scoreBall]:radio[value="2"]').prop('checked', true);
+		}else if(reviewList.scoreBall == "3"){
+			$('#reviewForm input:radio[name=scoreBall]:radio[value="3"]').prop('checked', true);
+		}
+		
+		if(reviewAttach.length>0){
+			for (var i = 0; i < reviewAttach.length; i++) {
+				if(reviewAttach[i].reviewSq == reviewList.reviewSq){
+					if(reviewAttach[i].fileGb == "I"){
+						$("<span class=\"pics\">" +
+								"<img class=\"picsThumbs\" src=\"" + reviewUrl + '/' + reviewAttach[i].sysFileNm + "\" />" +
+								"<input type='hidden' name='orgFileNmArr' value='"+reviewAttach[i].orgFileNm+"'>" +
+								"<input type='hidden' name='sysFileNmArr' value='"+reviewAttach[i].sysFileNm+"'>" +
+								"<br/><span class=\"removes\">Removes image</span>" +
+								"</span>").insertAfter("#fileAdd");
+					}else{
+						$("<span class=\"pics\">" +
+								"<img class=\"picsThumbs\" />" +
+								"<input type='hidden' name='kmcKeyArr' value='" + reviewAttach[i].kmcKey + "'>" + 
+								"<input type='hidden' name='kufKeyArr' value='" + reviewAttach[i].kufKey + "'>" + 
+								"<br/><span class=\"removes\">Removes image</span>" +
+								"</span>").insertAfter("#fileAdd");
+					}
+				}
+				
+			}
+			$(".removes").click(function(){
+				$(this).parent(".pics").remove();
+			});
+			
+		}
+	} 
+	
+	$(window).scroll(function(){
+		var scroll = $(this).scrollTop();
+		var headerH = $(".header").height();
+		if ($(window).scrollTop() > headerH){
+			$(".header").addClass("minify");
+			return false;
+		}
+		else {
+			$(".header").removeClass("minify");
+			return false;
+		}
+	});
+
+	$('#star_grade button').click(function(){
+		$(this).parent().children("button").removeClass("on");  /* 별점의 on 클래스 전부 제거 */ 
+		$(this).addClass("on").prevAll("button").addClass("on"); /* 클릭한 별과, 그 앞 까지 별점에 on 클래스 추가 */
+		return false;
+	});
+
+	//리뷰 내용 글자 수 제한
+	$('.doc_review').keyup(function (e){
+		var content = $(this).val();
+		$('#review_cnt').html(content.length);
+		if (content.length > 500){
+			$(this).val(content.substring(0, 500));
+			$('#review_cnt').html("500");
+		}
+	});
+});
+
+$('#fileAdd').on('change', function() { fnChooseFile(this); });
+
+var fnChooseFile = function(obj) {
+	var picLength = $(".pics").length;
+	
+	// multiple 속성이 있으면 files에는 다수의 객체가 할당됨
+	var file = obj.files[0];
+	
+/* 	if (!gagajf.isNull(file.size) && Number(file.size) > (10 * 1000000)) {        
+		mcxDialog.alertC('이미지는 최대 10MB 이하 파일만 가능합니다.', {                          
+			sureBtnText: "확인",                                                    
+			sureBtnClick: function() {                                            
+				$(obj).parent('.imgUpload').find('.removes').trigger('click');    
+			}                                                                     
+		});                                                                       
+		return false;                                                             
+	}                 */                                                             
+
+	if (!gagajf.isNull(file.name)) {
+		var extension = "\.(jpg|jpeg|png)$";
+		if ((new RegExp(extension, "i")).test(file.name)) {
+			 gagajf.ajaxFileUpload('/common/file/upload?subDir=/review'
+						, file
+						, function(result) {
+							// 업로드한 파일명 설정
+							$(".pics").children().eq(0).append("<input type='hidden' name='orgFileNmArr' id='orgFileNm"+(picLength+1)+"' value='"+result.oldFileName+"'>");
+							$(".pics").children().eq(0).append("<input type='hidden' name='sysFileNmArr' id='sysFileNm"+(picLength+1)+"' value='"+result.newFileName+"'>");
+						}
+				); 
+		}else if((new RegExp("mp4", "i")).test(file.name)){
+			setTimeout(function(){
+				$(".pics").children().eq(0).append("<input type='hidden' name='kufKeyArr' id='kufKey"+(picLength+1)+"'>");
+				$(".pics").children().eq(0).append("<input type='hidden' name='kmcKeyArr' id='kmcKey"+(picLength+1)+"'>");
+				gagaKollus.upload('Review', file, $('#kufKey'+(picLength+1)));
+			}, 2000);
+		}else{
+			mcxDialog.alertC('첨부할 수 없는 파일 형식입니다.', {
+				sureBtnText: "확인",
+				sureBtnClick: function() {
+					$(obj).parent('.imgUpload').find('.removes').trigger('click');
+				}
+			});
+			return false;
+		}
+	}
+	// 이거 왜 안먹히지 
+
+	
+	// 파일 업로드
+/* 	 gagajf.ajaxFileUpload('/common/file/upload?subDir=/review'
+			, file
+			, function(result) {
+				// 업로드한 파일명 설정
+				$(".pics").children().eq(0).append("<input type='hidden' name='orgFileNmArr' id='orgFileNm"+(picLength+1)+"' value='"+result.oldFileName+"'>");
+				$(".pics").children().eq(0).append("<input type='hidden' name='sysFileNmArr' id='sysFileNm"+(picLength+1)+"' value='"+result.newFileName+"'>");
+			}
+	);   */
+}
+
+
+//210409_키, 몸무게 input 글자 수 제한
+function handleOnInput(el, maxlength) {
+		if(el.value.length > maxlength)  {
+			el.value = el.value.substr(0, maxlength);
+		}
+	}
+</script>
+</th:block>
+
+</body>
+</html>

+ 253 - 240
src/main/webapp/WEB-INF/views/mob/mypage/MypageReviewFormMob.html

@@ -60,26 +60,29 @@
 								</div>
 								<!-- tab_cont Start -->
 								<div class="inner" id="reviewList">
-									<div class="part_goods">
-										<!-- 굿즈_리뷰 -->
-										
-										<!-- //굿즈_리뷰 -->
-									</div>
+
 									<div class="nodata" id="nodata1" style="display: none;">
-									<div class="txt_box">
-										<p>
-											작성 가능한 리뷰가 없습니다.<br>
-										</p>
+										<div class="txt_box">
+											<p>
+												작성 가능한 리뷰가 없습니다.<br>
+											</p>
+										</div>
+									</div>
+									<div class="nodata" id="nodata2" style="display: none;">
+										<div class="txt_box">
+											<p>
+												작성한 리뷰가 없습니다.<br>
+											</p>
+										</div>
 									</div>
 								</div>
-							</div>
 								<!-- // tab_cont End -->
 							</div>
-							<div class="tab_cont ">
-								<!-- tab_cont Start -->
+<!-- 							<div class="tab_cont ">
+								tab_cont Start
 								<div class="inner">
 									<div class="part_goods">
-										<!-- 굿즈_리뷰 -->
+										굿즈_리뷰
 										<div class="goods_section">
 											<div class="goods_detail">
 												<a href="">
@@ -103,13 +106,13 @@
 												</a>
 											</div>											
 										</div>
-										<!-- //굿즈_리뷰 -->
+										//굿즈_리뷰
 									</div>
 									<div class="reviewMy">
 										<div class="info_box">
 											<div class="star_score">
 												<span class="star">
-													<em class="progbar" style="width:70%;"></em> <!-- 평점 style로 표기 -->
+													<em class="progbar" style="width:70%;"></em> 평점 style로 표기
 												</span>
 											</div>
 											<div class="writer">
@@ -136,7 +139,7 @@
 													<li>
 														<a href="">
 															<div class="pic">
-																<span class="thumb mov" style="background-image:url('/images/pc/thumb/tmp_pdLookbook3.jpg');"></span><!-- 동영상의 썸네일일 경우 mov 클래스 추가 -->
+																<span class="thumb mov" style="background-image:url('/images/pc/thumb/tmp_pdLookbook3.jpg');"></span>동영상의 썸네일일 경우 mov 클래스 추가
 															</div>
 														</a>
 													</li>
@@ -193,28 +196,18 @@
 												</div>
 											</div>
 										</div>
-										<!-- .reply_box가 노출될 경우, 삭제만 -->
+										.reply_box가 노출될 경우, 삭제만
 										<div class="goods_btn_wrap btn_group_flex">
 											<div><button type="button" class="btn btn_default"><span>리뷰 삭제</span></button></div>
 										</div>
 									</div>
 								</div>
-
-								<!-- // tab_cont End -->
-							</div>
+							</div> -->
 						</div>
 					</div>
 				</div>
 			</section>
 		</main>
-<form id="searchForm1" name="searchForm1" th:action="@{'/mypage/complete/review/list'}" th:method="post">
-	<input type="hidden" name="pageNo" value="1" />
-	<input type="hidden" name="pageSize" value="10" />
-</form>
-<form id="searchForm2" name="searchForm2" th:action="@{'/mypage/already/review/list'}" th:method="post">
-	<input type="hidden" name="pageNo2" value="1" />
-	<input type="hidden" name="pageSize2" value="10" />
-</form>
 <script src="/ux/plugins/jquery/jquery.history.min.js"></script>
 <script src="/ux/plugins/gaga/gaga.infinite.scrollLayer.js"></script>
 <script th:inline="javascript">
@@ -227,233 +220,253 @@
 		$("#alreadyReview").removeClass("active");
 		$("#completeReview").addClass("active");
 		$("#check_notice").hide();
+		$('#reviewList').html('');
+		var data = {};
+		var jsonData = JSON.stringify(data);
 		
-	})
-	
-	var fnGetInfiniteScrollCompleteDataList = function(pageNum) {
+		gagajf.ajaxJsonSubmit('/mypage/complete/review/list', jsonData,	function(result) {
+			if (result.dataList1 != null && result.dataList1.length > 0) {
+				
+				let html = '';
+				html += '	<div class="part_goods">';
+				$.each(result.dataList1, function(idx, item) {
+					html += '		<div class="goods_section">';
+					html += '			<div class="goods_detail">';
+					html += '				<a href="javascript:void(0)" onclick="cfnGoToGoodsDetail(\'' + item.goodsCd + '\')">';
+					html += '					<div class="thumb_box">';
+					html += '						<img src="' + imageUrl + '/' + item.sysImgNm + '" alt="tmp_pdClickother1">';
+					html += '					</div>';
+					html += '					<div class="info_box">';
+					html += '						<div class="od_name">';
+					html += '							<div class="goods_date"><span class="date">'+item.payDt+'</span> 구매</div>';
+					html += '							<div class="brand">';
+					html += '								<span>'+item.brandNm+'</span>';
+					html += '							</div>';
+					html += '							<div class="name">'+item.goodsNm+'</div>';
+					html += '						</div>';
+					html += '						<div class="od_opt">';
+					html += '							<div class="option">';
+					if (item.goodsType =='G056_S') {
+						$.each(item.colorNmArr, function (index2, option) {
+							html += '							<em>' + item.itemNmArr[index2] + ' / ' + option + '</em\n';
+						})
+					}else{
+						html += '							<em>'+item.colorNm+'</em>     ';
+					}
+					html += '							</div>';
+					html += '						</div>';
+					html += '					</div>';
+					html += '				</a>';
+					html += '			</div>';
+					html += '			<div class="goods_btn_wrap btn_group_flex">';
+					html += '				<div><button type="button" class="btn btn_default" onclick="fnReviewCreate('+item.ordNo+','+item.ordDtlNo+',\'' + item.goodsCd + '\')"><span>리뷰쓰기(</span><em>'+item.remainDt+'</em><span>일 남음)</span></button></div>';
+					html += '			</div>';
+					html += '		</div>';
+				});
+				html += '	</div>';
+				$('#reviewList').append(html);
+			}else{
+				$('#nodata1').show();
+			}
+		});
 	
-		$("#searchForm1 input[name=pageNo]").val(pageNum+1);
-		// 콜백함수인 gagaInfiniteScroll.jsonToHtml 에서는 fnDrawInfiniteScrollData 함수를 호출한다.
-		gagajf.ajaxFormSubmit("/mypage/complete/review/list", document.goodsReviewForm,  gagaInfiniteScroll.jsonToHtml);
-	}
+	})
 	
 	
 	$("#alreadyReview").click(function() {
 		$("#completeReview").removeClass("active");
 		$("#alreadyReview").addClass("active");
 		$("#check_notice").show();
-		
+		$('#reviewList').html('');
+		var data = {};
 		var jsonData = JSON.stringify(data);
 		gagajf.ajaxJsonSubmit('/mypage/already/review/list', jsonData,	function(result) {
-			if (result.dataList1 != null && result.dataList1.length > 0) {
-				$.each(result.dataList1, function(idx, item) {
-					let html = '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					html += '';
-					$('#reviewList').append(html);
-				})
+			if (result.dataList2 != null && result.dataList2.length > 0) {
+				let html = '';
+				$.each(result.dataList2, function(idx, item) {
+					html += '	<div class="part_goods">';
+					html += '		<div class="goods_section">';
+					html += '			<div class="goods_detail">';
+					html += '				<a href="javascript:void(0)" onclick="cfnGoToGoodsDetail(\'' + item.goodsCd + '\')" >';
+					html += '					<div class="thumb_box">';
+					html += '						<img src="' + imageUrl + '/' + item.sysImgNm + '?RS=405" alt="tmp_pdClickother1">';
+					html += '					</div>';
+					html += '					<div class="info_box">';
+					html += '						<div class="od_name">';
+					html += '							<div class="goods_date"><span class="date">'+item.payDt+'</span>구매</div>';
+					html += '							<div class="brand">';
+					html += '								<span>'+item.brandNm+'</span>';
+					html += '							</div>';
+					html += '							<div class="name">'+item.goodsNm+'</div>';
+					html += '						</div>';
+					html += '						<div class="od_opt">';
+					html += '							<div class="option">';
+					if (item.goodsType =='G056_S') {
+						$.each(item.colorNmArr, function (index2, option) {
+							html += '							<em>' + item.itemNmArr[index2] + ' / ' + option +'</em>\n';
+						})
+					}else{
+						html += '							<em>'+item.colorNm+'</em>     ';
+					}
+					html += '							</div>';
+					html += '						</div>';
+					html += '					</div>';
+					html += '				</a>';
+					html += '			</div>											';
+					html += '		</div>';
+					html += '	</div>';
+					html += '	<div class="reviewMy">';
+					html += '		<div class="info_box">';
+					html += '			<div class="star_score">';
+					html += '				<span class="star">';
+					html += '					<em class="progbar" style="width:'+(item.score*20)+'%;"></em> ';
+					html += '				</span>';
+					html += '			</div>';
+					html += '			<div class="writer">';
+					html += '				<span class="wr_date">'+item.regDt+'</span>';
+					html += '			</div>';
+					html += '		</div>';
+					html += '		<div class="response_box">';
+					html += '			<div>';
+					html += '				<dl>';
+					html += '					<div>';
+					html += '						<dt>구매옵션</dt>';
+					html += '						<dd>'+item.colorNm+'</dd>';
+					html += '					</div>';
+					html += '					<div>';
+					html += '						<dt>키/몸무게</dt>';
+					html += '						<dd>'+item.height+'cm/'+item.weight+'kg</dd>';
+					html += '					</div>';
+					html += '				</dl>';
+					html += '			</div>';
+					html += '		</div>';
+					if (attachList != null && attachList.length >0) {
+						html += '		<div class="photo_box">';
+						html += '			<div class="photo_list">';
+						html += '				<ul>';
+						for (var i = 0; i < attachList.length; i++) {
+							html += '					<li>';
+							html += '						<a>';
+							html += '							<div class="pic">';
+							if (attachList[i].fileGb == 'M') {
+								html += '								<span class="thumb mov" onclick="cfMypageReviewDetail(\''+item.goodsCd+'\', \'Y\',\''+item.reviewSq+'\');"  style="background-image:url(' + _kollusMediaUrl + '/' + attachList[i].kmcKey + '?player_version=html5);"></span>';
+							}else{
+								html += '								<span class="thumb" onclick="cfMypageReviewDetail(\''+item.goodsCd+'\', \'Y\',\''+item.reviewSq+'\');" style="background-image:url(' + reviewUrl + '/' + attachList[i].sysFileNm + ');"></span>';
+							}
+							
+							html += '							</div>';
+							html += '						</a>';
+							html += '					</li>';
+						}
+						html += '				</ul>';
+						html += '			</div>';
+						html += '		</div>';
+					}
+					html += '		<div class="txt_review_box" id="admin_'+item.reviewSq+'">';
+					html += '			<p>'+item.reviewContent+'</p>';
+					html += '		</div>';
+					html += '		<div  class="response_box2">';
+					html += '			<div>';
+					html += '				<dl class="clear">';
+					if (item.sizeGb == 'T' || item.sizeGb == 'B' || item.sizeGb == 'S') {
+						html += '					<div>';
+						html += '						<dt>사이즈</dt>';
+						html += '						<dd>'+item.scoreSize+'</dd>';
+						html += '					</div>';
+						html += '					<div>';
+						html += '						<dt>컬러</dt>';
+						html += '						<dd>'+item.scoreColor+'</dd>';
+						html += '					</div>';
+					}
+					if (item.sizeGb == 'T' || item.sizeGb == 'B') {
+						html += '					<div>';
+						html += '						<dt>핏</dt>';
+						html += '						<dd>'+item.scoreFit+'</dd>';
+						html += '					</div>';
+						html += '					<div>';
+						html += '						<dt>두께감</dt>';
+						html += '						<dd>'+item.scoreThick+'</dd>';
+						html += '					</div>';
+					}
+					if (item.sizeGb == 'S') {
+						html += '					<div>';
+						html += '						<dt>무게감</dt>';
+						html += '						<dd>'+item.scoreWeight+'</dd>';
+						html += '					</div>';
+						html += '					<div>';
+						html += '						<dt>볼넓이</dt>';
+						html += '						<dd>'+item.scoreBall+'</dd>';
+						html += '					</div>';
+					}
+					html += '				</dl>';
+					html += '			</div>';
+					html += '		</div>';
+					if (item.admRpl != null && item.admRpl != '') {
+						html += '		<div class="reply_box">';
+						html += '			<div class="reply">';
+						html += '				<div class="reply_writer">';
+						html += '					<span class="wr_name">관리자</span>';
+						html += '					<span class="wr_date">'+item.admRplDt+'</span>';
+						html += '				</div>';
+						html += '				<div class="reply_txt">';
+						html += '					<p>'+item.admRpl+'</p>';
+						html += '				</div>';
+						html += '			</div>';
+						html += '		</div>';
+					}
+					html += '		<div class="goods_btn_wrap btn_group_flex">';
+					if (item.admRpl == null || item.admRpl == '') {
+						html += '			<div><button type="button" id="btn_review_delete" class="btn btn_default" onclick="fnReviewUpdate('+item.ordNo+','+item.ordDtlNo+',\''+item.goodsCd+'\','+item.reviewSq+')"><span>리뷰 수정</span></button></div> ';
+					}
+					html += '			<div><button type="button" id="btn_review_delete" class="btn btn_default" onclick="fnDeleteReview('+item.reviewSq+')"><span>리뷰 삭제</span></button></div> ';
+					html += '		</div>';
+					html += '	</div>';
+				});
+				
+				$('#reviewList').append(html);
 			}else{
 				$('#nodata2').show();
 			}
 		});
 	
-	})
+	});
+	// 리뷰 수정
+	var fnReviewUpdate = function(obj1,obj2,obj3) {
+		let ordNo = obj1;
+		let ordDtlNo = obj2;
+		let goodsCd = obj3;
+		let reviewStat = 'u';
+		
+		$('#createReview input[name=ordNo]').val(ordNo);
+		$('#createReview input[name=ordDtlNo]').val(ordDtlNo);
+		$('#createReview input[name=goodsCd]').val(goodsCd);
+		$('#createReview input[name=reviewStat]').val(reviewStat);
+		
+		document.createReview.submit();
+		// cfnGoToPage(_PAGE_MYPAGE_CREATE_REVIEW + ordNo +'/'+ordDtlNo+'/'+goodsCd+'/'+reviewStat);
+	}
+	
+	// 리뷰삭제
+	var fnDeleteReview = function(obj) {
+		var data = {reviewSq : obj};
+				
+		var jsonData = JSON.stringify(data);
+
+		mcxDialog.confirm("작성한 리뷰를 삭제하시겠습니까?", {
+			cancelBtnText : "취소",
+			sureBtnText : "확인",
+			sureBtnClick : function() {
+
+				gagajf.ajaxJsonSubmit('/mypage/review/delete', jsonData, function(e) {
+					mcxDialog.alert("삭제되었습니다.");
+					$("#alrReview").text("("+e.alreadyReviewCount+")");
+					$("#comReview").text("("+e.completeReviewCount+")");
+					$("#alreadyReview").trigger('click');	
+				});
+			}
+		});
+	}
+	
 /*]]>*/
  
  $(document).ready(function() {

+ 1 - 1
src/main/webapp/WEB-INF/views/web/cart/CartListFormWeb.html

@@ -310,7 +310,7 @@
 
 		// 다다익선 정보
 		let qtyTmtbSq = $(obj).parent().parent().parent().parent().parent().parent().find("input[name=qtyTmtbSq]").val();
-		let amtTmtbSq = $(obj).parent().parent().parent().parent().parent().parent().find("input[name=qtyTmtbSq]").val();
+		let amtTmtbSq = $(obj).parent().parent().parent().parent().parent().parent().find("input[name=amtTmtbSq]").val();
 		let qtyTmtbYn = $(obj).parent().parent().parent().parent().parent().parent().find("input[name=applyQtySectionYn]").val();
 		let amtTmtbYn = $(obj).parent().parent().parent().parent().parent().parent().find("input[name=applyAmtSectionYn]").val();
 		let goodsCd = $(obj).parent().parent().parent().parent().parent().parent().find("input[name=goodsCd]").val();

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

@@ -127,7 +127,7 @@
 
 				<!-- 가로 긴 배너 슬라이드 -->
 				<!-- 브랜드 배너 -->
-				<th:block th:if="${contentsLoc=='006' || contentsLoc=='014'||contentsLoc=='015'||contentsLoc=='016}">
+				<th:block th:if="${contentsLoc=='006' || contentsLoc=='014'||contentsLoc=='015'||contentsLoc=='016'}">
 					<div class="content wide main_1stage">
 						<div class="cont_head dpnone">
 							<p class="t_c">배너 슬라이드</p>

+ 4 - 2
src/main/webapp/WEB-INF/views/web/mypage/MypageReviewCreateFormWeb.html

@@ -383,6 +383,7 @@ let reviewList = [[${reviewInfo}]];
 let reviewStat = [[${reviewStat}]];
 let reviewAttach = [[${alreadyReviewAttach}]];
 let reviewUrl =[[${@environment.getProperty('upload.image.view')}]];
+
 // 별점 class="on"
 var $starEls = $('#star button#starBtn');
 var rate = 0;
@@ -702,8 +703,9 @@ $(document).ready(function() {
 								"</span>").insertAfter("#fileAdd");
 					}else{
 						$("<span class=\"pics\">" +
-								"<img class=\"picsThumbs\" src=\"" + _kollusMediaUrl + '/' + attachList[i].kmcKey + "\" />" +
-								"<input type='hidden' name='kufKeyArr' value='" + attachList[i].kmcKey + "'>" + 
+								"<img class=\"picsThumbs\" />" +
+								"<input type='hidden' name='kmcKeyArr' value='" + reviewAttach[i].kmcKey + "'>" + 
+								"<input type='hidden' name='kufKeyArr' value='" + reviewAttach[i].kufKey + "'>" + 
 								"<br/><span class=\"removes\">Removes image</span>" +
 								"</span>").insertAfter("#fileAdd");
 					}

+ 16 - 7
src/main/webapp/WEB-INF/views/web/mypage/MypageReviewDetailFormWeb.html

@@ -187,13 +187,22 @@
 						}
 						fileGbClass = '';
 						if (reviewAttach.fileGb == "M") fileGbClass = "mov";
-				tag +='			<li>\n';
-				tag +='				<div class="pic '+activeClass+'"> \n'; <!-- 활성화시 active 클래스 추가 -->
-				tag +='					<span class="thumb" class="'+fileGbClass+'" style="background-image:url('+ _imgUrl + reviewAttach.sysFileNm +');\" >\n';<!-- 동영상의 썸네일일 경우 mov 클래스 추가 -->
-				tag +='					<img src="'+ _imgUrl + reviewAttach.sysFileNm +'" alt="">\n';
-				tag +='					</span>\n';
-				tag +='				</div>\n';
-				tag +='			</li>\n';
+						if (reviewAttach.fileGb == "M") {
+							tag +='			<li>\n';
+							tag +='				<div class="pic '+activeClass+'"> \n'; <!-- 활성화시 active 클래스 추가 -->
+							tag +='							<span class="thumb '+ fileGbClass +'"><iframe width="100%" height="100%" src="'+_kollusMediaUrl +'/'+reviewAttach.kmcKey +'?player_version=html5" frameborder="0" allowfullscreen webkitallowfullscreen mozallowfullscreen></iframe></span>\n';
+							tag +='				</div>\n';
+							tag +='			</li>\n';
+						}else{
+							tag +='			<li>\n';
+							tag +='				<div class="pic '+activeClass+'"> \n'; <!-- 활성화시 active 클래스 추가 -->
+							tag +='					<span class="thumb" class="'+fileGbClass+'" style="background-image:url('+ _imgUrl + reviewAttach.sysFileNm +');\" >\n';<!-- 동영상의 썸네일일 경우 mov 클래스 추가 -->
+							tag +='					<img src="'+ _imgUrl + reviewAttach.sysFileNm +'" alt="">\n';
+							tag +='					</span>\n';
+							tag +='				</div>\n';
+							tag +='			</li>\n';
+						}
+				
 					});
 				tag +='		</ul>\n';
 				tag +='	</div>\n';